@volter/model-editor 0.5.66 → 0.5.67

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 (200) hide show
  1. package/dist/.vite/manifest.json +1022 -1006
  2. package/dist/assets/AudioViewer-DVXaSSYC.js +1 -0
  3. package/dist/assets/{BVHLoader-xUHWsz84.js → BVHLoader-msuIvJVn.js} +1 -1
  4. package/dist/assets/ColladaLoader-BpvxwqkB.js +3 -0
  5. package/dist/assets/EntityModelDocument-BtlQZcoU.js +1 -0
  6. package/dist/assets/EnvironmentAssetDocument-BH3zT9rt.js +1 -0
  7. package/dist/assets/FBXLoader-CsdO937F.js +1 -0
  8. package/dist/assets/{GameplaySessionTimeline-HJLZUV4Q.js → GameplaySessionTimeline-Dko95kB7.js} +10 -10
  9. package/dist/assets/ImageViewer-CZ_RMER2.js +1 -0
  10. package/dist/assets/{InspectorCanvasPreview-CLDhscy0.js → InspectorCanvasPreview-BLecDHpc.js} +1 -1
  11. package/dist/assets/InspectorObjectPreview-CSIWwJQE.js +1 -0
  12. package/dist/assets/JsonAssetDocument-CGYSeJyl.js +2 -0
  13. package/dist/assets/{LineSegments2-C8H20K8w.js → LineSegments2-BKEsgiC8.js} +2 -2
  14. package/dist/assets/LiveModuleDocument-CIvS-SUT.js +2 -0
  15. package/dist/assets/LutAssetDocument-BA70uU3w.js +1 -0
  16. package/dist/assets/{MTLLoader-C-rA0fNF.js → MTLLoader-DNh2pFDc.js} +2 -2
  17. package/dist/assets/ModelAssetDocument-D0lNEhOg.js +1 -0
  18. package/dist/assets/NonThreeAuthoringBootstrap-C0pCfkJ4.js +2 -0
  19. package/dist/assets/OBJLoader-DPi99VIm.js +5 -0
  20. package/dist/assets/Object3DDocumentToolbar-PGYkZEwr.js +1 -0
  21. package/dist/assets/Object3DPreview-BROKXSTC.js +2 -0
  22. package/dist/assets/OnlineAssetDetail-lEHnhdUS.js +1 -0
  23. package/dist/assets/OrbitControls-smIenN60.js +1 -0
  24. package/dist/assets/PLYLoader-Cx9Yc9xe.js +2 -0
  25. package/dist/assets/QuarksAssetDocument-C_8eG4KG.js +2 -0
  26. package/dist/assets/RectAreaLightUniformsLib-Iam8rS8R.js +1 -0
  27. package/dist/assets/STLLoader-BaJkM-k1.js +1 -0
  28. package/dist/assets/{ShaderAssetDocument-qlLeb2S3.js → ShaderAssetDocument-Gdp7OCfv.js} +5 -5
  29. package/dist/assets/SourceAssetViewer-l72u0hOa.js +1 -0
  30. package/dist/assets/StageHost-CdzuP0NS.js +1179 -0
  31. package/dist/assets/TDSLoader-BskhMiUy.js +1 -0
  32. package/dist/assets/ToolObject3DPreview-CU5klD6l.js +1 -0
  33. package/dist/assets/Toolbar-DI0LGx25.js +1 -0
  34. package/dist/assets/TransientHint-myZtSdd6.js +1 -0
  35. package/dist/assets/VideoViewer-z0JPXPKa.js +1 -0
  36. package/dist/assets/ViewportShadingMenu-CVU2bU_3.js +1 -0
  37. package/dist/assets/animation-mixers.service-DSIsxWG5.js +1 -0
  38. package/dist/assets/animation-timeline.utility-BEgDQC04.js +1 -0
  39. package/dist/assets/asset-editor-persistence-BtRQI8t6.js +1 -0
  40. package/dist/assets/bitmap-label-Ct4k6ehY.js +1 -0
  41. package/dist/assets/{blender-emscripten-engine-CEsWgnR7.js → blender-emscripten-engine-BeWFjMn-.js} +1 -1
  42. package/dist/assets/blender-node-editor.document-C_kpsARB.js +1 -0
  43. package/dist/assets/{blender-properties-tab-C5tUuCSv.js → blender-properties-tab-B_XBg6S8.js} +3 -3
  44. package/dist/assets/blender-runtime-host-CYhl4T9S.js +4 -0
  45. package/dist/assets/{blender-runtime-skin-DMq0XAvO.js → blender-runtime-skin-Bk6uXECD.js} +98 -51
  46. package/dist/assets/blender-runtime.document-CAPDRCvN.js +12 -0
  47. package/dist/assets/blender-timeline.document-CcEymQyL.js +1 -0
  48. package/dist/assets/blender-uv-editor.document-DSPvSEuE.js +1 -0
  49. package/dist/assets/blender-version.status-CEu7vCi3.js +1 -0
  50. package/dist/assets/{blender-wali-engine-D3iKpzn9.js → blender-wali-engine-da698rDf.js} +1 -1
  51. package/dist/assets/blender.command-BCb_c9lw.js +1 -0
  52. package/dist/assets/blender.keymap-_rF_vRX8.js +1 -0
  53. package/dist/assets/{blender.status-ujwGU6dU.js → blender.status-DrasQhJV.js} +1 -1
  54. package/dist/assets/{blender.style-CxfbTFcE.js → blender.style-DaIh9SiA.js} +1 -1
  55. package/dist/assets/{client-DNXj_opT.js → client-mkWk8S65.js} +1 -1
  56. package/dist/assets/content-bounds-_QWiKD5_.js +85 -0
  57. package/dist/assets/{hosted-asset-materialization-BXM49Qkc.js → hosted-asset-materialization-hUS3IhTD.js} +2 -2
  58. package/dist/assets/index-0Lm0Nf1M.css +1 -0
  59. package/dist/assets/{index-CJbYy-CF.js → index-7vd2obXq.js} +2 -2
  60. package/dist/assets/{index-DgapqSPi.js → index-BRLA7zdc.js} +1 -1
  61. package/dist/assets/{index-BtfYaG4D.js → index-CQG6JOSy.js} +18 -18
  62. package/dist/assets/{index-CanA16PU.js → index-CnvSS9lU.js} +1 -1
  63. package/dist/assets/{index-Bge9JUr6.js → index-DYNMP0kE.js} +1 -1
  64. package/dist/assets/index-Dm_h-T4x.js +1406 -0
  65. package/dist/assets/{index-gHZae-lw.js → index-Dz8qGBZc.js} +1 -1
  66. package/dist/assets/{index-BncK9THk.js → index-Fv4R0cYr.js} +1 -1
  67. package/dist/assets/{index-IEjydI9d.js → index-f-MQ14bP.js} +1 -1
  68. package/dist/assets/{index-D2LwEE0L.js → index-jib6KJY8.js} +6 -6
  69. package/dist/assets/{index-DUqP1RMl.js → index-ux8XhRyW.js} +1 -1
  70. package/dist/assets/{jsx-runtime-DPjLkJKQ.js → jsx-runtime-CAUTK36e.js} +1 -1
  71. package/dist/assets/layered-pick-CT4HlEpW.js +1 -0
  72. package/dist/assets/live-mixers-B-bwLZ7c.js +1 -0
  73. package/dist/assets/model-inspection-DDZE59vp.js +1 -0
  74. package/dist/assets/models.finder-Caf-3Yix.js +1 -0
  75. package/dist/assets/product-DbFrUS6F.js +1 -0
  76. package/dist/assets/properties-bone-constraints.inspector-DB3Rc_Hf.js +1 -0
  77. package/dist/assets/properties-bone.inspector-B7f7H_Co.js +1 -0
  78. package/dist/assets/properties-collection.inspector-JCtV3h3Y.js +1 -0
  79. package/dist/assets/properties-constraints.inspector-Cs8MwS-1.js +1 -0
  80. package/dist/assets/properties-data.inspector-DKGiHu8O.js +1 -0
  81. package/dist/assets/properties-material.inspector-Dc18RI13.js +1 -0
  82. package/dist/assets/properties-modifiers.inspector-DvGvXq2v.js +1 -0
  83. package/dist/assets/properties-object.inspector-Bl9nrytP.js +1 -0
  84. package/dist/assets/properties-output.inspector-B6QsU94n.js +1 -0
  85. package/dist/assets/properties-particles.inspector-B1dMnZSA.js +1 -0
  86. package/dist/assets/properties-physics.inspector-BwfNykfW.js +1 -0
  87. package/dist/assets/properties-render.inspector-KrL2EiTH.js +1 -0
  88. package/dist/assets/properties-scene.inspector-CewQnyRt.js +1 -0
  89. package/dist/assets/properties-texture.inspector-BITMzY-f.js +1 -0
  90. package/dist/assets/properties-view-layer.inspector-BpkDbmcb.js +1 -0
  91. package/dist/assets/properties-world.inspector-DLRH45Oj.js +1 -0
  92. package/dist/assets/{react-18-DyywM-Z2.js → react-18-D335xReo.js} +1 -1
  93. package/dist/assets/{react-story-board-B9V-j_Y5.js → react-story-board-CkaP4mEG.js} +1 -1
  94. package/dist/assets/{session-CsR0lApe.js → session-CTXsU1lK.js} +176 -1
  95. package/dist/assets/{spark.module-gG1EsWx8.js → spark.module-DMQ9J7rT.js} +11 -11
  96. package/dist/assets/stage-keyboard-BY7u9_MB.js +1 -0
  97. package/dist/assets/stage-overlay-set-DRFcVd27.js +1 -0
  98. package/dist/assets/stage-presence-markers-D2IpuOAY.js +1 -0
  99. package/dist/assets/stage-transform-tools-BGcIULoe.js +1 -0
  100. package/dist/assets/story-capture-RSWY8I8h.js +1 -0
  101. package/dist/assets/three-integration.service-0EyPpd5f.js +4 -0
  102. package/dist/assets/{three.module-ZILb6uB7.js → three.module-CrYDk-Xr.js} +1 -1
  103. package/dist/assets/transform-mode-request-Cz6fzydi.js +1 -0
  104. package/dist/assets/transport-strip-Co-ZDkf-.js +1 -0
  105. package/dist/assets/{vgai-shared-fontawesome-CFSkqz69.js → vgai-shared-fontawesome-2ZSGa7vM.js} +1 -1
  106. package/dist/assets/vgai-shared-jsx-dev-runtime-hkPLeIJV.js +1 -0
  107. package/dist/assets/vgai-shared-jsx-runtime-CUvvjEqj.js +1 -0
  108. package/dist/assets/{vgai-shared-react-dom-client-S0ozfl6_.js → vgai-shared-react-dom-client-CS681GK2.js} +1 -1
  109. package/dist/assets/{vgai-shared-three-DzfWDqlp.js → vgai-shared-three-CLJ0K3jQ.js} +1 -1
  110. package/dist/assets/viewport-door-BdL0u5rd.js +1 -0
  111. package/dist/assets/viewport-editor-controls-BYaAZ_Ku.js +1 -0
  112. package/dist/assets/viewport-surface-status-yS6CrXH7.js +24 -0
  113. package/dist/assets/{worker-B7zhIsFh.js → worker-CC9Ug5Ei.js} +1 -1
  114. package/dist/assets/world-documents-B5IWN-ng.js +3 -0
  115. package/dist/vgai-shared-react.json +4 -4
  116. package/dist/vgai-shared-three.json +1 -1
  117. package/dist-node/cli.js +248 -209
  118. package/dist-node/create.js +77 -77
  119. package/package.json +10 -10
  120. package/src/index.ts +1 -0
  121. package/dist/assets/AudioViewer-CRWsJVYN.js +0 -1
  122. package/dist/assets/ColladaLoader-Ccy_gHsu.js +0 -3
  123. package/dist/assets/EntityModelDocument-Dal8YnLK.js +0 -1
  124. package/dist/assets/EnvironmentAssetDocument-DFOFYX5v.js +0 -1
  125. package/dist/assets/FBXLoader-Dh0pOBW2.js +0 -1
  126. package/dist/assets/ImageViewer-BzqBpqL-.js +0 -1
  127. package/dist/assets/InspectorObjectPreview-BUZEp4xS.js +0 -1
  128. package/dist/assets/JsonAssetDocument-DCkqRS0N.js +0 -2
  129. package/dist/assets/LiveModuleDocument-CuOBVz3A.js +0 -2
  130. package/dist/assets/LutAssetDocument-IyEir1rq.js +0 -1
  131. package/dist/assets/ModelAssetDocument-DNStNyCc.js +0 -1
  132. package/dist/assets/NonThreeAuthoringBootstrap-BE15Wpmw.js +0 -2
  133. package/dist/assets/OBJLoader-CopWRneC.js +0 -5
  134. package/dist/assets/Object3DDocumentToolbar-5Dv_8caG.js +0 -1
  135. package/dist/assets/Object3DPreview-C09u9uQZ.js +0 -2
  136. package/dist/assets/OnlineAssetDetail-DOPUI1iu.js +0 -1
  137. package/dist/assets/OrbitControls-DrFzvAAB.js +0 -1
  138. package/dist/assets/PLYLoader-D_esTZ2f.js +0 -2
  139. package/dist/assets/QuarksAssetDocument-BbSJ970L.js +0 -2
  140. package/dist/assets/RectAreaLightUniformsLib-u1ciScuw.js +0 -1
  141. package/dist/assets/STLLoader-Cl5I0sAi.js +0 -1
  142. package/dist/assets/SourceAssetViewer-DwhuqbA4.js +0 -1
  143. package/dist/assets/StageHost-D-o8MsFS.js +0 -1122
  144. package/dist/assets/TDSLoader-KKBg8ef1.js +0 -1
  145. package/dist/assets/ToolObject3DPreview-ILbch3kN.js +0 -1
  146. package/dist/assets/Toolbar-DYJjJKTt.js +0 -1
  147. package/dist/assets/TransientHint-D94hsJSR.js +0 -1
  148. package/dist/assets/VideoViewer-Bx3FPbgE.js +0 -1
  149. package/dist/assets/ViewportShadingMenu-B3N6hSdN.js +0 -1
  150. package/dist/assets/animation-mixers.service-N9HxGOMf.js +0 -1
  151. package/dist/assets/asset-editor-persistence-DGD05u26.js +0 -1
  152. package/dist/assets/blender-node-editor.document-BT2M622g.js +0 -1
  153. package/dist/assets/blender-runtime-host-4ufXy47O.js +0 -4
  154. package/dist/assets/blender-runtime.document-DeFQQsF6.js +0 -8
  155. package/dist/assets/blender-timeline.document-BnlSdxy0.js +0 -1
  156. package/dist/assets/blender-uv-editor.document-UC-XeNn0.js +0 -1
  157. package/dist/assets/blender-version.status-BZP39oH7.js +0 -1
  158. package/dist/assets/blender.command-IGP5wuda.js +0 -1
  159. package/dist/assets/blender.keymap-GAQgeklK.js +0 -1
  160. package/dist/assets/browserAll-2r3AVaAO.js +0 -14
  161. package/dist/assets/canvas-preview-frames-CO60PDM7.js +0 -5
  162. package/dist/assets/index-B4bmKkgY.css +0 -1
  163. package/dist/assets/index-cpXNKgvz.js +0 -1498
  164. package/dist/assets/live-mixers-BRkRHd6g.js +0 -1
  165. package/dist/assets/material-preview.view-DqNcpd_b.js +0 -1
  166. package/dist/assets/model-inspection-JC6gbV8Q.js +0 -1
  167. package/dist/assets/models.finder-BplPGS4I.js +0 -1
  168. package/dist/assets/product-CfZaqLpw.js +0 -1
  169. package/dist/assets/properties-bone-constraints.inspector-Di8kNtAi.js +0 -1
  170. package/dist/assets/properties-bone.inspector-CqAIKNsE.js +0 -1
  171. package/dist/assets/properties-collection.inspector-DpHC_fXW.js +0 -1
  172. package/dist/assets/properties-constraints.inspector-C7G7NOZU.js +0 -1
  173. package/dist/assets/properties-data.inspector-D1sUUst6.js +0 -1
  174. package/dist/assets/properties-material.inspector-BUSjc8tl.js +0 -1
  175. package/dist/assets/properties-modifiers.inspector-Sq9bcfFz.js +0 -1
  176. package/dist/assets/properties-object.inspector-BzqiU_29.js +0 -1
  177. package/dist/assets/properties-output.inspector-BWpFqvfT.js +0 -1
  178. package/dist/assets/properties-particles.inspector-DO1KoaTz.js +0 -1
  179. package/dist/assets/properties-physics.inspector-BgkrTNSA.js +0 -1
  180. package/dist/assets/properties-render.inspector-BU5NOVoQ.js +0 -1
  181. package/dist/assets/properties-scene.inspector-DbMErJ48.js +0 -1
  182. package/dist/assets/properties-texture.inspector-toPpEwqp.js +0 -1
  183. package/dist/assets/properties-view-layer.inspector-COpx9iEK.js +0 -1
  184. package/dist/assets/properties-world.inspector-CxU0DrYX.js +0 -1
  185. package/dist/assets/react-three-rapier.esm-CN6t4A7c.js +0 -1
  186. package/dist/assets/stage-keyboard-CzlqI0nh.js +0 -1
  187. package/dist/assets/stage-overlay-set-DQeskS16.js +0 -1
  188. package/dist/assets/stage-presence-markers-S1lMOwIa.js +0 -1
  189. package/dist/assets/stage-transform-tools-Cqtv-ZQ1.js +0 -1
  190. package/dist/assets/story-capture-DmIUyEQn.js +0 -1
  191. package/dist/assets/story-mount-turn-2IYGgHob.js +0 -1
  192. package/dist/assets/story-pixi-preview-aw8xQhvF.js +0 -1
  193. package/dist/assets/story-three-preview-DDmMjlI8.js +0 -37
  194. package/dist/assets/transform-mode-request-DSPwviXs.js +0 -1
  195. package/dist/assets/vgai-shared-jsx-dev-runtime-DFDKL7fx.js +0 -1
  196. package/dist/assets/vgai-shared-jsx-runtime-DIqBpTut.js +0 -1
  197. package/dist/assets/viewport-pick-context-DkawXbEi.js +0 -1
  198. package/dist/assets/viewport-surface-status-DuININWe.js +0 -20
  199. package/dist/assets/webworkerAll-CqQUotBj.js +0 -101
  200. package/dist/assets/world-documents-DkBqH8VU.js +0 -3
