@volter/game-editor 0.5.155 → 0.5.157

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 (294) hide show
  1. package/BUNDLED_NOTICES +22 -22
  2. package/catalog/entries/blender.json +2 -2
  3. package/catalog/entries/music.json +2 -2
  4. package/dist/.vite/manifest.json +2156 -2156
  5. package/dist/assets/{AssetBudgetPanel-B2Wb7-b1.js → AssetBudgetPanel-X38cPCO3.js} +3 -3
  6. package/dist/assets/{AudioViewer-gge--M-h.js → AudioViewer-xMM7RZH9.js} +1 -1
  7. package/dist/assets/{CanvasBoardDocument-CyGiXrEJ.js → CanvasBoardDocument-DCyh4eaO.js} +1 -1
  8. package/dist/assets/{CanvasSceneViewport-ChG9oRS8.js → CanvasSceneViewport-BA8eRjJY.js} +1 -1
  9. package/dist/assets/{ColorInput-Dzpqy-J3.js → ColorInput-y8NzQ5q8.js} +1 -1
  10. package/dist/assets/{ColorPicker-CqJPBHlh.js → ColorPicker-C3HI90eU.js} +1 -1
  11. package/dist/assets/{EntityModelDocument-D7XDf6uB.js → EntityModelDocument-DrWN0e0N.js} +1 -1
  12. package/dist/assets/{EnvironmentAssetDocument-BgO7Hl3g.js → EnvironmentAssetDocument-Bv8M7C1O.js} +1 -1
  13. package/dist/assets/{GameplaySessionTimeline-BBmwHCKA.js → GameplaySessionTimeline-mMVtRemn.js} +1 -1
  14. package/dist/assets/{ImageViewer-BjxoscVa.js → ImageViewer-D1mswm2G.js} +1 -1
  15. package/dist/assets/InspectorObjectPreview-DMNRuc0X.js +1 -0
  16. package/dist/assets/{JsonAssetDocument-D81JuRAm.js → JsonAssetDocument-DxLYMceV.js} +1 -1
  17. package/dist/assets/{LiveModuleDocument-bgStMiU1.js → LiveModuleDocument-BOO4_ypf.js} +1 -1
  18. package/dist/assets/{LutAssetDocument-cl9Jq0Zw.js → LutAssetDocument-jf9ogNqN.js} +1 -1
  19. package/dist/assets/{ModelAssetDocument-CYCLKpxJ.js → ModelAssetDocument-DbtKJsGQ.js} +1 -1
  20. package/dist/assets/{NonThreeAuthoringBootstrap-DhHjvD5d.js → NonThreeAuthoringBootstrap-ChEoVJQP.js} +1 -1
  21. package/dist/assets/{Object3DDocumentToolbar-CQbARBIW.js → Object3DDocumentToolbar-Y-jpI3WD.js} +1 -1
  22. package/dist/assets/Object3DDocumentViewport-BOi94JfA.js +2 -0
  23. package/dist/assets/{Object3DPreview-BOZYzjz_.js → Object3DPreview-7LnLFpmg.js} +1 -1
  24. package/dist/assets/{OnlineAssetDetail-DdKHHjxg.js → OnlineAssetDetail-DVdZv1D1.js} +1 -1
  25. package/dist/assets/{PlayBar-CAarfEOh.js → PlayBar-B-GGRbBB.js} +1 -1
  26. package/dist/assets/{QuarksAssetDocument-GTbawoy7.js → QuarksAssetDocument-2MqOJHlY.js} +1 -1
  27. package/dist/assets/{ReactCanvasControls-DIFkxeKv.js → ReactCanvasControls-COp1PvO1.js} +1 -1
  28. package/dist/assets/{RootSelectionOverlay-Dv_w1D9s.js → RootSelectionOverlay-6M-HHI3M.js} +1 -1
  29. package/dist/assets/{ShaderAssetDocument-OA-nshNN.js → ShaderAssetDocument-PrwCSYxk.js} +1 -1
  30. package/dist/assets/{ShadowEditor-Cp1QVCo9.js → ShadowEditor-EXaJ1Kud.js} +1 -1
  31. package/dist/assets/{SourceAssetViewer-CGGHBzgL.js → SourceAssetViewer-Bk_LGk7S.js} +1 -1
  32. package/dist/assets/{StageHost-BMgCrIPG.js → StageHost-CK78ezTC.js} +2 -2
  33. package/dist/assets/{StoryPreviewMount-CyF7FwI7.js → StoryPreviewMount-IbbNNzF4.js} +1 -1
  34. package/dist/assets/{ThreeBoardDocument-DCJkLWU8.js → ThreeBoardDocument-DUakOh0j.js} +2 -2
  35. package/dist/assets/{ThreeIsolationSceneContent-CxsM-QHW.js → ThreeIsolationSceneContent-BjAyHzL2.js} +1 -1
  36. package/dist/assets/{ToolObject3DPreview-lsAoRxtr.js → ToolObject3DPreview-CRb_pBHc.js} +1 -1
  37. package/dist/assets/{Toolbar-yvFlRv8R.js → Toolbar-Bb7KArdo.js} +1 -1
  38. package/dist/assets/{TransientHint-Bslncm_l.js → TransientHint-BlB2atrU.js} +1 -1
  39. package/dist/assets/{VideoViewer-Ba-e91kP.js → VideoViewer-D5fNjrcg.js} +1 -1
  40. package/dist/assets/{ViewportShadingMenu-CgbuQ0e-.js → ViewportShadingMenu-D_-wHbzW.js} +1 -1
  41. package/dist/assets/{active-ingest-CJ2U5L1O.js → active-ingest-DJ8FmH5M.js} +2 -2
  42. package/dist/assets/{animation-clock-CVpGQSVj.js → animation-clock-CINkiVZd.js} +1 -1
  43. package/dist/assets/{animation-mixers.service-CI0K1tfi.js → animation-mixers.service-BST_khGa.js} +1 -1
  44. package/dist/assets/{animation-timeline.utility-Wg6WxkxK.js → animation-timeline.utility-X54fMzvE.js} +1 -1
  45. package/dist/assets/{asset-budget-asset.menu-BbCBxjLY.js → asset-budget-asset.menu-CfJth8-V.js} +1 -1
  46. package/dist/assets/{asset-budget.action-CK8h0v1A.js → asset-budget.action-ByyoIoUI.js} +1 -1
  47. package/dist/assets/{asset-budget.document-CYVcDLvH.js → asset-budget.document-CO1NrMEa.js} +1 -1
  48. package/dist/assets/{asset-budget.menu-BcTijQ2R.js → asset-budget.menu-Cb99KwLd.js} +1 -1
  49. package/dist/assets/{asset-editor-persistence-DWp0E8cc.js → asset-editor-persistence-BF2Eqt0F.js} +1 -1
  50. package/dist/assets/{asset-loaders-Bo91oPiL.js → asset-loaders-2LtXp4_y.js} +1 -1
  51. package/dist/assets/{asset-preview-BUpxsHNd.js → asset-preview-t-7PYPjJ.js} +1 -1
  52. package/dist/assets/{audio-unlock.service-CyiXe5qk.js → audio-unlock.service-DwkIGA6J.js} +1 -1
  53. package/dist/assets/{audio.utility-BN4mANCx.js → audio.utility-Mn4GcZIb.js} +1 -1
  54. package/dist/assets/autoplay.service-D7c8d5PV.js +1 -0
  55. package/dist/assets/{babylon-authoring-adapter-C-EAsfMr.js → babylon-authoring-adapter-BB5HErRG.js} +1 -1
  56. package/dist/assets/{binding-resolver-DoOAFM2m.js → binding-resolver-CXF3o1ZX.js} +2 -2
  57. package/dist/assets/{blender-node-editor.document-BzkGPs0i.js → blender-node-editor.document-djNJTSeo.js} +1 -1
  58. package/dist/assets/{blender-properties-tab-B1ggqOYB.js → blender-properties-tab-06D6TYA0.js} +1 -1
  59. package/dist/assets/{blender-runtime-host-MJZEPwHA.js → blender-runtime-host-Cqitl1ZO.js} +1 -1
  60. package/dist/assets/{blender-runtime-skin-hw-op7Nt.js → blender-runtime-skin-RX6nlrgy.js} +72 -58
  61. package/dist/assets/{blender-runtime.document-CvTyAou8.js → blender-runtime.document-pgD63Zep.js} +10 -10
  62. package/dist/assets/{blender-screenshot.menu-C4VXpXVa.js → blender-screenshot.menu-DZ44fIU0.js} +1 -1
  63. package/dist/assets/{blender-timeline.document-BRFDd7JZ.js → blender-timeline.document-D53mR9D6.js} +1 -1
  64. package/dist/assets/{blender-uv-editor.document-CM09ITWu.js → blender-uv-editor.document-Dux9ZXaj.js} +1 -1
  65. package/dist/assets/{blender-version.status-CPyc_-kA.js → blender-version.status-hK0_7tRC.js} +1 -1
  66. package/dist/assets/{blender.command-ktKz-2Zi.js → blender.command-BF9RHCP_.js} +1 -1
  67. package/dist/assets/{board-guides-CCiyx8cT.js → board-guides-BYnclES1.js} +1 -1
  68. package/dist/assets/{bridge.command-tP5j6w72.js → bridge.command-CS12Cp-B.js} +3 -3
  69. package/dist/assets/{browserAll-BSQVVrNG.js → browserAll-CGQ_uBbB.js} +1 -1
  70. package/dist/assets/{build-player.document-BwbBXtF5.js → build-player.document-RpeG8U_t.js} +1 -1
  71. package/dist/assets/{build-profiles.document-UiF_BsjE.js → build-profiles.document-DydU-eTF.js} +1 -1
  72. package/dist/assets/{build-progress.status-Bf5KpnxC.js → build-progress.status-arvTBGok.js} +1 -1
  73. package/dist/assets/{build-session-C4jVDt-u.js → build-session-D8B-93_A.js} +1 -1
  74. package/dist/assets/{build.action-DP2d1Uhj.js → build.action-CYKD0CrB.js} +1 -1
  75. package/dist/assets/{build.command-D5pyNcoj.js → build.command-BH-4yWaL.js} +1 -1
  76. package/dist/assets/{build.header-DupBIAOw.js → build.header-B5-bZp5Z.js} +1 -1
  77. package/dist/assets/{build.menu-DWrKtdoV.js → build.menu-CyOe8xXz.js} +1 -1
  78. package/dist/assets/{build.service-qnz73gSX.js → build.service-BuhAa1EB.js} +1 -1
  79. package/dist/assets/{camera-C74U5X7o.js → camera-KM5i-TaU.js} +1 -1
  80. package/dist/assets/{camera-runtime.inspector-B2l34Xhl.js → camera-runtime.inspector-DA-GqhBI.js} +1 -1
  81. package/dist/assets/{canvas-design-mount-D4M3E1AX.js → canvas-design-mount-PWQPVLiY.js} +3 -3
  82. package/dist/assets/{canvas-entry-runtime-CLOuJcgT.js → canvas-entry-runtime-nWfnVKYb.js} +2 -2
  83. package/dist/assets/{canvas-preview-frames-CSCcu2sG.js → canvas-preview-frames-BwWVTr-u.js} +1 -1
  84. package/dist/assets/{canvas-story-capture.service-onD_xSpQ.js → canvas-story-capture.service-B1o-VBky.js} +2 -2
  85. package/dist/assets/{capability-coverage-EnZ99FoT.js → capability-coverage-aT7nf05J.js} +1 -1
  86. package/dist/assets/{collaboration-presence-1_UMOAkw.js → collaboration-presence-h1Fxju0A.js} +1 -1
  87. package/dist/assets/{collider-C6R1tHfa.js → collider-BDLEjrr-.js} +1 -1
  88. package/dist/assets/{component-board.service-Ckl-5tA4.js → component-board.service-CetsHh4L.js} +2 -2
  89. package/dist/assets/{component-board.service-Cuf_SXeA.js → component-board.service-DAeFLAlB.js} +2 -2
  90. package/dist/assets/{component-board.service-BX_2bwX3.js → component-board.service-qH45JxuD.js} +2 -2
  91. package/dist/assets/{component-contracts.service-rI-rbvDG.js → component-contracts.service-nYhZ_ceu.js} +1 -1
  92. package/dist/assets/{component-instance-root-wO1p-rLr.js → component-instance-root-QYCCyhxU.js} +1 -1
  93. package/dist/assets/{component-verbs.command-O2bwqmK3.js → component-verbs.command-y1H2CFq-.js} +1 -1
  94. package/dist/assets/{component-verbs.service-BiiQMtJt.js → component-verbs.service-QvBBdzY3.js} +1 -1
  95. package/dist/assets/{config-dVnV1cxW.js → config-YwJJtCF0.js} +2 -2
  96. package/dist/assets/{configurations-8qaUqMH7.js → configurations-B52h5RGp.js} +1 -1
  97. package/dist/assets/{connection.status-vH9WCDDg.js → connection.status-DnEU1lk4.js} +1 -1
  98. package/dist/assets/{constraints.inspector-C7UjUxPR.js → constraints.inspector-DgbM_8l2.js} +1 -1
  99. package/dist/assets/{content-bounds-Dl5Y3LLv.js → content-bounds-BRS42hfD.js} +1 -1
  100. package/dist/assets/{contract-system-adapters-BDUpDoKd.js → contract-system-adapters-DIpeIRm_.js} +1 -1
  101. package/dist/assets/{coverage.service-IS7Oklo8.js → coverage.service-Cjy9MO9F.js} +1 -1
  102. package/dist/assets/{create-runtime-Bucz0XVU.js → create-runtime-ByZWXstA.js} +1 -1
  103. package/dist/assets/{curve-D0Q6TczG.js → curve-DaFJmPin.js} +1 -1
  104. package/dist/assets/{data-asset-B0a1y8M-.js → data-asset-DRCqFyxF.js} +1 -1
  105. package/dist/assets/{data-ref-dRt2Wi5L.js → data-ref-CkvCIusA.js} +1 -1
  106. package/dist/assets/{debug-bridge-EhDkhrLX.js → debug-bridge-C7NLsHKu.js} +1 -1
  107. package/dist/assets/{debug-registry-B2THKz1v.js → debug-registry-BzagDrhV.js} +1 -1
  108. package/dist/assets/{deferred-ingest-play-To3ZratW.js → deferred-ingest-play-DMp_yRhc.js} +2 -2
  109. package/dist/assets/{design-time-canvas-mount-BnSaRAbS.js → design-time-canvas-mount-kB1ZRIvt.js} +2 -2
  110. package/dist/assets/{design-time-layers-OMAIxOrv.js → design-time-layers-Dzu3jW_N.js} +1 -1
  111. package/dist/assets/{design-time-mount.service-RFkiqPIn.js → design-time-mount.service-CLEJHBLW.js} +2 -2
  112. package/dist/assets/{design-time-mount.service-Bgr_nCDs.js → design-time-mount.service-Dgswmfff.js} +2 -2
  113. package/dist/assets/{design-time-react-mount-BsSBoX7J.js → design-time-react-mount-B71UACVS.js} +1 -1
  114. package/dist/assets/{document-preview-three-Qni0oVBw.js → document-preview-three-DxAxdZRF.js} +1 -1
  115. package/dist/assets/{dom-authoring-adapter-DsUgOtQy.js → dom-authoring-adapter-CQiwffQ4.js} +1 -1
  116. package/dist/assets/{draco3d-DyZllcka.js → draco3d-CWfPSgkb.js} +1 -1
  117. package/dist/assets/{edit-mode-audio.service-CjXNAZEs.js → edit-mode-audio.service-CikRAHOi.js} +1 -1
  118. package/dist/assets/{edit-mode-authoring-BDgZD47j.js → edit-mode-authoring-DthrLbz-.js} +1 -1
  119. package/dist/assets/{edit-mode-networking.service-3dUr2g_0.js → edit-mode-networking.service-DBmK8YGU.js} +1 -1
  120. package/dist/assets/{editor-api-DTrNJMXL.js → editor-api-CqqOlRSi.js} +1 -1
  121. package/dist/assets/{editor-layers-DwaX5UFy.js → editor-layers-k0AjpomL.js} +1 -1
  122. package/dist/assets/{editor-shell-store-aKHbAoCV.js → editor-shell-store-B3c29A3l.js} +1 -1
  123. package/dist/assets/{entity-object-BLJ-I8XT.js → entity-object-BOLh6DVA.js} +1 -1
  124. package/dist/assets/{extend-6LrR7eSL.js → extend-CJ7vLkP1.js} +1 -1
  125. package/dist/assets/{fork-menu-V-FM6YuY.js → fork-menu-Bzl-5_GA.js} +1 -1
  126. package/dist/assets/{frame-debugger-store-DwDC0wAm.js → frame-debugger-store-NGsJt0AK.js} +1 -1
  127. package/dist/assets/{game-contract-seams-C22a4B79.js → game-contract-seams-CuBiefwV.js} +1 -1
  128. package/dist/assets/{game-css-scope-transform-Wv0ZdTsR.js → game-css-scope-transform-5yv5zl6t.js} +1 -1
  129. package/dist/assets/{game-document.service-BzvFIWCc.js → game-document.service-DtML_s2L.js} +1 -1
  130. package/dist/assets/{game-eval.command-DpQn_nY8.js → game-eval.command-Cghc-6r3.js} +1 -1
  131. package/dist/assets/{game-module-access-BI6oBa8Y.js → game-module-access-DPnqfsy_.js} +1 -1
  132. package/dist/assets/{game-network-Deo8lcPw.js → game-network-TjOj3K-Z.js} +3 -3
  133. package/dist/assets/{gameplay-export-BOLhxmII.js → gameplay-export-ebDdiP9T.js} +1 -1
  134. package/dist/assets/{gameplay-replay-Dkvmv6hf.js → gameplay-replay-B4BPQnTZ.js} +1 -1
  135. package/dist/assets/{gameplay.command-DCKqLv7C.js → gameplay.command-C__OjBjz.js} +1 -1
  136. package/dist/assets/{generation-jobs-6D562vMB.js → generation-jobs-C57_oOgx.js} +1 -1
  137. package/dist/assets/{generation.service-BFRoLb7y.js → generation.service-BJel-Oiy.js} +1 -1
  138. package/dist/assets/{generations-HwV1btKK.js → generations-DNfmqqzL.js} +1 -1
  139. package/dist/assets/{generations.status-BLiDcKsg.js → generations.status-nXpY7bFU.js} +1 -1
  140. package/dist/assets/{hierarchy-marks-DeG4E4Ke.js → hierarchy-marks-C2temlO0.js} +1 -1
  141. package/dist/assets/{hosted-asset-materialization-Bod7CEMF.js → hosted-asset-materialization-BtbO5pyX.js} +1 -1
  142. package/dist/assets/{index-CLUA6PYq.js → index-7J5pTwW2.js} +1 -1
  143. package/dist/assets/{index-KIR4Has5.js → index-B5GZkByz.js} +1 -1
  144. package/dist/assets/{index-CdLhNxor.js → index-B69_nH5F.js} +1 -1
  145. package/dist/assets/{index-ClgrFOcX.js → index-BfqJPhFO.js} +7 -7
  146. package/dist/assets/{index-DkYeh000.js → index-BiH6f3Mk.js} +1 -1
  147. package/dist/assets/{index-CHOT9sYh.js → index-CFS_B4hc.js} +2 -2
  148. package/dist/assets/{index-CyLPQ8pY.js → index-DYoPv2Wb.js} +1 -1
  149. package/dist/assets/{index-4hL3-0yz.js → index-my7iu018.js} +1 -1
  150. package/dist/assets/{index-jS3rfNkZ.js → index-zXacXllH.js} +1 -1
  151. package/dist/assets/{inference-diagnostics-BmZ5ggEK.js → inference-diagnostics-NvA3SRR7.js} +1 -1
  152. package/dist/assets/{ingest-boot-viewport-CipkFljr.js → ingest-boot-viewport-DHhBi66w.js} +1 -1
  153. package/dist/assets/{ingest-siblings-CEwYp-xg.js → ingest-siblings-CMWO3uRZ.js} +1 -1
  154. package/dist/assets/{ingest-source-persistence-CVU1rTj0.js → ingest-source-persistence-CrXFBT__.js} +1 -1
  155. package/dist/assets/{ingest.service-bNqvcqoK.js → ingest.service-BYEo4j1s.js} +1 -1
  156. package/dist/assets/{inspect-BunjdqX7.js → inspect-UxYR9Ls5.js} +1 -1
  157. package/dist/assets/instances.command-DDOJ3aWq.js +1 -0
  158. package/dist/assets/{json-history-resource-CDEoQe1R.js → json-history-resource-De8KJl61.js} +1 -1
  159. package/dist/assets/{layered-pick-guh6WlA7.js → layered-pick-Dito5b_J.js} +1 -1
  160. package/dist/assets/{light-BPZivpCK.js → light-BnSS9Nzc.js} +1 -1
  161. package/dist/assets/{live-project-verbs-Bqmxbr2o.js → live-project-verbs-CDRzC_D1.js} +1 -1
  162. package/dist/assets/{machine.document-CAFPFq5K.js → machine.document-CVG78EGi.js} +1 -1
  163. package/dist/assets/{machines.finder-CbUWReMp.js → machines.finder-vrUR_Pb_.js} +1 -1
  164. package/dist/assets/{material-huG6lNEK.js → material-7mmxSi8g.js} +1 -1
  165. package/dist/assets/{material-factory-BkyOzJ7B.js → material-factory-CXvJ2goL.js} +1 -1
  166. package/dist/assets/{mesh-CjCfRcFK.js → mesh-DpK09Vho.js} +1 -1
  167. package/dist/assets/{model-asset-sections.service-Dt4V2K2v.js → model-asset-sections.service-ByE7kOXW.js} +1 -1
  168. package/dist/assets/{model-inspection-BDA5jikL.js → model-inspection-PgxfYOnI.js} +1 -1
  169. package/dist/assets/{model-thumbnail-CF3qGQWb.js → model-thumbnail-Dnv7DCt7.js} +1 -1
  170. package/dist/assets/{models.finder-yh4YeGrA.js → models.finder-BaD41xeQ.js} +1 -1
  171. package/dist/assets/{module-mode-D8en13PD.js → module-mode-Bb9fFtEw.js} +2 -2
  172. package/dist/assets/{mount-canvas-ingest-root-JOkm2Ypj.js → mount-canvas-ingest-root-B0_ckx79.js} +2 -2
  173. package/dist/assets/{mount-dom-ingest-root-CVXFnJZb.js → mount-dom-ingest-root-BnZQSayp.js} +2 -2
  174. package/dist/assets/{mount-ingest-root-C3o0o28C.js → mount-ingest-root-DHVNQKHi.js} +2 -2
  175. package/dist/assets/{mount-manifest-d7WQ9MYp.js → mount-manifest-cYykTsXQ.js} +1 -1
  176. package/dist/assets/{mount-three-ingest-root-Dqd4XWP1.js → mount-three-ingest-root-CI-gjlh8.js} +1 -1
  177. package/dist/assets/{mounted-authoring-B697dYuN.js → mounted-authoring-B2dc__pv.js} +1 -1
  178. package/dist/assets/{mounted-story-viewport-source-BvNZ3QQn.js → mounted-story-viewport-source-Ceh05FK8.js} +1 -1
  179. package/dist/assets/{native-debug-module-iX2-V5kg.js → native-debug-module-L_Ofssyj.js} +1 -1
  180. package/dist/assets/{navigation-CIl9OY1F.js → navigation-CADCnkrx.js} +1 -1
  181. package/dist/assets/{navmesh.menu-DrMoj7Ag.js → navmesh.menu-3D6ZEGhB.js} +1 -1
  182. package/dist/assets/{navmesh.service-CTr1NVfz.js → navmesh.service-D_TdU1xw.js} +1 -1
  183. package/dist/assets/network-observer.service-D9nUCc15.js +1 -0
  184. package/dist/assets/{network.utility-Btexm5ao.js → network.utility-B3riF8KT.js} +1 -1
  185. package/dist/assets/{object3d-document-session-registry-CADiW-LP.js → object3d-document-session-registry-CLizyhis.js} +2 -2
  186. package/dist/assets/{oid-transform-Ca1oU_Ei.js → oid-transform-CinlfHYa.js} +1 -1
  187. package/dist/assets/{particles-D1oPwNJh.js → particles--V50tPi5.js} +1 -1
  188. package/dist/assets/{pixi-authoring-adapter-B1BBfTju.js → pixi-authoring-adapter-qbP0YW7g.js} +1 -1
  189. package/dist/assets/{pixi-live-write-target-BcUhtqmJ.js → pixi-live-write-target-coTAFFGW.js} +1 -1
  190. package/dist/assets/{play.command-ScnwcvJr.js → play.command-kc7rzTlg.js} +2 -2
  191. package/dist/assets/{presentation-DPfnCjNA.js → presentation-jBjhcEq1.js} +1 -1
  192. package/dist/assets/{product-D_9saRiZ.js → product-DgYRVeaY.js} +1 -1
  193. package/dist/assets/{profiler.action-PXTw93E5.js → profiler.action-Dj94ZJLY.js} +1 -1
  194. package/dist/assets/{profiler.menu-DPFV6QQD.js → profiler.menu-BHplCv7a.js} +1 -1
  195. package/dist/assets/{profiler.utility-eDooJGnI.js → profiler.utility-D32oIOGk.js} +1 -1
  196. package/dist/assets/{project-authoring-session-BmeutotA.js → project-authoring-session-Cd8SeWEJ.js} +2 -2
  197. package/dist/assets/{properties-bone-constraints.inspector-BW0V1WXQ.js → properties-bone-constraints.inspector-VPTHP6BI.js} +1 -1
  198. package/dist/assets/{properties-bone.inspector-DIvTZhY8.js → properties-bone.inspector-4GD1gzCp.js} +1 -1
  199. package/dist/assets/{properties-collection.inspector-Dbt5XMhs.js → properties-collection.inspector-CehoAair.js} +1 -1
  200. package/dist/assets/{properties-constraints.inspector-5SvB0GDC.js → properties-constraints.inspector-LgPoqURT.js} +1 -1
  201. package/dist/assets/{properties-data.inspector-C-SngIsI.js → properties-data.inspector-D3uEJD3t.js} +1 -1
  202. package/dist/assets/{properties-material.inspector-CYAWsvsX.js → properties-material.inspector-2n9K5IFo.js} +1 -1
  203. package/dist/assets/{properties-modifiers.inspector-XN6BL-Ll.js → properties-modifiers.inspector-B_RsuDyF.js} +1 -1
  204. package/dist/assets/{properties-object.inspector-CfryU0kN.js → properties-object.inspector-CBZA72yZ.js} +1 -1
  205. package/dist/assets/{properties-output.inspector-COfgmFUW.js → properties-output.inspector-DxDAmKI-.js} +1 -1
  206. package/dist/assets/{properties-particles.inspector-BCh0vFr6.js → properties-particles.inspector-pPS920CT.js} +1 -1
  207. package/dist/assets/{properties-physics.inspector-B6to1u6U.js → properties-physics.inspector-XUnPp5Q3.js} +1 -1
  208. package/dist/assets/{properties-render.inspector-C4hVfo7j.js → properties-render.inspector-DnC4sgP3.js} +1 -1
  209. package/dist/assets/{properties-scene.inspector-dKta4xn5.js → properties-scene.inspector-MZ-gCrYM.js} +1 -1
  210. package/dist/assets/{properties-texture.inspector-ZlNhW25m.js → properties-texture.inspector-B7QGBzm5.js} +1 -1
  211. package/dist/assets/{properties-view-layer.inspector-CIxHmkDR.js → properties-view-layer.inspector-rt2qT9SA.js} +1 -1
  212. package/dist/assets/{properties-world.inspector-Ce0q2dmK.js → properties-world.inspector-Vg7GD9HK.js} +1 -1
  213. package/dist/assets/{r3f-design-session-1riISktt.js → r3f-design-session-DfRwB6oN.js} +2 -2
  214. package/dist/assets/{r3f-physics-binding-DuG97FR9.js → r3f-physics-binding-EfYECbQc.js} +1 -1
  215. package/dist/assets/{r3f-source-authoring-adapter-B8qqrdwk.js → r3f-source-authoring-adapter-CVupdJt5.js} +1 -1
  216. package/dist/assets/{react-canvas-navigation-CxBm8iw8.js → react-canvas-navigation-DwiPTVdH.js} +1 -1
  217. package/dist/assets/{react-inspector.service-BcdePwno.js → react-inspector.service-DffkStxd.js} +1 -1
  218. package/dist/assets/{react-story-board-CMvkLAkF.js → react-story-board-CynnmKqO.js} +1 -1
  219. package/dist/assets/{react-three-rapier.esm-D5svf-ME.js → react-three-rapier.esm-DnUfnQnM.js} +1 -1
  220. package/dist/assets/{react-world-authoring-adapter-Dq8NqvWu.js → react-world-authoring-adapter-Cf1jv2dl.js} +1 -1
  221. package/dist/assets/{realm-services-CqjVBanw.js → realm-services-CxfLBQQ9.js} +1 -1
  222. package/dist/assets/{reflection-probe-capture.inspector-uEvyppEj.js → reflection-probe-capture.inspector-DfzDNtJF.js} +1 -1
  223. package/dist/assets/{registry-D7lFIA8c.js → registry-69pUwZEm.js} +1 -1
  224. package/dist/assets/{relative-import-specifier-CA9mSNXO.js → relative-import-specifier-J1WeZQaJ.js} +1 -1
  225. package/dist/assets/{render-env-BHasp-z3.js → render-env-CmR-momj.js} +1 -1
  226. package/dist/assets/{render-features-sSb1-c5x.js → render-features-D7pQr-dE.js} +1 -1
  227. package/dist/assets/{render-settings-CUbo4Sw5.js → render-settings-BUT8gPkc.js} +1 -1
  228. package/dist/assets/{resolve-three-TQ367RQD.js → resolve-three-Dhw2LtAp.js} +3 -3
  229. package/dist/assets/{root-seam-contract-CneTgNww.js → root-seam-contract-BFs0rvG9.js} +1 -1
  230. package/dist/assets/{run-selection-CNsOQTEG.js → run-selection-CEuu_sxz.js} +1 -1
  231. package/dist/assets/{scene-capture-KbdRgsD3.js → scene-capture-DgUSqWTB.js} +1 -1
  232. package/dist/assets/{scene-document.service-CmPSUocW.js → scene-document.service-BDDoO22G.js} +2 -2
  233. package/dist/assets/{scene-framing-B5JC4NeG.js → scene-framing-Dm-rCn3G.js} +1 -1
  234. package/dist/assets/{seeded-random-B6zqGkWP.js → seeded-random-C9256-Ag.js} +1 -1
  235. package/dist/assets/{setup-renderer-efjIBSGF.js → setup-renderer-CWvtkVDR.js} +1 -1
  236. package/dist/assets/{source-object3d-authoring-adapter-DeeboYub.js → source-object3d-authoring-adapter-ehtz9UK_.js} +1 -1
  237. package/dist/assets/{source-persistence-backend-Cwy93SmQ.js → source-persistence-backend-CbCbDOjd.js} +1 -1
  238. package/dist/assets/{stage-keyboard-GNCaTXLA.js → stage-keyboard-DiRyZTZd.js} +1 -1
  239. package/dist/assets/{stage-overlay-set-DV3SCzJb.js → stage-overlay-set-6pmCmKpX.js} +1 -1
  240. package/dist/assets/{stage-presence-markers-CBEU1Kzo.js → stage-presence-markers-mZPecAeK.js} +1 -1
  241. package/dist/assets/{stage-transform-tools-C9nNDW6n.js → stage-transform-tools-Qc0QjPrc.js} +1 -1
  242. package/dist/assets/{standard-viewport-dressing-BJkGwiNT.js → standard-viewport-dressing-BhTPIZTQ.js} +1 -1
  243. package/dist/assets/{state-watch.action-Doz_jrzS.js → state-watch.action-DJfW26od.js} +1 -1
  244. package/dist/assets/{state-watch.menu-Dj4DUUxN.js → state-watch.menu-B1GRE_HT.js} +1 -1
  245. package/dist/assets/{state-watch.utility-COPa8xpV.js → state-watch.utility-BQaTOFU-.js} +1 -1
  246. package/dist/assets/{story-capture-stRSY4PQ.js → story-capture-DZNUtuCH.js} +1 -1
  247. package/dist/assets/{story-documents-CYzWYY1o.js → story-documents-DArOiGNt.js} +1 -1
  248. package/dist/assets/{story-documents.service-DJBu4rve.js → story-documents.service-Bi89tZQ5.js} +1 -1
  249. package/dist/assets/{story-documents.service-C5r8KFEG.js → story-documents.service-DaPhxnzw.js} +1 -1
  250. package/dist/assets/{story-media-presence-D4AIsAtK.js → story-media-presence-CMJ7U-7_.js} +1 -1
  251. package/dist/assets/{story-pixi-preview-mPo3OFOd.js → story-pixi-preview-jmF1ab99.js} +1 -1
  252. package/dist/assets/{story-presentation-Dw4Vw65P.js → story-presentation-DNXF37vS.js} +1 -1
  253. package/dist/assets/{story-three-preview-CWM0Rj7x.js → story-three-preview-CH6Kk934.js} +2 -2
  254. package/dist/assets/{studio-environment-Bw9zMFE8.js → studio-environment-BNM-AjAn.js} +1 -1
  255. package/dist/assets/{surface-state-b_H4iOCJ.js → surface-state-BLuxJ4lb.js} +1 -1
  256. package/dist/assets/{syntactic-prop-specs-BCdwWi-T.js → syntactic-prop-specs-Coas9J4z.js} +1 -1
  257. package/dist/assets/{team-playtest.service-CnxdTghn.js → team-playtest.service-C3cEeDBv.js} +1 -1
  258. package/dist/assets/{three-DWy0sZom.js → three-BvhtsSAr.js} +1 -1
  259. package/dist/assets/{three-authoring-adapter-9LcUBPaU.js → three-authoring-adapter-K8a5THvW.js} +1 -1
  260. package/dist/assets/three-authoring.service-D-uSiCHc.js +2 -0
  261. package/dist/assets/{three-ingest-runtime-x9nLmUl-.js → three-ingest-runtime-QhrURliQ.js} +1 -1
  262. package/dist/assets/{three-integration-DB-xQHD5.js → three-integration-CaC8ivB7.js} +2 -2
  263. package/dist/assets/three-integration.service-BvTtbtlD.js +1 -0
  264. package/dist/assets/{three-projection-core-IUovHgg_.js → three-projection-core-C2Zj6hTy.js} +1 -1
  265. package/dist/assets/{three-state-_ImCbP87.js → three-state-cYB28OIz.js} +1 -1
  266. package/dist/assets/{three-story-capture.service-wKwfSnqA.js → three-story-capture.service-H2Z2O7Nz.js} +2 -2
  267. package/dist/assets/{three-story-model-BxWKcl9d.js → three-story-model-DVfgIOzi.js} +1 -1
  268. package/dist/assets/{three-viewport-presentation-Bg86EsDJ.js → three-viewport-presentation-DoViPvQB.js} +1 -1
  269. package/dist/assets/{transform-mode-request-BnV8FSnx.js → transform-mode-request-CflM_ccL.js} +1 -1
  270. package/dist/assets/{transport-strip-BZQnaxFN.js → transport-strip-DPoEy7PU.js} +1 -1
  271. package/dist/assets/transport.header-DdI58npA.js +1 -0
  272. package/dist/assets/{tuples-DR33sMq6.js → tuples-CA3u4T9B.js} +1 -1
  273. package/dist/assets/{ui-board-document-VJMvm6Ks.js → ui-board-document-CoKY7MDM.js} +2 -2
  274. package/dist/assets/{user-data-DL6HsBPf.js → user-data-CTT8ZvVB.js} +1 -1
  275. package/dist/assets/{utility-view-state-ghWXsYXq.js → utility-view-state-BaO3Fx_-.js} +1 -1
  276. package/dist/assets/{viewport-door-BV_lf5uK.js → viewport-door-BBtilr3V.js} +1 -1
  277. package/dist/assets/{viewport-root-presentation-CKqhX3mt.js → viewport-root-presentation-DmDBAZ8E.js} +1 -1
  278. package/dist/assets/{viewport-surface-status-D7M2L2lI.js → viewport-surface-status-BiDiAZ6z.js} +1 -1
  279. package/dist/assets/{webworkerAll-DDbFvxgB.js → webworkerAll-BCvjBZqG.js} +1 -1
  280. package/dist/assets/{workspace-arrangement-86_8Kk5K.js → workspace-arrangement-BXM0R-Uu.js} +1 -1
  281. package/dist/assets/{world-documents-DeNJUefV.js → world-documents-DGk_J8cp.js} +1 -1
  282. package/dist/assets/{world-root-stage-binding-VOrldLB4.js → world-root-stage-binding-KaIVpo80.js} +1 -1
  283. package/dist/assets/{xstate-animation-binding-747CfEeB.js → xstate-animation-binding-D_kxRsxS.js} +1 -1
  284. package/dist/assets/{xstate-animation-meta-DNMlMnr-.js → xstate-animation-meta-CX5oWqQv.js} +1 -1
  285. package/dist-node/cli.js +16 -16
  286. package/package.json +16 -16
  287. package/dist/assets/InspectorObjectPreview-C87CasN_.js +0 -1
  288. package/dist/assets/Object3DDocumentViewport-BpiyRQ5p.js +0 -2
  289. package/dist/assets/autoplay.service-CKBqjozr.js +0 -1
  290. package/dist/assets/instances.command-DzcXdKuG.js +0 -1
  291. package/dist/assets/network-observer.service-DyzpGKA7.js +0 -1
  292. package/dist/assets/three-authoring.service-DdTMF4A2.js +0 -2
  293. package/dist/assets/three-integration.service-DwToRGIc.js +0 -1
  294. package/dist/assets/transport.header-1SF4ZbEd.js +0 -1
