@volter/game-editor 0.5.125 → 0.5.127

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 (306) hide show
  1. package/BUNDLED_NOTICES +45 -45
  2. package/catalog/entries/blender.json +2 -2
  3. package/catalog/entries/music.json +2 -2
  4. package/dist/.vite/manifest.json +2219 -2218
  5. package/dist/assets/{AssetBudgetPanel-BSgP_Ly5.js → AssetBudgetPanel-PD5Ly9CT.js} +3 -3
  6. package/dist/assets/{AudioViewer-B88kBiQH.js → AudioViewer-Q40_cmYq.js} +1 -1
  7. package/dist/assets/{CanvasBoardDocument-BmyDdzzT.js → CanvasBoardDocument-BBdEdhFm.js} +1 -1
  8. package/dist/assets/{CanvasSceneViewport-DN9DYpjz.js → CanvasSceneViewport-BJeFlMuc.js} +1 -1
  9. package/dist/assets/{ColorInput-D6i_QXM-.js → ColorInput-Cad8L0Ed.js} +1 -1
  10. package/dist/assets/{ColorPicker-VBKN9sk0.js → ColorPicker-DFs5jze4.js} +1 -1
  11. package/dist/assets/{EntityModelDocument-Bbp4eSk-.js → EntityModelDocument-CayVoiiM.js} +1 -1
  12. package/dist/assets/{EnvironmentAssetDocument-CHl6PCV6.js → EnvironmentAssetDocument-CV3BXxtQ.js} +1 -1
  13. package/dist/assets/{Fbo-BwAOPGSM.js → Fbo-Biv6Lrhl.js} +1 -1
  14. package/dist/assets/{GameplaySessionTimeline-DSCmUHiz.js → GameplaySessionTimeline-DIJVApAB.js} +1 -1
  15. package/dist/assets/{Gltf-GjdUJfpn.js → Gltf-CRUmmFxv.js} +1 -1
  16. package/dist/assets/{ImageViewer-RDOE-ikb.js → ImageViewer-gSGJ3OMb.js} +1 -1
  17. package/dist/assets/InspectorObjectPreview-DpCK9AEo.js +1 -0
  18. package/dist/assets/{JsonAssetDocument-y-ihqubn.js → JsonAssetDocument-P6W4QFdq.js} +1 -1
  19. package/dist/assets/{LiveModuleDocument-BRKWZS4J.js → LiveModuleDocument-Df4fCKjJ.js} +1 -1
  20. package/dist/assets/{LutAssetDocument-D6redjUn.js → LutAssetDocument-BxMT39rJ.js} +1 -1
  21. package/dist/assets/{ModelAssetDocument-DXcUg5-F.js → ModelAssetDocument-iydZwJm6.js} +1 -1
  22. package/dist/assets/{NonThreeAuthoringBootstrap-CpZS3Gow.js → NonThreeAuthoringBootstrap-n7HSxNdt.js} +1 -1
  23. package/dist/assets/{Object3DDocumentToolbar-C7g33hHW.js → Object3DDocumentToolbar-DPt8h35L.js} +1 -1
  24. package/dist/assets/Object3DDocumentViewport-DyqXdp2F.js +2 -0
  25. package/dist/assets/{Object3DPreview-CWZeky9X.js → Object3DPreview-BxyRQ29F.js} +1 -1
  26. package/dist/assets/{OnlineAssetDetail-Wm_N9tmK.js → OnlineAssetDetail-CqwqPoIr.js} +1 -1
  27. package/dist/assets/{OrbitControls-DqeA2OK1.js → OrbitControls-C6LQ4Pxi.js} +1 -1
  28. package/dist/assets/{OrthographicCamera-QGDXU8-_.js → OrthographicCamera-Bv8_A2mi.js} +1 -1
  29. package/dist/assets/{PerspectiveCamera-CzyDwUe8.js → PerspectiveCamera-D3r6Hnc8.js} +1 -1
  30. package/dist/assets/{PlayBar-BSCkbbWm.js → PlayBar-BZ7mY6yG.js} +1 -1
  31. package/dist/assets/{QuarksAssetDocument-C2d8g6QR.js → QuarksAssetDocument-CGvZL9FT.js} +1 -1
  32. package/dist/assets/{ReactCanvasControls-DZZEWbJH.js → ReactCanvasControls-DAiX7h2-.js} +1 -1
  33. package/dist/assets/{RootSelectionOverlay-BlDdfAyN.js → RootSelectionOverlay-CXVw9xAS.js} +1 -1
  34. package/dist/assets/{ShaderAssetDocument-BMIhoIDU.js → ShaderAssetDocument-CMrEhzOn.js} +1 -1
  35. package/dist/assets/{ShadowEditor-DJfc5awF.js → ShadowEditor-5kAPELQ2.js} +1 -1
  36. package/dist/assets/{SourceAssetViewer-CSS85AGm.js → SourceAssetViewer-BNMvYZgb.js} +1 -1
  37. package/dist/assets/{StageHost-BHQB10fP.js → StageHost-Bg2tw0U7.js} +2 -2
  38. package/dist/assets/{StoryPreviewMount-DtOeByMH.js → StoryPreviewMount-D3R8uVtn.js} +1 -1
  39. package/dist/assets/{ThreeBoardDocument-CU7hSmxx.js → ThreeBoardDocument-B6eFjrJd.js} +2 -2
  40. package/dist/assets/{ThreeIsolationSceneContent-CZFEUx5D.js → ThreeIsolationSceneContent-ChDzjYPl.js} +1 -1
  41. package/dist/assets/{ToolObject3DPreview-BZ-bqJjM.js → ToolObject3DPreview-CHgTtmL3.js} +1 -1
  42. package/dist/assets/{Toolbar-bpjNJw1o.js → Toolbar-DkvknKyY.js} +1 -1
  43. package/dist/assets/{TransientHint-Cs1xJsTR.js → TransientHint-BfLb1fyi.js} +1 -1
  44. package/dist/assets/{VideoViewer-DNcS3fPO.js → VideoViewer-B8RaJOtF.js} +1 -1
  45. package/dist/assets/{ViewportShadingMenu-BGdf_ugP.js → ViewportShadingMenu-B5j1MDef.js} +1 -1
  46. package/dist/assets/{active-ingest-Ddr-rqpl.js → active-ingest-R_div-Oj.js} +2 -2
  47. package/dist/assets/{animation-clock-BBk2Uf4j.js → animation-clock-OkUiSD6M.js} +1 -1
  48. package/dist/assets/{animation-mixers.service-q4aIDhxx.js → animation-mixers.service-DR98WDHt.js} +1 -1
  49. package/dist/assets/{animation-timeline.utility-D6rFf4EX.js → animation-timeline.utility-De6MGXwn.js} +1 -1
  50. package/dist/assets/{asset-budget-asset.menu-DEuaaKC5.js → asset-budget-asset.menu-Kt7mAPah.js} +1 -1
  51. package/dist/assets/{asset-budget.action-v70qmoCd.js → asset-budget.action-gtj2M3e4.js} +1 -1
  52. package/dist/assets/{asset-budget.document-BeuS8SRM.js → asset-budget.document-DE_v7Mpa.js} +1 -1
  53. package/dist/assets/{asset-budget.menu-bK7bDVj7.js → asset-budget.menu-C1PtQGYz.js} +1 -1
  54. package/dist/assets/{asset-editor-persistence-C8kiK_is.js → asset-editor-persistence-BrrBFKn0.js} +1 -1
  55. package/dist/assets/{asset-loaders-CZ_1eTic.js → asset-loaders-CUe2eH9D.js} +1 -1
  56. package/dist/assets/{asset-preview-Cck2dsj4.js → asset-preview-BlwxJaQK.js} +1 -1
  57. package/dist/assets/{audio-unlock.service-DzW-k8nv.js → audio-unlock.service-DTn3KONa.js} +1 -1
  58. package/dist/assets/{audio.utility-CZfoTgEQ.js → audio.utility-BJnmxTTI.js} +1 -1
  59. package/dist/assets/autoplay.service-D8gOha8F.js +1 -0
  60. package/dist/assets/{babylon-authoring-adapter-B1-f9m-3.js → babylon-authoring-adapter-D1NipHtB.js} +1 -1
  61. package/dist/assets/binding-resolver-Bpe3oTrY.js +2 -0
  62. package/dist/assets/{blender-node-editor.document-gGXQ4eC4.js → blender-node-editor.document-MfNbaeLR.js} +1 -1
  63. package/dist/assets/{blender-properties-tab-_2HlBre8.js → blender-properties-tab-B779fz1Q.js} +1 -1
  64. package/dist/assets/blender-runtime-host-CtCtgqOL.js +7 -0
  65. package/dist/assets/{blender-runtime-skin-V9L1oa_d.js → blender-runtime-skin-CKHCTsry.js} +1 -1
  66. package/dist/assets/{blender-runtime.document-YfVgb0xw.js → blender-runtime.document-Ckdh3HKB.js} +1 -1
  67. package/dist/assets/{blender-screenshot.menu-DJW5wTB1.js → blender-screenshot.menu-ChP92jI-.js} +1 -1
  68. package/dist/assets/{blender-timeline.document-nci9H4b6.js → blender-timeline.document-DdyfjgSk.js} +1 -1
  69. package/dist/assets/{blender-uv-editor.document-hAy3fFV_.js → blender-uv-editor.document-DU_1bKdH.js} +1 -1
  70. package/dist/assets/{blender-version.status-IBwLAxXR.js → blender-version.status-BJq9fepS.js} +1 -1
  71. package/dist/assets/{blender.command-B_7KUtv7.js → blender.command-6IlfjjJi.js} +1 -1
  72. package/dist/assets/{board-guides-CLF_VLvL.js → board-guides-DiAs0DMA.js} +1 -1
  73. package/dist/assets/{bridge.command-DgsgKZa4.js → bridge.command-B9N3cMbg.js} +3 -3
  74. package/dist/assets/{browserAll-DnBssp_8.js → browserAll-D7Kd6srk.js} +1 -1
  75. package/dist/assets/{build-player.document-ue8n3WPX.js → build-player.document-Bl_0T2uA.js} +1 -1
  76. package/dist/assets/{build-profiles.document-BoxCYqFz.js → build-profiles.document-DNDwF9_Y.js} +1 -1
  77. package/dist/assets/{build-progress.status-DIVFq_Wm.js → build-progress.status-Boink4g8.js} +1 -1
  78. package/dist/assets/{build-session-LR4kIgAX.js → build-session-CuhlmGcx.js} +1 -1
  79. package/dist/assets/{build.action-B1Tw-IoK.js → build.action-CsMtOkDc.js} +1 -1
  80. package/dist/assets/{build.command-CtmztNo9.js → build.command-bhhxJk4Q.js} +1 -1
  81. package/dist/assets/{build.header-DDLkcelu.js → build.header-xDNZZU34.js} +1 -1
  82. package/dist/assets/{build.menu-BAwLd2ek.js → build.menu-BpjSystA.js} +1 -1
  83. package/dist/assets/{build.service-B-FnDXxN.js → build.service-BwluoAjv.js} +1 -1
  84. package/dist/assets/{camera-DuP48tI_.js → camera-hh5_JQfV.js} +1 -1
  85. package/dist/assets/{camera-runtime.inspector-CziDqZQb.js → camera-runtime.inspector-CUI-ssDo.js} +1 -1
  86. package/dist/assets/{canvas-design-mount-BABOs-lh.js → canvas-design-mount-CLCR9y6J.js} +3 -3
  87. package/dist/assets/{canvas-entry-runtime-Dcf218s2.js → canvas-entry-runtime-hVYG6wMW.js} +2 -2
  88. package/dist/assets/{canvas-preview-frames-DNGxYzHV.js → canvas-preview-frames-DLO3eNyZ.js} +1 -1
  89. package/dist/assets/{canvas-story-capture.service-BJpDDwVH.js → canvas-story-capture.service-B0_KeCoB.js} +2 -2
  90. package/dist/assets/{capability-coverage-6PwUP4oX.js → capability-coverage-Cchr0mQ3.js} +1 -1
  91. package/dist/assets/{collaboration-presence-BNBw47jA.js → collaboration-presence-Z5klZlI7.js} +1 -1
  92. package/dist/assets/{collider-DAF9Z2X4.js → collider-D1_IIE-F.js} +1 -1
  93. package/dist/assets/{component-board.service-ihMRMzy3.js → component-board.service-DRc9tSvn.js} +2 -2
  94. package/dist/assets/{component-board.service-khBXmwDQ.js → component-board.service-Jx7a2Yr-.js} +2 -2
  95. package/dist/assets/{component-board.service-Dv4HPrwH.js → component-board.service-LdfAanpB.js} +2 -2
  96. package/dist/assets/{component-contracts.service-CwplNZn-.js → component-contracts.service-B_JKJT9K.js} +1 -1
  97. package/dist/assets/{component-instance-root-9er-zSAY.js → component-instance-root-0OmhquKK.js} +1 -1
  98. package/dist/assets/{component-verbs.command-z-I0Ro4a.js → component-verbs.command-BAVS6__0.js} +1 -1
  99. package/dist/assets/{component-verbs.service-DwLwoLTJ.js → component-verbs.service-LM9zY1kI.js} +1 -1
  100. package/dist/assets/{config-DQzlvYVI.js → config-BUK1VABW.js} +2 -2
  101. package/dist/assets/{configurations-oKsIhTb-.js → configurations-N2mNw-tg.js} +1 -1
  102. package/dist/assets/{connection.status-BqYA7Z5e.js → connection.status-BzJ3fGF_.js} +1 -1
  103. package/dist/assets/{constraints.inspector-CVyV22tC.js → constraints.inspector-DxF0WKoV.js} +1 -1
  104. package/dist/assets/{content-bounds-DuSmUtY1.js → content-bounds-BZfH5RtN.js} +1 -1
  105. package/dist/assets/{contract-system-adapters-C66CNkAk.js → contract-system-adapters-BN9ohs9e.js} +1 -1
  106. package/dist/assets/{coverage.service-DwFCo4w8.js → coverage.service-CKeNuy0m.js} +1 -1
  107. package/dist/assets/{create-runtime-B2p75b5q.js → create-runtime-DIhNSHgr.js} +1 -1
  108. package/dist/assets/{curve-Dw4divzX.js → curve-DqPAAyLA.js} +1 -1
  109. package/dist/assets/{data-asset-BSxK3Y_h.js → data-asset-CUXIvdhH.js} +1 -1
  110. package/dist/assets/{data-ref-BUs2PbaF.js → data-ref-u6lwt2bh.js} +1 -1
  111. package/dist/assets/{debug-bridge-BdoOc1Jv.js → debug-bridge-0Ch5pR4P.js} +1 -1
  112. package/dist/assets/{debug-registry-BosYnV_Z.js → debug-registry-D9oD7FHT.js} +1 -1
  113. package/dist/assets/{deferred-ingest-play-BOUu0VgE.js → deferred-ingest-play-DObJUzph.js} +2 -2
  114. package/dist/assets/{design-time-canvas-mount-Ds-zq4CU.js → design-time-canvas-mount-kTm3g37R.js} +2 -2
  115. package/dist/assets/{design-time-layers-B0DteFiV.js → design-time-layers-Bf9v4K6S.js} +1 -1
  116. package/dist/assets/{design-time-mount.service-CrQoKi6N.js → design-time-mount.service-DdoDO9db.js} +2 -2
  117. package/dist/assets/{design-time-mount.service-CfOBd_-9.js → design-time-mount.service-DnfuDkLV.js} +2 -2
  118. package/dist/assets/{design-time-react-mount-B6BJiTeO.js → design-time-react-mount-BKngZyGo.js} +1 -1
  119. package/dist/assets/{document-preview-three-4FxFY9Cx.js → document-preview-three-Bfn5CPiD.js} +1 -1
  120. package/dist/assets/{dom-authoring-adapter-vourOD4d.js → dom-authoring-adapter-CKolNcI_.js} +1 -1
  121. package/dist/assets/{draco3d-Bk4s3p1H.js → draco3d-BkMn9cW2.js} +1 -1
  122. package/dist/assets/{edit-mode-audio.service-DRpU_FFF.js → edit-mode-audio.service-BXgbsw-L.js} +1 -1
  123. package/dist/assets/{edit-mode-authoring-z2Uu4CrX.js → edit-mode-authoring-Bx6SGIjL.js} +1 -1
  124. package/dist/assets/{edit-mode-networking.service-DhwnIn2o.js → edit-mode-networking.service-ZZETnS-m.js} +1 -1
  125. package/dist/assets/{editor-api-hojxsk8T.js → editor-api-MYo_NhPG.js} +1 -1
  126. package/dist/assets/{editor-layers-CSl6S15k.js → editor-layers-BDej9Ofa.js} +1 -1
  127. package/dist/assets/{editor-shell-store-DTfKHHYD.js → editor-shell-store-DmIN_bZc.js} +1 -1
  128. package/dist/assets/{entity-object-BO1_Qmt8.js → entity-object-sI9MDwQJ.js} +1 -1
  129. package/dist/assets/{events-156d8d12.esm-CYeuVCYr.js → events-156d8d12.esm-DmeaOP4r.js} +1 -1
  130. package/dist/assets/{extend-BedwRP5_.js → extend-Ci0OsrQT.js} +1 -1
  131. package/dist/assets/{fork-menu-BWmJjb_A.js → fork-menu-DBSCmy4Q.js} +1 -1
  132. package/dist/assets/{frame-debugger-store-Gu32HGGD.js → frame-debugger-store-BgELTeli.js} +1 -1
  133. package/dist/assets/{game-contract-seams-DQGwjObL.js → game-contract-seams-lha_cX4J.js} +1 -1
  134. package/dist/assets/{game-css-scope-transform-DYa5L1dk.js → game-css-scope-transform-BsQrnJad.js} +1 -1
  135. package/dist/assets/{game-document.service-CG1egqq7.js → game-document.service-CRVaHjov.js} +1 -1
  136. package/dist/assets/{game-eval.command-D9LYcy3m.js → game-eval.command-KKR6bdMi.js} +1 -1
  137. package/dist/assets/{game-module-access-DfYSoZjk.js → game-module-access-DYES1F1a.js} +1 -1
  138. package/dist/assets/{game-network-BZdvwJ0a.js → game-network-BtZZImhM.js} +3 -3
  139. package/dist/assets/{gameplay-export-BVH9PKaE.js → gameplay-export-NxNgfvAW.js} +1 -1
  140. package/dist/assets/{gameplay-replay-BLLppt8C.js → gameplay-replay-D4vTBXtR.js} +1 -1
  141. package/dist/assets/{gameplay.command-Djp-Aok2.js → gameplay.command-C3NnXZz5.js} +1 -1
  142. package/dist/assets/{generation-jobs-CsXRg1Tq.js → generation-jobs-B487f_2Z.js} +1 -1
  143. package/dist/assets/{generation.service-Cn7nGBEo.js → generation.service--yjaC5qx.js} +1 -1
  144. package/dist/assets/{generations-BqPU1fPO.js → generations-B76X3pOw.js} +1 -1
  145. package/dist/assets/{generations.status-CJUE5vVY.js → generations.status-iHwft6E7.js} +1 -1
  146. package/dist/assets/{hierarchy-marks-B4XzZe8e.js → hierarchy-marks-Bv3lFwvr.js} +1 -1
  147. package/dist/assets/{hosted-asset-materialization-iHAqPmZ-.js → hosted-asset-materialization-CI3cdlhz.js} +1 -1
  148. package/dist/assets/{index-COorqncb.js → index-CECK_ODc.js} +1 -1
  149. package/dist/assets/{index-C1mcZ_qc.js → index-CQ4zsFnG.js} +2 -2
  150. package/dist/assets/{index-C9f8SWpp.js → index-CxM9SCDb.js} +1 -1
  151. package/dist/assets/{index-X7FPqr0y.js → index-DM6wGhg6.js} +1 -1
  152. package/dist/assets/{index-CRj7mn0r.js → index-DmZJfzXE.js} +1 -1
  153. package/dist/assets/index-DzuOGwVB.js +1 -0
  154. package/dist/assets/{index-By0elT7x.js → index-hDH0MQtY.js} +1 -1
  155. package/dist/assets/{index-F91ICQ72.js → index-jbVAkbCC.js} +1 -1
  156. package/dist/assets/{index-r-FuctN5.js → index-jhDTJrJJ.js} +8 -8
  157. package/dist/assets/{index-CvVYuIWr.js → index-p9CDkug5.js} +1 -1
  158. package/dist/assets/{inference-diagnostics-D4Iu86es.js → inference-diagnostics-GzO30GlV.js} +1 -1
  159. package/dist/assets/{ingest-boot-viewport-DdHb1LeO.js → ingest-boot-viewport-eEXoWb4H.js} +1 -1
  160. package/dist/assets/{ingest-siblings-Cf-McyY_.js → ingest-siblings-DFv3-ybn.js} +1 -1
  161. package/dist/assets/{ingest-source-persistence-BwINDLYc.js → ingest-source-persistence-DrtMONfa.js} +1 -1
  162. package/dist/assets/{ingest.service-B8hV6YT4.js → ingest.service-Aqr5ECGV.js} +1 -1
  163. package/dist/assets/{inspect-sYciyXgK.js → inspect-CkG2Z66I.js} +1 -1
  164. package/dist/assets/instances.command-CnDpU3nG.js +1 -0
  165. package/dist/assets/{json-history-resource-DuT7scib.js → json-history-resource-sg0Vzf4w.js} +1 -1
  166. package/dist/assets/{layered-pick-1v6rbWkT.js → layered-pick-CEWefTxe.js} +1 -1
  167. package/dist/assets/{light-B3S378yT.js → light-BPEv67Pc.js} +1 -1
  168. package/dist/assets/{live-project-verbs-BnaccVli.js → live-project-verbs-CvPNGB8N.js} +1 -1
  169. package/dist/assets/{machine.document-BG1voYon.js → machine.document-Byg4Akxw.js} +1 -1
  170. package/dist/assets/{machines.finder-G0u80stL.js → machines.finder-Cu6MQ5CX.js} +1 -1
  171. package/dist/assets/{material-BCw5pv20.js → material-CCaJzzZ3.js} +1 -1
  172. package/dist/assets/{material-factory-zynl18MK.js → material-factory-BUMkjoYi.js} +1 -1
  173. package/dist/assets/{mesh-q9baasmD.js → mesh-CK1UuqDd.js} +1 -1
  174. package/dist/assets/{model-asset-sections.service-DL_H2GfH.js → model-asset-sections.service-iifouDM7.js} +1 -1
  175. package/dist/assets/{model-inspection-BbRgz6bo.js → model-inspection-DYuFlISa.js} +1 -1
  176. package/dist/assets/{model-thumbnail-DSDxaYgd.js → model-thumbnail-DQh5eEm6.js} +1 -1
  177. package/dist/assets/{models.finder-Dy-J43qR.js → models.finder-DK7FBN-1.js} +1 -1
  178. package/dist/assets/{module-mode-DNU-E0nG.js → module-mode-IVU14VtJ.js} +2 -2
  179. package/dist/assets/{mount-canvas-ingest-root-CQ4W-gUR.js → mount-canvas-ingest-root-CxkwEZ3U.js} +2 -2
  180. package/dist/assets/{mount-dom-ingest-root-COjIeP_R.js → mount-dom-ingest-root-CIxtLQlq.js} +2 -2
  181. package/dist/assets/{mount-ingest-root-CWdNrIZI.js → mount-ingest-root-0tfZf15A.js} +2 -2
  182. package/dist/assets/{mount-manifest-qdcv5b_0.js → mount-manifest-BjOZvESY.js} +1 -1
  183. package/dist/assets/{mount-three-ingest-root-DztDwD1p.js → mount-three-ingest-root-DohUuewD.js} +1 -1
  184. package/dist/assets/{mounted-authoring-DKn1UEnI.js → mounted-authoring-MD8wY1MJ.js} +1 -1
  185. package/dist/assets/{mounted-story-viewport-source-Dj51da9b.js → mounted-story-viewport-source-CXQknMtQ.js} +1 -1
  186. package/dist/assets/{native-debug-module-C5xRtrQJ.js → native-debug-module-B7pExEZQ.js} +1 -1
  187. package/dist/assets/{navigation-6i4sFL2e.js → navigation-oRKxBmNV.js} +1 -1
  188. package/dist/assets/{navmesh.menu-BeWFiE7d.js → navmesh.menu-B9VhK5IV.js} +1 -1
  189. package/dist/assets/{navmesh.service-y9zoEU38.js → navmesh.service-CyG9vb7p.js} +1 -1
  190. package/dist/assets/network-observer.service-BN1u0-oM.js +1 -0
  191. package/dist/assets/{network.utility-D_HsH5qj.js → network.utility-fKCL0zrN.js} +1 -1
  192. package/dist/assets/{object3d-document-session-registry-BGuY8anX.js → object3d-document-session-registry-BGN2Zn49.js} +2 -2
  193. package/dist/assets/{oid-transform-wqjngb9T.js → oid-transform-CGuM6vZg.js} +1 -1
  194. package/dist/assets/{particles-Cjg6XQEP.js → particles-CZSrHj3_.js} +1 -1
  195. package/dist/assets/{pixi-authoring-adapter-CMpVEOut.js → pixi-authoring-adapter-BGdlVTc3.js} +1 -1
  196. package/dist/assets/{pixi-live-write-target-714CPh5C.js → pixi-live-write-target-Bwu1bYXf.js} +1 -1
  197. package/dist/assets/{play.command-CIcot8mf.js → play.command-DOGPaB4C.js} +2 -2
  198. package/dist/assets/{presentation-DUidVzGI.js → presentation-BaYyBBj2.js} +1 -1
  199. package/dist/assets/{product-emJUqslE.js → product-nDWAhddV.js} +1 -1
  200. package/dist/assets/{profiler.action-Tb9vn81X.js → profiler.action-BJHf2xQo.js} +1 -1
  201. package/dist/assets/{profiler.menu-D2hXzK6K.js → profiler.menu-BNIQRpMB.js} +1 -1
  202. package/dist/assets/{profiler.utility-go2J_Rus.js → profiler.utility-SN9V1vO1.js} +1 -1
  203. package/dist/assets/{project-authoring-session-BvXLxd7m.js → project-authoring-session-BTy053IX.js} +2 -2
  204. package/dist/assets/{properties-bone-constraints.inspector-BZ_l2-st.js → properties-bone-constraints.inspector-CYpu4a1I.js} +1 -1
  205. package/dist/assets/{properties-bone.inspector-BZB51VMV.js → properties-bone.inspector-CoRR1NRF.js} +1 -1
  206. package/dist/assets/{properties-collection.inspector-C84oF9Qk.js → properties-collection.inspector-DbmGF5HE.js} +1 -1
  207. package/dist/assets/{properties-constraints.inspector-BZ5gjhkK.js → properties-constraints.inspector-DhDu-8JO.js} +1 -1
  208. package/dist/assets/{properties-data.inspector-BFRP4RBX.js → properties-data.inspector-C9hizZ5U.js} +1 -1
  209. package/dist/assets/{properties-material.inspector-Z0poViuH.js → properties-material.inspector-xw768wuX.js} +1 -1
  210. package/dist/assets/{properties-modifiers.inspector-e-sflJxR.js → properties-modifiers.inspector-CunyZ4p0.js} +1 -1
  211. package/dist/assets/{properties-object.inspector-B2MUPsKe.js → properties-object.inspector-DhR_ipG7.js} +1 -1
  212. package/dist/assets/{properties-output.inspector-Cl8ANiOA.js → properties-output.inspector-DiR-D4kZ.js} +1 -1
  213. package/dist/assets/{properties-particles.inspector-g8R7Qtlh.js → properties-particles.inspector-B3Wptqjp.js} +1 -1
  214. package/dist/assets/{properties-physics.inspector-BN1ScnFc.js → properties-physics.inspector-DczZfTN-.js} +1 -1
  215. package/dist/assets/{properties-render.inspector-BWmwuLsA.js → properties-render.inspector-qjHCxhXs.js} +1 -1
  216. package/dist/assets/{properties-scene.inspector-lBiqvysz.js → properties-scene.inspector-B-5goJJ1.js} +1 -1
  217. package/dist/assets/{properties-texture.inspector-CkIJP_1b.js → properties-texture.inspector-xNjlzod3.js} +1 -1
  218. package/dist/assets/{properties-view-layer.inspector-bWpA77BN.js → properties-view-layer.inspector-6onYZnR0.js} +1 -1
  219. package/dist/assets/{properties-world.inspector-C1GaZ5qr.js → properties-world.inspector-CJzAraZh.js} +1 -1
  220. package/dist/assets/{r3f-design-session-DbA50oqd.js → r3f-design-session-JBU21CBT.js} +2 -2
  221. package/dist/assets/{r3f-physics-binding-yDE4SctS.js → r3f-physics-binding-BQKS3eos.js} +1 -1
  222. package/dist/assets/{r3f-source-authoring-adapter-BCy1GWt8.js → r3f-source-authoring-adapter-CaPTplr2.js} +1 -1
  223. package/dist/assets/{react-canvas-navigation-S-IbbVDw.js → react-canvas-navigation-CuOqbCmx.js} +1 -1
  224. package/dist/assets/{react-inspector.service-Brsft7TJ.js → react-inspector.service-Biw-7Aph.js} +1 -1
  225. package/dist/assets/{react-story-board-B-wnwU1y.js → react-story-board-BS4wtpbe.js} +1 -1
  226. package/dist/assets/{react-three-fiber.esm-BrmmnfPq.js → react-three-fiber.esm-Z3njhfMT.js} +1 -1
  227. package/dist/assets/{react-three-rapier.esm-ChxOJQrA.js → react-three-rapier.esm-BPcU5vTr.js} +1 -1
  228. package/dist/assets/{react-world-authoring-adapter-CwnR93ZA.js → react-world-authoring-adapter-MA_K7IzV.js} +1 -1
  229. package/dist/assets/{realm-services-CsCNzgGK.js → realm-services-Dir-FaGM.js} +1 -1
  230. package/dist/assets/{reflection-probe-capture.inspector-DGhpuOM-.js → reflection-probe-capture.inspector-BzVk5nbq.js} +1 -1
  231. package/dist/assets/{registry-DVdPAH9u.js → registry-BRpQODGg.js} +1 -1
  232. package/dist/assets/{relative-import-specifier-DGpgcbeS.js → relative-import-specifier-BFDgw6rr.js} +1 -1
  233. package/dist/assets/{render-env-Dy3Kf2gg.js → render-env-g0xcT2gf.js} +1 -1
  234. package/dist/assets/{render-features-BjJcszQ2.js → render-features-ipsYrx5W.js} +1 -1
  235. package/dist/assets/{render-settings-CergIZPU.js → render-settings-Blt3RlHC.js} +1 -1
  236. package/dist/assets/{resolve-three-l_1-CXHl.js → resolve-three-D7kJDkec.js} +3 -3
  237. package/dist/assets/{root-seam-contract-9QibVtGc.js → root-seam-contract-TccLSDcM.js} +1 -1
  238. package/dist/assets/{run-selection-DOsR8mOQ.js → run-selection-BwneJGDD.js} +1 -1
  239. package/dist/assets/{scene-capture-CrqaUEgL.js → scene-capture-BbPvTNLW.js} +1 -1
  240. package/dist/assets/{scene-document.service-WItYUlyc.js → scene-document.service-EWLuGMAY.js} +2 -2
  241. package/dist/assets/{scene-framing-BxVkSlg3.js → scene-framing-CXQ4WFCe.js} +1 -1
  242. package/dist/assets/{seeded-random-BTqVP8Ii.js → seeded-random-CLC2hMDL.js} +1 -1
  243. package/dist/assets/{setup-renderer-B2da1u8k.js → setup-renderer-CwZuhttK.js} +1 -1
  244. package/dist/assets/{source-object3d-authoring-adapter-BKZ8oj3D.js → source-object3d-authoring-adapter-BRXDkWd8.js} +1 -1
  245. package/dist/assets/{source-persistence-backend-Con5sRZv.js → source-persistence-backend-BMcrOXF8.js} +1 -1
  246. package/dist/assets/{stage-keyboard-DGE-4Jpn.js → stage-keyboard-BoOvqz6F.js} +1 -1
  247. package/dist/assets/{stage-overlay-set-CKtVcxiT.js → stage-overlay-set-9gaaWRc5.js} +1 -1
  248. package/dist/assets/{stage-presence-markers-tb8yyWjE.js → stage-presence-markers-B5tMBPb2.js} +1 -1
  249. package/dist/assets/{stage-transform-tools-DdbkruEz.js → stage-transform-tools-CCzvYtKw.js} +1 -1
  250. package/dist/assets/{standard-viewport-dressing-BmMrgEAi.js → standard-viewport-dressing-BVHhIJE1.js} +1 -1
  251. package/dist/assets/{state-watch.action-BaJIFmyr.js → state-watch.action-BbRdD-Bw.js} +1 -1
  252. package/dist/assets/{state-watch.menu-ByA3Z9q-.js → state-watch.menu-D_JIVIMe.js} +1 -1
  253. package/dist/assets/{state-watch.utility-C2Sugdxe.js → state-watch.utility-BE-P2r3A.js} +1 -1
  254. package/dist/assets/{story-capture-D1xcKwr0.js → story-capture-BLl-A22X.js} +1 -1
  255. package/dist/assets/{story-documents-z4AFSTsH.js → story-documents-C441czJk.js} +1 -1
  256. package/dist/assets/{story-documents.service-gHigvC0Y.js → story-documents.service-CcG3J9jn.js} +1 -1
  257. package/dist/assets/{story-documents.service-BNFBCFet.js → story-documents.service-DAAUrl6I.js} +1 -1
  258. package/dist/assets/{story-media-presence-Ctf8e6_2.js → story-media-presence-BR_BcVt0.js} +1 -1
  259. package/dist/assets/{story-pixi-preview-B64Fbglp.js → story-pixi-preview-CM_XAwSW.js} +1 -1
  260. package/dist/assets/{story-presentation-CioG0A_4.js → story-presentation-CjP2otRK.js} +1 -1
  261. package/dist/assets/{story-three-preview-9zj9LGo3.js → story-three-preview-DUvRTcZc.js} +2 -2
  262. package/dist/assets/{studio-environment-CLaX3ria.js → studio-environment-D05pL7iQ.js} +1 -1
  263. package/dist/assets/{surface-state-CB3HOhtC.js → surface-state-0xXAxq6X.js} +1 -1
  264. package/dist/assets/{syntactic-prop-specs-Ce1hcg_C.js → syntactic-prop-specs-wO7dY0s8.js} +1 -1
  265. package/dist/assets/{team-playtest.service-D9-q_kQm.js → team-playtest.service-BPinahrE.js} +1 -1
  266. package/dist/assets/{three-BGqB-uVq.js → three-B_zMk3VF.js} +1 -1
  267. package/dist/assets/{three-authoring-adapter-BO7jI7-8.js → three-authoring-adapter-zwGjYwL0.js} +1 -1
  268. package/dist/assets/three-authoring.service-D7a7tS8M.js +2 -0
  269. package/dist/assets/{three-ingest-runtime-CzLs2nNM.js → three-ingest-runtime-CSsXqTWC.js} +1 -1
  270. package/dist/assets/{three-integration-qc8Reb1Y.js → three-integration-CXNucx1z.js} +2 -2
  271. package/dist/assets/three-integration.service-_6xudYSC.js +1 -0
  272. package/dist/assets/{three-projection-core-CFyOC4Fp.js → three-projection-core-BPR7YFcJ.js} +1 -1
  273. package/dist/assets/{three-state-z8gBcifl.js → three-state-C_HLiIZD.js} +1 -1
  274. package/dist/assets/{three-story-capture.service-c2yjqEby.js → three-story-capture.service-735_vEsy.js} +2 -2
  275. package/dist/assets/{three-story-model-St9GMyHp.js → three-story-model-BEisRrzq.js} +1 -1
  276. package/dist/assets/{three-viewport-presentation-BjXL1Zjv.js → three-viewport-presentation-Cfs5MJTy.js} +1 -1
  277. package/dist/assets/{transform-mode-request-C7qEF7HB.js → transform-mode-request-DsaxVuwS.js} +1 -1
  278. package/dist/assets/{transport-strip-e122YmzD.js → transport-strip-BEEkMmqy.js} +1 -1
  279. package/dist/assets/transport.header-Ds1930r5.js +1 -0
  280. package/dist/assets/{tuples-BUz9vxL7.js → tuples-CeiD4z2j.js} +1 -1
  281. package/dist/assets/{ui-board-document-DEqHspRN.js → ui-board-document-DcTv9Oo_.js} +2 -2
  282. package/dist/assets/{user-data-CPxKRceo.js → user-data-W3aDNol1.js} +1 -1
  283. package/dist/assets/{utility-view-state-B-gZQZIN.js → utility-view-state-IlWKtSFw.js} +1 -1
  284. package/dist/assets/{viewport-door-K-5DUW7m.js → viewport-door-C7l0uUHo.js} +1 -1
  285. package/dist/assets/{viewport-root-presentation-PTTfkoRf.js → viewport-root-presentation-DAw5nyWp.js} +1 -1
  286. package/dist/assets/{viewport-surface-status-BTqSVzg2.js → viewport-surface-status-gSFti1Lv.js} +1 -1
  287. package/dist/assets/{webworkerAll-DhL2BYVu.js → webworkerAll-Cf8x3KX0.js} +1 -1
  288. package/dist/assets/{workspace-arrangement-BOOvdRY-.js → workspace-arrangement-MmNy_T4o.js} +1 -1
  289. package/dist/assets/{world-documents-FtLCiCQe.js → world-documents-BNdPRrgb.js} +1 -1
  290. package/dist/assets/{world-root-stage-binding-FTlof7qc.js → world-root-stage-binding-BMAxQSOR.js} +1 -1
  291. package/dist/assets/{xstate-animation-binding-C06bUoKl.js → xstate-animation-binding-DZNqaKO9.js} +1 -1
  292. package/dist/assets/{xstate-animation-meta-h_xoeBCJ.js → xstate-animation-meta-KfEE-v3f.js} +1 -1
  293. package/dist-node/cli.js +16 -16
  294. package/package.json +16 -16
  295. package/template/vite.config.ts +1 -1
  296. package/dist/assets/InspectorObjectPreview-CkyqYsEo.js +0 -1
  297. package/dist/assets/Object3DDocumentViewport-CTE6_O8m.js +0 -2
  298. package/dist/assets/autoplay.service-Bd6xIgdv.js +0 -1
  299. package/dist/assets/binding-resolver-BcV7It57.js +0 -2
  300. package/dist/assets/blender-runtime-host-B3OHRnyq.js +0 -7
  301. package/dist/assets/index-bQE2NA0D.js +0 -1
  302. package/dist/assets/instances.command-Dj-9DRxh.js +0 -1
  303. package/dist/assets/network-observer.service-rq9XQOmV.js +0 -1
  304. package/dist/assets/three-authoring.service-CIJV-GMf.js +0 -2
  305. package/dist/assets/three-integration.service-DTYLz684.js +0 -1
  306. package/dist/assets/transport.header-C9_a76-g.js +0 -1