@@ -0,0 +1,3 @@
1
+ import{j as a}from"./jsx-runtime-CAUTK36e.js";import{de as zo,df as Io,dg as Ro,dh as ce,aI as de,di as cn,dj as jo,ax as Ht,dk as Po,z as An,dl as Mo,dm as _e,dn as ue,dp as He,dq as ne,cH as pe,bP as Do,s as Ve,c9 as We,T as oe,dr as Fn,ds as Yn,dt as re,b$ as Dt,am as U,an as H,du as Lo,a8 as Xn,aS as Tt,dv as To,dw as $o,dx as Oo,dy as Nn,dz as Gn,dA as Bo,dB as Ao,dC as Fo,dD as Vt,A as Yo,M as Mt,bb as Xo,c as No,dE as Wt,d0 as Go,ba as _o,dF as Ho,dG as Vo,bT as fe,dH as dn,dI as un,dJ as pn,dK as Wo,dL as Ko,dM as Uo,dN as Zo,dO as qo,dP as nt,dQ as Jo,J as _n,dR as ke,bX as Qo,dS as X,dT as Be,dU as ze,dV as Ie,dW as Lt,dX as tr,dY as er,dZ as nr,d_ as or,d$ as rr,e0 as ir,e1 as sr,e2 as fn,e3 as ar,e4 as lr,e5 as cr,e6 as dr,e7 as ur,e8 as pr,e9 as fr,bN as Hn,ea as hr,eb as gr,al as $t,ec as xr,ed as Vn,ee as mr,ef as br,eg as yr,eh as vr,F as Wn,ei as wr,ej as Sr,ek as Er,el as Cr,em as kr,en as zr,da as Ir,eo as Rr,ep as jr,aj as Kt,eq as Re,er as Pr,es as Ut,et as Mr,eu as je,ev as hn,ew as Dr,y as Lr,ex as Tr,aQ as $r,ey as Or,ez as Br,eA as Ar,eB as Fr,eC as Yr,eD as Xr,cB as Nr,H as Gr,eE as gn,eF as _r,cz as Hr}from"./index-Dm_h-T4x.js";import{r as d}from"./index-DaQZGF7d.js";import{s as Vr,p as Wr,a as Kr}from"./layered-pick-CT4HlEpW.js";import{B as kt,q as xn,I as Ur}from"./NonThreeAuthoringBootstrap-C0pCfkJ4.js";import"./index-CtzuWnCS.js";import"./index-jib6KJY8.js";import{T as Zr}from"./Toolbar-DI0LGx25.js";import{T as qr}from"./TransientHint-myZtSdd6.js";import{s as Jr,g as Qr,a as ti,f as ei,t as ni,z as oi,b as ri}from"./react-story-board-CkaP4mEG.js";import{v as Ke}from"./viewport-editor-controls-BYaAZ_Ku.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./client-mkWk8S65.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";import"./transform-mode-request-Cz6fzydi.js";const Ae="#191c22",ii="rgba(255, 255, 255, 0.2)",si={width:null,height:null};let ee=si;const Fe=new Set;function Kn(){return ee}function ie(t,e){const n=t===null?null:Math.max(1,Math.round(t)),r=e===null?null:Math.max(1,Math.round(e));if(!(ee.width===n&&ee.height===r)){ee={width:n,height:r};for(const s of Fe)s()}}function ai(){ie(null,null)}function Un(t){return Fe.add(t),()=>Fe.delete(t)}const se=[],mn=new Set,li=[];function ci(){return se.length===0?li:se}function Ct(t){for(let e=se.length-1;e>=0;e--){const n=se[e];if(n&&n.kind===t)return n}return null}function di(t){return mn.add(t),()=>{mn.delete(t)}}const ui=1;function Zn(t){const e=[];for(const{worldId:n,adapter:r}of t.childAdapters()){if(!(r instanceof kt))continue;const s=r.inspector.get(n,"kind");if(s!=="dom"&&s!=="canvas"||r.inspector.get(n,"reason")!==void 0)continue;const u=r.inspector.get(n,"adapter");u?.startsWith("ingest")||u?.startsWith("module")||e.push({worldId:n,kind:s,path:r.inspector.get(n,"path"),zOrder:Number(r.inspector.get(n,"zOrder")??0),pausable:r.inspector.get(n,"pausable")!==!1})}return e}function pi(t){return Zn(t)}function Pe(t,e){return t.childAdapters().some(n=>n.worldId===e)}function qn(t,e,n="dom"){const r=An(e)?"none":"block";t.style.display=r,t.style.pointerEvents=Ct(n)?.alwaysInteractive||Mo(e)?"auto":"none";for(const s of Array.from(t.parentElement?.children??[]))s instanceof HTMLElement&&s.dataset.vgaiStoryBoardChromeFor===e&&(s.style.display=r)}function fi(t,e,n,r){const{worldId:s}=e,i=document.createElement("div");return i.dataset.worldId=s,i.dataset.vgaiRootSurface="true",r&&(i.dataset.vgaiCanvasScene="true"),i.style.position="absolute",i.style.top="0",i.style.left="0",i.style.width="100%",i.style.height="100%",i.style.zIndex=String(n),i.style.contain="layout paint",i.style.cssText+="font: initial; color: initial; letter-spacing: normal; word-spacing: normal; text-align: start; text-indent: 0; text-transform: none; white-space: normal; direction: ltr;",qn(i,s,e.kind),Ye(i),t.appendChild(i),i}function Ye(t){if(t.dataset.vgaiCanvasScene==="true"){t.style.transform="",t.style.width="100%",t.style.height="100%";return}if(t.style.transform=_e(ue())??"",t.style.transformOrigin="0 0",t.dataset.vgaiReactStoryBoard==="true")return;const e=Kn();t.style.width=e.width===null?"100%":`${e.width}px`,t.style.height=e.height===null?"100%":`${e.height}px`}const Zt=new Map;function hi(t,e,n,r,s,i,u){i?i.canvasSceneView.reset():zo(),ai();const y=de();if(!i&&y?.config.resolution&&ie(y.config.resolution.width,y.config.resolution.height),n.playState!=="stopped"){let f=!1,P=!1;const T=n.subscribe(()=>{f||P||n.playState!=="stopped"||(P=!0,f||xn())});return()=>{f=!0,T()}}const v=y?.rootPath,w=r?[...r]:Zn(e);if(w.length===0||!v)return()=>{};const E=v,R=Vr(w.map(f=>({id:f.worldId,zOrder:f.zOrder}))).map(f=>w.find(P=>P.worldId===f.id)),I=new Map(R.map(f=>[f.worldId,f])),g=new Map,h=new Map,c=new Map,m=new Set,p=new Set,k=new Set;let M=!1,D=!1,z=!1;function Z(){for(const f of h.values())try{f()}catch(P){Ht.error(`[design-time-layers] dispose failed: ${P}`,"authoring")}h.clear();for(const f of g.values())f.remove();g.clear();for(const f of R)s?.(f.worldId,null)}function $(){Z();for(const f of m){const P=I.get(f);if(!P)continue;const T={id:P.worldId,kind:P.kind,entryOrScenePath:P.path,zOrder:P.zOrder,pausable:P.pausable};e.replaceChild(f,new kt(n,T,"Design-time layer suspended by play mode — Stop restores it."))}m.clear(),n.notifyIngestEdit()}function J(f,P,T){const B=Ct(f.kind);if(!B){p.add(f.worldId);return}p.delete(f.worldId);const W=(c.get(f.worldId)??0)+1;c.set(f.worldId,W);const F=fi(t,f,ui+P,!!i);g.set(f.worldId,F);const St={projectRootPath:E,store:n,...i?{view:i.canvasSceneView}:{},...u?{activationDocumentId:u}:{}},At=Zt.get(f.worldId),ut=(async()=>(At&&await At,B.mount(f,F,St)))().then(N=>{if(M||D||c.get(f.worldId)!==W){N.dispose();return}if(N.adapter)Pe(e,f.worldId)&&(e.replaceChild(f.worldId,N.adapter),m.add(f.worldId)),s?.(f.worldId,N.adapter);else if(N.pick){const q={id:f.worldId,kind:f.kind,entryOrScenePath:f.path,zOrder:f.zOrder,pausable:f.pausable};e.replaceChild(f.worldId,new kt(n,q,void 0,N.pick)),m.add(f.worldId)}h.set(f.worldId,N.dispose),cn(f.worldId),n.notifyIngestEdit(),T?.()}).catch(N=>{if(c.get(f.worldId)!==W||(T?.(),F.remove(),g.get(f.worldId)===F&&g.delete(f.worldId),M||D))return;const q=jo(N);Ht.error(`[design-time-layers] world "${f.worldId}" (${f.kind}) failed to mount: ${q}`,"authoring");const It={id:f.worldId,kind:f.kind,entryOrScenePath:f.path,zOrder:f.zOrder,pausable:f.pausable};s?.(f.worldId,null),Pe(e,f.worldId)&&e.replaceChild(f.worldId,new kt(n,It,q)),Po({worldId:f.worldId,kind:f.kind,identity:B.identity,message:q}),n.notifyIngestEdit()});Zt.set(f.worldId,ut),ut.then(()=>{Zt.get(f.worldId)===ut&&Zt.delete(f.worldId)})}R.forEach((f,P)=>{J(f,P)});function wt(f,P){const T=h.get(f.worldId);h.delete(f.worldId);const B=g.get(f.worldId);g.delete(f.worldId),J(f,P,()=>{const F=g.get(f.worldId);if(F&&(F.style.visibility=""),T)try{T()}catch(St){Ht.error(`[design-time-layers] re-projection dispose failed: ${St}`,"authoring")}B?.remove()});const W=g.get(f.worldId);W&&W!==B&&(W.style.visibility="hidden")}function zt(f,P){const T=h.get(f.worldId);if(h.delete(f.worldId),T)try{T()}catch(W){Ht.error(`[design-time-layers] remount dispose failed: ${W}`,"authoring")}const B=g.get(f.worldId);B&&(B.remove(),g.delete(f.worldId)),J(f,P)}const at=new Map;function Q(){for(const[f,P]of at)Ct(f.kind)!==f&&(P(),at.delete(f));for(const f of ci()){if(at.has(f)||Ct(f.kind)!==f||!R.some(B=>B.kind===f.kind))continue;const P=[],T=B=>()=>{M||D||n.playState!=="stopped"||R.forEach((W,F)=>{W.kind===f.kind&&B(W,F)})};f.remountWhen&&P.push(f.remountWhen(T(zt))),f.reprojectWhen&&P.push(f.reprojectWhen(T(wt))),at.set(f,()=>{for(const B of P)B()})}}Q();const xe=di(()=>{M||D||n.playState!=="stopped"||(R.forEach((f,P)=>{p.has(f.worldId)&&Ct(f.kind)&&(k.delete(f.worldId),cn(f.worldId),J(f,P))}),Q())}),xt=()=>{if(M||D)return;let f=!1;for(const P of R){if(!p.has(P.worldId)||k.has(P.worldId)||Ct(P.kind)||(k.add(P.worldId),!Pe(e,P.worldId)))continue;const T={id:P.worldId,kind:P.kind,entryOrScenePath:P.path,zOrder:P.zOrder,pausable:P.pausable};e.replaceChild(P.worldId,new kt(n,T,`No package in this editor registered a design-time mount for a "${P.kind}" world, so there is nothing here to author it with.`)),f=!0}f&&n.notifyIngestEdit()},A=Io(xt);Ro()&&xt();const me=ce(()=>{for(const f of g.values())Ye(f)}),be=Un(()=>{for(const f of g.values())Ye(f)}),mt=n.subscribe(()=>{if(!D&&n.playState!=="stopped"){D=!0,$();return}if(D&&!z&&n.playState==="stopped"&&!M){z=!0,M||xn();return}if(!D)for(const[f,P]of g)qn(P,f,I.get(f)?.kind??"dom")});return()=>{M=!0;for(const f of at.values())f();at.clear(),xe(),A(),mt(),me(),be(),Z()}}const gi=.1,xi=4,Ue=.02,Jn=32,Qn=.002,mi=4;function Xe(t,e,n){return e===1?t*16:e===2?t*n:t}function bi(t,e){let n=Xe(e.deltaX,e.deltaMode,e.bounds.width),r=Xe(e.deltaY,e.deltaMode,e.bounds.height);if(e.ctrlKey||e.metaKey){const s=Math.min(xi,Math.max(gi,t.zoom*Math.exp(-r*Qn))),i=e.clientX-e.bounds.left,u=e.clientY-e.bounds.top,y=(i-t.x)/t.zoom,v=(u-t.y)/t.zoom;return{x:i-y*s,y:u-v*s,zoom:s}}return e.shiftKey&&n===0&&(n=r,r=0),{x:t.x-n,y:t.y-r,zoom:t.zoom}}function yi(t,e){const n=Xe(e.deltaY,e.deltaMode,e.bounds.height),r=Math.min(Jn,Math.max(Ue,t.zoom*Math.exp(-n*Qn))),s=e.clientX-e.bounds.left,i=e.clientY-e.bounds.top,u=(s-t.x)/t.zoom,y=(i-t.y)/t.zoom;return{x:s-u*r,y:i-y*r,zoom:r}}function Me(t){return t instanceof Element&&t.closest('[data-vgai-canvas-navigation-ignore="true"]')!==null}function to(t,e,n,r={}){let s=null,i=!1,u="";const y=()=>t.querySelector('[data-testid="world-selection-overlay-interaction"]'),v=h=>{t.dataset.canvasPanning=h?"true":"false",t.style.cursor=h?"grabbing":"";const c=y();c&&(h?(u=c.style.cursor,c.style.cursor="grabbing"):c.style.cursor=u)},w=h=>{if(!s||h.pointerId!==s.pointerId)return;const c=s.button===1?4:2;if((h.buttons&c)===0){E(h);return}const m=h.clientX-s.startClientX,p=h.clientY-s.startClientY;if(!s.moved){if(Math.hypot(m,p)<=mi)return;s.moved=!0,v(!0)}e.setPan(s.startPan.x+m,s.startPan.y+p)},E=h=>{if(!s||h.pointerId!==s.pointerId)return;const c=s.pointerId;s.button===2&&s.moved&&(i=!0),s=null,v(!1),t.hasPointerCapture?.(c)&&t.releasePointerCapture(c),window.removeEventListener("pointermove",w),window.removeEventListener("pointerup",E),window.removeEventListener("pointercancel",E)},S=h=>{const c=h.button===1,m=r.rightDragPans===!0&&h.button===2;!c&&!m||Me(h.target)||(m&&(i=!1),h.preventDefault(),c&&h.stopPropagation(),s={pointerId:h.pointerId,button:h.button,startClientX:h.clientX,startClientY:h.clientY,startPan:e.get(),moved:c},t.setPointerCapture?.(h.pointerId),v(c),window.addEventListener("pointermove",w),window.addEventListener("pointerup",E),window.addEventListener("pointercancel",E))},R=h=>{h.button===1&&!Me(h.target)&&h.preventDefault()},I=h=>{r.rightDragPans!==!0||!(s?.button===2&&s.moved)&&!i||(i=!1,h.preventDefault(),h.stopPropagation())},g=h=>{if(Me(h.target))return;h.preventDefault(),h.stopPropagation();const c=n(e.get(),{clientX:h.clientX,clientY:h.clientY,deltaX:h.deltaX,deltaY:h.deltaY,deltaMode:h.deltaMode,ctrlKey:h.ctrlKey,metaKey:h.metaKey,shiftKey:h.shiftKey,bounds:t.getBoundingClientRect()});e.setView(c.x,c.y,c.zoom)};return t.addEventListener("pointerdown",S,!0),t.addEventListener("lostpointercapture",E,!0),t.addEventListener("mousedown",R,!0),t.addEventListener("contextmenu",I,!0),t.addEventListener("wheel",g,{capture:!0,passive:!1}),()=>{s=null,v(!1),t.removeEventListener("pointerdown",S,!0),t.removeEventListener("lostpointercapture",E,!0),t.removeEventListener("mousedown",R,!0),t.removeEventListener("contextmenu",I,!0),t.removeEventListener("wheel",g,!0),window.removeEventListener("pointermove",w),window.removeEventListener("pointerup",E),window.removeEventListener("pointercancel",E)}}function vi(t,e=He){return to(t,e,bi)}function wi(t,e){return to(t,e,yi,{rightDragPans:!0})}const Ot=[],bn=new Set,Si=[];function Ei(){return Ot.length===0?Si:Ot}function Ci(t){for(let e=Ot.length-1;e>=0;e--){const n=Ot[e];if(n&&n.medium===t)return n}return null}function ki(t){return Ot.find(e=>e.documentId===t)??null}function zi(t){return bn.add(t),()=>{bn.delete(t)}}function yt(t){return t.map(e=>`“${e}”`).join(", ")}function Ii(t,e){const n=e.map(r=>r.worldId);return{tone:"error",title:n.length===1?`${t} root ${yt(n)} failed`:`${n.length} ${t} roots failed`,description:`${e.map(r=>`${r.worldId} (${r.kind}, ${r.identity}): ${r.message}`).join(`
2
+ `)}
3
+ If this followed an edit, Undo (Ctrl+Z) restores the previous source and remounts.`}}function Ri(t,e){return{tone:"loading",title:e.length===0?`Loading ${t}`:e.length===1?`Loading ${t} root ${yt(e)}`:`Loading ${e.length} ${t} roots`,description:e.length===0?"Reading the project declaration to identify the root that belongs here.":`Waiting for ${yt(e)} to finish mounting.`}}function ji(t,e){return e.length===0?{tone:"neutral",title:`No ${t} root`,description:"No declared root belongs to this surface."}:{tone:"neutral",title:"No renderable content",description:(e.length===1?`Root ${yt(e)} mounted successfully but currently produces no renderable content.`:`Roots ${yt(e)} mounted successfully but currently produce no renderable content.`)+" If this world builds its content under its game systems, press Play (▶) to run it."}}function Pi(t){if(t.content==="present")return null;if(t.playSuspended)return{tone:"neutral",title:"Editing paused during Play",description:`${yt(t.rootIds)} is running in the Game tab. Press Stop (⏹) to edit it here.`};const e=new Set(t.rootIds),n=(t.failures??[]).filter(i=>e.has(i.worldId));if(n.length>0)return Ii(t.surface,n);if(t.disclosure)return{tone:"neutral",title:`No ${t.surface} editor for ${yt(t.rootIds)}`,description:t.disclosure};const r=(t.readiness??[]).filter(i=>i.state==="waiting"&&e.has(i.rootId)).map(i=>i.rootId),s=r.length>0?r:t.rootIds;return t.phase==="loading"||r.length>0||t.content==="unknown"?Ri(t.surface,s):ji(t.surface,t.rootIds)}const ae=globalThis;function Ne(){return ae.__vgaiBreakpointListeners??=new Set,ae.__vgaiBreakpointListeners}function Mi(){return ae.__vgaiActiveBreakpoint??null}function Di(t){ae.__vgaiActiveBreakpoint=t;for(const e of Ne())e()}function Li(t){return Ne().add(t),()=>Ne().delete(t)}const eo="vgai:board-guides:v1";function no(){return typeof window>"u"?null:window.localStorage}function oo(){try{return de()?.rootPath??"(no-project)"}catch{return"(no-project)"}}function ro(){try{return JSON.parse(no()?.getItem(eo)??"{}")}catch{return{}}}function Ti(t){try{no()?.setItem(eo,JSON.stringify(t))}catch{}}const Ge=new Set;let De=null,yn=Date.now()%1e6;function Bt(){return De||(De=ro()[oo()]??{}),De}function Ze(){const t=ro();t[oo()]=Bt(),Ti(t);for(const e of Ge)e()}const $i=[];function he(t){return Bt()[t]??$i}function Oi(t){return Ge.add(t),()=>Ge.delete(t)}function Bi(t,e,n){yn+=1;const r=`guide-${yn}`;return Bt()[t]=[...he(t),{id:r,axis:e,value:n}],Ze(),r}function vn(t,e,n){Bt()[t]=he(t).map(r=>r.id===e?{...r,value:n}:r),Ze()}function wn(t,e){Bt()[t]=he(t).filter(n=>n.id!==e),Ze()}const et=16,Le="rgba(255, 82, 82, 0.9)",Sn="rgba(18, 22, 26, 0.92)",qt="rgba(255, 255, 255, 0.28)";function Ai(t){return[10,25,50,100,250,500,1e3,2500,5e3].find(n=>n*t>=60)??1e4}function En(t){return Math.abs(t)>=1e3?`${t/1e3}k`:String(t)}function Fi({docId:t,containerRef:e}){const n=d.useSyncExternalStore(ce,ue),r=d.useSyncExternalStore(Oi,()=>he(t)),[s,i]=d.useState(null),u=d.useRef(null);d.useEffect(()=>{const c=e.current;if(!c)return;const m=c.getBoundingClientRect();return m.left,m.top,n.x,n.y,n.zoom,()=>void 0},[t,e,n.x,n.y,n.zoom]);const y=(c,m)=>Math.round((c-(m==="x"?n.x:n.y))/n.zoom),v=(c,m)=>(m==="x"?n.x:n.y)+c*n.zoom,w=c=>{const m=e.current?.getBoundingClientRect();return m?{x:c.clientX-m.left,y:c.clientY-m.top}:{x:0,y:0}},E=c=>m=>{m.preventDefault(),m.currentTarget.setPointerCapture(m.pointerId);const p=w(m);i({kind:"place",axis:c,id:null,at:c==="x"?p.x:p.y})},S=c=>m=>{m.preventDefault(),m.stopPropagation(),m.currentTarget.setPointerCapture(m.pointerId);const p=w(m);i({kind:"move",axis:c.axis,id:c.id,at:c.axis==="x"?p.x:p.y})},R=c=>{if(!s)return;const m=w(c),p=s.axis==="x"?m.x:m.y;i({...s,at:p}),s.kind==="move"&&s.id&&vn(t,s.id,y(p,s.axis))},I=c=>{if(!s)return;const m=w(c),p=s.axis==="x"?m.x:m.y,k=p<=et;s.kind==="place"?k||Bi(t,s.axis,y(p,s.axis)):s.id&&(k?wn(t,s.id):vn(t,s.id,y(p,s.axis))),i(null)},g=c=>{const m=e.current,p=m?c==="x"?m.clientWidth:m.clientHeight:0,k=Ai(n.zoom),M=Math.ceil(y(et,c)/k)*k,D=y(p,c),z=[];for(let Z=M;Z<=D&&z.length<200;Z+=k)z.push(Z);return z},h={position:"absolute",background:Sn,zIndex:61,userSelect:"none",touchAction:"none",overflow:"hidden"};return a.jsxs("div",{ref:u,"data-testid":"board-rulers",style:{position:"absolute",inset:0,pointerEvents:"none",zIndex:60},onPointerMove:R,onPointerUp:I,children:[r.map(c=>{const m=v(c.value,c.axis),p=c.axis==="x";return a.jsx("div",{"data-testid":`board-guide-${c.axis}-${c.value}`,title:`${c.axis} = ${c.value} — drag to move, drop on the ruler or double-click to remove`,onPointerDown:S(c),onPointerMove:R,onPointerUp:I,onDoubleClick:()=>wn(t,c.id),style:{position:"absolute",pointerEvents:"auto",cursor:p?"col-resize":"row-resize",zIndex:60,...p?{left:m-2,top:0,bottom:0,width:5}:{top:m-2,left:0,right:0,height:5}},children:a.jsx("div",{style:{position:"absolute",background:Le,...p?{left:2,top:0,bottom:0,width:1}:{top:2,left:0,right:0,height:1}}})},c.id)}),s&&a.jsx("div",{style:{position:"absolute",background:Le,zIndex:62,...s.axis==="x"?{left:s.at,top:0,bottom:0,width:1}:{top:s.at,left:0,right:0,height:1}},children:a.jsx("span",{style:{position:"absolute",...s.axis==="x"?{top:et+4,left:4}:{left:et+4,top:4},fontSize:9,fontFamily:"ui-monospace, monospace",color:Le,background:Sn,padding:"1px 3px",borderRadius:3,whiteSpace:"nowrap"},children:y(s.at,s.axis)})}),a.jsx("div",{"data-testid":"board-ruler-top",onPointerDown:E("y"),style:{...h,top:0,left:et,right:0,height:et,cursor:"row-resize",pointerEvents:"auto"},children:g("x").map(c=>a.jsx("span",{style:{position:"absolute",left:v(c,"x"),bottom:0,borderLeft:`1px solid ${qt}`,height:5},children:a.jsx("span",{style:{position:"absolute",left:2,bottom:3,fontSize:8,color:qt,fontFamily:"ui-monospace, monospace"},children:En(c)})},c))}),a.jsx("div",{"data-testid":"board-ruler-left",onPointerDown:E("x"),style:{...h,top:et,left:0,bottom:0,width:et,cursor:"col-resize",pointerEvents:"auto"},children:g("y").map(c=>a.jsx("span",{style:{position:"absolute",top:v(c,"y"),right:0,borderTop:`1px solid ${qt}`,width:5},children:a.jsx("span",{style:{position:"absolute",top:1,right:3,fontSize:8,color:qt,fontFamily:"ui-monospace, monospace",writingMode:"vertical-rl"},children:En(c)})},c))}),a.jsx(Yi,{}),a.jsx("div",{style:{...h,top:0,left:0,width:et,height:et,borderRight:`1px solid ${ne.border}`,borderBottom:`1px solid ${ne.border}`}})]})}function Yi(){const t=d.useSyncExternalStore(Li,Mi);return t?a.jsxs("button",{type:"button","data-testid":"board-breakpoint-pill",title:"Style edits are scoped to this breakpoint — click to return to Base",onClick:()=>Di(null),style:{position:"absolute",top:et+8,right:12,zIndex:62,pointerEvents:"auto",background:"rgba(18, 22, 26, 0.92)",color:ne.accent,border:`1px solid ${ne.accent}`,borderRadius:999,fontSize:10,padding:"3px 10px",cursor:"pointer"},children:["@ ",t," · editing this breakpoint — click to clear"]}):null}const Cn=new WeakMap;let kn=0;function vt(t){let e=Cn.get(t);return e||(e={guides:[],listeners:new Set,revision:0},Cn.set(t,e)),e}function ge(t){t.revision+=1;for(const e of t.listeners)e()}function qe(t){return vt(t).guides}function Je(t){return vt(t).revision}function Qe(t,e){const n=vt(t);return n.listeners.add(e),()=>n.listeners.delete(e)}function Xi(t,e,n){kn+=1;const r=vt(t),s=`canvas-guide-${kn}`;return r.guides=[...r.guides,{id:s,axis:e,value:n}],ge(r),s}function io(t,e,n){const r=vt(t),s=r.guides.map(i=>i.id===e?{...i,value:n}:i);s.every((i,u)=>i===r.guides[u])||(r.guides=s,ge(r))}function Ni(t,e){const n=vt(t),r=n.guides.filter(s=>s.id!==e);r.length!==n.guides.length&&(n.guides=r,ge(n))}function Gi(t){const e=vt(t);e.guides.length!==0&&(e.guides=[],ge(e))}const zn="#111214";function so(t,e=32){let n=e>0?e:32;for(;n*t<12;)n*=2;for(;n*t>48;)n/=2;return n}function Jt(t){if(t.length===0)return null;let e=Number.POSITIVE_INFINITY,n=Number.POSITIVE_INFINITY,r=Number.NEGATIVE_INFINITY,s=Number.NEGATIVE_INFINITY;for(const i of t)e=Math.min(e,i.x),n=Math.min(n,i.y),r=Math.max(r,i.x+i.width),s=Math.max(s,i.y+i.height);return{x:e,y:n,width:r-e,height:s-n}}function Te(t,e,n){if(!n||!(n.width>0)||!(n.height>0))return;const r=Math.max(1,t.clientWidth-96),s=Math.max(1,t.clientHeight-96),i=Math.min(4,Math.max(Ue,Math.min(r/n.width,s/n.height)));e.setView(t.clientWidth/2-(n.x+n.width/2)*i,t.clientHeight/2-(n.y+n.height/2)*i,i)}function _i({view:t,documentId:e}){const n=pe();d.useSyncExternalStore(n.subscribe,n.getSnapshot),d.useEffect(()=>Do(e,"canvas"),[e]),d.useSyncExternalStore(Ve,We);const r=oe(e),s=Fn(e),i=de()?.config.resolution,u=d.useSyncExternalStore(t.subscribe,t.get,t.get);d.useSyncExternalStore(d.useCallback(I=>Qe(t,I),[t]),d.useCallback(()=>Je(t),[t]));const y=qe(t),v=n.snap2D,w=so(u.zoom,v.step)*u.zoom,E=w*4,S=u.x+v.offsetX*u.zoom,R=u.y+v.offsetY*u.zoom;return a.jsxs("div",{"data-testid":"canvas-scene-backdrop",style:{position:"absolute",inset:0,zIndex:2,overflow:"hidden",pointerEvents:"none"},children:[r&&a.jsx("div",{style:{position:"absolute",inset:0,backgroundImage:"linear-gradient(rgba(255,255,255,.075) 1px, transparent 1px),linear-gradient(90deg, rgba(255,255,255,.075) 1px, transparent 1px),linear-gradient(rgba(255,255,255,.14) 1px, transparent 1px),linear-gradient(90deg, rgba(255,255,255,.14) 1px, transparent 1px)",backgroundPosition:`${S}px ${R}px`,backgroundSize:`${w}px ${w}px, ${w}px ${w}px, ${E}px ${E}px, ${E}px ${E}px`}}),s.viewport&&i&&i.width>0&&i.height>0&&a.jsx("div",{"data-testid":"canvas-scene-viewport-rect",style:{position:"absolute",left:u.x,top:u.y,width:i.width*u.zoom,height:i.height*u.zoom,boxSizing:"border-box",borderStyle:"solid",borderWidth:1,borderColor:"rgba(160, 120, 255, .75)"}}),s.origin&&a.jsxs(a.Fragment,{children:[a.jsx("div",{"data-testid":"canvas-scene-origin-y",style:{position:"absolute",left:0,right:0,top:u.y,height:1,background:"rgba(238, 91, 91, .8)"}}),a.jsx("div",{"data-testid":"canvas-scene-origin-x",style:{position:"absolute",top:0,bottom:0,left:u.x,width:1,background:"rgba(87, 199, 126, .8)"}}),a.jsx("div",{style:{position:"absolute",left:u.x+6,top:u.y+6,color:"rgba(255,255,255,.68)",font:"10px ui-monospace, SFMono-Regular, Menlo, monospace"},children:"0, 0"})]}),s.guides&&y.map(I=>a.jsx("div",{"data-testid":`canvas-scene-guide-${I.axis}`,title:`${I.axis.toUpperCase()} ${Math.round(I.value*100)/100} · drag to move · right-click to remove`,onContextMenu:g=>{g.preventDefault(),Ni(t,I.id)},onPointerDown:g=>{g.preventDefault(),g.stopPropagation();const h=g.currentTarget.parentElement?.getBoundingClientRect();if(!h)return;const c=p=>{const k=I.axis==="x"?p.clientX-h.left:p.clientY-h.top,M=t.get();io(t,I.id,(k-(I.axis==="x"?M.x:M.y))/M.zoom)},m=()=>{window.removeEventListener("pointermove",c),window.removeEventListener("pointerup",m)};window.addEventListener("pointermove",c),window.addEventListener("pointerup",m,{once:!0})},style:{position:"absolute",pointerEvents:"auto",cursor:I.axis==="x"?"ew-resize":"ns-resize",...I.axis==="x"?{left:u.x+I.value*u.zoom-4,top:20,bottom:0,width:9,borderLeft:"1px solid rgba(74, 180, 255, .95)"}:{top:u.y+I.value*u.zoom-4,left:20,right:0,height:9,borderTop:"1px solid rgba(74, 180, 255, .95)"}}},I.id)),s.rulers&&a.jsx(Hi,{view:t})]})}function Hi({view:t}){const e=d.useSyncExternalStore(t.subscribe,t.get,t.get),n=d.useRef(null),r=d.useRef(null),[s,i]=d.useState({width:0,height:0});d.useEffect(()=>{const S=()=>{const I=n.current?.clientWidth??0,g=r.current?.clientHeight??0;i(h=>h.width===I&&h.height===g?h:{width:I,height:g})};if(S(),typeof ResizeObserver>"u")return;const R=new ResizeObserver(S);return n.current&&R.observe(n.current),r.current&&R.observe(r.current),()=>R.disconnect()},[]);const u=(S,R)=>{if(!(R>0))return[];const I=S==="x"?e.x:e.y,g=so(e.zoom),h=g*e.zoom,c=20,m=Math.ceil((c-I)/h),p=Math.floor((c+R-I)/h);return Array.from({length:Math.max(0,p-m+1)},(k,M)=>{const D=m+M;return{major:D%4===0,screen:I+D*h-c,value:D*g}})},y=u("x",s.width),v=u("y",s.height),w=(S,R)=>{R.preventDefault(),R.stopPropagation();const I=R.currentTarget.parentElement?.getBoundingClientRect();if(!I)return;const g=(p,k)=>{const M=t.get();return((S==="x"?p-I.left:k-I.top)-(S==="x"?M.x:M.y))/M.zoom},h=Xi(t,S,g(R.clientX,R.clientY)),c=p=>io(t,h,g(p.clientX,p.clientY)),m=()=>{window.removeEventListener("pointermove",c),window.removeEventListener("pointerup",m)};window.addEventListener("pointermove",c),window.addEventListener("pointerup",m,{once:!0})},E={position:"absolute",pointerEvents:"auto",backgroundColor:"rgba(24, 26, 30, .96)",border:0,borderColor:"rgba(255,255,255,.14)",boxSizing:"border-box"};return a.jsxs(a.Fragment,{children:[a.jsx("button",{ref:n,type:"button","data-testid":"canvas-scene-ruler-x","aria-label":"Horizontal ruler; drag to create a horizontal guide",onPointerDown:S=>w("y",S),style:{...E,left:20,right:0,top:0,height:20,borderBottomStyle:"solid",borderBottomWidth:1,cursor:"row-resize",padding:0,overflow:"hidden"},children:y.map(S=>a.jsx("span",{"aria-hidden":"true","data-ruler-axis":"x","data-ruler-value":S.value,style:{position:"absolute",left:S.screen,bottom:0,width:1,height:S.major?8:4,background:S.major?"rgba(255,255,255,.5)":"rgba(255,255,255,.28)",pointerEvents:"none"},children:S.major&&a.jsx("span",{style:{position:"absolute",left:3,bottom:5,color:"rgba(255,255,255,.62)",font:"9px ui-monospace, SFMono-Regular, Menlo, monospace",lineHeight:1,whiteSpace:"nowrap"},children:S.value})},S.value))}),a.jsx("button",{ref:r,type:"button","data-testid":"canvas-scene-ruler-y","aria-label":"Vertical ruler; drag to create a vertical guide",onPointerDown:S=>w("x",S),style:{...E,top:20,bottom:0,left:0,width:20,borderRightStyle:"solid",borderRightWidth:1,cursor:"col-resize",padding:0,overflow:"hidden"},children:v.map(S=>a.jsx("span",{"aria-hidden":"true","data-ruler-axis":"y","data-ruler-value":S.value,style:{position:"absolute",top:S.screen,right:0,width:S.major?8:4,height:1,background:S.major?"rgba(255,255,255,.5)":"rgba(255,255,255,.28)",pointerEvents:"none"},children:S.major&&a.jsx("span",{style:{position:"absolute",right:4,top:3,color:"rgba(255,255,255,.62)",font:"9px ui-monospace, SFMono-Regular, Menlo, monospace",lineHeight:1,whiteSpace:"nowrap",writingMode:"vertical-rl",transform:"rotate(180deg)"},children:S.value})},S.value))}),a.jsx("div",{style:{...E,left:0,top:0,width:20,height:20}})]})}function Vi({active:t,adapter:e,containerRef:n,view:r,documentId:s}){const i=pe();d.useSyncExternalStore(i.subscribe,i.getSnapshot),d.useSyncExternalStore(Ve,We);const u=oe(s),y=d.useSyncExternalStore(r.subscribe,r.get,r.get),[v,w]=d.useState(null),E=d.useCallback(c=>{const m=n.current;if(!m)return;const p=Math.min(Jn,Math.max(Ue,c)),k=m.clientWidth/2,M=m.clientHeight/2,D=(k-y.x)/y.zoom,z=(M-y.y)/y.zoom;r.setView(k-D*p,M-z*p,p)},[n,y,r]),S=d.useCallback(c=>{if(!e?.rects)return[];const m=[];for(const p of c){const k=e.rects.rect(p);k&&k.width>0&&k.height>0&&m.push(k)}return m},[e]),R=d.useCallback(()=>{const c=n.current;c&&Te(c,r,Jt(S(i.selectedEntityIds)))},[n,S,i,r]),I=d.useCallback(()=>{const c=n.current;if(!c)return;const m=r.get(),p=de()?.config.resolution,k=p?p.width/2:0,M=p?p.height/2:0;r.setView(c.clientWidth/2-k*m.zoom,c.clientHeight/2-M*m.zoom,m.zoom)},[n,r]),g=d.useCallback(()=>{const c=n.current,m=Jt(S(i.selectedEntityIds));if(!c||!m)return;const p=r.get();r.setView(c.clientWidth/2-(m.x+m.width/2)*p.zoom,c.clientHeight/2-(m.y+m.height/2)*p.zoom,p.zoom)},[n,S,i,r]),h=d.useCallback(()=>{const c=n.current;!c||!e||Te(c,r,Jt(S(Yn(e))))},[e,n,S,r]);return d.useEffect(()=>{if(t)return i.onViewportAction(c=>{if(c.type==="focus-entity"){const m=n.current;if(!m)return;Te(m,r,Jt(S([c.id])))}else c.type==="focus-selection"?R():c.type==="focus-scene"&&h()})},[t,n,h,R,S,i,r]),a.jsxs(a.Fragment,{children:[a.jsx(qr,{}),a.jsx(Zr,{dimensions:"2d"}),v?a.jsx(Ui,{mode:v,view:r,containerRef:n,onExit:()=>w(null)}):null,a.jsxs(re,{label:"2D scene display",className:"vgai-viewport-toolbar vgai-viewport-toolbar-right","data-vgai-canvas-navigation-ignore":"true",children:[a.jsx(Dt,{text:`Grid: ${u?"On":"Off"}`,children:a.jsx(U,{"aria-label":"Toggle 2D grid","aria-pressed":u,size:"comfortable",onClick:()=>Xn(s,!u),children:a.jsx(H,{icon:Lo,size:"md"})})}),a.jsx(Tt,{"aria-label":"Frame all",variant:"ghost",size:"comfortable",onClick:h,children:"Frame all"}),a.jsx(Dt,{text:"Pan (Space-drag pans in any mode)",children:a.jsx(U,{"aria-label":"Pan mode","aria-pressed":v==="pan",size:"comfortable",onClick:()=>w(v==="pan"?null:"pan"),children:a.jsx(H,{icon:To,size:"md"})})}),a.jsx(Dt,{text:"Ruler: drag to measure distance and angle",children:a.jsx(U,{"aria-label":"Ruler mode","aria-pressed":v==="ruler",size:"comfortable",onClick:()=>w(v==="ruler"?null:"ruler"),children:a.jsx(H,{icon:$o,size:"md"})})}),a.jsx(Ki,{adapter:e,selected:[...i.selectedEntityIds]}),a.jsx(Zi,{adapter:e,selected:[...i.selectedEntityIds]}),a.jsx(Wi,{documentId:s,view:r,hasSelection:i.selectedEntityIds.size>0,onCenterSelection:g,onFrameSelection:R})]}),a.jsxs(re,{label:"2D scene navigation",className:"vgai-canvas-scene-navigation","data-vgai-canvas-navigation-ignore":"true",children:[a.jsx(U,{"aria-label":"Center view",title:"Center view: the game's viewport in the middle of the pane, at this zoom",size:"comfortable",onClick:I,children:a.jsx(H,{icon:Oo,size:"md"})}),a.jsx(U,{"aria-label":"Zoom out",title:"Zoom out",size:"comfortable",onClick:()=>E(y.zoom/1.2),children:a.jsx(H,{icon:Nn,size:"md"})}),a.jsxs(Tt,{variant:"ghost","aria-label":"Reset zoom to 100%",title:"Reset zoom to 100%",size:"comfortable",onClick:()=>E(1),children:[Math.round(y.zoom*100),"%"]}),a.jsx(U,{"aria-label":"Zoom in",title:"Zoom in",size:"comfortable",onClick:()=>E(y.zoom*1.2),children:a.jsx(H,{icon:Gn,size:"md"})})]})]})}function Wi({documentId:t,view:e,hasSelection:n,onCenterSelection:r,onFrameSelection:s}){const[i,u]=d.useState(!1),y=d.useRef(null);d.useSyncExternalStore(Ve,We),d.useSyncExternalStore(d.useCallback(S=>Qe(e,S),[e]),d.useCallback(()=>Je(e),[e]));const v=Fn(t),w=[{label:"Grid",on:oe(t),toggle:()=>Xn(t,!oe(t))},{label:"Rulers",on:v.rulers,toggle:()=>Vt(t,{rulers:!v.rulers})},{label:"Guides",on:v.guides,toggle:()=>Vt(t,{guides:!v.guides})},{label:"Origin",on:v.origin,toggle:()=>Vt(t,{origin:!v.origin})},{label:"Viewport",on:v.viewport,toggle:()=>Vt(t,{viewport:!v.viewport})}],E=S=>()=>{S(),u(!1)};return a.jsxs(a.Fragment,{children:[a.jsx(Tt,{ref:y,"aria-label":"View","aria-haspopup":"menu","aria-expanded":i,variant:"ghost",size:"comfortable",onClick:()=>u(!i),children:"View"}),i&&a.jsxs(Yo,{anchorRef:y,align:"end",clamp:!0,"aria-label":"2D view",onDismiss:()=>u(!1),children:[w.map(S=>a.jsxs(Mt,{role:"menuitemcheckbox","aria-checked":S.on,onSelect:E(S.toggle),children:[a.jsx("span",{className:"vgai-menu-check",children:S.on&&a.jsx(H,{icon:Xo,size:"xs"})}),`Show ${S.label}`]},S.label)),a.jsx(No,{}),a.jsxs(Mt,{disabled:!n,onSelect:E(r),children:[a.jsx("span",{className:"vgai-menu-check"}),"Center Selection"]}),a.jsxs(Mt,{disabled:!n,onSelect:E(s),children:[a.jsx("span",{className:"vgai-menu-check"}),"Frame Selection"]}),a.jsxs(Mt,{disabled:qe(e).length===0,onSelect:E(()=>Gi(e)),children:[a.jsx("span",{className:"vgai-menu-check"}),"Clear Guides"]})]})]})}function Ki({adapter:t,selected:e}){const n=e.length===1?e[0]:null,r=n!==null&&t?.inspector?.get(n,"locked")===!0,s=r?"Unlock selected node":"Lock selected node";return a.jsx(Dt,{text:n?s:"Select one node to lock it",children:a.jsx(U,{"aria-label":s,"aria-pressed":r,size:"comfortable",disabled:n===null||!t?.inspector?.set,onClick:()=>{n&&t?.inspector?.set?.(n,"locked",!r)},children:a.jsx(H,{icon:r?Bo:Ao,size:"md"})})})}function Ui({mode:t,view:e,containerRef:n,onExit:r}){const s=d.useSyncExternalStore(e.subscribe,e.get,e.get),[i,u]=d.useState(null);d.useEffect(()=>{const g=h=>{h.key==="Escape"&&r()};return window.addEventListener("keydown",g),()=>window.removeEventListener("keydown",g)},[r]);const y=(g,h)=>{const c=n.current?.getBoundingClientRect(),m=e.get(),p=g-(c?.left??0),k=h-(c?.top??0);return{x:(p-m.x)/m.zoom,y:(k-m.y)/m.zoom}},v=g=>{if(g.button!==0)return;g.preventDefault(),g.currentTarget.setPointerCapture(g.pointerId);const h={clientX:g.clientX,clientY:g.clientY,pose:e.get()},c=y(g.clientX,g.clientY);t==="ruler"&&u({from:c,to:c});const m=k=>{t==="pan"?e.setView(h.pose.x+k.clientX-h.clientX,h.pose.y+k.clientY-h.clientY,h.pose.zoom):u({from:c,to:y(k.clientX,k.clientY)})},p=()=>{window.removeEventListener("pointermove",m),window.removeEventListener("pointerup",p)};window.addEventListener("pointermove",m),window.addEventListener("pointerup",p,{once:!0})},w=g=>({x:s.x+g.x*s.zoom,y:s.y+g.y*s.zoom}),E=i?Math.hypot(i.to.x-i.from.x,i.to.y-i.from.y):0,S=i?Math.atan2(i.to.y-i.from.y,i.to.x-i.from.x)*180/Math.PI:0,R=i?w(i.from):null,I=i?w(i.to):null;return a.jsx("div",{"data-testid":`canvas-scene-${t}-layer`,"data-vgai-canvas-navigation-ignore":"true",onPointerDown:v,style:{position:"absolute",inset:0,zIndex:60,cursor:t==="pan"?"grab":"crosshair"},children:R&&I?a.jsxs(a.Fragment,{children:[a.jsx("svg",{style:{position:"absolute",inset:0,width:"100%",height:"100%",pointerEvents:"none"},children:a.jsx("line",{x1:R.x,y1:R.y,x2:I.x,y2:I.y,stroke:"#ff5fa2",strokeWidth:1.5})}),a.jsx("div",{"data-testid":"canvas-scene-ruler-reading",style:{position:"absolute",left:(R.x+I.x)/2+8,top:(R.y+I.y)/2+8,padding:"2px 6px",borderRadius:4,background:"rgba(24, 26, 30, .92)",color:"#fff",font:"11px ui-monospace, SFMono-Regular, Menlo, monospace",pointerEvents:"none",whiteSpace:"nowrap"},children:`${E.toFixed(1)} px · ${S.toFixed(1)}° · Δ ${(i.to.x-i.from.x).toFixed(1)}, ${(i.to.y-i.from.y).toFixed(1)}`})]}):null})}function Zi({adapter:t,selected:e}){const n=e.length===1?e[0]:null,r=n!==null&&t?.inspector?.properties(n).some(u=>u.path==="grouped")===!0,s=n!==null&&t?.inspector?.get(n,"grouped")===!0,i=s?"Ungroup selected node":"Group selected node with its children";return a.jsx(Dt,{text:n?i:"Select one node to group it",children:a.jsx(U,{"aria-label":i,"aria-pressed":s,size:"comfortable",disabled:!r||!t?.inspector?.set,onClick:()=>{n&&t?.inspector?.set?.(n,"grouped",!s)},children:a.jsx(H,{icon:Fo,size:"md"})})})}const In={fill:null,desktop:{width:1440,height:900},tablet:{width:768,height:1024},mobile:{width:390,height:844}};function qi({boardViewport:t,containerRef:e,selectViewport:n,viewportValue:r}){return a.jsxs(a.Fragment,{children:[a.jsxs(_o,{"aria-label":"Responsive viewport",title:t?.locked?"Viewport is locked by this story’s globals.viewport":"Responsive viewport",value:r,disabled:t?.locked===!0,onChange:s=>n(s.target.value),className:"vgai-react-viewport-select",children:[a.jsx("option",{value:"fill",children:"Responsive"}),t?t.choices.map(s=>a.jsxs("option",{value:s.id,children:[s.label," · ",s.width,"×",s.height]},s.id)):a.jsxs(a.Fragment,{children:[a.jsx("option",{value:"desktop",children:"Desktop · 1440×900"}),a.jsx("option",{value:"tablet",children:"Tablet · 768×1024"}),a.jsx("option",{value:"mobile",children:"Mobile · 390×844"})]})]}),t&&a.jsx(U,{"aria-label":"Rotate viewport",title:t.locked?"Viewport is locked by this story’s globals.viewport":"Rotate viewport",size:"comfortable",disabled:t.locked,onClick:()=>ni(e.current),children:a.jsx(H,{icon:Ho,size:"md"})})]})}function Ji({containerRef:t,context:e,boardOnly:n=!1}){const r=pe();d.useSyncExternalStore(r.subscribe,r.getSnapshot);const s=d.useSyncExternalStore(ce,ue),i=d.useSyncExternalStore(Un,Kn),u=d.useSyncExternalStore(Jr,()=>Qr(t.current),()=>null),y=d.useCallback(g=>{const h=t.current;if(!h)return;const c=Math.min(4,Math.max(.1,g)),m=h.clientWidth/2,p=h.clientHeight/2,k=(m-s.x)/s.zoom,M=(p-s.y)/s.zoom;Wt(m-k*c,p-M*c,c)},[t,s]),v=d.useCallback(()=>{const g=t.current,h=[...r.selectedEntityIds].at(-1);if(!g||!h)return;const c=e?.adapter.rects?.rect(h);if(!c||c.width<=0||c.height<=0)return;const m=Math.max(1,g.clientWidth-96),p=Math.max(1,g.clientHeight-96),k=Math.min(4,Math.max(.1,Math.min(m/c.width,p/c.height)));Wt(g.clientWidth/2-(c.x+c.width/2)*k,g.clientHeight/2-(c.y+c.height/2)*k,k)},[t,e,r]),w=d.useCallback(g=>{const h=t.current;if(u){ti(h,g==="fill"?null:g);return}const c=In[g];if(!h||c===null){ie(null,null),Wt(0,0,1);return}ie(c.width,c.height);const m=Math.min(1,Math.max(.1,Math.min((h.clientWidth-96)/c.width,(h.clientHeight-96)/c.height)));Wt((h.clientWidth-c.width*m)/2,(h.clientHeight-c.height*m)/2,m)},[u,t]),E=d.useCallback(()=>{const g=t.current;g&&ei(g)},[t]),S=u!==null,R=e?.kind==="dom"&&!!e.adapter.rects;if(n?!S:!R)return null;const I=u?u.selectedViewportId??"fill":Object.entries(In).find(([,g])=>g===null?i.width===null:g.width===i.width&&g.height===i.height)?.[0]??"fill";return a.jsxs(a.Fragment,{children:[!S&&i.width!==null&&i.height!==null&&a.jsx("div",{"data-testid":"react-canvas-device-frame",style:{position:"absolute",left:0,top:0,zIndex:0,width:i.width,height:i.height,transform:_e(s),transformOrigin:"0 0",pointerEvents:"none",background:"#fff",boxShadow:"0 0 0 1px #ffffff40, 0 8px 30px #0009"}}),a.jsxs(re,{label:n?"2D component board view":"React canvas view","data-testid":n?"canvas-board-zoom-controls":"react-canvas-zoom-controls","data-vgai-canvas-navigation-ignore":"true",className:"vgai-react-canvas-controls",children:[!n&&a.jsx(qi,{boardViewport:u,containerRef:t,selectViewport:w,viewportValue:I}),S&&a.jsx(Tt,{variant:"ghost","aria-label":"Fit story board",title:"Fit all stories",size:"comfortable",onClick:E,children:"Fit board"}),a.jsx(U,{"aria-label":"Zoom out",title:"Zoom out",size:"comfortable",onClick:()=>y(s.zoom/1.2),children:a.jsx(H,{icon:Nn,size:"md"})}),a.jsxs(Tt,{variant:"ghost","aria-label":"Reset zoom to 100%",title:"Reset zoom to 100%",size:"comfortable",onClick:()=>y(1),children:[Math.round(s.zoom*100),"%"]}),a.jsx(U,{"aria-label":"Zoom in",title:"Zoom in",size:"comfortable",onClick:()=>y(s.zoom*1.2),children:a.jsx(H,{icon:Gn,size:"md"})}),!n&&a.jsx(U,{"aria-label":"Zoom to selection",title:"Zoom to selection",size:"comfortable",onClick:v,children:a.jsx(H,{icon:Go,size:"md"})})]})]})}let Qi=null;const Rn=new Set;function ts(){return Qi!==null}function es(t){return Rn.add(t),()=>Rn.delete(t)}const ns=new Set(["","transparent","rgba(0, 0, 0, 0)"]);function os(t){return ns.has(t)}function rs(t){for(const e of t)if(!os(e))return e;return"#fff"}function jn(t,e){for(const n of e){const r=nt(t,n.id);if(!r)continue;const s={};n.x!==void 0&&(s.x=n.x),n.y!==void 0&&(s.y=n.y),Object.keys(s).length!==0&&(r.begin(n.id),r.apply(n.id,s),r.end(n.id))}}const is=[{op:"left",testId:"align-left",label:"Align left",icon:dn},{op:"hcenter",testId:"align-hcenter",label:"Align horizontal center",icon:un},{op:"right",testId:"align-right",label:"Align right",icon:pn},{op:"top",testId:"align-top",label:"Align top",icon:dn,rotate:!0},{op:"vcenter",testId:"align-vcenter",label:"Align vertical center",icon:un,rotate:!0},{op:"bottom",testId:"align-bottom",label:"Align bottom",icon:pn,rotate:!0}],ss=[{axis:"horizontal",testId:"distribute-horizontal",label:"Distribute horizontally",icon:Uo},{axis:"vertical",testId:"distribute-vertical",label:"Distribute vertically",icon:Zo}];function as(t){const r=t.y-30-8;return{left:t.x,top:r<0?t.y+t.height+8:r}}function ls({adapter:t,entries:e}){if(e.length<2)return null;const n=Vo(e.map(u=>u.rect));if(!n)return null;const{left:r,top:s}=as(n),i=e.length>=3;return a.jsxs(re,{label:"Align and distribute","data-testid":"align-toolbar",style:{position:"absolute",left:r,top:s,zIndex:fe.overlayLow,gap:2,padding:3},children:[is.map(({op:u,testId:y,label:v,icon:w,rotate:E})=>a.jsx(U,{"data-testid":y,title:v,"aria-label":v,variant:"ghost",size:"compact",onClick:()=>jn(t,Wo(e,u)),children:a.jsx(H,{icon:w,"aria-hidden":"true",style:E?{transform:"rotate(90deg)"}:void 0})},u)),i&&a.jsxs(a.Fragment,{children:[a.jsx(Ko,{}),ss.map(({axis:u,testId:y,label:v,icon:w})=>a.jsx(U,{"data-testid":y,title:v,"aria-label":v,variant:"ghost",size:"compact",onClick:()=>jn(t,qo(e,u)),children:a.jsx(H,{icon:w,"aria-hidden":"true"})},u))]})]})}function cs({rect:t,initialText:e,onCommit:n,onCancel:r}){const[s,i]=d.useState(e),u=d.useRef(null),y=d.useRef(!1);d.useEffect(()=>{const E=u.current;E&&(E.focus(),E.select())},[]);const v=()=>{y.current||(y.current=!0,n(s))},w=()=>{y.current||(y.current=!0,r())};return a.jsx(Jo,{ref:u,"data-testid":"world-text-editor",value:s,onChange:E=>i(E.target.value),onBlur:v,onKeyDown:E=>{E.key==="Escape"?(E.stopPropagation(),w()):E.key==="Enter"&&!E.shiftKey&&(E.preventDefault(),v())},"data-variant":"inline-editor",style:{position:"absolute",left:t.x,top:t.y,width:Math.max(t.width,40),height:Math.max(t.height,20),boxSizing:"border-box",zIndex:fe.overlayLow,pointerEvents:"auto",resize:"none"}})}const V=$t.accent.default,ds=fe.overlayLow,le=5;function us(t,e,n){return t?!1:Ke()?.activate(e,n)??!1}function ps(t,e,n,r,s,i){const u=t?null:Ke()?.hover(e,n)??null;s(u),i(u?null:r(e,n))}function fs(t,e){const n=t.hierarchy.node(e);return n?`${n.label}·${n.kind}`:e}function hs(t){return t instanceof Wn?t.childAdapters().some(e=>!!e.adapter.rects):!!t.rects}function gs(t){const e=t instanceof Wn?t.childAdapters():[{worldId:"",adapter:t}],n=[];for(const{worldId:r,adapter:s}of e)if(s.rects&&!(r&&An(r)))for(const i of Yn(s)){if(s.inspector?.get(i,"locked")===!0)continue;const u=s.rects.rect(i);u&&n.push({id:i,rect:u})}return n}function xs(t,e){return t.x<e.x+e.width&&t.x+t.width>e.x&&t.y<e.y+e.height&&t.y+t.height>e.y}function ms(t,e,n){if(!n)return[e];const r=new Set(t);return r.has(e)?r.delete(e):r.add(e),[...r]}function bs(t,e,n,r){return e&&!!n&&(n.width>le||n.height>le)&&n?gs(t).filter(u=>xs(n,u.rect)).map(u=>u.id):r?null:[]}function ys(t,e,n,r){return t?"grabbing":e?"grab":n||r?"crosshair":"default"}function gt(t){try{t.currentTarget.setPointerCapture?.(t.pointerId)}catch{}}function $e(t){t.currentTarget.hasPointerCapture?.(t.pointerId)&&t.currentTarget.releasePointerCapture?.(t.pointerId)}function vs(t,e){if(e!==null)return!1;const n=t.currentTarget.parentElement?.parentElement??null;return ri(n,t.clientX,t.clientY)}function Oe(t,e,n){return!t||e===n||e==="combined"||e==="select"}function Pn(t,e){return{position:"absolute",left:t.x,top:t.y,width:t.width,height:t.height,borderStyle:"solid",borderColor:V,borderWidth:e?2:1,background:e?`color-mix(in srgb, ${V} 6%, transparent)`:"transparent",boxSizing:"border-box",pointerEvents:"none"}}function ws(t,e,n){if(!t)return{left:e.x+e.width/2-st/2,top:e.y-n-st/2};const r=(t.tl.x+t.tr.x)/2,s=(t.tl.y+t.tr.y)/2,i=t.tl.x-t.bl.x,u=t.tl.y-t.bl.y,y=Math.hypot(i,u)||1;return{left:r+i/y*n-st/2,top:s+u/y*n-st/2}}function Ss(t,e){const n=Math.hypot(t.tr.x-t.tl.x,t.tr.y-t.tl.y),r=Math.hypot(t.bl.x-t.tl.x,t.bl.y-t.tl.y),s=(t.tl.x+t.br.x)/2,i=(t.tl.y+t.br.y)/2;return{position:"absolute",left:s-n/2,top:i-r/2,width:n,height:r,transform:`rotate(${Vn(t)}rad)`,transformOrigin:"center",borderStyle:"solid",borderColor:V,borderWidth:e,background:"transparent",boxSizing:"border-box",pointerEvents:"none"}}function Es(t){return{position:"absolute",left:t.x,top:Math.max(0,t.y-18),padding:"2px 6px",fontSize:11,fontFamily:"'SF Mono', 'Fira Code', Menlo, Consolas, monospace",fontWeight:600,color:"#fff",background:V,borderRadius:3,pointerEvents:"none",whiteSpace:"nowrap"}}const Qt=10,Mn=48;function Dn(t,e){return{position:"absolute",left:t.x-Qt/2,top:t.y-Qt/2,width:Qt,height:Qt,background:"#fff",border:`1px solid ${V}`,boxSizing:"border-box",cursor:e,pointerEvents:"auto"}}const st=12,ao=24;function Cs(t){return{position:"absolute",left:t.x+t.width/2-st/2,top:t.y-ao-st/2,width:st,height:st,borderRadius:"50%",background:"#fff",border:`1px solid ${V}`,boxSizing:"border-box",cursor:"grab",padding:0,pointerEvents:"auto"}}const Ln=12;function ks(t){return{position:"absolute",left:t.position[0],top:t.position[1],width:Ln,height:Ln,borderRadius:"50%",background:t.writable?t.color:"transparent",border:`2px solid ${t.color}`,boxSizing:"border-box",cursor:t.writable?"grab":"not-allowed",padding:0,pointerEvents:t.writable?"auto":"none",touchAction:"none"}}function zs(t){return{position:"absolute",left:t.x-8,top:t.y-8,width:16,height:16,display:"grid",placeItems:"center",borderRadius:t.kind==="anchor"?"50%":2,background:"#fff",border:`1px solid ${V}`,boxSizing:"border-box",color:V,cursor:"crosshair",fontSize:9,fontFamily:"'SF Mono', 'Fira Code', Menlo, Consolas, monospace",fontWeight:700,lineHeight:1,padding:0,pointerEvents:"auto",touchAction:"none"}}function Is(t){return{position:"absolute",left:t.x,top:t.y+t.height+4,padding:"2px 6px",fontSize:11,fontFamily:"'SF Mono', 'Fira Code', Menlo, Consolas, monospace",fontWeight:600,color:"#fff",background:V,borderRadius:3,pointerEvents:"none",whiteSpace:"nowrap"}}const Rs="rgba(46, 204, 113, 0.25)",js="rgba(230, 126, 34, 0.25)";function Ps(t){return{position:"absolute",left:t.x,top:t.y,width:t.width,height:t.height,background:t.kind==="padding"?Rs:js,boxSizing:"border-box",cursor:t.cursor,pointerEvents:"auto"}}function Ms(t){return{position:"absolute",left:t.labelX,top:t.labelY,transform:"translate(-50%, -50%)",fontSize:10,fontFamily:"monospace",color:t.kind==="padding"?"#1b7a3d":"#a35a12",background:"rgba(255,255,255,0.85)",padding:"0 2px",borderRadius:2,pointerEvents:"none",whiteSpace:"nowrap"}}function Ds(t){return{position:"absolute",left:t.x,top:t.y,width:t.width,height:t.height,border:`2px dashed ${V}`,background:`color-mix(in srgb, ${V} 15%, transparent)`,boxSizing:"border-box",pointerEvents:"none",opacity:.7}}function Ls(t){return{position:"absolute",left:t.x,top:t.y,width:t.width,height:t.height,background:"#ff5fa2",borderRadius:2,pointerEvents:"none"}}const tn="#ff2d92",te=6;function Ts(t){const e=t.orientation==="horizontal";return{position:"absolute",left:Math.min(t.x1,t.x2),top:Math.min(t.y1,t.y2),width:e?Math.abs(t.x2-t.x1):1,height:e?1:Math.abs(t.y2-t.y1),background:tn,pointerEvents:"none"}}function Tn(t,e,n){return{position:"absolute",left:n?t:t-te/2,top:n?e-te/2:e,width:n?1:te,height:n?te:1,background:tn,pointerEvents:"none"}}function $s(t){return{position:"absolute",left:t.labelX,top:t.labelY,transform:"translate(-50%, -50%)",padding:"1px 4px",fontSize:10,fontFamily:"monospace",fontWeight:600,color:"#fff",background:tn,borderRadius:2,pointerEvents:"none",whiteSpace:"nowrap"}}const $n="#f24822";function Os(t){const e=t.orientation==="vertical";return{position:"absolute",left:e?t.at:t.start,top:e?t.start:t.at,width:e?1:t.end-t.start,height:e?t.end-t.start:1,borderLeft:e?`1px dashed ${$n}`:void 0,borderTop:e?void 0:`1px dashed ${$n}`,pointerEvents:"none"}}function Bs(t){return{position:"absolute",left:t.x,top:Math.max(0,t.y-36),display:"flex",gap:4,pointerEvents:"none"}}const On={padding:"2px 6px",fontSize:10,fontFamily:"'SF Mono', 'Fira Code', Menlo, Consolas, monospace",fontWeight:600,color:$t.content.onAccent,background:`color-mix(in srgb, ${V} 85%, transparent)`,borderRadius:3,whiteSpace:"nowrap"};function As(t){return{position:"absolute",left:t.x,top:t.y,width:t.width,height:t.height,border:`1px dashed color-mix(in srgb, ${V} 45%, transparent)`,boxSizing:"border-box",pointerEvents:"none"}}function Bn(t,e,n,r=0){return e&&n>0?Math.round((t-r)/n)*n+r:t}function Fs(t,e,n,r,s,i,u=!1){const y=t.nativeHandleSpan??1,v=u?"both":t.nativeScaleAxis??"both",w=u&&t.nativeScaleAxis==="x"?e:u&&t.nativeScaleAxis==="y"?n:null;let E,S;if(v==="x")E=1+e/y,S=1;else if(v==="y")E=1,S=1+n/y;else{const R=w!==null?1+w/y:1+(e+n)/(Math.SQRT2*y);E=R,S=R}return{...v!=="y"?{scaleXFactor:E}:{},...v!=="x"?{scaleYFactor:S}:{},...r&&!s?{scaleStep:i}:{}}}function Ys(t,e,n,r,s,i,u={x:0,y:0}){const y=t.nativeOrigin;if(!y)return{};const v=r&&!s;return{...t.moveAxis!=="y"?{originX:Bn(y.x+e,v,i,u.x)}:{},...t.moveAxis!=="x"?{originY:Bn(y.y+n,v,i,u.y)}:{}}}function Xs(t,e,n){return t==="x"?{x:e.x+n,y:e.y}:t==="y"?{x:e.x,y:e.y+n}:{x:e.x+n/Math.SQRT2,y:e.y+n/Math.SQRT2}}function Ns(t,e,n){return t==="x"?{dx:e,dy:0}:t==="y"?{dx:0,dy:n}:{dx:e,dy:n}}function Gs(t,e){t.ownerBoxEdit.begin(t.id);for(const n of t.peers)n.ownerBoxEdit.begin(n.id);return{kind:"move",id:t.id,ownerBoxEdit:t.ownerBoxEdit,startLocal:e,origRect:t.origRect,context:t.context,...t.nativeOrigin?{nativeOrigin:t.nativeOrigin}:{},movePeers:t.peers}}function _s(t,e,n){let r=e;for(let s=0;r!==null&&s<256;s++){if(n.has(r))return r;r=t.hierarchy.node(r)?.parentId??null}return null}function Hs(t,e,n){const r=nt(t,e);if(!r)return null;const s=t.inspector?.get(e,"style.position"),i=Be(t,e)==="2d";if(s!=="absolute"&&s!=="fixed"&&!i)return null;const u=X(t,e);if(!u)return null;const y=i?r.gizmoOrigin?.(e)??void 0:void 0,v=[];for(const w of n){if(w===e)continue;const E=nt(t,w),S=X(t,w);if(!E||!S)continue;const R=t.inspector?.get(w,"style.position"),I=Be(t,w)==="2d";if(R!=="absolute"&&R!=="fixed"&&!I)continue;const g=I?E.gizmoOrigin?.(w)??void 0:void 0;v.push({id:w,ownerBoxEdit:E,origRect:S,...g?{nativeOrigin:g}:{}})}return{id:e,ownerBoxEdit:r,origRect:u,context:Lt(t,e),...y?{nativeOrigin:y}:{},peers:v}}function Vs(t,e){if(!yr(t,e)?.reorder)return null;const r=vr(t,e);if(!r||r.length<3)return null;const s=X(t,e);if(!s)return null;const i=[];for(const u of r){if(u===e)continue;const y=X(t,u);y&&i.push({id:u,rect:y})}return i.length===0?null:{id:e,adapter:t,origRect:s,siblingRects:i}}function Ws(){return wr()}function Ks(t,e){if(e.size!==1)return null;const n=[...e][0],r=nt(t,n);if(!r)return null;const s=X(t,n);if(!s)return null;const i=Sr(s,Er(t,n));return{id:n,rect:s,ownerBoxEdit:r,spacingBands:i}}function Us(t,e){if(e.size<2)return null;const n=[];for(const r of e){const s=X(t,r);if(!s||!nt(t,r))return null;n.push({id:r,rect:s})}return n}function Zs(t,e,n){const r=e.size===1?[...e][0]:null,s=r?X(t,r):null,i=s&&n?Cr(s,n):[],u=r?kr(t,r):null,y=!!(u&&(u.position||u.parentLayout)),v=r?Lt(t,r)?.parent??null:null;return{selectedSingleRect:s,measureLines:i,positionBadge:u,showPositionBadge:y,parentRect:v}}function qs({state:t,adapter:e,onClose:n}){const r=d.useRef(null);return d.useEffect(()=>{const s=u=>{r.current?.contains(u.target)||n()},i=u=>{u.key==="Escape"&&n()};return document.addEventListener("pointerdown",s),document.addEventListener("keydown",i),()=>{document.removeEventListener("pointerdown",s),document.removeEventListener("keydown",i)}},[n]),a.jsx(zr,{children:a.jsx(Ir,{ref:r,"aria-label":"Pick object under pointer","data-testid":"viewport-pick-menu",style:{position:"fixed",left:t.x,top:t.y,minWidth:190,maxWidth:320,zIndex:fe.dropdown},children:t.ids.map(s=>{const i=e.hierarchy.node(s);return a.jsxs(Mt,{"data-testid":"viewport-pick-menu-item",onSelect:()=>{Hn(e,[s]),n()},style:{justifyContent:"space-between",gap:20},children:[a.jsx("span",{children:i?.label??s}),a.jsx("span",{style:{color:$t.content.muted,fontSize:11},children:i?.kind??""})]},s)})})})}function Js({adapter:t,view:e,transformModeAware:n=!1}={}){const r=pe(),s=d.useSyncExternalStore(r.subscribe,r.getSnapshot),i=t??_n(r),u=d.useCallback((o,l)=>t?t.pickable?.pick(o,l)??null:Wr(r,o,l),[t,r]),y=d.useRef(null),v=d.useRef(null),w=d.useRef(null),[E,S]=d.useState(null),[R,I]=d.useState(null),[g,h]=d.useState(null),[c,m]=d.useState(null),p=d.useRef(null),k=d.useCallback((o,l)=>{const b=Kr(r,o,l,{...t?{adapter:t}:{}});if(b.length===0){m(null);return}m({x:o,y:l,ids:b})},[t,r]);d.useEffect(()=>{const o=b=>{const x=p.current;!x||x.pointerId!==b.pointerId||x.moved||Math.hypot(b.clientX-x.startClientX,b.clientY-x.startClientY)>le&&(x.moved=!0)},l=b=>{const x=p.current;!x||x.pointerId!==b.pointerId||(p.current=null,b.type==="pointerup"&&!x.moved&&k(b.clientX,b.clientY))};return window.addEventListener("pointermove",o),window.addEventListener("pointerup",l),window.addEventListener("pointercancel",l),()=>{window.removeEventListener("pointermove",o),window.removeEventListener("pointerup",l),window.removeEventListener("pointercancel",l)}},[k]);const M=d.useCallback(o=>{o.preventDefault(),o.stopPropagation()},[]),D=e??He,z=d.useSyncExternalStore(D.subscribe,D.get,D.get);d.useSyncExternalStore(d.useCallback(o=>Qe(D,o),[D]),d.useCallback(()=>Je(D),[D]));const Z=n?qe(D):[],$=n?1/z.zoom:1,J=n&&r.transformMode!=="combined"&&r.transformMode!=="select",wt=d.useRef(!1),[zt,at]=d.useState(!1),Q=d.useRef(null),[xe,xt]=d.useState(!1),A=d.useRef(null);d.useEffect(()=>()=>{const o=A.current;if(A.current=null,!!o){o.ownerBoxEdit.end(o.id);for(const l of o.movePeers??[])l.ownerBoxEdit.end(l.id)}},[]);const[,me]=d.useState(0),[be,mt]=d.useState(null),[f,P]=d.useState([]),T=d.useRef(null),[B,W]=d.useState(null),F=d.useCallback(o=>{T.current=o,W(o)},[]),St=d.useRef(null),[At,en]=d.useState(null),[ut,N]=d.useState(null),q=d.useCallback(o=>{St.current=o,en(o)},[]),It=d.useRef(null),nn=d.useRef(null);d.useEffect(()=>{const o=It.current;if(!o)return;It.current=null;const l=ke(i,o.id);l&&l.get(o.id)===null&&N({id:o.id,rect:o.rect})},[s]);const on=d.useRef("");d.useEffect(()=>{const o=[...r.selectedEntityIds].sort().join(",");o!==on.current&&(on.current=o,ut&&N(null))}),d.useEffect(()=>{if(!ut)return;const o=window.setTimeout(()=>N(null),4e3);return()=>window.clearTimeout(o)},[ut]);const pt=d.useSyncExternalStore(es,ts),[lo,rn]=d.useState(null),ot=d.useCallback(o=>{w.current=o,S(o)},[]),L=d.useCallback((o,l)=>{const b=y.current?.getBoundingClientRect();return{x:(o-(b?.left??0)-z.x)/z.zoom,y:(l-(b?.top??0)-z.y)/z.zoom}},[z.x,z.y,z.zoom]),co=d.useCallback(o=>{!e||!n||!i.assetDrop||!o.dataTransfer.types.includes("application/x-editor-asset")||(o.preventDefault(),o.dataTransfer.dropEffect="copy")},[i.assetDrop,e,n]),uo=d.useCallback(o=>{if(!e||!n||!i.assetDrop)return;const l=o.dataTransfer.getData("application/x-editor-asset");if(!l)return;let b;try{b=JSON.parse(l)}catch{return}const x=L(o.clientX,o.clientY),C={position:[x.x,x.y,0],item:b.component??{kind:"file",name:b.name??b.path.split("/").pop()??b.path}};i.assetDrop.accepts("",b.path,C)&&(o.preventDefault(),o.stopPropagation(),Qo(i,"",b.path,C))},[i.assetDrop,e,L,n]),ft=d.useCallback(()=>me(o=>o+1),[]),Ft=d.useCallback(()=>{const o=A.current;if(!o)return!1;A.current=null,o.ownerBoxEdit.end(o.id);for(const l of o.movePeers??[])l.ownerBoxEdit.end(l.id);return mt(null),P([]),ft(),!0},[ft]),po=d.useCallback((o,l)=>{if(l.stopPropagation(),l.button!==0)return;const b=r.selectedEntityIds;if(b.size!==1)return;const x=[...b][0],C=nt(i,x),j=X(i,x);if(!C||!j)return;const O=i.inspector?.get(x,"style.position"),rt=Be(i,x)==="2d",Y=rt?ze(i,x):null,Pt=Y&&Ie(Y)?C.gizmoOrigin?.(x)??null:null;gt(l),C.begin(x),A.current={kind:"resize",id:x,ownerBoxEdit:C,startLocal:L(l.clientX,l.clientY),origRect:j,pos:o,...Y&&Pt?{frame:Y,frameOrigin:Pt}:{},isPositioned:O==="absolute"||O==="fixed"||rt,context:Lt(i,x)}},[i,r,L]),ye=d.useCallback(o=>{if(o.stopPropagation(),o.button!==0)return;const l=r.selectedEntityIds;if(l.size!==1)return;const b=[...l][0],x=nt(i,b),C=X(i,b);if(!x||!C)return;const j=n?x.gizmoOrigin?.(b):null;gt(o),x.begin(b),A.current={kind:"rotate",id:b,ownerBoxEdit:x,startLocal:L(o.clientX,o.clientY),origRect:C,center:j??{x:C.x+C.width/2,y:C.y+C.height/2},...j?{nativeOrigin:j}:{}}},[i,r,L,n]),ve=d.useCallback((o,l)=>{if(l.stopPropagation(),l.button!==0)return;const b=r.selectedEntityIds;if(b.size!==1)return;const x=[...b][0],C=nt(i,x),j=X(i,x);if(!C||!j)return;const O=C.gizmoOrigin?.(x)??{x:j.x+j.width/2,y:j.y+j.height/2};gt(l),C.begin(x),A.current={kind:"move",id:x,ownerBoxEdit:C,startLocal:L(l.clientX,l.clientY),origRect:j,context:Lt(i,x),moveAxis:o,nativeOrigin:O}},[i,r,L]),we=d.useCallback((o,l)=>{if(l.stopPropagation(),l.button!==0)return;const b=r.selectedEntityIds;if(b.size!==1)return;const x=[...b][0],C=nt(i,x),j=X(i,x);if(!C||!j)return;const O=C.gizmoOrigin?.(x)??{x:j.x+j.width/2,y:j.y+j.height/2};gt(l),C.begin(x),A.current={kind:"native-scale",id:x,ownerBoxEdit:C,startLocal:L(l.clientX,l.clientY),origRect:j,nativeOrigin:O,nativeScaleAxis:o,nativeHandleSpan:Mn/z.zoom}},[i,z.zoom,r,L]),fo=d.useCallback((o,l)=>{if(l.stopPropagation(),l.button!==0)return;const b=r.selectedEntityIds;if(b.size!==1)return;const x=[...b][0],C=nt(i,x),j=X(i,x);!C||!j||C.referencePoint?.(x)?.id!==o.id||(gt(l),C.begin(x),A.current={kind:"reference",id:x,ownerBoxEdit:C,startLocal:L(l.clientX,l.clientY),origRect:j,context:Lt(i,x),pointerId:l.pointerId,referencePoint:o})},[i,r,L]),Yt=d.useRef(null),ho=d.useCallback((o,l,b,x)=>{x.stopPropagation(),!(x.button!==0||!b.writable)&&(gt(x),Yt.current={id:o,handleId:b.id,provider:l})},[]),go=d.useCallback(o=>{const l=Yt.current;if(!l)return;const b=L(o.clientX,o.clientY);l.provider.preview(l.id,l.handleId,[b.x,b.y,0]),ft()},[ft,L]),Se=d.useCallback(o=>{const l=Yt.current;if(Yt.current=null,!l)return;$e(o);const b=L(o.clientX,o.clientY);l.provider.commit(l.id,l.handleId,[b.x,b.y,0]),ft()},[ft,L]),xo=d.useCallback((o,l)=>{if(l.stopPropagation(),l.button!==0)return;const b=r.selectedEntityIds;if(b.size!==1)return;const x=[...b][0],C=nt(i,x),j=X(i,x);!C||!j||(gt(l),C.begin(x),A.current={kind:"spacing",id:x,ownerBoxEdit:C,startLocal:L(l.clientX,l.clientY),origRect:j,side:o.side,origValue:o.value})},[i,r,L]),Xt=d.useCallback((o,l)=>{if(o.pointerId!==void 0&&l.pointerId!==o.pointerId)return;const b=L(l.clientX,l.clientY),x=b.x-o.startLocal.x,C=b.y-o.startLocal.y;let j;if(o.kind==="resize"&&o.frame&&o.frameOrigin)j=tr(o.frame,o.pos,x,C,o.frameOrigin,l.shiftKey),P([]);else if(o.kind==="resize")j=er(o.pos,x,C,o.origRect,!!o.isPositioned,l.altKey,o.context),l.shiftKey&&o.isPositioned&&(j=nr(j,o.origRect,o.pos)),P(or(o.pos,x,C,o.origRect,l.altKey,o.context));else if(o.kind==="native-scale")j=Fs(o,x,C,r.scaleSnap,l.altKey,r.snapValues.scale,l.shiftKey),P([]);else if(o.kind==="move"){const{dx:O,dy:rt}=Ns(o.moveAxis,x,C);if(o.nativeOrigin){j=Ys(o,O,rt,r.snapEnabled,l.altKey,r.snap2D.step,r.snap2D.relative?o.nativeOrigin:{x:r.snap2D.offsetX,y:r.snap2D.offsetY});const Y=rr({x:j.originX??o.nativeOrigin.x,y:j.originY??o.nativeOrigin.y},o.nativeOrigin,o.origRect,o.context,o.moveAxis,!r.smartSnap.enabled||l.altKey,ir/Math.max(z.zoom,.01),{x:Z.filter(it=>it.axis==="x").map(it=>it.value),y:Z.filter(it=>it.axis==="y").map(it=>it.value)},r.smartSnap),Pt=it=>r.snap2D.pixel?Math.round(it):it;j.originX!==void 0&&(j.originX=Pt(Y.position.x)),j.originY!==void 0&&(j.originY=Pt(Y.position.y)),P(Y.guides)}else j=sr(O,rt,o.origRect,l.altKey,o.context);mt(fn(o.origRect,O,rt)),o.nativeOrigin||P(ar(O,rt,o.origRect,l.altKey,o.context))}else if(o.kind==="reference"){const O=lr(b,o.origRect,l.altKey,o.context,{bounded:o.referencePoint?.bounded,snapPoints:o.referencePoint?.snapPoints});j={referenceX:O.position.x,referenceY:O.position.y},P(O.guides)}else o.kind==="rotate"?j=cr(o.center,o.startLocal,b,o.nativeOrigin&&!r.rotationSnap||l.altKey,o.nativeOrigin?r.snapValues.rotate:15):j=dr(o.side,x,C,o.origValue??0);if(o.ownerBoxEdit.apply(o.id,j),o.kind==="move"&&o.movePeers){const O=o.nativeOrigin?(j.originX??o.nativeOrigin.x)-o.nativeOrigin.x:(j.x??o.origRect.x)-o.origRect.x,rt=o.nativeOrigin?(j.originY??o.nativeOrigin.y)-o.nativeOrigin.y:(j.y??o.origRect.y)-o.origRect.y;for(const Y of o.movePeers)Y.ownerBoxEdit.apply(Y.id,Y.nativeOrigin?{originX:Y.nativeOrigin.x+O,originY:Y.nativeOrigin.y+rt}:{x:Y.origRect.x+O,y:Y.origRect.y+rt})}ft()},[L,ft,r,Z,z.zoom]),Nt=d.useCallback((o,l)=>{const b=u(o,l);if(!b)return null;const x=ur(i,b)?.backgroundChainAt(o,l)??null;return x?rs(x):null},[i,u]);d.useEffect(()=>{if(!pt)return;const o=l=>{l.key};return window.addEventListener("keydown",o),()=>window.removeEventListener("keydown",o)},[pt]),d.useEffect(()=>{const o=x=>x instanceof HTMLInputElement||x instanceof HTMLTextAreaElement||x instanceof HTMLSelectElement||x instanceof HTMLElement&&x.isContentEditable,l=x=>{x.code!=="Space"||x.repeat||o(x.target)||x.target instanceof HTMLButtonElement||(x.preventDefault(),wt.current=!0,at(!0))},b=x=>{x.code==="Space"&&(wt.current=!1,at(!1),Q.current&&(Q.current=null,xt(!1)))};return window.addEventListener("keydown",l),window.addEventListener("keyup",b),()=>{window.removeEventListener("keydown",l),window.removeEventListener("keyup",b)}},[]);const sn=d.useCallback(o=>{if(o.stopPropagation(),gt(o),wt.current){Q.current={startClientX:o.clientX,startClientY:o.clientY,startPan:D.get()},xt(!0);return}if(n&&r.selectedEntityIds.size===1&&(o.metaKey||o.ctrlKey)){o.altKey?we("both",o):ye(o);return}if(pt){Nt(o.clientX,o.clientY),rn(null);return}if(us(t,o.clientX,o.clientY)){v.current=null,I(null),ot(null);return}const l=u(o.clientX,o.clientY);if(vs(o,l)){v.current=null,I(null),ot(null);return}const b=l!==null?_s(i,l,r.selectedEntityIds):null,x=Oe(n,r.transformMode,"translate")&&b!==null?Hs(i,b,r.selectedEntityIds):null,C=!x&&b!==null?Vs(i,b):null;v.current={downClientX:o.clientX,downClientY:o.clientY,downLocal:L(o.clientX,o.clientY),hitAtDown:l,moved:!1,moveCandidate:x,reorderCandidate:C},I(null),ot(null)},[i,r,D,n,L,ot,pt,Nt,u,t,we,ye]),mo=d.useCallback(o=>{if(o.button===2){p.current={pointerId:o.pointerId,startClientX:o.clientX,startClientY:o.clientY,moved:!1};return}o.button===0&&sn(o)},[sn]),an=d.useCallback((o,l)=>{const b=l.clientX-o.downClientX,x=l.clientY-o.downClientY;if(!o.moved&&Math.hypot(b,x)>le&&(o.moved=!0),!!o.moved){if(o.moveCandidate){const C=Gs(o.moveCandidate,o.downLocal);A.current=C,Xt(C,l);return}if(o.reorderCandidate){const C=L(l.clientX,l.clientY),j=pr(o.reorderCandidate.siblingRects,C);j&&(F({id:o.reorderCandidate.id,adapter:o.reorderCandidate.adapter,gap:j}),mt(fn(o.reorderCandidate.origRect,C.x-o.downLocal.x,C.y-o.downLocal.y)));return}if(o.hitAtDown===null){const C=L(l.clientX,l.clientY);ot({x:Math.min(o.downLocal.x,C.x),y:Math.min(o.downLocal.y,C.y),width:Math.abs(C.x-o.downLocal.x),height:Math.abs(C.y-o.downLocal.y)})}}},[L,ot,Xt,F]),lt=d.useCallback(o=>{const l=Q.current;if(l){D.setPan(l.startPan.x+(o.clientX-l.startClientX),l.startPan.y+(o.clientY-l.startClientY));return}if(pt){const C=L(o.clientX,o.clientY);rn({...C,color:Nt(o.clientX,o.clientY)});return}const b=A.current;if(b){Xt(b,o);return}if((o.buttons&1)===0){ps(t,o.clientX,o.clientY,u,h,I);return}const x=v.current;x&&an(x,o)},[r,D,L,Xt,pt,Nt,an,u,t]),ct=d.useCallback(o=>{if($e(o),Q.current){Q.current=null,xt(!1);return}const l=A.current;if(l?.pointerId!==void 0&&o.pointerId!==l.pointerId||Ft())return;const b=T.current;if(b){F(null),mt(null),v.current=null,fr(b.adapter,b.id,b.gap.beforeSiblingId);return}const x=v.current;if(v.current=null,!x)return;const C=x.hitAtDown!==null?ms(r.selectedEntityIds,x.hitAtDown,o.shiftKey):bs(i,x.moved,w.current,o.shiftKey);C!==null&&Hn(i,C),ot(null)},[i,r,ot,Ft,F]),tt=d.useCallback(o=>{if($e(o),Q.current){Q.current=null,xt(!1);return}const l=A.current;l?.pointerId!==void 0&&o.pointerId!==l.pointerId||Ft()||(T.current&&(F(null),mt(null)),v.current=null,ot(null))},[Ft,ot,F]),bo=d.useCallback(()=>{t||Ke()?.clearHover(),h(null),I(null)},[t]),yo=d.useCallback(o=>{const l=y.current?.parentElement??null;if(oi(l,o.clientX,o.clientY))return;const b=u(o.clientX,o.clientY);if(!b)return;const x=ke(i,b);if(!x)return;const C=X(i,b);if(!C)return;const j=x.get(b);if(j===null){console.warn(`[RootSelectionOverlay] text edit refused for "${b}": dynamic body or has child elements — not inline-editable.`),q(null),N({id:b,rect:C});return}N(null),q({id:b,rect:C,initialText:j})},[i,u,q]),vo=d.useCallback(o=>{const l=St.current;if(!l)return;const b=ke(i,l.id);b&&(It.current={id:l.id,rect:l.rect},b.set(l.id,o)),q(null)},[i,q]),wo=d.useCallback(()=>q(null),[q]);if(!hs(i)||Ws())return null;const bt=new Set([...r.selectedEntityIds].filter(o=>i.hierarchy.node(o)!==void 0)),Ee=R!==null&&!bt.has(R)?X(i,R):null,G=Ks(i,bt),dt=G?.rect??null,So=G?.ownerBoxEdit??null,Ce=n&&G?ze(i,G.id):null,K=Ce&&Ie(Ce)?Ce:null,_=n&&G?G.ownerBoxEdit.gizmoOrigin?.(G.id)??{x:G.rect.x+G.rect.width/2,y:G.rect.y+G.rect.height/2}:null,Rt=Mn/z.zoom,ht=G?G.ownerBoxEdit.referencePoint?.(G.id):null,Eo=G?.spacingBands??[],Et=bt.size===1?[...bt][0]:null,Gt=Et?hr(i,Et):null,Co=Et&&Gt&&r.showHelpers?Gt.layers(Et).filter(o=>r.helperVisibility[o.category]??!0):[],jt=n?{selectedSingleRect:null,measureLines:[],positionBadge:null,showPositionBadge:!1,parentRect:null}:Zs(i,bt,Ee),ln=n?null:Us(i,bt),_t=nn.current,ko=n?[]:_t&&_t.adapter===i&&_t.version===s?_t.hints:(()=>{const o=gr(i);return nn.current={adapter:i,version:s,hints:o},o})();return a.jsxs("div",{style:{position:"absolute",inset:0,zIndex:ds,pointerEvents:"none"},children:[a.jsx("div",{ref:y,"data-testid":"world-selection-overlay-interaction",style:{position:"absolute",inset:0,pointerEvents:"auto",touchAction:"none",userSelect:"none",cursor:g??ys(xe,zt,pt,!!E)},onPointerDownCapture:mo,onPointerMove:lt,onPointerUp:ct,onPointerCancel:tt,onLostPointerCapture:tt,onPointerLeave:bo,onDoubleClick:yo,onContextMenu:M,onDragOver:co,onDrop:uo}),c?a.jsx(qs,{state:c,adapter:i,onClose:()=>m(null)}):null,a.jsxs("div",{"data-testid":"world-selection-overlay-chrome",style:{position:"absolute",inset:0,pointerEvents:"none",transform:_e(z),transformOrigin:"0 0"},children:[!n&&ko.map(o=>a.jsx("div",{"data-testid":"world-empty-container-hint","data-entity-id":o.id,title:o.displayName,style:{position:"absolute",left:o.rect.x,top:o.rect.y,width:o.rect.width,height:o.rect.height,borderStyle:"dashed",borderColor:"rgba(154, 160, 166, 0.7)",borderWidth:n?1/z.zoom:1,boxSizing:"border-box",pointerEvents:"none"}},o.id)),Ee&&a.jsx("div",{"data-testid":"world-selection-hover",style:{...Pn(Ee,!1),...n?{borderWidth:1/z.zoom}:{}}}),[...bt].map(o=>{const l=X(i,o);if(!l)return null;const b=n?ze(i,o):null,x=b&&Ie(b)?b:null;return a.jsxs("div",{children:[a.jsx("div",{"data-testid":"world-selection-box","data-entity-id":o,"data-turned":x?"true":void 0,style:{...x?Ss(x,1/z.zoom):Pn(l,!0),...n&&!x?{borderWidth:1/z.zoom,background:"transparent"}:{}}}),!n&&a.jsx("div",{"data-testid":"world-selection-label",style:Es(l),children:fs(i,o)})]},o)}),E&&a.jsx("div",{"data-testid":"world-selection-marquee",style:{position:"absolute",left:E.x,top:E.y,width:E.width,height:E.height,border:`1px solid ${V}`,background:`color-mix(in srgb, ${V} 10%, transparent)`,pointerEvents:"none"}}),!n&&a.jsx(Qs,{measureLines:jt.measureLines,snapGuides:f,positionBadge:jt.positionBadge,showPositionBadge:jt.showPositionBadge,badgeAnchorRect:jt.selectedSingleRect,parentRect:jt.parentRect,screenScale:$,screenZoom:1}),!n&&a.jsx(ta,{dragGhost:be,reorderPreview:B}),!n&&ln&&a.jsx(ls,{adapter:i,entries:ln}),dt&&So&&a.jsxs(a.Fragment,{children:[!n&&Eo.map(o=>a.jsxs("div",{children:[a.jsx("div",{"data-testid":`world-spacing-${o.kind}-${na(o.side)}`,style:Ps(o),onPointerDown:l=>xo(o,l),onPointerMove:lt,onPointerUp:ct,onPointerCancel:tt}),!o.isZero&&a.jsx("div",{style:{...Ms(o),...n?{transform:`translate(-50%, -50%) scale(${$})`,transformOrigin:"center"}:{}},children:Math.round(o.value)})]},o.side)),ht&&a.jsx("div",{"aria-label":`Edit ${ht.label}`,"data-reference-kind":ht.kind,"data-testid":"world-reference-point-handle",title:`${ht.label} (${ht.bounded?"native corner/edge/center snap":"8px/alignment snap"}, Alt for free movement)`,style:{...zs(ht),...n?{transform:`scale(${$})`,transformOrigin:"center"}:{}},onPointerDown:o=>fo(ht,o),onPointerMove:lt,onPointerUp:ct,onPointerCancel:tt,onLostPointerCapture:tt,role:"button",tabIndex:0,children:ht.kind==="anchor"?"A":"P"}),Et&&Gt&&Co.flatMap(o=>o.handles.map(l=>a.jsx("div",{"aria-label":l.label,"data-testid":"world-spatial-handle","data-handle-id":l.id,"data-writable":l.writable,role:"button",tabIndex:0,title:l.writable?l.label:`${l.label} — ${l.reason}`,style:{...ks(l),transform:`translate(-50%, -50%) scale(${$})`},onPointerDown:b=>ho(Et,Gt,l,b),onPointerMove:go,onPointerUp:Se,onPointerCancel:Se,onLostPointerCapture:Se},`${o.id}:${l.id}`))),n&&r.transformMode==="translate"&&a.jsxs(a.Fragment,{children:[a.jsx("div",{"data-testid":"world-2d-move-axis-x",title:"Move on X axis",style:{position:"absolute",left:_.x,top:_.y-5/z.zoom,width:Rt,height:10/z.zoom,borderTop:`${2/z.zoom}px solid #ef5350`,boxSizing:"border-box",cursor:"ew-resize",pointerEvents:"auto"},onPointerDown:o=>ve("x",o),onPointerMove:lt,onPointerUp:ct,onPointerCancel:tt}),a.jsx("div",{"data-testid":"world-2d-move-axis-y",title:"Move on Y axis",style:{position:"absolute",left:_.x-5/z.zoom,top:_.y,width:10/z.zoom,height:Rt,borderLeft:`${2/z.zoom}px solid #66bb6a`,boxSizing:"border-box",cursor:"ns-resize",pointerEvents:"auto"},onPointerDown:o=>ve("y",o),onPointerMove:lt,onPointerUp:ct,onPointerCancel:tt}),a.jsx("div",{"data-testid":"world-2d-move-center",title:"Move freely",style:{position:"absolute",left:_.x-5/z.zoom,top:_.y-5/z.zoom,width:10/z.zoom,height:10/z.zoom,border:"1px solid rgba(255,255,255,.9)",background:"#4aa3ff",boxSizing:"border-box",cursor:"move",pointerEvents:"auto"},onPointerDown:o=>ve("both",o),onPointerMove:lt,onPointerUp:ct,onPointerCancel:tt})]}),Oe(n,r.transformMode,"scale")&&(J?a.jsxs(a.Fragment,{children:[a.jsx("div",{"data-testid":"world-2d-scale-axis-x",style:{position:"absolute",left:_.x,top:_.y,width:Rt,borderTop:`${2/z.zoom}px solid #ef5350`,pointerEvents:"none"}}),a.jsx("div",{"data-testid":"world-2d-scale-axis-y",style:{position:"absolute",left:_.x,top:_.y,height:Rt,borderLeft:`${2/z.zoom}px solid #66bb6a`,pointerEvents:"none"}}),[["x","ew-resize"],["y","ns-resize"],["both","nwse-resize"]].map(([o,l])=>{const b=Xs(o,_,Rt),x=o==="x"?"e":o==="y"?"s":"se";return a.jsx("div",{"data-testid":`world-resize-handle-${x}`,style:{...Dn(b,l),transform:`scale(${$})`,transformOrigin:"center",background:o==="x"?"#ef5350":o==="y"?"#66bb6a":"#fff"},onPointerDown:C=>we(o,C),onPointerMove:lt,onPointerUp:ct,onPointerCancel:tt},o)})]}):a.jsxs(a.Fragment,{children:[xr.map(({pos:o,cursor:l})=>a.jsx("div",{"data-testid":`world-resize-handle-${o}`,style:{...Dn(K?mr(K,o):br(dt,o),l),...n?{transform:K?`rotate(${Vn(K)}rad) scale(${$})`:`scale(${$})`,transformOrigin:"center"}:{}},onPointerDown:b=>po(o,b),onPointerMove:lt,onPointerUp:ct,onPointerCancel:tt},o)),a.jsx("div",{"data-testid":"world-resize-dimension-label",style:{...Is(dt),...n?{top:dt.y+dt.height+4*$,transform:`scale(${$})`,transformOrigin:"top left"}:{}},children:K?`${Math.round(Math.hypot(K.tr.x-K.tl.x,K.tr.y-K.tl.y))}×${Math.round(Math.hypot(K.bl.x-K.tl.x,K.bl.y-K.tl.y))}`:`${Math.round(dt.width)}×${Math.round(dt.height)}`})]})),Oe(n,r.transformMode,"rotate")&&a.jsxs(a.Fragment,{children:[J&&a.jsx("div",{"data-testid":"world-2d-rotate-ring",style:{position:"absolute",left:_.x-40/z.zoom,top:_.y-40/z.zoom,width:80/z.zoom,height:80/z.zoom,border:`${1/z.zoom}px solid #4aa3ff`,borderRadius:"50%",boxSizing:"border-box",pointerEvents:"none"}}),a.jsx("div",{"data-testid":"world-rotate-handle","aria-label":"Rotate selection",title:"Rotate selection (15° snap, Alt for free rotation)",style:{...Cs(dt),...n&&!J?{...ws(K,dt,ao*$),transform:`scale(${$})`,transformOrigin:"center"}:{},...J?{left:_.x-st/2,top:_.y-40/z.zoom-st/2,transform:`scale(${$})`,transformOrigin:"center",background:"#4aa3ff"}:{}},onPointerDown:ye,onPointerMove:lt,onPointerUp:ct,onPointerCancel:tt,role:"button",tabIndex:0})]})]}),!n&&a.jsx(ea,{textEdit:At,onCommitTextEdit:vo,onCancelTextEdit:wo,textEditRefused:ut,eyedropperActive:pt,eyedropperPreview:lo})]})]})}function Qs(t){const{measureLines:e,snapGuides:n,positionBadge:r,showPositionBadge:s,badgeAnchorRect:i,parentRect:u,screenScale:y,screenZoom:v}=t;return a.jsxs(a.Fragment,{children:[u&&a.jsx("div",{"data-testid":"world-parent-outline",style:As(u)}),e.map(w=>a.jsxs("div",{"data-testid":"world-measure-line",children:[a.jsx("div",{style:Ts(w)}),a.jsx("div",{style:Tn(w.x1,w.y1,w.orientation==="horizontal")}),a.jsx("div",{style:Tn(w.x2,w.y2,w.orientation==="horizontal")}),a.jsx("div",{"data-testid":"world-measure-line-label",style:{...$s(w),...y!==1?{transform:`translate(-50%, -50%) scale(${y})`,transformOrigin:"center"}:{}},children:w.distance})]},w.orientation)),n.map(w=>a.jsx("div",{"data-testid":"world-snap-guide",style:Os(w)},w.orientation)),s&&i&&r&&a.jsxs("div",{"data-testid":"world-position-badge",style:{...Bs(i),...y!==1?{top:i.y-36/v,transform:`scale(${y})`,transformOrigin:"top left"}:{}},children:[r.position&&a.jsx("span",{"data-testid":"world-position-badge-mode",style:On,children:r.position}),r.parentLayout&&a.jsx("span",{"data-testid":"world-position-badge-layout",style:On,children:r.parentLayout})]})]})}function ta(t){const{dragGhost:e,reorderPreview:n}=t;return a.jsxs(a.Fragment,{children:[e&&a.jsx("div",{"data-testid":"world-drag-ghost",style:Ds(e)}),n&&a.jsx("div",{"data-testid":"world-reorder-preview",style:Ls(n.gap.marker)})]})}function ea(t){const{textEdit:e,onCommitTextEdit:n,onCancelTextEdit:r,textEditRefused:s,eyedropperActive:i,eyedropperPreview:u}=t;return a.jsxs(a.Fragment,{children:[e&&a.jsx("div",{style:{pointerEvents:"auto"},children:a.jsx(cs,{rect:e.rect,initialText:e.initialText,onCommit:n,onCancel:r})}),s&&a.jsx("div",{"data-testid":"world-text-edit-refused",title:"dynamic body — not inline-editable",style:{position:"absolute",left:s.rect.x,top:s.rect.y,width:Math.max(s.rect.width,40),height:Math.max(s.rect.height,20),border:`2px dashed ${$t.semantic.danger}`,boxSizing:"border-box",background:$t.semantic.dangerMuted,pointerEvents:"none"}}),i&&u&&a.jsx("div",{"data-testid":"world-eyedropper-swatch","data-color-state":u.color?"resolved":"unknown",style:{position:"absolute",left:u.x+12,top:u.y+12,width:24,height:24,borderRadius:4,border:"2px solid #fff",boxShadow:"0 1px 4px rgba(0,0,0,0.5)",background:u.color??"repeating-linear-gradient(45deg, #999, #999 4px, #ccc 4px, #ccc 8px)",pointerEvents:"none"}})]})}function na(t){return t.endsWith("Top")?"top":t.endsWith("Right")?"right":t.endsWith("Bottom")?"bottom":"left"}function oa({explanation:t,testId:e,style:n}){return t?a.jsx(Rr,{"data-testid":e,tone:t.tone,title:t.title,description:a.jsx("span",{style:{whiteSpace:"pre-wrap"},children:t.description}),style:{position:"absolute",inset:0,pointerEvents:"none",...n}}):null}const ra="Scene";function ia({active:t,composite:e,descriptor:n,documentId:r,store:s}){const i=d.useRef(null),u=d.useRef(null),[y]=d.useState(Br),v=n.kind==="canvas",w=v?y:He;d.useSyncExternalStore(s.subscribe,s.getSnapshot);const E=d.useSyncExternalStore(Ar,Fr),S=d.useSyncExternalStore(Yr,Xr),[R,I]=d.useState(null),g=e.childAdapters().find(z=>z.worldId===n.worldId)?.adapter??R??void 0,h=v&&g?.provenance?.label==="babylon",c=g?.hierarchy.roots()??[],m=new Set(g?.rects?.emptyContainers?.().map(z=>z.id)??[]),p=c.some(z=>!m.has(z.id)),k=Pi({surface:v?"Scene":n.kind==="dom"?"UI":"World",rootIds:[n.worldId],playSuspended:s.playState!=="stopped"&&(!g||g.provenance?.source==="boundary"),phase:!g||g.provenance?.source==="boundary"?"loading":"ready",content:!g||g.provenance?.source==="boundary"?"unknown":p?"present":"empty",readiness:E,failures:S,disclosure:g instanceof kt?g.disclosure:null});d.useEffect(()=>{if(g)return Nr(r,()=>({adapter:g,nodeId:[...s.selectedEntityIds].find(z=>g.hierarchy.node(z))??null}))},[e,g,r,s]),d.useEffect(()=>{const z=i.current;if(z&&!h)return v?wi(z,w):vi(z,w)},[w,h,v]),d.useEffect(()=>{if(!t)return;if(!!!u.current&&i.current){u.current=hi(i.current,e,s,[n],(wt,zt)=>I(zt),v?{canvasSceneView:y}:void 0,r);return}let Z=0,$=0;const J=()=>{if(Z+=1,Z<2){$=requestAnimationFrame(J);return}Hr(r)};return $=requestAnimationFrame(J),()=>cancelAnimationFrame($)},[t,y,e,n,r,v,s]),d.useEffect(()=>()=>{u.current?.(),u.current=null},[]);const M=Gr(_n(s),s.selectedEntityIds),D=M?.worldId===n.worldId?M:g?.rects?{worldId:n.worldId,kind:"dom",adapter:g}:null;return a.jsxs("div",{ref:i,"data-testid":`world-document:${n.worldId}`,"data-vgai-backdrop-color":t?h?"#111827":v?zn:Ae:void 0,"data-vgai-backdrop-policy":t?"dark-frost":void 0,onPointerDown:()=>_r("viewport"),style:{position:"absolute",inset:0,overflow:"hidden",pointerEvents:"auto",backgroundColor:h?"#111827":v?zn:Ae,touchAction:"none"},children:[h?null:v?a.jsx(_i,{view:y,documentId:r}):a.jsx(sa,{}),a.jsx(Js,{...g?{adapter:g}:{},...v&&!h?{view:y,transformModeAware:!0}:{}},`selection:${gn(g)}`),a.jsx(oa,{explanation:k,testId:`world-surface-status:${n.worldId}`,style:{zIndex:20}}),h?null:v?a.jsx(Vi,{active:t,...g?{adapter:g}:{},containerRef:i,view:y,documentId:r},`controls:${gn(g)}`):a.jsxs(a.Fragment,{children:[a.jsx(Fi,{docId:n.worldId,containerRef:i}),a.jsx(Ji,{containerRef:i,context:D})]})]})}function sa(){const t=d.useSyncExternalStore(ce,ue),e=Math.max(8,24*t.zoom),n=Math.max(.7,Math.min(1.4,t.zoom));return a.jsx("div",{"data-testid":"react-design-canvas-backdrop","aria-hidden":"true",style:{position:"absolute",inset:0,pointerEvents:"none",backgroundColor:Ae,backgroundImage:`radial-gradient(circle, ${ii} ${n}px, transparent ${n}px)`,backgroundPosition:`${t.x}px ${t.y}px`,backgroundSize:`${e}px ${e}px`}})}function Ea(t,e){const n=Lr(),r=e.childAdapters().some(p=>p.role==="world"&&p.kind==="three"),s=e.childAdapters().some(p=>p.kind===Ur);!r&&!s&&jr(Kt,{discardDirty:!0});const i=new Set,u=[];let y=!1;for(const p of e.childAdapters())p.role==="world"&&p.kind==="three"&&u.push(Re(p.worldId,Kt));const v=pi(e),w=v.find(p=>p.kind==="canvas");w&&u.push(Re(w.worldId,Ut));const E=new Set([...e.childAdapters().filter(p=>p.role==="world"&&p.kind==="three"),...w?[w]:[]].map(p=>p.worldId)),S=new Map;function R(){for(const p of v){if(E.has(p.worldId)||S.has(p.worldId))continue;const k=Ci(p.kind);if(!k)continue;const M=Re(p.worldId,k.documentId),D=Tr(p.worldId,()=>k.presence()==="absent"?`Root "${p.worldId}" has no document of its own: its design surface is the project's ${k.title} board (${k.documentId}). ${k.absentReason()}`:null);S.set(p.worldId,()=>{D(),M()})}}u.push(Pr(p=>{const k=$r();if(k.some(D=>D.descriptor.id===p))return null;const M=ki(p);return M?M.presence()==="absent"?M.absentReason():null:`No workspace document is named "${p}". Open in this session: ${k.map(D=>D.descriptor.id).join(", ")||"(none)"}. A component board is present only when the package that owns its medium says this project has one, so a board id can be absent for this project and present for another.`}));function I(p){const k=M=>a.jsx(ia,{...M,composite:e,descriptor:p,store:t});Dr({id:Ut,title:ra,kind:"world",workspaceRole:"authored-subject",provenance:{rootId:p.worldId,...p.path?{sourcePath:p.path}:{}},Content:k,presentation:()=>({kind:"world",id:p.worldId})},{category:"scene",default:!r,rootId:p.worldId})}function g(p){i.add(p.documentId);const k=()=>{i.delete(p.documentId)};try{Promise.resolve(p.install({store:t,composite:e})).catch(k)}catch{k()}}function h(){if(!y){R();for(const p of Ei()){const k=p.presence();if(k===null)continue;const M=i.has(p.documentId);k==="present"!==M&&(k==="present"?g(p):(hn(p.documentId),i.delete(p.documentId)))}}}w&&(I(w),i.add(Ut)),h();const c=zi(h),m=w?Ut:[...i][0];return Or()||(!r&&m!==void 0&&(n===null||n===Kt||n===Mr)?je(m):n?je(n):r&&je(Kt)),()=>{y=!0,c();for(const p of u)p();for(const p of S.values())p();S.clear();for(const p of i)hn(p)}}export{ia as RootDocumentContent,Ea as installRootDocuments};
@@ -2,9 +2,9 @@
2
2
  "files": {
3
3
  "react": "assets/vgai-shared-react-CdM3D1mG.js",
4
4
  "react-dom": "assets/vgai-shared-react-dom-DFajMqMT.js",
5
- "react-dom/client": "assets/vgai-shared-react-dom-client-S0ozfl6_.js",
6
- "react/jsx-runtime": "assets/vgai-shared-jsx-runtime-DIqBpTut.js",
7
- "react/jsx-dev-runtime": "assets/vgai-shared-jsx-dev-runtime-DFDKL7fx.js",
8
- "@fortawesome/react-fontawesome": "assets/vgai-shared-fontawesome-CFSkqz69.js"
5
+ "react-dom/client": "assets/vgai-shared-react-dom-client-CS681GK2.js",
6
+ "react/jsx-runtime": "assets/vgai-shared-jsx-runtime-CUvvjEqj.js",
7
+ "react/jsx-dev-runtime": "assets/vgai-shared-jsx-dev-runtime-hkPLeIJV.js",
8
+ "@fortawesome/react-fontawesome": "assets/vgai-shared-fontawesome-2ZSGa7vM.js"
9
9
  }
10
10
  }
@@ -1,3 +1,3 @@
1
1
  {
2
- "file": "assets/vgai-shared-three-DzfWDqlp.js"
2
+ "file": "assets/vgai-shared-three-CLJ0K3jQ.js"
3
3
  }