@@ -1 +1 @@
1
- import{r as i}from"./index-nmcBqr7Y.js";import{r as s}from"./project-authoring-session-BmeutotA.js";import{Z as e}from"./index-ClgrFOcX.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./edit-mode-authoring-BDgZD47j.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";function A({store:r}){return i.useEffect(()=>{const t=s(r);return t.ready.catch(o=>{e.error(`Authoring session failed: ${o instanceof Error?o.message:String(o)}`,"authoring")}),t.dispose},[r]),null}export{A as ProjectAuthoringBootstrap};
1
+ import{r as i}from"./index-nmcBqr7Y.js";import{r as s}from"./project-authoring-session-Cd8SeWEJ.js";import{Z as e}from"./index-BfqJPhFO.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./edit-mode-authoring-DthrLbz-.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";function A({store:r}){return i.useEffect(()=>{const t=s(r);return t.ready.catch(o=>{e.error(`Authoring session failed: ${o instanceof Error?o.message:String(o)}`,"authoring")}),t.dispose},[r]),null}export{A as ProjectAuthoringBootstrap};
@@ -1 +1 @@
1
- import{a as s}from"./jsx-runtime-DPjLkJKQ.js";import{bl as ee,bm as R,bn as se,bo as N,bp as te,bq as ie,br as L,bs as G,E as oe,F as re,bt as S,bu as ae,bv as B,bw as b,aM as v,a7 as l,bx as ne,a6 as F,by as le,bz as ce,bA as A,bB as d,bC as H,bD as de,bE as pe,bF as me,bG as $,bH as W,bI as ue,bJ as be,bK as U,aN as he,aL as K,a8 as ge,bL as ve,G as _,bM as xe,bN as je,bO as we,bP as fe,bQ as Se,bR as ye}from"./index-ClgrFOcX.js";import{r}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{c as Ce,a as ke}from"./asset-preview-BUpxsHNd.js";import{s as Ee}from"./model-inspection-BDA5jikL.js";import{s as Pe,o as q,a as Ve}from"./object3d-document-session-registry-CADiW-LP.js";import{v as Me}from"./viewport-door-BV_lf5uK.js";import{v as J,V as De,a as Oe,p as ze,b as Te,c as Re}from"./ViewportShadingMenu-CgbuQ0e-.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";import"./editor-layers-DwaX5UFy.js";import"./workspace-arrangement-86_8Kk5K.js";import"./renderer-ownership-BovSEcLv.js";import"./hierarchy-marks-DeG4E4Ke.js";import"./studio-environment-Bw9zMFE8.js";import"./user-data-DL6HsBPf.js";import"./KTX2Loader-CaqVE6nY.js";import"./three.module-BLhyNg0e.js";import"./three.core-3arARmh6.js";import"./GLTFLoader-KeoruJgS.js";import"./BufferGeometryUtils-B22h7jo4.js";import"./environment-Dg-YaLsA.js";import"./RoomEnvironment-BkknvS_I.js";import"./EXRLoader-CITMBvGd.js";import"./HDRLoader-BTGuGhVo.js";import"./bitmap-label-Ct4k6ehY.js";const Q=()=>()=>{},x=()=>0,Ne=[{key:"skeletons",label:"Bones"},{key:"weights",label:"Weights"},{key:"cursor",label:"3D Cursor"},{key:"cameras",label:"Cameras"},{key:"lights",label:"Lights"},{key:"empties",label:"Empties"}];function ms({documentId:i,assetPath:p}){r.useSyncExternalStore(Pe,q,q);const t=Ve(i);r.useSyncExternalStore(ee,R,R),r.useSyncExternalStore(t?.subscribe??Q,t?.getSnapshot??x,t?.getSnapshot??x),r.useSyncExternalStore(se,N,N);const o=te(i);r.useSyncExternalStore(o?.subscribe??Q,o?.getSnapshot??x,o?.getSnapshot??x);const X=Me(i),[y,C]=r.useState(null),[k,h]=r.useState(null),[E,g]=r.useState(!1),[P,c]=r.useState(!1),V=r.useRef(null),M=r.useRef(null);if(r.useSyncExternalStore(ie,L,L),!t)return null;const a=t.presentation(),{lighting:m}=G(i),u=oe(i),D=u?re(u.stageKind):null,Y=u?.documentLayer?.all?.lighting?.studioPreset===S.id||D?.all?.lighting?.studioPreset===S.id,j=u?ae(u.stageKind):!1,O=e=>j?{modes:{[G(i).drawMode]:{lighting:e}}}:{all:{lighting:e}},w=new Set(Object.entries(D?.modes??{}).filter(([,e])=>e?.lighting!==void 0).map(([e])=>e)),f=new Set(Ee(t.root).filter(e=>e.available).map(e=>e.mode)),Z=[...j?J.map(e=>e.mode==="solid"?{...e,label:"Solid",description:"Materials' colours under the studio lights"}:e.mode==="clay"?{...e,label:"Clay"}:e):J,...w.has("preview")?[{mode:"preview",label:"Material Preview",description:"Materials lit by a preview environment"}]:[],...w.has("rendered")?[{mode:"rendered",label:"Rendered",description:"Lit as a render is, by the scene's own lights"}]:[],...f.has("uv")?[{mode:"uv",label:"UV",description:"UV coordinates as surface color"}]:[],...f.has("vertex-colors")?[{mode:"vertex-colors",label:"Vertex colors",description:"Authored color attributes without textures"}]:[]],z=async e=>{if(p){h(null);try{await ye().saveThumbnailFraming(p,e?void 0:t.cameraPose())}catch(n){h(n instanceof Error?n.message:String(n))}}},I=async()=>{h(null);try{const e={background:a.background},n=p?.toLowerCase().endsWith(".spz")?await Ce(p,e):ke(t.root,e);C(`data:image/png;base64,${n.contactSheet.base64}`)}catch(e){h(e instanceof Error?e.message:String(e))}},T=t.selection().length>0?"Frame selection":"Frame all";return s.jsxs("div",{className:"volter-model-document-header",children:[s.jsxs(B,{compact:!0,label:"Viewport view controls",className:"volter-model-viewport-toolbar volter-model-viewport-toolbar--view",children:[s.jsx(b,{text:T,children:s.jsx(v,{"aria-label":T,onClick:()=>t.frame(),children:s.jsx(l,{icon:ne,size:"md"})})}),s.jsxs("div",{className:"volter-viewport-popover-anchor",children:[s.jsx(b,{text:"Camera orientation and projection",children:s.jsxs(F,{ref:V,type:"button",size:"compact",variant:"secondary","aria-label":`Camera view: ${a.projection}`,"aria-haspopup":"menu","aria-expanded":E,onClick:()=>g(e=>!e),className:"volter-model-toolbar-labelled-control",children:[s.jsx(l,{icon:le,size:"sm"}),s.jsx("span",{children:a.projection==="perspective"?"Perspective":"Orthographic"}),s.jsx(l,{icon:ce,size:"xs"})]})}),E&&s.jsxs(A,{anchorRef:V,align:"start",clamp:!0,"aria-label":"Camera view",onDismiss:()=>g(!1),style:{minWidth:210},children:[["front","right","top","isometric"].map(e=>s.jsx(d,{onSelect:()=>{t.setViewPreset(e,"view"),g(!1)},children:e==="isometric"?"Perspective 3/4":`${e[0]?.toUpperCase()}${e.slice(1)} view`},e)),s.jsx(H,{}),["perspective","orthographic"].map(e=>s.jsxs(d,{role:"menuitemradio","aria-checked":a.projection===e,onSelect:()=>{t.setProjection(e),g(!1)},children:[s.jsx("span",{className:"volter-menu-check",children:a.projection===e&&s.jsx(l,{icon:de,size:"xs"})}),e==="perspective"?"Perspective":"Orthographic"]},e))]})]}),f.has("skeleton")?s.jsx(b,{text:`Rig: ${a.skeleton?"Visible":"Hidden"}`,children:s.jsx(v,{"aria-label":"Toggle rig overlay","aria-pressed":a.skeleton,onClick:()=>t.setSkeleton(!a.skeleton),children:s.jsx(l,{icon:pe,size:"md"})})}):null,me("object3d-document").map(({id:e,Component:n})=>s.jsx(n,{documentId:i},e))]}),s.jsxs(B,{compact:!0,label:"Viewport preview controls",className:"volter-model-viewport-toolbar volter-model-viewport-toolbar--preview",children:[s.jsxs(De,{mode:a.mode,onChange:e=>t.setMode(e),choices:Z,segments:j?ze(w):Oe,children:[$().length>0?s.jsxs("label",{children:[s.jsx("span",{children:"View"}),s.jsxs(W,{"aria-label":"View preset",value:"",onChange:e=>{e.target.value&&ue(i,e.target.value)},children:[s.jsx("option",{value:"",children:"Choose…"}),$().map(e=>s.jsx("option",{value:e.id,children:e.title},e.id))]})]}):null,s.jsxs("label",{children:[s.jsx("span",{children:"Lighting"}),s.jsxs(W,{"aria-label":"Lighting",value:m.source==="studio"?`studio:${m.studioPreset}`:m.source,onChange:e=>{const n=e.target.value;U(i,O(n.startsWith("studio:")?{source:"studio",studioPreset:n.slice(7)}:{source:n}))},children:[be().filter(e=>e.id!==S.id||Y).map(e=>s.jsx("option",{value:`studio:${e.id}`,children:e.title},e.id)),s.jsx("option",{value:"scene",children:"Scene lights"})]})]}),s.jsxs("label",{children:[s.jsx("span",{children:"Exposure"}),s.jsx(he,{"aria-label":"Preview exposure",type:"range",min:"0.2",max:"2",step:"0.1",value:m.tone.exposure,onChange:e=>U(i,O({tone:{exposure:Number(e.target.value)}}))}),s.jsx(K,{as:"span",variant:"caption",children:m.tone.exposure.toFixed(1)})]})]}),o===null?null:s.jsx(b,{text:`Gizmos: ${o.showGizmos?"On":"Off"}`,children:s.jsx(v,{"aria-label":"Toggle gizmos","aria-pressed":o.showGizmos,size:"comfortable",onClick:()=>o.toggleGizmos(),children:s.jsx(l,{icon:ge.viewport.gizmos,size:"md"})})}),s.jsx(Te,{glyph:s.jsx(Re,{}),...o===null?{}:{master:{enabled:o.showHelpers,onToggle:()=>o.toggleHelpers()}},choices:[{id:"grid",label:"Grid",enabled:_(i),onToggle:()=>ve(i,!_(i))},{id:"bounds",label:"Bounds",enabled:a.bounds,onToggle:()=>t.setBounds(!a.bounds)},...o===null?[]:Ne.filter(e=>X.includes(e.key)).map(e=>({id:e.key,label:e.label,enabled:o.helperVisibility[e.key],onToggle:()=>o.toggleHelperType(e.key)}))]}),s.jsxs("div",{className:"volter-viewport-popover-anchor",children:[s.jsx(b,{text:"Asset preview actions",children:s.jsx(v,{ref:M,"aria-label":"Asset preview actions","aria-haspopup":"menu","aria-expanded":P,onClick:()=>c(e=>!e),children:s.jsx(l,{icon:xe,size:"md"})})}),P&&s.jsxs(A,{anchorRef:M,clamp:!0,"aria-label":"Asset preview actions",onDismiss:()=>c(!1),style:{minWidth:210},children:[s.jsxs(d,{onSelect:()=>{c(!1),I()},children:[s.jsx(l,{icon:je,size:"sm"}),"Capture preview"]}),p?s.jsxs(s.Fragment,{children:[s.jsx(d,{onSelect:()=>{c(!1),z(!1)},children:"Save thumbnail framing"}),s.jsx(d,{onSelect:()=>{c(!1),z(!0)},children:"Reset thumbnail framing"})]}):null,s.jsx(H,{}),s.jsxs(d,{onSelect:()=>{t.resetPresentation(),c(!1)},children:[s.jsx(l,{icon:we,size:"sm"}),"Reset viewport settings"]})]})]})]}),y?s.jsxs(fe,{className:"volter-model-capture-preview",children:[s.jsxs("div",{children:[s.jsx(K,{as:"strong",variant:"label",children:"Deterministic views"}),s.jsx(F,{type:"button",variant:"ghost",onClick:()=>C(null),children:"Close"})]}),s.jsx("img",{src:y,alt:"Front, right, top, and three-quarter model preview"})]}):null,k?s.jsx(Se,{className:"volter-model-toolbar-error",tone:"error",children:k}):null]})}export{ms as Object3DDocumentToolbar};
1
+ import{a as s}from"./jsx-runtime-DPjLkJKQ.js";import{bl as ee,bm as R,bn as se,bo as N,bp as te,bq as ie,br as L,bs as G,E as oe,F as re,bt as S,bu as ae,bv as B,bw as b,aM as v,a7 as l,bx as ne,a6 as F,by as le,bz as ce,bA as A,bB as d,bC as H,bD as de,bE as pe,bF as me,bG as $,bH as W,bI as ue,bJ as be,bK as U,aN as he,aL as K,a8 as ge,bL as ve,G as _,bM as xe,bN as je,bO as we,bP as fe,bQ as Se,bR as ye}from"./index-BfqJPhFO.js";import{r}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{c as Ce,a as ke}from"./asset-preview-t-7PYPjJ.js";import{s as Ee}from"./model-inspection-PgxfYOnI.js";import{s as Pe,o as q,a as Ve}from"./object3d-document-session-registry-CLizyhis.js";import{v as Me}from"./viewport-door-BBtilr3V.js";import{v as J,V as De,a as Oe,p as ze,b as Te,c as Re}from"./ViewportShadingMenu-D_-wHbzW.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";import"./editor-layers-k0AjpomL.js";import"./workspace-arrangement-BXM0R-Uu.js";import"./renderer-ownership-BovSEcLv.js";import"./hierarchy-marks-C2temlO0.js";import"./studio-environment-BNM-AjAn.js";import"./user-data-CTT8ZvVB.js";import"./KTX2Loader-CaqVE6nY.js";import"./three.module-BLhyNg0e.js";import"./three.core-3arARmh6.js";import"./GLTFLoader-KeoruJgS.js";import"./BufferGeometryUtils-B22h7jo4.js";import"./environment-Dg-YaLsA.js";import"./RoomEnvironment-BkknvS_I.js";import"./EXRLoader-CITMBvGd.js";import"./HDRLoader-BTGuGhVo.js";import"./bitmap-label-Ct4k6ehY.js";const Q=()=>()=>{},x=()=>0,Ne=[{key:"skeletons",label:"Bones"},{key:"weights",label:"Weights"},{key:"cursor",label:"3D Cursor"},{key:"cameras",label:"Cameras"},{key:"lights",label:"Lights"},{key:"empties",label:"Empties"}];function ms({documentId:i,assetPath:p}){r.useSyncExternalStore(Pe,q,q);const t=Ve(i);r.useSyncExternalStore(ee,R,R),r.useSyncExternalStore(t?.subscribe??Q,t?.getSnapshot??x,t?.getSnapshot??x),r.useSyncExternalStore(se,N,N);const o=te(i);r.useSyncExternalStore(o?.subscribe??Q,o?.getSnapshot??x,o?.getSnapshot??x);const X=Me(i),[y,C]=r.useState(null),[k,h]=r.useState(null),[E,g]=r.useState(!1),[P,c]=r.useState(!1),V=r.useRef(null),M=r.useRef(null);if(r.useSyncExternalStore(ie,L,L),!t)return null;const a=t.presentation(),{lighting:m}=G(i),u=oe(i),D=u?re(u.stageKind):null,Y=u?.documentLayer?.all?.lighting?.studioPreset===S.id||D?.all?.lighting?.studioPreset===S.id,j=u?ae(u.stageKind):!1,O=e=>j?{modes:{[G(i).drawMode]:{lighting:e}}}:{all:{lighting:e}},w=new Set(Object.entries(D?.modes??{}).filter(([,e])=>e?.lighting!==void 0).map(([e])=>e)),f=new Set(Ee(t.root).filter(e=>e.available).map(e=>e.mode)),Z=[...j?J.map(e=>e.mode==="solid"?{...e,label:"Solid",description:"Materials' colours under the studio lights"}:e.mode==="clay"?{...e,label:"Clay"}:e):J,...w.has("preview")?[{mode:"preview",label:"Material Preview",description:"Materials lit by a preview environment"}]:[],...w.has("rendered")?[{mode:"rendered",label:"Rendered",description:"Lit as a render is, by the scene's own lights"}]:[],...f.has("uv")?[{mode:"uv",label:"UV",description:"UV coordinates as surface color"}]:[],...f.has("vertex-colors")?[{mode:"vertex-colors",label:"Vertex colors",description:"Authored color attributes without textures"}]:[]],z=async e=>{if(p){h(null);try{await ye().saveThumbnailFraming(p,e?void 0:t.cameraPose())}catch(n){h(n instanceof Error?n.message:String(n))}}},I=async()=>{h(null);try{const e={background:a.background},n=p?.toLowerCase().endsWith(".spz")?await Ce(p,e):ke(t.root,e);C(`data:image/png;base64,${n.contactSheet.base64}`)}catch(e){h(e instanceof Error?e.message:String(e))}},T=t.selection().length>0?"Frame selection":"Frame all";return s.jsxs("div",{className:"volter-model-document-header",children:[s.jsxs(B,{compact:!0,label:"Viewport view controls",className:"volter-model-viewport-toolbar volter-model-viewport-toolbar--view",children:[s.jsx(b,{text:T,children:s.jsx(v,{"aria-label":T,onClick:()=>t.frame(),children:s.jsx(l,{icon:ne,size:"md"})})}),s.jsxs("div",{className:"volter-viewport-popover-anchor",children:[s.jsx(b,{text:"Camera orientation and projection",children:s.jsxs(F,{ref:V,type:"button",size:"compact",variant:"secondary","aria-label":`Camera view: ${a.projection}`,"aria-haspopup":"menu","aria-expanded":E,onClick:()=>g(e=>!e),className:"volter-model-toolbar-labelled-control",children:[s.jsx(l,{icon:le,size:"sm"}),s.jsx("span",{children:a.projection==="perspective"?"Perspective":"Orthographic"}),s.jsx(l,{icon:ce,size:"xs"})]})}),E&&s.jsxs(A,{anchorRef:V,align:"start",clamp:!0,"aria-label":"Camera view",onDismiss:()=>g(!1),style:{minWidth:210},children:[["front","right","top","isometric"].map(e=>s.jsx(d,{onSelect:()=>{t.setViewPreset(e,"view"),g(!1)},children:e==="isometric"?"Perspective 3/4":`${e[0]?.toUpperCase()}${e.slice(1)} view`},e)),s.jsx(H,{}),["perspective","orthographic"].map(e=>s.jsxs(d,{role:"menuitemradio","aria-checked":a.projection===e,onSelect:()=>{t.setProjection(e),g(!1)},children:[s.jsx("span",{className:"volter-menu-check",children:a.projection===e&&s.jsx(l,{icon:de,size:"xs"})}),e==="perspective"?"Perspective":"Orthographic"]},e))]})]}),f.has("skeleton")?s.jsx(b,{text:`Rig: ${a.skeleton?"Visible":"Hidden"}`,children:s.jsx(v,{"aria-label":"Toggle rig overlay","aria-pressed":a.skeleton,onClick:()=>t.setSkeleton(!a.skeleton),children:s.jsx(l,{icon:pe,size:"md"})})}):null,me("object3d-document").map(({id:e,Component:n})=>s.jsx(n,{documentId:i},e))]}),s.jsxs(B,{compact:!0,label:"Viewport preview controls",className:"volter-model-viewport-toolbar volter-model-viewport-toolbar--preview",children:[s.jsxs(De,{mode:a.mode,onChange:e=>t.setMode(e),choices:Z,segments:j?ze(w):Oe,children:[$().length>0?s.jsxs("label",{children:[s.jsx("span",{children:"View"}),s.jsxs(W,{"aria-label":"View preset",value:"",onChange:e=>{e.target.value&&ue(i,e.target.value)},children:[s.jsx("option",{value:"",children:"Choose…"}),$().map(e=>s.jsx("option",{value:e.id,children:e.title},e.id))]})]}):null,s.jsxs("label",{children:[s.jsx("span",{children:"Lighting"}),s.jsxs(W,{"aria-label":"Lighting",value:m.source==="studio"?`studio:${m.studioPreset}`:m.source,onChange:e=>{const n=e.target.value;U(i,O(n.startsWith("studio:")?{source:"studio",studioPreset:n.slice(7)}:{source:n}))},children:[be().filter(e=>e.id!==S.id||Y).map(e=>s.jsx("option",{value:`studio:${e.id}`,children:e.title},e.id)),s.jsx("option",{value:"scene",children:"Scene lights"})]})]}),s.jsxs("label",{children:[s.jsx("span",{children:"Exposure"}),s.jsx(he,{"aria-label":"Preview exposure",type:"range",min:"0.2",max:"2",step:"0.1",value:m.tone.exposure,onChange:e=>U(i,O({tone:{exposure:Number(e.target.value)}}))}),s.jsx(K,{as:"span",variant:"caption",children:m.tone.exposure.toFixed(1)})]})]}),o===null?null:s.jsx(b,{text:`Gizmos: ${o.showGizmos?"On":"Off"}`,children:s.jsx(v,{"aria-label":"Toggle gizmos","aria-pressed":o.showGizmos,size:"comfortable",onClick:()=>o.toggleGizmos(),children:s.jsx(l,{icon:ge.viewport.gizmos,size:"md"})})}),s.jsx(Te,{glyph:s.jsx(Re,{}),...o===null?{}:{master:{enabled:o.showHelpers,onToggle:()=>o.toggleHelpers()}},choices:[{id:"grid",label:"Grid",enabled:_(i),onToggle:()=>ve(i,!_(i))},{id:"bounds",label:"Bounds",enabled:a.bounds,onToggle:()=>t.setBounds(!a.bounds)},...o===null?[]:Ne.filter(e=>X.includes(e.key)).map(e=>({id:e.key,label:e.label,enabled:o.helperVisibility[e.key],onToggle:()=>o.toggleHelperType(e.key)}))]}),s.jsxs("div",{className:"volter-viewport-popover-anchor",children:[s.jsx(b,{text:"Asset preview actions",children:s.jsx(v,{ref:M,"aria-label":"Asset preview actions","aria-haspopup":"menu","aria-expanded":P,onClick:()=>c(e=>!e),children:s.jsx(l,{icon:xe,size:"md"})})}),P&&s.jsxs(A,{anchorRef:M,clamp:!0,"aria-label":"Asset preview actions",onDismiss:()=>c(!1),style:{minWidth:210},children:[s.jsxs(d,{onSelect:()=>{c(!1),I()},children:[s.jsx(l,{icon:je,size:"sm"}),"Capture preview"]}),p?s.jsxs(s.Fragment,{children:[s.jsx(d,{onSelect:()=>{c(!1),z(!1)},children:"Save thumbnail framing"}),s.jsx(d,{onSelect:()=>{c(!1),z(!0)},children:"Reset thumbnail framing"})]}):null,s.jsx(H,{}),s.jsxs(d,{onSelect:()=>{t.resetPresentation(),c(!1)},children:[s.jsx(l,{icon:we,size:"sm"}),"Reset viewport settings"]})]})]})]}),y?s.jsxs(fe,{className:"volter-model-capture-preview",children:[s.jsxs("div",{children:[s.jsx(K,{as:"strong",variant:"label",children:"Deterministic views"}),s.jsx(F,{type:"button",variant:"ghost",onClick:()=>C(null),children:"Close"})]}),s.jsx("img",{src:y,alt:"Front, right, top, and three-quarter model preview"})]}):null,k?s.jsx(Se,{className:"volter-model-toolbar-error",tone:"error",children:k}):null]})}export{ms as Object3DDocumentToolbar};
@@ -0,0 +1,2 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/StageHost-CK78ezTC.js","assets/index-BfqJPhFO.js","assets/index-nmcBqr7Y.js","assets/_commonjsHelpers-D6-XlEtG.js","assets/index-D_NuPfjr.js","assets/jsx-runtime-DPjLkJKQ.js","assets/index-CtzuWnCS.js","assets/index-CinJrH5C.js","assets/index-FUuS4qwW.js","assets/client-DNXj_opT.js","assets/index-CPiRKiDC.css","assets/three-state-cYB28OIz.js","assets/editor-shell-store-B3c29A3l.js","assets/output-pass-HurwNl0G.js","assets/three.module-BLhyNg0e.js","assets/three.core-3arARmh6.js","assets/Pass-D1MRT672.js","assets/editor-layers-k0AjpomL.js","assets/workspace-arrangement-BXM0R-Uu.js","assets/user-data-CTT8ZvVB.js","assets/entity-object-BOLh6DVA.js","assets/three-contract-Dkt6PmWY.js","assets/standard-viewport-dressing-BhTPIZTQ.js","assets/content-bounds-BRS42hfD.js","assets/hierarchy-marks-C2temlO0.js","assets/environment-Dg-YaLsA.js","assets/RoomEnvironment-BkknvS_I.js","assets/EXRLoader-CITMBvGd.js","assets/HDRLoader-BTGuGhVo.js","assets/preview-renderer-BrYNFV1p.js","assets/renderer-ownership-BovSEcLv.js","assets/live-mixers-B-bwLZ7c.js","assets/live-gesture-lock-DJbrjOqf.js","assets/three-integration-CaC8ivB7.js","assets/host-hierarchy-objects-BV3WqU2w.js","assets/layered-pick-Dito5b_J.js","assets/root-stacking-BEd9ZvxC.js","assets/model-thumbnail-Dnv7DCt7.js","assets/studio-environment-BNM-AjAn.js","assets/KTX2Loader-CaqVE6nY.js","assets/GLTFLoader-KeoruJgS.js","assets/BufferGeometryUtils-B22h7jo4.js","assets/object3d-document-session-registry-CLizyhis.js","assets/component-instance-root-QYCCyhxU.js","assets/viewport-door-BBtilr3V.js","assets/asset-preview-t-7PYPjJ.js","assets/bitmap-label-Ct4k6ehY.js","assets/model-inspection-PgxfYOnI.js","assets/three-viewport-presentation-DoViPvQB.js","assets/clip-planes-CnAI6DZn.js","assets/three-BvhtsSAr.js","assets/viewport-editor-controls-BYaAZ_Ku.js","assets/OrbitControls-B13MKuwC.js","assets/LineSegments2-DN9pUfWA.js","assets/three.quarks.esm-C_HmSKXo.js","assets/scene-framing-Dm-rCn3G.js","assets/source-object3d-authoring-adapter-ehtz9UK_.js","assets/three-projection-core-C2Zj6hTy.js","assets/editor-presentation-activity-CqJH4G9t.js","assets/transport-strip-DPoEy7PU.js","assets/viewport-surface-status-BiDiAZ6z.js"])))=>i.map(i=>d[i]);
2
+ import{ak as r,_ as a}from"./index-BfqJPhFO.js";import{a as o}from"./jsx-runtime-DPjLkJKQ.js";import{r as n}from"./index-nmcBqr7Y.js";import{V as c,O as u}from"./viewport-surface-status-BiDiAZ6z.js";const s=n.lazy(async()=>({default:(await a(()=>import("./StageHost-CK78ezTC.js").then(e=>e.S),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60]))).Object3DDocumentViewport}));function l(t){return i(t.documentId,t.chromeless),o.jsx(n.Suspense,{fallback:o.jsx(c,{testId:"object3d-document-loading",children:u}),children:o.jsx(s,{...t})})}function i(t,e=!1){n.useEffect(()=>{if(!e)return r(t)},[t,e])}export{l as O};
@@ -1,2 +1,2 @@
1
1
  const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/spark.module-Byplgb8G.js","assets/three.module-BLhyNg0e.js","assets/three.core-3arARmh6.js","assets/Pass-D1MRT672.js"])))=>i.map(i=>d[i]);