@@ -1 +1 @@
1
- import{a as l}from"./jsx-runtime-DPjLkJKQ.js";import{r as u}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{al as st,aN as Ze,a6 as St,hY as he,fz as qe,dp as Et,bB as de,r as Qe,cC as Xn,jT as Je,jU as Bn,d9 as Yn,jV as ze,jW as De,jX as Ie,aM as Oe,a7 as Le,jY as Hn,gK as Gn,jZ as An,j_ as Kn,j$ as Nn,k0 as K,e$ as _n,U as Wn,aD as Vn,d6 as Un,bq as Zn,br as qn,fD as Qn,k1 as re,k2 as tn,fP as T,k3 as ue,fS as xt,k4 as se,k5 as Dt,k6 as zt,fQ as Jn,fR as Me,fT as to,k7 as eo,k8 as no,k9 as oo,ka as io,kb as ro,kc as so,kd as Te,ke as ao,kf as lo,kg as co,kh as uo,ki as po,kj as fo,kk as xo,eX as en,fO as Fe,kl as ho,km as yo,kn as go,ko as vo,dE as mo,kp as bo,aG as nn,kq as wo,kr as So,ks as Eo,kt as ko,ku as Co,aH as Ro,fF as jo}from"./index-r-FuctN5.js";import{s as Po,i as zo,r as $e}from"./eyedropper-session-bjPXnfeX.js";import{a as Do,p as Io}from"./layered-pick-1v6rbWkT.js";import{z as Oo,j as Lo}from"./react-story-board-B-wnwU1y.js";import{v as ye}from"./viewport-editor-controls-BYaAZ_Ku.js";import{l as Mo}from"./inspect-sYciyXgK.js";const Xe=new WeakMap;let Be=0;function yt(e){let o=Xe.get(e);return o||(o={guides:[],listeners:new Set,revision:0},Xe.set(e,o)),o}function Vt(e){e.revision+=1;for(const o of e.listeners)o()}function To(e){return yt(e).guides}function Fo(e){return yt(e).revision}function $o(e,o){const n=yt(e);return n.listeners.add(o),()=>n.listeners.delete(o)}function Qi(e,o,n){Be+=1;const d=yt(e),r=`canvas-guide-${Be}`;return d.guides=[...d.guides,{id:r,axis:o,value:n}],Vt(d),r}function Ji(e,o,n){const d=yt(e),r=d.guides.map(h=>h.id===o?{...h,value:n}:h);r.every((h,s)=>h===d.guides[s])||(d.guides=r,Vt(d))}function tr(e,o){const n=yt(e),d=n.guides.filter(r=>r.id!==o);d.length!==n.guides.length&&(n.guides=d,Vt(n))}function er(e){const o=yt(e);o.guides.length!==0&&(o.guides=[],Vt(o))}const pe=new WeakMap,fe=new Set;let on=0;function ht(e){return pe.get(e)??null}function Xo(e,o){o?pe.set(e,o):pe.delete(e),on+=1;for(const n of fe)n()}function Bo(e){return fe.add(e),()=>fe.delete(e)}function Yo(){return on}const rn="canvasCreateNode";function Ho(){return Qe().projectLocalState.read(rn)??{favorites:[],recent:[]}}function Ye(e){Qe().projectLocalState.write(rn,e)}function sn(e,o){u.useEffect(()=>{const n=r=>{e.current?.contains(r.target)||o()},d=r=>{r.key==="Escape"&&o()};return document.addEventListener("pointerdown",n),document.addEventListener("keydown",d),()=>{document.removeEventListener("pointerdown",n),document.removeEventListener("keydown",d)}},[e,o])}function Go({state:e,onClose:o}){const[n,d]=u.useState("menu");return n==="create"?l.jsx(No,{state:e,onClose:o}):n==="instantiate"?l.jsx(_o,{state:e,onClose:o}):l.jsx(Ao,{state:e,onClose:o,onPick:d})}function Ao({state:e,onClose:o,onPick:n}){const d=u.useRef(null);return sn(d,o),l.jsx(he,{children:l.jsxs(qe,{ref:d,"aria-label":"Add node here","data-testid":"viewport-add-menu",style:{position:"fixed",left:e.x,top:e.y,minWidth:190,zIndex:Et.dropdown},children:[l.jsx(de,{"data-testid":"viewport-add-menu-item",disabled:e.kinds.length===0,title:e.kinds.length===0?"Nothing can be added under the selected node.":void 0,onSelect:()=>n("create"),children:"Add 2D Node Here…"}),e.adapter.assetDrop?l.jsx(de,{"data-testid":"viewport-add-menu-item",disabled:e.kinds.length===0,title:e.kinds.length===0?"Nothing can be added under the selected node.":void 0,onSelect:()=>n("instantiate"),children:"Instantiate Scene Here…"}):null]})})}function an({title:e,testId:o,onClose:n,children:d,footer:r}){const h=u.useRef(null);return sn(h,n),l.jsx(he,{children:l.jsx("div",{style:{position:"fixed",inset:0,zIndex:Et.dropdown,display:"flex",alignItems:"center",justifyContent:"center",background:"rgba(0, 0, 0, .35)"},children:l.jsxs("div",{ref:h,role:"dialog","aria-label":e,"data-testid":o,style:{width:640,maxWidth:"90vw",maxHeight:"80vh",display:"flex",flexDirection:"column",gap:8,padding:12,borderRadius:6,background:st.surface.raised,color:st.content.primary,boxShadow:"0 12px 40px rgba(0, 0, 0, .5)",fontSize:12},children:[l.jsx("div",{style:{fontWeight:600},children:e}),d,l.jsx("div",{style:{display:"flex",gap:8,justifyContent:"flex-end"},children:r})]})})})}const N={color:st.content.muted};function xe({selected:e,onPick:o,onOpen:n,testId:d,indent:r=0,children:h}){return l.jsx("div",{role:"option","aria-selected":e,"data-testid":d,onClick:o,onDoubleClick:n,style:{padding:`2px 6px 2px ${6+r*14}px`,borderRadius:3,cursor:"default",background:e?st.accent.muted:"transparent"},children:h})}function Ko(e,o){let n=0,d=e.extends?o.get(e.extends):void 0;for(;d&&n<16;)n+=1,d=d.extends?o.get(d.extends):void 0;return n}function ln(e){const[o,n]=u.useState(null),[d,r]=u.useState(null);return u.useEffect(()=>{if(!e)return;let h=!0;return Xn().then(s=>{if(h){if(!s.ok){r(s.reason),n([]);return}n(s.entries.filter(y=>y.surface==="canvas"&&y.exported&&y.contentKind!=="image"))}}),()=>{h=!1}},[e]),{components:o,failure:d}}const He=e=>`component:${e.path}#${e.name}`;function cn(e,o){const n=e.adapter.assetDrop;if(!n)return"This surface places no components.";const d={position:[e.at.x,e.at.y,0],item:{kind:"component",name:o.name,sourcePath:o.path,exportKind:o.defaultExport?"default":"named",surface:o.surface}},r=e.parentId??"";return n.accepts(r,o.path,d)?(Je(e.adapter,r,o.path,d),null):`${o.name} cannot be placed here.`}function No({state:e,onClose:o}){const[n,d]=u.useState(""),[r,h]=u.useState(Ho),[s,y]=u.useState({builtIn:!0,custom:!0}),[w,v]=u.useState(!1),[b,R]=u.useState(null),{components:P}=ln(!!e.adapter.assetDrop),I=e.kinds.find(x=>!x.extends),O=(P??[]).map(x=>({kind:He(x),label:x.name,...I?{extends:I.kind}:{},description:`A project component, from ${x.path}.`})),k=[...s.builtIn?e.kinds:[],...s.custom?O:[]],A=u.useMemo(()=>new Map([...e.kinds,...O].map(x=>[x.kind,x])),[e.kinds,P]),V=k.filter(x=>x.label.toLowerCase().includes(n.trim().toLowerCase())),[nt,U]=u.useState(e.kinds[0]?.kind??null),L=nt&&V.some(x=>x.kind===nt)?nt:V[0]?.kind??null,Z=L?A.get(L):void 0,ut=x=>{if(!x)return;const $=(P??[]).find(j=>He(j)===x);if($){const j=cn(e,$);if(j){R(j);return}}else e.structure.create(x,e.parentId??void 0,e.at).ack;Ye({...r,recent:[x,...r.recent.filter(j=>j!==x)].slice(0,10)}),o()},It=()=>{if(!L)return;const x=r.favorites.includes(L)?r.favorites.filter(j=>j!==L):[...r.favorites,L],$={...r,favorites:x};Ye($),h($)},Ot=(x,$)=>x.map(j=>A.get(j)).filter(j=>j!==void 0).map(j=>l.jsx(xe,{testId:$,selected:j.kind===L,onPick:()=>U(j.kind),onOpen:()=>ut(j.kind),children:j.label},j.kind));return l.jsx(an,{title:`Create New ${I?.label??"Node"}`,testId:"canvas-create-node-dialog",onClose:o,footer:l.jsxs(l.Fragment,{children:[l.jsx(St,{type:"button",variant:"ghost",onClick:o,children:"Cancel"}),l.jsx(St,{type:"button","data-testid":"canvas-create-node-create",disabled:!L,onClick:()=>ut(L),children:"Create"})]}),children:l.jsxs("div",{style:{display:"flex",gap:12,minHeight:240},children:[l.jsxs("div",{style:{width:170,display:"flex",flexDirection:"column",gap:4},children:[l.jsx("span",{style:N,children:"Favorites:"}),l.jsx("div",{"data-testid":"canvas-create-node-favorites",style:{flex:1},children:Ot(r.favorites,"canvas-create-node-favorite")}),l.jsx("span",{style:N,children:"Recent:"}),l.jsx("div",{"data-testid":"canvas-create-node-recent",style:{flex:1},children:Ot(r.recent,"canvas-create-node-recent-item")})]}),l.jsxs("div",{style:{flex:1,display:"flex",flexDirection:"column",gap:4},children:[l.jsx("span",{style:N,children:"Search:"}),l.jsxs("div",{style:{display:"flex",gap:4},children:[l.jsx(Ze,{"data-testid":"canvas-create-node-search",value:n,autoFocus:!0,onChange:x=>d(x.target.value),onKeyDown:x=>{if(x.key==="Enter"&&ut(L),x.key==="ArrowDown"||x.key==="ArrowUp"){x.preventDefault();const $=V.findIndex(Lt=>Lt.kind===L),j=V[Math.min(V.length-1,Math.max(0,$+(x.key==="ArrowDown"?1:-1)))];j&&U(j.kind)}},style:{flex:1}}),l.jsx(St,{type:"button",variant:"ghost","data-testid":"canvas-create-node-favorite-toggle","aria-pressed":L?r.favorites.includes(L):!1,title:"(Un)favorite selected item.",disabled:!L,onClick:It,children:L&&r.favorites.includes(L)?"★":"☆"})]}),l.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[l.jsx("span",{style:N,children:"Matches:"}),l.jsx("span",{style:{flex:1}}),l.jsx(St,{type:"button",variant:"ghost","data-testid":"canvas-create-node-filters","aria-haspopup":"menu","aria-expanded":w,onClick:()=>v(!w),children:"Filters"})]}),w?l.jsx("div",{role:"menu","data-testid":"canvas-create-node-filter-menu",style:{display:"flex",gap:12},children:[["builtIn","Show Built-in"],["custom","Show Custom"]].map(([x,$])=>l.jsxs("label",{role:"menuitemcheckbox","aria-checked":s[x],style:{display:"flex",gap:4},children:[l.jsx("input",{type:"checkbox","data-testid":`canvas-create-node-filter-${x}`,checked:s[x],onChange:()=>y({...s,[x]:!s[x]})}),$]},x))}):null,l.jsx("div",{role:"listbox","data-testid":"canvas-create-node-matches",style:{flex:1,overflow:"auto"},children:V.map(x=>l.jsx(xe,{testId:"canvas-create-node-match",indent:n.trim()===""?Ko(x,A):0,selected:x.kind===L,onPick:()=>U(x.kind),onOpen:()=>ut(x.kind),children:x.label},x.kind))}),l.jsx("span",{style:N,children:"Description:"}),b?l.jsx("span",{"data-testid":"canvas-create-node-failure",style:N,children:b}):null,l.jsx("div",{"data-testid":"canvas-create-node-description",style:{minHeight:36},children:Z?l.jsxs(l.Fragment,{children:[l.jsxs("div",{children:[Z.label,Z.extends?l.jsx("span",{style:N,children:` < ${A.get(Z.extends)?.label??Z.extends}`}):null]}),Z.description?l.jsx("div",{style:N,children:Z.description}):null]}):null})]})]})})}function _o({state:e,onClose:o}){const[n,d]=u.useState(""),[r,h]=u.useState(null),{components:s,failure:y}=ln(!0),[w,v]=u.useState(null),b=w??y,R=k=>`${k.path}#${k.name}`,P=(s??[]).filter(k=>`${k.name} ${k.path}`.toLowerCase().includes(n.trim().toLowerCase())),I=P.find(k=>R(k)===r)??P[0]??null,O=k=>{if(!k)return;const A=cn(e,k);if(A){v(A);return}o()};return l.jsxs(an,{title:"Instantiate Scene",testId:"canvas-instantiate-dialog",onClose:o,footer:l.jsxs(l.Fragment,{children:[l.jsx(St,{type:"button",variant:"ghost",onClick:o,children:"Cancel"}),l.jsx(St,{type:"button","data-testid":"canvas-instantiate-open",disabled:!I,onClick:()=>O(I),children:"Instantiate"})]}),children:[l.jsx("span",{style:N,children:"Search:"}),l.jsx(Ze,{"data-testid":"canvas-instantiate-search",value:n,autoFocus:!0,onChange:k=>d(k.target.value),onKeyDown:k=>{k.key==="Enter"&&O(I)}}),l.jsxs("div",{role:"listbox","data-testid":"canvas-instantiate-matches",style:{minHeight:160,overflow:"auto"},children:[s===null?l.jsx("span",{style:N,children:"Reading the project's components…"}):null,s!==null&&P.length===0?l.jsx("span",{style:N,children:"No canvas component matches."}):null,P.map(k=>l.jsxs(xe,{testId:"canvas-instantiate-match",selected:I!==null&&R(k)===R(I),onPick:()=>h(R(k)),onOpen:()=>O(k),children:[k.name," ",l.jsx("span",{style:N,children:k.path})]},R(k)))]}),b?l.jsx("span",{"data-testid":"canvas-instantiate-failure",style:N,children:b}):null]})}function Ge(e,o){for(const n of o){const d=K(e,n.id);if(!d)continue;const r={};n.x!==void 0&&(r.x=n.x),n.y!==void 0&&(r.y=n.y),Object.keys(r).length!==0&&(d.begin(n.id),d.apply(n.id,r),d.end(n.id))}}const Wo=[{op:"left",testId:"align-left",label:"Align left",icon:ze},{op:"hcenter",testId:"align-hcenter",label:"Align horizontal center",icon:De},{op:"right",testId:"align-right",label:"Align right",icon:Ie},{op:"top",testId:"align-top",label:"Align top",icon:ze,rotate:!0},{op:"vcenter",testId:"align-vcenter",label:"Align vertical center",icon:De,rotate:!0},{op:"bottom",testId:"align-bottom",label:"Align bottom",icon:Ie,rotate:!0}],Vo=[{axis:"horizontal",testId:"distribute-horizontal",label:"Distribute horizontally",icon:An},{axis:"vertical",testId:"distribute-vertical",label:"Distribute vertically",icon:Kn}];function Uo(e){const d=e.y-30-8;return{left:e.x,top:d<0?e.y+e.height+8:d}}function Zo({adapter:e,entries:o}){if(o.length<2)return null;const n=Bn(o.map(s=>s.rect));if(!n)return null;const{left:d,top:r}=Uo(n),h=o.length>=3;return l.jsxs(Yn,{label:"Align and distribute","data-testid":"align-toolbar",style:{position:"absolute",left:d,top:r,zIndex:Et.overlayLow,gap:2,padding:3},children:[Wo.map(({op:s,testId:y,label:w,icon:v,rotate:b})=>l.jsx(Oe,{"data-testid":y,title:w,"aria-label":w,variant:"ghost",size:"compact",onClick:()=>Ge(e,Hn(o,s)),children:l.jsx(Le,{icon:v,"aria-hidden":"true",style:b?{transform:"rotate(90deg)"}:void 0})},s)),h&&l.jsxs(l.Fragment,{children:[l.jsx(Gn,{}),Vo.map(({axis:s,testId:y,label:w,icon:v})=>l.jsx(Oe,{"data-testid":y,title:w,"aria-label":w,variant:"ghost",size:"compact",onClick:()=>Ge(e,Nn(o,s)),children:l.jsx(Le,{icon:v,"aria-hidden":"true"})},s))]})]})}function qo({rect:e,initialText:o,onCommit:n,onCancel:d}){const[r,h]=u.useState(o),s=u.useRef(null),y=u.useRef(!1);u.useEffect(()=>{const b=s.current;b&&(b.focus(),b.select())},[]);const w=()=>{y.current||(y.current=!0,n(r))},v=()=>{y.current||(y.current=!0,d())};return l.jsx(_n,{ref:s,"data-testid":"world-text-editor",value:r,onChange:b=>h(b.target.value),onBlur:w,onKeyDown:b=>{b.key==="Escape"?(b.stopPropagation(),v()):b.key==="Enter"&&!b.shiftKey&&(b.preventDefault(),w())},"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:Et.overlayLow,pointerEvents:"auto",resize:"none"}})}const Y=st.accent.default,Qo=Et.overlayLow,Wt=5;function Jo(e,o,n){return e?!1:ye()?.activate(o,n)??!1}function ti(e,o,n,d,r,h){const s=e?null:ye()?.hover(o,n)??null;r(s),h(s?null:d(o,n))}function ei(e,o){const n=e.hierarchy.node(o);return n?`${n.label}·${n.kind}`:o}function ni(e){return e instanceof nn?e.childAdapters().some(o=>!!o.adapter.rects):!!e.rects}function oi(e){const o=e instanceof nn?e.childAdapters():[{worldId:"",adapter:e}],n=[];for(const{worldId:d,adapter:r}of o)if(r.rects&&!(d&&Ro(d)))for(const h of jo(r)){if(r.inspector?.get(h,"locked")===!0)continue;const s=r.rects.rect(h);s&&n.push({id:h,rect:s})}return n}function ii(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 ri(e,o,n){if(!n)return[o];const d=new Set(e);return d.has(o)?d.delete(o):d.add(o),[...d]}function si(e,o,n,d){return o&&!!n&&(n.width>Wt||n.height>Wt)&&n?oi(e).filter(s=>ii(n,s.rect)).map(s=>s.id):d?null:[]}function ai(e,o,n,d){return e?"grabbing":o?"grab":n||d?"crosshair":"default"}function rt(e){try{e.currentTarget.setPointerCapture?.(e.pointerId)}catch{}}function ae(e){e.currentTarget.hasPointerCapture?.(e.pointerId)&&e.currentTarget.releasePointerCapture?.(e.pointerId)}function li(e,o){if(o!==null)return!1;const n=e.currentTarget.parentElement?.parentElement??null;return Lo(n,e.clientX,e.clientY)}function Kt(e,o,n){return!e||o===n||o==="combined"||o==="select"}function Ae(e,o){return{position:"absolute",left:e.x,top:e.y,width:e.width,height:e.height,borderStyle:"solid",borderColor:Y,borderWidth:o?2:1,background:o?`color-mix(in srgb, ${Y} 6%, transparent)`:"transparent",boxSizing:"border-box",pointerEvents:"none"}}function ci(e,o,n){if(!e)return{left:o.x+o.width/2-et/2,top:o.y-n-et/2};const d=(e.tl.x+e.tr.x)/2,r=(e.tl.y+e.tr.y)/2,h=e.tl.x-e.bl.x,s=e.tl.y-e.bl.y,y=Math.hypot(h,s)||1;return{left:d+h/y*n-et/2,top:r+s/y*n-et/2}}function di(e,o){const n=Math.hypot(e.tr.x-e.tl.x,e.tr.y-e.tl.y),d=Math.hypot(e.bl.x-e.tl.x,e.bl.y-e.tl.y),r=(e.tl.x+e.br.x)/2,h=(e.tl.y+e.br.y)/2;return{position:"absolute",left:r-n/2,top:h-d/2,width:n,height:d,transform:`rotate(${zt(e)}rad)`,transformOrigin:"center",borderStyle:"solid",borderColor:Y,borderWidth:o,background:"transparent",boxSizing:"border-box",pointerEvents:"none"}}function ui(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:Y,borderRadius:3,pointerEvents:"none",whiteSpace:"nowrap"}}const Nt=10,le=48;function ce(e,o){return{position:"absolute",left:e.x-Nt/2,top:e.y-Nt/2,width:Nt,height:Nt,background:"#fff",border:`1px solid ${Y}`,boxSizing:"border-box",cursor:o,pointerEvents:"auto"}}const et=12,dn=24;function pi(e){return{position:"absolute",left:e.x+e.width/2-et/2,top:e.y-dn-et/2,width:et,height:et,borderRadius:"50%",background:"#fff",border:`1px solid ${Y}`,boxSizing:"border-box",cursor:"grab",padding:0,pointerEvents:"auto"}}const Ke=12;function fi(e){return{position:"absolute",left:e.position[0],top:e.position[1],width:Ke,height:Ke,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 xi(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 ${Y}`,boxSizing:"border-box",color:Y,cursor:"crosshair",fontSize:9,fontFamily:"'SF Mono', 'Fira Code', Menlo, Consolas, monospace",fontWeight:700,lineHeight:1,padding:0,pointerEvents:"auto",touchAction:"none"}}function hi(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:Y,borderRadius:3,pointerEvents:"none",whiteSpace:"nowrap"}}const yi="rgba(46, 204, 113, 0.25)",gi="rgba(230, 126, 34, 0.25)";function vi(e){return{position:"absolute",left:e.x,top:e.y,width:e.width,height:e.height,background:e.kind==="padding"?yi:gi,boxSizing:"border-box",cursor:e.cursor,pointerEvents:"auto"}}function mi(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 bi(e){return{position:"absolute",left:e.x,top:e.y,width:e.width,height:e.height,border:`2px dashed ${Y}`,background:`color-mix(in srgb, ${Y} 15%, transparent)`,boxSizing:"border-box",pointerEvents:"none",opacity:.7}}function wi(e){return{position:"absolute",left:e.x,top:e.y,width:e.width,height:e.height,background:"#ff5fa2",borderRadius:2,pointerEvents:"none"}}const ge="#ff2d92",_t=6;function Si(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:ge,pointerEvents:"none"}}function Ne(e,o,n){return{position:"absolute",left:n?e:e-_t/2,top:n?o-_t/2:o,width:n?1:_t,height:n?_t:1,background:ge,pointerEvents:"none"}}function Ei(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:ge,borderRadius:2,pointerEvents:"none",whiteSpace:"nowrap"}}const _e="#f24822";function ki(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 ${_e}`:void 0,borderTop:o?void 0:`1px dashed ${_e}`,pointerEvents:"none"}}function Ci(e){return{position:"absolute",left:e.x,top:Math.max(0,e.y-36),display:"flex",gap:4,pointerEvents:"none"}}const We={padding:"2px 6px",fontSize:10,fontFamily:"'SF Mono', 'Fira Code', Menlo, Consolas, monospace",fontWeight:600,color:st.content.onAccent,background:`color-mix(in srgb, ${Y} 85%, transparent)`,borderRadius:3,whiteSpace:"nowrap"};function Ri(e){return{position:"absolute",left:e.x,top:e.y,width:e.width,height:e.height,border:`1px dashed color-mix(in srgb, ${Y} 45%, transparent)`,boxSizing:"border-box",pointerEvents:"none"}}function Ve(e,o,n,d=0){return o&&n>0?Math.round((e-d)/n)*n+d:e}function ji(e,o,n,d,r,h,s=!1){const y=e.nativeHandleSpan??1,w=s?"both":e.nativeScaleAxis??"both",v=s&&e.nativeScaleAxis==="x"?o:s&&e.nativeScaleAxis==="y"?n:null;let b,R;if(w==="x")b=1+o/y,R=1;else if(w==="y")b=1,R=1+n/y;else if(v!==null)b=1+v/y,R=b;else if(e.center){const P=(e.startAngleDeg??0)*Math.PI/180,I=e.startLocal.x-e.center.x,O=e.startLocal.y-e.center.y,k=I*Math.cos(P)+O*Math.sin(P),A=-I*Math.sin(P)+O*Math.cos(P),V=(I+o)*Math.cos(P)+(O+n)*Math.sin(P),nt=-(I+o)*Math.sin(P)+(O+n)*Math.cos(P);if(b=Math.abs(k)>1e-6?V/k:1,R=Math.abs(A)>1e-6?nt/A:1,s){const U=(b+R)/2;b=U,R=U}}else{const P=1+(o+n)/(Math.SQRT2*y);b=P,R=P}return{...w!=="y"?{scaleXFactor:b}:{},...w!=="x"?{scaleYFactor:R}:{},...d&&!r?{scaleStep:h}:{}}}function Pi(e,o,n,d,r,h,s={x:0,y:0}){const y=e.nativeOrigin;if(!y)return{};const w=d&&!0;return{...e.moveAxis!=="y"?{originX:Ve(y.x+o,w,h,s.x)}:{},...e.moveAxis!=="x"?{originY:Ve(y.y+n,w,h,s.y)}:{}}}function Ue(e,o,n){return e==="x"?{x:o.x+n,y:o.y}:e==="y"?{x:o.x,y:o.y+n}:{x:o.x+n/Math.SQRT2,y:o.y+n/Math.SQRT2}}function zi(e,o,n){return e==="x"?{dx:o,dy:0}:e==="y"?{dx:0,dy:n}:{dx:o,dy:n}}function Di(e,o){e.ownerBoxEdit.begin(e.id);for(const n of e.peers)n.ownerBoxEdit.begin(n.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 Ii(e,o,n){let d=o;for(let r=0;d!==null&&r<256;r++){if(n.has(d))return d;d=e.hierarchy.node(d)?.parentId??null}return null}function Oi(e,o,n){const d=K(e,o);if(!d)return null;const r=e.inspector?.get(o,"style.position"),h=ue(e,o)==="2d";if(r!=="absolute"&&r!=="fixed"&&!h)return null;const s=T(e,o);if(!s)return null;const y=h?d.gizmoOrigin?.(o)??void 0:void 0,w=[];for(const v of n){if(v===o)continue;const b=K(e,v),R=T(e,v);if(!b||!R)continue;const P=e.inspector?.get(v,"style.position"),I=ue(e,v)==="2d";if(P!=="absolute"&&P!=="fixed"&&!I)continue;const O=I?b.gizmoOrigin?.(v)??void 0:void 0;w.push({id:v,ownerBoxEdit:b,origRect:R,...O?{nativeOrigin:O}:{}})}return{id:o,ownerBoxEdit:d,origRect:s,context:Dt(e,o),...y?{nativeOrigin:y}:{},peers:w}}function Li(e,o){if(!tn(e,o)?.reorder)return null;const d=bo(e,o);if(!d||d.length<3)return null;const r=T(e,o);if(!r)return null;const h=[];for(const s of d){if(s===o)continue;const y=T(e,s);y&&h.push({id:s,rect:y})}return h.length===0?null:{id:o,adapter:e,origRect:r,siblingRects:h}}function Mi(){return wo()}function Ti(e,o){if(o.size!==1)return null;const n=[...o][0],d=K(e,n);if(!d)return null;const r=T(e,n);if(!r)return null;const h=So(r,Eo(e,n));return{id:n,rect:r,ownerBoxEdit:d,spacingBands:h}}function Fi(e,o){if(o.size<2)return null;const n=[];for(const d of o){const r=T(e,d);if(!r||!K(e,d))return null;n.push({id:d,rect:r})}return n}function $i(e,o,n){const d=o.size===1?[...o][0]:null,r=d?T(e,d):null,h=r&&n?ko(r,n):[],s=d?Co(e,d):null,y=!!(s&&(s.position||s.parentLayout)),w=d?Dt(e,d)?.parent??null:null;return{selectedSingleRect:r,measureLines:h,positionBadge:s,showPositionBadge:y,parentRect:w}}function Xi({state:e,adapter:o,onClose:n}){const d=u.useRef(null);return u.useEffect(()=>{const r=s=>{d.current?.contains(s.target)||n()},h=s=>{s.key==="Escape"&&n()};return document.addEventListener("pointerdown",r),document.addEventListener("keydown",h),()=>{document.removeEventListener("pointerdown",r),document.removeEventListener("keydown",h)}},[n]),l.jsx(he,{children:l.jsx(qe,{ref:d,"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:Et.dropdown},children:e.ids.map(r=>{const h=o.hierarchy.node(r);return l.jsxs(de,{"data-testid":"viewport-pick-menu-item",onSelect:()=>{en(o,[r]),n()},style:{justifyContent:"space-between",gap:20},children:[l.jsx("span",{children:h?.label??r}),l.jsx("span",{style:{color:st.content.muted,fontSize:11},children:h?.kind??""})]},r)})})})}function nr({adapter:e,view:o,transformModeAware:n=!1,presentationId:d}={}){const r=Wn(),h=u.useSyncExternalStore(r.subscribe,r.getSnapshot),s=e??Vn(r),y=u.useCallback((t,i)=>e?e.pickable?.pick(t,i)??null:Do(r,t,i),[e,r]),w=u.useRef(null),v=u.useRef(null),b=u.useRef(null),[R,P]=u.useState(null),[I,O]=u.useState(null),[k,A]=u.useState(null),[V,nt]=u.useState(null),U=u.useRef(null),[L,Z]=u.useState(null),ut=u.useRef(()=>{}),It=u.useCallback((t,i,c=!1)=>{const a=Io(r,t,i,{...e?{adapter:e}:{},...c?{includeLocked:c}:{}});if(a.length===0){nt(null);return}nt({x:t,y:i,ids:a})},[e,r]);u.useEffect(()=>{const t=c=>{const a=U.current;!a||a.pointerId!==c.pointerId||a.moved||Math.hypot(c.clientX-a.startClientX,c.clientY-a.startClientY)>Wt&&(a.moved=!0)},i=c=>{const a=U.current;!a||a.pointerId!==c.pointerId||(U.current=null,c.type==="pointerup"&&!a.moved&&(n&&!c.altKey?ut.current(c.clientX,c.clientY):It(c.clientX,c.clientY,n)))};return window.addEventListener("pointermove",t),window.addEventListener("pointerup",i),window.addEventListener("pointercancel",i),()=>{window.removeEventListener("pointermove",t),window.removeEventListener("pointerup",i),window.removeEventListener("pointercancel",i)}},[It,n]);const Ot=u.useCallback(t=>{t.preventDefault(),t.stopPropagation()},[]),x=o??Un;u.useSyncExternalStore(Bo,Yo);const $=n?ht(x):null,j=[...r.selectedEntityIds].sort().join("\0"),Lt=u.useRef(j);u.useEffect(()=>{Lt.current!==j&&(Lt.current=j,ht(x)&&Xo(x,null))},[j,x]);const m=u.useSyncExternalStore(x.subscribe,x.get,x.get);u.useSyncExternalStore(u.useCallback(t=>$o(x,t),[x]),u.useCallback(()=>Fo(x),[x]));const Ut=n?To(x):[],H=n?1/m.zoom:1,gt=n&&r.transformMode!=="combined"&&r.transformMode!=="select";u.useSyncExternalStore(Zn,qn);const ve=d?Qn(d):null,un=ve?.position??!0,Mt=!gt||(ve?.transformation??!0),Zt=u.useRef(!1),qt=u.useRef(null),[pn,me]=u.useState(!1),at=u.useRef(null),[fn,Tt]=u.useState(!1),F=u.useRef(null);u.useEffect(()=>()=>{const t=F.current;if(F.current=null,!!t){t.ownerBoxEdit.end(t.id);for(const i of t.movePeers??[])i.ownerBoxEdit.end(i.id)}},[]);const[,xn]=u.useState(0),[hn,kt]=u.useState(null),[yn,pt]=u.useState([]),Qt=u.useRef(null),[gn,vn]=u.useState(null),vt=u.useCallback(t=>{Qt.current=t,vn(t)},[]),be=u.useRef(null),[mn,bn]=u.useState(null),[Ft,Ct]=u.useState(null),ft=u.useCallback(t=>{be.current=t,bn(t)},[]),Jt=u.useRef(null),we=u.useRef(null);u.useEffect(()=>{const t=Jt.current;if(!t)return;Jt.current=null;const i=re(s,t.id);i&&i.get(t.id)===null&&Ct({id:t.id,rect:t.rect})},[h]);const Se=u.useRef("");u.useEffect(()=>{const t=[...r.selectedEntityIds].sort().join(",");t!==Se.current&&(Se.current=t,Ft&&Ct(null))}),u.useEffect(()=>{if(!Ft)return;const t=window.setTimeout(()=>Ct(null),4e3);return()=>window.clearTimeout(t)},[Ft]);const lt=u.useSyncExternalStore(Po,zo),[wn,Ee]=u.useState(null),q=u.useCallback(t=>{b.current=t,P(t)},[]),S=u.useCallback((t,i)=>{const c=w.current?.getBoundingClientRect();return{x:(t-(c?.left??0)-m.x)/m.zoom,y:(i-(c?.top??0)-m.y)/m.zoom}},[m.x,m.y,m.zoom]);ut.current=(t,i)=>{const c=r.selectedEntityIds,a=s.hierarchy.roots(),f=c.size===1?[...c][0]:a.length===1?a[0].id:null,p=f?tn(s,f):s.structure??null,D=p?.creatableKinds?.(f)??[];if(!p){Z(null);return}const g=r.snap2D,C=(W,dt)=>r.snapEnabled&&g.step>0?Math.round((W-dt)/g.step)*g.step+dt:W,E=S(t,i),M={x:C(E.x,g.offsetX),y:C(E.y,g.offsetY)},z=g.pixel?{x:Math.round(M.x),y:Math.round(M.y)}:M;Z({x:t,y:i,at:z,parentId:f,structure:p,kinds:D,adapter:s})};const Sn=u.useCallback(t=>{!o||!n||!s.assetDrop||!t.dataTransfer.types.includes("application/x-editor-asset")||(t.preventDefault(),t.dataTransfer.dropEffect="copy")},[s.assetDrop,o,n]),En=u.useCallback(t=>{if(!o||!n||!s.assetDrop)return;const i=t.dataTransfer.getData("application/x-editor-asset");if(!i)return;let c;try{c=JSON.parse(i)}catch{return}const a=S(t.clientX,t.clientY),f={position:[a.x,a.y,0],item:c.component??{kind:"file",name:c.name??c.path.split("/").pop()??c.path}};s.assetDrop.accepts("",c.path,f)&&(t.preventDefault(),t.stopPropagation(),Je(s,"",c.path,f))},[s.assetDrop,o,S,n]),Q=u.useCallback(()=>xn(t=>t+1),[]),$t=u.useCallback(()=>{const t=F.current;if(!t)return!1;F.current=null,t.ownerBoxEdit.end(t.id);for(const i of t.movePeers??[])i.ownerBoxEdit.end(i.id);return kt(null),pt([]),Q(),!0},[Q]),kn=u.useCallback((t,i)=>{if(i.stopPropagation(),i.button!==0)return;const c=r.selectedEntityIds;if(c.size!==1)return;const a=[...c][0],f=K(s,a),p=T(s,a);if(!f||!p)return;const D=s.inspector?.get(a,"style.position"),g=ue(s,a)==="2d",C=g?xt(s,a):null,E=C&&se(C)?f.gizmoOrigin?.(a)??null:null;rt(i),f.begin(a),F.current={kind:"resize",id:a,ownerBoxEdit:f,startLocal:S(i.clientX,i.clientY),origRect:p,pos:t,...C&&E?{frame:C,frameOrigin:E}:{},isPositioned:D==="absolute"||D==="fixed"||g,context:Dt(s,a)}},[s,r,S]),ke=u.useCallback(()=>{if(!n||r.selectedEntityIds.size<2)return null;const t=[...r.selectedEntityIds].flatMap(c=>{const a=K(s,c),f=T(s,c),p=a?.gizmoOrigin?.(c);return a&&f&&p?[{id:c,ownerBoxEdit:a,origRect:f,nativeOrigin:p}]:[]});if(t.length<2)return null;const i=ht(x);return{primary:t[0],peers:t.slice(1),center:i??t[0].nativeOrigin,pivot:i}},[s,r,n,x]),Xt=u.useCallback((t,i,c="both")=>{const a=ke();if(!a)return!1;const f=xt(s,a.primary.id);rt(i),a.primary.ownerBoxEdit.begin(a.primary.id);for(const p of a.peers)p.ownerBoxEdit.begin(p.id);return F.current={kind:t,id:a.primary.id,ownerBoxEdit:a.primary.ownerBoxEdit,startLocal:S(i.clientX,i.clientY),origRect:a.primary.origRect,center:a.center,nativeOrigin:a.primary.nativeOrigin,movePeers:a.peers,...a.pivot?{groupCenter:a.pivot}:{},...f?{startAngleDeg:zt(f)*180/Math.PI}:{},...t==="native-scale"?{nativeScaleAxis:c,nativeHandleSpan:le/m.zoom}:{}},!0},[s,ke,S,m.zoom]),Bt=u.useCallback(t=>{if(t.stopPropagation(),t.button!==0)return;const i=r.selectedEntityIds;if(i.size>1){Xt("rotate",t);return}if(i.size!==1)return;const c=[...i][0],a=K(s,c),f=T(s,c);if(!a||!f)return;const p=n?a.gizmoOrigin?.(c):null,D=p?xt(s,c):null;rt(t),a.begin(c),F.current={...D?{startAngleDeg:zt(D)*180/Math.PI}:{},kind:"rotate",id:c,ownerBoxEdit:a,startLocal:S(t.clientX,t.clientY),origRect:f,center:(p?ht(x):null)??p??{x:f.x+f.width/2,y:f.y+f.height/2},...p?{nativeOrigin:p}:{}}},[s,r,S,n,Xt,x]),te=u.useCallback((t,i)=>{if(i.stopPropagation(),i.button!==0)return;const c=r.selectedEntityIds;if(c.size!==1)return;const a=[...c][0],f=K(s,a),p=T(s,a);if(!f||!p)return;const D=f.gizmoOrigin?.(a)??{x:p.x+p.width/2,y:p.y+p.height/2};rt(i),f.begin(a),F.current={kind:"move",id:a,ownerBoxEdit:f,startLocal:S(i.clientX,i.clientY),origRect:p,context:Dt(s,a),moveAxis:t,nativeOrigin:D}},[s,r,S]),Rt=u.useCallback((t,i)=>{if(i.stopPropagation(),i.button!==0)return;const c=r.selectedEntityIds;if(c.size>1){Xt("native-scale",i,t);return}if(c.size!==1)return;const a=[...c][0],f=K(s,a),p=T(s,a);if(!f||!p)return;const D=f.gizmoOrigin?.(a)??{x:p.x+p.width/2,y:p.y+p.height/2},g=xt(s,a);rt(i),f.begin(a),F.current={...g?{startAngleDeg:zt(g)*180/Math.PI}:{},kind:"native-scale",center:ht(x)??D,id:a,ownerBoxEdit:f,startLocal:S(i.clientX,i.clientY),origRect:p,nativeOrigin:D,nativeScaleAxis:t,nativeHandleSpan:le/m.zoom}},[s,m.zoom,r,S,Xt,x]),Cn=u.useCallback((t,i)=>{if(i.stopPropagation(),i.button!==0)return;const c=r.selectedEntityIds;if(c.size!==1)return;const a=[...c][0],f=K(s,a),p=T(s,a);!f||!p||f.referencePoint?.(a)?.id!==t.id||(rt(i),f.begin(a),F.current={kind:"reference",id:a,ownerBoxEdit:f,startLocal:S(i.clientX,i.clientY),origRect:p,context:Dt(s,a),pointerId:i.pointerId,referencePoint:t})},[s,r,S]),jt=u.useRef(null),mt=u.useCallback((t,i,c)=>{const a=T(s,t);return Jn(i,xt(s,t)??(a?to(a):null),{invert:c,smart:r.smartSnap,gridOn:r.snapEnabled,grid:r.snap2D,threshold:Me/Math.max(x.get().zoom,.01)})},[s,r,x]),Rn=u.useCallback((t,i,c,a)=>{if(a.stopPropagation(),a.button!==0||!c.writable)return;rt(a);const f=i.layers(t).some(p=>p.category==="origin"&&p.handles.some(D=>D.id===c.id));jt.current={id:t,handleId:c.id,provider:i,pivot:f}},[]),jn=u.useCallback(t=>{const i=jt.current;if(!i)return;const c=S(t.clientX,t.clientY),a=i.pivot?mt(i.id,c,t.metaKey||t.ctrlKey):c;i.provider.preview(i.id,i.handleId,[a.x,a.y,0]),Q()},[Q,S,mt]),ee=u.useCallback(t=>{const i=jt.current;if(jt.current=null,!i)return;ae(t);const c=S(t.clientX,t.clientY),a=i.pivot?mt(i.id,c,t.metaKey||t.ctrlKey):c;i.provider.commit(i.id,i.handleId,[a.x,a.y,0]),Q()},[Q,S,mt]),Pn=u.useCallback((t,i)=>{if(i.stopPropagation(),i.button!==0)return;const c=r.selectedEntityIds;if(c.size!==1)return;const a=[...c][0],f=K(s,a),p=T(s,a);!f||!p||(rt(i),f.begin(a),F.current={kind:"spacing",id:a,ownerBoxEdit:f,startLocal:S(i.clientX,i.clientY),origRect:p,side:t.side,origValue:t.value})},[s,r,S]),Yt=u.useCallback((t,i)=>{if(t.pointerId!==void 0&&i.pointerId!==t.pointerId)return;const c=S(i.clientX,i.clientY),a=c.x-t.startLocal.x,f=c.y-t.startLocal.y;let p;if(t.kind==="resize"&&t.frame&&t.frameOrigin)p=eo(t.frame,t.pos,a,f,t.frameOrigin,i.shiftKey),pt([]);else if(t.kind==="resize")p=no(t.pos,a,f,t.origRect,!!t.isPositioned,i.altKey,t.context),i.shiftKey&&t.isPositioned&&(p=oo(p,t.origRect,t.pos)),pt(io(t.pos,a,f,t.origRect,i.altKey,t.context));else if(t.kind==="native-scale")p=ji(t,a,f,r.scaleSnap,i.altKey,r.snap2D.scaleStep,i.shiftKey),pt([]);else if(t.kind==="move"){const{dx:g,dy:C}=zi(t.moveAxis,a,f);if(t.nativeOrigin){p=Pi(t,g,C,r.snapEnabled,!1,r.snap2D.step,r.snap2D.relative?t.nativeOrigin:{x:r.snap2D.offsetX,y:r.snap2D.offsetY});const E=ro({x:p.originX??t.nativeOrigin.x,y:p.originY??t.nativeOrigin.y},t.nativeOrigin,t.origRect,t.context,t.moveAxis,r.smartSnap.enabled===(i.metaKey||i.ctrlKey),Me/Math.max(m.zoom,.01),{x:Ut.filter(z=>z.axis==="x").map(z=>z.value),y:Ut.filter(z=>z.axis==="y").map(z=>z.value)},r.smartSnap),M=z=>r.snap2D.pixel?Math.round(z):z;p.originX!==void 0&&(p.originX=M(E.position.x)),p.originY!==void 0&&(p.originY=M(E.position.y)),pt(E.guides)}else p=so(g,C,t.origRect,i.altKey,t.context);kt(Te(t.origRect,g,C)),t.nativeOrigin||pt(ao(g,C,t.origRect,i.altKey,t.context))}else if(t.kind==="reference"){const g=lo(c,t.origRect,i.altKey,t.context,{bounded:t.referencePoint?.bounded,snapPoints:t.referencePoint?.snapPoints});p={referenceX:g.position.x,referenceY:g.position.y},pt(g.guides)}else if(t.kind==="rotate"){const g=t.nativeOrigin&&t.startAngleDeg!==void 0&&!r.snap2D.relative,C=(r.smartSnap.enabled||r.rotationSnap)!==(i.metaKey||i.ctrlKey);if(p=co(t.center,t.startLocal,c,t.nativeOrigin?g||!C:i.altKey,t.nativeOrigin?r.snap2D.rotationStep:15),g&&C&&p.rotate!==void 0){const M=r.snap2D.rotationStep,z=r.snap2D.rotationOffset,W=t.startAngleDeg,dt=W+p.rotate;p={rotate:Math.round((dt-z)/M)*M+z-W,rotationStep:M,rotationOffset:z}}const E=t.groupCenter??(t.nativeOrigin?ht(x):null);if(E&&t.nativeOrigin&&p.rotate!==void 0){const M=p.rotate*Math.PI/180,z=t.nativeOrigin.x-E.x,W=t.nativeOrigin.y-E.y;p={...p,originX:E.x+z*Math.cos(M)-W*Math.sin(M),originY:E.y+z*Math.sin(M)+W*Math.cos(M)}}}else p=uo(t.side,a,f,t.origValue??0);if(t.kind==="native-scale"&&t.groupCenter&&t.nativeOrigin){const g=t.groupCenter,C=p.scaleXFactor??1,E=p.scaleYFactor??1;p={...p,originX:g.x+(t.nativeOrigin.x-g.x)*C,originY:g.y+(t.nativeOrigin.y-g.y)*E}}const D=t.kind==="native-scale"&&!t.groupCenter&&t.nativeOrigin?ht(x):null;if(D&&t.nativeOrigin&&(p={...p,originX:D.x+(t.nativeOrigin.x-D.x)*(p.scaleXFactor??1),originY:D.y+(t.nativeOrigin.y-D.y)*(p.scaleYFactor??1)}),t.ownerBoxEdit.apply(t.id,p),t.movePeers&&(t.kind==="rotate"||t.kind==="native-scale")){const g=t.groupCenter,C=(p.rotate??0)*Math.PI/180,E=p.scaleXFactor??1,M=p.scaleYFactor??1;for(const z of t.movePeers){if(!z.nativeOrigin)continue;const W=g?z.nativeOrigin.x-g.x:0,dt=g?z.nativeOrigin.y-g.y:0;z.ownerBoxEdit.apply(z.id,t.kind==="rotate"?{rotate:p.rotate??0,...p.rotationStep!==void 0?{rotationStep:p.rotationStep,rotationOffset:p.rotationOffset??0}:{},...g?{originX:g.x+W*Math.cos(C)-dt*Math.sin(C),originY:g.y+W*Math.sin(C)+dt*Math.cos(C)}:{}}:{...p.scaleXFactor!==void 0?{scaleXFactor:E}:{},...p.scaleYFactor!==void 0?{scaleYFactor:M}:{},...p.scaleStep!==void 0?{scaleStep:p.scaleStep}:{},...g?{originX:g.x+W*E,originY:g.y+dt*M}:{}})}}if(t.kind==="move"&&t.movePeers){const g=t.nativeOrigin?(p.originX??t.nativeOrigin.x)-t.nativeOrigin.x:(p.x??t.origRect.x)-t.origRect.x,C=t.nativeOrigin?(p.originY??t.nativeOrigin.y)-t.nativeOrigin.y:(p.y??t.origRect.y)-t.origRect.y;for(const E of t.movePeers)E.ownerBoxEdit.apply(E.id,E.nativeOrigin?{originX:E.nativeOrigin.x+g,originY:E.nativeOrigin.y+C}:{x:E.origRect.x+g,y:E.origRect.y+C})}Q()},[S,Q,r,Ut,m.zoom]),Ht=u.useCallback((t,i)=>{const c=y(t,i);if(!c)return null;const a=po(s,c)?.backgroundChainAt(t,i)??null;return a?Mo(a):null},[s,y]);u.useEffect(()=>{if(!lt)return;const t=i=>{i.key==="Escape"&&$e(null)};return window.addEventListener("keydown",t),()=>window.removeEventListener("keydown",t)},[lt]),u.useEffect(()=>{if(!n)return;const t=i=>{if(i.key.toLowerCase()!=="v"||i.repeat||i.metaKey||i.ctrlKey||i.altKey)return;const c=i.target;if(c instanceof HTMLInputElement||c instanceof HTMLTextAreaElement||c instanceof HTMLSelectElement||c instanceof HTMLElement&&c.isContentEditable)return;const a=qt.current,f=r.selectedEntityIds;if(!a||f.size!==1||F.current||jt.current)return;const p=[...f][0],D=Fe(s,p),g=D?.layers(p).find(E=>E.category==="origin")?.handles.find(E=>E.writable);if(!D||!g)return;i.preventDefault();const C=mt(p,S(a.x,a.y),!1);D.commit(p,g.id,[C.x,C.y,0]),Q()};return window.addEventListener("keydown",t),()=>window.removeEventListener("keydown",t)},[s,r,n,S,Q,mt]),u.useEffect(()=>{const t=a=>a instanceof HTMLInputElement||a instanceof HTMLTextAreaElement||a instanceof HTMLSelectElement||a instanceof HTMLElement&&a.isContentEditable,i=a=>{a.code!=="Space"||a.repeat||t(a.target)||a.target instanceof HTMLButtonElement||(a.preventDefault(),Zt.current=!0,me(!0))},c=a=>{a.code==="Space"&&(Zt.current=!1,me(!1),at.current&&(at.current=null,Tt(!1)))};return window.addEventListener("keydown",i),window.addEventListener("keyup",c),()=>{window.removeEventListener("keydown",i),window.removeEventListener("keyup",c)}},[]);const Ce=u.useCallback(t=>{if(t.stopPropagation(),rt(t),Zt.current){at.current={startClientX:t.clientX,startClientY:t.clientY,startPan:x.get()},Tt(!0);return}if(n&&r.selectedEntityIds.size>1&&!(t.metaKey||t.ctrlKey)&&(r.transformMode==="rotate"||r.transformMode==="scale")){r.transformMode==="rotate"?Bt(t):Rt("both",t);return}if(n&&r.selectedEntityIds.size>=1&&(t.metaKey||t.ctrlKey)){t.altKey?Rt("both",t):Bt(t);return}if(lt){$e(Ht(t.clientX,t.clientY)),Ee(null);return}if(Jo(e,t.clientX,t.clientY)){v.current=null,O(null),q(null);return}const i=y(t.clientX,t.clientY);if(li(t,i)){v.current=null,O(null),q(null);return}const a=n&&t.altKey&&r.selectedEntityIds.size===1?[...r.selectedEntityIds][0]:i!==null?Ii(s,i,r.selectedEntityIds):null,f=Kt(n,r.transformMode,"translate")&&a!==null?Oi(s,a,r.selectedEntityIds):null,p=!f&&a!==null?Li(s,a):null;v.current={downClientX:t.clientX,downClientY:t.clientY,downLocal:S(t.clientX,t.clientY),hitAtDown:i,moved:!1,moveCandidate:f,reorderCandidate:p},O(null),q(null)},[s,r,x,n,S,q,lt,Ht,y,e,Rt,Bt]),zn=u.useCallback(t=>{if(t.button===2){U.current={pointerId:t.pointerId,startClientX:t.clientX,startClientY:t.clientY,moved:!1};return}t.button===0&&Ce(t)},[Ce]),Re=u.useCallback((t,i)=>{const c=i.clientX-t.downClientX,a=i.clientY-t.downClientY;if(!t.moved&&Math.hypot(c,a)>Wt&&(t.moved=!0),!!t.moved){if(t.moveCandidate){const f=Di(t.moveCandidate,t.downLocal);F.current=f,Yt(f,i);return}if(t.reorderCandidate){const f=S(i.clientX,i.clientY),p=fo(t.reorderCandidate.siblingRects,f);p&&(vt({id:t.reorderCandidate.id,adapter:t.reorderCandidate.adapter,gap:p}),kt(Te(t.reorderCandidate.origRect,f.x-t.downLocal.x,f.y-t.downLocal.y)));return}if(t.hitAtDown===null){const f=S(i.clientX,i.clientY);q({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)})}}},[S,q,Yt,vt]),J=u.useCallback(t=>{const i=at.current;if(i){x.setPan(i.startPan.x+(t.clientX-i.startClientX),i.startPan.y+(t.clientY-i.startClientY));return}if(lt){const f=S(t.clientX,t.clientY);Ee({...f,color:Ht(t.clientX,t.clientY)});return}qt.current={x:t.clientX,y:t.clientY};const c=F.current;if(c){Yt(c,t);return}if((t.buttons&1)===0){ti(e,t.clientX,t.clientY,y,A,O);return}const a=v.current;a&&Re(a,t)},[r,x,S,Yt,lt,Ht,Re,y,e]),tt=u.useCallback(t=>{if(ae(t),at.current){at.current=null,Tt(!1);return}const i=F.current;if(i?.pointerId!==void 0&&t.pointerId!==i.pointerId||$t())return;const c=Qt.current;if(c){vt(null),kt(null),v.current=null,xo(c.adapter,c.id,c.gap.beforeSiblingId);return}const a=v.current;if(v.current=null,!a)return;const f=a.hitAtDown!==null?ri(r.selectedEntityIds,a.hitAtDown,t.shiftKey):si(s,a.moved,b.current,t.shiftKey);f!==null&&en(s,f),q(null)},[s,r,q,$t,vt]),_=u.useCallback(t=>{if(ae(t),at.current){at.current=null,Tt(!1);return}const i=F.current;i?.pointerId!==void 0&&t.pointerId!==i.pointerId||$t()||(Qt.current&&(vt(null),kt(null)),v.current=null,q(null))},[$t,q,vt]),Dn=u.useCallback(()=>{qt.current=null,e||ye()?.clearHover(),A(null),O(null)},[e]),In=u.useCallback(t=>{const i=w.current?.parentElement??null;if(Oo(i,t.clientX,t.clientY))return;const c=y(t.clientX,t.clientY);if(!c)return;const a=re(s,c);if(!a)return;const f=T(s,c);if(!f)return;const p=a.get(c);if(p===null){console.warn(`[RootSelectionOverlay] text edit refused for "${c}": dynamic body or has child elements — not inline-editable.`),ft(null),Ct({id:c,rect:f});return}Ct(null),ft({id:c,rect:f,initialText:p})},[s,y,ft]),On=u.useCallback(t=>{const i=be.current;if(!i)return;const c=re(s,i.id);c&&(Jt.current={id:i.id,rect:i.rect},c.set(i.id,t)),ft(null)},[s,ft]),Ln=u.useCallback(()=>ft(null),[ft]);if(!ni(s)||Mi())return null;const ot=new Set([...r.selectedEntityIds].filter(t=>s.hierarchy.node(t)!==void 0)),ne=I!==null&&!ot.has(I)?T(s,I):null,X=Ti(s,ot),it=X?.rect??null,Mn=X?.ownerBoxEdit??null,oe=n&&X?xt(s,X.id):null,G=oe&&se(oe)?oe:null,B=n&&X?X.ownerBoxEdit.gizmoOrigin?.(X.id)??{x:X.rect.x+X.rect.width/2,y:X.rect.y+X.rect.height/2}:null,bt=le/m.zoom,ie=n&&ot.size>1?[...ot][0]:null,je=ie?K(s,ie)?.gizmoOrigin?.(ie)??null:null,ct=X?X.ownerBoxEdit.referencePoint?.(X.id):null,Tn=X?.spacingBands??[],wt=ot.size===1?[...ot][0]:null,Gt=wt?Fe(s,wt):null,Fn=wt&&Gt?Gt.layers(wt).filter(t=>n&&t.category==="origin"?un:r.showHelpers?r.helperVisibility[t.category]??!0:!1):[],Pt=n?{selectedSingleRect:null,measureLines:[],positionBadge:null,showPositionBadge:!1,parentRect:null}:$i(s,ot,ne),Pe=n?null:Fi(s,ot),At=we.current,$n=n?[]:At&&At.adapter===s&&At.version===h?At.hints:(()=>{const t=ho(s);return we.current={adapter:s,version:h,hints:t},t})();return l.jsxs("div",{style:{position:"absolute",inset:0,zIndex:Qo,pointerEvents:"none"},children:[l.jsx("div",{ref:w,"data-testid":"world-selection-overlay-interaction",style:{position:"absolute",inset:0,pointerEvents:"auto",touchAction:"none",userSelect:"none",cursor:k??ai(fn,pn,lt,!!R)},onPointerDownCapture:zn,onPointerMove:J,onPointerUp:tt,onPointerCancel:_,onLostPointerCapture:_,onPointerLeave:Dn,onDoubleClick:In,onContextMenu:Ot,onDragOver:Sn,onDrop:En}),L?l.jsx(Go,{state:L,onClose:()=>Z(null)}):null,V?l.jsx(Xi,{state:V,adapter:s,onClose:()=>nt(null)}):null,l.jsxs("div",{"data-testid":"world-selection-overlay-chrome",style:{position:"absolute",inset:0,pointerEvents:"none",transform:mo(m),transformOrigin:"0 0"},children:[!n&&$n.map(t=>l.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,borderStyle:"dashed",borderColor:"rgba(154, 160, 166, 0.7)",borderWidth:n?1/m.zoom:1,boxSizing:"border-box",pointerEvents:"none"}},t.id)),ne&&l.jsx("div",{"data-testid":"world-selection-hover",style:{...Ae(ne,!1),...n?{borderWidth:1/m.zoom}:{}}}),[...ot].map(t=>{const i=T(s,t);if(!i)return null;const c=n?xt(s,t):null,a=c&&se(c)?c:null;return l.jsxs("div",{children:[l.jsx("div",{"data-testid":"world-selection-box","data-entity-id":t,"data-turned":a?"true":void 0,style:{...a?di(a,1/m.zoom):Ae(i,!0),...n&&!a?{borderWidth:1/m.zoom,background:"transparent"}:{}}}),!n&&l.jsx("div",{"data-testid":"world-selection-label",style:ui(i),children:ei(s,t)})]},t)}),R&&l.jsx("div",{"data-testid":"world-selection-marquee",style:{position:"absolute",left:R.x,top:R.y,width:R.width,height:R.height,border:`1px solid ${Y}`,background:`color-mix(in srgb, ${Y} 10%, transparent)`,pointerEvents:"none"}}),!n&&l.jsx(Bi,{measureLines:Pt.measureLines,snapGuides:yn,positionBadge:Pt.positionBadge,showPositionBadge:Pt.showPositionBadge,badgeAnchorRect:Pt.selectedSingleRect,parentRect:Pt.parentRect,screenScale:H,screenZoom:1}),!n&&l.jsx(Yi,{dragGhost:hn,reorderPreview:gn}),!n&&Pe&&l.jsx(Zo,{adapter:s,entries:Pe}),$?l.jsx("div",{"data-testid":"world-2d-temporary-pivot","aria-label":"Temporary pivot",style:{position:"absolute",left:$.x-8,top:$.y-8,width:16,height:16,transform:`scale(${H})`,transformOrigin:"center",pointerEvents:"none",background:"linear-gradient(#ffb020, #ffb020) center / 16px 2px no-repeat, linear-gradient(#ffb020, #ffb020) center / 2px 16px no-repeat"}}):null,je&&Kt(n,r.transformMode,"scale")&&Mt&&gt&&["x","y"].map(t=>l.jsx("div",{"data-testid":`world-2d-group-scale-${t}`,title:t==="x"?"Scale the selection on X":"Scale the selection on Y",style:{...ce(Ue(t,je,bt),t==="x"?"ew-resize":"ns-resize"),transform:`scale(${H})`,transformOrigin:"center",background:t==="x"?"#ef5350":"#66bb6a"},onPointerDown:i=>Rt(t,i),onPointerMove:J,onPointerUp:tt,onPointerCancel:_},t)),it&&Mn&&l.jsxs(l.Fragment,{children:[!n&&Tn.map(t=>l.jsxs("div",{children:[l.jsx("div",{"data-testid":`world-spacing-${t.kind}-${Gi(t.side)}`,style:vi(t),onPointerDown:i=>Pn(t,i),onPointerMove:J,onPointerUp:tt,onPointerCancel:_}),!t.isZero&&l.jsx("div",{style:{...mi(t),...n?{transform:`translate(-50%, -50%) scale(${H})`,transformOrigin:"center"}:{}},children:Math.round(t.value)})]},t.side)),ct&&l.jsx("div",{"aria-label":`Edit ${ct.label}`,"data-reference-kind":ct.kind,"data-testid":"world-reference-point-handle",title:`${ct.label} (${ct.bounded?"native corner/edge/center snap":"8px/alignment snap"}, Alt for free movement)`,style:{...xi(ct),...n?{transform:`scale(${H})`,transformOrigin:"center"}:{}},onPointerDown:t=>Cn(ct,t),onPointerMove:J,onPointerUp:tt,onPointerCancel:_,onLostPointerCapture:_,role:"button",tabIndex:0,children:ct.kind==="anchor"?"A":"P"}),wt&&Gt&&Fn.flatMap(t=>t.handles.map(i=>l.jsx("div",{"aria-label":i.label,"data-testid":"world-spatial-handle","data-handle-id":i.id,"data-writable":i.writable,role:"button",tabIndex:0,title:i.writable?i.label:`${i.label} — ${i.reason}`,style:{...fi(i),transform:`translate(-50%, -50%) scale(${H})`},onPointerDown:c=>Rn(wt,Gt,i,c),onPointerMove:jn,onPointerUp:ee,onPointerCancel:ee,onLostPointerCapture:ee},`${t.id}:${i.id}`))),n&&r.transformMode==="translate"&&Mt&&l.jsxs(l.Fragment,{children:[l.jsx("div",{"data-testid":"world-2d-move-axis-x",title:"Move on X axis",style:{position:"absolute",left:B.x,top:B.y-5/m.zoom,width:bt,height:10/m.zoom,borderTop:`${2/m.zoom}px solid #ef5350`,boxSizing:"border-box",cursor:"ew-resize",pointerEvents:"auto"},onPointerDown:t=>te("x",t),onPointerMove:J,onPointerUp:tt,onPointerCancel:_}),l.jsx("div",{"data-testid":"world-2d-move-axis-y",title:"Move on Y axis",style:{position:"absolute",left:B.x-5/m.zoom,top:B.y,width:10/m.zoom,height:bt,borderLeft:`${2/m.zoom}px solid #66bb6a`,boxSizing:"border-box",cursor:"ns-resize",pointerEvents:"auto"},onPointerDown:t=>te("y",t),onPointerMove:J,onPointerUp:tt,onPointerCancel:_}),l.jsx("div",{"data-testid":"world-2d-move-center",title:"Move freely",style:{position:"absolute",left:B.x-5/m.zoom,top:B.y-5/m.zoom,width:10/m.zoom,height:10/m.zoom,border:"1px solid rgba(255,255,255,.9)",background:"#4aa3ff",boxSizing:"border-box",cursor:"move",pointerEvents:"auto"},onPointerDown:t=>te("both",t),onPointerMove:J,onPointerUp:tt,onPointerCancel:_})]}),Kt(n,r.transformMode,"scale")&&Mt&&(gt?l.jsxs(l.Fragment,{children:[l.jsx("div",{"data-testid":"world-2d-scale-axis-x",style:{position:"absolute",left:B.x,top:B.y,width:bt,borderTop:`${2/m.zoom}px solid #ef5350`,pointerEvents:"none"}}),l.jsx("div",{"data-testid":"world-2d-scale-axis-y",style:{position:"absolute",left:B.x,top:B.y,height:bt,borderLeft:`${2/m.zoom}px solid #66bb6a`,pointerEvents:"none"}}),[["x","ew-resize"],["y","ns-resize"],["both","nwse-resize"]].map(([t,i])=>{const c=Ue(t,B,bt),a=t==="x"?"e":t==="y"?"s":"se";return l.jsx("div",{"data-testid":`world-resize-handle-${a}`,style:{...ce(c,i),transform:`scale(${H})`,transformOrigin:"center",background:t==="x"?"#ef5350":t==="y"?"#66bb6a":"#fff"},onPointerDown:f=>Rt(t,f),onPointerMove:J,onPointerUp:tt,onPointerCancel:_},t)})]}):l.jsxs(l.Fragment,{children:[yo.map(({pos:t,cursor:i})=>l.jsx("div",{"data-testid":`world-resize-handle-${t}`,style:{...ce(G?go(G,t):vo(it,t),i),...n?{transform:G?`rotate(${zt(G)}rad) scale(${H})`:`scale(${H})`,transformOrigin:"center"}:{}},onPointerDown:c=>kn(t,c),onPointerMove:J,onPointerUp:tt,onPointerCancel:_},t)),l.jsx("div",{"data-testid":"world-resize-dimension-label",style:{...hi(it),...n?{top:it.y+it.height+4*H,transform:`scale(${H})`,transformOrigin:"top left"}:{}},children:G?`${Math.round(Math.hypot(G.tr.x-G.tl.x,G.tr.y-G.tl.y))}×${Math.round(Math.hypot(G.bl.x-G.tl.x,G.bl.y-G.tl.y))}`:`${Math.round(it.width)}×${Math.round(it.height)}`})]})),Kt(n,r.transformMode,"rotate")&&Mt&&l.jsxs(l.Fragment,{children:[gt&&l.jsx("div",{"data-testid":"world-2d-rotate-ring",style:{position:"absolute",left:B.x-40/m.zoom,top:B.y-40/m.zoom,width:80/m.zoom,height:80/m.zoom,border:`${1/m.zoom}px solid #4aa3ff`,borderRadius:"50%",boxSizing:"border-box",pointerEvents:"none"}}),l.jsx("div",{"data-testid":"world-rotate-handle","aria-label":"Rotate selection",title:n?"Rotate selection (snaps under Smart Snap or Use Rotation Snap; Cmd inverts)":"Rotate selection (15° snap, Alt for free rotation)",style:{...pi(it),...n&&!gt?{...ci(G,it,dn*H),transform:`scale(${H})`,transformOrigin:"center"}:{},...gt?{left:B.x-et/2,top:B.y-40/m.zoom-et/2,transform:`scale(${H})`,transformOrigin:"center",background:"#4aa3ff"}:{}},onPointerDown:Bt,onPointerMove:J,onPointerUp:tt,onPointerCancel:_,role:"button",tabIndex:0})]})]}),!n&&l.jsx(Hi,{textEdit:mn,onCommitTextEdit:On,onCancelTextEdit:Ln,textEditRefused:Ft,eyedropperActive:lt,eyedropperPreview:wn})]})]})}function Bi(e){const{measureLines:o,snapGuides:n,positionBadge:d,showPositionBadge:r,badgeAnchorRect:h,parentRect:s,screenScale:y,screenZoom:w}=e;return l.jsxs(l.Fragment,{children:[s&&l.jsx("div",{"data-testid":"world-parent-outline",style:Ri(s)}),o.map(v=>l.jsxs("div",{"data-testid":"world-measure-line",children:[l.jsx("div",{style:Si(v)}),l.jsx("div",{style:Ne(v.x1,v.y1,v.orientation==="horizontal")}),l.jsx("div",{style:Ne(v.x2,v.y2,v.orientation==="horizontal")}),l.jsx("div",{"data-testid":"world-measure-line-label",style:{...Ei(v),...y!==1?{transform:`translate(-50%, -50%) scale(${y})`,transformOrigin:"center"}:{}},children:v.distance})]},v.orientation)),n.map(v=>l.jsx("div",{"data-testid":"world-snap-guide",style:ki(v)},v.orientation)),r&&h&&d&&l.jsxs("div",{"data-testid":"world-position-badge",style:{...Ci(h),...y!==1?{top:h.y-36/w,transform:`scale(${y})`,transformOrigin:"top left"}:{}},children:[d.position&&l.jsx("span",{"data-testid":"world-position-badge-mode",style:We,children:d.position}),d.parentLayout&&l.jsx("span",{"data-testid":"world-position-badge-layout",style:We,children:d.parentLayout})]})]})}function Yi(e){const{dragGhost:o,reorderPreview:n}=e;return l.jsxs(l.Fragment,{children:[o&&l.jsx("div",{"data-testid":"world-drag-ghost",style:bi(o)}),n&&l.jsx("div",{"data-testid":"world-reorder-preview",style:wi(n.gap.marker)})]})}function Hi(e){const{textEdit:o,onCommitTextEdit:n,onCancelTextEdit:d,textEditRefused:r,eyedropperActive:h,eyedropperPreview:s}=e;return l.jsxs(l.Fragment,{children:[o&&l.jsx("div",{style:{pointerEvents:"auto"},children:l.jsx(qo,{rect:o.rect,initialText:o.initialText,onCommit:n,onCancel:d})}),r&&l.jsx("div",{"data-testid":"world-text-edit-refused",title:"dynamic body — not inline-editable",style:{position:"absolute",left:r.rect.x,top:r.rect.y,width:Math.max(r.rect.width,40),height:Math.max(r.rect.height,20),border:`2px dashed ${st.semantic.danger}`,boxSizing:"border-box",background:st.semantic.dangerMuted,pointerEvents:"none"}}),h&&s&&l.jsx("div",{"data-testid":"world-eyedropper-swatch","data-color-state":s.color?"resolved":"unknown",style:{position:"absolute",left:s.x+12,top:s.y+12,width:24,height:24,borderRadius:4,border:"2px solid #fff",boxShadow:"0 1px 4px rgba(0,0,0,0.5)",background:s.color??"repeating-linear-gradient(45deg, #999, #999 4px, #ccc 4px, #ccc 8px)",pointerEvents:"none"}})]})}function Gi(e){return e.endsWith("Top")?"top":e.endsWith("Right")?"right":e.endsWith("Bottom")?"bottom":"left"}export{nr as R,Xi as V,To as a,Xo as b,Fo as c,Qi as d,er as e,Ji as m,tr as r,$o as s};
1
+ import{a as l}from"./jsx-runtime-DPjLkJKQ.js";import{r as u}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{al as st,aN as Ze,a6 as St,hY as he,fz as qe,dp as Et,bB as de,r as Qe,cC as Xn,jT as Je,jU as Bn,d9 as Yn,jV as ze,jW as De,jX as Ie,aM as Oe,a7 as Le,jY as Hn,gK as Gn,jZ as An,j_ as Kn,j$ as Nn,k0 as K,e$ as _n,U as Wn,aD as Vn,d6 as Un,bq as Zn,br as qn,fD as Qn,k1 as re,k2 as tn,fP as T,k3 as ue,fS as xt,k4 as se,k5 as Dt,k6 as zt,fQ as Jn,fR as Me,fT as to,k7 as eo,k8 as no,k9 as oo,ka as io,kb as ro,kc as so,kd as Te,ke as ao,kf as lo,kg as co,kh as uo,ki as po,kj as fo,kk as xo,eX as en,fO as Fe,kl as ho,km as yo,kn as go,ko as vo,dE as mo,kp as bo,aG as nn,kq as wo,kr as So,ks as Eo,kt as ko,ku as Co,aH as Ro,fF as jo}from"./index-jhDTJrJJ.js";import{s as Po,i as zo,r as $e}from"./eyedropper-session-bjPXnfeX.js";import{a as Do,p as Io}from"./layered-pick-CEWefTxe.js";import{z as Oo,j as Lo}from"./react-story-board-BS4wtpbe.js";import{v as ye}from"./viewport-editor-controls-BYaAZ_Ku.js";import{l as Mo}from"./inspect-CkG2Z66I.js";const Xe=new WeakMap;let Be=0;function yt(e){let o=Xe.get(e);return o||(o={guides:[],listeners:new Set,revision:0},Xe.set(e,o)),o}function Vt(e){e.revision+=1;for(const o of e.listeners)o()}function To(e){return yt(e).guides}function Fo(e){return yt(e).revision}function $o(e,o){const n=yt(e);return n.listeners.add(o),()=>n.listeners.delete(o)}function Qi(e,o,n){Be+=1;const d=yt(e),r=`canvas-guide-${Be}`;return d.guides=[...d.guides,{id:r,axis:o,value:n}],Vt(d),r}function Ji(e,o,n){const d=yt(e),r=d.guides.map(h=>h.id===o?{...h,value:n}:h);r.every((h,s)=>h===d.guides[s])||(d.guides=r,Vt(d))}function tr(e,o){const n=yt(e),d=n.guides.filter(r=>r.id!==o);d.length!==n.guides.length&&(n.guides=d,Vt(n))}function er(e){const o=yt(e);o.guides.length!==0&&(o.guides=[],Vt(o))}const pe=new WeakMap,fe=new Set;let on=0;function ht(e){return pe.get(e)??null}function Xo(e,o){o?pe.set(e,o):pe.delete(e),on+=1;for(const n of fe)n()}function Bo(e){return fe.add(e),()=>fe.delete(e)}function Yo(){return on}const rn="canvasCreateNode";function Ho(){return Qe().projectLocalState.read(rn)??{favorites:[],recent:[]}}function Ye(e){Qe().projectLocalState.write(rn,e)}function sn(e,o){u.useEffect(()=>{const n=r=>{e.current?.contains(r.target)||o()},d=r=>{r.key==="Escape"&&o()};return document.addEventListener("pointerdown",n),document.addEventListener("keydown",d),()=>{document.removeEventListener("pointerdown",n),document.removeEventListener("keydown",d)}},[e,o])}function Go({state:e,onClose:o}){const[n,d]=u.useState("menu");return n==="create"?l.jsx(No,{state:e,onClose:o}):n==="instantiate"?l.jsx(_o,{state:e,onClose:o}):l.jsx(Ao,{state:e,onClose:o,onPick:d})}function Ao({state:e,onClose:o,onPick:n}){const d=u.useRef(null);return sn(d,o),l.jsx(he,{children:l.jsxs(qe,{ref:d,"aria-label":"Add node here","data-testid":"viewport-add-menu",style:{position:"fixed",left:e.x,top:e.y,minWidth:190,zIndex:Et.dropdown},children:[l.jsx(de,{"data-testid":"viewport-add-menu-item",disabled:e.kinds.length===0,title:e.kinds.length===0?"Nothing can be added under the selected node.":void 0,onSelect:()=>n("create"),children:"Add 2D Node Here…"}),e.adapter.assetDrop?l.jsx(de,{"data-testid":"viewport-add-menu-item",disabled:e.kinds.length===0,title:e.kinds.length===0?"Nothing can be added under the selected node.":void 0,onSelect:()=>n("instantiate"),children:"Instantiate Scene Here…"}):null]})})}function an({title:e,testId:o,onClose:n,children:d,footer:r}){const h=u.useRef(null);return sn(h,n),l.jsx(he,{children:l.jsx("div",{style:{position:"fixed",inset:0,zIndex:Et.dropdown,display:"flex",alignItems:"center",justifyContent:"center",background:"rgba(0, 0, 0, .35)"},children:l.jsxs("div",{ref:h,role:"dialog","aria-label":e,"data-testid":o,style:{width:640,maxWidth:"90vw",maxHeight:"80vh",display:"flex",flexDirection:"column",gap:8,padding:12,borderRadius:6,background:st.surface.raised,color:st.content.primary,boxShadow:"0 12px 40px rgba(0, 0, 0, .5)",fontSize:12},children:[l.jsx("div",{style:{fontWeight:600},children:e}),d,l.jsx("div",{style:{display:"flex",gap:8,justifyContent:"flex-end"},children:r})]})})})}const N={color:st.content.muted};function xe({selected:e,onPick:o,onOpen:n,testId:d,indent:r=0,children:h}){return l.jsx("div",{role:"option","aria-selected":e,"data-testid":d,onClick:o,onDoubleClick:n,style:{padding:`2px 6px 2px ${6+r*14}px`,borderRadius:3,cursor:"default",background:e?st.accent.muted:"transparent"},children:h})}function Ko(e,o){let n=0,d=e.extends?o.get(e.extends):void 0;for(;d&&n<16;)n+=1,d=d.extends?o.get(d.extends):void 0;return n}function ln(e){const[o,n]=u.useState(null),[d,r]=u.useState(null);return u.useEffect(()=>{if(!e)return;let h=!0;return Xn().then(s=>{if(h){if(!s.ok){r(s.reason),n([]);return}n(s.entries.filter(y=>y.surface==="canvas"&&y.exported&&y.contentKind!=="image"))}}),()=>{h=!1}},[e]),{components:o,failure:d}}const He=e=>`component:${e.path}#${e.name}`;function cn(e,o){const n=e.adapter.assetDrop;if(!n)return"This surface places no components.";const d={position:[e.at.x,e.at.y,0],item:{kind:"component",name:o.name,sourcePath:o.path,exportKind:o.defaultExport?"default":"named",surface:o.surface}},r=e.parentId??"";return n.accepts(r,o.path,d)?(Je(e.adapter,r,o.path,d),null):`${o.name} cannot be placed here.`}function No({state:e,onClose:o}){const[n,d]=u.useState(""),[r,h]=u.useState(Ho),[s,y]=u.useState({builtIn:!0,custom:!0}),[w,v]=u.useState(!1),[b,R]=u.useState(null),{components:P}=ln(!!e.adapter.assetDrop),I=e.kinds.find(x=>!x.extends),O=(P??[]).map(x=>({kind:He(x),label:x.name,...I?{extends:I.kind}:{},description:`A project component, from ${x.path}.`})),k=[...s.builtIn?e.kinds:[],...s.custom?O:[]],A=u.useMemo(()=>new Map([...e.kinds,...O].map(x=>[x.kind,x])),[e.kinds,P]),V=k.filter(x=>x.label.toLowerCase().includes(n.trim().toLowerCase())),[nt,U]=u.useState(e.kinds[0]?.kind??null),L=nt&&V.some(x=>x.kind===nt)?nt:V[0]?.kind??null,Z=L?A.get(L):void 0,ut=x=>{if(!x)return;const $=(P??[]).find(j=>He(j)===x);if($){const j=cn(e,$);if(j){R(j);return}}else e.structure.create(x,e.parentId??void 0,e.at).ack;Ye({...r,recent:[x,...r.recent.filter(j=>j!==x)].slice(0,10)}),o()},It=()=>{if(!L)return;const x=r.favorites.includes(L)?r.favorites.filter(j=>j!==L):[...r.favorites,L],$={...r,favorites:x};Ye($),h($)},Ot=(x,$)=>x.map(j=>A.get(j)).filter(j=>j!==void 0).map(j=>l.jsx(xe,{testId:$,selected:j.kind===L,onPick:()=>U(j.kind),onOpen:()=>ut(j.kind),children:j.label},j.kind));return l.jsx(an,{title:`Create New ${I?.label??"Node"}`,testId:"canvas-create-node-dialog",onClose:o,footer:l.jsxs(l.Fragment,{children:[l.jsx(St,{type:"button",variant:"ghost",onClick:o,children:"Cancel"}),l.jsx(St,{type:"button","data-testid":"canvas-create-node-create",disabled:!L,onClick:()=>ut(L),children:"Create"})]}),children:l.jsxs("div",{style:{display:"flex",gap:12,minHeight:240},children:[l.jsxs("div",{style:{width:170,display:"flex",flexDirection:"column",gap:4},children:[l.jsx("span",{style:N,children:"Favorites:"}),l.jsx("div",{"data-testid":"canvas-create-node-favorites",style:{flex:1},children:Ot(r.favorites,"canvas-create-node-favorite")}),l.jsx("span",{style:N,children:"Recent:"}),l.jsx("div",{"data-testid":"canvas-create-node-recent",style:{flex:1},children:Ot(r.recent,"canvas-create-node-recent-item")})]}),l.jsxs("div",{style:{flex:1,display:"flex",flexDirection:"column",gap:4},children:[l.jsx("span",{style:N,children:"Search:"}),l.jsxs("div",{style:{display:"flex",gap:4},children:[l.jsx(Ze,{"data-testid":"canvas-create-node-search",value:n,autoFocus:!0,onChange:x=>d(x.target.value),onKeyDown:x=>{if(x.key==="Enter"&&ut(L),x.key==="ArrowDown"||x.key==="ArrowUp"){x.preventDefault();const $=V.findIndex(Lt=>Lt.kind===L),j=V[Math.min(V.length-1,Math.max(0,$+(x.key==="ArrowDown"?1:-1)))];j&&U(j.kind)}},style:{flex:1}}),l.jsx(St,{type:"button",variant:"ghost","data-testid":"canvas-create-node-favorite-toggle","aria-pressed":L?r.favorites.includes(L):!1,title:"(Un)favorite selected item.",disabled:!L,onClick:It,children:L&&r.favorites.includes(L)?"★":"☆"})]}),l.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[l.jsx("span",{style:N,children:"Matches:"}),l.jsx("span",{style:{flex:1}}),l.jsx(St,{type:"button",variant:"ghost","data-testid":"canvas-create-node-filters","aria-haspopup":"menu","aria-expanded":w,onClick:()=>v(!w),children:"Filters"})]}),w?l.jsx("div",{role:"menu","data-testid":"canvas-create-node-filter-menu",style:{display:"flex",gap:12},children:[["builtIn","Show Built-in"],["custom","Show Custom"]].map(([x,$])=>l.jsxs("label",{role:"menuitemcheckbox","aria-checked":s[x],style:{display:"flex",gap:4},children:[l.jsx("input",{type:"checkbox","data-testid":`canvas-create-node-filter-${x}`,checked:s[x],onChange:()=>y({...s,[x]:!s[x]})}),$]},x))}):null,l.jsx("div",{role:"listbox","data-testid":"canvas-create-node-matches",style:{flex:1,overflow:"auto"},children:V.map(x=>l.jsx(xe,{testId:"canvas-create-node-match",indent:n.trim()===""?Ko(x,A):0,selected:x.kind===L,onPick:()=>U(x.kind),onOpen:()=>ut(x.kind),children:x.label},x.kind))}),l.jsx("span",{style:N,children:"Description:"}),b?l.jsx("span",{"data-testid":"canvas-create-node-failure",style:N,children:b}):null,l.jsx("div",{"data-testid":"canvas-create-node-description",style:{minHeight:36},children:Z?l.jsxs(l.Fragment,{children:[l.jsxs("div",{children:[Z.label,Z.extends?l.jsx("span",{style:N,children:` < ${A.get(Z.extends)?.label??Z.extends}`}):null]}),Z.description?l.jsx("div",{style:N,children:Z.description}):null]}):null})]})]})})}function _o({state:e,onClose:o}){const[n,d]=u.useState(""),[r,h]=u.useState(null),{components:s,failure:y}=ln(!0),[w,v]=u.useState(null),b=w??y,R=k=>`${k.path}#${k.name}`,P=(s??[]).filter(k=>`${k.name} ${k.path}`.toLowerCase().includes(n.trim().toLowerCase())),I=P.find(k=>R(k)===r)??P[0]??null,O=k=>{if(!k)return;const A=cn(e,k);if(A){v(A);return}o()};return l.jsxs(an,{title:"Instantiate Scene",testId:"canvas-instantiate-dialog",onClose:o,footer:l.jsxs(l.Fragment,{children:[l.jsx(St,{type:"button",variant:"ghost",onClick:o,children:"Cancel"}),l.jsx(St,{type:"button","data-testid":"canvas-instantiate-open",disabled:!I,onClick:()=>O(I),children:"Instantiate"})]}),children:[l.jsx("span",{style:N,children:"Search:"}),l.jsx(Ze,{"data-testid":"canvas-instantiate-search",value:n,autoFocus:!0,onChange:k=>d(k.target.value),onKeyDown:k=>{k.key==="Enter"&&O(I)}}),l.jsxs("div",{role:"listbox","data-testid":"canvas-instantiate-matches",style:{minHeight:160,overflow:"auto"},children:[s===null?l.jsx("span",{style:N,children:"Reading the project's components…"}):null,s!==null&&P.length===0?l.jsx("span",{style:N,children:"No canvas component matches."}):null,P.map(k=>l.jsxs(xe,{testId:"canvas-instantiate-match",selected:I!==null&&R(k)===R(I),onPick:()=>h(R(k)),onOpen:()=>O(k),children:[k.name," ",l.jsx("span",{style:N,children:k.path})]},R(k)))]}),b?l.jsx("span",{"data-testid":"canvas-instantiate-failure",style:N,children:b}):null]})}function Ge(e,o){for(const n of o){const d=K(e,n.id);if(!d)continue;const r={};n.x!==void 0&&(r.x=n.x),n.y!==void 0&&(r.y=n.y),Object.keys(r).length!==0&&(d.begin(n.id),d.apply(n.id,r),d.end(n.id))}}const Wo=[{op:"left",testId:"align-left",label:"Align left",icon:ze},{op:"hcenter",testId:"align-hcenter",label:"Align horizontal center",icon:De},{op:"right",testId:"align-right",label:"Align right",icon:Ie},{op:"top",testId:"align-top",label:"Align top",icon:ze,rotate:!0},{op:"vcenter",testId:"align-vcenter",label:"Align vertical center",icon:De,rotate:!0},{op:"bottom",testId:"align-bottom",label:"Align bottom",icon:Ie,rotate:!0}],Vo=[{axis:"horizontal",testId:"distribute-horizontal",label:"Distribute horizontally",icon:An},{axis:"vertical",testId:"distribute-vertical",label:"Distribute vertically",icon:Kn}];function Uo(e){const d=e.y-30-8;return{left:e.x,top:d<0?e.y+e.height+8:d}}function Zo({adapter:e,entries:o}){if(o.length<2)return null;const n=Bn(o.map(s=>s.rect));if(!n)return null;const{left:d,top:r}=Uo(n),h=o.length>=3;return l.jsxs(Yn,{label:"Align and distribute","data-testid":"align-toolbar",style:{position:"absolute",left:d,top:r,zIndex:Et.overlayLow,gap:2,padding:3},children:[Wo.map(({op:s,testId:y,label:w,icon:v,rotate:b})=>l.jsx(Oe,{"data-testid":y,title:w,"aria-label":w,variant:"ghost",size:"compact",onClick:()=>Ge(e,Hn(o,s)),children:l.jsx(Le,{icon:v,"aria-hidden":"true",style:b?{transform:"rotate(90deg)"}:void 0})},s)),h&&l.jsxs(l.Fragment,{children:[l.jsx(Gn,{}),Vo.map(({axis:s,testId:y,label:w,icon:v})=>l.jsx(Oe,{"data-testid":y,title:w,"aria-label":w,variant:"ghost",size:"compact",onClick:()=>Ge(e,Nn(o,s)),children:l.jsx(Le,{icon:v,"aria-hidden":"true"})},s))]})]})}function qo({rect:e,initialText:o,onCommit:n,onCancel:d}){const[r,h]=u.useState(o),s=u.useRef(null),y=u.useRef(!1);u.useEffect(()=>{const b=s.current;b&&(b.focus(),b.select())},[]);const w=()=>{y.current||(y.current=!0,n(r))},v=()=>{y.current||(y.current=!0,d())};return l.jsx(_n,{ref:s,"data-testid":"world-text-editor",value:r,onChange:b=>h(b.target.value),onBlur:w,onKeyDown:b=>{b.key==="Escape"?(b.stopPropagation(),v()):b.key==="Enter"&&!b.shiftKey&&(b.preventDefault(),w())},"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:Et.overlayLow,pointerEvents:"auto",resize:"none"}})}const Y=st.accent.default,Qo=Et.overlayLow,Wt=5;function Jo(e,o,n){return e?!1:ye()?.activate(o,n)??!1}function ti(e,o,n,d,r,h){const s=e?null:ye()?.hover(o,n)??null;r(s),h(s?null:d(o,n))}function ei(e,o){const n=e.hierarchy.node(o);return n?`${n.label}·${n.kind}`:o}function ni(e){return e instanceof nn?e.childAdapters().some(o=>!!o.adapter.rects):!!e.rects}function oi(e){const o=e instanceof nn?e.childAdapters():[{worldId:"",adapter:e}],n=[];for(const{worldId:d,adapter:r}of o)if(r.rects&&!(d&&Ro(d)))for(const h of jo(r)){if(r.inspector?.get(h,"locked")===!0)continue;const s=r.rects.rect(h);s&&n.push({id:h,rect:s})}return n}function ii(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 ri(e,o,n){if(!n)return[o];const d=new Set(e);return d.has(o)?d.delete(o):d.add(o),[...d]}function si(e,o,n,d){return o&&!!n&&(n.width>Wt||n.height>Wt)&&n?oi(e).filter(s=>ii(n,s.rect)).map(s=>s.id):d?null:[]}function ai(e,o,n,d){return e?"grabbing":o?"grab":n||d?"crosshair":"default"}function rt(e){try{e.currentTarget.setPointerCapture?.(e.pointerId)}catch{}}function ae(e){e.currentTarget.hasPointerCapture?.(e.pointerId)&&e.currentTarget.releasePointerCapture?.(e.pointerId)}function li(e,o){if(o!==null)return!1;const n=e.currentTarget.parentElement?.parentElement??null;return Lo(n,e.clientX,e.clientY)}function Kt(e,o,n){return!e||o===n||o==="combined"||o==="select"}function Ae(e,o){return{position:"absolute",left:e.x,top:e.y,width:e.width,height:e.height,borderStyle:"solid",borderColor:Y,borderWidth:o?2:1,background:o?`color-mix(in srgb, ${Y} 6%, transparent)`:"transparent",boxSizing:"border-box",pointerEvents:"none"}}function ci(e,o,n){if(!e)return{left:o.x+o.width/2-et/2,top:o.y-n-et/2};const d=(e.tl.x+e.tr.x)/2,r=(e.tl.y+e.tr.y)/2,h=e.tl.x-e.bl.x,s=e.tl.y-e.bl.y,y=Math.hypot(h,s)||1;return{left:d+h/y*n-et/2,top:r+s/y*n-et/2}}function di(e,o){const n=Math.hypot(e.tr.x-e.tl.x,e.tr.y-e.tl.y),d=Math.hypot(e.bl.x-e.tl.x,e.bl.y-e.tl.y),r=(e.tl.x+e.br.x)/2,h=(e.tl.y+e.br.y)/2;return{position:"absolute",left:r-n/2,top:h-d/2,width:n,height:d,transform:`rotate(${zt(e)}rad)`,transformOrigin:"center",borderStyle:"solid",borderColor:Y,borderWidth:o,background:"transparent",boxSizing:"border-box",pointerEvents:"none"}}function ui(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:Y,borderRadius:3,pointerEvents:"none",whiteSpace:"nowrap"}}const Nt=10,le=48;function ce(e,o){return{position:"absolute",left:e.x-Nt/2,top:e.y-Nt/2,width:Nt,height:Nt,background:"#fff",border:`1px solid ${Y}`,boxSizing:"border-box",cursor:o,pointerEvents:"auto"}}const et=12,dn=24;function pi(e){return{position:"absolute",left:e.x+e.width/2-et/2,top:e.y-dn-et/2,width:et,height:et,borderRadius:"50%",background:"#fff",border:`1px solid ${Y}`,boxSizing:"border-box",cursor:"grab",padding:0,pointerEvents:"auto"}}const Ke=12;function fi(e){return{position:"absolute",left:e.position[0],top:e.position[1],width:Ke,height:Ke,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 xi(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 ${Y}`,boxSizing:"border-box",color:Y,cursor:"crosshair",fontSize:9,fontFamily:"'SF Mono', 'Fira Code', Menlo, Consolas, monospace",fontWeight:700,lineHeight:1,padding:0,pointerEvents:"auto",touchAction:"none"}}function hi(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:Y,borderRadius:3,pointerEvents:"none",whiteSpace:"nowrap"}}const yi="rgba(46, 204, 113, 0.25)",gi="rgba(230, 126, 34, 0.25)";function vi(e){return{position:"absolute",left:e.x,top:e.y,width:e.width,height:e.height,background:e.kind==="padding"?yi:gi,boxSizing:"border-box",cursor:e.cursor,pointerEvents:"auto"}}function mi(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 bi(e){return{position:"absolute",left:e.x,top:e.y,width:e.width,height:e.height,border:`2px dashed ${Y}`,background:`color-mix(in srgb, ${Y} 15%, transparent)`,boxSizing:"border-box",pointerEvents:"none",opacity:.7}}function wi(e){return{position:"absolute",left:e.x,top:e.y,width:e.width,height:e.height,background:"#ff5fa2",borderRadius:2,pointerEvents:"none"}}const ge="#ff2d92",_t=6;function Si(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:ge,pointerEvents:"none"}}function Ne(e,o,n){return{position:"absolute",left:n?e:e-_t/2,top:n?o-_t/2:o,width:n?1:_t,height:n?_t:1,background:ge,pointerEvents:"none"}}function Ei(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:ge,borderRadius:2,pointerEvents:"none",whiteSpace:"nowrap"}}const _e="#f24822";function ki(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 ${_e}`:void 0,borderTop:o?void 0:`1px dashed ${_e}`,pointerEvents:"none"}}function Ci(e){return{position:"absolute",left:e.x,top:Math.max(0,e.y-36),display:"flex",gap:4,pointerEvents:"none"}}const We={padding:"2px 6px",fontSize:10,fontFamily:"'SF Mono', 'Fira Code', Menlo, Consolas, monospace",fontWeight:600,color:st.content.onAccent,background:`color-mix(in srgb, ${Y} 85%, transparent)`,borderRadius:3,whiteSpace:"nowrap"};function Ri(e){return{position:"absolute",left:e.x,top:e.y,width:e.width,height:e.height,border:`1px dashed color-mix(in srgb, ${Y} 45%, transparent)`,boxSizing:"border-box",pointerEvents:"none"}}function Ve(e,o,n,d=0){return o&&n>0?Math.round((e-d)/n)*n+d:e}function ji(e,o,n,d,r,h,s=!1){const y=e.nativeHandleSpan??1,w=s?"both":e.nativeScaleAxis??"both",v=s&&e.nativeScaleAxis==="x"?o:s&&e.nativeScaleAxis==="y"?n:null;let b,R;if(w==="x")b=1+o/y,R=1;else if(w==="y")b=1,R=1+n/y;else if(v!==null)b=1+v/y,R=b;else if(e.center){const P=(e.startAngleDeg??0)*Math.PI/180,I=e.startLocal.x-e.center.x,O=e.startLocal.y-e.center.y,k=I*Math.cos(P)+O*Math.sin(P),A=-I*Math.sin(P)+O*Math.cos(P),V=(I+o)*Math.cos(P)+(O+n)*Math.sin(P),nt=-(I+o)*Math.sin(P)+(O+n)*Math.cos(P);if(b=Math.abs(k)>1e-6?V/k:1,R=Math.abs(A)>1e-6?nt/A:1,s){const U=(b+R)/2;b=U,R=U}}else{const P=1+(o+n)/(Math.SQRT2*y);b=P,R=P}return{...w!=="y"?{scaleXFactor:b}:{},...w!=="x"?{scaleYFactor:R}:{},...d&&!r?{scaleStep:h}:{}}}function Pi(e,o,n,d,r,h,s={x:0,y:0}){const y=e.nativeOrigin;if(!y)return{};const w=d&&!0;return{...e.moveAxis!=="y"?{originX:Ve(y.x+o,w,h,s.x)}:{},...e.moveAxis!=="x"?{originY:Ve(y.y+n,w,h,s.y)}:{}}}function Ue(e,o,n){return e==="x"?{x:o.x+n,y:o.y}:e==="y"?{x:o.x,y:o.y+n}:{x:o.x+n/Math.SQRT2,y:o.y+n/Math.SQRT2}}function zi(e,o,n){return e==="x"?{dx:o,dy:0}:e==="y"?{dx:0,dy:n}:{dx:o,dy:n}}function Di(e,o){e.ownerBoxEdit.begin(e.id);for(const n of e.peers)n.ownerBoxEdit.begin(n.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 Ii(e,o,n){let d=o;for(let r=0;d!==null&&r<256;r++){if(n.has(d))return d;d=e.hierarchy.node(d)?.parentId??null}return null}function Oi(e,o,n){const d=K(e,o);if(!d)return null;const r=e.inspector?.get(o,"style.position"),h=ue(e,o)==="2d";if(r!=="absolute"&&r!=="fixed"&&!h)return null;const s=T(e,o);if(!s)return null;const y=h?d.gizmoOrigin?.(o)??void 0:void 0,w=[];for(const v of n){if(v===o)continue;const b=K(e,v),R=T(e,v);if(!b||!R)continue;const P=e.inspector?.get(v,"style.position"),I=ue(e,v)==="2d";if(P!=="absolute"&&P!=="fixed"&&!I)continue;const O=I?b.gizmoOrigin?.(v)??void 0:void 0;w.push({id:v,ownerBoxEdit:b,origRect:R,...O?{nativeOrigin:O}:{}})}return{id:o,ownerBoxEdit:d,origRect:s,context:Dt(e,o),...y?{nativeOrigin:y}:{},peers:w}}function Li(e,o){if(!tn(e,o)?.reorder)return null;const d=bo(e,o);if(!d||d.length<3)return null;const r=T(e,o);if(!r)return null;const h=[];for(const s of d){if(s===o)continue;const y=T(e,s);y&&h.push({id:s,rect:y})}return h.length===0?null:{id:o,adapter:e,origRect:r,siblingRects:h}}function Mi(){return wo()}function Ti(e,o){if(o.size!==1)return null;const n=[...o][0],d=K(e,n);if(!d)return null;const r=T(e,n);if(!r)return null;const h=So(r,Eo(e,n));return{id:n,rect:r,ownerBoxEdit:d,spacingBands:h}}function Fi(e,o){if(o.size<2)return null;const n=[];for(const d of o){const r=T(e,d);if(!r||!K(e,d))return null;n.push({id:d,rect:r})}return n}function $i(e,o,n){const d=o.size===1?[...o][0]:null,r=d?T(e,d):null,h=r&&n?ko(r,n):[],s=d?Co(e,d):null,y=!!(s&&(s.position||s.parentLayout)),w=d?Dt(e,d)?.parent??null:null;return{selectedSingleRect:r,measureLines:h,positionBadge:s,showPositionBadge:y,parentRect:w}}function Xi({state:e,adapter:o,onClose:n}){const d=u.useRef(null);return u.useEffect(()=>{const r=s=>{d.current?.contains(s.target)||n()},h=s=>{s.key==="Escape"&&n()};return document.addEventListener("pointerdown",r),document.addEventListener("keydown",h),()=>{document.removeEventListener("pointerdown",r),document.removeEventListener("keydown",h)}},[n]),l.jsx(he,{children:l.jsx(qe,{ref:d,"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:Et.dropdown},children:e.ids.map(r=>{const h=o.hierarchy.node(r);return l.jsxs(de,{"data-testid":"viewport-pick-menu-item",onSelect:()=>{en(o,[r]),n()},style:{justifyContent:"space-between",gap:20},children:[l.jsx("span",{children:h?.label??r}),l.jsx("span",{style:{color:st.content.muted,fontSize:11},children:h?.kind??""})]},r)})})})}function nr({adapter:e,view:o,transformModeAware:n=!1,presentationId:d}={}){const r=Wn(),h=u.useSyncExternalStore(r.subscribe,r.getSnapshot),s=e??Vn(r),y=u.useCallback((t,i)=>e?e.pickable?.pick(t,i)??null:Do(r,t,i),[e,r]),w=u.useRef(null),v=u.useRef(null),b=u.useRef(null),[R,P]=u.useState(null),[I,O]=u.useState(null),[k,A]=u.useState(null),[V,nt]=u.useState(null),U=u.useRef(null),[L,Z]=u.useState(null),ut=u.useRef(()=>{}),It=u.useCallback((t,i,c=!1)=>{const a=Io(r,t,i,{...e?{adapter:e}:{},...c?{includeLocked:c}:{}});if(a.length===0){nt(null);return}nt({x:t,y:i,ids:a})},[e,r]);u.useEffect(()=>{const t=c=>{const a=U.current;!a||a.pointerId!==c.pointerId||a.moved||Math.hypot(c.clientX-a.startClientX,c.clientY-a.startClientY)>Wt&&(a.moved=!0)},i=c=>{const a=U.current;!a||a.pointerId!==c.pointerId||(U.current=null,c.type==="pointerup"&&!a.moved&&(n&&!c.altKey?ut.current(c.clientX,c.clientY):It(c.clientX,c.clientY,n)))};return window.addEventListener("pointermove",t),window.addEventListener("pointerup",i),window.addEventListener("pointercancel",i),()=>{window.removeEventListener("pointermove",t),window.removeEventListener("pointerup",i),window.removeEventListener("pointercancel",i)}},[It,n]);const Ot=u.useCallback(t=>{t.preventDefault(),t.stopPropagation()},[]),x=o??Un;u.useSyncExternalStore(Bo,Yo);const $=n?ht(x):null,j=[...r.selectedEntityIds].sort().join("\0"),Lt=u.useRef(j);u.useEffect(()=>{Lt.current!==j&&(Lt.current=j,ht(x)&&Xo(x,null))},[j,x]);const m=u.useSyncExternalStore(x.subscribe,x.get,x.get);u.useSyncExternalStore(u.useCallback(t=>$o(x,t),[x]),u.useCallback(()=>Fo(x),[x]));const Ut=n?To(x):[],H=n?1/m.zoom:1,gt=n&&r.transformMode!=="combined"&&r.transformMode!=="select";u.useSyncExternalStore(Zn,qn);const ve=d?Qn(d):null,un=ve?.position??!0,Mt=!gt||(ve?.transformation??!0),Zt=u.useRef(!1),qt=u.useRef(null),[pn,me]=u.useState(!1),at=u.useRef(null),[fn,Tt]=u.useState(!1),F=u.useRef(null);u.useEffect(()=>()=>{const t=F.current;if(F.current=null,!!t){t.ownerBoxEdit.end(t.id);for(const i of t.movePeers??[])i.ownerBoxEdit.end(i.id)}},[]);const[,xn]=u.useState(0),[hn,kt]=u.useState(null),[yn,pt]=u.useState([]),Qt=u.useRef(null),[gn,vn]=u.useState(null),vt=u.useCallback(t=>{Qt.current=t,vn(t)},[]),be=u.useRef(null),[mn,bn]=u.useState(null),[Ft,Ct]=u.useState(null),ft=u.useCallback(t=>{be.current=t,bn(t)},[]),Jt=u.useRef(null),we=u.useRef(null);u.useEffect(()=>{const t=Jt.current;if(!t)return;Jt.current=null;const i=re(s,t.id);i&&i.get(t.id)===null&&Ct({id:t.id,rect:t.rect})},[h]);const Se=u.useRef("");u.useEffect(()=>{const t=[...r.selectedEntityIds].sort().join(",");t!==Se.current&&(Se.current=t,Ft&&Ct(null))}),u.useEffect(()=>{if(!Ft)return;const t=window.setTimeout(()=>Ct(null),4e3);return()=>window.clearTimeout(t)},[Ft]);const lt=u.useSyncExternalStore(Po,zo),[wn,Ee]=u.useState(null),q=u.useCallback(t=>{b.current=t,P(t)},[]),S=u.useCallback((t,i)=>{const c=w.current?.getBoundingClientRect();return{x:(t-(c?.left??0)-m.x)/m.zoom,y:(i-(c?.top??0)-m.y)/m.zoom}},[m.x,m.y,m.zoom]);ut.current=(t,i)=>{const c=r.selectedEntityIds,a=s.hierarchy.roots(),f=c.size===1?[...c][0]:a.length===1?a[0].id:null,p=f?tn(s,f):s.structure??null,D=p?.creatableKinds?.(f)??[];if(!p){Z(null);return}const g=r.snap2D,C=(W,dt)=>r.snapEnabled&&g.step>0?Math.round((W-dt)/g.step)*g.step+dt:W,E=S(t,i),M={x:C(E.x,g.offsetX),y:C(E.y,g.offsetY)},z=g.pixel?{x:Math.round(M.x),y:Math.round(M.y)}:M;Z({x:t,y:i,at:z,parentId:f,structure:p,kinds:D,adapter:s})};const Sn=u.useCallback(t=>{!o||!n||!s.assetDrop||!t.dataTransfer.types.includes("application/x-editor-asset")||(t.preventDefault(),t.dataTransfer.dropEffect="copy")},[s.assetDrop,o,n]),En=u.useCallback(t=>{if(!o||!n||!s.assetDrop)return;const i=t.dataTransfer.getData("application/x-editor-asset");if(!i)return;let c;try{c=JSON.parse(i)}catch{return}const a=S(t.clientX,t.clientY),f={position:[a.x,a.y,0],item:c.component??{kind:"file",name:c.name??c.path.split("/").pop()??c.path}};s.assetDrop.accepts("",c.path,f)&&(t.preventDefault(),t.stopPropagation(),Je(s,"",c.path,f))},[s.assetDrop,o,S,n]),Q=u.useCallback(()=>xn(t=>t+1),[]),$t=u.useCallback(()=>{const t=F.current;if(!t)return!1;F.current=null,t.ownerBoxEdit.end(t.id);for(const i of t.movePeers??[])i.ownerBoxEdit.end(i.id);return kt(null),pt([]),Q(),!0},[Q]),kn=u.useCallback((t,i)=>{if(i.stopPropagation(),i.button!==0)return;const c=r.selectedEntityIds;if(c.size!==1)return;const a=[...c][0],f=K(s,a),p=T(s,a);if(!f||!p)return;const D=s.inspector?.get(a,"style.position"),g=ue(s,a)==="2d",C=g?xt(s,a):null,E=C&&se(C)?f.gizmoOrigin?.(a)??null:null;rt(i),f.begin(a),F.current={kind:"resize",id:a,ownerBoxEdit:f,startLocal:S(i.clientX,i.clientY),origRect:p,pos:t,...C&&E?{frame:C,frameOrigin:E}:{},isPositioned:D==="absolute"||D==="fixed"||g,context:Dt(s,a)}},[s,r,S]),ke=u.useCallback(()=>{if(!n||r.selectedEntityIds.size<2)return null;const t=[...r.selectedEntityIds].flatMap(c=>{const a=K(s,c),f=T(s,c),p=a?.gizmoOrigin?.(c);return a&&f&&p?[{id:c,ownerBoxEdit:a,origRect:f,nativeOrigin:p}]:[]});if(t.length<2)return null;const i=ht(x);return{primary:t[0],peers:t.slice(1),center:i??t[0].nativeOrigin,pivot:i}},[s,r,n,x]),Xt=u.useCallback((t,i,c="both")=>{const a=ke();if(!a)return!1;const f=xt(s,a.primary.id);rt(i),a.primary.ownerBoxEdit.begin(a.primary.id);for(const p of a.peers)p.ownerBoxEdit.begin(p.id);return F.current={kind:t,id:a.primary.id,ownerBoxEdit:a.primary.ownerBoxEdit,startLocal:S(i.clientX,i.clientY),origRect:a.primary.origRect,center:a.center,nativeOrigin:a.primary.nativeOrigin,movePeers:a.peers,...a.pivot?{groupCenter:a.pivot}:{},...f?{startAngleDeg:zt(f)*180/Math.PI}:{},...t==="native-scale"?{nativeScaleAxis:c,nativeHandleSpan:le/m.zoom}:{}},!0},[s,ke,S,m.zoom]),Bt=u.useCallback(t=>{if(t.stopPropagation(),t.button!==0)return;const i=r.selectedEntityIds;if(i.size>1){Xt("rotate",t);return}if(i.size!==1)return;const c=[...i][0],a=K(s,c),f=T(s,c);if(!a||!f)return;const p=n?a.gizmoOrigin?.(c):null,D=p?xt(s,c):null;rt(t),a.begin(c),F.current={...D?{startAngleDeg:zt(D)*180/Math.PI}:{},kind:"rotate",id:c,ownerBoxEdit:a,startLocal:S(t.clientX,t.clientY),origRect:f,center:(p?ht(x):null)??p??{x:f.x+f.width/2,y:f.y+f.height/2},...p?{nativeOrigin:p}:{}}},[s,r,S,n,Xt,x]),te=u.useCallback((t,i)=>{if(i.stopPropagation(),i.button!==0)return;const c=r.selectedEntityIds;if(c.size!==1)return;const a=[...c][0],f=K(s,a),p=T(s,a);if(!f||!p)return;const D=f.gizmoOrigin?.(a)??{x:p.x+p.width/2,y:p.y+p.height/2};rt(i),f.begin(a),F.current={kind:"move",id:a,ownerBoxEdit:f,startLocal:S(i.clientX,i.clientY),origRect:p,context:Dt(s,a),moveAxis:t,nativeOrigin:D}},[s,r,S]),Rt=u.useCallback((t,i)=>{if(i.stopPropagation(),i.button!==0)return;const c=r.selectedEntityIds;if(c.size>1){Xt("native-scale",i,t);return}if(c.size!==1)return;const a=[...c][0],f=K(s,a),p=T(s,a);if(!f||!p)return;const D=f.gizmoOrigin?.(a)??{x:p.x+p.width/2,y:p.y+p.height/2},g=xt(s,a);rt(i),f.begin(a),F.current={...g?{startAngleDeg:zt(g)*180/Math.PI}:{},kind:"native-scale",center:ht(x)??D,id:a,ownerBoxEdit:f,startLocal:S(i.clientX,i.clientY),origRect:p,nativeOrigin:D,nativeScaleAxis:t,nativeHandleSpan:le/m.zoom}},[s,m.zoom,r,S,Xt,x]),Cn=u.useCallback((t,i)=>{if(i.stopPropagation(),i.button!==0)return;const c=r.selectedEntityIds;if(c.size!==1)return;const a=[...c][0],f=K(s,a),p=T(s,a);!f||!p||f.referencePoint?.(a)?.id!==t.id||(rt(i),f.begin(a),F.current={kind:"reference",id:a,ownerBoxEdit:f,startLocal:S(i.clientX,i.clientY),origRect:p,context:Dt(s,a),pointerId:i.pointerId,referencePoint:t})},[s,r,S]),jt=u.useRef(null),mt=u.useCallback((t,i,c)=>{const a=T(s,t);return Jn(i,xt(s,t)??(a?to(a):null),{invert:c,smart:r.smartSnap,gridOn:r.snapEnabled,grid:r.snap2D,threshold:Me/Math.max(x.get().zoom,.01)})},[s,r,x]),Rn=u.useCallback((t,i,c,a)=>{if(a.stopPropagation(),a.button!==0||!c.writable)return;rt(a);const f=i.layers(t).some(p=>p.category==="origin"&&p.handles.some(D=>D.id===c.id));jt.current={id:t,handleId:c.id,provider:i,pivot:f}},[]),jn=u.useCallback(t=>{const i=jt.current;if(!i)return;const c=S(t.clientX,t.clientY),a=i.pivot?mt(i.id,c,t.metaKey||t.ctrlKey):c;i.provider.preview(i.id,i.handleId,[a.x,a.y,0]),Q()},[Q,S,mt]),ee=u.useCallback(t=>{const i=jt.current;if(jt.current=null,!i)return;ae(t);const c=S(t.clientX,t.clientY),a=i.pivot?mt(i.id,c,t.metaKey||t.ctrlKey):c;i.provider.commit(i.id,i.handleId,[a.x,a.y,0]),Q()},[Q,S,mt]),Pn=u.useCallback((t,i)=>{if(i.stopPropagation(),i.button!==0)return;const c=r.selectedEntityIds;if(c.size!==1)return;const a=[...c][0],f=K(s,a),p=T(s,a);!f||!p||(rt(i),f.begin(a),F.current={kind:"spacing",id:a,ownerBoxEdit:f,startLocal:S(i.clientX,i.clientY),origRect:p,side:t.side,origValue:t.value})},[s,r,S]),Yt=u.useCallback((t,i)=>{if(t.pointerId!==void 0&&i.pointerId!==t.pointerId)return;const c=S(i.clientX,i.clientY),a=c.x-t.startLocal.x,f=c.y-t.startLocal.y;let p;if(t.kind==="resize"&&t.frame&&t.frameOrigin)p=eo(t.frame,t.pos,a,f,t.frameOrigin,i.shiftKey),pt([]);else if(t.kind==="resize")p=no(t.pos,a,f,t.origRect,!!t.isPositioned,i.altKey,t.context),i.shiftKey&&t.isPositioned&&(p=oo(p,t.origRect,t.pos)),pt(io(t.pos,a,f,t.origRect,i.altKey,t.context));else if(t.kind==="native-scale")p=ji(t,a,f,r.scaleSnap,i.altKey,r.snap2D.scaleStep,i.shiftKey),pt([]);else if(t.kind==="move"){const{dx:g,dy:C}=zi(t.moveAxis,a,f);if(t.nativeOrigin){p=Pi(t,g,C,r.snapEnabled,!1,r.snap2D.step,r.snap2D.relative?t.nativeOrigin:{x:r.snap2D.offsetX,y:r.snap2D.offsetY});const E=ro({x:p.originX??t.nativeOrigin.x,y:p.originY??t.nativeOrigin.y},t.nativeOrigin,t.origRect,t.context,t.moveAxis,r.smartSnap.enabled===(i.metaKey||i.ctrlKey),Me/Math.max(m.zoom,.01),{x:Ut.filter(z=>z.axis==="x").map(z=>z.value),y:Ut.filter(z=>z.axis==="y").map(z=>z.value)},r.smartSnap),M=z=>r.snap2D.pixel?Math.round(z):z;p.originX!==void 0&&(p.originX=M(E.position.x)),p.originY!==void 0&&(p.originY=M(E.position.y)),pt(E.guides)}else p=so(g,C,t.origRect,i.altKey,t.context);kt(Te(t.origRect,g,C)),t.nativeOrigin||pt(ao(g,C,t.origRect,i.altKey,t.context))}else if(t.kind==="reference"){const g=lo(c,t.origRect,i.altKey,t.context,{bounded:t.referencePoint?.bounded,snapPoints:t.referencePoint?.snapPoints});p={referenceX:g.position.x,referenceY:g.position.y},pt(g.guides)}else if(t.kind==="rotate"){const g=t.nativeOrigin&&t.startAngleDeg!==void 0&&!r.snap2D.relative,C=(r.smartSnap.enabled||r.rotationSnap)!==(i.metaKey||i.ctrlKey);if(p=co(t.center,t.startLocal,c,t.nativeOrigin?g||!C:i.altKey,t.nativeOrigin?r.snap2D.rotationStep:15),g&&C&&p.rotate!==void 0){const M=r.snap2D.rotationStep,z=r.snap2D.rotationOffset,W=t.startAngleDeg,dt=W+p.rotate;p={rotate:Math.round((dt-z)/M)*M+z-W,rotationStep:M,rotationOffset:z}}const E=t.groupCenter??(t.nativeOrigin?ht(x):null);if(E&&t.nativeOrigin&&p.rotate!==void 0){const M=p.rotate*Math.PI/180,z=t.nativeOrigin.x-E.x,W=t.nativeOrigin.y-E.y;p={...p,originX:E.x+z*Math.cos(M)-W*Math.sin(M),originY:E.y+z*Math.sin(M)+W*Math.cos(M)}}}else p=uo(t.side,a,f,t.origValue??0);if(t.kind==="native-scale"&&t.groupCenter&&t.nativeOrigin){const g=t.groupCenter,C=p.scaleXFactor??1,E=p.scaleYFactor??1;p={...p,originX:g.x+(t.nativeOrigin.x-g.x)*C,originY:g.y+(t.nativeOrigin.y-g.y)*E}}const D=t.kind==="native-scale"&&!t.groupCenter&&t.nativeOrigin?ht(x):null;if(D&&t.nativeOrigin&&(p={...p,originX:D.x+(t.nativeOrigin.x-D.x)*(p.scaleXFactor??1),originY:D.y+(t.nativeOrigin.y-D.y)*(p.scaleYFactor??1)}),t.ownerBoxEdit.apply(t.id,p),t.movePeers&&(t.kind==="rotate"||t.kind==="native-scale")){const g=t.groupCenter,C=(p.rotate??0)*Math.PI/180,E=p.scaleXFactor??1,M=p.scaleYFactor??1;for(const z of t.movePeers){if(!z.nativeOrigin)continue;const W=g?z.nativeOrigin.x-g.x:0,dt=g?z.nativeOrigin.y-g.y:0;z.ownerBoxEdit.apply(z.id,t.kind==="rotate"?{rotate:p.rotate??0,...p.rotationStep!==void 0?{rotationStep:p.rotationStep,rotationOffset:p.rotationOffset??0}:{},...g?{originX:g.x+W*Math.cos(C)-dt*Math.sin(C),originY:g.y+W*Math.sin(C)+dt*Math.cos(C)}:{}}:{...p.scaleXFactor!==void 0?{scaleXFactor:E}:{},...p.scaleYFactor!==void 0?{scaleYFactor:M}:{},...p.scaleStep!==void 0?{scaleStep:p.scaleStep}:{},...g?{originX:g.x+W*E,originY:g.y+dt*M}:{}})}}if(t.kind==="move"&&t.movePeers){const g=t.nativeOrigin?(p.originX??t.nativeOrigin.x)-t.nativeOrigin.x:(p.x??t.origRect.x)-t.origRect.x,C=t.nativeOrigin?(p.originY??t.nativeOrigin.y)-t.nativeOrigin.y:(p.y??t.origRect.y)-t.origRect.y;for(const E of t.movePeers)E.ownerBoxEdit.apply(E.id,E.nativeOrigin?{originX:E.nativeOrigin.x+g,originY:E.nativeOrigin.y+C}:{x:E.origRect.x+g,y:E.origRect.y+C})}Q()},[S,Q,r,Ut,m.zoom]),Ht=u.useCallback((t,i)=>{const c=y(t,i);if(!c)return null;const a=po(s,c)?.backgroundChainAt(t,i)??null;return a?Mo(a):null},[s,y]);u.useEffect(()=>{if(!lt)return;const t=i=>{i.key==="Escape"&&$e(null)};return window.addEventListener("keydown",t),()=>window.removeEventListener("keydown",t)},[lt]),u.useEffect(()=>{if(!n)return;const t=i=>{if(i.key.toLowerCase()!=="v"||i.repeat||i.metaKey||i.ctrlKey||i.altKey)return;const c=i.target;if(c instanceof HTMLInputElement||c instanceof HTMLTextAreaElement||c instanceof HTMLSelectElement||c instanceof HTMLElement&&c.isContentEditable)return;const a=qt.current,f=r.selectedEntityIds;if(!a||f.size!==1||F.current||jt.current)return;const p=[...f][0],D=Fe(s,p),g=D?.layers(p).find(E=>E.category==="origin")?.handles.find(E=>E.writable);if(!D||!g)return;i.preventDefault();const C=mt(p,S(a.x,a.y),!1);D.commit(p,g.id,[C.x,C.y,0]),Q()};return window.addEventListener("keydown",t),()=>window.removeEventListener("keydown",t)},[s,r,n,S,Q,mt]),u.useEffect(()=>{const t=a=>a instanceof HTMLInputElement||a instanceof HTMLTextAreaElement||a instanceof HTMLSelectElement||a instanceof HTMLElement&&a.isContentEditable,i=a=>{a.code!=="Space"||a.repeat||t(a.target)||a.target instanceof HTMLButtonElement||(a.preventDefault(),Zt.current=!0,me(!0))},c=a=>{a.code==="Space"&&(Zt.current=!1,me(!1),at.current&&(at.current=null,Tt(!1)))};return window.addEventListener("keydown",i),window.addEventListener("keyup",c),()=>{window.removeEventListener("keydown",i),window.removeEventListener("keyup",c)}},[]);const Ce=u.useCallback(t=>{if(t.stopPropagation(),rt(t),Zt.current){at.current={startClientX:t.clientX,startClientY:t.clientY,startPan:x.get()},Tt(!0);return}if(n&&r.selectedEntityIds.size>1&&!(t.metaKey||t.ctrlKey)&&(r.transformMode==="rotate"||r.transformMode==="scale")){r.transformMode==="rotate"?Bt(t):Rt("both",t);return}if(n&&r.selectedEntityIds.size>=1&&(t.metaKey||t.ctrlKey)){t.altKey?Rt("both",t):Bt(t);return}if(lt){$e(Ht(t.clientX,t.clientY)),Ee(null);return}if(Jo(e,t.clientX,t.clientY)){v.current=null,O(null),q(null);return}const i=y(t.clientX,t.clientY);if(li(t,i)){v.current=null,O(null),q(null);return}const a=n&&t.altKey&&r.selectedEntityIds.size===1?[...r.selectedEntityIds][0]:i!==null?Ii(s,i,r.selectedEntityIds):null,f=Kt(n,r.transformMode,"translate")&&a!==null?Oi(s,a,r.selectedEntityIds):null,p=!f&&a!==null?Li(s,a):null;v.current={downClientX:t.clientX,downClientY:t.clientY,downLocal:S(t.clientX,t.clientY),hitAtDown:i,moved:!1,moveCandidate:f,reorderCandidate:p},O(null),q(null)},[s,r,x,n,S,q,lt,Ht,y,e,Rt,Bt]),zn=u.useCallback(t=>{if(t.button===2){U.current={pointerId:t.pointerId,startClientX:t.clientX,startClientY:t.clientY,moved:!1};return}t.button===0&&Ce(t)},[Ce]),Re=u.useCallback((t,i)=>{const c=i.clientX-t.downClientX,a=i.clientY-t.downClientY;if(!t.moved&&Math.hypot(c,a)>Wt&&(t.moved=!0),!!t.moved){if(t.moveCandidate){const f=Di(t.moveCandidate,t.downLocal);F.current=f,Yt(f,i);return}if(t.reorderCandidate){const f=S(i.clientX,i.clientY),p=fo(t.reorderCandidate.siblingRects,f);p&&(vt({id:t.reorderCandidate.id,adapter:t.reorderCandidate.adapter,gap:p}),kt(Te(t.reorderCandidate.origRect,f.x-t.downLocal.x,f.y-t.downLocal.y)));return}if(t.hitAtDown===null){const f=S(i.clientX,i.clientY);q({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)})}}},[S,q,Yt,vt]),J=u.useCallback(t=>{const i=at.current;if(i){x.setPan(i.startPan.x+(t.clientX-i.startClientX),i.startPan.y+(t.clientY-i.startClientY));return}if(lt){const f=S(t.clientX,t.clientY);Ee({...f,color:Ht(t.clientX,t.clientY)});return}qt.current={x:t.clientX,y:t.clientY};const c=F.current;if(c){Yt(c,t);return}if((t.buttons&1)===0){ti(e,t.clientX,t.clientY,y,A,O);return}const a=v.current;a&&Re(a,t)},[r,x,S,Yt,lt,Ht,Re,y,e]),tt=u.useCallback(t=>{if(ae(t),at.current){at.current=null,Tt(!1);return}const i=F.current;if(i?.pointerId!==void 0&&t.pointerId!==i.pointerId||$t())return;const c=Qt.current;if(c){vt(null),kt(null),v.current=null,xo(c.adapter,c.id,c.gap.beforeSiblingId);return}const a=v.current;if(v.current=null,!a)return;const f=a.hitAtDown!==null?ri(r.selectedEntityIds,a.hitAtDown,t.shiftKey):si(s,a.moved,b.current,t.shiftKey);f!==null&&en(s,f),q(null)},[s,r,q,$t,vt]),_=u.useCallback(t=>{if(ae(t),at.current){at.current=null,Tt(!1);return}const i=F.current;i?.pointerId!==void 0&&t.pointerId!==i.pointerId||$t()||(Qt.current&&(vt(null),kt(null)),v.current=null,q(null))},[$t,q,vt]),Dn=u.useCallback(()=>{qt.current=null,e||ye()?.clearHover(),A(null),O(null)},[e]),In=u.useCallback(t=>{const i=w.current?.parentElement??null;if(Oo(i,t.clientX,t.clientY))return;const c=y(t.clientX,t.clientY);if(!c)return;const a=re(s,c);if(!a)return;const f=T(s,c);if(!f)return;const p=a.get(c);if(p===null){console.warn(`[RootSelectionOverlay] text edit refused for "${c}": dynamic body or has child elements — not inline-editable.`),ft(null),Ct({id:c,rect:f});return}Ct(null),ft({id:c,rect:f,initialText:p})},[s,y,ft]),On=u.useCallback(t=>{const i=be.current;if(!i)return;const c=re(s,i.id);c&&(Jt.current={id:i.id,rect:i.rect},c.set(i.id,t)),ft(null)},[s,ft]),Ln=u.useCallback(()=>ft(null),[ft]);if(!ni(s)||Mi())return null;const ot=new Set([...r.selectedEntityIds].filter(t=>s.hierarchy.node(t)!==void 0)),ne=I!==null&&!ot.has(I)?T(s,I):null,X=Ti(s,ot),it=X?.rect??null,Mn=X?.ownerBoxEdit??null,oe=n&&X?xt(s,X.id):null,G=oe&&se(oe)?oe:null,B=n&&X?X.ownerBoxEdit.gizmoOrigin?.(X.id)??{x:X.rect.x+X.rect.width/2,y:X.rect.y+X.rect.height/2}:null,bt=le/m.zoom,ie=n&&ot.size>1?[...ot][0]:null,je=ie?K(s,ie)?.gizmoOrigin?.(ie)??null:null,ct=X?X.ownerBoxEdit.referencePoint?.(X.id):null,Tn=X?.spacingBands??[],wt=ot.size===1?[...ot][0]:null,Gt=wt?Fe(s,wt):null,Fn=wt&&Gt?Gt.layers(wt).filter(t=>n&&t.category==="origin"?un:r.showHelpers?r.helperVisibility[t.category]??!0:!1):[],Pt=n?{selectedSingleRect:null,measureLines:[],positionBadge:null,showPositionBadge:!1,parentRect:null}:$i(s,ot,ne),Pe=n?null:Fi(s,ot),At=we.current,$n=n?[]:At&&At.adapter===s&&At.version===h?At.hints:(()=>{const t=ho(s);return we.current={adapter:s,version:h,hints:t},t})();return l.jsxs("div",{style:{position:"absolute",inset:0,zIndex:Qo,pointerEvents:"none"},children:[l.jsx("div",{ref:w,"data-testid":"world-selection-overlay-interaction",style:{position:"absolute",inset:0,pointerEvents:"auto",touchAction:"none",userSelect:"none",cursor:k??ai(fn,pn,lt,!!R)},onPointerDownCapture:zn,onPointerMove:J,onPointerUp:tt,onPointerCancel:_,onLostPointerCapture:_,onPointerLeave:Dn,onDoubleClick:In,onContextMenu:Ot,onDragOver:Sn,onDrop:En}),L?l.jsx(Go,{state:L,onClose:()=>Z(null)}):null,V?l.jsx(Xi,{state:V,adapter:s,onClose:()=>nt(null)}):null,l.jsxs("div",{"data-testid":"world-selection-overlay-chrome",style:{position:"absolute",inset:0,pointerEvents:"none",transform:mo(m),transformOrigin:"0 0"},children:[!n&&$n.map(t=>l.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,borderStyle:"dashed",borderColor:"rgba(154, 160, 166, 0.7)",borderWidth:n?1/m.zoom:1,boxSizing:"border-box",pointerEvents:"none"}},t.id)),ne&&l.jsx("div",{"data-testid":"world-selection-hover",style:{...Ae(ne,!1),...n?{borderWidth:1/m.zoom}:{}}}),[...ot].map(t=>{const i=T(s,t);if(!i)return null;const c=n?xt(s,t):null,a=c&&se(c)?c:null;return l.jsxs("div",{children:[l.jsx("div",{"data-testid":"world-selection-box","data-entity-id":t,"data-turned":a?"true":void 0,style:{...a?di(a,1/m.zoom):Ae(i,!0),...n&&!a?{borderWidth:1/m.zoom,background:"transparent"}:{}}}),!n&&l.jsx("div",{"data-testid":"world-selection-label",style:ui(i),children:ei(s,t)})]},t)}),R&&l.jsx("div",{"data-testid":"world-selection-marquee",style:{position:"absolute",left:R.x,top:R.y,width:R.width,height:R.height,border:`1px solid ${Y}`,background:`color-mix(in srgb, ${Y} 10%, transparent)`,pointerEvents:"none"}}),!n&&l.jsx(Bi,{measureLines:Pt.measureLines,snapGuides:yn,positionBadge:Pt.positionBadge,showPositionBadge:Pt.showPositionBadge,badgeAnchorRect:Pt.selectedSingleRect,parentRect:Pt.parentRect,screenScale:H,screenZoom:1}),!n&&l.jsx(Yi,{dragGhost:hn,reorderPreview:gn}),!n&&Pe&&l.jsx(Zo,{adapter:s,entries:Pe}),$?l.jsx("div",{"data-testid":"world-2d-temporary-pivot","aria-label":"Temporary pivot",style:{position:"absolute",left:$.x-8,top:$.y-8,width:16,height:16,transform:`scale(${H})`,transformOrigin:"center",pointerEvents:"none",background:"linear-gradient(#ffb020, #ffb020) center / 16px 2px no-repeat, linear-gradient(#ffb020, #ffb020) center / 2px 16px no-repeat"}}):null,je&&Kt(n,r.transformMode,"scale")&&Mt&&gt&&["x","y"].map(t=>l.jsx("div",{"data-testid":`world-2d-group-scale-${t}`,title:t==="x"?"Scale the selection on X":"Scale the selection on Y",style:{...ce(Ue(t,je,bt),t==="x"?"ew-resize":"ns-resize"),transform:`scale(${H})`,transformOrigin:"center",background:t==="x"?"#ef5350":"#66bb6a"},onPointerDown:i=>Rt(t,i),onPointerMove:J,onPointerUp:tt,onPointerCancel:_},t)),it&&Mn&&l.jsxs(l.Fragment,{children:[!n&&Tn.map(t=>l.jsxs("div",{children:[l.jsx("div",{"data-testid":`world-spacing-${t.kind}-${Gi(t.side)}`,style:vi(t),onPointerDown:i=>Pn(t,i),onPointerMove:J,onPointerUp:tt,onPointerCancel:_}),!t.isZero&&l.jsx("div",{style:{...mi(t),...n?{transform:`translate(-50%, -50%) scale(${H})`,transformOrigin:"center"}:{}},children:Math.round(t.value)})]},t.side)),ct&&l.jsx("div",{"aria-label":`Edit ${ct.label}`,"data-reference-kind":ct.kind,"data-testid":"world-reference-point-handle",title:`${ct.label} (${ct.bounded?"native corner/edge/center snap":"8px/alignment snap"}, Alt for free movement)`,style:{...xi(ct),...n?{transform:`scale(${H})`,transformOrigin:"center"}:{}},onPointerDown:t=>Cn(ct,t),onPointerMove:J,onPointerUp:tt,onPointerCancel:_,onLostPointerCapture:_,role:"button",tabIndex:0,children:ct.kind==="anchor"?"A":"P"}),wt&&Gt&&Fn.flatMap(t=>t.handles.map(i=>l.jsx("div",{"aria-label":i.label,"data-testid":"world-spatial-handle","data-handle-id":i.id,"data-writable":i.writable,role:"button",tabIndex:0,title:i.writable?i.label:`${i.label} — ${i.reason}`,style:{...fi(i),transform:`translate(-50%, -50%) scale(${H})`},onPointerDown:c=>Rn(wt,Gt,i,c),onPointerMove:jn,onPointerUp:ee,onPointerCancel:ee,onLostPointerCapture:ee},`${t.id}:${i.id}`))),n&&r.transformMode==="translate"&&Mt&&l.jsxs(l.Fragment,{children:[l.jsx("div",{"data-testid":"world-2d-move-axis-x",title:"Move on X axis",style:{position:"absolute",left:B.x,top:B.y-5/m.zoom,width:bt,height:10/m.zoom,borderTop:`${2/m.zoom}px solid #ef5350`,boxSizing:"border-box",cursor:"ew-resize",pointerEvents:"auto"},onPointerDown:t=>te("x",t),onPointerMove:J,onPointerUp:tt,onPointerCancel:_}),l.jsx("div",{"data-testid":"world-2d-move-axis-y",title:"Move on Y axis",style:{position:"absolute",left:B.x-5/m.zoom,top:B.y,width:10/m.zoom,height:bt,borderLeft:`${2/m.zoom}px solid #66bb6a`,boxSizing:"border-box",cursor:"ns-resize",pointerEvents:"auto"},onPointerDown:t=>te("y",t),onPointerMove:J,onPointerUp:tt,onPointerCancel:_}),l.jsx("div",{"data-testid":"world-2d-move-center",title:"Move freely",style:{position:"absolute",left:B.x-5/m.zoom,top:B.y-5/m.zoom,width:10/m.zoom,height:10/m.zoom,border:"1px solid rgba(255,255,255,.9)",background:"#4aa3ff",boxSizing:"border-box",cursor:"move",pointerEvents:"auto"},onPointerDown:t=>te("both",t),onPointerMove:J,onPointerUp:tt,onPointerCancel:_})]}),Kt(n,r.transformMode,"scale")&&Mt&&(gt?l.jsxs(l.Fragment,{children:[l.jsx("div",{"data-testid":"world-2d-scale-axis-x",style:{position:"absolute",left:B.x,top:B.y,width:bt,borderTop:`${2/m.zoom}px solid #ef5350`,pointerEvents:"none"}}),l.jsx("div",{"data-testid":"world-2d-scale-axis-y",style:{position:"absolute",left:B.x,top:B.y,height:bt,borderLeft:`${2/m.zoom}px solid #66bb6a`,pointerEvents:"none"}}),[["x","ew-resize"],["y","ns-resize"],["both","nwse-resize"]].map(([t,i])=>{const c=Ue(t,B,bt),a=t==="x"?"e":t==="y"?"s":"se";return l.jsx("div",{"data-testid":`world-resize-handle-${a}`,style:{...ce(c,i),transform:`scale(${H})`,transformOrigin:"center",background:t==="x"?"#ef5350":t==="y"?"#66bb6a":"#fff"},onPointerDown:f=>Rt(t,f),onPointerMove:J,onPointerUp:tt,onPointerCancel:_},t)})]}):l.jsxs(l.Fragment,{children:[yo.map(({pos:t,cursor:i})=>l.jsx("div",{"data-testid":`world-resize-handle-${t}`,style:{...ce(G?go(G,t):vo(it,t),i),...n?{transform:G?`rotate(${zt(G)}rad) scale(${H})`:`scale(${H})`,transformOrigin:"center"}:{}},onPointerDown:c=>kn(t,c),onPointerMove:J,onPointerUp:tt,onPointerCancel:_},t)),l.jsx("div",{"data-testid":"world-resize-dimension-label",style:{...hi(it),...n?{top:it.y+it.height+4*H,transform:`scale(${H})`,transformOrigin:"top left"}:{}},children:G?`${Math.round(Math.hypot(G.tr.x-G.tl.x,G.tr.y-G.tl.y))}×${Math.round(Math.hypot(G.bl.x-G.tl.x,G.bl.y-G.tl.y))}`:`${Math.round(it.width)}×${Math.round(it.height)}`})]})),Kt(n,r.transformMode,"rotate")&&Mt&&l.jsxs(l.Fragment,{children:[gt&&l.jsx("div",{"data-testid":"world-2d-rotate-ring",style:{position:"absolute",left:B.x-40/m.zoom,top:B.y-40/m.zoom,width:80/m.zoom,height:80/m.zoom,border:`${1/m.zoom}px solid #4aa3ff`,borderRadius:"50%",boxSizing:"border-box",pointerEvents:"none"}}),l.jsx("div",{"data-testid":"world-rotate-handle","aria-label":"Rotate selection",title:n?"Rotate selection (snaps under Smart Snap or Use Rotation Snap; Cmd inverts)":"Rotate selection (15° snap, Alt for free rotation)",style:{...pi(it),...n&&!gt?{...ci(G,it,dn*H),transform:`scale(${H})`,transformOrigin:"center"}:{},...gt?{left:B.x-et/2,top:B.y-40/m.zoom-et/2,transform:`scale(${H})`,transformOrigin:"center",background:"#4aa3ff"}:{}},onPointerDown:Bt,onPointerMove:J,onPointerUp:tt,onPointerCancel:_,role:"button",tabIndex:0})]})]}),!n&&l.jsx(Hi,{textEdit:mn,onCommitTextEdit:On,onCancelTextEdit:Ln,textEditRefused:Ft,eyedropperActive:lt,eyedropperPreview:wn})]})]})}function Bi(e){const{measureLines:o,snapGuides:n,positionBadge:d,showPositionBadge:r,badgeAnchorRect:h,parentRect:s,screenScale:y,screenZoom:w}=e;return l.jsxs(l.Fragment,{children:[s&&l.jsx("div",{"data-testid":"world-parent-outline",style:Ri(s)}),o.map(v=>l.jsxs("div",{"data-testid":"world-measure-line",children:[l.jsx("div",{style:Si(v)}),l.jsx("div",{style:Ne(v.x1,v.y1,v.orientation==="horizontal")}),l.jsx("div",{style:Ne(v.x2,v.y2,v.orientation==="horizontal")}),l.jsx("div",{"data-testid":"world-measure-line-label",style:{...Ei(v),...y!==1?{transform:`translate(-50%, -50%) scale(${y})`,transformOrigin:"center"}:{}},children:v.distance})]},v.orientation)),n.map(v=>l.jsx("div",{"data-testid":"world-snap-guide",style:ki(v)},v.orientation)),r&&h&&d&&l.jsxs("div",{"data-testid":"world-position-badge",style:{...Ci(h),...y!==1?{top:h.y-36/w,transform:`scale(${y})`,transformOrigin:"top left"}:{}},children:[d.position&&l.jsx("span",{"data-testid":"world-position-badge-mode",style:We,children:d.position}),d.parentLayout&&l.jsx("span",{"data-testid":"world-position-badge-layout",style:We,children:d.parentLayout})]})]})}function Yi(e){const{dragGhost:o,reorderPreview:n}=e;return l.jsxs(l.Fragment,{children:[o&&l.jsx("div",{"data-testid":"world-drag-ghost",style:bi(o)}),n&&l.jsx("div",{"data-testid":"world-reorder-preview",style:wi(n.gap.marker)})]})}function Hi(e){const{textEdit:o,onCommitTextEdit:n,onCancelTextEdit:d,textEditRefused:r,eyedropperActive:h,eyedropperPreview:s}=e;return l.jsxs(l.Fragment,{children:[o&&l.jsx("div",{style:{pointerEvents:"auto"},children:l.jsx(qo,{rect:o.rect,initialText:o.initialText,onCommit:n,onCancel:d})}),r&&l.jsx("div",{"data-testid":"world-text-edit-refused",title:"dynamic body — not inline-editable",style:{position:"absolute",left:r.rect.x,top:r.rect.y,width:Math.max(r.rect.width,40),height:Math.max(r.rect.height,20),border:`2px dashed ${st.semantic.danger}`,boxSizing:"border-box",background:st.semantic.dangerMuted,pointerEvents:"none"}}),h&&s&&l.jsx("div",{"data-testid":"world-eyedropper-swatch","data-color-state":s.color?"resolved":"unknown",style:{position:"absolute",left:s.x+12,top:s.y+12,width:24,height:24,borderRadius:4,border:"2px solid #fff",boxShadow:"0 1px 4px rgba(0,0,0,0.5)",background:s.color??"repeating-linear-gradient(45deg, #999, #999 4px, #ccc 4px, #ccc 8px)",pointerEvents:"none"}})]})}function Gi(e){return e.endsWith("Top")?"top":e.endsWith("Right")?"right":e.endsWith("Bottom")?"bottom":"left"}export{nr as R,Xi as V,To as a,Xo as b,Fo as c,Qi as d,er as e,Ji as m,tr as r,$o as s};
@@ -1,4 +1,4 @@
1
- import{a as i}from"./jsx-runtime-DPjLkJKQ.js";import{dR as ne,eQ as D,dT as N,dU as se,gi as ie,al as m,b5 as T,bH as oe,cP as _,dV as G,aS as ae}from"./index-r-FuctN5.js";import{r as h}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{C as le}from"./ColorInput-D6i_QXM-.js";import{W as ce}from"./three.module-BLhyNg0e.js";import{s as P}from"./asset-editor-persistence-C8kiK_is.js";import{ej as H,el as ue,d9 as de,em as fe,aI as me,co as pe,cl as he,cm as ge,_ as X,fd as W,fo as K,fp as Z,K as ve,db as ye,ey as xe,Z as be,au as Se,dw as we,cE as je}from"./three.core-3arARmh6.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 q(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 V(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[...V(e,"vertex"),...V(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 M(e,t){const r=e.split(`
1
+ import{a as i}from"./jsx-runtime-DPjLkJKQ.js";import{dR as ne,eQ as D,dT as N,dU as se,gi as ie,al as m,b5 as T,bH as oe,cP as _,dV as G,aS as ae}from"./index-jhDTJrJJ.js";import{r as h}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{C as le}from"./ColorInput-Cad8L0Ed.js";import{W as ce}from"./three.module-BLhyNg0e.js";import{s as P}from"./asset-editor-persistence-BrrBFKn0.js";import{ej as H,el as ue,d9 as de,em as fe,aI as me,co as pe,cl as he,cm as ge,_ as X,fd as W,fo as K,fp as Z,K as ve,db as ye,ey as xe,Z as be,au as Se,dw as we,cE as je}from"./three.core-3arARmh6.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 q(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 V(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[...V(e,"vertex"),...V(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 M(e,t){const r=e.split(`
2
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 O(e){return`#line 1
3
3
  ${e}`}const Te=`varying vec2 vUv;
4
4
 
@@ -1 +1 @@
1
- import{a as o}from"./jsx-runtime-DPjLkJKQ.js";import{r as w}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{e4 as j,a6 as S,f0 as st,aN as et,e6 as M,e5 as L,bH as K,a7 as z,iZ as X,kD as O,eJ as at,bP as it,hZ as W,dV as lt,aS as ct}from"./index-r-FuctN5.js";import{C as N,r as ot}from"./ColorPicker-VBKN9sk0.js";const dt={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}}},V=["flex-start","center","flex-end"],Y=["flex-start","center","flex-end"];function pt({row:t,col:e,justify:s,align:r,isActive:c,disabled:a,onSelect:h}){return o.jsx("div",{"data-testid":`alignment-grid-${t}-${e}`,onClick:()=>{a||h(s,r)},style:{width:16,height:16,display:"flex",alignItems:"center",justifyContent:"center",cursor:a?"not-allowed":"pointer",borderRadius:j.radiusSmall,background:c?j.accent:"transparent"},children:o.jsx("div",{style:{width:c?6:4,height:c?6:4,borderRadius:"50%",background:c?j.onAccent:j.textMuted}})})}function Lt({value:t,onChange:e,disabled:s}){const r=V.indexOf(t.justify),c=Y.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:j.inputBg,borderRadius:j.radiusMedium,padding:4,opacity:s?.35:1},children:Y.map((a,h)=>V.map((l,m)=>o.jsx(pt,{row:h,col:m,justify:l,align:a,isActive:h===c&&m===r,disabled:s,onSelect:(f,g)=>e({justify:f,align:g})},`${h}-${m}`)))})}function It({onSelect:t,disabled:e}){return o.jsx("div",{"data-testid":"anchor-presets",style:{display:"flex",flexWrap:"wrap",gap:4},children:Object.entries(dt).map(([s,r])=>o.jsx(S,{type:"button",variant:"secondary",size:"compact","data-testid":`anchor-preset-${s}`,disabled:e,onClick:()=>t(s,r),children:s},s))})}function R({label:t,value:e,unit:s="",step:r=1,min:c,max:a,precision:h,disabled:l,onChange:m,onChangeEnd:f,testId:g,style:p}){const x=w.useRef(null),u=h??(r<1?2:r>=100?-2:0),n=w.useMemo(()=>y=>{if(u<0){const C=10**-u;return Math.round(y/C)*C}const k=10**u;return Math.round(y*k)/k},[u]),i=y=>{let k=y;return c!==void 0&&(k=Math.max(c,k)),a!==void 0&&(k=Math.min(a,k)),n(k)},d=y=>{if(l)return;y.preventDefault(),x.current={startX:y.clientX,startValue:e,last:e},document.body.style.cursor="ew-resize";const k=I=>{if(!x.current)return;I.preventDefault();const A=I.clientX-x.current.startX,rt=I.shiftKey?10:I.altKey?.1:1,U=i(x.current.startValue+A*r*rt);x.current.last=U,L({onChange:m},U)},C=()=>{document.body.style.cursor="",window.removeEventListener("mousemove",k),window.removeEventListener("mouseup",H),window.removeEventListener("keydown",G)},H=()=>{if(x.current){const I=x.current.last;x.current=null,M({onChange:m,onChangeEnd:f},I)}C()},G=I=>{if(I.key==="Escape"&&x.current){const A=i(x.current.startValue);x.current=null,L({onChange:m},A),M({onChange:m,onChangeEnd:f},A),C()}};window.addEventListener("mousemove",k),window.addEventListener("mouseup",H),window.addEventListener("keydown",G)},[v,$]=w.useState(null),E=w.useRef(!1),b=y=>{const k=Number.parseFloat(y);if(Number.isNaN(k))return;const C=i(k);C!==e&&M({onChange:m,onChangeEnd:f},C)};return o.jsxs("div",{style:{...st,...p},children:[o.jsx("span",{className:"volter-scrub-label","data-testid":g?`${g}-label`:void 0,onMouseDown:d,"data-disabled":l||void 0,style:{fontSize:11,...l?{color:j.dynamic}:{},flexShrink:0,cursor:l?"not-allowed":"ew-resize",userSelect:"none",fontWeight:500},children:t}),o.jsx(et,{"data-testid":g,type:"text",value:v??`${e}${s}`,readOnly:l,"data-dynamic":l||void 0,onFocus:y=>{$(`${e}${s}`),y.target.select()},onChange:y=>$(y.target.value),onBlur:y=>{E.current||b(y.target.value),E.current=!1,$(null)},onKeyDown:y=>{y.key==="Enter"&&y.target.blur(),y.key==="Escape"&&(E.current=!0,y.target.blur())},style:{flex:1,width:0}})]})}const q=["none","solid","dashed","dotted","double"];function ut(t){return{top:t,right:t,bottom:t,left:t}}function ht(t){const e=r=>`${r.width}|${r.style}|${r.color}`,s=e(t.top);return e(t.right)===s&&e(t.bottom)===s&&e(t.left)===s}function Tt({value:t,onChange:e,onChangeEnd:s,disabled:r,recentColors:c,onAddRecentColor:a}){const[h,l]=w.useState(!ht(t)),m=(p,x)=>{const u={...t.top,...p},n=ut(u);x?M({onChange:e,onChangeEnd:s},n):L({onChange:e},n)},f=(p,x,u)=>{const n={...t,[p]:{...t[p],...x}};u?M({onChange:e,onChangeEnd:s},n):L({onChange:e},n)};if(!h)return o.jsxs("div",{"data-testid":"border-editor-uniform",style:{display:"flex",gap:6,alignItems:"center"},children:[o.jsx(N,{testId:"border-color",value:t.top.color,disabled:r,onChange:p=>m({color:p},!1),onChangeEnd:p=>m({color:p},!0),recentColors:c,onAddRecentColor:a}),o.jsx(R,{testId:"border-width",label:"W",value:t.top.width,min:0,disabled:r,onChange:p=>m({width:p},!1),onChangeEnd:p=>m({width:p},!0),style:{width:64}}),o.jsx(K,{className:"volter-select","data-testid":"border-style",value:t.top.style,disabled:r,"data-dynamic":r||void 0,onChange:p=>m({style:p.target.value},!0),style:{flex:1},children:q.map(p=>o.jsx("option",{value:p,children:p},p))}),o.jsx(S,{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(z,{icon:X})})]});const g=[{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:j.textMuted},children:"Per-side"}),o.jsx("div",{style:{flex:1}}),o.jsx(S,{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(z,{icon:X})})]}),g.map(({key:p,label:x})=>o.jsxs("div",{style:{display:"flex",gap:4,alignItems:"center"},children:[o.jsx("span",{style:{fontSize:10,color:j.textMuted,width:10,textAlign:"center"},children:x}),o.jsx(N,{testId:`border-${p}-color`,value:t[p].color,disabled:r,onChange:u=>f(p,{color:u},!1),onChangeEnd:u=>f(p,{color:u},!0),recentColors:c,onAddRecentColor:a}),o.jsx(R,{testId:`border-${p}-width`,label:"",value:t[p].width,min:0,disabled:r,onChange:u=>f(p,{width:u},!1),onChangeEnd:u=>f(p,{width:u},!0),style:{width:48}}),o.jsx(K,{className:"volter-select","data-testid":`border-${p}-style`,value:t[p].style,disabled:r,"data-density":"compact","data-dynamic":r||void 0,onChange:u=>f(p,{style:u.target.value},!0),style:{flex:1},children:q.map(u=>o.jsx("option",{value:u,children:u},u))})]},p))]})}function ft(t){return{topLeft:t,topRight:t,bottomLeft:t,bottomRight:t}}function mt(t){return t.topLeft===t.topRight&&t.topRight===t.bottomLeft&&t.bottomLeft===t.bottomRight}function zt({value:t,onChange:e,onChangeEnd:s,disabled:r}){const[c,a]=w.useState(!mt(t)),h=(f,g)=>{const p=ft(f);g?M({onChange:e,onChangeEnd:s},p):L({onChange:e},p)},l=(f,g,p)=>{const x={...t,[f]:g};p?M({onChange:e,onChangeEnd:s},x):L({onChange:e},x)};if(!c)return o.jsxs("div",{"data-testid":"border-radius-editor-uniform",style:{display:"flex",gap:4,alignItems:"center"},children:[o.jsx(R,{testId:"border-radius",label:o.jsx(z,{icon:O,label:"Radius"}),value:t.topLeft,min:0,disabled:r,onChange:f=>h(f,!1),onChangeEnd:f=>h(f,!0),style:{flex:1}}),o.jsx(S,{type:"button","data-testid":"border-radius-expand",title:"Independent corners","aria-label":"Edit radius per corner",onClick:()=>a(!0),variant:"ghost",size:"compact",children:o.jsx(z,{icon:O})})]});const m=[{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:j.textMuted},children:"Corners"}),o.jsx("div",{style:{flex:1}}),o.jsx(S,{type:"button",variant:"primary",size:"compact","data-testid":"border-radius-collapse",title:"Uniform radius","aria-label":"Use one radius for all corners",onClick:()=>a(!1),children:o.jsx(z,{icon:O})})]}),o.jsx("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:3},children:m.map(({key:f,label:g})=>o.jsx(R,{testId:`border-radius-${f}`,label:g,value:t[f],min:0,disabled:r,onChange:p=>l(f,p,!1),onChangeEnd:p=>l(f,p,!0)},f))})]})}const P=[{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 Bt(t){return!t||t==="none"?P.map(e=>({name:e.name,value:e.default})):P.map(e=>{const s=new RegExp(`${e.name}\\(([\\d.]+)${e.unit}?\\)`),r=t.match(s);return{name:e.name,value:r?.[1]?Number.parseFloat(r[1]):e.default}})}function Nt(t){const e=[];for(let s=0;s<t.length;s++){const r=t[s],c=P[s];r&&c&&r.value!==c.default&&e.push(`${r.name}(${r.value}${c.unit})`)}return e.length?e.join(" "):"none"}function At({value:t,onChange:e,onChangeEnd:s,disabled:r,label:c="Filter",testId:a="filter-editor"}){const h=(l,m,f)=>{const g=t.map((p,x)=>x===l?{...p,value:m}:p);f?M({onChange:e,onChangeEnd:s},g):L({onChange:e},g)};return o.jsxs("div",{"data-testid":a,children:[o.jsx("div",{style:{fontSize:9,color:j.textMuted,marginBottom:4},children:c}),t.map((l,m)=>{const f=P[m];return f?o.jsx("div",{"data-testid":`filter-row-${l.name}`,style:{marginBottom:3},children:o.jsx(R,{testId:`filter-${l.name}`,label:l.name.replace("hue-rotate","hue"),value:l.value,unit:f.unit,min:f.min,max:f.max,step:f.step,disabled:r,onChange:g=>h(m,g,!1),onChangeEnd:g=>h(m,g,!0)})},l.name):null})]})}const T=28,J=10;function Dt({value:t,onChange:e,disabled:s,fonts:r,testId:c="font-picker"}){const[a,h]=w.useState(!1),[l,m]=w.useState(""),[f,g]=w.useState(0),p=w.useRef(null),x=w.useRef(null);w.useEffect(()=>{a&&x.current?.focus()},[a]),w.useEffect(()=>{if(!a)return;const b=y=>{p.current&&!p.current.contains(y.target)&&h(!1)};return document.addEventListener("mousedown",b),()=>document.removeEventListener("mousedown",b)},[a]),w.useEffect(()=>{if(!a)return;const b=y=>{y.key==="Escape"&&h(!1)};return document.addEventListener("keydown",b),()=>document.removeEventListener("keydown",b)},[a]);const u=w.useMemo(()=>{if(!l)return r;const b=l.toLowerCase();return r.filter(y=>y.toLowerCase().includes(b))},[r,l]),n=u.length*T,i=Math.floor(f/T),d=Math.min(u.length,i+J+2),v=u.slice(i,d),$=b=>{e(b),h(!1),m("")},E=t.replace(/^["']|["']$/g,"");return o.jsxs("div",{ref:p,"data-testid":c,style:{position:"relative",flex:1},children:[o.jsxs(S,{type:"button",variant:"secondary",className:"volter-field-trigger","aria-haspopup":"listbox","aria-expanded":a,disabled:s,"data-testid":"font-picker-input",onClick:()=>{s||h(b=>!b)},children:[o.jsx("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:E||"—"}),o.jsx(at,{direction:"down",tone:"muted",style:{marginLeft:4}})]}),a&&o.jsxs(it,{"data-testid":"font-picker-dropdown",style:{position:"absolute",top:"100%",left:0,right:0,zIndex:"var(--volter-z-dropdown)",marginTop:2},children:[o.jsx("div",{style:{padding:4},children:o.jsx(et,{ref:x,type:"text","data-testid":"font-picker-search",value:l,onChange:b=>{m(b.target.value),g(0)},placeholder:"Search fonts…","data-density":"compact",style:{width:"100%",boxSizing:"border-box"}})}),o.jsx("div",{"data-testid":"font-picker-list",onScroll:b=>g(b.target.scrollTop),style:{maxHeight:J*T,overflowY:"auto"},children:o.jsx("div",{style:{height:n,position:"relative"},children:v.map((b,y)=>{const k=i+y,C=b.toLowerCase()===E.toLowerCase();return o.jsx("div",{"data-testid":`font-picker-option-${b}`,onClick:()=>$(b),style:{position:"absolute",top:k*T,left:0,right:0,height:T,display:"flex",alignItems:"center",padding:"0 8px",cursor:"pointer",fontSize:12,background:C?j.accent:"transparent",color:C?j.onAccent:j.text},children:o.jsx("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:b})},b)})})}),u.length===0&&o.jsx("div",{style:{padding:"8px 12px",color:j.textMuted,fontSize:10,textAlign:"center"},children:"No matching fonts"})]})]})}function gt(t){const e=t.stops.map(s=>`${s.color} ${Math.round(s.position*100)}%`).join(", ");return t.type==="radial"?`radial-gradient(circle, ${e})`:`linear-gradient(${t.angle}deg, ${e})`}function xt(t){const e=t.match(/^linear-gradient\((.+)\)$/);if(e?.[1]!==void 0)return{type:"linear",inner:e[1]};const s=t.match(/^radial-gradient\((.+)\)$/);return s?.[1]!==void 0?{type:"radial",inner:s[1]}:null}function yt(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 s=t.match(/^to\s+\w+\s*,\s*/);if(s)return{angle:180,colorPart:t.slice(s[0].length)}}return{angle:180,colorPart:t}}function bt(t){const e=t.split(/,\s*(?![^(]*\))/).map(s=>{const r=s.trim(),c=r.match(/\s+(\d+)%$/),a=c?Number.parseInt(c[1]??"0",10)/100:-1;return{color:c?r.slice(0,-c[0].length).trim():r,position:a}});for(let s=0;s<e.length;s++){const r=e[s];r&&r.position<0&&(r.position=e.length>1?s/(e.length-1):0)}return e}function Ft(t){if(!t||t==="none")return null;const e=xt(t);if(!e)return null;const{angle:s,colorPart:r}=e.type==="linear"?yt(e.inner):{angle:180,colorPart:e.inner},c=bt(r);return c.length<2?null:{type:e.type,angle:s,stops:c}}function _({stops:t,selected:e,onSelect:s,onMove:r,disabled:c,testIdPrefix:a}){return o.jsx("div",{style:{position:"relative",height:12,marginTop:2},children:t.map((h,l)=>o.jsx("div",{"data-testid":`${a}-${l}`,onClick:()=>s(l),onMouseDown:m=>{if(c)return;m.preventDefault(),s(l);const g=m.target.parentElement?.getBoundingClientRect(),p=n=>g?.width?Math.max(0,Math.min(1,(n-g.left)/g.width)):h.position,x=n=>r(l,p(n.clientX),!1),u=n=>{r(l,p(n.clientX),!0),window.removeEventListener("mousemove",x),window.removeEventListener("mouseup",u)};window.addEventListener("mousemove",x),window.addEventListener("mouseup",u)},style:{position:"absolute",left:`${h.position*100}%`,top:0,width:10,height:10,borderRadius:"50%",background:h.css,border:`2px solid ${l===e?j.accent:"#fff"}`,transform:"translateX(-50%)",cursor:c?"not-allowed":"pointer"}},l))})}function Pt({value:t,onChange:e,onChangeEnd:s,disabled:r,recentColors:c,onAddRecentColor:a,testId:h="gradient-editor"}){const[l,m]=w.useState(0),f=(i,d)=>{d?M({onChange:e,onChangeEnd:s},i):L({onChange:e},i)},g=(i,d,v)=>{const $=t.stops.map((E,b)=>b===i?{...E,...d}:E);f({...t,stops:$},v)},p=()=>{const i=t.stops[t.stops.length-1]?.position??1,d=t.stops[0]?.position??0,v=(i+d)/2,$=[...t.stops,{color:"#888888",position:v}].sort((E,b)=>E.position-b.position);m($.length-1),f({...t,stops:$},!0)},x=i=>{if(t.stops.length<=2)return;const d=t.stops.filter((v,$)=>$!==i);m(Math.min(l,d.length-1)),f({...t,stops:d},!0)},u=t.stops[l]?.color??"#000000",n=u.startsWith("#")?u:ot(u);return o.jsxs("div",{"data-testid":h,children:[o.jsxs("div",{style:{position:"relative",marginBottom:8},children:[o.jsx("div",{"data-testid":"gradient-preview",style:{height:20,borderRadius:j.radiusSmall,border:`1px solid ${j.border}`,background:gt(t)}}),o.jsx(_,{stops:t.stops.map(i=>({position:i.position,css:i.color})),selected:l,onSelect:m,onMove:(i,d,v)=>g(i,{position:d},v),disabled:r,testIdPrefix:"gradient-stop"})]}),o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,marginBottom:4},children:[o.jsx(N,{testId:"gradient-selected-color",value:n,disabled:r,onChange:i=>g(l,{color:i},!1),onChangeEnd:i=>g(l,{color:i},!0),recentColors:c,onAddRecentColor:a}),o.jsxs("span",{style:{fontSize:9,color:j.textMuted},children:["Stop ",l+1]}),t.stops.length>2&&o.jsx(S,{type:"button",variant:"ghost",size:"compact","aria-label":"Remove gradient stop","data-testid":"gradient-remove-stop",onClick:()=>x(l),children:"×"}),o.jsx(S,{type:"button",variant:"ghost",size:"compact","data-testid":"gradient-add-stop",onClick:p,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(W,{testId:"gradient-type-linear",label:"Linear",active:t.type==="linear",disabled:r,onClick:()=>f({...t,type:"linear"},!0)}),o.jsx(W,{testId:"gradient-type-radial",label:"Radial",active:t.type==="radial",disabled:r,onClick:()=>f({...t,type:"radial"},!0)})]}),t.type==="linear"&&o.jsx(R,{testId:"gradient-angle",label:"°",value:t.angle,unit:"deg",disabled:r,onChange:i=>f({...t,angle:i},!1),onChangeEnd:i=>f({...t,angle:i},!0),style:{width:70}})]})]})}function Q(t){const e=s=>Math.round(Math.max(0,Math.min(1,s))*255).toString(16).padStart(2,"0");return`#${e(t.r)}${e(t.g)}${e(t.b)}`}function Z(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 D(t,e,s){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 c=0;c+1<t.length;c++){const a=t[c],h=t[c+1];if(e>=a.pos&&e<=h.pos){const l=h.pos>a.pos?(e-a.pos)/(h.pos-a.pos):0;return s(a.value,h.value,l)}}return r.value}const B=(t,e,s)=>t+(e-t)*s,tt=(t,e,s)=>({r:B(t.r,e.r,s),g:B(t.g,e.g,s),b:B(t.b,e.b,s)});function F(t,e,s){const r={...t[e],pos:s},c=[...t.filter((a,h)=>h!==e),r].sort((a,h)=>a.pos-h.pos);return{keys:c,index:c.indexOf(r)}}function Ot({value:t,onChange:e,onChangeEnd:s,disabled:r,testId:c="quarks-gradient"}){const[a,h]=w.useState({track:"color",i:0}),l=(n,i)=>{i?M({onChange:e,onChangeEnd:s},n):L({onChange:e},n)},m=n=>({...t,color:{...t.color,keys:n}}),f=n=>({...t,alpha:{...t.alpha,keys:n}}),p=[...new Set([...t.color.keys.map(n=>n.pos),...t.alpha.keys.map(n=>n.pos)])].sort((n,i)=>n-i).map(n=>{const i=D(t.color.keys,n,tt)??{r:1,g:1,b:1},d=D(t.alpha.keys,n,B)??1;return`rgba(${Math.round(i.r*255)},${Math.round(i.g*255)},${Math.round(i.b*255)},${Math.round(d*1e3)/1e3}) ${Math.round(n*100)}%`}).join(", "),x=t.color.keys[a.track==="color"?a.i:0],u=t.alpha.keys[a.track==="alpha"?a.i:0];return o.jsxs("div",{"data-testid":c,children:[o.jsx(_,{stops:t.alpha.keys.map(n=>{const i=Math.round(Math.max(0,Math.min(1,n.value))*255);return{position:n.pos,css:`rgb(${i},${i},${i})`}}),selected:a.track==="alpha"?a.i:-1,onSelect:n=>h({track:"alpha",i:n}),onMove:(n,i,d)=>{const{keys:v,index:$}=F(t.alpha.keys,n,i);h({track:"alpha",i:$}),l(f(v),d)},disabled:r,testIdPrefix:`${c}-alpha-stop`}),o.jsx("div",{"data-testid":`${c}-preview`,style:{height:20,borderRadius:j.radiusSmall,border:`1px solid ${j.border}`,backgroundImage:`linear-gradient(90deg, ${p}), repeating-linear-gradient(45deg, #777 0 5px, #aaa 5px 10px)`}}),o.jsx(_,{stops:t.color.keys.map(n=>({position:n.pos,css:Q(n.value)})),selected:a.track==="color"?a.i:-1,onSelect:n=>h({track:"color",i:n}),onMove:(n,i,d)=>{const{keys:v,index:$}=F(t.color.keys,n,i);h({track:"color",i:$}),l(m(v),d)},disabled:r,testIdPrefix:`${c}-color-stop`}),a.track==="color"&&x&&o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,marginTop:4},children:[o.jsx(N,{testId:`${c}-color-swatch`,value:Q(x.value),disabled:r,onChange:n=>l(m(t.color.keys.map((i,d)=>d===a.i?{...i,value:Z(n)}:i)),!1),onChangeEnd:n=>l(m(t.color.keys.map((i,d)=>d===a.i?{...i,value:Z(n)}:i)),!0)}),o.jsxs("span",{style:{fontSize:9,color:j.textMuted},children:["Color ",a.i+1,"/",t.color.keys.length]}),t.color.keys.length>2&&o.jsx(S,{type:"button",variant:"ghost",size:"compact","aria-label":"Remove color stop","data-testid":`${c}-remove-color-stop`,onClick:()=>{const n=t.color.keys.filter((i,d)=>d!==a.i);h({track:"color",i:Math.min(a.i,n.length-1)}),l(m(n),!0)},children:"×"}),o.jsx(S,{type:"button",variant:"ghost",size:"compact","data-testid":`${c}-add-color-stop`,onClick:()=>{const i=D(t.color.keys,.5,tt)??{r:1,g:1,b:1},{keys:d,index:v}=F([...t.color.keys,{value:i,pos:.5}],t.color.keys.length,.5);h({track:"color",i:v}),l(m(d),!0)},children:"+ stop"})]}),a.track==="alpha"&&u&&o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,marginTop:4},children:[o.jsx(lt,{label:"a",step:.05,testId:`${c}-alpha-value`,value:Math.round(u.value*1e3)/1e3,onChange:n=>l(f(t.alpha.keys.map((i,d)=>d===a.i?{...i,value:Math.max(0,Math.min(1,n))}:i)),!1),onChangeEnd:n=>l(f(t.alpha.keys.map((i,d)=>d===a.i?{...i,value:Math.max(0,Math.min(1,n))}:i)),!0)}),o.jsxs("span",{style:{fontSize:9,color:j.textMuted},children:["Alpha ",a.i+1,"/",t.alpha.keys.length]}),t.alpha.keys.length>2&&o.jsx(S,{type:"button",variant:"ghost",size:"compact","aria-label":"Remove alpha stop","data-testid":`${c}-remove-alpha-stop`,onClick:()=>{const n=t.alpha.keys.filter((i,d)=>d!==a.i);h({track:"alpha",i:Math.min(a.i,n.length-1)}),l(f(n),!0)},children:"×"}),o.jsx(S,{type:"button",variant:"ghost",size:"compact","data-testid":`${c}-add-alpha-stop`,onClick:()=>{const i=D(t.alpha.keys,.5,B)??1,{keys:d,index:v}=F([...t.alpha.keys,{value:i,pos:.5}],t.alpha.keys.length,.5);h({track:"alpha",i:v}),l(f(d),!0)},children:"+ stop"})]})]})}const jt={x:0,y:4,blur:8,spread:0,color:"rgba(0,0,0,0.25)",inset:!1,enabled:!0},vt={x:0,y:2,blur:4,spread:0,color:"rgba(0,0,0,0.3)",inset:!1,enabled:!0};function wt(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 _t(t,e=!0){const s=t.filter(r=>r.enabled);return s.length===0?"none":s.map(r=>wt(r,e)).join(", ")}function $t(t){const e=t.match(/(rgba?\([^)]+\))/);if(e?.[1])return{color:e[1],nums:t.replace(e[1],"").trim()};const s=t.match(/(#[0-9a-fA-F]{3,8})/);return s?.[1]?{color:s[1],nums:t.replace(s[1],"").trim()}:{color:"#000000",nums:t}}function kt(t,e){if(!t||t==="none")return null;const s=t.trim(),r=e&&s.startsWith("inset"),c=r?s.slice(5).trim():s,{color:a,nums:h}=$t(c),l=h.split(/\s+/).map(m=>Number.parseFloat(m)).filter(m=>!Number.isNaN(m));return e?{inset:r,x:l[0]??0,y:l[1]??0,blur:l[2]??0,spread:l[3]??0,color:a}:l.length<2?null:{inset:!1,x:l[0]??0,y:l[1]??0,blur:l[2]??0,spread:0,color:a}}function Ht(t,e=!0){if(!t||t==="none")return[];const s=t.split(/,\s*(?![^(]*\))/),r=[];for(const c of s){const a=kt(c.trim(),e);a&&r.push({...a,enabled:!0})}return r}function nt({value:t,onChange:e,onChangeEnd:s,disabled:r,withSpreadInset:c=!0,label:a="Shadow",testId:h="shadow-editor",recentColors:l,onAddRecentColor:m}){const f=(u,n)=>{n?M({onChange:e,onChangeEnd:s},u):L({onChange:e},u)},g=(u,n,i=!1)=>{f(t.map((d,v)=>v===u?{...d,...n}:d),i)},p=u=>{f(t.filter((n,i)=>i!==u),!0)},x=()=>{f([...t,{...c?jt:vt}],!0)};return o.jsxs("div",{"data-testid":h,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:j.textMuted},children:a}),o.jsx("div",{style:{flex:1}}),!r&&o.jsx(S,{type:"button",variant:"ghost",size:"compact","data-testid":`${h}-add`,onClick:x,children:"+"})]}),t.map((u,n)=>{const i=u.color.startsWith("#")?u.color:ot(u.color);return o.jsxs("div",{"data-testid":`${h}-row-${n}`,style:{marginBottom:6,padding:"4px 0",borderBottom:`1px solid ${j.border}`},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:4,marginBottom:4},children:[o.jsx(S,{type:"button",variant:"ghost",size:"compact","aria-pressed":u.enabled,"data-testid":`${h}-toggle-${n}`,onClick:()=>{r||g(n,{enabled:!u.enabled},!0)},children:u.enabled?"●":"○"}),o.jsx(N,{testId:`${h}-color-${n}`,value:i,disabled:r,onChange:d=>g(n,{color:d}),onChangeEnd:d=>g(n,{color:d},!0),recentColors:l,onAddRecentColor:m}),c&&o.jsxs("label",{style:{display:"flex",alignItems:"center",gap:2,fontSize:8,color:j.textMuted,cursor:"pointer"},children:[o.jsx(ct,{className:"volter-checkbox","data-testid":`${h}-inset-${n}`,checked:u.inset,disabled:r,onChange:d=>g(n,{inset:d.target.checked},!0)}),"in"]}),o.jsx("div",{style:{flex:1}}),!r&&o.jsx(S,{type:"button",variant:"ghost",size:"compact","aria-label":`Remove ${a.toLowerCase()} ${n+1}`,"data-testid":`${h}-remove-${n}`,onClick:()=>p(n),children:"×"})]}),u.enabled&&o.jsxs("div",{style:{display:"flex",gap:4},children:[o.jsx(R,{label:"X",value:u.x,disabled:r,onChange:d=>g(n,{x:d}),onChangeEnd:d=>g(n,{x:d},!0),style:{flex:1}}),o.jsx(R,{label:"Y",value:u.y,disabled:r,onChange:d=>g(n,{y:d}),onChangeEnd:d=>g(n,{y:d},!0),style:{flex:1}}),o.jsx(R,{label:"B",value:u.blur,min:0,disabled:r,onChange:d=>g(n,{blur:Math.max(0,d)}),onChangeEnd:d=>g(n,{blur:Math.max(0,d)},!0),style:{flex:1}}),c&&o.jsx(R,{label:"S",value:u.spread,disabled:r,onChange:d=>g(n,{spread:d}),onChangeEnd:d=>g(n,{spread:d},!0),style:{flex:1}})]})]},n)})]})}function Gt(t){return o.jsx(nt,{...t,withSpreadInset:!0,testId:"box-shadow-editor",label:t.label??"Shadow"})}function Ut(t){return o.jsx(nt,{...t,withSpreadInset:!1,testId:"text-shadow-editor",label:t.label??"Text Shadow"})}export{Lt as A,Tt as B,jt as D,At as F,Pt as G,Ot as Q,R as S,Ut as T,zt as a,Bt as b,gt as c,Nt as d,Ht as e,Gt as f,_t as g,Dt as h,ht as i,mt as j,It as k,vt as l,_ as m,nt as n,ft as o,Ft as p,ut as u};
1
+ import{a as o}from"./jsx-runtime-DPjLkJKQ.js";import{r as w}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{e4 as j,a6 as S,f0 as st,aN as et,e6 as M,e5 as L,bH as K,a7 as z,iZ as X,kD as O,eJ as at,bP as it,hZ as W,dV as lt,aS as ct}from"./index-jhDTJrJJ.js";import{C as N,r as ot}from"./ColorPicker-DFs5jze4.js";const dt={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}}},V=["flex-start","center","flex-end"],Y=["flex-start","center","flex-end"];function pt({row:t,col:e,justify:s,align:r,isActive:c,disabled:a,onSelect:h}){return o.jsx("div",{"data-testid":`alignment-grid-${t}-${e}`,onClick:()=>{a||h(s,r)},style:{width:16,height:16,display:"flex",alignItems:"center",justifyContent:"center",cursor:a?"not-allowed":"pointer",borderRadius:j.radiusSmall,background:c?j.accent:"transparent"},children:o.jsx("div",{style:{width:c?6:4,height:c?6:4,borderRadius:"50%",background:c?j.onAccent:j.textMuted}})})}function Lt({value:t,onChange:e,disabled:s}){const r=V.indexOf(t.justify),c=Y.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:j.inputBg,borderRadius:j.radiusMedium,padding:4,opacity:s?.35:1},children:Y.map((a,h)=>V.map((l,m)=>o.jsx(pt,{row:h,col:m,justify:l,align:a,isActive:h===c&&m===r,disabled:s,onSelect:(f,g)=>e({justify:f,align:g})},`${h}-${m}`)))})}function It({onSelect:t,disabled:e}){return o.jsx("div",{"data-testid":"anchor-presets",style:{display:"flex",flexWrap:"wrap",gap:4},children:Object.entries(dt).map(([s,r])=>o.jsx(S,{type:"button",variant:"secondary",size:"compact","data-testid":`anchor-preset-${s}`,disabled:e,onClick:()=>t(s,r),children:s},s))})}function R({label:t,value:e,unit:s="",step:r=1,min:c,max:a,precision:h,disabled:l,onChange:m,onChangeEnd:f,testId:g,style:p}){const x=w.useRef(null),u=h??(r<1?2:r>=100?-2:0),n=w.useMemo(()=>y=>{if(u<0){const C=10**-u;return Math.round(y/C)*C}const k=10**u;return Math.round(y*k)/k},[u]),i=y=>{let k=y;return c!==void 0&&(k=Math.max(c,k)),a!==void 0&&(k=Math.min(a,k)),n(k)},d=y=>{if(l)return;y.preventDefault(),x.current={startX:y.clientX,startValue:e,last:e},document.body.style.cursor="ew-resize";const k=I=>{if(!x.current)return;I.preventDefault();const A=I.clientX-x.current.startX,rt=I.shiftKey?10:I.altKey?.1:1,U=i(x.current.startValue+A*r*rt);x.current.last=U,L({onChange:m},U)},C=()=>{document.body.style.cursor="",window.removeEventListener("mousemove",k),window.removeEventListener("mouseup",H),window.removeEventListener("keydown",G)},H=()=>{if(x.current){const I=x.current.last;x.current=null,M({onChange:m,onChangeEnd:f},I)}C()},G=I=>{if(I.key==="Escape"&&x.current){const A=i(x.current.startValue);x.current=null,L({onChange:m},A),M({onChange:m,onChangeEnd:f},A),C()}};window.addEventListener("mousemove",k),window.addEventListener("mouseup",H),window.addEventListener("keydown",G)},[v,$]=w.useState(null),E=w.useRef(!1),b=y=>{const k=Number.parseFloat(y);if(Number.isNaN(k))return;const C=i(k);C!==e&&M({onChange:m,onChangeEnd:f},C)};return o.jsxs("div",{style:{...st,...p},children:[o.jsx("span",{className:"volter-scrub-label","data-testid":g?`${g}-label`:void 0,onMouseDown:d,"data-disabled":l||void 0,style:{fontSize:11,...l?{color:j.dynamic}:{},flexShrink:0,cursor:l?"not-allowed":"ew-resize",userSelect:"none",fontWeight:500},children:t}),o.jsx(et,{"data-testid":g,type:"text",value:v??`${e}${s}`,readOnly:l,"data-dynamic":l||void 0,onFocus:y=>{$(`${e}${s}`),y.target.select()},onChange:y=>$(y.target.value),onBlur:y=>{E.current||b(y.target.value),E.current=!1,$(null)},onKeyDown:y=>{y.key==="Enter"&&y.target.blur(),y.key==="Escape"&&(E.current=!0,y.target.blur())},style:{flex:1,width:0}})]})}const q=["none","solid","dashed","dotted","double"];function ut(t){return{top:t,right:t,bottom:t,left:t}}function ht(t){const e=r=>`${r.width}|${r.style}|${r.color}`,s=e(t.top);return e(t.right)===s&&e(t.bottom)===s&&e(t.left)===s}function Tt({value:t,onChange:e,onChangeEnd:s,disabled:r,recentColors:c,onAddRecentColor:a}){const[h,l]=w.useState(!ht(t)),m=(p,x)=>{const u={...t.top,...p},n=ut(u);x?M({onChange:e,onChangeEnd:s},n):L({onChange:e},n)},f=(p,x,u)=>{const n={...t,[p]:{...t[p],...x}};u?M({onChange:e,onChangeEnd:s},n):L({onChange:e},n)};if(!h)return o.jsxs("div",{"data-testid":"border-editor-uniform",style:{display:"flex",gap:6,alignItems:"center"},children:[o.jsx(N,{testId:"border-color",value:t.top.color,disabled:r,onChange:p=>m({color:p},!1),onChangeEnd:p=>m({color:p},!0),recentColors:c,onAddRecentColor:a}),o.jsx(R,{testId:"border-width",label:"W",value:t.top.width,min:0,disabled:r,onChange:p=>m({width:p},!1),onChangeEnd:p=>m({width:p},!0),style:{width:64}}),o.jsx(K,{className:"volter-select","data-testid":"border-style",value:t.top.style,disabled:r,"data-dynamic":r||void 0,onChange:p=>m({style:p.target.value},!0),style:{flex:1},children:q.map(p=>o.jsx("option",{value:p,children:p},p))}),o.jsx(S,{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(z,{icon:X})})]});const g=[{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:j.textMuted},children:"Per-side"}),o.jsx("div",{style:{flex:1}}),o.jsx(S,{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(z,{icon:X})})]}),g.map(({key:p,label:x})=>o.jsxs("div",{style:{display:"flex",gap:4,alignItems:"center"},children:[o.jsx("span",{style:{fontSize:10,color:j.textMuted,width:10,textAlign:"center"},children:x}),o.jsx(N,{testId:`border-${p}-color`,value:t[p].color,disabled:r,onChange:u=>f(p,{color:u},!1),onChangeEnd:u=>f(p,{color:u},!0),recentColors:c,onAddRecentColor:a}),o.jsx(R,{testId:`border-${p}-width`,label:"",value:t[p].width,min:0,disabled:r,onChange:u=>f(p,{width:u},!1),onChangeEnd:u=>f(p,{width:u},!0),style:{width:48}}),o.jsx(K,{className:"volter-select","data-testid":`border-${p}-style`,value:t[p].style,disabled:r,"data-density":"compact","data-dynamic":r||void 0,onChange:u=>f(p,{style:u.target.value},!0),style:{flex:1},children:q.map(u=>o.jsx("option",{value:u,children:u},u))})]},p))]})}function ft(t){return{topLeft:t,topRight:t,bottomLeft:t,bottomRight:t}}function mt(t){return t.topLeft===t.topRight&&t.topRight===t.bottomLeft&&t.bottomLeft===t.bottomRight}function zt({value:t,onChange:e,onChangeEnd:s,disabled:r}){const[c,a]=w.useState(!mt(t)),h=(f,g)=>{const p=ft(f);g?M({onChange:e,onChangeEnd:s},p):L({onChange:e},p)},l=(f,g,p)=>{const x={...t,[f]:g};p?M({onChange:e,onChangeEnd:s},x):L({onChange:e},x)};if(!c)return o.jsxs("div",{"data-testid":"border-radius-editor-uniform",style:{display:"flex",gap:4,alignItems:"center"},children:[o.jsx(R,{testId:"border-radius",label:o.jsx(z,{icon:O,label:"Radius"}),value:t.topLeft,min:0,disabled:r,onChange:f=>h(f,!1),onChangeEnd:f=>h(f,!0),style:{flex:1}}),o.jsx(S,{type:"button","data-testid":"border-radius-expand",title:"Independent corners","aria-label":"Edit radius per corner",onClick:()=>a(!0),variant:"ghost",size:"compact",children:o.jsx(z,{icon:O})})]});const m=[{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:j.textMuted},children:"Corners"}),o.jsx("div",{style:{flex:1}}),o.jsx(S,{type:"button",variant:"primary",size:"compact","data-testid":"border-radius-collapse",title:"Uniform radius","aria-label":"Use one radius for all corners",onClick:()=>a(!1),children:o.jsx(z,{icon:O})})]}),o.jsx("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:3},children:m.map(({key:f,label:g})=>o.jsx(R,{testId:`border-radius-${f}`,label:g,value:t[f],min:0,disabled:r,onChange:p=>l(f,p,!1),onChangeEnd:p=>l(f,p,!0)},f))})]})}const P=[{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 Bt(t){return!t||t==="none"?P.map(e=>({name:e.name,value:e.default})):P.map(e=>{const s=new RegExp(`${e.name}\\(([\\d.]+)${e.unit}?\\)`),r=t.match(s);return{name:e.name,value:r?.[1]?Number.parseFloat(r[1]):e.default}})}function Nt(t){const e=[];for(let s=0;s<t.length;s++){const r=t[s],c=P[s];r&&c&&r.value!==c.default&&e.push(`${r.name}(${r.value}${c.unit})`)}return e.length?e.join(" "):"none"}function At({value:t,onChange:e,onChangeEnd:s,disabled:r,label:c="Filter",testId:a="filter-editor"}){const h=(l,m,f)=>{const g=t.map((p,x)=>x===l?{...p,value:m}:p);f?M({onChange:e,onChangeEnd:s},g):L({onChange:e},g)};return o.jsxs("div",{"data-testid":a,children:[o.jsx("div",{style:{fontSize:9,color:j.textMuted,marginBottom:4},children:c}),t.map((l,m)=>{const f=P[m];return f?o.jsx("div",{"data-testid":`filter-row-${l.name}`,style:{marginBottom:3},children:o.jsx(R,{testId:`filter-${l.name}`,label:l.name.replace("hue-rotate","hue"),value:l.value,unit:f.unit,min:f.min,max:f.max,step:f.step,disabled:r,onChange:g=>h(m,g,!1),onChangeEnd:g=>h(m,g,!0)})},l.name):null})]})}const T=28,J=10;function Dt({value:t,onChange:e,disabled:s,fonts:r,testId:c="font-picker"}){const[a,h]=w.useState(!1),[l,m]=w.useState(""),[f,g]=w.useState(0),p=w.useRef(null),x=w.useRef(null);w.useEffect(()=>{a&&x.current?.focus()},[a]),w.useEffect(()=>{if(!a)return;const b=y=>{p.current&&!p.current.contains(y.target)&&h(!1)};return document.addEventListener("mousedown",b),()=>document.removeEventListener("mousedown",b)},[a]),w.useEffect(()=>{if(!a)return;const b=y=>{y.key==="Escape"&&h(!1)};return document.addEventListener("keydown",b),()=>document.removeEventListener("keydown",b)},[a]);const u=w.useMemo(()=>{if(!l)return r;const b=l.toLowerCase();return r.filter(y=>y.toLowerCase().includes(b))},[r,l]),n=u.length*T,i=Math.floor(f/T),d=Math.min(u.length,i+J+2),v=u.slice(i,d),$=b=>{e(b),h(!1),m("")},E=t.replace(/^["']|["']$/g,"");return o.jsxs("div",{ref:p,"data-testid":c,style:{position:"relative",flex:1},children:[o.jsxs(S,{type:"button",variant:"secondary",className:"volter-field-trigger","aria-haspopup":"listbox","aria-expanded":a,disabled:s,"data-testid":"font-picker-input",onClick:()=>{s||h(b=>!b)},children:[o.jsx("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:E||"—"}),o.jsx(at,{direction:"down",tone:"muted",style:{marginLeft:4}})]}),a&&o.jsxs(it,{"data-testid":"font-picker-dropdown",style:{position:"absolute",top:"100%",left:0,right:0,zIndex:"var(--volter-z-dropdown)",marginTop:2},children:[o.jsx("div",{style:{padding:4},children:o.jsx(et,{ref:x,type:"text","data-testid":"font-picker-search",value:l,onChange:b=>{m(b.target.value),g(0)},placeholder:"Search fonts…","data-density":"compact",style:{width:"100%",boxSizing:"border-box"}})}),o.jsx("div",{"data-testid":"font-picker-list",onScroll:b=>g(b.target.scrollTop),style:{maxHeight:J*T,overflowY:"auto"},children:o.jsx("div",{style:{height:n,position:"relative"},children:v.map((b,y)=>{const k=i+y,C=b.toLowerCase()===E.toLowerCase();return o.jsx("div",{"data-testid":`font-picker-option-${b}`,onClick:()=>$(b),style:{position:"absolute",top:k*T,left:0,right:0,height:T,display:"flex",alignItems:"center",padding:"0 8px",cursor:"pointer",fontSize:12,background:C?j.accent:"transparent",color:C?j.onAccent:j.text},children:o.jsx("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:b})},b)})})}),u.length===0&&o.jsx("div",{style:{padding:"8px 12px",color:j.textMuted,fontSize:10,textAlign:"center"},children:"No matching fonts"})]})]})}function gt(t){const e=t.stops.map(s=>`${s.color} ${Math.round(s.position*100)}%`).join(", ");return t.type==="radial"?`radial-gradient(circle, ${e})`:`linear-gradient(${t.angle}deg, ${e})`}function xt(t){const e=t.match(/^linear-gradient\((.+)\)$/);if(e?.[1]!==void 0)return{type:"linear",inner:e[1]};const s=t.match(/^radial-gradient\((.+)\)$/);return s?.[1]!==void 0?{type:"radial",inner:s[1]}:null}function yt(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 s=t.match(/^to\s+\w+\s*,\s*/);if(s)return{angle:180,colorPart:t.slice(s[0].length)}}return{angle:180,colorPart:t}}function bt(t){const e=t.split(/,\s*(?![^(]*\))/).map(s=>{const r=s.trim(),c=r.match(/\s+(\d+)%$/),a=c?Number.parseInt(c[1]??"0",10)/100:-1;return{color:c?r.slice(0,-c[0].length).trim():r,position:a}});for(let s=0;s<e.length;s++){const r=e[s];r&&r.position<0&&(r.position=e.length>1?s/(e.length-1):0)}return e}function Ft(t){if(!t||t==="none")return null;const e=xt(t);if(!e)return null;const{angle:s,colorPart:r}=e.type==="linear"?yt(e.inner):{angle:180,colorPart:e.inner},c=bt(r);return c.length<2?null:{type:e.type,angle:s,stops:c}}function _({stops:t,selected:e,onSelect:s,onMove:r,disabled:c,testIdPrefix:a}){return o.jsx("div",{style:{position:"relative",height:12,marginTop:2},children:t.map((h,l)=>o.jsx("div",{"data-testid":`${a}-${l}`,onClick:()=>s(l),onMouseDown:m=>{if(c)return;m.preventDefault(),s(l);const g=m.target.parentElement?.getBoundingClientRect(),p=n=>g?.width?Math.max(0,Math.min(1,(n-g.left)/g.width)):h.position,x=n=>r(l,p(n.clientX),!1),u=n=>{r(l,p(n.clientX),!0),window.removeEventListener("mousemove",x),window.removeEventListener("mouseup",u)};window.addEventListener("mousemove",x),window.addEventListener("mouseup",u)},style:{position:"absolute",left:`${h.position*100}%`,top:0,width:10,height:10,borderRadius:"50%",background:h.css,border:`2px solid ${l===e?j.accent:"#fff"}`,transform:"translateX(-50%)",cursor:c?"not-allowed":"pointer"}},l))})}function Pt({value:t,onChange:e,onChangeEnd:s,disabled:r,recentColors:c,onAddRecentColor:a,testId:h="gradient-editor"}){const[l,m]=w.useState(0),f=(i,d)=>{d?M({onChange:e,onChangeEnd:s},i):L({onChange:e},i)},g=(i,d,v)=>{const $=t.stops.map((E,b)=>b===i?{...E,...d}:E);f({...t,stops:$},v)},p=()=>{const i=t.stops[t.stops.length-1]?.position??1,d=t.stops[0]?.position??0,v=(i+d)/2,$=[...t.stops,{color:"#888888",position:v}].sort((E,b)=>E.position-b.position);m($.length-1),f({...t,stops:$},!0)},x=i=>{if(t.stops.length<=2)return;const d=t.stops.filter((v,$)=>$!==i);m(Math.min(l,d.length-1)),f({...t,stops:d},!0)},u=t.stops[l]?.color??"#000000",n=u.startsWith("#")?u:ot(u);return o.jsxs("div",{"data-testid":h,children:[o.jsxs("div",{style:{position:"relative",marginBottom:8},children:[o.jsx("div",{"data-testid":"gradient-preview",style:{height:20,borderRadius:j.radiusSmall,border:`1px solid ${j.border}`,background:gt(t)}}),o.jsx(_,{stops:t.stops.map(i=>({position:i.position,css:i.color})),selected:l,onSelect:m,onMove:(i,d,v)=>g(i,{position:d},v),disabled:r,testIdPrefix:"gradient-stop"})]}),o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,marginBottom:4},children:[o.jsx(N,{testId:"gradient-selected-color",value:n,disabled:r,onChange:i=>g(l,{color:i},!1),onChangeEnd:i=>g(l,{color:i},!0),recentColors:c,onAddRecentColor:a}),o.jsxs("span",{style:{fontSize:9,color:j.textMuted},children:["Stop ",l+1]}),t.stops.length>2&&o.jsx(S,{type:"button",variant:"ghost",size:"compact","aria-label":"Remove gradient stop","data-testid":"gradient-remove-stop",onClick:()=>x(l),children:"×"}),o.jsx(S,{type:"button",variant:"ghost",size:"compact","data-testid":"gradient-add-stop",onClick:p,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(W,{testId:"gradient-type-linear",label:"Linear",active:t.type==="linear",disabled:r,onClick:()=>f({...t,type:"linear"},!0)}),o.jsx(W,{testId:"gradient-type-radial",label:"Radial",active:t.type==="radial",disabled:r,onClick:()=>f({...t,type:"radial"},!0)})]}),t.type==="linear"&&o.jsx(R,{testId:"gradient-angle",label:"°",value:t.angle,unit:"deg",disabled:r,onChange:i=>f({...t,angle:i},!1),onChangeEnd:i=>f({...t,angle:i},!0),style:{width:70}})]})]})}function Q(t){const e=s=>Math.round(Math.max(0,Math.min(1,s))*255).toString(16).padStart(2,"0");return`#${e(t.r)}${e(t.g)}${e(t.b)}`}function Z(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 D(t,e,s){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 c=0;c+1<t.length;c++){const a=t[c],h=t[c+1];if(e>=a.pos&&e<=h.pos){const l=h.pos>a.pos?(e-a.pos)/(h.pos-a.pos):0;return s(a.value,h.value,l)}}return r.value}const B=(t,e,s)=>t+(e-t)*s,tt=(t,e,s)=>({r:B(t.r,e.r,s),g:B(t.g,e.g,s),b:B(t.b,e.b,s)});function F(t,e,s){const r={...t[e],pos:s},c=[...t.filter((a,h)=>h!==e),r].sort((a,h)=>a.pos-h.pos);return{keys:c,index:c.indexOf(r)}}function Ot({value:t,onChange:e,onChangeEnd:s,disabled:r,testId:c="quarks-gradient"}){const[a,h]=w.useState({track:"color",i:0}),l=(n,i)=>{i?M({onChange:e,onChangeEnd:s},n):L({onChange:e},n)},m=n=>({...t,color:{...t.color,keys:n}}),f=n=>({...t,alpha:{...t.alpha,keys:n}}),p=[...new Set([...t.color.keys.map(n=>n.pos),...t.alpha.keys.map(n=>n.pos)])].sort((n,i)=>n-i).map(n=>{const i=D(t.color.keys,n,tt)??{r:1,g:1,b:1},d=D(t.alpha.keys,n,B)??1;return`rgba(${Math.round(i.r*255)},${Math.round(i.g*255)},${Math.round(i.b*255)},${Math.round(d*1e3)/1e3}) ${Math.round(n*100)}%`}).join(", "),x=t.color.keys[a.track==="color"?a.i:0],u=t.alpha.keys[a.track==="alpha"?a.i:0];return o.jsxs("div",{"data-testid":c,children:[o.jsx(_,{stops:t.alpha.keys.map(n=>{const i=Math.round(Math.max(0,Math.min(1,n.value))*255);return{position:n.pos,css:`rgb(${i},${i},${i})`}}),selected:a.track==="alpha"?a.i:-1,onSelect:n=>h({track:"alpha",i:n}),onMove:(n,i,d)=>{const{keys:v,index:$}=F(t.alpha.keys,n,i);h({track:"alpha",i:$}),l(f(v),d)},disabled:r,testIdPrefix:`${c}-alpha-stop`}),o.jsx("div",{"data-testid":`${c}-preview`,style:{height:20,borderRadius:j.radiusSmall,border:`1px solid ${j.border}`,backgroundImage:`linear-gradient(90deg, ${p}), repeating-linear-gradient(45deg, #777 0 5px, #aaa 5px 10px)`}}),o.jsx(_,{stops:t.color.keys.map(n=>({position:n.pos,css:Q(n.value)})),selected:a.track==="color"?a.i:-1,onSelect:n=>h({track:"color",i:n}),onMove:(n,i,d)=>{const{keys:v,index:$}=F(t.color.keys,n,i);h({track:"color",i:$}),l(m(v),d)},disabled:r,testIdPrefix:`${c}-color-stop`}),a.track==="color"&&x&&o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,marginTop:4},children:[o.jsx(N,{testId:`${c}-color-swatch`,value:Q(x.value),disabled:r,onChange:n=>l(m(t.color.keys.map((i,d)=>d===a.i?{...i,value:Z(n)}:i)),!1),onChangeEnd:n=>l(m(t.color.keys.map((i,d)=>d===a.i?{...i,value:Z(n)}:i)),!0)}),o.jsxs("span",{style:{fontSize:9,color:j.textMuted},children:["Color ",a.i+1,"/",t.color.keys.length]}),t.color.keys.length>2&&o.jsx(S,{type:"button",variant:"ghost",size:"compact","aria-label":"Remove color stop","data-testid":`${c}-remove-color-stop`,onClick:()=>{const n=t.color.keys.filter((i,d)=>d!==a.i);h({track:"color",i:Math.min(a.i,n.length-1)}),l(m(n),!0)},children:"×"}),o.jsx(S,{type:"button",variant:"ghost",size:"compact","data-testid":`${c}-add-color-stop`,onClick:()=>{const i=D(t.color.keys,.5,tt)??{r:1,g:1,b:1},{keys:d,index:v}=F([...t.color.keys,{value:i,pos:.5}],t.color.keys.length,.5);h({track:"color",i:v}),l(m(d),!0)},children:"+ stop"})]}),a.track==="alpha"&&u&&o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,marginTop:4},children:[o.jsx(lt,{label:"a",step:.05,testId:`${c}-alpha-value`,value:Math.round(u.value*1e3)/1e3,onChange:n=>l(f(t.alpha.keys.map((i,d)=>d===a.i?{...i,value:Math.max(0,Math.min(1,n))}:i)),!1),onChangeEnd:n=>l(f(t.alpha.keys.map((i,d)=>d===a.i?{...i,value:Math.max(0,Math.min(1,n))}:i)),!0)}),o.jsxs("span",{style:{fontSize:9,color:j.textMuted},children:["Alpha ",a.i+1,"/",t.alpha.keys.length]}),t.alpha.keys.length>2&&o.jsx(S,{type:"button",variant:"ghost",size:"compact","aria-label":"Remove alpha stop","data-testid":`${c}-remove-alpha-stop`,onClick:()=>{const n=t.alpha.keys.filter((i,d)=>d!==a.i);h({track:"alpha",i:Math.min(a.i,n.length-1)}),l(f(n),!0)},children:"×"}),o.jsx(S,{type:"button",variant:"ghost",size:"compact","data-testid":`${c}-add-alpha-stop`,onClick:()=>{const i=D(t.alpha.keys,.5,B)??1,{keys:d,index:v}=F([...t.alpha.keys,{value:i,pos:.5}],t.alpha.keys.length,.5);h({track:"alpha",i:v}),l(f(d),!0)},children:"+ stop"})]})]})}const jt={x:0,y:4,blur:8,spread:0,color:"rgba(0,0,0,0.25)",inset:!1,enabled:!0},vt={x:0,y:2,blur:4,spread:0,color:"rgba(0,0,0,0.3)",inset:!1,enabled:!0};function wt(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 _t(t,e=!0){const s=t.filter(r=>r.enabled);return s.length===0?"none":s.map(r=>wt(r,e)).join(", ")}function $t(t){const e=t.match(/(rgba?\([^)]+\))/);if(e?.[1])return{color:e[1],nums:t.replace(e[1],"").trim()};const s=t.match(/(#[0-9a-fA-F]{3,8})/);return s?.[1]?{color:s[1],nums:t.replace(s[1],"").trim()}:{color:"#000000",nums:t}}function kt(t,e){if(!t||t==="none")return null;const s=t.trim(),r=e&&s.startsWith("inset"),c=r?s.slice(5).trim():s,{color:a,nums:h}=$t(c),l=h.split(/\s+/).map(m=>Number.parseFloat(m)).filter(m=>!Number.isNaN(m));return e?{inset:r,x:l[0]??0,y:l[1]??0,blur:l[2]??0,spread:l[3]??0,color:a}:l.length<2?null:{inset:!1,x:l[0]??0,y:l[1]??0,blur:l[2]??0,spread:0,color:a}}function Ht(t,e=!0){if(!t||t==="none")return[];const s=t.split(/,\s*(?![^(]*\))/),r=[];for(const c of s){const a=kt(c.trim(),e);a&&r.push({...a,enabled:!0})}return r}function nt({value:t,onChange:e,onChangeEnd:s,disabled:r,withSpreadInset:c=!0,label:a="Shadow",testId:h="shadow-editor",recentColors:l,onAddRecentColor:m}){const f=(u,n)=>{n?M({onChange:e,onChangeEnd:s},u):L({onChange:e},u)},g=(u,n,i=!1)=>{f(t.map((d,v)=>v===u?{...d,...n}:d),i)},p=u=>{f(t.filter((n,i)=>i!==u),!0)},x=()=>{f([...t,{...c?jt:vt}],!0)};return o.jsxs("div",{"data-testid":h,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:j.textMuted},children:a}),o.jsx("div",{style:{flex:1}}),!r&&o.jsx(S,{type:"button",variant:"ghost",size:"compact","data-testid":`${h}-add`,onClick:x,children:"+"})]}),t.map((u,n)=>{const i=u.color.startsWith("#")?u.color:ot(u.color);return o.jsxs("div",{"data-testid":`${h}-row-${n}`,style:{marginBottom:6,padding:"4px 0",borderBottom:`1px solid ${j.border}`},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:4,marginBottom:4},children:[o.jsx(S,{type:"button",variant:"ghost",size:"compact","aria-pressed":u.enabled,"data-testid":`${h}-toggle-${n}`,onClick:()=>{r||g(n,{enabled:!u.enabled},!0)},children:u.enabled?"●":"○"}),o.jsx(N,{testId:`${h}-color-${n}`,value:i,disabled:r,onChange:d=>g(n,{color:d}),onChangeEnd:d=>g(n,{color:d},!0),recentColors:l,onAddRecentColor:m}),c&&o.jsxs("label",{style:{display:"flex",alignItems:"center",gap:2,fontSize:8,color:j.textMuted,cursor:"pointer"},children:[o.jsx(ct,{className:"volter-checkbox","data-testid":`${h}-inset-${n}`,checked:u.inset,disabled:r,onChange:d=>g(n,{inset:d.target.checked},!0)}),"in"]}),o.jsx("div",{style:{flex:1}}),!r&&o.jsx(S,{type:"button",variant:"ghost",size:"compact","aria-label":`Remove ${a.toLowerCase()} ${n+1}`,"data-testid":`${h}-remove-${n}`,onClick:()=>p(n),children:"×"})]}),u.enabled&&o.jsxs("div",{style:{display:"flex",gap:4},children:[o.jsx(R,{label:"X",value:u.x,disabled:r,onChange:d=>g(n,{x:d}),onChangeEnd:d=>g(n,{x:d},!0),style:{flex:1}}),o.jsx(R,{label:"Y",value:u.y,disabled:r,onChange:d=>g(n,{y:d}),onChangeEnd:d=>g(n,{y:d},!0),style:{flex:1}}),o.jsx(R,{label:"B",value:u.blur,min:0,disabled:r,onChange:d=>g(n,{blur:Math.max(0,d)}),onChangeEnd:d=>g(n,{blur:Math.max(0,d)},!0),style:{flex:1}}),c&&o.jsx(R,{label:"S",value:u.spread,disabled:r,onChange:d=>g(n,{spread:d}),onChangeEnd:d=>g(n,{spread:d},!0),style:{flex:1}})]})]},n)})]})}function Gt(t){return o.jsx(nt,{...t,withSpreadInset:!0,testId:"box-shadow-editor",label:t.label??"Shadow"})}function Ut(t){return o.jsx(nt,{...t,withSpreadInset:!1,testId:"text-shadow-editor",label:t.label??"Text Shadow"})}export{Lt as A,Tt as B,jt as D,At as F,Pt as G,Ot as Q,R as S,Ut as T,zt as a,Bt as b,gt as c,Nt as d,Ht as e,Gt as f,_t as g,Dt as h,ht as i,mt as j,It as k,vt as l,_ as m,nt as n,ft as o,Ft as p,ut as u};
@@ -1 +1 @@
1
- import{a as r}from"./jsx-runtime-DPjLkJKQ.js";import{b5 as m,al as n,b6 as x,b7 as C,b8 as $,aC as V}from"./index-r-FuctN5.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-y-ihqubn.js";import{AudioViewer as H}from"./AudioViewer-B88kBiQH.js";import{ImageViewer as R}from"./ImageViewer-RDOE-ikb.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.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=C(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 d=0;async function h(){const g=++d;try{const s=`/__editor/source-file?path=${encodeURIComponent(w)}`,S=await fetch(s,{cache:"no-store"}).then(p=>{if(!p.ok)throw new Error(`HTTP ${p.status}`);return p.text()});!a&&g===d&&(l(S),u(null))}catch(s){!a&&g===d&&u(s instanceof Error?s.message:String(s))}}const v=$();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 K({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{K as SourceAssetViewer,j as sourceAssetRoute};
1
+ import{a as r}from"./jsx-runtime-DPjLkJKQ.js";import{b5 as m,al as n,b6 as x,b7 as C,b8 as $,aC as V}from"./index-jhDTJrJJ.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-P6W4QFdq.js";import{AudioViewer as H}from"./AudioViewer-Q40_cmYq.js";import{ImageViewer as R}from"./ImageViewer-gSGJ3OMb.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.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=C(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 d=0;async function h(){const g=++d;try{const s=`/__editor/source-file?path=${encodeURIComponent(w)}`,S=await fetch(s,{cache:"no-store"}).then(p=>{if(!p.ok)throw new Error(`HTTP ${p.status}`);return p.text()});!a&&g===d&&(l(S),u(null))}catch(s){!a&&g===d&&u(s instanceof Error?s.message:String(s))}}const v=$();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 K({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{K as SourceAssetViewer,j as sourceAssetRoute};