2
- import{gg as te,al as A,_ as re}from"./index-ClgrFOcX.js";import{a as E}from"./jsx-runtime-DPjLkJKQ.js";import{r as C}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{W as ie}from"./three.module-BLhyNg0e.js";import{OrbitControls as oe}from"./OrbitControls-B13MKuwC.js";import{g as ne,h as se,d as J,m as ae,i as le}from"./asset-preview-BUpxsHNd.js";import{s as ce,i as F}from"./editor-presentation-activity-CqJH4G9t.js";import{m as me,l as pe,c as de,d as ue}from"./model-thumbnail-CF3qGQWb.js";import{h as fe}from"./user-data-DL6HsBPf.js";import{el as we,d9 as ge,ej as he,A as be,bj as ve,aE as xe,bg as ye,Z as Ae,eu as Ee,fo as Ce,n as Me}from"./three.core-3arARmh6.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";import"./editor-layers-DwaX5UFy.js";import"./workspace-arrangement-86_8Kk5K.js";import"./renderer-ownership-BovSEcLv.js";import"./hierarchy-marks-DeG4E4Ke.js";import"./studio-environment-Bw9zMFE8.js";import"./KTX2Loader-CaqVE6nY.js";import"./GLTFLoader-KeoruJgS.js";import"./BufferGeometryUtils-B22h7jo4.js";import"./environment-Dg-YaLsA.js";import"./RoomEnvironment-BkknvS_I.js";import"./EXRLoader-CITMBvGd.js";import"./HDRLoader-BTGuGhVo.js";import"./bitmap-label-Ct4k6ehY.js";const v={webglContext:0,animationFrame:0,resizeObserver:0,objectUrl:0},K={...v};function _(r){v[r]++,K[r]=Math.max(K[r],v[r]);let s=!1;return()=>{s||(s=!0,v[r]=Math.max(0,v[r]-1))}}function je(r){const s=r.animations[0];if(!s)return null;const d=new Me(r),g=d.clipAction(s).play();return g.paused=!0,d.update(0),d}let Se=0;function ot({assetPath:r,materialPath:s,displayName:d="Object3D preview",active:g=!0,sourceFactory:M,showSkeleton:D=!1,background:z,cameraDirection:j,showGrid:H=!0,useDefaultLighting:L=!0,exposure:T=1,setupPreview:k}){const W=C.useRef(null),[S,q]=C.useState(null),[$,R]=C.useState(!0);return C.useEffect(()=>{if(!g)return;const n=W.current;if(!n)return;const x=new AbortController,N=te({id:`preview-card:${++Se}`,label:`${d} (preview card)`,contentClock:()=>0}),t=new ie({antialias:!0,alpha:!0}),Q=_("webglContext"),X=_("animationFrame"),Y=_("resizeObserver"),a=new we,u=new ge(35,1,.01,1e3),f=new oe(u,t.domElement),I=new Ae;let U=null,w=null,y=null,c,l=null,h=null;const O=[];let m=0,p=!1;if(q(null),R(!0),t.outputColorSpace=he,t.toneMapping=be,t.toneMappingExposure=T,t.shadowMap.enabled=!0,t.setClearColor(z??2106410,1),t.setPixelRatio(Math.min(window.devicePixelRatio,2)),t.domElement.style.width="100%",t.domElement.style.height="100%",t.domElement.style.display="block",n.appendChild(t.domElement),f.enableDamping=!0,f.dampingFactor=.1,L){a.add(new ve(16777215,3489874,1.8));const e=new xe(16777215,2.2);e.position.set(3,5,4),a.add(e)}if(H){const e=new ye(10,20,5333103,3423044);a.add(e),O.push(e)}const V=(e,i)=>{if(!h)return;const o=j?new Ce(...j):void 0,b=le(h,Math.max(e,1)/Math.max(i,1),o);u.copy(b,!1),f.target.copy(h.center),f.update()},G=async e=>{if(p)return;a.add(e);let i=!1;if(e.traverse(o=>{fe(o,"gaussianSplat")&&(i=!0)}),i){const{SparkRenderer:o}=await re(async()=>{const{SparkRenderer:b}=await import("./spark.module-Byplgb8G.js");return{SparkRenderer:b}},__vite__mapDeps([0,1,2,3]));if(p)return;l=new o({renderer:t,enableLod:!1})}if(h=ae(e,"perspective"),V(n.clientWidth,n.clientHeight),U=je(e),D){const o=new Ee(e);o.name="__compact_preview_skeleton",a.add(o),O.push(o)}c=k?.({scene:a,camera:u,renderer:t,model:e}),c?.resize?.(Math.max(n.clientWidth,1),Math.max(n.clientHeight,1),t.getPixelRatio()),R(!1)};(async()=>{try{if(M){y=ne(M),await G(y.root);return}if(!r)throw new Error("Compact Object3D preview has no source.");const e=me(r);if(!e)throw new Error(`No native Three.js loader supports ${r}.`);const i=e==="glb"||e==="gltf"||e==="spz"?await se(r,x.signal):await pe({url:r,format:e,...s?{materialUrl:s}:{}});if(w=de(i),x.signal.aborted||p){J(w),w=null;return}await G(w)}catch(e){!x.signal.aborted&&!p&&(q(e instanceof Error?e.message:String(e)),R(!1))}})();const B=()=>{const e=Math.max(n.clientWidth,1),i=Math.max(n.clientHeight,1);t.setSize(e,i,!1),h&&!c?V(e,i):(u.aspect=e/i,u.updateProjectionMatrix()),c?.resize?.(e,i,t.getPixelRatio())},Z=new ResizeObserver(B);Z.observe(n),B();const P=()=>{if(m=0,p||!F())return;const e=Math.min(I.getDelta(),.1);f.update(),l&&a.add(l);try{c?.render?c.render(e):t.render(a,u)}finally{l?.removeFromParent()}m=requestAnimationFrame(P)},ee=ce(()=>{F()?!p&&m===0&&(I.getDelta(),P()):(cancelAnimationFrame(m),m=0)});return F()&&(m=requestAnimationFrame(P)),()=>{p=!0,ee(),N(),x.abort(new Error("Compact Object3D preview closed.")),cancelAnimationFrame(m),Z.disconnect(),U?.stopAllAction(),c?.dispose(),f.dispose(),l&&(l.removeFromParent(),ue(l),l=null),t.dispose(),t.forceContextLoss();for(const e of O){const i=e;i.geometry?.dispose();const o=i.material;if(Array.isArray(o))for(const b of o)b.dispose();else o?.dispose()}y&&y.dispose(),w&&J(w),n.contains(t.domElement)&&n.removeChild(t.domElement),Y(),X(),Q()}},[g,r,z,j,T,s,k,H,D,M,L]),E.jsxs("div",{ref:W,"data-testid":"object3d-compact-preview",role:"region","aria-label":`Interactive 3D preview: ${d}`,"aria-busy":$,style:{width:"100%",height:"100%",minHeight:220,overflow:"hidden",position:"relative",background:A.surface.inset},children:[$&&!S?E.jsx("span",{style:{position:"absolute",padding:10,color:A.content.muted},children:"Loading…"}):null,g?null:E.jsx("span",{style:{position:"absolute",padding:10,color:A.content.muted},children:"Preview suspended while inactive."}),S?E.jsx("div",{role:"alert",style:{position:"absolute",padding:10,color:A.semantic.danger},children:S}):null]})}export{ot as Object3DPreview};
2
+ import{gg as te,al as A,_ as re}from"./index-BfqJPhFO.js";import{a as E}from"./jsx-runtime-DPjLkJKQ.js";import{r as C}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{W as ie}from"./three.module-BLhyNg0e.js";import{OrbitControls as oe}from"./OrbitControls-B13MKuwC.js";import{g as ne,h as se,d as J,m as ae,i as le}from"./asset-preview-t-7PYPjJ.js";import{s as ce,i as F}from"./editor-presentation-activity-CqJH4G9t.js";import{m as me,l as pe,c as de,d as ue}from"./model-thumbnail-Dnv7DCt7.js";import{h as fe}from"./user-data-CTT8ZvVB.js";import{el as we,d9 as ge,ej as he,A as be,bj as ve,aE as xe,bg as ye,Z as Ae,eu as Ee,fo as Ce,n as Me}from"./three.core-3arARmh6.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";import"./editor-layers-k0AjpomL.js";import"./workspace-arrangement-BXM0R-Uu.js";import"./renderer-ownership-BovSEcLv.js";import"./hierarchy-marks-C2temlO0.js";import"./studio-environment-BNM-AjAn.js";import"./KTX2Loader-CaqVE6nY.js";import"./GLTFLoader-KeoruJgS.js";import"./BufferGeometryUtils-B22h7jo4.js";import"./environment-Dg-YaLsA.js";import"./RoomEnvironment-BkknvS_I.js";import"./EXRLoader-CITMBvGd.js";import"./HDRLoader-BTGuGhVo.js";import"./bitmap-label-Ct4k6ehY.js";const v={webglContext:0,animationFrame:0,resizeObserver:0,objectUrl:0},K={...v};function _(r){v[r]++,K[r]=Math.max(K[r],v[r]);let s=!1;return()=>{s||(s=!0,v[r]=Math.max(0,v[r]-1))}}function je(r){const s=r.animations[0];if(!s)return null;const d=new Me(r),g=d.clipAction(s).play();return g.paused=!0,d.update(0),d}let Se=0;function ot({assetPath:r,materialPath:s,displayName:d="Object3D preview",active:g=!0,sourceFactory:M,showSkeleton:D=!1,background:z,cameraDirection:j,showGrid:H=!0,useDefaultLighting:L=!0,exposure:T=1,setupPreview:k}){const W=C.useRef(null),[S,q]=C.useState(null),[$,R]=C.useState(!0);return C.useEffect(()=>{if(!g)return;const n=W.current;if(!n)return;const x=new AbortController,N=te({id:`preview-card:${++Se}`,label:`${d} (preview card)`,contentClock:()=>0}),t=new ie({antialias:!0,alpha:!0}),Q=_("webglContext"),X=_("animationFrame"),Y=_("resizeObserver"),a=new we,u=new ge(35,1,.01,1e3),f=new oe(u,t.domElement),I=new Ae;let U=null,w=null,y=null,c,l=null,h=null;const O=[];let m=0,p=!1;if(q(null),R(!0),t.outputColorSpace=he,t.toneMapping=be,t.toneMappingExposure=T,t.shadowMap.enabled=!0,t.setClearColor(z??2106410,1),t.setPixelRatio(Math.min(window.devicePixelRatio,2)),t.domElement.style.width="100%",t.domElement.style.height="100%",t.domElement.style.display="block",n.appendChild(t.domElement),f.enableDamping=!0,f.dampingFactor=.1,L){a.add(new ve(16777215,3489874,1.8));const e=new xe(16777215,2.2);e.position.set(3,5,4),a.add(e)}if(H){const e=new ye(10,20,5333103,3423044);a.add(e),O.push(e)}const V=(e,i)=>{if(!h)return;const o=j?new Ce(...j):void 0,b=le(h,Math.max(e,1)/Math.max(i,1),o);u.copy(b,!1),f.target.copy(h.center),f.update()},G=async e=>{if(p)return;a.add(e);let i=!1;if(e.traverse(o=>{fe(o,"gaussianSplat")&&(i=!0)}),i){const{SparkRenderer:o}=await re(async()=>{const{SparkRenderer:b}=await import("./spark.module-Byplgb8G.js");return{SparkRenderer:b}},__vite__mapDeps([0,1,2,3]));if(p)return;l=new o({renderer:t,enableLod:!1})}if(h=ae(e,"perspective"),V(n.clientWidth,n.clientHeight),U=je(e),D){const o=new Ee(e);o.name="__compact_preview_skeleton",a.add(o),O.push(o)}c=k?.({scene:a,camera:u,renderer:t,model:e}),c?.resize?.(Math.max(n.clientWidth,1),Math.max(n.clientHeight,1),t.getPixelRatio()),R(!1)};(async()=>{try{if(M){y=ne(M),await G(y.root);return}if(!r)throw new Error("Compact Object3D preview has no source.");const e=me(r);if(!e)throw new Error(`No native Three.js loader supports ${r}.`);const i=e==="glb"||e==="gltf"||e==="spz"?await se(r,x.signal):await pe({url:r,format:e,...s?{materialUrl:s}:{}});if(w=de(i),x.signal.aborted||p){J(w),w=null;return}await G(w)}catch(e){!x.signal.aborted&&!p&&(q(e instanceof Error?e.message:String(e)),R(!1))}})();const B=()=>{const e=Math.max(n.clientWidth,1),i=Math.max(n.clientHeight,1);t.setSize(e,i,!1),h&&!c?V(e,i):(u.aspect=e/i,u.updateProjectionMatrix()),c?.resize?.(e,i,t.getPixelRatio())},Z=new ResizeObserver(B);Z.observe(n),B();const P=()=>{if(m=0,p||!F())return;const e=Math.min(I.getDelta(),.1);f.update(),l&&a.add(l);try{c?.render?c.render(e):t.render(a,u)}finally{l?.removeFromParent()}m=requestAnimationFrame(P)},ee=ce(()=>{F()?!p&&m===0&&(I.getDelta(),P()):(cancelAnimationFrame(m),m=0)});return F()&&(m=requestAnimationFrame(P)),()=>{p=!0,ee(),N(),x.abort(new Error("Compact Object3D preview closed.")),cancelAnimationFrame(m),Z.disconnect(),U?.stopAllAction(),c?.dispose(),f.dispose(),l&&(l.removeFromParent(),ue(l),l=null),t.dispose(),t.forceContextLoss();for(const e of O){const i=e;i.geometry?.dispose();const o=i.material;if(Array.isArray(o))for(const b of o)b.dispose();else o?.dispose()}y&&y.dispose(),w&&J(w),n.contains(t.domElement)&&n.removeChild(t.domElement),Y(),X(),Q()}},[g,r,z,j,T,s,k,H,D,M,L]),E.jsxs("div",{ref:W,"data-testid":"object3d-compact-preview",role:"region","aria-label":`Interactive 3D preview: ${d}`,"aria-busy":$,style:{width:"100%",height:"100%",minHeight:220,overflow:"hidden",position:"relative",background:A.surface.inset},children:[$&&!S?E.jsx("span",{style:{position:"absolute",padding:10,color:A.content.muted},children:"Loading…"}):null,g?null:E.jsx("span",{style:{position:"absolute",padding:10,color:A.content.muted},children:"Preview suspended while inactive."}),S?E.jsx("div",{role:"alert",style:{position:"absolute",padding:10,color:A.semantic.danger},children:S}):null]})}export{ot as Object3DPreview};
@@ -1 +1 @@
1
- import{a as t}from"./jsx-runtime-DPjLkJKQ.js";import{cv as U,cb as L,cg as R,cw as W,dv as M,al as i,a7 as b,fx as w,b6 as N,aU as C,bH as J,a6 as V,bD as _,fy as G}from"./index-ClgrFOcX.js";import{r}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{d as K}from"./asset-editor-persistence-DWp0E8cc.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 S=new Map,q=new Set;function I(){for(const e of q)e()}function Q(e,l){const n=S.get(e);if(n?.status==="running")return n;const f={id:e,label:l,stage:"fetch",loaded:0,total:0,status:"running",controller:new AbortController};return S.set(e,f),I(),f}function y(e,l){const n=S.get(e);n&&(Object.assign(n,l),I())}const X={width:"100%"};function Y(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}function ce({online:e,mode:l="full",showPreview:n=!1,onResolved:f}){const[h,z]=r.useState([]),[o,A]=r.useState(null),[$,v]=r.useState(!0),[B,D]=r.useState(null),[m,F]=r.useState(null),[O,p]=r.useState(!1),[H,x]=r.useState(!1),[j,E]=r.useState(!1),[c,g]=r.useState("idle");r.useEffect(()=>{if(l==="preview"){v(!1);return}let s=!1;return v(!0),D(null),U(e.source,e.id).then(a=>{s||(z(a),a.length>0&&A(a[0]))}).catch(a=>{s||(z([]),D(a instanceof L?R(a.code):a instanceof Error?a.message:"Asset delivery metadata is unavailable while offline."))}).finally(()=>{s||v(!1)}),()=>{s=!0}},[l,e.source,e.id]);const P=e.source==="local"&&(e.type==="model"||e.type==="animation"||e.type==="source");r.useEffect(()=>{if(l==="inspector"&&!n){p(!1);return}let s=!1;if(F(null),x(!1),E(!1),!P){p(!1);return}return p(!0),W(e.source,e.id).then(a=>{s||(F(a),x(!a))}).catch(()=>{s||x(!0)}).finally(()=>{s||p(!1)}),()=>{s=!0}},[l,e.id,e.source,n,P]);const T=r.useCallback(async()=>{if(!o)return;const s=`single:${e.source}:${e.id}`,a=Q(s,e.name);y(s,{stage:"fetch",loaded:0,total:o.sizeBytes??0,status:"running"}),g("downloading");try{const d={source:e.source,id:e.id,name:e.name,url:o.url,format:o.format,jobId:s,signal:a.controller.signal};o.includes&&(d.includes=o.includes);const u=await K(d);u.ok&&u.path?(y(s,{stage:"commit",loaded:o.sizeBytes??1,total:o.sizeBytes??1,status:u.alreadyExists?"skipped":"imported",message:u.path}),g("done"),M(`${e.name} added to Content — drag it from there into the viewport to place it.`),f?.(`/${u.path}`)):(y(s,{status:"failed",message:u.error??"The import was rejected."}),g("error"))}catch(d){y(s,{status:a.controller.signal.aborted?"cancelled":"failed",message:d instanceof Error?d.message:String(d)}),g("error")}},[e,o,f]),k=t.jsx("img",{src:j?"/__editor/asset-library/local-placeholder.svg":e.thumbnailUrl,alt:j?`${e.name} preview unavailable`:e.name,onError:()=>E(!0),style:{maxWidth:"100%",maxHeight:"100%",objectFit:"contain"}});return t.jsxs("div",{style:{padding:8,display:"flex",flexDirection:"column",gap:8},children:[l!=="preview"&&t.jsx("div",{style:{fontWeight:600,fontSize:12,color:i.content.primary,wordBreak:"break-all"},children:e.name}),(l!=="inspector"||n)&&t.jsxs(t.Fragment,{children:[t.jsx("div",{style:{width:"100%",height:"100%",minHeight:l==="inspector"?160:240,background:i.surface.shell,borderRadius:i.shape.small,overflow:"hidden",display:"flex",alignItems:"center",justifyContent:"center"},children:O?t.jsxs("div",{style:{color:i.content.muted,fontSize:11},children:[t.jsx(b,{icon:w,spin:!0,style:{marginRight:5}}),"Loading Asset Editor preview…"]}):m?t.jsx(r.Suspense,{fallback:t.jsx("span",{style:{color:i.content.muted},children:"Loading preview…"}),children:t.jsx(N,{route:"model-preview",documentId:"",assetPath:m.path,...m.materialPath?{materialPath:m.materialPath}:{},displayName:e.name,active:!0,whenUnregistered:k})}):k}),j&&t.jsx("div",{role:"status",style:{color:i.content.dim,fontSize:10},children:"The catalog preview could not be loaded; showing the typed fallback."}),H&&t.jsx("div",{style:{color:i.content.dim,fontSize:10},children:"Interactive preview is unavailable for this variant; showing its catalog thumbnail."})]}),l!=="preview"&&t.jsxs(t.Fragment,{children:[t.jsx(C,{label:"Info",children:t.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:4},children:[t.jsxs("div",{children:[t.jsx("div",{style:{fontSize:11,color:i.content.dim,marginBottom:2},children:"Source"}),t.jsx("div",{style:{fontSize:11,color:i.content.primary},children:e.source==="polyhaven"?"Poly Haven":e.source==="ambientcg"?"ambientCG":"Full Catalog"})]}),t.jsxs("div",{children:[t.jsx("div",{style:{fontSize:11,color:i.content.dim,marginBottom:2},children:"Type"}),t.jsx("div",{style:{fontSize:11,color:i.content.primary},children:e.type})]}),e.tags.length>0&&t.jsxs("div",{children:[t.jsx("div",{style:{fontSize:11,color:i.content.dim,marginBottom:2},children:"Tags"}),t.jsx("div",{style:{display:"flex",flexWrap:"wrap",gap:3},children:e.tags.slice(0,12).map(s=>t.jsx("span",{style:{fontSize:10,padding:"1px 5px",background:i.surface.raised,borderRadius:i.shape.small,color:i.content.muted},children:s},s))})]}),e.author&&t.jsxs("div",{children:[t.jsx("div",{style:{fontSize:11,color:i.content.dim,marginBottom:2},children:"Author"}),t.jsx("div",{style:{fontSize:11,color:i.content.primary},children:e.author})]})]})}),t.jsx(C,{label:"Add to Project",children:t.jsx("div",{style:{display:"flex",flexDirection:"column",gap:6},children:$?t.jsxs("div",{style:{fontSize:11,color:i.content.dim},children:[t.jsx(b,{icon:w,spin:!0,style:{marginRight:4}}),"Loading options..."]}):B?t.jsxs("div",{role:"alert",style:{fontSize:11,color:i.content.muted},children:["Delivery unavailable: ",B]}):h.length>0?t.jsxs(t.Fragment,{children:[t.jsx(J,{"aria-label":"Asset delivery",value:o?h.indexOf(o):0,onChange:s=>A(h[Number(s.target.value)]??null),style:X,children:h.map((s,a)=>t.jsxs("option",{value:a,children:[s.label,s.sizeBytes?` (${Y(s.sizeBytes)})`:""]},a))}),t.jsxs(V,{type:"button",variant:c==="done"?"success":"primary",size:"comfortable",onClick:T,disabled:c==="downloading",style:{width:"100%"},children:[t.jsx(b,{icon:c==="done"?_:c==="downloading"?w:G,spin:c==="downloading",style:{fontSize:10}}),c==="done"?"Downloaded":c==="downloading"?"Downloading...":c==="error"?"Retry":"Add to Project"]})]}):t.jsx("div",{role:"status",style:{fontSize:11,color:i.content.dim},children:e.source==="local"?"No healthy SSD or cloud delivery is available for this asset.":"This provider has no compatible remote delivery for the selected asset."})})}),t.jsxs("div",{style:{fontSize:10,color:i.content.dim,padding:"4px 0"},children:["License: ",e.license??"CC0 (Public Domain)"]})]})]})}export{ce as OnlineAssetDetail};
1
+ import{a as t}from"./jsx-runtime-DPjLkJKQ.js";import{cv as U,cb as L,cg as R,cw as W,dv as M,al as i,a7 as b,fx as w,b6 as N,aU as C,bH as J,a6 as V,bD as _,fy as G}from"./index-BfqJPhFO.js";import{r}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{d as K}from"./asset-editor-persistence-BF2Eqt0F.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 S=new Map,q=new Set;function I(){for(const e of q)e()}function Q(e,l){const n=S.get(e);if(n?.status==="running")return n;const f={id:e,label:l,stage:"fetch",loaded:0,total:0,status:"running",controller:new AbortController};return S.set(e,f),I(),f}function y(e,l){const n=S.get(e);n&&(Object.assign(n,l),I())}const X={width:"100%"};function Y(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}function ce({online:e,mode:l="full",showPreview:n=!1,onResolved:f}){const[h,z]=r.useState([]),[o,A]=r.useState(null),[$,v]=r.useState(!0),[B,D]=r.useState(null),[m,F]=r.useState(null),[O,p]=r.useState(!1),[H,x]=r.useState(!1),[j,E]=r.useState(!1),[c,g]=r.useState("idle");r.useEffect(()=>{if(l==="preview"){v(!1);return}let s=!1;return v(!0),D(null),U(e.source,e.id).then(a=>{s||(z(a),a.length>0&&A(a[0]))}).catch(a=>{s||(z([]),D(a instanceof L?R(a.code):a instanceof Error?a.message:"Asset delivery metadata is unavailable while offline."))}).finally(()=>{s||v(!1)}),()=>{s=!0}},[l,e.source,e.id]);const P=e.source==="local"&&(e.type==="model"||e.type==="animation"||e.type==="source");r.useEffect(()=>{if(l==="inspector"&&!n){p(!1);return}let s=!1;if(F(null),x(!1),E(!1),!P){p(!1);return}return p(!0),W(e.source,e.id).then(a=>{s||(F(a),x(!a))}).catch(()=>{s||x(!0)}).finally(()=>{s||p(!1)}),()=>{s=!0}},[l,e.id,e.source,n,P]);const T=r.useCallback(async()=>{if(!o)return;const s=`single:${e.source}:${e.id}`,a=Q(s,e.name);y(s,{stage:"fetch",loaded:0,total:o.sizeBytes??0,status:"running"}),g("downloading");try{const d={source:e.source,id:e.id,name:e.name,url:o.url,format:o.format,jobId:s,signal:a.controller.signal};o.includes&&(d.includes=o.includes);const u=await K(d);u.ok&&u.path?(y(s,{stage:"commit",loaded:o.sizeBytes??1,total:o.sizeBytes??1,status:u.alreadyExists?"skipped":"imported",message:u.path}),g("done"),M(`${e.name} added to Content — drag it from there into the viewport to place it.`),f?.(`/${u.path}`)):(y(s,{status:"failed",message:u.error??"The import was rejected."}),g("error"))}catch(d){y(s,{status:a.controller.signal.aborted?"cancelled":"failed",message:d instanceof Error?d.message:String(d)}),g("error")}},[e,o,f]),k=t.jsx("img",{src:j?"/__editor/asset-library/local-placeholder.svg":e.thumbnailUrl,alt:j?`${e.name} preview unavailable`:e.name,onError:()=>E(!0),style:{maxWidth:"100%",maxHeight:"100%",objectFit:"contain"}});return t.jsxs("div",{style:{padding:8,display:"flex",flexDirection:"column",gap:8},children:[l!=="preview"&&t.jsx("div",{style:{fontWeight:600,fontSize:12,color:i.content.primary,wordBreak:"break-all"},children:e.name}),(l!=="inspector"||n)&&t.jsxs(t.Fragment,{children:[t.jsx("div",{style:{width:"100%",height:"100%",minHeight:l==="inspector"?160:240,background:i.surface.shell,borderRadius:i.shape.small,overflow:"hidden",display:"flex",alignItems:"center",justifyContent:"center"},children:O?t.jsxs("div",{style:{color:i.content.muted,fontSize:11},children:[t.jsx(b,{icon:w,spin:!0,style:{marginRight:5}}),"Loading Asset Editor preview…"]}):m?t.jsx(r.Suspense,{fallback:t.jsx("span",{style:{color:i.content.muted},children:"Loading preview…"}),children:t.jsx(N,{route:"model-preview",documentId:"",assetPath:m.path,...m.materialPath?{materialPath:m.materialPath}:{},displayName:e.name,active:!0,whenUnregistered:k})}):k}),j&&t.jsx("div",{role:"status",style:{color:i.content.dim,fontSize:10},children:"The catalog preview could not be loaded; showing the typed fallback."}),H&&t.jsx("div",{style:{color:i.content.dim,fontSize:10},children:"Interactive preview is unavailable for this variant; showing its catalog thumbnail."})]}),l!=="preview"&&t.jsxs(t.Fragment,{children:[t.jsx(C,{label:"Info",children:t.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:4},children:[t.jsxs("div",{children:[t.jsx("div",{style:{fontSize:11,color:i.content.dim,marginBottom:2},children:"Source"}),t.jsx("div",{style:{fontSize:11,color:i.content.primary},children:e.source==="polyhaven"?"Poly Haven":e.source==="ambientcg"?"ambientCG":"Full Catalog"})]}),t.jsxs("div",{children:[t.jsx("div",{style:{fontSize:11,color:i.content.dim,marginBottom:2},children:"Type"}),t.jsx("div",{style:{fontSize:11,color:i.content.primary},children:e.type})]}),e.tags.length>0&&t.jsxs("div",{children:[t.jsx("div",{style:{fontSize:11,color:i.content.dim,marginBottom:2},children:"Tags"}),t.jsx("div",{style:{display:"flex",flexWrap:"wrap",gap:3},children:e.tags.slice(0,12).map(s=>t.jsx("span",{style:{fontSize:10,padding:"1px 5px",background:i.surface.raised,borderRadius:i.shape.small,color:i.content.muted},children:s},s))})]}),e.author&&t.jsxs("div",{children:[t.jsx("div",{style:{fontSize:11,color:i.content.dim,marginBottom:2},children:"Author"}),t.jsx("div",{style:{fontSize:11,color:i.content.primary},children:e.author})]})]})}),t.jsx(C,{label:"Add to Project",children:t.jsx("div",{style:{display:"flex",flexDirection:"column",gap:6},children:$?t.jsxs("div",{style:{fontSize:11,color:i.content.dim},children:[t.jsx(b,{icon:w,spin:!0,style:{marginRight:4}}),"Loading options..."]}):B?t.jsxs("div",{role:"alert",style:{fontSize:11,color:i.content.muted},children:["Delivery unavailable: ",B]}):h.length>0?t.jsxs(t.Fragment,{children:[t.jsx(J,{"aria-label":"Asset delivery",value:o?h.indexOf(o):0,onChange:s=>A(h[Number(s.target.value)]??null),style:X,children:h.map((s,a)=>t.jsxs("option",{value:a,children:[s.label,s.sizeBytes?` (${Y(s.sizeBytes)})`:""]},a))}),t.jsxs(V,{type:"button",variant:c==="done"?"success":"primary",size:"comfortable",onClick:T,disabled:c==="downloading",style:{width:"100%"},children:[t.jsx(b,{icon:c==="done"?_:c==="downloading"?w:G,spin:c==="downloading",style:{fontSize:10}}),c==="done"?"Downloaded":c==="downloading"?"Downloading...":c==="error"?"Retry":"Add to Project"]})]}):t.jsx("div",{role:"status",style:{fontSize:11,color:i.content.dim},children:e.source==="local"?"No healthy SSD or cloud delivery is available for this asset.":"This provider has no compatible remote delivery for the selected asset."})})}),t.jsxs("div",{style:{fontSize:10,color:i.content.dim,padding:"4px 0"},children:["License: ",e.license??"CC0 (Public Domain)"]})]})]})}export{ce as OnlineAssetDetail};
@@ -1 +1 @@
1
- import{a as e}from"./jsx-runtime-DPjLkJKQ.js";import{l as O}from"./configurations-8qaUqMH7.js";import{c as F,P as L,b as _,d as B,s as G,a as $}from"./run-selection-CNsOQTEG.js";import{a6 as A,a7 as g,gH as V,aL as v,eJ as Y,bA as S,bB as R,gI as q,gJ as H,r as P,df as w,a8 as p,gK as I,gL as D,aM as N}from"./index-ClgrFOcX.js";import{r as l}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{i as J,g as K,d as U}from"./active-ingest-CJ2U5L1O.js";import"./client-DNXj_opT.js";import"./ingest-source-persistence-CVU1rTj0.js";import"./capability-coverage-EnZ99FoT.js";import{w as W,x as C,s as X,y as Q,z as k,f as Z,j as E,e as ee,l as se,p as te}from"./game-network-Deo8lcPw.js";const T="play-control",z=4;function ae(s){return Math.min(z,Math.max(1,Math.floor(s)))-1}function ne(s){return s+1}function M(s){return s===1?"1 instance":`${s} instances`}function re(){const s=l.useSyncExternalStore(W,C,C),[n,a]=l.useState(!1),r=l.useRef(null),o=ne(s);return e.jsxs("div",{className:"volter-playbar-popover-anchor",children:[e.jsxs(A,{ref:r,variant:"ghost",size:"comfortable","aria-haspopup":"menu","aria-expanded":n,"aria-controls":n?"volter-player-count-menu":void 0,onClick:()=>a(i=>!i),title:`${M(o)} — choose how many runtimes Play mounts side by side`,children:[e.jsx(g,{icon:V,size:"md"}),e.jsx(v,{children:"Instances"}),e.jsx(v,{variant:"code",children:o}),e.jsx(Y,{direction:"down"})]}),n&&e.jsx(S,{id:"volter-player-count-menu",anchorRef:r,gap:4,onDismiss:()=>a(!1),children:Array.from({length:z},(i,c)=>c+1).map(i=>e.jsx(R,{role:"menuitemradio","aria-checked":i===o,onSelect:()=>{X(ae(i)),a(!1)},children:M(i)},i))})]})}function oe({regime:s}){if(!s)return null;const n="Play edits are temporary unless explicitly committed to source.";return e.jsx("span",{role:"img","aria-label":n,className:"volter-play-edit-regime","data-testid":"play-edit-regime","data-regime":s,title:n,children:e.jsx(g,{icon:p.status.warning,size:"sm"})})}function m({label:s,icon:n,onClick:a,title:r=s,disabled:o=!1,pressed:i,variant:c="ghost",testId:t}){return e.jsx(N,{"aria-label":s,"aria-pressed":i,"data-testid":t,disabled:o,size:"comfortable",variant:c,onClick:u=>{u.currentTarget.blur(),a()},title:r,children:e.jsx(g,{icon:n,size:"md"})})}function ie({state:s,exporting:n=!1,restartReason:a=null,playEditRegime:r=null,onPlay:o,onPause:i,onStep:c,onRestart:t,onStop:u,instances:b=null,picker:h=null,options:x=null,placement:d="launcher"}){const f=s!=="stopped",j=s==="paused";return d==="runtime"&&!f?null:e.jsxs(w,{role:"toolbar","aria-label":"Game transport",className:"volter-playbar",gap:2,align:"center",children:[d==="launcher"&&e.jsxs(e.Fragment,{children:[h,x,b!==null&&e.jsx(re,{}),e.jsx(m,{label:"Play",title:f?"Exit Play mode":"Play (run game)",icon:p.transport.play,pressed:f,testId:T,onClick:o})]}),d==="runtime"&&e.jsxs(e.Fragment,{children:[e.jsx(m,{label:"Pause",title:j?"Resume":"Pause",icon:p.transport.pause,disabled:!f||n,pressed:j,onClick:i}),e.jsx(m,{label:"Step one frame",icon:p.transport.step,disabled:!j||n,onClick:c}),e.jsx(I,{}),e.jsx(m,{label:"Restart Game",icon:p.transport.restart,disabled:!f||n,variant:a?"primary":"ghost",testId:"restart-game",onClick:t,title:a??"Restart game (dispose and remount every root without reloading the editor)"}),e.jsx(m,{label:"Stop",icon:p.transport.stop,disabled:!f,onClick:u}),f&&e.jsxs(e.Fragment,{children:[e.jsx(I,{}),e.jsx(oe,{regime:r})]})]})]})}function Pe({placement:s="launcher"}){const n=l.useSyncExternalStore(q,H),{session:a}=P();l.useSyncExternalStore(a.subscribe,a.version,a.version);const r=a.playState(),o=l.useSyncExternalStore(Q,k,k),[,i]=l.useState(0),c=ce(),t=J()?K():null;if(t)return e.jsxs(w,{role:"toolbar","aria-label":"Game transport",className:"volter-playbar",gap:2,align:"center",children:[e.jsx(m,{label:s==="runtime"?t.playing?"Pause ingested game":"Resume ingested game":"Run ingested game",title:t.playing?"Pause ingested game":"Run ingested game",icon:t.playing?p.transport.pause:p.transport.play,pressed:t.playing,testId:T,onClick:()=>{t.playing?t.pause():t.play(),i(d=>d+1)}}),s==="runtime"&&U()&&e.jsx(m,{label:"Stop",title:"Stop the game and return to the scene",icon:p.transport.stop,onClick:()=>E()}),s==="runtime"&&t.canStep&&e.jsx(m,{label:"Step ingested game",title:"Advance the ingested game one frame",icon:p.transport.step,onClick:()=>{t.step(),i(d=>d+1)}})]});const u=c.configurations.find(d=>d.id===c.selectedId)??null,b=u?.kind==="compound"?u.instances??null:null,h=async()=>{const d=await $();if(!d.ok){P().notify({tone:"error",title:d.title,detail:d.detail});return}d.started&&c.refresh(),await ee()},x=()=>{E(),G().then(()=>c.refresh())};return e.jsx(ie,{placement:s,exporting:n,state:r,restartReason:o,playEditRegime:a.playEditRegime(),instances:b,options:e.jsx(le,{}),picker:c.configurations.length>1?e.jsx(de,{run:c,disabled:r!=="stopped"}):null,onPlay:()=>{r!=="stopped"?x():h()},onPause:()=>{r==="paused"?se():te()},onStep:()=>Z(),onRestart:()=>void h(),onStop:()=>x()})}function le(){const{settings:s}=P(),n=l.useSyncExternalStore(s.subscribe,()=>s.get("volter.play.keepPanelsVisible")===!0),[a,r]=l.useState(!1),o=l.useRef(null);return e.jsxs(e.Fragment,{children:[e.jsx(N,{ref:o,"aria-label":"Play options",title:"Play options","aria-expanded":a,"aria-haspopup":"menu",onClick:()=>r(!a),children:e.jsx(g,{icon:D})}),a&&e.jsx(S,{anchorRef:o,onDismiss:()=>r(!1),children:e.jsx(R,{role:"menuitemcheckbox","aria-checked":n,onSelect:()=>{s.set("volter.play.keepPanelsVisible",!n),r(!1)},children:"Keep panels visible during Play"})})]})}const y=L;function ce(){const[s,n]=l.useState([]),[a,r]=l.useState(F),o=l.useCallback(async()=>{const u=await O().catch(()=>[]);n(u)},[]);l.useEffect(()=>{o()},[o]);const i=l.useMemo(()=>[{id:y,kind:y,role:"run",describe:"Mount every root in the host",status:"stopped"},...s.filter(u=>u.role==="run")],[s]),c=_(s,a),t=l.useCallback(u=>{r(u),B(u)},[]);return{configurations:i,selectedId:c,select:t,refresh:o}}function de({run:s,disabled:n}){const a=l.useRef(null),[r,o]=l.useState(!1),i=s.configurations.find(t=>t.id===s.selectedId),c=i?.id===y?"Play":i?.id??"Play";return e.jsxs("div",{className:"volter-playbar-popover-anchor",children:[e.jsxs(A,{ref:a,variant:"ghost",size:"compact","aria-haspopup":"menu","aria-expanded":r,"aria-controls":r?"volter-run-configuration-menu":void 0,"data-testid":"run-configuration-picker",disabled:n,onClick:()=>o(t=>!t),title:"Which configuration Play starts (the manifest's run-role configurations)",children:[e.jsx(v,{variant:"code",children:c}),e.jsx(g,{icon:D,size:"sm"})]}),r&&e.jsx(S,{id:"volter-run-configuration-menu",anchorRef:a,align:"start",gap:4,onDismiss:()=>o(!1),children:s.configurations.map(t=>e.jsxs(R,{role:"menuitemradio","aria-checked":t.id===s.selectedId,"data-testid":`run-configuration-${t.id}`,title:t.describe??void 0,onSelect:()=>{s.select(t.id),o(!1)},children:[t.id===y?"Play":`${t.id} · ${t.kind}`,t.status==="running"?" ●":""]},t.id))})]})}export{Pe as P};
1
+ import{a as e}from"./jsx-runtime-DPjLkJKQ.js";import{l as O}from"./configurations-B52h5RGp.js";import{c as F,P as L,b as _,d as B,s as G,a as $}from"./run-selection-CEuu_sxz.js";import{a6 as A,a7 as g,gH as V,aL as v,eJ as Y,bA as S,bB as R,gI as q,gJ as H,r as P,df as w,a8 as p,gK as I,gL as D,aM as N}from"./index-BfqJPhFO.js";import{r as l}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{i as J,g as K,d as U}from"./active-ingest-DJ8FmH5M.js";import"./client-DNXj_opT.js";import"./ingest-source-persistence-CrXFBT__.js";import"./capability-coverage-aT7nf05J.js";import{w as W,x as C,s as X,y as Q,z as k,f as Z,j as E,e as ee,l as se,p as te}from"./game-network-TjOj3K-Z.js";const T="play-control",z=4;function ae(s){return Math.min(z,Math.max(1,Math.floor(s)))-1}function ne(s){return s+1}function M(s){return s===1?"1 instance":`${s} instances`}function re(){const s=l.useSyncExternalStore(W,C,C),[n,a]=l.useState(!1),r=l.useRef(null),o=ne(s);return e.jsxs("div",{className:"volter-playbar-popover-anchor",children:[e.jsxs(A,{ref:r,variant:"ghost",size:"comfortable","aria-haspopup":"menu","aria-expanded":n,"aria-controls":n?"volter-player-count-menu":void 0,onClick:()=>a(i=>!i),title:`${M(o)} — choose how many runtimes Play mounts side by side`,children:[e.jsx(g,{icon:V,size:"md"}),e.jsx(v,{children:"Instances"}),e.jsx(v,{variant:"code",children:o}),e.jsx(Y,{direction:"down"})]}),n&&e.jsx(S,{id:"volter-player-count-menu",anchorRef:r,gap:4,onDismiss:()=>a(!1),children:Array.from({length:z},(i,c)=>c+1).map(i=>e.jsx(R,{role:"menuitemradio","aria-checked":i===o,onSelect:()=>{X(ae(i)),a(!1)},children:M(i)},i))})]})}function oe({regime:s}){if(!s)return null;const n="Play edits are temporary unless explicitly committed to source.";return e.jsx("span",{role:"img","aria-label":n,className:"volter-play-edit-regime","data-testid":"play-edit-regime","data-regime":s,title:n,children:e.jsx(g,{icon:p.status.warning,size:"sm"})})}function m({label:s,icon:n,onClick:a,title:r=s,disabled:o=!1,pressed:i,variant:c="ghost",testId:t}){return e.jsx(N,{"aria-label":s,"aria-pressed":i,"data-testid":t,disabled:o,size:"comfortable",variant:c,onClick:u=>{u.currentTarget.blur(),a()},title:r,children:e.jsx(g,{icon:n,size:"md"})})}function ie({state:s,exporting:n=!1,restartReason:a=null,playEditRegime:r=null,onPlay:o,onPause:i,onStep:c,onRestart:t,onStop:u,instances:b=null,picker:h=null,options:x=null,placement:d="launcher"}){const f=s!=="stopped",j=s==="paused";return d==="runtime"&&!f?null:e.jsxs(w,{role:"toolbar","aria-label":"Game transport",className:"volter-playbar",gap:2,align:"center",children:[d==="launcher"&&e.jsxs(e.Fragment,{children:[h,x,b!==null&&e.jsx(re,{}),e.jsx(m,{label:"Play",title:f?"Exit Play mode":"Play (run game)",icon:p.transport.play,pressed:f,testId:T,onClick:o})]}),d==="runtime"&&e.jsxs(e.Fragment,{children:[e.jsx(m,{label:"Pause",title:j?"Resume":"Pause",icon:p.transport.pause,disabled:!f||n,pressed:j,onClick:i}),e.jsx(m,{label:"Step one frame",icon:p.transport.step,disabled:!j||n,onClick:c}),e.jsx(I,{}),e.jsx(m,{label:"Restart Game",icon:p.transport.restart,disabled:!f||n,variant:a?"primary":"ghost",testId:"restart-game",onClick:t,title:a??"Restart game (dispose and remount every root without reloading the editor)"}),e.jsx(m,{label:"Stop",icon:p.transport.stop,disabled:!f,onClick:u}),f&&e.jsxs(e.Fragment,{children:[e.jsx(I,{}),e.jsx(oe,{regime:r})]})]})]})}function Pe({placement:s="launcher"}){const n=l.useSyncExternalStore(q,H),{session:a}=P();l.useSyncExternalStore(a.subscribe,a.version,a.version);const r=a.playState(),o=l.useSyncExternalStore(Q,k,k),[,i]=l.useState(0),c=ce(),t=J()?K():null;if(t)return e.jsxs(w,{role:"toolbar","aria-label":"Game transport",className:"volter-playbar",gap:2,align:"center",children:[e.jsx(m,{label:s==="runtime"?t.playing?"Pause ingested game":"Resume ingested game":"Run ingested game",title:t.playing?"Pause ingested game":"Run ingested game",icon:t.playing?p.transport.pause:p.transport.play,pressed:t.playing,testId:T,onClick:()=>{t.playing?t.pause():t.play(),i(d=>d+1)}}),s==="runtime"&&U()&&e.jsx(m,{label:"Stop",title:"Stop the game and return to the scene",icon:p.transport.stop,onClick:()=>E()}),s==="runtime"&&t.canStep&&e.jsx(m,{label:"Step ingested game",title:"Advance the ingested game one frame",icon:p.transport.step,onClick:()=>{t.step(),i(d=>d+1)}})]});const u=c.configurations.find(d=>d.id===c.selectedId)??null,b=u?.kind==="compound"?u.instances??null:null,h=async()=>{const d=await $();if(!d.ok){P().notify({tone:"error",title:d.title,detail:d.detail});return}d.started&&c.refresh(),await ee()},x=()=>{E(),G().then(()=>c.refresh())};return e.jsx(ie,{placement:s,exporting:n,state:r,restartReason:o,playEditRegime:a.playEditRegime(),instances:b,options:e.jsx(le,{}),picker:c.configurations.length>1?e.jsx(de,{run:c,disabled:r!=="stopped"}):null,onPlay:()=>{r!=="stopped"?x():h()},onPause:()=>{r==="paused"?se():te()},onStep:()=>Z(),onRestart:()=>void h(),onStop:()=>x()})}function le(){const{settings:s}=P(),n=l.useSyncExternalStore(s.subscribe,()=>s.get("volter.play.keepPanelsVisible")===!0),[a,r]=l.useState(!1),o=l.useRef(null);return e.jsxs(e.Fragment,{children:[e.jsx(N,{ref:o,"aria-label":"Play options",title:"Play options","aria-expanded":a,"aria-haspopup":"menu",onClick:()=>r(!a),children:e.jsx(g,{icon:D})}),a&&e.jsx(S,{anchorRef:o,onDismiss:()=>r(!1),children:e.jsx(R,{role:"menuitemcheckbox","aria-checked":n,onSelect:()=>{s.set("volter.play.keepPanelsVisible",!n),r(!1)},children:"Keep panels visible during Play"})})]})}const y=L;function ce(){const[s,n]=l.useState([]),[a,r]=l.useState(F),o=l.useCallback(async()=>{const u=await O().catch(()=>[]);n(u)},[]);l.useEffect(()=>{o()},[o]);const i=l.useMemo(()=>[{id:y,kind:y,role:"run",describe:"Mount every root in the host",status:"stopped"},...s.filter(u=>u.role==="run")],[s]),c=_(s,a),t=l.useCallback(u=>{r(u),B(u)},[]);return{configurations:i,selectedId:c,select:t,refresh:o}}function de({run:s,disabled:n}){const a=l.useRef(null),[r,o]=l.useState(!1),i=s.configurations.find(t=>t.id===s.selectedId),c=i?.id===y?"Play":i?.id??"Play";return e.jsxs("div",{className:"volter-playbar-popover-anchor",children:[e.jsxs(A,{ref:a,variant:"ghost",size:"compact","aria-haspopup":"menu","aria-expanded":r,"aria-controls":r?"volter-run-configuration-menu":void 0,"data-testid":"run-configuration-picker",disabled:n,onClick:()=>o(t=>!t),title:"Which configuration Play starts (the manifest's run-role configurations)",children:[e.jsx(v,{variant:"code",children:c}),e.jsx(g,{icon:D,size:"sm"})]}),r&&e.jsx(S,{id:"volter-run-configuration-menu",anchorRef:a,align:"start",gap:4,onDismiss:()=>o(!1),children:s.configurations.map(t=>e.jsxs(R,{role:"menuitemradio","aria-checked":t.id===s.selectedId,"data-testid":`run-configuration-${t.id}`,title:t.describe??void 0,onSelect:()=>{s.select(t.id),o(!1)},children:[t.id===y?"Play":`${t.id} · ${t.kind}`,t.status==="running"?" ●":""]},t.id))})]})}export{Pe as P};
@@ -1,2 +1,2 @@
1
- import{a as b}from"./jsx-runtime-DPjLkJKQ.js";import{r as d}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{al as O}from"./index-ClgrFOcX.js";import{r as L}from"./studio-environment-Bw9zMFE8.js";import{Q as x,V as y,d as C,m as j}from"./three.quarks.esm-C_HmSKXo.js";import{p as z}from"./project-provenance-BGnJXJwa.js";import{O as Q}from"./StageHost-BMgCrIPG.js";import{a as M}from"./three-contract-Dkt6PmWY.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./user-data-DL6HsBPf.js";import"./workspace-arrangement-86_8Kk5K.js";import"./KTX2Loader-CaqVE6nY.js";import"./three.module-BLhyNg0e.js";import"./three.core-3arARmh6.js";import"./GLTFLoader-KeoruJgS.js";import"./BufferGeometryUtils-B22h7jo4.js";import"./environment-Dg-YaLsA.js";import"./RoomEnvironment-BkknvS_I.js";import"./EXRLoader-CITMBvGd.js";import"./HDRLoader-BTGuGhVo.js";import"./three-state-_ImCbP87.js";import"./editor-shell-store-aKHbAoCV.js";import"./output-pass-HurwNl0G.js";import"./Pass-D1MRT672.js";import"./editor-layers-DwaX5UFy.js";import"./entity-object-BLJ-I8XT.js";import"./standard-viewport-dressing-BJkGwiNT.js";import"./content-bounds-Dl5Y3LLv.js";import"./hierarchy-marks-DeG4E4Ke.js";import"./preview-renderer-BrYNFV1p.js";import"./renderer-ownership-BovSEcLv.js";import"./live-mixers-B-bwLZ7c.js";import"./live-gesture-lock-DJbrjOqf.js";import"./three-integration-DB-xQHD5.js";import"./host-hierarchy-objects-BV3WqU2w.js";import"./layered-pick-guh6WlA7.js";import"./root-stacking-BEd9ZvxC.js";import"./model-thumbnail-CF3qGQWb.js";import"./object3d-document-session-registry-CADiW-LP.js";import"./component-instance-root-wO1p-rLr.js";import"./viewport-door-BV_lf5uK.js";import"./asset-preview-BUpxsHNd.js";import"./bitmap-label-Ct4k6ehY.js";import"./model-inspection-BDA5jikL.js";import"./three-viewport-presentation-Bg86EsDJ.js";import"./clip-planes-CnAI6DZn.js";import"./three-DWy0sZom.js";import"./viewport-editor-controls-BYaAZ_Ku.js";import"./OrbitControls-B13MKuwC.js";import"./LineSegments2-DN9pUfWA.js";import"./scene-framing-B5JC4NeG.js";import"./source-object3d-authoring-adapter-DeeboYub.js";import"./three-projection-core-IUovHgg_.js";import"./editor-presentation-activity-CqJH4G9t.js";import"./transport-strip-BZQnaxFN.js";import"./viewport-surface-status-D7M2L2lI.js";function $(r){const t=[],e=new Set;return r.traverse(o=>{if(o.type!=="ParticleEmitter")return;const i=o.system;!i||typeof i.getRendererSettings!="function"||e.has(i)||(e.add(i),t.push(i))}),t}const S=new WeakMap;function h(r){return r!==null&&typeof r=="object"&&!Array.isArray(r)}function E(r){return h(r)?r:null}function w(r,t){t(r);for(const e of r.children??[])w(e,t)}function V(r){if(!h(r))return!1;const t=E(r.object);if(!t)return!1;let e=!1;return w(t,o=>{o.type==="ParticleEmitter"&&h(o.ps)&&o.ps.version!==void 0&&(e=!0)}),e}function B(r){const t=new Map,e=E(r.object);return e&&w(e,o=>{typeof o.uuid=="string"&&t.set(o.uuid,o)}),t}function F(r){const t=new x().parse(r.json),e=B(r.json),o=$(t),i=new Map(o.map(n=>[n.emitter,n])),p=new Map;if(t.traverse(n=>{const f=i.get(n);if(!f)return;const s=e.get(n.uuid);if(!s?.ps)throw new Error(`Native Quarks emitter ${n.name||n.uuid} has no matching JSON node.`);p.set(n,{system:f,json:s})}),p.size===0)throw new Error("The Quarks document contains no loadable emitter.");const m={root:t,originalText:r.text,json:r.json,emitters:p,dirty:!1};return S.set(t,m),m}function J(r){const t=S.get(r);if(!t)throw new Error("Object3D is not a native three.quarks JSON document.");return t}function q(r){for(const t of r.emitters.values())t.system.dispose();S.delete(r.root)}function G(r){const t=J(r);return t.dirty?`${JSON.stringify(t.json,null,2)}
1
+ import{a as b}from"./jsx-runtime-DPjLkJKQ.js";import{r as d}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{al as O}from"./index-BfqJPhFO.js";import{r as L}from"./studio-environment-BNM-AjAn.js";import{Q as x,V as y,d as C,m as j}from"./three.quarks.esm-C_HmSKXo.js";import{p as z}from"./project-provenance-BGnJXJwa.js";import{O as Q}from"./StageHost-CK78ezTC.js";import{a as M}from"./three-contract-Dkt6PmWY.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./user-data-CTT8ZvVB.js";import"./workspace-arrangement-BXM0R-Uu.js";import"./KTX2Loader-CaqVE6nY.js";import"./three.module-BLhyNg0e.js";import"./three.core-3arARmh6.js";import"./GLTFLoader-KeoruJgS.js";import"./BufferGeometryUtils-B22h7jo4.js";import"./environment-Dg-YaLsA.js";import"./RoomEnvironment-BkknvS_I.js";import"./EXRLoader-CITMBvGd.js";import"./HDRLoader-BTGuGhVo.js";import"./three-state-cYB28OIz.js";import"./editor-shell-store-B3c29A3l.js";import"./output-pass-HurwNl0G.js";import"./Pass-D1MRT672.js";import"./editor-layers-k0AjpomL.js";import"./entity-object-BOLh6DVA.js";import"./standard-viewport-dressing-BhTPIZTQ.js";import"./content-bounds-BRS42hfD.js";import"./hierarchy-marks-C2temlO0.js";import"./preview-renderer-BrYNFV1p.js";import"./renderer-ownership-BovSEcLv.js";import"./live-mixers-B-bwLZ7c.js";import"./live-gesture-lock-DJbrjOqf.js";import"./three-integration-CaC8ivB7.js";import"./host-hierarchy-objects-BV3WqU2w.js";import"./layered-pick-Dito5b_J.js";import"./root-stacking-BEd9ZvxC.js";import"./model-thumbnail-Dnv7DCt7.js";import"./object3d-document-session-registry-CLizyhis.js";import"./component-instance-root-QYCCyhxU.js";import"./viewport-door-BBtilr3V.js";import"./asset-preview-t-7PYPjJ.js";import"./bitmap-label-Ct4k6ehY.js";import"./model-inspection-PgxfYOnI.js";import"./three-viewport-presentation-DoViPvQB.js";import"./clip-planes-CnAI6DZn.js";import"./three-BvhtsSAr.js";import"./viewport-editor-controls-BYaAZ_Ku.js";import"./OrbitControls-B13MKuwC.js";import"./LineSegments2-DN9pUfWA.js";import"./scene-framing-Dm-rCn3G.js";import"./source-object3d-authoring-adapter-ehtz9UK_.js";import"./three-projection-core-C2Zj6hTy.js";import"./editor-presentation-activity-CqJH4G9t.js";import"./transport-strip-DPoEy7PU.js";import"./viewport-surface-status-BiDiAZ6z.js";function $(r){const t=[],e=new Set;return r.traverse(o=>{if(o.type!=="ParticleEmitter")return;const i=o.system;!i||typeof i.getRendererSettings!="function"||e.has(i)||(e.add(i),t.push(i))}),t}const S=new WeakMap;function h(r){return r!==null&&typeof r=="object"&&!Array.isArray(r)}function E(r){return h(r)?r:null}function w(r,t){t(r);for(const e of r.children??[])w(e,t)}function V(r){if(!h(r))return!1;const t=E(r.object);if(!t)return!1;let e=!1;return w(t,o=>{o.type==="ParticleEmitter"&&h(o.ps)&&o.ps.version!==void 0&&(e=!0)}),e}function B(r){const t=new Map,e=E(r.object);return e&&w(e,o=>{typeof o.uuid=="string"&&t.set(o.uuid,o)}),t}function F(r){const t=new x().parse(r.json),e=B(r.json),o=$(t),i=new Map(o.map(n=>[n.emitter,n])),p=new Map;if(t.traverse(n=>{const f=i.get(n);if(!f)return;const s=e.get(n.uuid);if(!s?.ps)throw new Error(`Native Quarks emitter ${n.name||n.uuid} has no matching JSON node.`);p.set(n,{system:f,json:s})}),p.size===0)throw new Error("The Quarks document contains no loadable emitter.");const m={root:t,originalText:r.text,json:r.json,emitters:p,dirty:!1};return S.set(t,m),m}function J(r){const t=S.get(r);if(!t)throw new Error("Object3D is not a native three.quarks JSON document.");return t}function q(r){for(const t of r.emitters.values())t.system.dispose();S.delete(r.root)}function G(r){const t=J(r);return t.dirty?`${JSON.stringify(t.json,null,2)}
2
2
  `:t.originalText}const U=new Set(["particles.duration","particles.looping","particles.prewarm","particles.worldSpace","particles.startLife","particles.startSpeed","particles.startRotation","particles.startSize","particles.startColor","particles.emissionOverTime","particles.emissionOverDistance"]);function W(){return[{path:"particles.duration",label:"Duration",type:"number",group:"Emission"},{path:"particles.looping",label:"Looping",type:"boolean",group:"Emission"},{path:"particles.prewarm",label:"Prewarm",type:"boolean",group:"Emission"},{path:"particles.emissionOverTime",label:"Rate over time",type:"json",group:"Emission"},{path:"particles.emissionOverDistance",label:"Rate over distance",type:"json",group:"Emission"},{path:"particles.startLife",label:"Lifetime",type:"json",group:"Start"},{path:"particles.startSpeed",label:"Speed",type:"json",group:"Start"},{path:"particles.startRotation",label:"Rotation",type:"json",group:"Start"},{path:"particles.startSize",label:"Size",type:"json",group:"Start"},{path:"particles.startColor",label:"Color",type:"json",group:"Start"},{path:"particles.worldSpace",label:"World space",type:"boolean",group:"Simulation"},{path:"particles.shape",label:"Shape",type:"string",readonly:!0,group:"Shape"},{path:"particles.behaviors",label:"Modules",type:"json",readonly:!0,group:"Behavior"},{path:"particles.renderMode",label:"Native render mode",type:"number",readonly:!0,group:"Renderer"}]}function u(r,t){if(!h(r)||typeof r.type!="string")throw new Error(`${t} must be a native quarks function JSON object with a type.`);return r}function k(r,t){const{system:e}=r;switch(t){case"particles.duration":return e.duration;case"particles.looping":return e.looping;case"particles.prewarm":return e.prewarm;case"particles.worldSpace":return e.worldSpace;case"particles.startLife":return e.startLife.toJSON();case"particles.startSpeed":return e.startSpeed.toJSON();case"particles.startRotation":return e.startRotation.toJSON();case"particles.startSize":return e.startSize.toJSON();case"particles.startColor":return e.startColor.toJSON();case"particles.emissionOverTime":return e.emissionOverTime.toJSON();case"particles.emissionOverDistance":return e.emissionOverDistance.toJSON();case"particles.shape":return e.emitterShape.type;case"particles.behaviors":return e.behaviors.map(o=>o.type);case"particles.renderMode":return e.renderMode;default:return}}function g(r){return r.slice(10)}function N(r,t,e){const{system:o}=r;switch(t){case"particles.duration":{const i=Number(e);if(!Number.isFinite(i)||i<=0)throw new Error("Particle duration must be a positive finite number.");o.duration=i;break}case"particles.looping":o.looping=!!e;break;case"particles.prewarm":o.prewarm=!!e;break;case"particles.worldSpace":o.worldSpace=!!e;break;case"particles.startLife":o.startLife=y(u(e,"Lifetime"));break;case"particles.startSpeed":o.startSpeed=y(u(e,"Speed"));break;case"particles.startRotation":o.startRotation=j(u(e,"Rotation"));break;case"particles.startSize":o.startSize=j(u(e,"Size"));break;case"particles.startColor":o.startColor=C(u(e,"Color"));break;case"particles.emissionOverTime":o.emissionOverTime=y(u(e,"Rate over time"));break;case"particles.emissionOverDistance":o.emissionOverDistance=y(u(e,"Rate over distance"));break;default:throw new Error(`Particle field ${t} is read-only.`)}r.json.ps[g(t)]=e,o.restart()}function H(r,t,e,o){N(r,t,e),r.json.ps[g(t)]=o}function I(r){return r===void 0?void 0:JSON.parse(JSON.stringify(r))}const _=({root:r,defaultAdapter:t,commit:e})=>{const o=J(r),i=new Set,p=()=>{for(const s of i)s()},m=s=>{const a=M(t.hierarchy,s);return a?o.emitters.get(a)??null:null},n={properties:s=>[...t.inspector?.properties(s)??[],...m(s)?W():[]],get:(s,a)=>{const c=m(s);return c&&a.startsWith("particles.")?k(c,a):t.inspector?.get(s,a)},set:async(s,a,c)=>{const l=m(s);if(!l||!U.has(a)){await t.inspector?.set(s,a,c);return}const v=k(l,a),T=g(a),R=I(l.json.ps?.[T]),P=o.dirty;try{N(l,a,c),o.dirty=!0,p(),await e(`Edit ${l.system.emitter.name||"Particle Emitter"}`)}catch(D){throw H(l,a,v,R),o.dirty=P,p(),D}}};return{adapter:{capabilities:{...t.capabilities,inspectorFields:!0,persist:!0},provenance:{source:"document",label:"three.quarks JSON",detail:"The hierarchy and emitter fields are the native three.quarks Object3D JSON document."},hierarchy:t.hierarchy,...t.selection?{selection:t.selection}:{},...t.transforms?{transforms:t.transforms}:{},inspector:n,subscribe:s=>{i.add(s);const a=t.subscribe?.(s)??(()=>{});return()=>{i.delete(s),a()}}},dispose:()=>i.clear()}};async function er(r,t){const e=await fetch(L(r),{cache:"no-store",...t?{signal:t}:{}});if(!e.ok)throw new Error(`Could not load ${r}: HTTP ${e.status}.`);const o=await e.text();let i;try{i=JSON.parse(o)}catch{return null}return V(i)?{text:o,json:i,projectPath:z(r)}:null}function or({documentId:r,assetPath:t,displayName:e,active:o,source:i}){const[p,m]=d.useState(null),[n,f]=d.useState(null);d.useEffect(()=>{if(!o){m(null);return}let c=null;try{c=F(i),m(c),f(null)}catch(l){f(l instanceof Error?l.message:String(l))}return()=>{c&&q(c)}},[o,i]);const s=d.useCallback(()=>{if(!p)throw new Error(`Particle asset ${t} is not loaded.`);return{root:p.root,dispose(){}}},[p,t]),a=d.useMemo(()=>({label:`Edit ${e}`,resources:[{path:i.projectPath,contentType:"application/json",serialize:({root:c})=>G(c)}]}),[e,i.projectPath]);return n?b.jsx("div",{role:"alert",style:{padding:20,color:O.semantic.danger},children:n}):p?b.jsx(Q,{documentId:r,sourcePath:t,displayName:e,build:s,active:o,assetType:"particles",persistence:a,authoring:_,dressing:{grid:!0}}):b.jsxs("div",{style:{padding:20,color:O.content.muted},children:["Loading ",e,"…"]})}export{or as QuarksAssetDocument,V as isNativeQuarksJson,er as loadNativeQuarksJsonSource};
@@ -1 +1 @@
1
- import{a as t}from"./jsx-runtime-DPjLkJKQ.js";import{U as B,dB as V,dC as F,dD as w,dE as I,d9 as H,a6 as C,aM as j,a7 as S,dF as W,dG as A,bx as D,bH as T,dH as N,bA as P,aN as G,bC as M,bB as f}from"./index-ClgrFOcX.js";import{r as h}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{s as K,g as U,a as X,b as Y,c as _,d as y,f as $,t as q}from"./react-story-board-CMvkLAkF.js";const z={fill:null,desktop:{width:1440,height:900},tablet:{width:768,height:1024},mobile:{width:390,height:844}};function J({boardViewport:e,containerRef:r,selectViewport:n,viewportValue:d}){return t.jsxs(t.Fragment,{children:[t.jsxs(T,{"aria-label":"Responsive viewport",title:e?.locked?"Viewport is locked by this story’s globals.viewport":"Responsive viewport",value:d,disabled:e?.locked===!0,onChange:o=>n(o.target.value),className:"volter-react-viewport-select",children:[t.jsx("option",{value:"fill",children:"Responsive"}),e?e.choices.map(o=>t.jsxs("option",{value:o.id,children:[o.label," · ",o.width,"×",o.height]},o.id)):t.jsxs(t.Fragment,{children:[t.jsx("option",{value:"desktop",children:"Desktop · 1440×900"}),t.jsx("option",{value:"tablet",children:"Tablet · 768×1024"}),t.jsx("option",{value:"mobile",children:"Mobile · 390×844"})]})]}),e&&t.jsx(j,{"aria-label":"Rotate viewport",title:e.locked?"Viewport is locked by this story’s globals.viewport":"Rotate viewport",size:"comfortable",disabled:e.locked,onClick:()=>q(r.current),children:t.jsx(S,{icon:N,size:"md"})})]})}function at({containerRef:e,context:r,boardOnly:n=!1}){const d=B();h.useSyncExternalStore(d.subscribe,d.getSnapshot);const o=h.useSyncExternalStore(V,F),l=h.useSyncExternalStore(K,U),u=h.useSyncExternalStore(X,()=>Y(e.current),()=>null),m=h.useCallback(i=>{const s=e.current;if(!s)return;const a=Math.min(4,Math.max(.1,i)),p=s.clientWidth/2,v=s.clientHeight/2,g=(p-o.x)/o.zoom,Z=(v-o.y)/o.zoom;w(p-g*a,v-Z*a,a)},[e,o]),c=h.useCallback(()=>{const i=e.current,s=[...d.selectedEntityIds].at(-1);if(!i||!s)return;const a=r?.adapter.rects?.rect(s);if(!a||a.width<=0||a.height<=0)return;const p=Math.max(1,i.clientWidth-96),v=Math.max(1,i.clientHeight-96),g=Math.min(4,Math.max(.1,Math.min(p/a.width,v/a.height)));w(i.clientWidth/2-(a.x+a.width/2)*g,i.clientHeight/2-(a.y+a.height/2)*g,g)},[e,r,d]),x=h.useCallback(i=>{const s=e.current;if(u){_(s,i==="fill"?null:i);return}const a=z[i];if(!s||a===null){y(null,null),w(0,0,1);return}y(a.width,a.height);const p=Math.min(1,Math.max(.1,Math.min((s.clientWidth-96)/a.width,(s.clientHeight-96)/a.height)));w((s.clientWidth-a.width*p)/2,(s.clientHeight-a.height*p)/2,p)},[u,e]),k=h.useCallback(()=>{const i=e.current;i&&$(i)},[e]),b=u!==null,R=r?.kind==="dom"&&!!r.adapter.rects;if(n?!b:!R)return null;const E=u?u.selectedViewportId??"fill":Object.entries(z).find(([,i])=>i===null?l.width===null:i.width===l.width&&i.height===l.height)?.[0]??"fill";return t.jsxs(t.Fragment,{children:[!b&&l.width!==null&&l.height!==null&&t.jsx("div",{"data-testid":"react-canvas-device-frame",style:{position:"absolute",left:0,top:0,zIndex:0,width:l.width,height:l.height,transform:I(o),transformOrigin:"0 0",pointerEvents:"none",background:"#fff",boxShadow:"0 0 0 1px #ffffff40, 0 8px 30px #0009"}}),t.jsxs(H,{label:n?"2D component board view":"React canvas view","data-testid":n?"canvas-board-zoom-controls":"react-canvas-zoom-controls",...n?{"data-board-zoom":""}:{},"data-volter-canvas-navigation-ignore":"true",className:"volter-react-canvas-controls",children:[!n&&t.jsx(J,{boardViewport:u,containerRef:e,selectViewport:x,viewportValue:E}),b&&t.jsx(C,{variant:"ghost","aria-label":"Fit story board",title:"Fit all stories",size:"comfortable",onClick:k,children:"Fit board"}),t.jsx(j,{"aria-label":"Zoom out",title:"Zoom out",size:"comfortable",onClick:()=>m(o.zoom/1.2),children:t.jsx(S,{icon:W,size:"md"})}),t.jsx(L,{zoom:o.zoom,zoomTo:m,...b?{fit:k}:{},...!n&&d.selectedEntityIds.size>0?{toSelection:c}:{}}),t.jsx(j,{"aria-label":"Zoom in",title:"Zoom in",size:"comfortable",onClick:()=>m(o.zoom*1.2),children:t.jsx(S,{icon:A,size:"md"})}),!n&&t.jsx(j,{"aria-label":"Zoom to selection",title:"Zoom to selection",size:"comfortable",onClick:c,children:t.jsx(S,{icon:D,size:"md"})})]})]})}function L({zoom:e,zoomTo:r,fit:n,toSelection:d}){const[o,l]=h.useState(!1),u=h.useRef(null),m=c=>()=>{c(),l(!1)};return t.jsxs(t.Fragment,{children:[t.jsxs(C,{ref:u,variant:"ghost","aria-label":"Zoom","aria-haspopup":"menu","aria-expanded":o,title:"Zoom",size:"comfortable",onClick:()=>l(!o),children:[Math.round(e*100),"%"]}),o&&t.jsxs(P,{anchorRef:u,align:"end",clamp:!0,"aria-label":"Zoom",onDismiss:()=>l(!1),children:[t.jsx("div",{style:{padding:"4px 8px"},children:t.jsx(G,{"aria-label":"Zoom percentage",defaultValue:String(Math.round(e*100)),onKeyDown:c=>{if(c.key!=="Enter")return;const x=Number.parseFloat(c.currentTarget.value);Number.isFinite(x)&&x>0&&(r(x/100),l(!1))}})}),t.jsx(M,{}),t.jsx(f,{onSelect:m(()=>r(e*1.2)),children:"Zoom in"}),t.jsx(f,{onSelect:m(()=>r(e/1.2)),children:"Zoom out"}),n?t.jsx(f,{onSelect:m(n),children:"Zoom to fit"}):null,d?t.jsx(f,{onSelect:m(d),children:"Zoom to selection"}):null,t.jsx(M,{}),[.5,1,2].map(c=>t.jsx(f,{onSelect:m(()=>r(c)),children:`Zoom to ${c*100}%`},c))]})]})}export{at as R};
1
+ import{a as t}from"./jsx-runtime-DPjLkJKQ.js";import{U as B,dB as V,dC as F,dD as w,dE as I,d9 as H,a6 as C,aM as j,a7 as S,dF as W,dG as A,bx as D,bH as T,dH as N,bA as P,aN as G,bC as M,bB as f}from"./index-BfqJPhFO.js";import{r as h}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{s as K,g as U,a as X,b as Y,c as _,d as y,f as $,t as q}from"./react-story-board-CynnmKqO.js";const z={fill:null,desktop:{width:1440,height:900},tablet:{width:768,height:1024},mobile:{width:390,height:844}};function J({boardViewport:e,containerRef:r,selectViewport:n,viewportValue:d}){return t.jsxs(t.Fragment,{children:[t.jsxs(T,{"aria-label":"Responsive viewport",title:e?.locked?"Viewport is locked by this story’s globals.viewport":"Responsive viewport",value:d,disabled:e?.locked===!0,onChange:o=>n(o.target.value),className:"volter-react-viewport-select",children:[t.jsx("option",{value:"fill",children:"Responsive"}),e?e.choices.map(o=>t.jsxs("option",{value:o.id,children:[o.label," · ",o.width,"×",o.height]},o.id)):t.jsxs(t.Fragment,{children:[t.jsx("option",{value:"desktop",children:"Desktop · 1440×900"}),t.jsx("option",{value:"tablet",children:"Tablet · 768×1024"}),t.jsx("option",{value:"mobile",children:"Mobile · 390×844"})]})]}),e&&t.jsx(j,{"aria-label":"Rotate viewport",title:e.locked?"Viewport is locked by this story’s globals.viewport":"Rotate viewport",size:"comfortable",disabled:e.locked,onClick:()=>q(r.current),children:t.jsx(S,{icon:N,size:"md"})})]})}function at({containerRef:e,context:r,boardOnly:n=!1}){const d=B();h.useSyncExternalStore(d.subscribe,d.getSnapshot);const o=h.useSyncExternalStore(V,F),l=h.useSyncExternalStore(K,U),u=h.useSyncExternalStore(X,()=>Y(e.current),()=>null),m=h.useCallback(i=>{const s=e.current;if(!s)return;const a=Math.min(4,Math.max(.1,i)),p=s.clientWidth/2,v=s.clientHeight/2,g=(p-o.x)/o.zoom,Z=(v-o.y)/o.zoom;w(p-g*a,v-Z*a,a)},[e,o]),c=h.useCallback(()=>{const i=e.current,s=[...d.selectedEntityIds].at(-1);if(!i||!s)return;const a=r?.adapter.rects?.rect(s);if(!a||a.width<=0||a.height<=0)return;const p=Math.max(1,i.clientWidth-96),v=Math.max(1,i.clientHeight-96),g=Math.min(4,Math.max(.1,Math.min(p/a.width,v/a.height)));w(i.clientWidth/2-(a.x+a.width/2)*g,i.clientHeight/2-(a.y+a.height/2)*g,g)},[e,r,d]),x=h.useCallback(i=>{const s=e.current;if(u){_(s,i==="fill"?null:i);return}const a=z[i];if(!s||a===null){y(null,null),w(0,0,1);return}y(a.width,a.height);const p=Math.min(1,Math.max(.1,Math.min((s.clientWidth-96)/a.width,(s.clientHeight-96)/a.height)));w((s.clientWidth-a.width*p)/2,(s.clientHeight-a.height*p)/2,p)},[u,e]),k=h.useCallback(()=>{const i=e.current;i&&$(i)},[e]),b=u!==null,R=r?.kind==="dom"&&!!r.adapter.rects;if(n?!b:!R)return null;const E=u?u.selectedViewportId??"fill":Object.entries(z).find(([,i])=>i===null?l.width===null:i.width===l.width&&i.height===l.height)?.[0]??"fill";return t.jsxs(t.Fragment,{children:[!b&&l.width!==null&&l.height!==null&&t.jsx("div",{"data-testid":"react-canvas-device-frame",style:{position:"absolute",left:0,top:0,zIndex:0,width:l.width,height:l.height,transform:I(o),transformOrigin:"0 0",pointerEvents:"none",background:"#fff",boxShadow:"0 0 0 1px #ffffff40, 0 8px 30px #0009"}}),t.jsxs(H,{label:n?"2D component board view":"React canvas view","data-testid":n?"canvas-board-zoom-controls":"react-canvas-zoom-controls",...n?{"data-board-zoom":""}:{},"data-volter-canvas-navigation-ignore":"true",className:"volter-react-canvas-controls",children:[!n&&t.jsx(J,{boardViewport:u,containerRef:e,selectViewport:x,viewportValue:E}),b&&t.jsx(C,{variant:"ghost","aria-label":"Fit story board",title:"Fit all stories",size:"comfortable",onClick:k,children:"Fit board"}),t.jsx(j,{"aria-label":"Zoom out",title:"Zoom out",size:"comfortable",onClick:()=>m(o.zoom/1.2),children:t.jsx(S,{icon:W,size:"md"})}),t.jsx(L,{zoom:o.zoom,zoomTo:m,...b?{fit:k}:{},...!n&&d.selectedEntityIds.size>0?{toSelection:c}:{}}),t.jsx(j,{"aria-label":"Zoom in",title:"Zoom in",size:"comfortable",onClick:()=>m(o.zoom*1.2),children:t.jsx(S,{icon:A,size:"md"})}),!n&&t.jsx(j,{"aria-label":"Zoom to selection",title:"Zoom to selection",size:"comfortable",onClick:c,children:t.jsx(S,{icon:D,size:"md"})})]})]})}function L({zoom:e,zoomTo:r,fit:n,toSelection:d}){const[o,l]=h.useState(!1),u=h.useRef(null),m=c=>()=>{c(),l(!1)};return t.jsxs(t.Fragment,{children:[t.jsxs(C,{ref:u,variant:"ghost","aria-label":"Zoom","aria-haspopup":"menu","aria-expanded":o,title:"Zoom",size:"comfortable",onClick:()=>l(!o),children:[Math.round(e*100),"%"]}),o&&t.jsxs(P,{anchorRef:u,align:"end",clamp:!0,"aria-label":"Zoom",onDismiss:()=>l(!1),children:[t.jsx("div",{style:{padding:"4px 8px"},children:t.jsx(G,{"aria-label":"Zoom percentage",defaultValue:String(Math.round(e*100)),onKeyDown:c=>{if(c.key!=="Enter")return;const x=Number.parseFloat(c.currentTarget.value);Number.isFinite(x)&&x>0&&(r(x/100),l(!1))}})}),t.jsx(M,{}),t.jsx(f,{onSelect:m(()=>r(e*1.2)),children:"Zoom in"}),t.jsx(f,{onSelect:m(()=>r(e/1.2)),children:"Zoom out"}),n?t.jsx(f,{onSelect:m(n),children:"Zoom to fit"}):null,d?t.jsx(f,{onSelect:m(d),children:"Zoom to selection"}):null,t.jsx(M,{}),[.5,1,2].map(c=>t.jsx(f,{onSelect:m(()=>r(c)),children:`Zoom to ${c*100}%`},c))]})]})}export{at as R};
@@ -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-ClgrFOcX.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-guh6WlA7.js";import{z as Oo,j as Lo}from"./react-story-board-CMvkLAkF.js";import{v as ye}from"./viewport-editor-controls-BYaAZ_Ku.js";import{l as Mo}from"./inspect-BunjdqX7.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-BfqJPhFO.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-Dito5b_J.js";import{z as Oo,j as Lo}from"./react-story-board-CynnmKqO.js";import{v as ye}from"./viewport-editor-controls-BYaAZ_Ku.js";import{l as Mo}from"./inspect-UxYR9Ls5.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-ClgrFOcX.js";import{r as h}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{C as le}from"./ColorInput-Dzpqy-J3.js";import{W as ce}from"./three.module-BLhyNg0e.js";import{s as P}from"./asset-editor-persistence-DWp0E8cc.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-BfqJPhFO.js";import{r as h}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{C as le}from"./ColorInput-y8NzQ5q8.js";import{W as ce}from"./three.module-BLhyNg0e.js";import{s as P}from"./asset-editor-persistence-BF2Eqt0F.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