@volter/game-editor 0.5.68 → 0.5.69

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 (548) hide show
  1. package/BUNDLED_NOTICES +10954 -5077
  2. package/LICENSE +1 -1
  3. package/LICENSE-BLENDER +2 -2
  4. package/NOTICE +2 -2
  5. package/additions/canvas/package.json +8 -0
  6. package/additions/canvas/src/canvas-mount.ts +46 -0
  7. package/additions/canvas/src/scene2d.tsx +18 -0
  8. package/catalog/entries/bake.json +1 -1
  9. package/catalog/entries/blender.json +3 -3
  10. package/catalog/entries/music.json +5 -5
  11. package/catalog/project-source/LICENSE +1 -1
  12. package/catalog/project-source/src/contributions/bake.kind.ts +2 -2
  13. package/catalog/project-source/src/contributions/builder-document.tsx +1 -1
  14. package/catalog/project-source/src/contributions/builder-ui.tsx +3 -3
  15. package/catalog/project-source/src/contributions/module-source.ts +4 -4
  16. package/catalog/project-source/src/lib/reflections/volume-reflection-material.ts +59 -59
  17. package/catalog/project-source/src/lib/static-batch/Frozen.tsx +1 -1
  18. package/catalog/project-source/src/lib/static-batch/mutation-watch.ts +1 -1
  19. package/catalog/project-source/src/tools/bake-preview.tool.ts +9 -9
  20. package/dist/.vite/manifest.json +3999 -3999
  21. package/dist/assets/{AssetBudgetPanel-P2PeL_X5.js → AssetBudgetPanel-BMR3AQhc.js} +4 -4
  22. package/dist/assets/AudioViewer-DESxi7pU.js +1 -0
  23. package/dist/assets/{CanvasBoardDocument-BFJdTVGp.js → CanvasBoardDocument-Q_nrYFlB.js} +1 -1
  24. package/dist/assets/CanvasSceneViewport-WZMoKy_F.js +1 -0
  25. package/dist/assets/ColorInput-C2EK-OnD.js +1 -0
  26. package/dist/assets/{EntityModelDocument-Du8wIbyK.js → EntityModelDocument-B_4ENTCq.js} +1 -1
  27. package/dist/assets/{EnvironmentAssetDocument-_SttfMY_.js → EnvironmentAssetDocument-BZBp6OFJ.js} +1 -1
  28. package/dist/assets/{GameplaySessionTimeline-CWudWnfd.js → GameplaySessionTimeline-1ivaucpv.js} +1 -1
  29. package/dist/assets/ImageViewer-D16OExYu.js +1 -0
  30. package/dist/assets/{InspectorCanvasPreview-CEr_Kxna.js → InspectorCanvasPreview-BrFjhoiD.js} +1 -1
  31. package/dist/assets/InspectorObjectPreview-CY5xVsPR.js +1 -0
  32. package/dist/assets/JsonAssetDocument-CvjTlcdr.js +2 -0
  33. package/dist/assets/{LiveModuleDocument-BWjOzO_6.js → LiveModuleDocument-ne1o9giX.js} +1 -1
  34. package/dist/assets/{LutAssetDocument-DIc6nsht.js → LutAssetDocument-Cp0v-O7q.js} +1 -1
  35. package/dist/assets/{ModelAssetDocument-_CqTsX_A.js → ModelAssetDocument-Ceu7OIN9.js} +1 -1
  36. package/dist/assets/{NonThreeAuthoringBootstrap-C-V23E1e.js → NonThreeAuthoringBootstrap-DiElZf-e.js} +1 -1
  37. package/dist/assets/Object3DDocumentToolbar-BLNamqii.js +1 -0
  38. package/dist/assets/Object3DDocumentViewport-D6QoHfa_.js +2 -0
  39. package/dist/assets/{Object3DPreview-BPHEr3vI.js → Object3DPreview-ZVokr044.js} +1 -1
  40. package/dist/assets/OnlineAssetDetail-Dnckd7zB.js +1 -0
  41. package/dist/assets/PlayBar-DsMitSgy.js +1 -0
  42. package/dist/assets/{QuarksAssetDocument-4Dne3EHx.js → QuarksAssetDocument-B5J8uHFM.js} +1 -1
  43. package/dist/assets/ReactCanvasControls-CmfvxJYY.js +1 -0
  44. package/dist/assets/RootSelectionOverlay-BWsNiSuM.js +1 -0
  45. package/dist/assets/{ShaderAssetDocument-W3ZjLCkt.js → ShaderAssetDocument-CT7XzsZq.js} +4 -4
  46. package/dist/assets/ShadowEditor-YO5KEfnz.js +1 -0
  47. package/dist/assets/{SourceAssetViewer-BGUeDAEv.js → SourceAssetViewer-FSLup2km.js} +1 -1
  48. package/dist/assets/StageHost-DYfGYwvq.js +2 -0
  49. package/dist/assets/{StoryPreviewMount-Di8uMovM.js → StoryPreviewMount-BhvT5QlB.js} +1 -1
  50. package/dist/assets/ThreeBoardDocument-B-z2nwnH.js +2 -0
  51. package/dist/assets/{ThreeIsolationSceneContent-BAKurKW5.js → ThreeIsolationSceneContent-B5pU4Y6k.js} +1 -1
  52. package/dist/assets/{ToolObject3DPreview-CffvGJ1h.js → ToolObject3DPreview-VtraiQ4Q.js} +1 -1
  53. package/dist/assets/Toolbar-M62Gob9T.js +1 -0
  54. package/dist/assets/{TransientHint-CgmkrmKF.js → TransientHint-Cc40mHWE.js} +1 -1
  55. package/dist/assets/VideoViewer-BxcUwXQm.js +1 -0
  56. package/dist/assets/ViewportShadingMenu-BoMPnTVh.js +1 -0
  57. package/dist/assets/active-ingest-0QjJWb7i.js +3 -0
  58. package/dist/assets/{animation-clock-fLmY_3--.js → animation-clock-BXEwUJtz.js} +1 -1
  59. package/dist/assets/animation-mixers.service-C-Ko4KzM.js +1 -0
  60. package/dist/assets/animation-timeline.utility-Bl15-rYb.js +1 -0
  61. package/dist/assets/{asset-budget-asset.menu-BDRDWrvx.js → asset-budget-asset.menu-BUa3g0Wy.js} +1 -1
  62. package/dist/assets/{asset-budget.action-tQmNGQHC.js → asset-budget.action-Dl5eVPIo.js} +1 -1
  63. package/dist/assets/{asset-budget.document-BthgX37Z.js → asset-budget.document-DJylQ-0h.js} +1 -1
  64. package/dist/assets/{asset-budget.menu-DfyWVH6p.js → asset-budget.menu-BJtvNMLj.js} +1 -1
  65. package/dist/assets/asset-editor-persistence-BIbf5u0Q.js +1 -0
  66. package/dist/assets/asset-loaders-DoNflsHL.js +2 -0
  67. package/dist/assets/{asset-preview-Cv7tfD98.js → asset-preview-DxlSdRZn.js} +1 -1
  68. package/dist/assets/{audio-unlock.service-BvHvZjzx.js → audio-unlock.service-CTaiyXF9.js} +1 -1
  69. package/dist/assets/audio.utility-CEmNc68t.js +1 -0
  70. package/dist/assets/autoplay.service-BZLSUyL8.js +1 -0
  71. package/dist/assets/{babylon-authoring-adapter-Cg5ALSpr.js → babylon-authoring-adapter-BZvV2bz_.js} +1 -1
  72. package/dist/assets/binding-resolver-DGbk9_XR.js +2 -0
  73. package/dist/assets/blender-emscripten-engine-B7lfg-RX.js +2 -0
  74. package/dist/assets/{blender-node-editor.document-B92MO51u.js → blender-node-editor.document-wXJobGNH.js} +1 -1
  75. package/dist/assets/{blender-properties-tab-CDVyDAbf.js → blender-properties-tab-7GFf80ev.js} +1 -1
  76. package/dist/assets/{blender-runtime-host-CuniE0sy.js → blender-runtime-host-CILxrx5T.js} +2 -2
  77. package/dist/assets/{blender-runtime-skin-B_tOz5j5.js → blender-runtime-skin-Cd5lQYsC.js} +7 -7
  78. package/dist/assets/{blender-runtime.document-DxUwLiEW.js → blender-runtime.document-C0r_R49S.js} +7 -7
  79. package/dist/assets/{blender-timeline.document-BdEEoQbK.js → blender-timeline.document-BaISZMBc.js} +1 -1
  80. package/dist/assets/{blender-uv-editor.document-EMSUlRh4.js → blender-uv-editor.document-CT_fsyyA.js} +1 -1
  81. package/dist/assets/blender-version.status-DzEx7u7k.js +1 -0
  82. package/dist/assets/blender-wali-engine-DOiQCBXH.js +2 -0
  83. package/dist/assets/{blender.command-BkBML2SY.js → blender.command-DdiKd8mZ.js} +1 -1
  84. package/dist/assets/blender.status-BMETIbb2.js +1 -0
  85. package/dist/assets/board-guides-CjHQ9Ynm.js +1 -0
  86. package/dist/assets/body-marks-C1LxJtQb.js +1 -0
  87. package/dist/assets/{bridge.command-VnplZ81v.js → bridge.command-DXUeavn5.js} +3 -3
  88. package/dist/assets/{browserAll-BCmkqg8n.js → browserAll-Dg46xT22.js} +1 -1
  89. package/dist/assets/{build-player.document-DV7YcJQt.js → build-player.document-BHwVV3K0.js} +1 -1
  90. package/dist/assets/build-profiles.document-HkpS-Kxa.js +2 -0
  91. package/dist/assets/build-progress.status-u1J0Rm1D.js +1 -0
  92. package/dist/assets/{build-session-BGe0eGrQ.js → build-session-BLboUUbw.js} +2 -2
  93. package/dist/assets/{build.action-Bdj4ZEL_.js → build.action-C00DL83N.js} +1 -1
  94. package/dist/assets/{build.command-DAWiYvPa.js → build.command-Cjk_NY75.js} +1 -1
  95. package/dist/assets/build.header-BWNmNWFT.js +1 -0
  96. package/dist/assets/{build.menu-BiRNC_xc.js → build.menu-BBYtqCIq.js} +1 -1
  97. package/dist/assets/{build.service-Dw9K6VSF.js → build.service-DOU15tKN.js} +1 -1
  98. package/dist/assets/{camera-C-qXzXFf.js → camera-7DGyYW7Y.js} +1 -1
  99. package/dist/assets/{camera-runtime.inspector-BDrwWRlU.js → camera-runtime.inspector-n-jiOR-3.js} +1 -1
  100. package/dist/assets/{canvas-design-mount-DLn49Zle.js → canvas-design-mount-CSRHU-ag.js} +4 -4
  101. package/dist/assets/canvas-entry-runtime-BST8yRuK.js +2 -0
  102. package/dist/assets/{canvas-preview-frames-B5xFRjhQ.js → canvas-preview-frames-Cja32aW2.js} +1 -1
  103. package/dist/assets/{canvas-story-capture.service-DQ_leYyi.js → canvas-story-capture.service-D5R5HJ8n.js} +2 -2
  104. package/dist/assets/capability-coverage-ByWftxk4.js +7 -0
  105. package/dist/assets/{collaboration-presence-BOS1t8wI.js → collaboration-presence-D6MC9xJN.js} +1 -1
  106. package/dist/assets/{collider-Bf4Uk6LW.js → collider-B78EcUc9.js} +1 -1
  107. package/dist/assets/{component-board.service-DFSSCaCf.js → component-board.service-BaQI5Oas.js} +2 -2
  108. package/dist/assets/component-board.service-CkjrsD8x.js +2 -0
  109. package/dist/assets/{component-board.service-CpVXGhz5.js → component-board.service-Dvjz_g-x.js} +2 -2
  110. package/dist/assets/component-contracts.service-C3-AXQp7.js +1 -0
  111. package/dist/assets/component-instance-root-DLI40MiB.js +1 -0
  112. package/dist/assets/{component-verbs.command-DGzZAV_Z.js → component-verbs.command-Brr_WcaR.js} +1 -1
  113. package/dist/assets/{component-verbs.service-D1rVRogp.js → component-verbs.service-DC2sC3j3.js} +1 -1
  114. package/dist/assets/{config-D-EAAhqP.js → config-BI_7osdR.js} +4 -4
  115. package/dist/assets/{configurations-_HZOWZPy.js → configurations-XP9YLkrt.js} +1 -1
  116. package/dist/assets/connection.status-BhRwcFx0.js +1 -0
  117. package/dist/assets/{constraint-5KLYpGm7.js → constraint-Bp1l8hY-.js} +1 -1
  118. package/dist/assets/constraints.inspector-Dm1cycK3.js +1 -0
  119. package/dist/assets/{content-bounds-DKBD7nsv.js → content-bounds-DROIchTa.js} +1 -1
  120. package/dist/assets/{contract-system-adapters-h6OUBRYA.js → contract-system-adapters-Cn7OW_ay.js} +1 -1
  121. package/dist/assets/coverage.service-l42ty7lr.js +3 -0
  122. package/dist/assets/{create-runtime-Bg2uYMfh.js → create-runtime-B_uTwsmi.js} +2 -2
  123. package/dist/assets/curve-THOUsg-j.js +1 -0
  124. package/dist/assets/{data-asset-7Nfmx-28.js → data-asset-DAANayR6.js} +1 -1
  125. package/dist/assets/data-check-core-CHqar_E8.js +1 -0
  126. package/dist/assets/data-ref-CN34UeVw.js +1 -0
  127. package/dist/assets/debug-bridge-BD1XVAIB.js +1 -0
  128. package/dist/assets/debug-registry-ggQWxtu-.js +1 -0
  129. package/dist/assets/{deferred-ingest-play-Bej67_y9.js → deferred-ingest-play-B2JUlwlT.js} +2 -2
  130. package/dist/assets/{design-time-canvas-mount-CFW9ZWuk.js → design-time-canvas-mount-as9cN9I6.js} +2 -2
  131. package/dist/assets/design-time-layers-BRseeSmV.js +1 -0
  132. package/dist/assets/{design-time-mount.service-DJeAPUB_.js → design-time-mount.service-BTVu3yKo.js} +2 -2
  133. package/dist/assets/{design-time-mount.service-_R1UDCw3.js → design-time-mount.service-DKvc7lVK.js} +2 -2
  134. package/dist/assets/design-time-react-mount-C7rB56QD.js +1 -0
  135. package/dist/assets/{document-preview-three-5cbuuJMH.js → document-preview-three-CxmRhCcV.js} +1 -1
  136. package/dist/assets/{dom-authoring-adapter-CoESNvrM.js → dom-authoring-adapter-L8OzXfmE.js} +1 -1
  137. package/dist/assets/{draco3d-Sk9K4AUT.js → draco3d-BjNuXv66.js} +1 -1
  138. package/dist/assets/{edit-mode-audio.service-CH6J-8N7.js → edit-mode-audio.service-BwI5u845.js} +1 -1
  139. package/dist/assets/edit-mode-authoring-D5f7aHHl.js +1 -0
  140. package/dist/assets/{edit-mode-networking.service-C4o2pGHX.js → edit-mode-networking.service-DqP_4lbI.js} +1 -1
  141. package/dist/assets/editor-api-BM7H_F4G.js +1 -0
  142. package/dist/assets/{editor-layers-B4oYfpj8.js → editor-layers-D-CTUqco.js} +1 -1
  143. package/dist/assets/editor-presentation-activity-CqJH4G9t.js +1 -0
  144. package/dist/assets/{editor-shell-store-Bh1S7M54.js → editor-shell-store-DHVWS8cE.js} +1 -1
  145. package/dist/assets/{entity-object-B_5Gc0Ky.js → entity-object-MKYemTFM.js} +1 -1
  146. package/dist/assets/{extend-DcEyE5jI.js → extend-BrgqZiMY.js} +1 -1
  147. package/dist/assets/{fork-menu-CKjNh3MO.js → fork-menu-DE2MK3Nq.js} +1 -1
  148. package/dist/assets/{frame-debugger-store-D5YViF_8.js → frame-debugger-store-BXoLKTdZ.js} +1 -1
  149. package/dist/assets/game-audio-BeCyd0Ha.js +1 -0
  150. package/dist/assets/{game-contract-seams-C0AVYwvO.js → game-contract-seams-tyKDsfaP.js} +1 -1
  151. package/dist/assets/{game-css-scope-transform-8GOvVu1s.js → game-css-scope-transform-DcjrwtVc.js} +2 -2
  152. package/dist/assets/game-document.service-CTb2itHQ.js +1 -0
  153. package/dist/assets/{game-eval.command-4wa9vqWE.js → game-eval.command-CpDKXOQU.js} +2 -2
  154. package/dist/assets/game-module-access-BTInp2NG.js +1 -0
  155. package/dist/assets/game-network-DW5ARz4R.js +22 -0
  156. package/dist/assets/{gameplay-export-K5AcStVC.js → gameplay-export-cHk3v9y-.js} +1 -1
  157. package/dist/assets/gameplay-replay-HRenPTtU.js +1 -0
  158. package/dist/assets/{gameplay.command-DoWqBWhH.js → gameplay.command-DcY2lKKX.js} +1 -1
  159. package/dist/assets/generation-CdOATubd.css +1 -0
  160. package/dist/assets/{generation-jobs-CiabIfR0.js → generation-jobs-CJBehuUp.js} +1 -1
  161. package/dist/assets/generation.service-BMOc-C9i.js +1 -0
  162. package/dist/assets/{generations-DU9rCeQR.js → generations-ssgVOe_6.js} +1 -1
  163. package/dist/assets/generations.status-B_SmPReI.js +1 -0
  164. package/dist/assets/hierarchy-marks-BuCO8Ke-.js +1 -0
  165. package/dist/assets/hierarchy-marks-CsTaTkc7.js +1 -0
  166. package/dist/assets/hosted-asset-materialization-CiXZI85V.js +2 -0
  167. package/dist/assets/{ibl-override-material-CiKkaOTW.js → ibl-override-material-CMo_a49U.js} +1 -1
  168. package/dist/assets/index-B0S4fQQV.js +1 -0
  169. package/dist/assets/{index-Kb9_s5aP.js → index-B9bd4k-t.js} +1 -1
  170. package/dist/assets/index-BMxv2MNV.js +1 -0
  171. package/dist/assets/{index-CC1puVjo.js → index-Bm4_DmRO.js} +1 -1
  172. package/dist/assets/{index-BsYc2Oyj.js → index-BvBlIRwM.js} +1 -1
  173. package/dist/assets/{index-C4AUQbmq.js → index-BweKDdi_.js} +1 -1
  174. package/dist/assets/{index-CaG87ZF-.js → index-C5ZAyrKq.js} +271 -270
  175. package/dist/assets/index-CPiRKiDC.css +1 -0
  176. package/dist/assets/index-CfpGZrbC.js +1 -0
  177. package/dist/assets/index-Czvj6whv.js +1 -0
  178. package/dist/assets/{index-C20Flc1s.js → index-DgPDGGSV.js} +2 -2
  179. package/dist/assets/{inference-diagnostics-MGcIHEX6.js → inference-diagnostics-DLt9ql9I.js} +1 -1
  180. package/dist/assets/{ingest-boot-viewport-D2okO6JI.js → ingest-boot-viewport-BXVXjYpG.js} +1 -1
  181. package/dist/assets/ingest-siblings-DWJ7OGB_.js +1 -0
  182. package/dist/assets/ingest-source-persistence-6ShMoSCa.js +1 -0
  183. package/dist/assets/ingest.service-BBbX8ibg.js +1 -0
  184. package/dist/assets/{inspect-C8RP8G5F.js → inspect-Cz3Zyx_1.js} +1 -1
  185. package/dist/assets/inspection-D8fZOHCM.js +1 -0
  186. package/dist/assets/instances.command-BrdlngrL.js +1 -0
  187. package/dist/assets/{json-history-resource-CTXRV4GD.js → json-history-resource-Uqrihfc8.js} +1 -1
  188. package/dist/assets/{layered-pick-B_-BRrRD.js → layered-pick-CAVQMPI7.js} +1 -1
  189. package/dist/assets/{light-CskDQ8gF.js → light-CqzsCWeJ.js} +1 -1
  190. package/dist/assets/{live-project-verbs-BOAQN3ME.js → live-project-verbs-CdFmLYOo.js} +1 -1
  191. package/dist/assets/{machine.document-BxOoCOo9.js → machine.document-DRIFOVaa.js} +1 -1
  192. package/dist/assets/{machines.finder-CqEceWzS.js → machines.finder-DPCT6few.js} +1 -1
  193. package/dist/assets/material-BVApn1V_.js +1 -0
  194. package/dist/assets/{material-factory-qB9pzcQf.js → material-factory-B_75xxFD.js} +1 -1
  195. package/dist/assets/{mesh-5--4qA-C.js → mesh-DdA3mExo.js} +1 -1
  196. package/dist/assets/model-asset-sections-D1uxOu2v.css +1 -0
  197. package/dist/assets/model-asset-sections.service-CJnSIckZ.js +1 -0
  198. package/dist/assets/{model-inspection-MrJY0U_-.js → model-inspection-DvspbmJl.js} +1 -1
  199. package/dist/assets/{model-thumbnail-uk-2sblh.js → model-thumbnail-BmQs-h6t.js} +1 -1
  200. package/dist/assets/{models.finder-rk8dhgO8.js → models.finder-Qv_Hsccy.js} +1 -1
  201. package/dist/assets/module-mode-MJ4Gbsry.js +2 -0
  202. package/dist/assets/mount-canvas-ingest-root-BxtM8OaB.js +2 -0
  203. package/dist/assets/mount-dom-ingest-root-pGatqO46.js +2 -0
  204. package/dist/assets/{mount-ingest-root-BC3-1Cw1.js → mount-ingest-root-C7jb-mCl.js} +2 -2
  205. package/dist/assets/{mount-manifest-QJOB11Kv.js → mount-manifest-BfoHBuzn.js} +1 -1
  206. package/dist/assets/mount-readiness-DyAd17pe.js +4 -0
  207. package/dist/assets/mount-three-ingest-root-Boa5mcaF.js +1 -0
  208. package/dist/assets/{mounted-authoring-B7RL_V28.js → mounted-authoring-DxMISwvR.js} +1 -1
  209. package/dist/assets/{mounted-story-viewport-source-CnYhX3vW.js → mounted-story-viewport-source-DfnLxI1f.js} +1 -1
  210. package/dist/assets/{native-debug-module-B-rWJfWE.js → native-debug-module-BlrALjM3.js} +1 -1
  211. package/dist/assets/{navigation-BVu-aVmF.js → navigation-CqG5o5AR.js} +1 -1
  212. package/dist/assets/{navmesh.menu-C3M63eR4.js → navmesh.menu-D4TdVDhe.js} +1 -1
  213. package/dist/assets/{navmesh.service-B0H1fUfn.js → navmesh.service-DWKT5ruQ.js} +1 -1
  214. package/dist/assets/network-observer.service-ZRAquNq4.js +1 -0
  215. package/dist/assets/network.utility-DjeOEvAY.js +1 -0
  216. package/dist/assets/object-marks-BnvSuCTt.js +1 -0
  217. package/dist/assets/{object3d-authoring-subject-BDrxd1GA.js → object3d-authoring-subject-XccsO0xG.js} +1 -1
  218. package/dist/assets/{object3d-document-session-registry-OjqzJ86S.js → object3d-document-session-registry-CMRJdFp6.js} +2 -2
  219. package/dist/assets/{oid-transform-Bzc2ZJSH.js → oid-transform-DaA6yW6o.js} +1 -1
  220. package/dist/assets/{particles-Be7AvO4c.js → particles-DsQRcDBY.js} +1 -1
  221. package/dist/assets/{performance-profiler-OwnXQX0M.js → performance-profiler-CMbwGBuk.js} +1 -1
  222. package/dist/assets/pixi-authoring-adapter-BoBt8bB5.js +1 -0
  223. package/dist/assets/pixi-live-write-target-CYZgvC6U.js +1 -0
  224. package/dist/assets/{play.command-CIGRq8ow.js → play.command-D9JGJP-e.js} +2 -2
  225. package/dist/assets/pose-guard-CLabLSzf.js +1 -0
  226. package/dist/assets/presentation-COhHQdmR.js +1 -0
  227. package/dist/assets/{product-BN31wSnB.js → product-CaRGoiIH.js} +1 -1
  228. package/dist/assets/{profiler.action-D57Kj9ym.js → profiler.action-Cz7HYWjh.js} +1 -1
  229. package/dist/assets/{profiler.menu-Dh9Q5DDx.js → profiler.menu-D5aR_FBy.js} +1 -1
  230. package/dist/assets/profiler.utility-KwxlIPKb.js +1 -0
  231. package/dist/assets/{project-authoring-session-LCJAwGrD.js → project-authoring-session-DKXHVwxO.js} +2 -2
  232. package/dist/assets/project-provenance-BGnJXJwa.js +1 -0
  233. package/dist/assets/{properties-bone-constraints.inspector-CaIDq5nN.js → properties-bone-constraints.inspector-Bo-sU8eR.js} +1 -1
  234. package/dist/assets/{properties-bone.inspector-D2fcQGMF.js → properties-bone.inspector-BQiWplQv.js} +1 -1
  235. package/dist/assets/{properties-collection.inspector-CF5AtTAd.js → properties-collection.inspector-C5BnR-GE.js} +1 -1
  236. package/dist/assets/{properties-constraints.inspector-Bj2itDrS.js → properties-constraints.inspector-CyheU12R.js} +1 -1
  237. package/dist/assets/{properties-data.inspector-BfRqk0Xo.js → properties-data.inspector-CkycARja.js} +1 -1
  238. package/dist/assets/{properties-material.inspector-Bf8H0mvu.js → properties-material.inspector-Bl_PUmY-.js} +1 -1
  239. package/dist/assets/{properties-modifiers.inspector-BKShc1TH.js → properties-modifiers.inspector-j7SnOxQq.js} +1 -1
  240. package/dist/assets/{properties-object.inspector-YBh8ABnN.js → properties-object.inspector-DcR3MGLK.js} +1 -1
  241. package/dist/assets/{properties-output.inspector-CVkzfs-l.js → properties-output.inspector-BLjw6K4b.js} +1 -1
  242. package/dist/assets/{properties-particles.inspector-ChDpAq-2.js → properties-particles.inspector-BUIm2-Jf.js} +1 -1
  243. package/dist/assets/{properties-physics.inspector-BLEM7aMj.js → properties-physics.inspector-DNvRcxb6.js} +1 -1
  244. package/dist/assets/{properties-render.inspector-vU4D9xLL.js → properties-render.inspector-8FMZ-qoZ.js} +1 -1
  245. package/dist/assets/{properties-scene.inspector-C-DoN-kL.js → properties-scene.inspector-Dx7_z75k.js} +1 -1
  246. package/dist/assets/{properties-texture.inspector-DySxy1oU.js → properties-texture.inspector-WT15951-.js} +1 -1
  247. package/dist/assets/{properties-view-layer.inspector-DEKxMahJ.js → properties-view-layer.inspector-P7VNTdqr.js} +1 -1
  248. package/dist/assets/{properties-world.inspector-m5qL_TQV.js → properties-world.inspector-B3t1q8TF.js} +1 -1
  249. package/dist/assets/r3f-design-session-lsbFnoWH.js +2 -0
  250. package/dist/assets/{r3f-physics-binding-Bgzzd4ol.js → r3f-physics-binding-Cx8yhuwt.js} +1 -1
  251. package/dist/assets/{r3f-source-authoring-adapter-C8oMjdTL.js → r3f-source-authoring-adapter-jH3G0TeH.js} +1 -1
  252. package/dist/assets/react-canvas-navigation-B_gOe3CI.js +1 -0
  253. package/dist/assets/react-inspector.service-CZf1vfdX.js +1 -0
  254. package/dist/assets/react-story-board-CCm2Opwn.js +1 -0
  255. package/dist/assets/{react-three-rapier.esm-BR2ttgLS.js → react-three-rapier.esm-CHXGG51p.js} +1 -1
  256. package/dist/assets/react-world-authoring-adapter-CnzxMtYz.js +1 -0
  257. package/dist/assets/{realm-services-DefTrXnY.js → realm-services-Do9J6nsb.js} +1 -1
  258. package/dist/assets/reflection-probe-capture.inspector-BAjjIybz.js +1 -0
  259. package/dist/assets/{reflection-probe-BHNGwVyz.js → reflection-probe-sIto9mh0.js} +1 -1
  260. package/dist/assets/registry-Xnduk02T.js +1 -0
  261. package/dist/assets/{relative-import-specifier-DQzkawgj.js → relative-import-specifier-CPFTrxi4.js} +1 -1
  262. package/dist/assets/{render-env-BZ7LsGfk.js → render-env-YJlI8K0i.js} +1 -1
  263. package/dist/assets/{render-features-C7QwmhCo.js → render-features-DMSV2qKJ.js} +1 -1
  264. package/dist/assets/{render-settings-BBvkacR3.js → render-settings-CRyDhHyz.js} +1 -1
  265. package/dist/assets/resolve-three-D27rMc37.js +702 -0
  266. package/dist/assets/root-seam-contract-gjWUd5uu.js +1 -0
  267. package/dist/assets/{run-selection-BUeubtHj.js → run-selection-B0jOdyYt.js} +1 -1
  268. package/dist/assets/scene-capture-Di9cM1p4.js +1 -0
  269. package/dist/assets/scene-document.service-XxGs4HHE.js +2 -0
  270. package/dist/assets/{scene-framing-PVMqGU8h.js → scene-framing-DkZKDwH3.js} +1 -1
  271. package/dist/assets/{scene-index--lRWLEmW.js → scene-index-DHeKmalD.js} +1 -1
  272. package/dist/assets/{scene-query-s1y04OVB.js → scene-query-ByZtXA2m.js} +1 -1
  273. package/dist/assets/seeded-random-BJthDRMu.js +1 -0
  274. package/dist/assets/{session-CTXsU1lK.js → session-x8E_NJk2.js} +34 -34
  275. package/dist/assets/{setup-renderer-OOw1SykJ.js → setup-renderer-F9mG7t6r.js} +1 -1
  276. package/dist/assets/{source-object3d-authoring-adapter-RmutT5Dt.js → source-object3d-authoring-adapter-CvmFpSUj.js} +1 -1
  277. package/dist/assets/{source-persistence-backend-HviqjKZ2.js → source-persistence-backend-au3WtEn6.js} +1 -1
  278. package/dist/assets/{spark-renderer-lifecycle-DfYpvEJa.js → spark-renderer-lifecycle-B6Axb6jm.js} +1 -1
  279. package/dist/assets/{stage-keyboard-DDi7S27C.js → stage-keyboard-BQkndG_D.js} +1 -1
  280. package/dist/assets/stage-overlay-set-g6eWhuRv.js +1 -0
  281. package/dist/assets/stage-presence-markers-0CDfO5f4.js +1 -0
  282. package/dist/assets/stage-transform-tools-BzPl7OIo.js +1 -0
  283. package/dist/assets/standard-viewport-dressing-BW-dM_1h.js +24 -0
  284. package/dist/assets/{state-watch.action-DEdb1mNa.js → state-watch.action-Z1nQ5awu.js} +1 -1
  285. package/dist/assets/{state-watch.menu-jWbUM3kw.js → state-watch.menu-CQHGUF3W.js} +1 -1
  286. package/dist/assets/state-watch.utility-DCIg2i79.js +1 -0
  287. package/dist/assets/{story-capture-Dj1xkeKH.js → story-capture-BIrjDKeY.js} +1 -1
  288. package/dist/assets/story-documents-BvG2xeaR.js +3 -0
  289. package/dist/assets/{story-documents.service-iNP-ORNr.js → story-documents.service-DOSEa3ja.js} +1 -1
  290. package/dist/assets/{story-documents.service-BzQCuNBu.js → story-documents.service-y1m7XGMJ.js} +1 -1
  291. package/dist/assets/{story-media-presence-zTPlU9HR.js → story-media-presence-HLV-KaMj.js} +1 -1
  292. package/dist/assets/{story-pixi-preview-B7THvSl7.js → story-pixi-preview-CMhho2gG.js} +1 -1
  293. package/dist/assets/{story-presentation-BLXYPadR.js → story-presentation-CYhVv8Ku.js} +1 -1
  294. package/dist/assets/story-three-preview-CgcLF5lE.js +2 -0
  295. package/dist/assets/{structural-ids-Br2zjINh.js → structural-ids-BOo2BRoY.js} +1 -1
  296. package/dist/assets/studio-environment-R9qXUUcC.js +2 -0
  297. package/dist/assets/{surface-state-D9j6qNu8.js → surface-state-D8Qnowo6.js} +1 -1
  298. package/dist/assets/{syntactic-prop-specs-BTnsMOvH.js → syntactic-prop-specs-8gkBuc5j.js} +1 -1
  299. package/dist/assets/team-playtest.service-BBMZ2iyk.js +1 -0
  300. package/dist/assets/{three-oYrcK5SQ.js → three-DiL6vMXq.js} +1 -1
  301. package/dist/assets/three-authoring-adapter-CkLR2zGf.js +1 -0
  302. package/dist/assets/three-authoring.service-CovhlCGx.js +2 -0
  303. package/dist/assets/{three-ingest-runtime-CXKjNysA.js → three-ingest-runtime-CwTqAHgX.js} +1 -1
  304. package/dist/assets/{three-integration-CuAnYaTW.js → three-integration-DXOFI88n.js} +2 -2
  305. package/dist/assets/three-integration.service-rCAqpqSp.js +1 -0
  306. package/dist/assets/three-projection-core-B7Lf8tOp.js +1 -0
  307. package/dist/assets/{three-state-wXRU3rLr.js → three-state-BCACvUtm.js} +1 -1
  308. package/dist/assets/{three-story-capture.service-DMJRcqjr.js → three-story-capture.service-rTFKNtHA.js} +2 -2
  309. package/dist/assets/{three-story-model-DgiAP-oQ.js → three-story-model-BjKr7OMn.js} +1 -1
  310. package/dist/assets/three-viewport-presentation-CBzvc2v2.js +141 -0
  311. package/dist/assets/tools-DfctM216.js +1 -0
  312. package/dist/assets/transform-mode-request-DlEApNrA.js +1 -0
  313. package/dist/assets/transport-strip-xCg94CuI.js +1 -0
  314. package/dist/assets/transport.header-BRtdky0x.js +1 -0
  315. package/dist/assets/{trigger-volume-DP0G1VBe.js → trigger-volume-BLkHmfm9.js} +1 -1
  316. package/dist/assets/tuples-BDz3wbQL.js +1 -0
  317. package/dist/assets/ui-board-document-DvbK_HVN.js +2 -0
  318. package/dist/assets/{user-data-CqOoAowZ.js → user-data-C84W0V47.js} +1 -1
  319. package/dist/assets/user-data-CODoGZqA.js +1 -0
  320. package/dist/assets/{utility-view-state-Db97zwDz.js → utility-view-state-CDRxZSo-.js} +1 -1
  321. package/dist/assets/viewport-door-BARIpMu-.js +1 -0
  322. package/dist/assets/{viewport-root-presentation-B35t51xX.js → viewport-root-presentation-hRLF0BeO.js} +1 -1
  323. package/dist/assets/{viewport-surface-status-D5kZtFW5.js → viewport-surface-status-TUfhXKR9.js} +1 -1
  324. package/dist/assets/{webworkerAll-CfKEb4Ao.js → webworkerAll-PJtcQ1FD.js} +1 -1
  325. package/dist/assets/worker-BtXrsgFy.js +2 -0
  326. package/dist/assets/workspace-arrangement-DqG5sUns.js +1 -0
  327. package/dist/assets/world-documents-D69XaqUX.js +1 -0
  328. package/dist/assets/world-root-stage-binding-BgZWZEuD.js +1 -0
  329. package/dist/assets/{xstate-animation-binding-aQEmNSpm.js → xstate-animation-binding-CIyLzGHs.js} +1 -1
  330. package/dist/assets/{xstate-animation-meta-CnMX1Sc1.js → xstate-animation-meta-CbYWup3R.js} +1 -1
  331. package/dist/volter-shared-react.json +10 -0
  332. package/dist/volter-shared-three.json +3 -0
  333. package/dist-node/cli.js +239 -201
  334. package/dist-node/create.js +89 -73
  335. package/package.json +20 -19
  336. package/src/contributions.d.ts +1 -1
  337. package/src/index.ts +10 -10
  338. package/starter/cube.py +1 -1
  339. package/template/.agents/references/project-manual.md +17 -17
  340. package/template/.agents/skills/editor/SKILL.md +6 -6
  341. package/template/.agents/skills/editor/agents/openai.yaml +3 -3
  342. package/template/.agents/skills/editor/references/editor-control.md +62 -62
  343. package/template/.agents/skills/{vgai-3d-models → volter-3d-models}/SKILL.md +3 -3
  344. package/template/.agents/skills/{vgai-ingest-existing-game → volter-ingest-existing-game}/SKILL.md +2 -2
  345. package/template/.agents/skills/{vgai-music → volter-music}/SKILL.md +7 -7
  346. package/template/{.github/skills/vgai-threejs-authoring → .agents/skills/volter-threejs-authoring}/SKILL.md +9 -9
  347. package/template/.agents/skills/volter-threejs-authoring/agents/openai.yaml +4 -0
  348. package/template/{.claude/skills/vgai-threejs-authoring → .agents/skills/volter-threejs-authoring}/references/helper-catalog.md +1 -1
  349. package/template/.claude/skills/editor/SKILL.md +6 -6
  350. package/template/.claude/skills/editor/agents/openai.yaml +3 -3
  351. package/template/.claude/skills/editor/references/editor-control.md +62 -62
  352. package/template/{.github/skills/vgai-3d-models → .claude/skills/volter-3d-models}/SKILL.md +3 -3
  353. package/template/{.github/skills/vgai-ingest-existing-game → .claude/skills/volter-ingest-existing-game}/SKILL.md +2 -2
  354. package/template/.claude/skills/{vgai-threejs-authoring → volter-threejs-authoring}/SKILL.md +9 -9
  355. package/template/.claude/skills/volter-threejs-authoring/agents/openai.yaml +4 -0
  356. package/template/{.agents/skills/vgai-threejs-authoring → .claude/skills/volter-threejs-authoring}/references/helper-catalog.md +1 -1
  357. package/template/.github/copilot-instructions.md +1 -1
  358. package/template/.github/skills/editor/SKILL.md +6 -6
  359. package/template/.github/skills/editor/agents/openai.yaml +3 -3
  360. package/template/.github/skills/editor/references/editor-control.md +62 -62
  361. package/template/{.claude/skills/vgai-3d-models → .github/skills/volter-3d-models}/SKILL.md +3 -3
  362. package/template/{.claude/skills/vgai-ingest-existing-game → .github/skills/volter-ingest-existing-game}/SKILL.md +2 -2
  363. package/template/{.agents/skills/vgai-threejs-authoring → .github/skills/volter-threejs-authoring}/SKILL.md +9 -9
  364. package/template/.github/skills/volter-threejs-authoring/agents/openai.yaml +4 -0
  365. package/template/.github/skills/{vgai-threejs-authoring → volter-threejs-authoring}/references/helper-catalog.md +1 -1
  366. package/template/.mcp.json +3 -3
  367. package/template/AGENTS.md +24 -23
  368. package/template/DEVLOG.md +1 -1
  369. package/template/IDIOMS.md +3 -3
  370. package/template/LICENSE +3 -3
  371. package/template/README.md +12 -12
  372. package/template/check-idioms.ts +51 -51
  373. package/template/manifest-entry-modules-plugin.ts +17 -4
  374. package/template/package.json +13 -15
  375. package/template/server/loopback.ts +1 -1
  376. package/template/server/main.ts +4 -4
  377. package/template/server/rooms/arena-room.ts +8 -8
  378. package/template/server/rooms/game-room.ts +8 -8
  379. package/template/server/rooms.ts +2 -2
  380. package/template/src/bot/QaTester.tsx +1 -1
  381. package/template/src/bot/bot-station.ts +2 -2
  382. package/template/src/bot/tester-station.ts +1 -1
  383. package/template/src/contributions/README.md +1 -1
  384. package/template/src/contributions/analytics.analytics.tsx +1 -1
  385. package/template/src/contributions/data.document.tsx +2 -2
  386. package/template/src/contributions/pages.finder.ts +1 -1
  387. package/template/src/contributions/tester.inspector.tsx +2 -2
  388. package/template/src/contributions/use-game-modules.ts +1 -1
  389. package/template/src/input.ts +1 -1
  390. package/template/src/lib/reflections/volume-reflection-material.ts +59 -59
  391. package/template/src/lib/static-batch/Frozen.tsx +1 -1
  392. package/template/src/lib/static-batch/mutation-watch.ts +1 -1
  393. package/template/src/main.ts +19 -38
  394. package/template/src/manifest-entry-modules.d.ts +12 -1
  395. package/template/src/prefabs/HeroBox.stories.tsx +1 -1
  396. package/template/src/world.tsx +1 -1
  397. package/template/tsconfig.json +1 -1
  398. package/template/validate-manifest.ts +3 -3
  399. package/template/vite.config.ts +11 -11
  400. package/template/{vgai.adapter.ts → volter.adapter.ts} +1 -1
  401. package/template/{vgai.project.json → volter.project.json} +2 -2
  402. package/template-dotfiles/gitignore +27 -27
  403. package/workbench/src/media/game-cover.css +11 -11
  404. package/workbench/src/product.contribution.ts +28 -28
  405. package/workbench/src/{vgaiGameSkew.ts → volterGameSkew.ts} +16 -16
  406. package/dist/assets/AudioViewer-xFb5Wv7A.js +0 -1
  407. package/dist/assets/CanvasSceneViewport-vqBlOz8P.js +0 -1
  408. package/dist/assets/ColorInput-CX1UZjYO.js +0 -1
  409. package/dist/assets/ImageViewer-shZzMd91.js +0 -1
  410. package/dist/assets/InspectorObjectPreview-BMOvJaOw.js +0 -1
  411. package/dist/assets/JsonAssetDocument-D_HXneWE.js +0 -2
  412. package/dist/assets/Object3DDocumentToolbar-BfPH9jz5.js +0 -1
  413. package/dist/assets/Object3DDocumentViewport-BaXWtATg.js +0 -2
  414. package/dist/assets/OnlineAssetDetail-BxibUH6K.js +0 -1
  415. package/dist/assets/PlayBar-DRANyO01.js +0 -1
  416. package/dist/assets/ReactCanvasControls-K98jOX9b.js +0 -1
  417. package/dist/assets/RootSelectionOverlay-BQC12Gdd.js +0 -1
  418. package/dist/assets/ShadowEditor-DP1LWynl.js +0 -1
  419. package/dist/assets/StageHost-V_0opXFt.js +0 -2
  420. package/dist/assets/ThreeBoardDocument-tgcaZDqQ.js +0 -2
  421. package/dist/assets/Toolbar-uLgsrB2z.js +0 -1
  422. package/dist/assets/VideoViewer-ClUJ6_uy.js +0 -1
  423. package/dist/assets/ViewportShadingMenu-Bdkc6jcd.js +0 -1
  424. package/dist/assets/active-ingest-CnAeQcuQ.js +0 -3
  425. package/dist/assets/animation-mixers.service-DiecMX_A.js +0 -1
  426. package/dist/assets/animation-timeline.utility-C71vPJgs.js +0 -1
  427. package/dist/assets/asset-editor-persistence-BQgjOCrm.js +0 -1
  428. package/dist/assets/asset-loaders-5PIUVvmH.js +0 -2
  429. package/dist/assets/audio.utility-D9Vk_WYS.js +0 -1
  430. package/dist/assets/autoplay.service-CFJoLPLw.js +0 -1
  431. package/dist/assets/binding-resolver-C_9MBSMa.js +0 -2
  432. package/dist/assets/blender-emscripten-engine-BeWFjMn-.js +0 -2
  433. package/dist/assets/blender-version.status-DtfwUahB.js +0 -1
  434. package/dist/assets/blender-wali-engine-da698rDf.js +0 -2
  435. package/dist/assets/blender.status-ujwGU6dU.js +0 -1
  436. package/dist/assets/board-guides-_3R1t_-2.js +0 -1
  437. package/dist/assets/body-marks-RKb_LTwL.js +0 -1
  438. package/dist/assets/build-profiles.document-CZxDuhzz.js +0 -2
  439. package/dist/assets/build-progress.status-Dk5u3C67.js +0 -1
  440. package/dist/assets/build.header--xqH6uTP.js +0 -1
  441. package/dist/assets/canvas-entry-runtime-DVeh71nC.js +0 -2
  442. package/dist/assets/capability-coverage-DQgg6UJe.js +0 -7
  443. package/dist/assets/component-board.service-DgujG90T.js +0 -2
  444. package/dist/assets/component-contracts.service-Bc_2Xxh_.js +0 -1
  445. package/dist/assets/component-instance-root-df4ofoOR.js +0 -1
  446. package/dist/assets/connection.status-CCX-mgmr.js +0 -1
  447. package/dist/assets/constraints.inspector-CwEEREsf.js +0 -1
  448. package/dist/assets/coverage.service-CV7b5Sqn.js +0 -3
  449. package/dist/assets/curve-BKuiAPpj.js +0 -1
  450. package/dist/assets/data-check-core-CQEjuFyt.js +0 -1
  451. package/dist/assets/data-ref-DyFQqqX6.js +0 -1
  452. package/dist/assets/debug-bridge-CESAxmlz.js +0 -1
  453. package/dist/assets/debug-registry-l7k5Hjc8.js +0 -1
  454. package/dist/assets/design-time-layers-CQgnmqc8.js +0 -1
  455. package/dist/assets/design-time-react-mount-CFvIk_rV.js +0 -1
  456. package/dist/assets/edit-mode-authoring-DBjaBTxM.js +0 -1
  457. package/dist/assets/editor-api-D2azVray.js +0 -1
  458. package/dist/assets/editor-presentation-activity-C7SNSmTd.js +0 -1
  459. package/dist/assets/game-audio-CaGKzia4.js +0 -1
  460. package/dist/assets/game-document.service-FdG_gFPU.js +0 -1
  461. package/dist/assets/game-module-access-DulnT3NH.js +0 -1
  462. package/dist/assets/game-network-Bo_nlDR5.js +0 -22
  463. package/dist/assets/gameplay-replay-CnWnlogY.js +0 -1
  464. package/dist/assets/generation-DhwCUHPf.css +0 -1
  465. package/dist/assets/generation.service-D2yeZaJu.js +0 -1
  466. package/dist/assets/generations.status-3CrPw_n5.js +0 -1
  467. package/dist/assets/hierarchy-marks-BLPfSIym.js +0 -1
  468. package/dist/assets/hierarchy-marks-C25dY2fR.js +0 -1
  469. package/dist/assets/hosted-asset-materialization-DYdcFlDf.js +0 -2
  470. package/dist/assets/index-B5WjeCHm.css +0 -1
  471. package/dist/assets/index-BcH5GC3b.js +0 -1
  472. package/dist/assets/index-CwCDkEl1.js +0 -1
  473. package/dist/assets/index-n3QdTv-T.js +0 -1
  474. package/dist/assets/index.module-Ycad3DJq.js +0 -1
  475. package/dist/assets/ingest-siblings-CkxW__go.js +0 -1
  476. package/dist/assets/ingest-source-persistence-6peGfPAS.js +0 -1
  477. package/dist/assets/ingest.service-Cc73WMIW.js +0 -1
  478. package/dist/assets/inspection-CObLhnrs.js +0 -1
  479. package/dist/assets/instances.command-CxKGnrNl.js +0 -1
  480. package/dist/assets/material-BwFzKPi0.js +0 -1
  481. package/dist/assets/model-asset-sections-CFvvihfx.css +0 -1
  482. package/dist/assets/model-asset-sections.service-TZ2SaBmH.js +0 -1
  483. package/dist/assets/module-mode-B79jV5tQ.js +0 -2
  484. package/dist/assets/mount-canvas-ingest-root-BhaYNuhY.js +0 -2
  485. package/dist/assets/mount-dom-ingest-root-BQb1u0LX.js +0 -2
  486. package/dist/assets/mount-readiness-Ds0HvvLH.js +0 -4
  487. package/dist/assets/mount-three-ingest-root-DIDBfvIH.js +0 -1
  488. package/dist/assets/network-observer.service-CiR4Q9Q0.js +0 -1
  489. package/dist/assets/network.utility-CNG3eJ0E.js +0 -1
  490. package/dist/assets/object-marks-DwvIEBOK.js +0 -1
  491. package/dist/assets/pixi-authoring-adapter-B42K4md-.js +0 -1
  492. package/dist/assets/pixi-live-write-target-D56tQEe_.js +0 -1
  493. package/dist/assets/pose-guard-DILO6gGq.js +0 -1
  494. package/dist/assets/presentation-DGBuGP6i.js +0 -1
  495. package/dist/assets/profiler.utility-DLNySW3w.js +0 -1
  496. package/dist/assets/project-provenance-4ldz-EOG.js +0 -1
  497. package/dist/assets/r3f-design-session-C0DPEChS.js +0 -2
  498. package/dist/assets/react-canvas-navigation-Jowa_lJq.js +0 -1
  499. package/dist/assets/react-inspector.service-TfTdj_Qk.js +0 -1
  500. package/dist/assets/react-story-board-Bx7qYytV.js +0 -1
  501. package/dist/assets/react-world-authoring-adapter-C1jPW_cN.js +0 -1
  502. package/dist/assets/reflection-probe-capture.inspector-C-6zrzZb.js +0 -1
  503. package/dist/assets/registry-Z28XSZHF.js +0 -1
  504. package/dist/assets/resolve-three-C7zDbK29.js +0 -702
  505. package/dist/assets/root-seam-contract-rGNbiX6q.js +0 -1
  506. package/dist/assets/scene-capture-BTWgUzhI.js +0 -1
  507. package/dist/assets/scene-document.service-DJJp-la1.js +0 -2
  508. package/dist/assets/seeded-random-38To73fI.js +0 -1
  509. package/dist/assets/stage-overlay-set-olkNSZmq.js +0 -1
  510. package/dist/assets/stage-presence-markers-cznMN_qq.js +0 -1
  511. package/dist/assets/stage-transform-tools-BDUZqRIR.js +0 -1
  512. package/dist/assets/standard-viewport-dressing-BZyuxyVl.js +0 -24
  513. package/dist/assets/state-watch.utility-DDmn3G25.js +0 -1
  514. package/dist/assets/story-documents-8ehMyYHo.js +0 -3
  515. package/dist/assets/story-three-preview-B1nNiPwP.js +0 -2
  516. package/dist/assets/studio-environment-yaKaHPxH.js +0 -2
  517. package/dist/assets/team-playtest.service-Ds9tkO4q.js +0 -1
  518. package/dist/assets/three-authoring-adapter-BrkGH4cd.js +0 -1
  519. package/dist/assets/three-authoring.service-DoamZDMx.js +0 -2
  520. package/dist/assets/three-integration.service-Db-VabIm.js +0 -1
  521. package/dist/assets/three-projection-core-jBJVt6O0.js +0 -1
  522. package/dist/assets/three-viewport-presentation-CgO3eWJ-.js +0 -141
  523. package/dist/assets/tools-B_NJsk05.js +0 -1
  524. package/dist/assets/transform-mode-request-BnKpgRUW.js +0 -1
  525. package/dist/assets/transport-strip-a9yLoPsI.js +0 -1
  526. package/dist/assets/transport.header-CpfoppXc.js +0 -1
  527. package/dist/assets/tuples-CKsHOV9T.js +0 -1
  528. package/dist/assets/ui-board-document-DtTR_mBr.js +0 -2
  529. package/dist/assets/user-data-dHvLdpwM.js +0 -1
  530. package/dist/assets/viewport-door-DVkMQazS.js +0 -1
  531. package/dist/assets/worker-CC9Ug5Ei.js +0 -2
  532. package/dist/assets/workspace-arrangement-DIMM7ska.js +0 -1
  533. package/dist/assets/world-documents-C4t3iOD-.js +0 -1
  534. package/dist/assets/world-root-stage-binding-ydl3JN1a.js +0 -1
  535. package/dist/vgai-shared-react.json +0 -10
  536. package/dist/vgai-shared-three.json +0 -3
  537. package/template/.agents/skills/vgai-threejs-authoring/agents/openai.yaml +0 -4
  538. package/template/.claude/skills/vgai-threejs-authoring/agents/openai.yaml +0 -4
  539. package/template/.github/skills/vgai-threejs-authoring/agents/openai.yaml +0 -4
  540. /package/dist/assets/{vgai-shared-fontawesome-CU65D4Ij.js → volter-shared-fontawesome-CU65D4Ij.js} +0 -0
  541. /package/dist/assets/{vgai-shared-jsx-dev-runtime-DFDKL7fx.js → volter-shared-jsx-dev-runtime-DFDKL7fx.js} +0 -0
  542. /package/dist/assets/{vgai-shared-jsx-runtime-DIqBpTut.js → volter-shared-jsx-runtime-DIqBpTut.js} +0 -0
  543. /package/dist/assets/{vgai-shared-react-BT7rMc2H.js → volter-shared-react-BT7rMc2H.js} +0 -0
  544. /package/dist/assets/{vgai-shared-react-dom-DFajMqMT.js → volter-shared-react-dom-DFajMqMT.js} +0 -0
  545. /package/dist/assets/{vgai-shared-react-dom-client-S0ozfl6_.js → volter-shared-react-dom-client-S0ozfl6_.js} +0 -0
  546. /package/dist/assets/{vgai-shared-three-DH4yxKwt.js → volter-shared-three-DH4yxKwt.js} +0 -0
  547. /package/template/{.vgai → .volter}/assets.json +0 -0
  548. /package/template/{.vgai → .volter}/provenance.json +0 -0
@@ -1 +0,0 @@
1
- import{a as t}from"./jsx-runtime-DPjLkJKQ.js";import{Object3DSnapshotDocument as m}from"./EntityModelDocument-Du8wIbyK.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./editor-shell-store-Bh1S7M54.js";import"./output-pass-HurwNl0G.js";import"./three.module-BLhyNg0e.js";import"./three.core-3arARmh6.js";import"./Pass-D1MRT672.js";import"./editor-layers-B4oYfpj8.js";import"./workspace-arrangement-DIMM7ska.js";import"./index-CaG87ZF-.js";import"./index-nmcBqr7Y.js";import"./index-D_NuPfjr.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./user-data-CqOoAowZ.js";import"./entity-object-B_5Gc0Ky.js";import"./three-contract-Dkt6PmWY.js";import"./live-mixers-B-bwLZ7c.js";import"./asset-preview-Cv7tfD98.js";import"./renderer-ownership-BovSEcLv.js";import"./hierarchy-marks-C25dY2fR.js";import"./studio-environment-yaKaHPxH.js";import"./KTX2Loader-CaqVE6nY.js";import"./GLTFLoader-KeoruJgS.js";import"./BufferGeometryUtils-B22h7jo4.js";import"./environment-Dg-YaLsA.js";import"./RoomEnvironment-BkknvS_I.js";import"./EXRLoader-CITMBvGd.js";import"./HDRLoader-BTGuGhVo.js";import"./bitmap-label-Ct4k6ehY.js";import"./StageHost-V_0opXFt.js";import"./three-state-wXRU3rLr.js";import"./standard-viewport-dressing-BZyuxyVl.js";import"./content-bounds-DKBD7nsv.js";import"./preview-renderer-BrYNFV1p.js";import"./live-gesture-lock-DJbrjOqf.js";import"./model-inspection-MrJY0U_-.js";import"./three-viewport-presentation-CgO3eWJ-.js";import"./clip-planes-CnAI6DZn.js";import"./three-oYrcK5SQ.js";import"./component-instance-root-df4ofoOR.js";import"./viewport-editor-controls-BYaAZ_Ku.js";import"./model-thumbnail-uk-2sblh.js";import"./OrbitControls-B13MKuwC.js";import"./LineSegments2-DN9pUfWA.js";import"./three.quarks.esm-C_HmSKXo.js";import"./three-integration-CuAnYaTW.js";import"./host-hierarchy-objects-BV3WqU2w.js";import"./layered-pick-B_-BRrRD.js";import"./root-stacking-BEd9ZvxC.js";import"./object3d-document-session-registry-OjqzJ86S.js";import"./viewport-door-DVkMQazS.js";import"./scene-framing-PVMqGU8h.js";import"./source-object3d-authoring-adapter-RmutT5Dt.js";import"./three-projection-core-jBJVt6O0.js";import"./editor-presentation-activity-C7SNSmTd.js";import"./transport-strip-a9yLoPsI.js";import"./viewport-surface-status-D5kZtFW5.js";function vt({previewKey:i,object:o,displayName:r,fill:p=!1}){return t.jsx("div",{"data-testid":"inspector-object-preview",style:p?{position:"absolute",inset:0,overflow:"hidden"}:{width:"100%",height:220,minHeight:220,borderBottom:"1px solid var(--vgai-structural-divider)",overflow:"hidden",position:"relative"},children:t.jsx(m,{documentId:`inspector-preview:${i}`,source:o,displayName:r,active:!0,chromeless:!0})})}export{vt as InspectorObjectPreview};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-DgapqSPi.js","assets/index-BP6wv2A0.js","assets/index-CJbYy-CF.js","assets/index-CanA16PU.js","assets/index-Bge9JUr6.js","assets/index-gHZae-lw.js","assets/index-BncK9THk.js","assets/index-IEjydI9d.js","assets/index-DUqP1RMl.js"])))=>i.map(i=>d[i]);
2
- import{a}from"./jsx-runtime-DPjLkJKQ.js";import{r as m}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{ae as n,_ as b,h4 as z,aS as F,h5 as M,b3 as J}from"./index-CaG87ZF-.js";const P={ts:"typescript",tsx:"typescript",mts:"typescript",cts:"typescript",js:"typescript",jsx:"typescript",mjs:"typescript",cjs:"typescript",json:"json",jsonc:"json",json5:"json"};function re(e){const o=e.split("/").pop()??e,t=o.lastIndexOf(".");return t<0?"text":P[o.slice(t+1).toLowerCase()]??"text"}let T=null;function W(){return T??=Promise.all([b(()=>import("./index-BP6wv2A0.js"),[]),b(()=>import("./index-DgapqSPi.js").then(e=>e.i),__vite__mapDeps([0,1])),b(()=>import("./index-CJbYy-CF.js").then(e=>e.w),__vite__mapDeps([2,1,0])),b(()=>import("./index-CanA16PU.js"),__vite__mapDeps([3,0,1])),b(()=>import("./index-Bge9JUr6.js"),__vite__mapDeps([4,1,0,2])),b(()=>import("./index-gHZae-lw.js"),__vite__mapDeps([5,6,2,1,0])),b(()=>import("./index-IEjydI9d.js"),__vite__mapDeps([7,6,2,1,0])),b(()=>import("./index-DUqP1RMl.js"),__vite__mapDeps([8,0,1,2]))]).then(([e,o,t,r,c,s,l,d])=>({state:e,view:o,language:t,search:r,commands:c,javascript:s,json:l,oneDark:d})),T}function S(e){return typeof e=="number"?`${e}px`:e}function R(e){return typeof e=="string"&&e.trim().endsWith("%")}function G(e,o){let t=0;for(;t<e.length&&t<o.length&&e[t]===o[t];)t++;let r=e.length,c=o.length;for(;r>t&&c>t&&e[r-1]===o[c-1];)r--,c--;return{from:t,oldEnd:r,newEnd:c}}const L=1800,k=`color-mix(in srgb, ${n.semantic.warning} 42%, transparent)`,C=`color-mix(in srgb, ${n.semantic.warning} 18%, transparent)`;function U(e){class o extends e.view.WidgetType{constructor(s){super(),this.revision=s}eq(s){return this.revision===s.revision}toDOM(){const s=document.createElement("span");return s.className=`cm-source-deletion cm-source-change cm-source-change-${this.revision%2}`,s.setAttribute("aria-hidden","true"),s}}const t=e.state.StateEffect.define(),r=e.state.StateField.define({create:()=>e.view.Decoration.none,update(c,s){let l=c.map(s.changes);for(const d of s.effects){if(!d.is(t))continue;if(!d.value){l=e.view.Decoration.none;continue}const{from:g,to:i,revision:y}=d.value,f=g===i?e.view.Decoration.widget({widget:new o(y),side:-1}).range(g):e.view.Decoration.mark({class:`cm-source-change cm-source-change-${y%2}`}).range(g,i);l=e.view.Decoration.set([f])}return l},provide:c=>e.view.EditorView.decorations.from(c)});return{mark:t,field:r}}function K(e,o,t){return e.view.EditorView.theme({"&":{color:n.content.primary,backgroundColor:"transparent",fontSize:`${o}px`,...R(t)?{height:S(t)}:{}},"&.cm-focused":{outline:"none"},".cm-content":{fontFamily:n.typography.mono,padding:"2px 0",caretColor:"transparent"},".cm-scroller":{fontFamily:n.typography.mono,lineHeight:"1.5",overflow:"auto",...t===void 0?{}:{maxHeight:S(t)}},".cm-gutters":{backgroundColor:"transparent",color:n.content.dim,border:"none",userSelect:"none"},".cm-lineNumbers .cm-gutterElement":{padding:"0 8px 0 4px",minWidth:"2ch"},".cm-content ::selection":{backgroundColor:n.selection.background},".cm-panels":{backgroundColor:n.surface.raised,color:n.content.primary,border:"none",fontFamily:n.typography.sans},".cm-panels.cm-panels-top":{borderBottom:`1px solid ${n.boundary.default}`},".cm-textfield":{backgroundColor:n.surface.inset,color:n.content.primary,border:`1px solid ${n.boundary.default}`,borderRadius:n.shape.small},".cm-button":{backgroundColor:n.surface.raised,backgroundImage:"none",color:n.content.primary,border:`1px solid ${n.boundary.default}`,borderRadius:n.shape.small},".cm-searchMatch":{backgroundColor:n.accent.muted},".cm-searchMatch.cm-searchMatch-selected":{backgroundColor:n.accent.default,color:n.content.onAccent},".cm-source-change":{backgroundColor:k,borderRadius:"2px"},".cm-line:has(.cm-source-change)":{backgroundColor:C},".cm-source-change, .cm-line:has(.cm-source-change)":{animationDuration:`${L}ms`,animationTimingFunction:"ease-out",animationFillMode:"forwards"},".cm-source-deletion":{display:"inline-block",width:"0",position:"relative"},".cm-source-deletion::after":{content:'""',position:"absolute",left:"-2px",bottom:"0",width:"4px",height:"1em",backgroundColor:"inherit",borderRadius:"2px"},".cm-source-change-0":{animationName:"vgai-source-change-even"},".cm-source-change-1":{animationName:"vgai-source-change-odd"},".cm-line:has(.cm-source-change-0)":{animationName:"vgai-source-line-even"},".cm-line:has(.cm-source-change-1)":{animationName:"vgai-source-line-odd"},"@keyframes vgai-source-line-even":{"0%, 40%":{backgroundColor:C},"100%":{backgroundColor:"transparent"}},"@keyframes vgai-source-line-odd":{"0%, 40%":{backgroundColor:C},"100%":{backgroundColor:"transparent"}},"@keyframes vgai-source-change-even":{"0%, 40%":{backgroundColor:k},"100%":{backgroundColor:"transparent"}},"@keyframes vgai-source-change-odd":{"0%, 40%":{backgroundColor:k},"100%":{backgroundColor:"transparent"}},"@media (prefers-reduced-motion: reduce)":{".cm-source-change, .cm-line:has(.cm-source-change)":{animation:"none"}},".cm-matchingBracket, &.cm-focused .cm-matchingBracket":{backgroundColor:n.neutralOverlay.active,outline:`1px solid ${n.boundary.strong}`}},{dark:!0})}function H(e,o,t,r){const c=o==="typescript"?[e.javascript.javascript({typescript:!0,jsx:!0})]:o==="json"?[e.json.json()]:[];return[e.view.lineNumbers(),e.view.highlightSpecialChars(),e.language.bracketMatching(),e.language.syntaxHighlighting(e.oneDark.oneDarkHighlightStyle),e.search.search({top:!0}),e.view.keymap.of([...e.commands.standardKeymap,...e.search.searchKeymap]),e.view.EditorView.lineWrapping,e.state.EditorState.readOnly.of(!0),e.view.EditorView.editable.of(!1),e.view.EditorView.contentAttributes.of({tabindex:"0"}),...c,K(e,t,r)]}function q({value:e,language:o,fontSize:t=11,maxHeight:r,ariaLabel:c,followChanges:s=!1}){const l=m.useRef(null),d=m.useRef(null),g=m.useRef(null),i=m.useRef(null),y=m.useRef(0),f=m.useRef(e);f.current=e;const[p,I]=m.useState(null),[N,$]=m.useState(!1);m.useEffect(()=>{let u=!1;return W().then(h=>{u||I(h)},()=>{u||$(!0)}),()=>{u=!0}},[]),m.useEffect(()=>{const u=l.current;if(!u||!p)return;const h=U(p),w=new p.view.EditorView({parent:u,state:p.state.EditorState.create({doc:f.current,extensions:[H(p,o,t,r),h.field]})});return d.current=w,g.current=h,()=>{i.current!==null&&clearTimeout(i.current),i.current=null,g.current=null,d.current=null,w.destroy()}},[p,o,t,r]),m.useEffect(()=>{const u=d.current;if(!u)return;const h=u.state.toText(e).toString(),w=u.state.doc.toString();if(w===h)return;const{from:x,oldEnd:B,newEnd:D}=G(w,h),O=u.state.changes({from:x,to:B,insert:h.slice(x,D)}),v=g.current,E=[];if(s&&p&&v){const _=u.coordsAtPos(x),j=u.scrollDOM.getBoundingClientRect(),A=_&&_.top>=j.top&&_.bottom<=j.bottom&&_.left>=j.left&&_.right<=j.right?u.scrollSnapshot().map(O):p.view.EditorView.scrollIntoView(x,{y:"nearest",x:"nearest"});A&&E.push(A),E.push(v.mark.of({from:x,to:D,revision:++y.current}))}else v&&E.push(v.mark.of(null));u.dispatch({changes:O,effects:E}),i.current!==null&&clearTimeout(i.current),i.current=null,s&&v&&(i.current=setTimeout(()=>{d.current===u&&u.dispatch({effects:v.mark.of(null)}),i.current=null},L))},[e,s,p]);const V=R(r)?{height:"100%",minHeight:0}:{};return p?a.jsx("div",{ref:l,role:"group","aria-label":c,style:{minWidth:0,...V}}):a.jsxs("div",{role:"group","aria-label":c,style:{minWidth:0,...V},children:[N&&a.jsx("div",{style:{color:n.semantic.warning,fontSize:10,marginBottom:4},children:"Syntax highlighting failed to load — showing plain text."}),a.jsx("pre",{style:{margin:0,fontFamily:n.typography.mono,fontSize:t,lineHeight:1.5,color:n.content.primary,whiteSpace:"pre-wrap",wordBreak:"break-word",overflow:"auto",...r===void 0?{}:{maxHeight:S(r)},...R(r)?{height:S(r)}:{}},children:e})]})}const X={fontSize:11,color:n.content.muted,marginBottom:2};function Y({assetPath:e}){const[o,t]=m.useState(null),[r,c]=m.useState("json"),[s,l]=m.useState(!1),d=e.split("/").pop()??e;return m.useEffect(()=>{let g=!1;return t(null),l(!1),fetch(z(e)).then(i=>i.text()).then(i=>{try{const y=JSON.parse(i);g||(c("json"),t(JSON.stringify(y,null,2)))}catch{g||(c("text"),t(i))}}).catch(()=>{g||l(!0)}),()=>{g=!0}},[e]),a.jsxs("div",{style:{padding:8,display:"flex",flexDirection:"column",gap:8},children:[a.jsx("div",{style:{fontWeight:600,fontSize:12,color:n.content.primary,wordBreak:"break-all"},children:d}),a.jsx("div",{className:"vgai-content-frost",style:{border:`1px solid ${n.boundary.default}`,borderRadius:n.shape.small,padding:8,overflow:"hidden",maxHeight:500},children:s?a.jsx("span",{style:{color:n.semantic.danger,fontSize:11},children:"Failed to load file"}):o===null?a.jsx("span",{style:{color:n.content.muted,fontSize:11},children:"Loading..."}):a.jsx(q,{value:o,language:r,fontSize:10,maxHeight:484,ariaLabel:`Contents of ${d}`})}),a.jsx(F,{label:"Info",defaultOpen:!1,children:a.jsxs("div",{children:[a.jsx("div",{style:X,children:"Path"}),a.jsx("div",{style:{fontSize:11,color:n.content.primary,wordBreak:"break-all"},children:e})]})})]})}function Q({documentId:e,assetPath:o,displayName:t,active:r,sections:c,status:s}){const[l,d]=m.useState({kind:"loading"}),g=M();if(m.useEffect(()=>{if(!r){d({kind:"loading"});return}const i=new AbortController;return d({kind:"loading"}),(async()=>{for(const f of g){const p=await f.recognize(o,i.signal);if(p!==null)return{kind:"content",viewer:f,content:p}}return{kind:"generic"}})().then(f=>{i.signal.aborted||d(f)},f=>{i.signal.aborted||d({kind:"error",message:f instanceof Error?f.message:String(f)})}),()=>i.abort()},[r,o,g]),l.kind==="content"){const{Viewer:i}=l.viewer;return a.jsx(i,{documentId:e,assetPath:o,displayName:t,active:r,content:l.content})}return a.jsx(J,{documentId:e,active:r,type:"json",title:t,sections:c,status:s,children:l.kind==="loading"?a.jsxs("div",{style:{padding:20,color:n.content.muted},children:["Inspecting ",t,"…"]}):l.kind==="error"?a.jsx("div",{role:"alert",style:{padding:20,color:n.semantic.danger},children:l.message}):a.jsx(Y,{assetPath:o})})}const ie=Object.freeze(Object.defineProperty({__proto__:null,JsonAssetDocument:Q},Symbol.toStringTag,{value:"Module"}));export{q as C,Q as J,ie as a,re as c};
@@ -1 +0,0 @@
1
- import{a as s}from"./jsx-runtime-DPjLkJKQ.js";import{dA as ee,dB as N,dC as se,dD as L,dE as ie,dF as te,dG as z,dH as B,aG as ae,aH as re,dI as f,dJ as oe,cN as A,cD as v,aK as S,a0 as n,df as ne,$ as F,cP as le,cI as ce,cQ as $,cR as d,di as H,cS as de,dK as pe,dL as me,dM as U,dg as W,dN as ue,dO as he,dP as G,aL as ge,aJ as K,dQ as ve,aI as _,dR as be,dS as xe,dT as je,cJ as we,dU as fe,dV as Se}from"./index-CaG87ZF-.js";import{r as a}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{e as ye,f as Ce}from"./asset-preview-Cv7tfD98.js";import{s as Pe}from"./model-inspection-MrJY0U_-.js";import{s as Ve,o as J,a as ke}from"./object3d-document-session-registry-OjqzJ86S.js";import{v as Ee}from"./viewport-door-DVkMQazS.js";import{v as Q,V as Me,a as De,p as Oe,b as Te,c as Re}from"./ViewportShadingMenu-Bdkc6jcd.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";import"./editor-layers-B4oYfpj8.js";import"./workspace-arrangement-DIMM7ska.js";import"./renderer-ownership-BovSEcLv.js";import"./hierarchy-marks-C25dY2fR.js";import"./studio-environment-yaKaHPxH.js";import"./user-data-CqOoAowZ.js";import"./KTX2Loader-CaqVE6nY.js";import"./three.module-BLhyNg0e.js";import"./three.core-3arARmh6.js";import"./GLTFLoader-KeoruJgS.js";import"./BufferGeometryUtils-B22h7jo4.js";import"./environment-Dg-YaLsA.js";import"./RoomEnvironment-BkknvS_I.js";import"./EXRLoader-CITMBvGd.js";import"./HDRLoader-BTGuGhVo.js";import"./bitmap-label-Ct4k6ehY.js";const q=()=>()=>{},b=()=>0,Ne=[{key:"skeletons",label:"Bones"},{key:"weights",label:"Weights"},{key:"cursor",label:"3D Cursor"},{key:"cameras",label:"Cameras"},{key:"lights",label:"Lights"},{key:"empties",label:"Empties"}];function ps({documentId:t,assetPath:p}){a.useSyncExternalStore(Ve,J,J);const i=ke(t);a.useSyncExternalStore(ee,N,N),a.useSyncExternalStore(i?.subscribe??q,i?.getSnapshot??b,i?.getSnapshot??b),a.useSyncExternalStore(se,L,L);const l=ie(t);a.useSyncExternalStore(l?.subscribe??q,l?.getSnapshot??b,l?.getSnapshot??b);const X=Ee(t),[y,C]=a.useState(null),[P,h]=a.useState(null),[V,g]=a.useState(!1),[k,c]=a.useState(!1),E=a.useRef(null),M=a.useRef(null);if(a.useSyncExternalStore(te,z,z),!i)return null;const r=i.presentation(),{lighting:m}=B(t),u=ae(t),D=u?re(u.stageKind):null,Y=u?.documentLayer?.all?.lighting?.studioPreset===f.id||D?.all?.lighting?.studioPreset===f.id,x=u?oe(u.stageKind):!1,O=e=>x?{modes:{[B(t).drawMode]:{lighting:e}}}:{all:{lighting:e}},j=new Set(Object.entries(D?.modes??{}).filter(([,e])=>e?.lighting!==void 0).map(([e])=>e)),w=new Set(Pe(i.root).filter(e=>e.available).map(e=>e.mode)),Z=[...x?Q.map(e=>e.mode==="solid"?{...e,label:"Solid",description:"Materials' colours under the studio lights"}:e.mode==="clay"?{...e,label:"Clay"}:e):Q,...j.has("preview")?[{mode:"preview",label:"Material Preview",description:"Materials lit by a preview environment"}]:[],...j.has("rendered")?[{mode:"rendered",label:"Rendered",description:"Lit as a render is, by the scene's own lights"}]:[],...w.has("uv")?[{mode:"uv",label:"UV",description:"UV coordinates as surface color"}]:[],...w.has("vertex-colors")?[{mode:"vertex-colors",label:"Vertex colors",description:"Authored color attributes without textures"}]:[]],T=async e=>{if(p){h(null);try{await Se().saveThumbnailFraming(p,e?void 0:i.cameraPose())}catch(o){h(o instanceof Error?o.message:String(o))}}},I=async()=>{h(null);try{const e={background:r.background},o=p?.toLowerCase().endsWith(".spz")?await ye(p,e):Ce(i.root,e);C(`data:image/png;base64,${o.contactSheet.base64}`)}catch(e){h(e instanceof Error?e.message:String(e))}},R=i.selection().length>0?"Frame selection":"Frame all";return s.jsxs("div",{className:"vgai-model-document-header",children:[s.jsxs(A,{compact:!0,label:"Viewport view controls",className:"vgai-model-viewport-toolbar vgai-model-viewport-toolbar--view",children:[s.jsx(v,{text:R,children:s.jsx(S,{"aria-label":R,onClick:()=>i.frame(),children:s.jsx(n,{icon:ne,size:"md"})})}),s.jsxs("div",{className:"vgai-viewport-popover-anchor",children:[s.jsx(v,{text:"Camera orientation and projection",children:s.jsxs(F,{ref:E,type:"button",size:"compact",variant:"secondary","aria-label":`Camera view: ${r.projection}`,"aria-haspopup":"menu","aria-expanded":V,onClick:()=>g(e=>!e),className:"vgai-model-toolbar-labelled-control",children:[s.jsx(n,{icon:le,size:"sm"}),s.jsx("span",{children:r.projection==="perspective"?"Perspective":"Orthographic"}),s.jsx(n,{icon:ce,size:"xs"})]})}),V&&s.jsxs($,{anchorRef:E,align:"start",clamp:!0,"aria-label":"Camera view",onDismiss:()=>g(!1),style:{minWidth:210},children:[["front","right","top","isometric"].map(e=>s.jsx(d,{onSelect:()=>{i.setViewPreset(e,"view"),g(!1)},children:e==="isometric"?"Perspective 3/4":`${e[0]?.toUpperCase()}${e.slice(1)} view`},e)),s.jsx(H,{}),["perspective","orthographic"].map(e=>s.jsxs(d,{role:"menuitemradio","aria-checked":r.projection===e,onSelect:()=>{i.setProjection(e),g(!1)},children:[s.jsx("span",{className:"vgai-menu-check",children:r.projection===e&&s.jsx(n,{icon:de,size:"xs"})}),e==="perspective"?"Perspective":"Orthographic"]},e))]})]}),w.has("skeleton")?s.jsx(v,{text:`Rig: ${r.skeleton?"Visible":"Hidden"}`,children:s.jsx(S,{"aria-label":"Toggle rig overlay","aria-pressed":r.skeleton,onClick:()=>i.setSkeleton(!r.skeleton),children:s.jsx(n,{icon:pe,size:"md"})})}):null,me("object3d-document").map(({id:e,Component:o})=>s.jsx(o,{documentId:t},e))]}),s.jsxs(A,{compact:!0,label:"Viewport preview controls",className:"vgai-model-viewport-toolbar vgai-model-viewport-toolbar--preview",children:[s.jsxs(Me,{mode:r.mode,onChange:e=>i.setMode(e),choices:Z,segments:x?Oe(j):De,children:[U().length>0?s.jsxs("label",{children:[s.jsx("span",{children:"View"}),s.jsxs(W,{"aria-label":"View preset",value:"",onChange:e=>{e.target.value&&ue(t,e.target.value)},children:[s.jsx("option",{value:"",children:"Choose…"}),U().map(e=>s.jsx("option",{value:e.id,children:e.title},e.id))]})]}):null,s.jsxs("label",{children:[s.jsx("span",{children:"Lighting"}),s.jsxs(W,{"aria-label":"Lighting",value:m.source==="studio"?`studio:${m.studioPreset}`:m.source,onChange:e=>{const o=e.target.value;G(t,O(o.startsWith("studio:")?{source:"studio",studioPreset:o.slice(7)}:{source:o}))},children:[he().filter(e=>e.id!==f.id||Y).map(e=>s.jsx("option",{value:`studio:${e.id}`,children:e.title},e.id)),s.jsx("option",{value:"scene",children:"Scene lights"})]})]}),s.jsxs("label",{children:[s.jsx("span",{children:"Exposure"}),s.jsx(ge,{"aria-label":"Preview exposure",type:"range",min:"0.2",max:"2",step:"0.1",value:m.tone.exposure,onChange:e=>G(t,O({tone:{exposure:Number(e.target.value)}}))}),s.jsx(K,{as:"span",variant:"caption",children:m.tone.exposure.toFixed(1)})]})]}),s.jsx(Te,{glyph:s.jsx(Re,{}),choices:[{id:"grid",label:"Grid",enabled:_(t),onToggle:()=>ve(t,!_(t))},{id:"bounds",label:"Bounds",enabled:r.bounds,onToggle:()=>i.setBounds(!r.bounds)},...l===null?[]:Ne.filter(e=>X.includes(e.key)).map(e=>({id:e.key,label:e.label,enabled:l.helperVisibility[e.key],onToggle:()=>l.toggleHelperType(e.key)}))]}),s.jsxs("div",{className:"vgai-viewport-popover-anchor",children:[s.jsx(v,{text:"Asset preview actions",children:s.jsx(S,{ref:M,"aria-label":"Asset preview actions","aria-haspopup":"menu","aria-expanded":k,onClick:()=>c(e=>!e),children:s.jsx(n,{icon:be,size:"md"})})}),k&&s.jsxs($,{anchorRef:M,clamp:!0,"aria-label":"Asset preview actions",onDismiss:()=>c(!1),style:{minWidth:210},children:[s.jsxs(d,{onSelect:()=>{c(!1),I()},children:[s.jsx(n,{icon:xe,size:"sm"}),"Capture preview"]}),p?s.jsxs(s.Fragment,{children:[s.jsx(d,{onSelect:()=>{c(!1),T(!1)},children:"Save thumbnail framing"}),s.jsx(d,{onSelect:()=>{c(!1),T(!0)},children:"Reset thumbnail framing"})]}):null,s.jsx(H,{}),s.jsxs(d,{onSelect:()=>{i.resetPresentation(),c(!1)},children:[s.jsx(n,{icon:je,size:"sm"}),"Reset viewport settings"]})]})]})]}),y?s.jsxs(we,{className:"vgai-model-capture-preview",children:[s.jsxs("div",{children:[s.jsx(K,{as:"strong",variant:"label",children:"Deterministic views"}),s.jsx(F,{type:"button",variant:"ghost",onClick:()=>C(null),children:"Close"})]}),s.jsx("img",{src:y,alt:"Front, right, top, and three-quarter model preview"})]}):null,P?s.jsx(fe,{className:"vgai-model-toolbar-error",tone:"error",children:P}):null]})}export{ps as Object3DDocumentToolbar};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/StageHost-V_0opXFt.js","assets/index-CaG87ZF-.js","assets/index-nmcBqr7Y.js","assets/_commonjsHelpers-D6-XlEtG.js","assets/index-D_NuPfjr.js","assets/jsx-runtime-DPjLkJKQ.js","assets/index-CtzuWnCS.js","assets/index-CinJrH5C.js","assets/index-FUuS4qwW.js","assets/client-DNXj_opT.js","assets/index-B5WjeCHm.css","assets/three-state-wXRU3rLr.js","assets/editor-shell-store-Bh1S7M54.js","assets/output-pass-HurwNl0G.js","assets/three.module-BLhyNg0e.js","assets/three.core-3arARmh6.js","assets/Pass-D1MRT672.js","assets/editor-layers-B4oYfpj8.js","assets/workspace-arrangement-DIMM7ska.js","assets/user-data-CqOoAowZ.js","assets/entity-object-B_5Gc0Ky.js","assets/three-contract-Dkt6PmWY.js","assets/standard-viewport-dressing-BZyuxyVl.js","assets/content-bounds-DKBD7nsv.js","assets/hierarchy-marks-C25dY2fR.js","assets/environment-Dg-YaLsA.js","assets/RoomEnvironment-BkknvS_I.js","assets/EXRLoader-CITMBvGd.js","assets/HDRLoader-BTGuGhVo.js","assets/preview-renderer-BrYNFV1p.js","assets/renderer-ownership-BovSEcLv.js","assets/live-mixers-B-bwLZ7c.js","assets/live-gesture-lock-DJbrjOqf.js","assets/model-inspection-MrJY0U_-.js","assets/three-viewport-presentation-CgO3eWJ-.js","assets/clip-planes-CnAI6DZn.js","assets/three-oYrcK5SQ.js","assets/component-instance-root-df4ofoOR.js","assets/viewport-editor-controls-BYaAZ_Ku.js","assets/model-thumbnail-uk-2sblh.js","assets/studio-environment-yaKaHPxH.js","assets/KTX2Loader-CaqVE6nY.js","assets/GLTFLoader-KeoruJgS.js","assets/BufferGeometryUtils-B22h7jo4.js","assets/OrbitControls-B13MKuwC.js","assets/LineSegments2-DN9pUfWA.js","assets/three.quarks.esm-C_HmSKXo.js","assets/three-integration-CuAnYaTW.js","assets/host-hierarchy-objects-BV3WqU2w.js","assets/layered-pick-B_-BRrRD.js","assets/root-stacking-BEd9ZvxC.js","assets/object3d-document-session-registry-OjqzJ86S.js","assets/viewport-door-DVkMQazS.js","assets/asset-preview-Cv7tfD98.js","assets/bitmap-label-Ct4k6ehY.js","assets/scene-framing-PVMqGU8h.js","assets/source-object3d-authoring-adapter-RmutT5Dt.js","assets/three-projection-core-jBJVt6O0.js","assets/editor-presentation-activity-C7SNSmTd.js","assets/transport-strip-a9yLoPsI.js","assets/viewport-surface-status-D5kZtFW5.js"])))=>i.map(i=>d[i]);
2
- import{ad as r,_ as a}from"./index-CaG87ZF-.js";import{a as o}from"./jsx-runtime-DPjLkJKQ.js";import{r as n}from"./index-nmcBqr7Y.js";import{V as c,O as u}from"./viewport-surface-status-D5kZtFW5.js";const s=n.lazy(async()=>({default:(await a(()=>import("./StageHost-V_0opXFt.js").then(e=>e.S),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60]))).Object3DDocumentViewport}));function l(t){return i(t.documentId,t.chromeless),o.jsx(n.Suspense,{fallback:o.jsx(c,{testId:"object3d-document-loading",children:u}),children:o.jsx(s,{...t})})}function i(t,e=!1){n.useEffect(()=>{if(!e)return r(t)},[t,e])}export{l as O};
@@ -1 +0,0 @@
1
- import{a as t}from"./jsx-runtime-DPjLkJKQ.js";import{bY as L,bE as U,bJ as R,bZ as W,d3 as J,ae as i,a0 as b,ft as w,b4 as M,aS as C,dg as N,$ as V,cS as _,fu as G}from"./index-CaG87ZF-.js";import{r}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{d as K}from"./asset-editor-persistence-BQgjOCrm.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";const S=new Map,Y=new Set;function I(){for(const e of Y)e()}function Z(e,l){const n=S.get(e);if(n?.status==="running")return n;const f={id:e,label:l,stage:"fetch",loaded:0,total:0,status:"running",controller:new AbortController};return S.set(e,f),I(),f}function y(e,l){const n=S.get(e);n&&(Object.assign(n,l),I())}const q={width:"100%"};function Q(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}function ce({online:e,mode:l="full",showPreview:n=!1,onResolved:f}){const[h,z]=r.useState([]),[o,A]=r.useState(null),[$,v]=r.useState(!0),[B,D]=r.useState(null),[m,E]=r.useState(null),[O,p]=r.useState(!1),[T,x]=r.useState(!1),[j,F]=r.useState(!1),[c,g]=r.useState("idle");r.useEffect(()=>{if(l==="preview"){v(!1);return}let s=!1;return v(!0),D(null),L(e.source,e.id).then(a=>{s||(z(a),a.length>0&&A(a[0]))}).catch(a=>{s||(z([]),D(a instanceof U?R(a.code):a instanceof Error?a.message:"Asset delivery metadata is unavailable while offline."))}).finally(()=>{s||v(!1)}),()=>{s=!0}},[l,e.source,e.id]);const P=e.source==="local"&&(e.type==="model"||e.type==="animation"||e.type==="source");r.useEffect(()=>{if(l==="inspector"&&!n){p(!1);return}let s=!1;if(E(null),x(!1),F(!1),!P){p(!1);return}return p(!0),W(e.source,e.id).then(a=>{s||(E(a),x(!a))}).catch(()=>{s||x(!0)}).finally(()=>{s||p(!1)}),()=>{s=!0}},[l,e.id,e.source,n,P]);const H=r.useCallback(async()=>{if(!o)return;const s=`single:${e.source}:${e.id}`,a=Z(s,e.name);y(s,{stage:"fetch",loaded:0,total:o.sizeBytes??0,status:"running"}),g("downloading");try{const d={source:e.source,id:e.id,name:e.name,url:o.url,format:o.format,jobId:s,signal:a.controller.signal};o.includes&&(d.includes=o.includes);const u=await K(d);u.ok&&u.path?(y(s,{stage:"commit",loaded:o.sizeBytes??1,total:o.sizeBytes??1,status:u.alreadyExists?"skipped":"imported",message:u.path}),g("done"),J(`${e.name} added to Content — drag it from there into the viewport to place it.`),f?.(`/${u.path}`)):(y(s,{status:"failed",message:u.error??"The import was rejected."}),g("error"))}catch(d){y(s,{status:a.controller.signal.aborted?"cancelled":"failed",message:d instanceof Error?d.message:String(d)}),g("error")}},[e,o,f]),k=t.jsx("img",{src:j?"/__editor/asset-library/local-placeholder.svg":e.thumbnailUrl,alt:j?`${e.name} preview unavailable`:e.name,onError:()=>F(!0),style:{maxWidth:"100%",maxHeight:"100%",objectFit:"contain"}});return t.jsxs("div",{style:{padding:8,display:"flex",flexDirection:"column",gap:8},children:[l!=="preview"&&t.jsx("div",{style:{fontWeight:600,fontSize:12,color:i.content.primary,wordBreak:"break-all"},children:e.name}),(l!=="inspector"||n)&&t.jsxs(t.Fragment,{children:[t.jsx("div",{style:{width:"100%",height:"100%",minHeight:l==="inspector"?160:240,background:i.surface.shell,borderRadius:i.shape.small,overflow:"hidden",display:"flex",alignItems:"center",justifyContent:"center"},children:O?t.jsxs("div",{style:{color:i.content.muted,fontSize:11},children:[t.jsx(b,{icon:w,spin:!0,style:{marginRight:5}}),"Loading Asset Editor preview…"]}):m?t.jsx(r.Suspense,{fallback:t.jsx("span",{style:{color:i.content.muted},children:"Loading preview…"}),children:t.jsx(M,{route:"model-preview",documentId:"",assetPath:m.path,...m.materialPath?{materialPath:m.materialPath}:{},displayName:e.name,active:!0,whenUnregistered:k})}):k}),j&&t.jsx("div",{role:"status",style:{color:i.content.dim,fontSize:10},children:"The catalog preview could not be loaded; showing the typed fallback."}),T&&t.jsx("div",{style:{color:i.content.dim,fontSize:10},children:"Interactive preview is unavailable for this variant; showing its catalog thumbnail."})]}),l!=="preview"&&t.jsxs(t.Fragment,{children:[t.jsx(C,{label:"Info",children:t.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:4},children:[t.jsxs("div",{children:[t.jsx("div",{style:{fontSize:11,color:i.content.dim,marginBottom:2},children:"Source"}),t.jsx("div",{style:{fontSize:11,color:i.content.primary},children:e.source==="polyhaven"?"Poly Haven":e.source==="ambientcg"?"ambientCG":"Full Catalog"})]}),t.jsxs("div",{children:[t.jsx("div",{style:{fontSize:11,color:i.content.dim,marginBottom:2},children:"Type"}),t.jsx("div",{style:{fontSize:11,color:i.content.primary},children:e.type})]}),e.tags.length>0&&t.jsxs("div",{children:[t.jsx("div",{style:{fontSize:11,color:i.content.dim,marginBottom:2},children:"Tags"}),t.jsx("div",{style:{display:"flex",flexWrap:"wrap",gap:3},children:e.tags.slice(0,12).map(s=>t.jsx("span",{style:{fontSize:10,padding:"1px 5px",background:i.surface.raised,borderRadius:i.shape.small,color:i.content.muted},children:s},s))})]}),e.author&&t.jsxs("div",{children:[t.jsx("div",{style:{fontSize:11,color:i.content.dim,marginBottom:2},children:"Author"}),t.jsx("div",{style:{fontSize:11,color:i.content.primary},children:e.author})]})]})}),t.jsx(C,{label:"Add to Project",children:t.jsx("div",{style:{display:"flex",flexDirection:"column",gap:6},children:$?t.jsxs("div",{style:{fontSize:11,color:i.content.dim},children:[t.jsx(b,{icon:w,spin:!0,style:{marginRight:4}}),"Loading options..."]}):B?t.jsxs("div",{role:"alert",style:{fontSize:11,color:i.content.muted},children:["Delivery unavailable: ",B]}):h.length>0?t.jsxs(t.Fragment,{children:[t.jsx(N,{"aria-label":"Asset delivery",value:o?h.indexOf(o):0,onChange:s=>A(h[Number(s.target.value)]??null),style:q,children:h.map((s,a)=>t.jsxs("option",{value:a,children:[s.label,s.sizeBytes?` (${Q(s.sizeBytes)})`:""]},a))}),t.jsxs(V,{type:"button",variant:c==="done"?"success":"primary",size:"comfortable",onClick:H,disabled:c==="downloading",style:{width:"100%"},children:[t.jsx(b,{icon:c==="done"?_:c==="downloading"?w:G,spin:c==="downloading",style:{fontSize:10}}),c==="done"?"Downloaded":c==="downloading"?"Downloading...":c==="error"?"Retry":"Add to Project"]})]}):t.jsx("div",{role:"status",style:{fontSize:11,color:i.content.dim},children:e.source==="local"?"No healthy SSD or cloud delivery is available for this asset.":"This provider has no compatible remote delivery for the selected asset."})})}),t.jsxs("div",{style:{fontSize:10,color:i.content.dim,padding:"4px 0"},children:["License: ",e.license??"CC0 (Public Domain)"]})]})]})}export{ce as OnlineAssetDetail};
@@ -1 +0,0 @@
1
- import{a as e}from"./jsx-runtime-DPjLkJKQ.js";import{l as F}from"./configurations-_HZOWZPy.js";import{c as O,P as G,b as _,d as L,s as $,a as B}from"./run-selection-BUeubtHj.js";import{$ as A,a0 as f,gD as V,aJ as v,eE as q,cQ as S,cR as R,gE as Y,gF as H,q as P,cL as D,a1 as p,gG as C,gH as w,aK as N}from"./index-CaG87ZF-.js";import{r as l}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{i as K,g as U,d as J}from"./active-ingest-CnAeQcuQ.js";import"./client-DNXj_opT.js";import"./ingest-source-persistence-6peGfPAS.js";import"./capability-coverage-DQgg6UJe.js";import{w as Q,x as I,s as W,y as X,z as k,f as Z,j as E,e as ee,l as se,p as te}from"./game-network-Bo_nlDR5.js";const T="play-control",z=4;function ae(s){return Math.min(z,Math.max(1,Math.floor(s)))-1}function ne(s){return s+1}function M(s){return s===1?"1 instance":`${s} instances`}function ie(){const s=l.useSyncExternalStore(Q,I,I),[n,a]=l.useState(!1),i=l.useRef(null),r=ne(s);return e.jsxs("div",{className:"vgai-playbar-popover-anchor",children:[e.jsxs(A,{ref:i,variant:"ghost",size:"comfortable","aria-haspopup":"menu","aria-expanded":n,"aria-controls":n?"vgai-player-count-menu":void 0,onClick:()=>a(o=>!o),title:`${M(r)} — choose how many runtimes Play mounts side by side`,children:[e.jsx(f,{icon:V,size:"md"}),e.jsx(v,{children:"Instances"}),e.jsx(v,{variant:"code",children:r}),e.jsx(q,{direction:"down"})]}),n&&e.jsx(S,{id:"vgai-player-count-menu",anchorRef:i,gap:4,onDismiss:()=>a(!1),children:Array.from({length:z},(o,c)=>c+1).map(o=>e.jsx(R,{role:"menuitemradio","aria-checked":o===r,onSelect:()=>{W(ae(o)),a(!1)},children:M(o)},o))})]})}function re({regime:s}){if(!s)return null;const n="Play edits are temporary unless explicitly committed to source.";return e.jsx("span",{role:"img","aria-label":n,className:"vgai-play-edit-regime","data-testid":"play-edit-regime","data-regime":s,title:n,children:e.jsx(f,{icon:p.status.warning,size:"sm"})})}function m({label:s,icon:n,onClick:a,title:i=s,disabled:r=!1,pressed:o,variant:c="ghost",testId:t}){return e.jsx(N,{"aria-label":s,"aria-pressed":o,"data-testid":t,disabled:r,size:"comfortable",variant:c,onClick:u=>{u.currentTarget.blur(),a()},title:i,children:e.jsx(f,{icon:n,size:"md"})})}function oe({state:s,exporting:n=!1,restartReason:a=null,playEditRegime:i=null,onPlay:r,onPause:o,onStep:c,onRestart:t,onStop:u,instances:b=null,picker:h=null,options:x=null,placement:d="launcher"}){const g=s!=="stopped",j=s==="paused";return d==="runtime"&&!g?null:e.jsxs(D,{role:"toolbar","aria-label":"Game transport",className:"vgai-playbar",gap:2,align:"center",children:[d==="launcher"&&e.jsxs(e.Fragment,{children:[h,x,b!==null&&e.jsx(ie,{}),e.jsx(m,{label:"Play",title:g?"Exit Play mode":"Play (run game)",icon:p.transport.play,pressed:g,testId:T,onClick:r})]}),d==="runtime"&&e.jsxs(e.Fragment,{children:[e.jsx(m,{label:"Pause",title:j?"Resume":"Pause",icon:p.transport.pause,disabled:!g||n,pressed:j,onClick:o}),e.jsx(m,{label:"Step one frame",icon:p.transport.step,disabled:!j||n,onClick:c}),e.jsx(C,{}),e.jsx(m,{label:"Restart Game",icon:p.transport.restart,disabled:!g||n,variant:a?"primary":"ghost",testId:"restart-game",onClick:t,title:a??"Restart game (dispose and remount every root without reloading the editor)"}),e.jsx(m,{label:"Stop",icon:p.transport.stop,disabled:!g,onClick:u}),g&&e.jsxs(e.Fragment,{children:[e.jsx(C,{}),e.jsx(re,{regime:i})]})]})]})}function Pe({placement:s="launcher"}){const n=l.useSyncExternalStore(Y,H),{session:a}=P();l.useSyncExternalStore(a.subscribe,a.version,a.version);const i=a.playState(),r=l.useSyncExternalStore(X,k,k),[,o]=l.useState(0),c=ce(),t=K()?U():null;if(t)return e.jsxs(D,{role:"toolbar","aria-label":"Game transport",className:"vgai-playbar",gap:2,align:"center",children:[e.jsx(m,{label:s==="runtime"?t.playing?"Pause ingested game":"Resume ingested game":"Run ingested game",title:t.playing?"Pause ingested game":"Run ingested game",icon:t.playing?p.transport.pause:p.transport.play,pressed:t.playing,testId:T,onClick:()=>{t.playing?t.pause():t.play(),o(d=>d+1)}}),s==="runtime"&&J()&&e.jsx(m,{label:"Stop",title:"Stop the game and return to the scene",icon:p.transport.stop,onClick:()=>E()}),s==="runtime"&&t.canStep&&e.jsx(m,{label:"Step ingested game",title:"Advance the ingested game one frame",icon:p.transport.step,onClick:()=>{t.step(),o(d=>d+1)}})]});const u=c.configurations.find(d=>d.id===c.selectedId)??null,b=u?.kind==="compound"?u.instances??null:null,h=async()=>{const d=await B();if(!d.ok){P().notify({tone:"error",title:d.title,detail:d.detail});return}d.started&&c.refresh(),await ee()},x=()=>{E(),$().then(()=>c.refresh())};return e.jsx(oe,{placement:s,exporting:n,state:i,restartReason:r,playEditRegime:a.playEditRegime(),instances:b,options:e.jsx(le,{}),picker:c.configurations.length>1?e.jsx(de,{run:c,disabled:i!=="stopped"}):null,onPlay:()=>{i!=="stopped"?x():h()},onPause:()=>{i==="paused"?se():te()},onStep:()=>Z(),onRestart:()=>void h(),onStop:()=>x()})}function le(){const{settings:s}=P(),n=l.useSyncExternalStore(s.subscribe,()=>s.get("vgai.play.keepPanelsVisible")===!0),[a,i]=l.useState(!1),r=l.useRef(null);return e.jsxs(e.Fragment,{children:[e.jsx(N,{ref:r,"aria-label":"Play options",title:"Play options","aria-expanded":a,"aria-haspopup":"menu",onClick:()=>i(!a),children:e.jsx(f,{icon:w})}),a&&e.jsx(S,{anchorRef:r,onDismiss:()=>i(!1),children:e.jsx(R,{role:"menuitemcheckbox","aria-checked":n,onSelect:()=>{s.set("vgai.play.keepPanelsVisible",!n),i(!1)},children:"Keep panels visible during Play"})})]})}const y=G;function ce(){const[s,n]=l.useState([]),[a,i]=l.useState(O),r=l.useCallback(async()=>{const u=await F().catch(()=>[]);n(u)},[]);l.useEffect(()=>{r()},[r]);const o=l.useMemo(()=>[{id:y,kind:y,role:"run",describe:"Mount every root in the host",status:"stopped"},...s.filter(u=>u.role==="run")],[s]),c=_(s,a),t=l.useCallback(u=>{i(u),L(u)},[]);return{configurations:o,selectedId:c,select:t,refresh:r}}function de({run:s,disabled:n}){const a=l.useRef(null),[i,r]=l.useState(!1),o=s.configurations.find(t=>t.id===s.selectedId),c=o?.id===y?"Play":o?.id??"Play";return e.jsxs("div",{className:"vgai-playbar-popover-anchor",children:[e.jsxs(A,{ref:a,variant:"ghost",size:"compact","aria-haspopup":"menu","aria-expanded":i,"aria-controls":i?"vgai-run-configuration-menu":void 0,"data-testid":"run-configuration-picker",disabled:n,onClick:()=>r(t=>!t),title:"Which configuration Play starts (the manifest's run-role configurations)",children:[e.jsx(v,{variant:"code",children:c}),e.jsx(f,{icon:w,size:"sm"})]}),i&&e.jsx(S,{id:"vgai-run-configuration-menu",anchorRef:a,align:"start",gap:4,onDismiss:()=>r(!1),children:s.configurations.map(t=>e.jsxs(R,{role:"menuitemradio","aria-checked":t.id===s.selectedId,"data-testid":`run-configuration-${t.id}`,title:t.describe??void 0,onSelect:()=>{s.select(t.id),r(!1)},children:[t.id===y?"Play":`${t.id} · ${t.kind}`,t.status==="running"?" ●":""]},t.id))})]})}export{Pe as P};
@@ -1 +0,0 @@
1
- import{a as t}from"./jsx-runtime-DPjLkJKQ.js";import{J as V,d9 as B,da as F,db as w,dc as I,cC as W,$ as R,aK as j,a0 as S,dd as H,de as T,df as A,dg as D,dh as P,cQ as N,aL as G,di as y,cR as f}from"./index-CaG87ZF-.js";import{r as h}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{s as K,g as $,a as J,b as L,c as Q,d as z,f as X,t as Y}from"./react-story-board-Bx7qYytV.js";const M={fill:null,desktop:{width:1440,height:900},tablet:{width:768,height:1024},mobile:{width:390,height:844}};function _({boardViewport:e,containerRef:r,selectViewport:n,viewportValue:d}){return t.jsxs(t.Fragment,{children:[t.jsxs(D,{"aria-label":"Responsive viewport",title:e?.locked?"Viewport is locked by this story’s globals.viewport":"Responsive viewport",value:d,disabled:e?.locked===!0,onChange:o=>n(o.target.value),className:"vgai-react-viewport-select",children:[t.jsx("option",{value:"fill",children:"Responsive"}),e?e.choices.map(o=>t.jsxs("option",{value:o.id,children:[o.label," · ",o.width,"×",o.height]},o.id)):t.jsxs(t.Fragment,{children:[t.jsx("option",{value:"desktop",children:"Desktop · 1440×900"}),t.jsx("option",{value:"tablet",children:"Tablet · 768×1024"}),t.jsx("option",{value:"mobile",children:"Mobile · 390×844"})]})]}),e&&t.jsx(j,{"aria-label":"Rotate viewport",title:e.locked?"Viewport is locked by this story’s globals.viewport":"Rotate viewport",size:"comfortable",disabled:e.locked,onClick:()=>Y(r.current),children:t.jsx(S,{icon:P,size:"md"})})]})}function it({containerRef:e,context:r,boardOnly:n=!1}){const d=V();h.useSyncExternalStore(d.subscribe,d.getSnapshot);const o=h.useSyncExternalStore(B,F),l=h.useSyncExternalStore(K,$),u=h.useSyncExternalStore(J,()=>L(e.current),()=>null),m=h.useCallback(a=>{const s=e.current;if(!s)return;const i=Math.min(4,Math.max(.1,a)),p=s.clientWidth/2,b=s.clientHeight/2,x=(p-o.x)/o.zoom,Z=(b-o.y)/o.zoom;w(p-x*i,b-Z*i,i)},[e,o]),c=h.useCallback(()=>{const a=e.current,s=[...d.selectedEntityIds].at(-1);if(!a||!s)return;const i=r?.adapter.rects?.rect(s);if(!i||i.width<=0||i.height<=0)return;const p=Math.max(1,a.clientWidth-96),b=Math.max(1,a.clientHeight-96),x=Math.min(4,Math.max(.1,Math.min(p/i.width,b/i.height)));w(a.clientWidth/2-(i.x+i.width/2)*x,a.clientHeight/2-(i.y+i.height/2)*x,x)},[e,r,d]),g=h.useCallback(a=>{const s=e.current;if(u){Q(s,a==="fill"?null:a);return}const i=M[a];if(!s||i===null){z(null,null),w(0,0,1);return}z(i.width,i.height);const p=Math.min(1,Math.max(.1,Math.min((s.clientWidth-96)/i.width,(s.clientHeight-96)/i.height)));w((s.clientWidth-i.width*p)/2,(s.clientHeight-i.height*p)/2,p)},[u,e]),k=h.useCallback(()=>{const a=e.current;a&&X(a)},[e]),v=u!==null,C=r?.kind==="dom"&&!!r.adapter.rects;if(n?!v:!C)return null;const E=u?u.selectedViewportId??"fill":Object.entries(M).find(([,a])=>a===null?l.width===null:a.width===l.width&&a.height===l.height)?.[0]??"fill";return t.jsxs(t.Fragment,{children:[!v&&l.width!==null&&l.height!==null&&t.jsx("div",{"data-testid":"react-canvas-device-frame",style:{position:"absolute",left:0,top:0,zIndex:0,width:l.width,height:l.height,transform:I(o),transformOrigin:"0 0",pointerEvents:"none",background:"#fff",boxShadow:"0 0 0 1px #ffffff40, 0 8px 30px #0009"}}),t.jsxs(W,{label:n?"2D component board view":"React canvas view","data-testid":n?"canvas-board-zoom-controls":"react-canvas-zoom-controls",...n?{"data-board-zoom":""}:{},"data-vgai-canvas-navigation-ignore":"true",className:"vgai-react-canvas-controls",children:[!n&&t.jsx(_,{boardViewport:u,containerRef:e,selectViewport:g,viewportValue:E}),v&&t.jsx(R,{variant:"ghost","aria-label":"Fit story board",title:"Fit all stories",size:"comfortable",onClick:k,children:"Fit board"}),t.jsx(j,{"aria-label":"Zoom out",title:"Zoom out",size:"comfortable",onClick:()=>m(o.zoom/1.2),children:t.jsx(S,{icon:H,size:"md"})}),t.jsx(q,{zoom:o.zoom,zoomTo:m,...v?{fit:k}:{},...!n&&d.selectedEntityIds.size>0?{toSelection:c}:{}}),t.jsx(j,{"aria-label":"Zoom in",title:"Zoom in",size:"comfortable",onClick:()=>m(o.zoom*1.2),children:t.jsx(S,{icon:T,size:"md"})}),!n&&t.jsx(j,{"aria-label":"Zoom to selection",title:"Zoom to selection",size:"comfortable",onClick:c,children:t.jsx(S,{icon:A,size:"md"})})]})]})}function q({zoom:e,zoomTo:r,fit:n,toSelection:d}){const[o,l]=h.useState(!1),u=h.useRef(null),m=c=>()=>{c(),l(!1)};return t.jsxs(t.Fragment,{children:[t.jsxs(R,{ref:u,variant:"ghost","aria-label":"Zoom","aria-haspopup":"menu","aria-expanded":o,title:"Zoom",size:"comfortable",onClick:()=>l(!o),children:[Math.round(e*100),"%"]}),o&&t.jsxs(N,{anchorRef:u,align:"end",clamp:!0,"aria-label":"Zoom",onDismiss:()=>l(!1),children:[t.jsx("div",{style:{padding:"4px 8px"},children:t.jsx(G,{"aria-label":"Zoom percentage",defaultValue:String(Math.round(e*100)),onKeyDown:c=>{if(c.key!=="Enter")return;const g=Number.parseFloat(c.currentTarget.value);Number.isFinite(g)&&g>0&&(r(g/100),l(!1))}})}),t.jsx(y,{}),t.jsx(f,{onSelect:m(()=>r(e*1.2)),children:"Zoom in"}),t.jsx(f,{onSelect:m(()=>r(e/1.2)),children:"Zoom out"}),n?t.jsx(f,{onSelect:m(n),children:"Zoom to fit"}):null,d?t.jsx(f,{onSelect:m(d),children:"Zoom to selection"}):null,t.jsx(y,{}),[.5,1,2].map(c=>t.jsx(f,{onSelect:m(()=>r(c)),children:`Zoom to ${c*100}%`},c))]})]})}export{it as R};
@@ -1 +0,0 @@
1
- import{a}from"./jsx-runtime-DPjLkJKQ.js";import{r as u}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{ae as et,aL as We,$ as gt,hX as pe,gh as Ve,cZ as vt,cR as se,q as Ue,c3 as Mn,jK as Ze,jL as Fn,cC as Xn,jM as Re,jN as je,jO as Pe,aK as ze,a0 as De,jP as $n,gG as Bn,jQ as Yn,jR as Hn,jS as Gn,jT as A,eX as An,J as Kn,aw as Nn,cz as _n,dF as Wn,dG as Vn,fw as Un,jU as ee,jV as Qe,fI as I,jW as ae,fJ as Ct,jX as ne,jY as jt,jZ as le,fK as Zn,fL as Qn,j_ as qn,j$ as Jn,k0 as to,k1 as eo,k2 as no,fM as Ie,k3 as oo,k4 as Oe,k5 as io,k6 as ro,k7 as so,k8 as ao,k9 as lo,ka as co,kb as uo,eT as qe,fH as Le,kc as po,kd as fo,ke as xo,kf as ho,dc as yo,kg as go,az as Je,kh as vo,ki as mo,kj as bo,kk as wo,kl as So,aA as Eo,fy as ko}from"./index-CaG87ZF-.js";import{s as Co,i as Ro,r as Te}from"./eyedropper-session-bjPXnfeX.js";import{a as jo,p as Po}from"./layered-pick-B_-BRrRD.js";import{z as zo,j as Do}from"./react-story-board-Bx7qYytV.js";import{v as fe}from"./viewport-editor-controls-BYaAZ_Ku.js";import{l as Io}from"./inspect-C8RP8G5F.js";const Me=new WeakMap;let Fe=0;function pt(e){let o=Me.get(e);return o||(o={guides:[],listeners:new Set,revision:0},Me.set(e,o)),o}function Kt(e){e.revision+=1;for(const o of e.listeners)o()}function Oo(e){return pt(e).guides}function Lo(e){return pt(e).revision}function To(e,o){const n=pt(e);return n.listeners.add(o),()=>n.listeners.delete(o)}function Zi(e,o,n){Fe+=1;const d=pt(e),r=`canvas-guide-${Fe}`;return d.guides=[...d.guides,{id:r,axis:o,value:n}],Kt(d),r}function Qi(e,o,n){const d=pt(e),r=d.guides.map(h=>h.id===o?{...h,value:n}:h);r.every((h,s)=>h===d.guides[s])||(d.guides=r,Kt(d))}function qi(e,o){const n=pt(e),d=n.guides.filter(r=>r.id!==o);d.length!==n.guides.length&&(n.guides=d,Kt(n))}function Ji(e){const o=pt(e);o.guides.length!==0&&(o.guides=[],Kt(o))}const ce=new WeakMap,de=new Set;let tn=0;function Rt(e){return ce.get(e)??null}function Mo(e,o){o?ce.set(e,o):ce.delete(e),tn+=1;for(const n of de)n()}function Fo(e){return de.add(e),()=>de.delete(e)}function Xo(){return tn}const en="canvasCreateNode";function $o(){return Ue().projectLocalState.read(en)??{favorites:[],recent:[]}}function Xe(e){Ue().projectLocalState.write(en,e)}function nn(e,o){u.useEffect(()=>{const n=r=>{e.current?.contains(r.target)||o()},d=r=>{r.key==="Escape"&&o()};return document.addEventListener("pointerdown",n),document.addEventListener("keydown",d),()=>{document.removeEventListener("pointerdown",n),document.removeEventListener("keydown",d)}},[e,o])}function Bo({state:e,onClose:o}){const[n,d]=u.useState("menu");return n==="create"?a.jsx(Go,{state:e,onClose:o}):n==="instantiate"?a.jsx(Ao,{state:e,onClose:o}):a.jsx(Yo,{state:e,onClose:o,onPick:d})}function Yo({state:e,onClose:o,onPick:n}){const d=u.useRef(null);return nn(d,o),a.jsx(pe,{children:a.jsxs(Ve,{ref:d,"aria-label":"Add node here","data-testid":"viewport-add-menu",style:{position:"fixed",left:e.x,top:e.y,minWidth:190,zIndex:vt.dropdown},children:[a.jsx(se,{"data-testid":"viewport-add-menu-item",onSelect:()=>n("create"),children:"Add 2D Node Here…"}),e.adapter.assetDrop?a.jsx(se,{"data-testid":"viewport-add-menu-item",onSelect:()=>n("instantiate"),children:"Instantiate Scene Here…"}):null]})})}function on({title:e,testId:o,onClose:n,children:d,footer:r}){const h=u.useRef(null);return nn(h,n),a.jsx(pe,{children:a.jsx("div",{style:{position:"fixed",inset:0,zIndex:vt.dropdown,display:"flex",alignItems:"center",justifyContent:"center",background:"rgba(0, 0, 0, .35)"},children:a.jsxs("div",{ref:h,role:"dialog","aria-label":e,"data-testid":o,style:{width:640,maxWidth:"90vw",maxHeight:"80vh",display:"flex",flexDirection:"column",gap:8,padding:12,borderRadius:6,background:et.surface.raised,color:et.content.primary,boxShadow:"0 12px 40px rgba(0, 0, 0, .5)",fontSize:12},children:[a.jsx("div",{style:{fontWeight:600},children:e}),d,a.jsx("div",{style:{display:"flex",gap:8,justifyContent:"flex-end"},children:r})]})})})}const G={color:et.content.muted};function ue({selected:e,onPick:o,onOpen:n,testId:d,indent:r=0,children:h}){return a.jsx("div",{role:"option","aria-selected":e,"data-testid":d,onClick:o,onDoubleClick:n,style:{padding:`2px 6px 2px ${6+r*14}px`,borderRadius:3,cursor:"default",background:e?et.accent.muted:"transparent"},children:h})}function Ho(e,o){let n=0,d=e.extends?o.get(e.extends):void 0;for(;d&&n<16;)n+=1,d=d.extends?o.get(d.extends):void 0;return n}function rn(e){const[o,n]=u.useState(null),[d,r]=u.useState(null);return u.useEffect(()=>{if(!e)return;let h=!0;return Mn().then(s=>{if(h){if(!s.ok){r(s.reason),n([]);return}n(s.entries.filter(g=>g.surface==="canvas"&&g.exported&&g.contentKind!=="image"))}}),()=>{h=!1}},[e]),{components:o,failure:d}}const $e=e=>`component:${e.path}#${e.name}`;function sn(e,o){const n=e.adapter.assetDrop;if(!n)return"This surface places no components.";const d={position:[e.at.x,e.at.y,0],item:{kind:"component",name:o.name,sourcePath:o.path,exportKind:o.defaultExport?"default":"named",surface:o.surface}},r=e.parentId??"";return n.accepts(r,o.path,d)?(Ze(e.adapter,r,o.path,d),null):`${o.name} cannot be placed here.`}function Go({state:e,onClose:o}){const[n,d]=u.useState(""),[r,h]=u.useState($o),[s,g]=u.useState({builtIn:!0,custom:!0}),[S,v]=u.useState(!1),[k,z]=u.useState(null),{components:O}=rn(!!e.adapter.assetDrop),L=e.kinds.find(x=>!x.extends),M=(O??[]).map(x=>({kind:$e(x),label:x.name,...L?{extends:L.kind}:{},description:`A project component, from ${x.path}.`})),j=[...s.builtIn?e.kinds:[],...s.custom?M:[]],_=u.useMemo(()=>new Map([...e.kinds,...M].map(x=>[x.kind,x])),[e.kinds,O]),Z=j.filter(x=>x.label.toLowerCase().includes(n.trim().toLowerCase())),[st,nt]=u.useState(e.kinds[0]?.kind??null),D=st&&Z.some(x=>x.kind===st)?st:Z[0]?.kind??null,K=D?_.get(D):void 0,at=x=>{if(!x)return;const F=(O??[]).find(C=>$e(C)===x);if(F){const C=sn(e,F);if(C){z(C);return}}else e.structure.create(x,e.parentId??void 0,e.at).ack;Xe({...r,recent:[x,...r.recent.filter(C=>C!==x)].slice(0,10)}),o()},Pt=()=>{if(!D)return;const x=r.favorites.includes(D)?r.favorites.filter(C=>C!==D):[...r.favorites,D],F={...r,favorites:x};Xe(F),h(F)},zt=(x,F)=>x.map(C=>_.get(C)).filter(C=>C!==void 0).map(C=>a.jsx(ue,{testId:F,selected:C.kind===D,onPick:()=>nt(C.kind),onOpen:()=>at(C.kind),children:C.label},C.kind));return a.jsx(on,{title:`Create New ${L?.label??"Node"}`,testId:"canvas-create-node-dialog",onClose:o,footer:a.jsxs(a.Fragment,{children:[a.jsx(gt,{type:"button",variant:"ghost",onClick:o,children:"Cancel"}),a.jsx(gt,{type:"button","data-testid":"canvas-create-node-create",disabled:!D,onClick:()=>at(D),children:"Create"})]}),children:a.jsxs("div",{style:{display:"flex",gap:12,minHeight:240},children:[a.jsxs("div",{style:{width:170,display:"flex",flexDirection:"column",gap:4},children:[a.jsx("span",{style:G,children:"Favorites:"}),a.jsx("div",{"data-testid":"canvas-create-node-favorites",style:{flex:1},children:zt(r.favorites,"canvas-create-node-favorite")}),a.jsx("span",{style:G,children:"Recent:"}),a.jsx("div",{"data-testid":"canvas-create-node-recent",style:{flex:1},children:zt(r.recent,"canvas-create-node-recent-item")})]}),a.jsxs("div",{style:{flex:1,display:"flex",flexDirection:"column",gap:4},children:[a.jsx("span",{style:G,children:"Search:"}),a.jsxs("div",{style:{display:"flex",gap:4},children:[a.jsx(We,{"data-testid":"canvas-create-node-search",value:n,autoFocus:!0,onChange:x=>d(x.target.value),onKeyDown:x=>{if(x.key==="Enter"&&at(D),x.key==="ArrowDown"||x.key==="ArrowUp"){x.preventDefault();const F=Z.findIndex(Dt=>Dt.kind===D),C=Z[Math.min(Z.length-1,Math.max(0,F+(x.key==="ArrowDown"?1:-1)))];C&&nt(C.kind)}},style:{flex:1}}),a.jsx(gt,{type:"button",variant:"ghost","data-testid":"canvas-create-node-favorite-toggle","aria-pressed":D?r.favorites.includes(D):!1,title:"(Un)favorite selected item.",disabled:!D,onClick:Pt,children:D&&r.favorites.includes(D)?"★":"☆"})]}),a.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[a.jsx("span",{style:G,children:"Matches:"}),a.jsx("span",{style:{flex:1}}),a.jsx(gt,{type:"button",variant:"ghost","data-testid":"canvas-create-node-filters","aria-haspopup":"menu","aria-expanded":S,onClick:()=>v(!S),children:"Filters"})]}),S?a.jsx("div",{role:"menu","data-testid":"canvas-create-node-filter-menu",style:{display:"flex",gap:12},children:[["builtIn","Show Built-in"],["custom","Show Custom"]].map(([x,F])=>a.jsxs("label",{role:"menuitemcheckbox","aria-checked":s[x],style:{display:"flex",gap:4},children:[a.jsx("input",{type:"checkbox","data-testid":`canvas-create-node-filter-${x}`,checked:s[x],onChange:()=>g({...s,[x]:!s[x]})}),F]},x))}):null,a.jsx("div",{role:"listbox","data-testid":"canvas-create-node-matches",style:{flex:1,overflow:"auto"},children:Z.map(x=>a.jsx(ue,{testId:"canvas-create-node-match",indent:n.trim()===""?Ho(x,_):0,selected:x.kind===D,onPick:()=>nt(x.kind),onOpen:()=>at(x.kind),children:x.label},x.kind))}),a.jsx("span",{style:G,children:"Description:"}),k?a.jsx("span",{"data-testid":"canvas-create-node-failure",style:G,children:k}):null,a.jsx("div",{"data-testid":"canvas-create-node-description",style:{minHeight:36},children:K?a.jsxs(a.Fragment,{children:[a.jsxs("div",{children:[K.label,K.extends?a.jsx("span",{style:G,children:` < ${_.get(K.extends)?.label??K.extends}`}):null]}),K.description?a.jsx("div",{style:G,children:K.description}):null]}):null})]})]})})}function Ao({state:e,onClose:o}){const[n,d]=u.useState(""),[r,h]=u.useState(null),{components:s,failure:g}=rn(!0),[S,v]=u.useState(null),k=S??g,z=j=>`${j.path}#${j.name}`,O=(s??[]).filter(j=>`${j.name} ${j.path}`.toLowerCase().includes(n.trim().toLowerCase())),L=O.find(j=>z(j)===r)??O[0]??null,M=j=>{if(!j)return;const _=sn(e,j);if(_){v(_);return}o()};return a.jsxs(on,{title:"Instantiate Scene",testId:"canvas-instantiate-dialog",onClose:o,footer:a.jsxs(a.Fragment,{children:[a.jsx(gt,{type:"button",variant:"ghost",onClick:o,children:"Cancel"}),a.jsx(gt,{type:"button","data-testid":"canvas-instantiate-open",disabled:!L,onClick:()=>M(L),children:"Instantiate"})]}),children:[a.jsx("span",{style:G,children:"Search:"}),a.jsx(We,{"data-testid":"canvas-instantiate-search",value:n,autoFocus:!0,onChange:j=>d(j.target.value),onKeyDown:j=>{j.key==="Enter"&&M(L)}}),a.jsxs("div",{role:"listbox","data-testid":"canvas-instantiate-matches",style:{minHeight:160,overflow:"auto"},children:[s===null?a.jsx("span",{style:G,children:"Reading the project's components…"}):null,s!==null&&O.length===0?a.jsx("span",{style:G,children:"No canvas component matches."}):null,O.map(j=>a.jsxs(ue,{testId:"canvas-instantiate-match",selected:L!==null&&z(j)===z(L),onPick:()=>h(z(j)),onOpen:()=>M(j),children:[j.name," ",a.jsx("span",{style:G,children:j.path})]},z(j)))]}),k?a.jsx("span",{"data-testid":"canvas-instantiate-failure",style:G,children:k}):null]})}function Be(e,o){for(const n of o){const d=A(e,n.id);if(!d)continue;const r={};n.x!==void 0&&(r.x=n.x),n.y!==void 0&&(r.y=n.y),Object.keys(r).length!==0&&(d.begin(n.id),d.apply(n.id,r),d.end(n.id))}}const Ko=[{op:"left",testId:"align-left",label:"Align left",icon:Re},{op:"hcenter",testId:"align-hcenter",label:"Align horizontal center",icon:je},{op:"right",testId:"align-right",label:"Align right",icon:Pe},{op:"top",testId:"align-top",label:"Align top",icon:Re,rotate:!0},{op:"vcenter",testId:"align-vcenter",label:"Align vertical center",icon:je,rotate:!0},{op:"bottom",testId:"align-bottom",label:"Align bottom",icon:Pe,rotate:!0}],No=[{axis:"horizontal",testId:"distribute-horizontal",label:"Distribute horizontally",icon:Yn},{axis:"vertical",testId:"distribute-vertical",label:"Distribute vertically",icon:Hn}];function _o(e){const d=e.y-30-8;return{left:e.x,top:d<0?e.y+e.height+8:d}}function Wo({adapter:e,entries:o}){if(o.length<2)return null;const n=Fn(o.map(s=>s.rect));if(!n)return null;const{left:d,top:r}=_o(n),h=o.length>=3;return a.jsxs(Xn,{label:"Align and distribute","data-testid":"align-toolbar",style:{position:"absolute",left:d,top:r,zIndex:vt.overlayLow,gap:2,padding:3},children:[Ko.map(({op:s,testId:g,label:S,icon:v,rotate:k})=>a.jsx(ze,{"data-testid":g,title:S,"aria-label":S,variant:"ghost",size:"compact",onClick:()=>Be(e,$n(o,s)),children:a.jsx(De,{icon:v,"aria-hidden":"true",style:k?{transform:"rotate(90deg)"}:void 0})},s)),h&&a.jsxs(a.Fragment,{children:[a.jsx(Bn,{}),No.map(({axis:s,testId:g,label:S,icon:v})=>a.jsx(ze,{"data-testid":g,title:S,"aria-label":S,variant:"ghost",size:"compact",onClick:()=>Be(e,Gn(o,s)),children:a.jsx(De,{icon:v,"aria-hidden":"true"})},s))]})]})}function Vo({rect:e,initialText:o,onCommit:n,onCancel:d}){const[r,h]=u.useState(o),s=u.useRef(null),g=u.useRef(!1);u.useEffect(()=>{const k=s.current;k&&(k.focus(),k.select())},[]);const S=()=>{g.current||(g.current=!0,n(r))},v=()=>{g.current||(g.current=!0,d())};return a.jsx(An,{ref:s,"data-testid":"world-text-editor",value:r,onChange:k=>h(k.target.value),onBlur:S,onKeyDown:k=>{k.key==="Escape"?(k.stopPropagation(),v()):k.key==="Enter"&&!k.shiftKey&&(k.preventDefault(),S())},"data-variant":"inline-editor",style:{position:"absolute",left:e.x,top:e.y,width:Math.max(e.width,40),height:Math.max(e.height,20),boxSizing:"border-box",zIndex:vt.overlayLow,pointerEvents:"auto",resize:"none"}})}const B=et.accent.default,Uo=vt.overlayLow,At=5;function Zo(e,o,n){return e?!1:fe()?.activate(o,n)??!1}function Qo(e,o,n,d,r,h){const s=e?null:fe()?.hover(o,n)??null;r(s),h(s?null:d(o,n))}function qo(e,o){const n=e.hierarchy.node(o);return n?`${n.label}·${n.kind}`:o}function Jo(e){return e instanceof Je?e.childAdapters().some(o=>!!o.adapter.rects):!!e.rects}function ti(e){const o=e instanceof Je?e.childAdapters():[{worldId:"",adapter:e}],n=[];for(const{worldId:d,adapter:r}of o)if(r.rects&&!(d&&Eo(d)))for(const h of ko(r)){if(r.inspector?.get(h,"locked")===!0)continue;const s=r.rects.rect(h);s&&n.push({id:h,rect:s})}return n}function ei(e,o){return e.x<o.x+o.width&&e.x+e.width>o.x&&e.y<o.y+o.height&&e.y+e.height>o.y}function ni(e,o,n){if(!n)return[o];const d=new Set(e);return d.has(o)?d.delete(o):d.add(o),[...d]}function oi(e,o,n,d){return o&&!!n&&(n.width>At||n.height>At)&&n?ti(e).filter(s=>ei(n,s.rect)).map(s=>s.id):d?null:[]}function ii(e,o,n,d){return e?"grabbing":o?"grab":n||d?"crosshair":"default"}function tt(e){try{e.currentTarget.setPointerCapture?.(e.pointerId)}catch{}}function oe(e){e.currentTarget.hasPointerCapture?.(e.pointerId)&&e.currentTarget.releasePointerCapture?.(e.pointerId)}function ri(e,o){if(o!==null)return!1;const n=e.currentTarget.parentElement?.parentElement??null;return Do(n,e.clientX,e.clientY)}function ie(e,o,n){return!e||o===n||o==="combined"||o==="select"}function Ye(e,o){return{position:"absolute",left:e.x,top:e.y,width:e.width,height:e.height,borderStyle:"solid",borderColor:B,borderWidth:o?2:1,background:o?`color-mix(in srgb, ${B} 6%, transparent)`:"transparent",boxSizing:"border-box",pointerEvents:"none"}}function si(e,o,n){if(!e)return{left:o.x+o.width/2-U/2,top:o.y-n-U/2};const d=(e.tl.x+e.tr.x)/2,r=(e.tl.y+e.tr.y)/2,h=e.tl.x-e.bl.x,s=e.tl.y-e.bl.y,g=Math.hypot(h,s)||1;return{left:d+h/g*n-U/2,top:r+s/g*n-U/2}}function ai(e,o){const n=Math.hypot(e.tr.x-e.tl.x,e.tr.y-e.tl.y),d=Math.hypot(e.bl.x-e.tl.x,e.bl.y-e.tl.y),r=(e.tl.x+e.br.x)/2,h=(e.tl.y+e.br.y)/2;return{position:"absolute",left:r-n/2,top:h-d/2,width:n,height:d,transform:`rotate(${le(e)}rad)`,transformOrigin:"center",borderStyle:"solid",borderColor:B,borderWidth:o,background:"transparent",boxSizing:"border-box",pointerEvents:"none"}}function li(e){return{position:"absolute",left:e.x,top:Math.max(0,e.y-18),padding:"2px 6px",fontSize:11,fontFamily:"'SF Mono', 'Fira Code', Menlo, Consolas, monospace",fontWeight:600,color:"#fff",background:B,borderRadius:3,pointerEvents:"none",whiteSpace:"nowrap"}}const Ht=10,re=48;function He(e,o){return{position:"absolute",left:e.x-Ht/2,top:e.y-Ht/2,width:Ht,height:Ht,background:"#fff",border:`1px solid ${B}`,boxSizing:"border-box",cursor:o,pointerEvents:"auto"}}const U=12,an=24;function ci(e){return{position:"absolute",left:e.x+e.width/2-U/2,top:e.y-an-U/2,width:U,height:U,borderRadius:"50%",background:"#fff",border:`1px solid ${B}`,boxSizing:"border-box",cursor:"grab",padding:0,pointerEvents:"auto"}}const Ge=12;function di(e){return{position:"absolute",left:e.position[0],top:e.position[1],width:Ge,height:Ge,borderRadius:"50%",background:e.writable?e.color:"transparent",border:`2px solid ${e.color}`,boxSizing:"border-box",cursor:e.writable?"grab":"not-allowed",padding:0,pointerEvents:e.writable?"auto":"none",touchAction:"none"}}function ui(e){return{position:"absolute",left:e.x-8,top:e.y-8,width:16,height:16,display:"grid",placeItems:"center",borderRadius:e.kind==="anchor"?"50%":2,background:"#fff",border:`1px solid ${B}`,boxSizing:"border-box",color:B,cursor:"crosshair",fontSize:9,fontFamily:"'SF Mono', 'Fira Code', Menlo, Consolas, monospace",fontWeight:700,lineHeight:1,padding:0,pointerEvents:"auto",touchAction:"none"}}function pi(e){return{position:"absolute",left:e.x,top:e.y+e.height+4,padding:"2px 6px",fontSize:11,fontFamily:"'SF Mono', 'Fira Code', Menlo, Consolas, monospace",fontWeight:600,color:"#fff",background:B,borderRadius:3,pointerEvents:"none",whiteSpace:"nowrap"}}const fi="rgba(46, 204, 113, 0.25)",xi="rgba(230, 126, 34, 0.25)";function hi(e){return{position:"absolute",left:e.x,top:e.y,width:e.width,height:e.height,background:e.kind==="padding"?fi:xi,boxSizing:"border-box",cursor:e.cursor,pointerEvents:"auto"}}function yi(e){return{position:"absolute",left:e.labelX,top:e.labelY,transform:"translate(-50%, -50%)",fontSize:10,fontFamily:"monospace",color:e.kind==="padding"?"#1b7a3d":"#a35a12",background:"rgba(255,255,255,0.85)",padding:"0 2px",borderRadius:2,pointerEvents:"none",whiteSpace:"nowrap"}}function gi(e){return{position:"absolute",left:e.x,top:e.y,width:e.width,height:e.height,border:`2px dashed ${B}`,background:`color-mix(in srgb, ${B} 15%, transparent)`,boxSizing:"border-box",pointerEvents:"none",opacity:.7}}function vi(e){return{position:"absolute",left:e.x,top:e.y,width:e.width,height:e.height,background:"#ff5fa2",borderRadius:2,pointerEvents:"none"}}const xe="#ff2d92",Gt=6;function mi(e){const o=e.orientation==="horizontal";return{position:"absolute",left:Math.min(e.x1,e.x2),top:Math.min(e.y1,e.y2),width:o?Math.abs(e.x2-e.x1):1,height:o?1:Math.abs(e.y2-e.y1),background:xe,pointerEvents:"none"}}function Ae(e,o,n){return{position:"absolute",left:n?e:e-Gt/2,top:n?o-Gt/2:o,width:n?1:Gt,height:n?Gt:1,background:xe,pointerEvents:"none"}}function bi(e){return{position:"absolute",left:e.labelX,top:e.labelY,transform:"translate(-50%, -50%)",padding:"1px 4px",fontSize:10,fontFamily:"monospace",fontWeight:600,color:"#fff",background:xe,borderRadius:2,pointerEvents:"none",whiteSpace:"nowrap"}}const Ke="#f24822";function wi(e){const o=e.orientation==="vertical";return{position:"absolute",left:o?e.at:e.start,top:o?e.start:e.at,width:o?1:e.end-e.start,height:o?e.end-e.start:1,borderLeft:o?`1px dashed ${Ke}`:void 0,borderTop:o?void 0:`1px dashed ${Ke}`,pointerEvents:"none"}}function Si(e){return{position:"absolute",left:e.x,top:Math.max(0,e.y-36),display:"flex",gap:4,pointerEvents:"none"}}const Ne={padding:"2px 6px",fontSize:10,fontFamily:"'SF Mono', 'Fira Code', Menlo, Consolas, monospace",fontWeight:600,color:et.content.onAccent,background:`color-mix(in srgb, ${B} 85%, transparent)`,borderRadius:3,whiteSpace:"nowrap"};function Ei(e){return{position:"absolute",left:e.x,top:e.y,width:e.width,height:e.height,border:`1px dashed color-mix(in srgb, ${B} 45%, transparent)`,boxSizing:"border-box",pointerEvents:"none"}}function _e(e,o,n,d=0){return o&&n>0?Math.round((e-d)/n)*n+d:e}function ki(e,o,n,d,r,h,s=!1){const g=e.nativeHandleSpan??1,S=s?"both":e.nativeScaleAxis??"both",v=s&&e.nativeScaleAxis==="x"?o:s&&e.nativeScaleAxis==="y"?n:null;let k,z;if(S==="x")k=1+o/g,z=1;else if(S==="y")k=1,z=1+n/g;else{const O=v!==null?1+v/g:1+(o+n)/(Math.SQRT2*g);k=O,z=O}return{...S!=="y"?{scaleXFactor:k}:{},...S!=="x"?{scaleYFactor:z}:{},...d&&!r?{scaleStep:h}:{}}}function Ci(e,o,n,d,r,h,s={x:0,y:0}){const g=e.nativeOrigin;if(!g)return{};const S=d&&!0;return{...e.moveAxis!=="y"?{originX:_e(g.x+o,S,h,s.x)}:{},...e.moveAxis!=="x"?{originY:_e(g.y+n,S,h,s.y)}:{}}}function Ri(e,o,n){return e==="x"?{x:o.x+n,y:o.y}:e==="y"?{x:o.x,y:o.y+n}:{x:o.x+n/Math.SQRT2,y:o.y+n/Math.SQRT2}}function ji(e,o,n){return e==="x"?{dx:o,dy:0}:e==="y"?{dx:0,dy:n}:{dx:o,dy:n}}function Pi(e,o){e.ownerBoxEdit.begin(e.id);for(const n of e.peers)n.ownerBoxEdit.begin(n.id);return{kind:"move",id:e.id,ownerBoxEdit:e.ownerBoxEdit,startLocal:o,origRect:e.origRect,context:e.context,...e.nativeOrigin?{nativeOrigin:e.nativeOrigin}:{},movePeers:e.peers}}function zi(e,o,n){let d=o;for(let r=0;d!==null&&r<256;r++){if(n.has(d))return d;d=e.hierarchy.node(d)?.parentId??null}return null}function Di(e,o,n){const d=A(e,o);if(!d)return null;const r=e.inspector?.get(o,"style.position"),h=ae(e,o)==="2d";if(r!=="absolute"&&r!=="fixed"&&!h)return null;const s=I(e,o);if(!s)return null;const g=h?d.gizmoOrigin?.(o)??void 0:void 0,S=[];for(const v of n){if(v===o)continue;const k=A(e,v),z=I(e,v);if(!k||!z)continue;const O=e.inspector?.get(v,"style.position"),L=ae(e,v)==="2d";if(O!=="absolute"&&O!=="fixed"&&!L)continue;const M=L?k.gizmoOrigin?.(v)??void 0:void 0;S.push({id:v,ownerBoxEdit:k,origRect:z,...M?{nativeOrigin:M}:{}})}return{id:o,ownerBoxEdit:d,origRect:s,context:jt(e,o),...g?{nativeOrigin:g}:{},peers:S}}function Ii(e,o){if(!Qe(e,o)?.reorder)return null;const d=go(e,o);if(!d||d.length<3)return null;const r=I(e,o);if(!r)return null;const h=[];for(const s of d){if(s===o)continue;const g=I(e,s);g&&h.push({id:s,rect:g})}return h.length===0?null:{id:o,adapter:e,origRect:r,siblingRects:h}}function Oi(){return vo()}function Li(e,o){if(o.size!==1)return null;const n=[...o][0],d=A(e,n);if(!d)return null;const r=I(e,n);if(!r)return null;const h=mo(r,bo(e,n));return{id:n,rect:r,ownerBoxEdit:d,spacingBands:h}}function Ti(e,o){if(o.size<2)return null;const n=[];for(const d of o){const r=I(e,d);if(!r||!A(e,d))return null;n.push({id:d,rect:r})}return n}function Mi(e,o,n){const d=o.size===1?[...o][0]:null,r=d?I(e,d):null,h=r&&n?wo(r,n):[],s=d?So(e,d):null,g=!!(s&&(s.position||s.parentLayout)),S=d?jt(e,d)?.parent??null:null;return{selectedSingleRect:r,measureLines:h,positionBadge:s,showPositionBadge:g,parentRect:S}}function Fi({state:e,adapter:o,onClose:n}){const d=u.useRef(null);return u.useEffect(()=>{const r=s=>{d.current?.contains(s.target)||n()},h=s=>{s.key==="Escape"&&n()};return document.addEventListener("pointerdown",r),document.addEventListener("keydown",h),()=>{document.removeEventListener("pointerdown",r),document.removeEventListener("keydown",h)}},[n]),a.jsx(pe,{children:a.jsx(Ve,{ref:d,"aria-label":"Pick object under pointer","data-testid":"viewport-pick-menu",style:{position:"fixed",left:e.x,top:e.y,minWidth:190,maxWidth:320,zIndex:vt.dropdown},children:e.ids.map(r=>{const h=o.hierarchy.node(r);return a.jsxs(se,{"data-testid":"viewport-pick-menu-item",onSelect:()=>{qe(o,[r]),n()},style:{justifyContent:"space-between",gap:20},children:[a.jsx("span",{children:h?.label??r}),a.jsx("span",{style:{color:et.content.muted,fontSize:11},children:h?.kind??""})]},r)})})})}function tr({adapter:e,view:o,transformModeAware:n=!1,presentationId:d}={}){const r=Kn(),h=u.useSyncExternalStore(r.subscribe,r.getSnapshot),s=e??Nn(r),g=u.useCallback((t,i)=>e?e.pickable?.pick(t,i)??null:jo(r,t,i),[e,r]),S=u.useRef(null),v=u.useRef(null),k=u.useRef(null),[z,O]=u.useState(null),[L,M]=u.useState(null),[j,_]=u.useState(null),[Z,st]=u.useState(null),nt=u.useRef(null),[D,K]=u.useState(null),at=u.useRef(()=>{}),Pt=u.useCallback((t,i,c=!1)=>{const l=Po(r,t,i,{...e?{adapter:e}:{},...c?{includeLocked:c}:{}});if(l.length===0){st(null);return}st({x:t,y:i,ids:l})},[e,r]);u.useEffect(()=>{const t=c=>{const l=nt.current;!l||l.pointerId!==c.pointerId||l.moved||Math.hypot(c.clientX-l.startClientX,c.clientY-l.startClientY)>At&&(l.moved=!0)},i=c=>{const l=nt.current;!l||l.pointerId!==c.pointerId||(nt.current=null,c.type==="pointerup"&&!l.moved&&(n&&!c.altKey?at.current(c.clientX,c.clientY):Pt(c.clientX,c.clientY,n)))};return window.addEventListener("pointermove",t),window.addEventListener("pointerup",i),window.addEventListener("pointercancel",i),()=>{window.removeEventListener("pointermove",t),window.removeEventListener("pointerup",i),window.removeEventListener("pointercancel",i)}},[Pt,n]);const zt=u.useCallback(t=>{t.preventDefault(),t.stopPropagation()},[]),x=o??_n;u.useSyncExternalStore(Fo,Xo);const F=n?Rt(x):null,C=[...r.selectedEntityIds].sort().join("\0"),Dt=u.useRef(C);u.useEffect(()=>{Dt.current!==C&&(Dt.current=C,Rt(x)&&Mo(x,null))},[C,x]);const m=u.useSyncExternalStore(x.subscribe,x.get,x.get);u.useSyncExternalStore(u.useCallback(t=>To(x,t),[x]),u.useCallback(()=>Lo(x),[x]));const Nt=n?Oo(x):[],H=n?1/m.zoom:1,mt=n&&r.transformMode!=="combined"&&r.transformMode!=="select";u.useSyncExternalStore(Wn,Vn);const he=d?Un(d):null,ln=he?.position??!0,_t=!mt||(he?.transformation??!0),Wt=u.useRef(!1),Vt=u.useRef(null),[cn,ye]=u.useState(!1),ot=u.useRef(null),[dn,It]=u.useState(!1),T=u.useRef(null);u.useEffect(()=>()=>{const t=T.current;if(T.current=null,!!t){t.ownerBoxEdit.end(t.id);for(const i of t.movePeers??[])i.ownerBoxEdit.end(i.id)}},[]);const[,un]=u.useState(0),[pn,bt]=u.useState(null),[fn,lt]=u.useState([]),Ut=u.useRef(null),[xn,hn]=u.useState(null),ft=u.useCallback(t=>{Ut.current=t,hn(t)},[]),ge=u.useRef(null),[yn,gn]=u.useState(null),[Ot,wt]=u.useState(null),ct=u.useCallback(t=>{ge.current=t,gn(t)},[]),Zt=u.useRef(null),ve=u.useRef(null);u.useEffect(()=>{const t=Zt.current;if(!t)return;Zt.current=null;const i=ee(s,t.id);i&&i.get(t.id)===null&&wt({id:t.id,rect:t.rect})},[h]);const me=u.useRef("");u.useEffect(()=>{const t=[...r.selectedEntityIds].sort().join(",");t!==me.current&&(me.current=t,Ot&&wt(null))}),u.useEffect(()=>{if(!Ot)return;const t=window.setTimeout(()=>wt(null),4e3);return()=>window.clearTimeout(t)},[Ot]);const it=u.useSyncExternalStore(Co,Ro),[vn,be]=u.useState(null),W=u.useCallback(t=>{k.current=t,O(t)},[]),E=u.useCallback((t,i)=>{const c=S.current?.getBoundingClientRect();return{x:(t-(c?.left??0)-m.x)/m.zoom,y:(i-(c?.top??0)-m.y)/m.zoom}},[m.x,m.y,m.zoom]);at.current=(t,i)=>{const c=r.selectedEntityIds,l=s.hierarchy.roots(),f=c.size===1?[...c][0]:l.length===1?l[0].id:null,p=f?Qe(s,f):s.structure??null,y=p?.creatableKinds?.(f)??[];if(!p||y.length===0){K(null);return}const w=r.snap2D,b=(yt,Ce)=>r.snapEnabled&&w.step>0?Math.round((yt-Ce)/w.step)*w.step+Ce:yt,P=E(t,i),R={x:b(P.x,w.offsetX),y:b(P.y,w.offsetY)},ut=w.pixel?{x:Math.round(R.x),y:Math.round(R.y)}:R;K({x:t,y:i,at:ut,parentId:f,structure:p,kinds:y,adapter:s})};const mn=u.useCallback(t=>{!o||!n||!s.assetDrop||!t.dataTransfer.types.includes("application/x-editor-asset")||(t.preventDefault(),t.dataTransfer.dropEffect="copy")},[s.assetDrop,o,n]),bn=u.useCallback(t=>{if(!o||!n||!s.assetDrop)return;const i=t.dataTransfer.getData("application/x-editor-asset");if(!i)return;let c;try{c=JSON.parse(i)}catch{return}const l=E(t.clientX,t.clientY),f={position:[l.x,l.y,0],item:c.component??{kind:"file",name:c.name??c.path.split("/").pop()??c.path}};s.assetDrop.accepts("",c.path,f)&&(t.preventDefault(),t.stopPropagation(),Ze(s,"",c.path,f))},[s.assetDrop,o,E,n]),V=u.useCallback(()=>un(t=>t+1),[]),Lt=u.useCallback(()=>{const t=T.current;if(!t)return!1;T.current=null,t.ownerBoxEdit.end(t.id);for(const i of t.movePeers??[])i.ownerBoxEdit.end(i.id);return bt(null),lt([]),V(),!0},[V]),wn=u.useCallback((t,i)=>{if(i.stopPropagation(),i.button!==0)return;const c=r.selectedEntityIds;if(c.size!==1)return;const l=[...c][0],f=A(s,l),p=I(s,l);if(!f||!p)return;const y=s.inspector?.get(l,"style.position"),w=ae(s,l)==="2d",b=w?Ct(s,l):null,P=b&&ne(b)?f.gizmoOrigin?.(l)??null:null;tt(i),f.begin(l),T.current={kind:"resize",id:l,ownerBoxEdit:f,startLocal:E(i.clientX,i.clientY),origRect:p,pos:t,...b&&P?{frame:b,frameOrigin:P}:{},isPositioned:y==="absolute"||y==="fixed"||w,context:jt(s,l)}},[s,r,E]),we=u.useCallback(()=>{if(!n||r.selectedEntityIds.size<2)return null;const t=[...r.selectedEntityIds].flatMap(y=>{const w=A(s,y),b=I(s,y),P=w?.gizmoOrigin?.(y);return w&&b&&P?[{id:y,ownerBoxEdit:w,origRect:b,nativeOrigin:P}]:[]});if(t.length<2)return null;const i=Math.min(...t.map(y=>y.origRect.x)),c=Math.min(...t.map(y=>y.origRect.y)),l=Math.max(...t.map(y=>y.origRect.x+y.origRect.width)),f=Math.max(...t.map(y=>y.origRect.y+y.origRect.height)),p=Rt(x)??{x:(i+l)/2,y:(c+f)/2};return{primary:t[0],peers:t.slice(1),center:p}},[s,r,n,x]),Tt=u.useCallback((t,i)=>{const c=we();if(!c)return!1;tt(i),c.primary.ownerBoxEdit.begin(c.primary.id);for(const l of c.peers)l.ownerBoxEdit.begin(l.id);return T.current={kind:t,id:c.primary.id,ownerBoxEdit:c.primary.ownerBoxEdit,startLocal:E(i.clientX,i.clientY),origRect:c.primary.origRect,center:c.center,nativeOrigin:c.primary.nativeOrigin,movePeers:c.peers,groupCenter:c.center,...t==="native-scale"?{nativeScaleAxis:"both",nativeHandleSpan:re/m.zoom}:{}},!0},[we,E,m.zoom]),Mt=u.useCallback(t=>{if(t.stopPropagation(),t.button!==0)return;const i=r.selectedEntityIds;if(i.size>1){Tt("rotate",t);return}if(i.size!==1)return;const c=[...i][0],l=A(s,c),f=I(s,c);if(!l||!f)return;const p=n?l.gizmoOrigin?.(c):null,y=p?Ct(s,c):null;tt(t),l.begin(c),T.current={...y?{startAngleDeg:le(y)*180/Math.PI}:{},kind:"rotate",id:c,ownerBoxEdit:l,startLocal:E(t.clientX,t.clientY),origRect:f,center:(p?Rt(x):null)??p??{x:f.x+f.width/2,y:f.y+f.height/2},...p?{nativeOrigin:p}:{}}},[s,r,E,n,Tt,x]),Qt=u.useCallback((t,i)=>{if(i.stopPropagation(),i.button!==0)return;const c=r.selectedEntityIds;if(c.size!==1)return;const l=[...c][0],f=A(s,l),p=I(s,l);if(!f||!p)return;const y=f.gizmoOrigin?.(l)??{x:p.x+p.width/2,y:p.y+p.height/2};tt(i),f.begin(l),T.current={kind:"move",id:l,ownerBoxEdit:f,startLocal:E(i.clientX,i.clientY),origRect:p,context:jt(s,l),moveAxis:t,nativeOrigin:y}},[s,r,E]),Ft=u.useCallback((t,i)=>{if(i.stopPropagation(),i.button!==0)return;const c=r.selectedEntityIds;if(c.size>1){Tt("native-scale",i);return}if(c.size!==1)return;const l=[...c][0],f=A(s,l),p=I(s,l);if(!f||!p)return;const y=f.gizmoOrigin?.(l)??{x:p.x+p.width/2,y:p.y+p.height/2};tt(i),f.begin(l),T.current={kind:"native-scale",id:l,ownerBoxEdit:f,startLocal:E(i.clientX,i.clientY),origRect:p,nativeOrigin:y,nativeScaleAxis:t,nativeHandleSpan:re/m.zoom}},[s,m.zoom,r,E,Tt]),Sn=u.useCallback((t,i)=>{if(i.stopPropagation(),i.button!==0)return;const c=r.selectedEntityIds;if(c.size!==1)return;const l=[...c][0],f=A(s,l),p=I(s,l);!f||!p||f.referencePoint?.(l)?.id!==t.id||(tt(i),f.begin(l),T.current={kind:"reference",id:l,ownerBoxEdit:f,startLocal:E(i.clientX,i.clientY),origRect:p,context:jt(s,l),pointerId:i.pointerId,referencePoint:t})},[s,r,E]),St=u.useRef(null),xt=u.useCallback((t,i,c)=>{const l=r.smartSnap;if(c||!l.enabled||!l.sides&&!l.center)return i;const f=I(s,t),p=Ct(s,t)??(f?Zn(f):null);if(!p)return i;const y=Math.max(x.get().zoom,.01);return Qn(i,p,l.sides,l.center,Ie/y)},[s,r,x]),En=u.useCallback((t,i,c,l)=>{if(l.stopPropagation(),l.button!==0||!c.writable)return;tt(l);const f=i.layers(t).some(p=>p.category==="origin"&&p.handles.some(y=>y.id===c.id));St.current={id:t,handleId:c.id,provider:i,pivot:f}},[]),kn=u.useCallback(t=>{const i=St.current;if(!i)return;const c=E(t.clientX,t.clientY),l=i.pivot?xt(i.id,c,t.altKey):c;i.provider.preview(i.id,i.handleId,[l.x,l.y,0]),V()},[V,E,xt]),qt=u.useCallback(t=>{const i=St.current;if(St.current=null,!i)return;oe(t);const c=E(t.clientX,t.clientY),l=i.pivot?xt(i.id,c,t.altKey):c;i.provider.commit(i.id,i.handleId,[l.x,l.y,0]),V()},[V,E,xt]),Cn=u.useCallback((t,i)=>{if(i.stopPropagation(),i.button!==0)return;const c=r.selectedEntityIds;if(c.size!==1)return;const l=[...c][0],f=A(s,l),p=I(s,l);!f||!p||(tt(i),f.begin(l),T.current={kind:"spacing",id:l,ownerBoxEdit:f,startLocal:E(i.clientX,i.clientY),origRect:p,side:t.side,origValue:t.value})},[s,r,E]),Xt=u.useCallback((t,i)=>{if(t.pointerId!==void 0&&i.pointerId!==t.pointerId)return;const c=E(i.clientX,i.clientY),l=c.x-t.startLocal.x,f=c.y-t.startLocal.y;let p;if(t.kind==="resize"&&t.frame&&t.frameOrigin)p=qn(t.frame,t.pos,l,f,t.frameOrigin,i.shiftKey),lt([]);else if(t.kind==="resize")p=Jn(t.pos,l,f,t.origRect,!!t.isPositioned,i.altKey,t.context),i.shiftKey&&t.isPositioned&&(p=to(p,t.origRect,t.pos)),lt(eo(t.pos,l,f,t.origRect,i.altKey,t.context));else if(t.kind==="native-scale")p=ki(t,l,f,r.scaleSnap,i.altKey,r.snap2D.scaleStep,i.shiftKey),lt([]);else if(t.kind==="move"){const{dx:y,dy:w}=ji(t.moveAxis,l,f);if(t.nativeOrigin){p=Ci(t,y,w,r.snapEnabled,!1,r.snap2D.step,r.snap2D.relative?t.nativeOrigin:{x:r.snap2D.offsetX,y:r.snap2D.offsetY});const b=no({x:p.originX??t.nativeOrigin.x,y:p.originY??t.nativeOrigin.y},t.nativeOrigin,t.origRect,t.context,t.moveAxis,!r.smartSnap.enabled,Ie/Math.max(m.zoom,.01),{x:Nt.filter(R=>R.axis==="x").map(R=>R.value),y:Nt.filter(R=>R.axis==="y").map(R=>R.value)},r.smartSnap),P=R=>r.snap2D.pixel?Math.round(R):R;p.originX!==void 0&&(p.originX=P(b.position.x)),p.originY!==void 0&&(p.originY=P(b.position.y)),lt(b.guides)}else p=oo(y,w,t.origRect,i.altKey,t.context);bt(Oe(t.origRect,y,w)),t.nativeOrigin||lt(io(y,w,t.origRect,i.altKey,t.context))}else if(t.kind==="reference"){const y=ro(c,t.origRect,i.altKey,t.context,{bounded:t.referencePoint?.bounded,snapPoints:t.referencePoint?.snapPoints});p={referenceX:y.position.x,referenceY:y.position.y},lt(y.guides)}else if(t.kind==="rotate"){const y=t.nativeOrigin&&t.startAngleDeg!==void 0&&!r.snap2D.relative;if(p=so(t.center,t.startLocal,c,t.nativeOrigin&&(y||!r.rotationSnap)||i.altKey,t.nativeOrigin?r.snap2D.rotationStep:15),y&&r.rotationSnap&&!i.altKey&&p.rotate!==void 0){const b=r.snap2D.rotationStep,P=r.snap2D.rotationOffset,R=t.startAngleDeg,ut=R+p.rotate;p={rotate:Math.round((ut-P)/b)*b+P-R}}const w=t.groupCenter??(t.nativeOrigin?Rt(x):null);if(w&&t.nativeOrigin&&p.rotate!==void 0){const b=p.rotate*Math.PI/180,P=t.nativeOrigin.x-w.x,R=t.nativeOrigin.y-w.y;p={...p,originX:w.x+P*Math.cos(b)-R*Math.sin(b),originY:w.y+P*Math.sin(b)+R*Math.cos(b)}}}else p=ao(t.side,l,f,t.origValue??0);if(t.kind==="native-scale"&&t.groupCenter&&t.nativeOrigin){const y=t.groupCenter,w=p.scaleXFactor??1,b=p.scaleYFactor??1;p={...p,originX:y.x+(t.nativeOrigin.x-y.x)*w,originY:y.y+(t.nativeOrigin.y-y.y)*b}}if(t.ownerBoxEdit.apply(t.id,p),t.groupCenter&&t.movePeers&&(t.kind==="rotate"||t.kind==="native-scale")){const y=t.groupCenter,w=(p.rotate??0)*Math.PI/180,b=p.scaleXFactor??1,P=p.scaleYFactor??1;for(const R of t.movePeers){if(!R.nativeOrigin)continue;const ut=R.nativeOrigin.x-y.x,yt=R.nativeOrigin.y-y.y;R.ownerBoxEdit.apply(R.id,t.kind==="rotate"?{rotate:p.rotate??0,originX:y.x+ut*Math.cos(w)-yt*Math.sin(w),originY:y.y+ut*Math.sin(w)+yt*Math.cos(w)}:{...p.scaleXFactor!==void 0?{scaleXFactor:b}:{},...p.scaleYFactor!==void 0?{scaleYFactor:P}:{},...p.scaleStep!==void 0?{scaleStep:p.scaleStep}:{},originX:y.x+ut*b,originY:y.y+yt*P})}}if(t.kind==="move"&&t.movePeers){const y=t.nativeOrigin?(p.originX??t.nativeOrigin.x)-t.nativeOrigin.x:(p.x??t.origRect.x)-t.origRect.x,w=t.nativeOrigin?(p.originY??t.nativeOrigin.y)-t.nativeOrigin.y:(p.y??t.origRect.y)-t.origRect.y;for(const b of t.movePeers)b.ownerBoxEdit.apply(b.id,b.nativeOrigin?{originX:b.nativeOrigin.x+y,originY:b.nativeOrigin.y+w}:{x:b.origRect.x+y,y:b.origRect.y+w})}V()},[E,V,r,Nt,m.zoom]),$t=u.useCallback((t,i)=>{const c=g(t,i);if(!c)return null;const l=lo(s,c)?.backgroundChainAt(t,i)??null;return l?Io(l):null},[s,g]);u.useEffect(()=>{if(!it)return;const t=i=>{i.key==="Escape"&&Te(null)};return window.addEventListener("keydown",t),()=>window.removeEventListener("keydown",t)},[it]),u.useEffect(()=>{if(!n)return;const t=i=>{if(i.key.toLowerCase()!=="v"||i.repeat||i.metaKey||i.ctrlKey||i.altKey)return;const c=i.target;if(c instanceof HTMLInputElement||c instanceof HTMLTextAreaElement||c instanceof HTMLSelectElement||c instanceof HTMLElement&&c.isContentEditable)return;const l=Vt.current,f=r.selectedEntityIds;if(!l||f.size!==1||T.current||St.current)return;const p=[...f][0],y=Le(s,p),w=y?.layers(p).find(P=>P.category==="origin")?.handles.find(P=>P.writable);if(!y||!w)return;i.preventDefault();const b=xt(p,E(l.x,l.y),!1);y.commit(p,w.id,[b.x,b.y,0]),V()};return window.addEventListener("keydown",t),()=>window.removeEventListener("keydown",t)},[s,r,n,E,V,xt]),u.useEffect(()=>{const t=l=>l instanceof HTMLInputElement||l instanceof HTMLTextAreaElement||l instanceof HTMLSelectElement||l instanceof HTMLElement&&l.isContentEditable,i=l=>{l.code!=="Space"||l.repeat||t(l.target)||l.target instanceof HTMLButtonElement||(l.preventDefault(),Wt.current=!0,ye(!0))},c=l=>{l.code==="Space"&&(Wt.current=!1,ye(!1),ot.current&&(ot.current=null,It(!1)))};return window.addEventListener("keydown",i),window.addEventListener("keyup",c),()=>{window.removeEventListener("keydown",i),window.removeEventListener("keyup",c)}},[]);const Se=u.useCallback(t=>{if(t.stopPropagation(),tt(t),Wt.current){ot.current={startClientX:t.clientX,startClientY:t.clientY,startPan:x.get()},It(!0);return}if(n&&r.selectedEntityIds.size>1&&!(t.metaKey||t.ctrlKey)&&(r.transformMode==="rotate"||r.transformMode==="scale")){r.transformMode==="rotate"?Mt(t):Ft("both",t);return}if(n&&r.selectedEntityIds.size>=1&&(t.metaKey||t.ctrlKey)){t.altKey?Ft("both",t):Mt(t);return}if(it){Te($t(t.clientX,t.clientY)),be(null);return}if(Zo(e,t.clientX,t.clientY)){v.current=null,M(null),W(null);return}const i=g(t.clientX,t.clientY);if(ri(t,i)){v.current=null,M(null),W(null);return}const l=n&&t.altKey&&r.selectedEntityIds.size===1?[...r.selectedEntityIds][0]:i!==null?zi(s,i,r.selectedEntityIds):null,f=ie(n,r.transformMode,"translate")&&l!==null?Di(s,l,r.selectedEntityIds):null,p=!f&&l!==null?Ii(s,l):null;v.current={downClientX:t.clientX,downClientY:t.clientY,downLocal:E(t.clientX,t.clientY),hitAtDown:i,moved:!1,moveCandidate:f,reorderCandidate:p},M(null),W(null)},[s,r,x,n,E,W,it,$t,g,e,Ft,Mt]),Rn=u.useCallback(t=>{if(t.button===2){nt.current={pointerId:t.pointerId,startClientX:t.clientX,startClientY:t.clientY,moved:!1};return}t.button===0&&Se(t)},[Se]),Ee=u.useCallback((t,i)=>{const c=i.clientX-t.downClientX,l=i.clientY-t.downClientY;if(!t.moved&&Math.hypot(c,l)>At&&(t.moved=!0),!!t.moved){if(t.moveCandidate){const f=Pi(t.moveCandidate,t.downLocal);T.current=f,Xt(f,i);return}if(t.reorderCandidate){const f=E(i.clientX,i.clientY),p=co(t.reorderCandidate.siblingRects,f);p&&(ft({id:t.reorderCandidate.id,adapter:t.reorderCandidate.adapter,gap:p}),bt(Oe(t.reorderCandidate.origRect,f.x-t.downLocal.x,f.y-t.downLocal.y)));return}if(t.hitAtDown===null){const f=E(i.clientX,i.clientY);W({x:Math.min(t.downLocal.x,f.x),y:Math.min(t.downLocal.y,f.y),width:Math.abs(f.x-t.downLocal.x),height:Math.abs(f.y-t.downLocal.y)})}}},[E,W,Xt,ft]),Q=u.useCallback(t=>{const i=ot.current;if(i){x.setPan(i.startPan.x+(t.clientX-i.startClientX),i.startPan.y+(t.clientY-i.startClientY));return}if(it){const f=E(t.clientX,t.clientY);be({...f,color:$t(t.clientX,t.clientY)});return}Vt.current={x:t.clientX,y:t.clientY};const c=T.current;if(c){Xt(c,t);return}if((t.buttons&1)===0){Qo(e,t.clientX,t.clientY,g,_,M);return}const l=v.current;l&&Ee(l,t)},[r,x,E,Xt,it,$t,Ee,g,e]),q=u.useCallback(t=>{if(oe(t),ot.current){ot.current=null,It(!1);return}const i=T.current;if(i?.pointerId!==void 0&&t.pointerId!==i.pointerId||Lt())return;const c=Ut.current;if(c){ft(null),bt(null),v.current=null,uo(c.adapter,c.id,c.gap.beforeSiblingId);return}const l=v.current;if(v.current=null,!l)return;const f=l.hitAtDown!==null?ni(r.selectedEntityIds,l.hitAtDown,t.shiftKey):oi(s,l.moved,k.current,t.shiftKey);f!==null&&qe(s,f),W(null)},[s,r,W,Lt,ft]),N=u.useCallback(t=>{if(oe(t),ot.current){ot.current=null,It(!1);return}const i=T.current;i?.pointerId!==void 0&&t.pointerId!==i.pointerId||Lt()||(Ut.current&&(ft(null),bt(null)),v.current=null,W(null))},[Lt,W,ft]),jn=u.useCallback(()=>{Vt.current=null,e||fe()?.clearHover(),_(null),M(null)},[e]),Pn=u.useCallback(t=>{const i=S.current?.parentElement??null;if(zo(i,t.clientX,t.clientY))return;const c=g(t.clientX,t.clientY);if(!c)return;const l=ee(s,c);if(!l)return;const f=I(s,c);if(!f)return;const p=l.get(c);if(p===null){console.warn(`[RootSelectionOverlay] text edit refused for "${c}": dynamic body or has child elements — not inline-editable.`),ct(null),wt({id:c,rect:f});return}wt(null),ct({id:c,rect:f,initialText:p})},[s,g,ct]),zn=u.useCallback(t=>{const i=ge.current;if(!i)return;const c=ee(s,i.id);c&&(Zt.current={id:i.id,rect:i.rect},c.set(i.id,t)),ct(null)},[s,ct]),Dn=u.useCallback(()=>ct(null),[ct]);if(!Jo(s)||Oi())return null;const dt=new Set([...r.selectedEntityIds].filter(t=>s.hierarchy.node(t)!==void 0)),Jt=L!==null&&!dt.has(L)?I(s,L):null,X=Li(s,dt),J=X?.rect??null,In=X?.ownerBoxEdit??null,te=n&&X?Ct(s,X.id):null,Y=te&&ne(te)?te:null,$=n&&X?X.ownerBoxEdit.gizmoOrigin?.(X.id)??{x:X.rect.x+X.rect.width/2,y:X.rect.y+X.rect.height/2}:null,Et=re/m.zoom,rt=X?X.ownerBoxEdit.referencePoint?.(X.id):null,On=X?.spacingBands??[],ht=dt.size===1?[...dt][0]:null,Bt=ht?Le(s,ht):null,Ln=ht&&Bt?Bt.layers(ht).filter(t=>n&&t.category==="origin"?ln:r.showHelpers?r.helperVisibility[t.category]??!0:!1):[],kt=n?{selectedSingleRect:null,measureLines:[],positionBadge:null,showPositionBadge:!1,parentRect:null}:Mi(s,dt,Jt),ke=n?null:Ti(s,dt),Yt=ve.current,Tn=n?[]:Yt&&Yt.adapter===s&&Yt.version===h?Yt.hints:(()=>{const t=po(s);return ve.current={adapter:s,version:h,hints:t},t})();return a.jsxs("div",{style:{position:"absolute",inset:0,zIndex:Uo,pointerEvents:"none"},children:[a.jsx("div",{ref:S,"data-testid":"world-selection-overlay-interaction",style:{position:"absolute",inset:0,pointerEvents:"auto",touchAction:"none",userSelect:"none",cursor:j??ii(dn,cn,it,!!z)},onPointerDownCapture:Rn,onPointerMove:Q,onPointerUp:q,onPointerCancel:N,onLostPointerCapture:N,onPointerLeave:jn,onDoubleClick:Pn,onContextMenu:zt,onDragOver:mn,onDrop:bn}),D?a.jsx(Bo,{state:D,onClose:()=>K(null)}):null,Z?a.jsx(Fi,{state:Z,adapter:s,onClose:()=>st(null)}):null,a.jsxs("div",{"data-testid":"world-selection-overlay-chrome",style:{position:"absolute",inset:0,pointerEvents:"none",transform:yo(m),transformOrigin:"0 0"},children:[!n&&Tn.map(t=>a.jsx("div",{"data-testid":"world-empty-container-hint","data-entity-id":t.id,title:t.displayName,style:{position:"absolute",left:t.rect.x,top:t.rect.y,width:t.rect.width,height:t.rect.height,borderStyle:"dashed",borderColor:"rgba(154, 160, 166, 0.7)",borderWidth:n?1/m.zoom:1,boxSizing:"border-box",pointerEvents:"none"}},t.id)),Jt&&a.jsx("div",{"data-testid":"world-selection-hover",style:{...Ye(Jt,!1),...n?{borderWidth:1/m.zoom}:{}}}),[...dt].map(t=>{const i=I(s,t);if(!i)return null;const c=n?Ct(s,t):null,l=c&&ne(c)?c:null;return a.jsxs("div",{children:[a.jsx("div",{"data-testid":"world-selection-box","data-entity-id":t,"data-turned":l?"true":void 0,style:{...l?ai(l,1/m.zoom):Ye(i,!0),...n&&!l?{borderWidth:1/m.zoom,background:"transparent"}:{}}}),!n&&a.jsx("div",{"data-testid":"world-selection-label",style:li(i),children:qo(s,t)})]},t)}),z&&a.jsx("div",{"data-testid":"world-selection-marquee",style:{position:"absolute",left:z.x,top:z.y,width:z.width,height:z.height,border:`1px solid ${B}`,background:`color-mix(in srgb, ${B} 10%, transparent)`,pointerEvents:"none"}}),!n&&a.jsx(Xi,{measureLines:kt.measureLines,snapGuides:fn,positionBadge:kt.positionBadge,showPositionBadge:kt.showPositionBadge,badgeAnchorRect:kt.selectedSingleRect,parentRect:kt.parentRect,screenScale:H,screenZoom:1}),!n&&a.jsx($i,{dragGhost:pn,reorderPreview:xn}),!n&&ke&&a.jsx(Wo,{adapter:s,entries:ke}),F?a.jsx("div",{"data-testid":"world-2d-temporary-pivot","aria-label":"Temporary pivot",style:{position:"absolute",left:F.x-8,top:F.y-8,width:16,height:16,transform:`scale(${H})`,transformOrigin:"center",pointerEvents:"none",background:"linear-gradient(#ffb020, #ffb020) center / 16px 2px no-repeat, linear-gradient(#ffb020, #ffb020) center / 2px 16px no-repeat"}}):null,J&&In&&a.jsxs(a.Fragment,{children:[!n&&On.map(t=>a.jsxs("div",{children:[a.jsx("div",{"data-testid":`world-spacing-${t.kind}-${Yi(t.side)}`,style:hi(t),onPointerDown:i=>Cn(t,i),onPointerMove:Q,onPointerUp:q,onPointerCancel:N}),!t.isZero&&a.jsx("div",{style:{...yi(t),...n?{transform:`translate(-50%, -50%) scale(${H})`,transformOrigin:"center"}:{}},children:Math.round(t.value)})]},t.side)),rt&&a.jsx("div",{"aria-label":`Edit ${rt.label}`,"data-reference-kind":rt.kind,"data-testid":"world-reference-point-handle",title:`${rt.label} (${rt.bounded?"native corner/edge/center snap":"8px/alignment snap"}, Alt for free movement)`,style:{...ui(rt),...n?{transform:`scale(${H})`,transformOrigin:"center"}:{}},onPointerDown:t=>Sn(rt,t),onPointerMove:Q,onPointerUp:q,onPointerCancel:N,onLostPointerCapture:N,role:"button",tabIndex:0,children:rt.kind==="anchor"?"A":"P"}),ht&&Bt&&Ln.flatMap(t=>t.handles.map(i=>a.jsx("div",{"aria-label":i.label,"data-testid":"world-spatial-handle","data-handle-id":i.id,"data-writable":i.writable,role:"button",tabIndex:0,title:i.writable?i.label:`${i.label} — ${i.reason}`,style:{...di(i),transform:`translate(-50%, -50%) scale(${H})`},onPointerDown:c=>En(ht,Bt,i,c),onPointerMove:kn,onPointerUp:qt,onPointerCancel:qt,onLostPointerCapture:qt},`${t.id}:${i.id}`))),n&&r.transformMode==="translate"&&_t&&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/m.zoom,width:Et,height:10/m.zoom,borderTop:`${2/m.zoom}px solid #ef5350`,boxSizing:"border-box",cursor:"ew-resize",pointerEvents:"auto"},onPointerDown:t=>Qt("x",t),onPointerMove:Q,onPointerUp:q,onPointerCancel:N}),a.jsx("div",{"data-testid":"world-2d-move-axis-y",title:"Move on Y axis",style:{position:"absolute",left:$.x-5/m.zoom,top:$.y,width:10/m.zoom,height:Et,borderLeft:`${2/m.zoom}px solid #66bb6a`,boxSizing:"border-box",cursor:"ns-resize",pointerEvents:"auto"},onPointerDown:t=>Qt("y",t),onPointerMove:Q,onPointerUp:q,onPointerCancel:N}),a.jsx("div",{"data-testid":"world-2d-move-center",title:"Move freely",style:{position:"absolute",left:$.x-5/m.zoom,top:$.y-5/m.zoom,width:10/m.zoom,height:10/m.zoom,border:"1px solid rgba(255,255,255,.9)",background:"#4aa3ff",boxSizing:"border-box",cursor:"move",pointerEvents:"auto"},onPointerDown:t=>Qt("both",t),onPointerMove:Q,onPointerUp:q,onPointerCancel:N})]}),ie(n,r.transformMode,"scale")&&_t&&(mt?a.jsxs(a.Fragment,{children:[a.jsx("div",{"data-testid":"world-2d-scale-axis-x",style:{position:"absolute",left:$.x,top:$.y,width:Et,borderTop:`${2/m.zoom}px solid #ef5350`,pointerEvents:"none"}}),a.jsx("div",{"data-testid":"world-2d-scale-axis-y",style:{position:"absolute",left:$.x,top:$.y,height:Et,borderLeft:`${2/m.zoom}px solid #66bb6a`,pointerEvents:"none"}}),[["x","ew-resize"],["y","ns-resize"],["both","nwse-resize"]].map(([t,i])=>{const c=Ri(t,$,Et),l=t==="x"?"e":t==="y"?"s":"se";return a.jsx("div",{"data-testid":`world-resize-handle-${l}`,style:{...He(c,i),transform:`scale(${H})`,transformOrigin:"center",background:t==="x"?"#ef5350":t==="y"?"#66bb6a":"#fff"},onPointerDown:f=>Ft(t,f),onPointerMove:Q,onPointerUp:q,onPointerCancel:N},t)})]}):a.jsxs(a.Fragment,{children:[fo.map(({pos:t,cursor:i})=>a.jsx("div",{"data-testid":`world-resize-handle-${t}`,style:{...He(Y?xo(Y,t):ho(J,t),i),...n?{transform:Y?`rotate(${le(Y)}rad) scale(${H})`:`scale(${H})`,transformOrigin:"center"}:{}},onPointerDown:c=>wn(t,c),onPointerMove:Q,onPointerUp:q,onPointerCancel:N},t)),a.jsx("div",{"data-testid":"world-resize-dimension-label",style:{...pi(J),...n?{top:J.y+J.height+4*H,transform:`scale(${H})`,transformOrigin:"top left"}:{}},children:Y?`${Math.round(Math.hypot(Y.tr.x-Y.tl.x,Y.tr.y-Y.tl.y))}×${Math.round(Math.hypot(Y.bl.x-Y.tl.x,Y.bl.y-Y.tl.y))}`:`${Math.round(J.width)}×${Math.round(J.height)}`})]})),ie(n,r.transformMode,"rotate")&&_t&&a.jsxs(a.Fragment,{children:[mt&&a.jsx("div",{"data-testid":"world-2d-rotate-ring",style:{position:"absolute",left:$.x-40/m.zoom,top:$.y-40/m.zoom,width:80/m.zoom,height:80/m.zoom,border:`${1/m.zoom}px solid #4aa3ff`,borderRadius:"50%",boxSizing:"border-box",pointerEvents:"none"}}),a.jsx("div",{"data-testid":"world-rotate-handle","aria-label":"Rotate selection",title:"Rotate selection (15° snap, Alt for free rotation)",style:{...ci(J),...n&&!mt?{...si(Y,J,an*H),transform:`scale(${H})`,transformOrigin:"center"}:{},...mt?{left:$.x-U/2,top:$.y-40/m.zoom-U/2,transform:`scale(${H})`,transformOrigin:"center",background:"#4aa3ff"}:{}},onPointerDown:Mt,onPointerMove:Q,onPointerUp:q,onPointerCancel:N,role:"button",tabIndex:0})]})]}),!n&&a.jsx(Bi,{textEdit:yn,onCommitTextEdit:zn,onCancelTextEdit:Dn,textEditRefused:Ot,eyedropperActive:it,eyedropperPreview:vn})]})]})}function Xi(e){const{measureLines:o,snapGuides:n,positionBadge:d,showPositionBadge:r,badgeAnchorRect:h,parentRect:s,screenScale:g,screenZoom:S}=e;return a.jsxs(a.Fragment,{children:[s&&a.jsx("div",{"data-testid":"world-parent-outline",style:Ei(s)}),o.map(v=>a.jsxs("div",{"data-testid":"world-measure-line",children:[a.jsx("div",{style:mi(v)}),a.jsx("div",{style:Ae(v.x1,v.y1,v.orientation==="horizontal")}),a.jsx("div",{style:Ae(v.x2,v.y2,v.orientation==="horizontal")}),a.jsx("div",{"data-testid":"world-measure-line-label",style:{...bi(v),...g!==1?{transform:`translate(-50%, -50%) scale(${g})`,transformOrigin:"center"}:{}},children:v.distance})]},v.orientation)),n.map(v=>a.jsx("div",{"data-testid":"world-snap-guide",style:wi(v)},v.orientation)),r&&h&&d&&a.jsxs("div",{"data-testid":"world-position-badge",style:{...Si(h),...g!==1?{top:h.y-36/S,transform:`scale(${g})`,transformOrigin:"top left"}:{}},children:[d.position&&a.jsx("span",{"data-testid":"world-position-badge-mode",style:Ne,children:d.position}),d.parentLayout&&a.jsx("span",{"data-testid":"world-position-badge-layout",style:Ne,children:d.parentLayout})]})]})}function $i(e){const{dragGhost:o,reorderPreview:n}=e;return a.jsxs(a.Fragment,{children:[o&&a.jsx("div",{"data-testid":"world-drag-ghost",style:gi(o)}),n&&a.jsx("div",{"data-testid":"world-reorder-preview",style:vi(n.gap.marker)})]})}function Bi(e){const{textEdit:o,onCommitTextEdit:n,onCancelTextEdit:d,textEditRefused:r,eyedropperActive:h,eyedropperPreview:s}=e;return a.jsxs(a.Fragment,{children:[o&&a.jsx("div",{style:{pointerEvents:"auto"},children:a.jsx(Vo,{rect:o.rect,initialText:o.initialText,onCommit:n,onCancel:d})}),r&&a.jsx("div",{"data-testid":"world-text-edit-refused",title:"dynamic body — not inline-editable",style:{position:"absolute",left:r.rect.x,top:r.rect.y,width:Math.max(r.rect.width,40),height:Math.max(r.rect.height,20),border:`2px dashed ${et.semantic.danger}`,boxSizing:"border-box",background:et.semantic.dangerMuted,pointerEvents:"none"}}),h&&s&&a.jsx("div",{"data-testid":"world-eyedropper-swatch","data-color-state":s.color?"resolved":"unknown",style:{position:"absolute",left:s.x+12,top:s.y+12,width:24,height:24,borderRadius:4,border:"2px solid #fff",boxShadow:"0 1px 4px rgba(0,0,0,0.5)",background:s.color??"repeating-linear-gradient(45deg, #999, #999 4px, #ccc 4px, #ccc 8px)",pointerEvents:"none"}})]})}function Yi(e){return e.endsWith("Top")?"top":e.endsWith("Right")?"right":e.endsWith("Bottom")?"bottom":"left"}export{tr as R,Fi as V,Oo as a,Mo as b,Lo as c,Zi as d,Ji as e,Qi as m,qi as r,To as s};
@@ -1 +0,0 @@
1
- import{a as o}from"./jsx-runtime-DPjLkJKQ.js";import{r as $}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{eR as v,$ as L,ho as N,cJ as wt,aL as pt,hn as B,eY as zt,dg as ut,a0 as X,iY as ft,kQ as it,eE as Bt,hY as ht,dx as Dt,aQ as Ft}from"./index-CaG87ZF-.js";const Ht={full:{anchor:{left:0,top:0,right:1,bottom:1},offset:{left:0,top:0,right:0,bottom:0}},top:{anchor:{left:0,top:0,right:1,bottom:0},offset:{left:0,top:0,right:0,bottom:0}},bottom:{anchor:{left:0,top:1,right:1,bottom:1},offset:{left:0,top:0,right:0,bottom:0}},left:{anchor:{left:0,top:0,right:0,bottom:1},offset:{left:0,top:0,right:0,bottom:0}},right:{anchor:{left:1,top:0,right:1,bottom:1},offset:{left:0,top:0,right:0,bottom:0}},center:{anchor:{left:.5,top:.5,right:.5,bottom:.5},offset:{left:-60,top:-20,right:60,bottom:20}},"top-left":{anchor:{left:0,top:0,right:0,bottom:0},offset:{left:0,top:0,right:120,bottom:40}},"top-right":{anchor:{left:1,top:0,right:1,bottom:0},offset:{left:-120,top:0,right:0,bottom:40}}},mt=["flex-start","center","flex-end"],gt=["flex-start","center","flex-end"];function At({row:t,col:e,justify:n,align:r,isActive:a,disabled:s,onSelect:c}){return o.jsx("div",{"data-testid":`alignment-grid-${t}-${e}`,onClick:()=>{s||c(n,r)},style:{width:16,height:16,display:"flex",alignItems:"center",justifyContent:"center",cursor:s?"not-allowed":"pointer",borderRadius:v.radiusSmall,background:a?v.accent:"transparent"},children:o.jsx("div",{style:{width:a?6:4,height:a?6:4,borderRadius:"50%",background:a?v.onAccent:v.textMuted}})})}function ce({value:t,onChange:e,disabled:n}){const r=mt.indexOf(t.justify),a=gt.indexOf(t.align);return o.jsx("div",{"data-testid":"alignment-grid",style:{display:"inline-grid",gridTemplateColumns:"repeat(3, 16px)",gridTemplateRows:"repeat(3, 16px)",gap:1,background:v.inputBg,borderRadius:v.radiusMedium,padding:4,opacity:n?.35:1},children:gt.map((s,c)=>mt.map((l,u)=>o.jsx(At,{row:c,col:u,justify:l,align:s,isActive:c===a&&u===r,disabled:n,onSelect:(p,h)=>e({justify:p,align:h})},`${c}-${u}`)))})}function de({onSelect:t,disabled:e}){return o.jsx("div",{"data-testid":"anchor-presets",style:{display:"flex",flexWrap:"wrap",gap:4},children:Object.entries(Ht).map(([n,r])=>o.jsx(L,{type:"button",variant:"secondary",size:"compact","data-testid":`anchor-preset-${n}`,disabled:e,onClick:()=>t(n,r),children:n},n))})}function nt(t){let e=t.replace("#","");e.length===3&&(e=`${e[0]??"0"}${e[0]??"0"}${e[1]??"0"}${e[1]??"0"}${e[2]??"0"}${e[2]??"0"}`);const n=Number.parseInt(e,16);return[n>>16&255,n>>8&255,n&255]}function St(t,e,n){return`#${[t,e,n].map(r=>Math.round(Math.max(0,Math.min(255,r))).toString(16).padStart(2,"0")).join("")}`}function J(t,e,n){const r=t/255,a=e/255,s=n/255,c=Math.max(r,a,s),l=Math.min(r,a,s),u=c-l;let p=0;u!==0&&(c===r?p=((a-s)/u%6+6)%6:c===a?p=(s-r)/u+2:p=(r-a)/u+4,p/=6);const h=c===0?0:u/c;return[p,h,c]}function K(t,e,n){const r=Math.floor(t*6),a=t*6-r,s=n*(1-e),c=n*(1-a*e),l=n*(1-(1-a)*e);let u=0,p=0,h=0;switch(r%6){case 0:u=n,p=l,h=s;break;case 1:u=c,p=n,h=s;break;case 2:u=s,p=n,h=l;break;case 3:u=s,p=c,h=n;break;case 4:u=l,p=s,h=n;break;case 5:u=n,p=s,h=c;break}return[Math.round(u*255),Math.round(p*255),Math.round(h*255)]}function kt(t,e,n){let r,a,s;if(e===0)r=a=s=n;else{const c=(p,h,d)=>{let b=d;return b<0&&(b+=1),b>1&&(b-=1),b<.16666666666666666?p+(h-p)*6*b:b<.5?h:b<.6666666666666666?p+(h-p)*(.6666666666666666-b)*6:p},l=n<.5?n*(1+e):n+e-n*e,u=2*n-l;r=c(u,l,t+1/3),a=c(u,l,t),s=c(u,l,t-1/3)}return[Math.round(r*255),Math.round(a*255),Math.round(s*255)]}function Pt(t,e,n){const r=t/255,a=e/255,s=n/255,c=Math.max(r,a,s),l=Math.min(r,a,s);let u=0,p=0;const h=(c+l)/2;if(c!==l){const d=c-l;p=h>.5?d/(2-c-l):d/(c+l),c===r?u=((a-s)/d+(a<s?6:0))/6:c===a?u=((s-r)/d+2)/6:u=((r-a)/d+4)/6}return[u,p,h]}function rt(t){if(t.startsWith("#")&&(t.length===4||t.length===7))return t;if(t.startsWith("#")&&t.length===9)return t.slice(0,7);const e=t.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)/);if(e){const[,r,a,s]=e;return`#${[r??"0",a??"0",s??"0"].map(c=>Number.parseInt(c,10).toString(16).padStart(2,"0")).join("")}`}const n=t.match(/hsla?\((\d+),\s*(\d+)%?,\s*(\d+)%?/);if(n){const[r,a,s]=kt(Number.parseInt(n[1]??"0",10)/360,Number.parseInt(n[2]??"0",10)/100,Number.parseInt(n[3]??"0",10)/100);return St(r,a,s)}return"#000000"}function lt(t){const e=t.match(/rgba\([^,]+,[^,]+,[^,]+,\s*([\d.]+)\)/);if(e?.[1])return Number.parseFloat(e[1]);const n=t.match(/hsla\([^,]+,[^,]+,[^,]+,\s*([\d.]+)\)/);return n?.[1]?Number.parseFloat(n[1]):t.startsWith("#")&&t.length===9?Number.parseInt(t.slice(7,9),16)/255:1}function xt(t,e,n,r,a){if(a==="hex"){const d=St(t,e,n);return r<1?`rgba(${t}, ${e}, ${n}, ${r.toFixed(2)})`:d}if(a==="rgb")return r<1?`rgba(${t}, ${e}, ${n}, ${r.toFixed(2)})`:`rgb(${t}, ${e}, ${n})`;const[s,c,l]=Pt(t,e,n),u=Math.round(s*360),p=Math.round(c*100),h=Math.round(l*100);return r<1?`hsla(${u}, ${p}%, ${h}%, ${r.toFixed(2)})`:`hsl(${u}, ${p}%, ${h}%)`}function Mt(t){const e=t.match(/\d+/g);return!e||e.length<3?"#000000":`#${[e[0]??"0",e[1]??"0",e[2]??"0"].map(n=>Number.parseInt(n,10).toString(16).padStart(2,"0")).join("")}`}const F=200,Z=150,U=14;function Gt({value:t,onChange:e,onChangeEnd:n,onClose:r,recentColors:a,onAddRecentColor:s,eyedropperFallback:c,onEyedropperPick:l,disabled:u}){const p=rt(t),h=nt(p),[d,b]=$.useState(()=>J(...h)),[m,i]=$.useState(()=>lt(t)),[f,g]=$.useState("hex"),[k,C]=$.useState(p),z=$.useRef(null),S=$.useRef(null),w=$.useRef(null),E=$.useRef(null),T=$.useRef(null),H=$.useCallback((x=d,y=m,j=f)=>{const[M,R,I]=K(x[0],x[1],x[2]);return xt(M,R,I,y,j)},[d,m,f]);$.useEffect(()=>{C(H())},[H]),$.useEffect(()=>{const x=S.current,y=x?.getContext("2d");if(!x||!y)return;const[j,M,R]=K(d[0],1,1),I=y.createLinearGradient(0,0,F,0);I.addColorStop(0,"#ffffff"),I.addColorStop(1,`rgb(${j},${M},${R})`),y.fillStyle=I,y.fillRect(0,0,F,Z);const P=y.createLinearGradient(0,0,0,Z);P.addColorStop(0,"rgba(0,0,0,0)"),P.addColorStop(1,"rgba(0,0,0,1)"),y.fillStyle=P,y.fillRect(0,0,F,Z)},[d[0]]),$.useEffect(()=>{const x=w.current,y=x?.getContext("2d");if(!x||!y)return;const j=y.createLinearGradient(0,0,F,0);for(let M=0;M<=6;M++){const[R,I,P]=K(M/6,1,1);j.addColorStop(M/6,`rgb(${R},${I},${P})`)}y.fillStyle=j,y.fillRect(0,0,F,U)},[]),$.useEffect(()=>{const x=E.current,y=x?.getContext("2d");if(!x||!y)return;const j=4;for(let Q=0;Q<U;Q+=j)for(let q=0;q<F;q+=j)y.fillStyle=(q/j+Q/j)%2===0?"#ffffff":"#cccccc",y.fillRect(q,Q,j,j);const[M,R,I]=K(d[0],d[1],d[2]),P=y.createLinearGradient(0,0,F,0);P.addColorStop(0,`rgba(${M},${R},${I},0)`),P.addColorStop(1,`rgba(${M},${R},${I},1)`),y.fillStyle=P,y.fillRect(0,0,F,U)},[d]),$.useEffect(()=>{if(!r)return;function x(j){j.key==="Escape"&&r?.()}function y(j){z.current&&!z.current.contains(j.target)&&r?.()}return document.addEventListener("keydown",x),document.addEventListener("mousedown",y,!0),()=>{document.removeEventListener("keydown",x),document.removeEventListener("mousedown",y,!0)}},[r]);const _=$.useCallback((x,y,j,M)=>{const R=y?.getBoundingClientRect();if(R)if(x==="sat"){const I=[d[0],ct(j,R.left,R.width),_t(M,R.top,R.height)];b(I),N({onChange:e},H(I))}else if(x==="hue"){const I=[ct(j,R.left,R.width),d[1],d[2]];b(I),N({onChange:e},H(I))}else{const I=Math.round(ct(j,R.left,R.width)*100)/100;i(I),N({onChange:e},H(d,I))}},[d,H,e]);$.useEffect(()=>{function x(j){const M=T.current;if(!M)return;j.preventDefault();const R=M==="sat"?S.current:M==="hue"?w.current:E.current;_(M,R,j.clientX,j.clientY)}function y(){if(T.current){T.current=null;const j=H();B({onChange:e,onChangeEnd:n},j),s?.(j)}}return window.addEventListener("mousemove",x),window.addEventListener("mouseup",y),()=>{window.removeEventListener("mousemove",x),window.removeEventListener("mouseup",y)}},[_,H,e,n,s]);const D=(x,y)=>{u||(y.preventDefault(),T.current=x,_(x,y.currentTarget,y.clientX,y.clientY))},G=()=>{const x=k.trim(),y=Ot(x),j=y?{r:y[0],g:y[1],b:y[2],a:1}:Kt(x)??Ut(x);if(!j)return;b(J(j.r,j.g,j.b)),i(j.a);const M=y?x:xt(j.r,j.g,j.b,j.a,f);N({onChange:e},M),B({onChange:e,onChangeEnd:n},M),s?.(M)},st=()=>{g(x=>x==="hex"?"rgb":x==="rgb"?"hsl":"hex")},O=typeof globalThis.EyeDropper=="function",at=x=>{const y=rt(x);b(J(...nt(y))),i(lt(x)),N({onChange:e},x),B({onChange:e,onChangeEnd:n},x)},Ct=async()=>{if(O){try{const y=globalThis.EyeDropper,j=await new y().open();at(j.sRGBHex)}catch{}return}if(l){l(y=>{y&&at(y)});return}const x=c?.();x&&at(x)},[It,Lt,Tt]=K(d[0],d[1],d[2]),Nt=`rgba(${It},${Lt},${Tt},${m})`;return o.jsxs(wt,{ref:z,"data-testid":"inspector-color-picker",onMouseDown:x=>x.stopPropagation(),style:{padding:10,width:F+16,boxSizing:"border-box"},children:[o.jsx("canvas",{ref:S,"data-testid":"color-picker-sv",width:F,height:Z,onMouseDown:x=>D("sat",x),style:{cursor:"crosshair",borderRadius:v.radiusSmall,display:"block"}}),o.jsx("canvas",{ref:w,"data-testid":"color-picker-hue",width:F,height:U,onMouseDown:x=>D("hue",x),style:{cursor:"pointer",borderRadius:v.radiusSmall,display:"block",marginTop:6}}),o.jsx("canvas",{ref:E,"data-testid":"color-picker-alpha",width:F,height:U,onMouseDown:x=>D("alpha",x),style:{cursor:"pointer",borderRadius:v.radiusSmall,display:"block",marginTop:6}}),o.jsxs("div",{style:{display:"flex",gap:6,alignItems:"center",marginTop:8},children:[o.jsx("div",{style:{width:22,height:22,borderRadius:v.radiusSmall,flexShrink:0,border:`1px solid ${v.border}`,background:Nt}}),o.jsx(pt,{type:"text","data-testid":"color-picker-text",value:k,onChange:x=>C(x.target.value),onKeyDown:x=>{x.key==="Enter"&&G()},onBlur:G,"data-density":"compact","data-monospace":"true",style:{flex:1}}),o.jsx(L,{type:"button",variant:"secondary",size:"compact","data-testid":"color-format-toggle",onClick:st,title:"Cycle color format",style:{flexShrink:0},children:f.toUpperCase()}),(O||c||l)&&o.jsx(L,{type:"button",variant:"secondary",size:"compact","data-testid":"color-picker-eyedropper",onClick:Ct,title:"Eyedropper",style:{flexShrink:0},children:"⌖"})]}),a&&a.length>0&&o.jsx("div",{style:{display:"flex",flexWrap:"wrap",gap:3,marginTop:8,paddingTop:6,borderTop:`1px solid ${v.border}`},children:a.map((x,y)=>o.jsx("div",{"data-testid":"color-picker-recent",onClick:()=>{const j=rt(x);b(J(...nt(j))),i(lt(x)),N({onChange:e},x),B({onChange:e,onChangeEnd:n},x)},title:x,style:{width:16,height:16,borderRadius:v.radiusSmall,cursor:"pointer",background:x,border:`1px solid ${v.border}`}},`${x}-${y}`))})]})}function V({label:t,value:e,onChange:n,onChangeEnd:r,recentColors:a,onAddRecentColor:s,eyedropperFallback:c,onEyedropperPick:l,disabled:u,testId:p}){const[h,d]=$.useState(!1),b=rt(e);return o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,position:"relative"},children:[o.jsx("div",{"data-testid":p?`${p}-swatch`:"color-swatch",onClick:()=>{u||d(m=>!m)},style:{width:20,height:20,borderRadius:v.radiusSmall,flexShrink:0,background:b,border:`1px solid ${v.border}`,cursor:u?"not-allowed":"pointer"}}),t&&o.jsx("span",{style:{fontSize:10,color:v.textMuted,flexShrink:0},children:t}),h&&!u&&o.jsx("div",{style:{position:"absolute",zIndex:"var(--vgai-z-dropdown)",top:"100%",left:0,marginTop:4},children:o.jsx(Gt,{value:e,onChange:n,onChangeEnd:r,onClose:()=>d(!1),recentColors:a,onAddRecentColor:s,eyedropperFallback:c,onEyedropperPick:l})})]})}function Et(t){return Math.max(0,Math.min(1,t))}function ct(t,e,n){return Et(n?(t-e)/n:0)}function _t(t,e,n){return Et(n?1-(t-e)/n:0)}function Ot(t){return/^#[0-9a-fA-F]{6}$/.test(t)?nt(t):null}function Kt(t){const e=t.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*([\d.]+))?\)/);if(!e)return null;const[,n,r,a,s]=e;return{r:Number.parseInt(n??"0",10),g:Number.parseInt(r??"0",10),b:Number.parseInt(a??"0",10),a:s?Number.parseFloat(s):1}}function Ut(t){const e=t.match(/hsla?\((\d+),\s*(\d+)%?,\s*(\d+)%?(?:,\s*([\d.]+))?\)/);if(!e)return null;const[,n,r,a,s]=e,[c,l,u]=kt(Number.parseInt(n??"0",10)/360,Number.parseInt(r??"0",10)/100,Number.parseInt(a??"0",10)/100);return{r:c,g:l,b:u,a:s?Number.parseFloat(s):1}}function A({label:t,value:e,unit:n="",step:r=1,min:a,max:s,precision:c,disabled:l,onChange:u,onChangeEnd:p,testId:h,style:d}){const b=$.useRef(null),m=c??(r<1?2:r>=100?-2:0),i=$.useMemo(()=>w=>{if(m<0){const T=10**-m;return Math.round(w/T)*T}const E=10**m;return Math.round(w*E)/E},[m]),f=w=>{let E=w;return a!==void 0&&(E=Math.max(a,E)),s!==void 0&&(E=Math.min(s,E)),i(E)},g=w=>{if(l)return;w.preventDefault(),b.current={startX:w.clientX,startValue:e,last:e},document.body.style.cursor="ew-resize";const E=D=>{if(!b.current)return;D.preventDefault();const G=D.clientX-b.current.startX,st=D.shiftKey?10:D.altKey?.1:1,O=f(b.current.startValue+G*r*st);b.current.last=O,N({onChange:u},O)},T=()=>{document.body.style.cursor="",window.removeEventListener("mousemove",E),window.removeEventListener("mouseup",H),window.removeEventListener("keydown",_)},H=()=>{if(b.current){const D=b.current.last;b.current=null,B({onChange:u,onChangeEnd:p},D)}T()},_=D=>{if(D.key==="Escape"&&b.current){const G=f(b.current.startValue);b.current=null,N({onChange:u},G),B({onChange:u,onChangeEnd:p},G),T()}};window.addEventListener("mousemove",E),window.addEventListener("mouseup",H),window.addEventListener("keydown",_)},[k,C]=$.useState(null),z=$.useRef(!1),S=w=>{const E=Number.parseFloat(w);if(Number.isNaN(E))return;const T=f(E);T!==e&&B({onChange:u,onChangeEnd:p},T)};return o.jsxs("div",{style:{...zt,...d},children:[o.jsx("span",{className:"vgai-scrub-label","data-testid":h?`${h}-label`:void 0,onMouseDown:g,"data-disabled":l||void 0,style:{fontSize:11,...l?{color:v.dynamic}:{},flexShrink:0,cursor:l?"not-allowed":"ew-resize",userSelect:"none",fontWeight:500},children:t}),o.jsx(pt,{"data-testid":h,type:"text",value:k??`${e}${n}`,readOnly:l,"data-dynamic":l||void 0,onFocus:w=>{C(`${e}${n}`),w.target.select()},onChange:w=>C(w.target.value),onBlur:w=>{z.current||S(w.target.value),z.current=!1,C(null)},onKeyDown:w=>{w.key==="Enter"&&w.target.blur(),w.key==="Escape"&&(z.current=!0,w.target.blur())},style:{flex:1,width:0}})]})}const bt=["none","solid","dashed","dotted","double"];function Wt(t){return{top:t,right:t,bottom:t,left:t}}function Xt(t){const e=r=>`${r.width}|${r.style}|${r.color}`,n=e(t.top);return e(t.right)===n&&e(t.bottom)===n&&e(t.left)===n}function pe({value:t,onChange:e,onChangeEnd:n,disabled:r,recentColors:a,onAddRecentColor:s}){const[c,l]=$.useState(!Xt(t)),u=(d,b)=>{const m={...t.top,...d},i=Wt(m);b?B({onChange:e,onChangeEnd:n},i):N({onChange:e},i)},p=(d,b,m)=>{const i={...t,[d]:{...t[d],...b}};m?B({onChange:e,onChangeEnd:n},i):N({onChange:e},i)};if(!c)return o.jsxs("div",{"data-testid":"border-editor-uniform",style:{display:"flex",gap:6,alignItems:"center"},children:[o.jsx(V,{testId:"border-color",value:t.top.color,disabled:r,onChange:d=>u({color:d},!1),onChangeEnd:d=>u({color:d},!0),recentColors:a,onAddRecentColor:s}),o.jsx(A,{testId:"border-width",label:"W",value:t.top.width,min:0,disabled:r,onChange:d=>u({width:d},!1),onChangeEnd:d=>u({width:d},!0),style:{width:64}}),o.jsx(ut,{className:"vgai-select","data-testid":"border-style",value:t.top.style,disabled:r,"data-dynamic":r||void 0,onChange:d=>u({style:d.target.value},!0),style:{flex:1},children:bt.map(d=>o.jsx("option",{value:d,children:d},d))}),o.jsx(L,{type:"button","data-testid":"border-expand",title:"Per-side borders","aria-label":"Edit borders per side",onClick:()=>l(!0),variant:"ghost",size:"compact",children:o.jsx(X,{icon:ft})})]});const h=[{key:"top",label:"T"},{key:"right",label:"R"},{key:"bottom",label:"B"},{key:"left",label:"L"}];return o.jsxs("div",{"data-testid":"border-editor-expanded",style:{display:"flex",flexDirection:"column",gap:4},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:4},children:[o.jsx("span",{style:{fontSize:10,color:v.textMuted},children:"Per-side"}),o.jsx("div",{style:{flex:1}}),o.jsx(L,{type:"button",variant:"primary",size:"compact","data-testid":"border-collapse",title:"Uniform border","aria-label":"Use one border for all sides",onClick:()=>l(!1),children:o.jsx(X,{icon:ft})})]}),h.map(({key:d,label:b})=>o.jsxs("div",{style:{display:"flex",gap:4,alignItems:"center"},children:[o.jsx("span",{style:{fontSize:10,color:v.textMuted,width:10,textAlign:"center"},children:b}),o.jsx(V,{testId:`border-${d}-color`,value:t[d].color,disabled:r,onChange:m=>p(d,{color:m},!1),onChangeEnd:m=>p(d,{color:m},!0),recentColors:a,onAddRecentColor:s}),o.jsx(A,{testId:`border-${d}-width`,label:"",value:t[d].width,min:0,disabled:r,onChange:m=>p(d,{width:m},!1),onChangeEnd:m=>p(d,{width:m},!0),style:{width:48}}),o.jsx(ut,{className:"vgai-select","data-testid":`border-${d}-style`,value:t[d].style,disabled:r,"data-density":"compact","data-dynamic":r||void 0,onChange:m=>p(d,{style:m.target.value},!0),style:{flex:1},children:bt.map(m=>o.jsx("option",{value:m,children:m},m))})]},d))]})}function Yt(t){return{topLeft:t,topRight:t,bottomLeft:t,bottomRight:t}}function Vt(t){return t.topLeft===t.topRight&&t.topRight===t.bottomLeft&&t.bottomLeft===t.bottomRight}function ue({value:t,onChange:e,onChangeEnd:n,disabled:r}){const[a,s]=$.useState(!Vt(t)),c=(p,h)=>{const d=Yt(p);h?B({onChange:e,onChangeEnd:n},d):N({onChange:e},d)},l=(p,h,d)=>{const b={...t,[p]:h};d?B({onChange:e,onChangeEnd:n},b):N({onChange:e},b)};if(!a)return o.jsxs("div",{"data-testid":"border-radius-editor-uniform",style:{display:"flex",gap:4,alignItems:"center"},children:[o.jsx(A,{testId:"border-radius",label:o.jsx(X,{icon:it,label:"Radius"}),value:t.topLeft,min:0,disabled:r,onChange:p=>c(p,!1),onChangeEnd:p=>c(p,!0),style:{flex:1}}),o.jsx(L,{type:"button","data-testid":"border-radius-expand",title:"Independent corners","aria-label":"Edit radius per corner",onClick:()=>s(!0),variant:"ghost",size:"compact",children:o.jsx(X,{icon:it})})]});const u=[{key:"topLeft",label:"TL"},{key:"topRight",label:"TR"},{key:"bottomLeft",label:"BL"},{key:"bottomRight",label:"BR"}];return o.jsxs("div",{"data-testid":"border-radius-editor-expanded",children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:4,marginBottom:4},children:[o.jsx("span",{style:{fontSize:10,color:v.textMuted},children:"Corners"}),o.jsx("div",{style:{flex:1}}),o.jsx(L,{type:"button",variant:"primary",size:"compact","data-testid":"border-radius-collapse",title:"Uniform radius","aria-label":"Use one radius for all corners",onClick:()=>s(!1),children:o.jsx(X,{icon:it})})]}),o.jsx("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:3},children:u.map(({key:p,label:h})=>o.jsx(A,{testId:`border-radius-${p}`,label:h,value:t[p],min:0,disabled:r,onChange:d=>l(p,d,!1),onChangeEnd:d=>l(p,d,!0)},p))})]})}const ot=[{name:"blur",unit:"px",min:0,max:50,step:.5,default:0},{name:"brightness",unit:"%",min:0,max:300,step:1,default:100},{name:"contrast",unit:"%",min:0,max:300,step:1,default:100},{name:"saturate",unit:"%",min:0,max:300,step:1,default:100},{name:"grayscale",unit:"%",min:0,max:100,step:1,default:0},{name:"hue-rotate",unit:"deg",min:0,max:360,step:1,default:0}];function fe(t){return!t||t==="none"?ot.map(e=>({name:e.name,value:e.default})):ot.map(e=>{const n=new RegExp(`${e.name}\\(([\\d.]+)${e.unit}?\\)`),r=t.match(n);return{name:e.name,value:r?.[1]?Number.parseFloat(r[1]):e.default}})}function he(t){const e=[];for(let n=0;n<t.length;n++){const r=t[n],a=ot[n];r&&a&&r.value!==a.default&&e.push(`${r.name}(${r.value}${a.unit})`)}return e.length?e.join(" "):"none"}function me({value:t,onChange:e,onChangeEnd:n,disabled:r,label:a="Filter",testId:s="filter-editor"}){const c=(l,u,p)=>{const h=t.map((d,b)=>b===l?{...d,value:u}:d);p?B({onChange:e,onChangeEnd:n},h):N({onChange:e},h)};return o.jsxs("div",{"data-testid":s,children:[o.jsx("div",{style:{fontSize:9,color:v.textMuted,marginBottom:4},children:a}),t.map((l,u)=>{const p=ot[u];return p?o.jsx("div",{"data-testid":`filter-row-${l.name}`,style:{marginBottom:3},children:o.jsx(A,{testId:`filter-${l.name}`,label:l.name.replace("hue-rotate","hue"),value:l.value,unit:p.unit,min:p.min,max:p.max,step:p.step,disabled:r,onChange:h=>c(u,h,!1),onChangeEnd:h=>c(u,h,!0)})},l.name):null})]})}const W=28,yt=10;function ge({value:t,onChange:e,disabled:n,fonts:r,testId:a="font-picker"}){const[s,c]=$.useState(!1),[l,u]=$.useState(""),[p,h]=$.useState(0),d=$.useRef(null),b=$.useRef(null);$.useEffect(()=>{s&&b.current?.focus()},[s]),$.useEffect(()=>{if(!s)return;const S=w=>{d.current&&!d.current.contains(w.target)&&c(!1)};return document.addEventListener("mousedown",S),()=>document.removeEventListener("mousedown",S)},[s]),$.useEffect(()=>{if(!s)return;const S=w=>{w.key==="Escape"&&c(!1)};return document.addEventListener("keydown",S),()=>document.removeEventListener("keydown",S)},[s]);const m=$.useMemo(()=>{if(!l)return r;const S=l.toLowerCase();return r.filter(w=>w.toLowerCase().includes(S))},[r,l]),i=m.length*W,f=Math.floor(p/W),g=Math.min(m.length,f+yt+2),k=m.slice(f,g),C=S=>{e(S),c(!1),u("")},z=t.replace(/^["']|["']$/g,"");return o.jsxs("div",{ref:d,"data-testid":a,style:{position:"relative",flex:1},children:[o.jsxs(L,{type:"button",variant:"secondary",className:"vgai-field-trigger","aria-haspopup":"listbox","aria-expanded":s,disabled:n,"data-testid":"font-picker-input",onClick:()=>{n||c(S=>!S)},children:[o.jsx("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:z||"—"}),o.jsx(Bt,{direction:"down",tone:"muted",style:{marginLeft:4}})]}),s&&o.jsxs(wt,{"data-testid":"font-picker-dropdown",style:{position:"absolute",top:"100%",left:0,right:0,zIndex:"var(--vgai-z-dropdown)",marginTop:2},children:[o.jsx("div",{style:{padding:4},children:o.jsx(pt,{ref:b,type:"text","data-testid":"font-picker-search",value:l,onChange:S=>{u(S.target.value),h(0)},placeholder:"Search fonts…","data-density":"compact",style:{width:"100%",boxSizing:"border-box"}})}),o.jsx("div",{"data-testid":"font-picker-list",onScroll:S=>h(S.target.scrollTop),style:{maxHeight:yt*W,overflowY:"auto"},children:o.jsx("div",{style:{height:i,position:"relative"},children:k.map((S,w)=>{const E=f+w,T=S.toLowerCase()===z.toLowerCase();return o.jsx("div",{"data-testid":`font-picker-option-${S}`,onClick:()=>C(S),style:{position:"absolute",top:E*W,left:0,right:0,height:W,display:"flex",alignItems:"center",padding:"0 8px",cursor:"pointer",fontSize:12,background:T?v.accent:"transparent",color:T?v.onAccent:v.text},children:o.jsx("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:S})},S)})})}),m.length===0&&o.jsx("div",{style:{padding:"8px 12px",color:v.textMuted,fontSize:10,textAlign:"center"},children:"No matching fonts"})]})]})}function Qt(t){const e=t.stops.map(n=>`${n.color} ${Math.round(n.position*100)}%`).join(", ");return t.type==="radial"?`radial-gradient(circle, ${e})`:`linear-gradient(${t.angle}deg, ${e})`}function qt(t){const e=t.match(/^linear-gradient\((.+)\)$/);if(e?.[1]!==void 0)return{type:"linear",inner:e[1]};const n=t.match(/^radial-gradient\((.+)\)$/);return n?.[1]!==void 0?{type:"radial",inner:n[1]}:null}function Jt(t){const e=t.match(/^(\d+)deg\s*,\s*/);if(e)return{angle:Number.parseInt(e[1]??"180",10),colorPart:t.slice(e[0].length)};if(t.startsWith("to ")){const n=t.match(/^to\s+\w+\s*,\s*/);if(n)return{angle:180,colorPart:t.slice(n[0].length)}}return{angle:180,colorPart:t}}function Zt(t){const e=t.split(/,\s*(?![^(]*\))/).map(n=>{const r=n.trim(),a=r.match(/\s+(\d+)%$/),s=a?Number.parseInt(a[1]??"0",10)/100:-1;return{color:a?r.slice(0,-a[0].length).trim():r,position:s}});for(let n=0;n<e.length;n++){const r=e[n];r&&r.position<0&&(r.position=e.length>1?n/(e.length-1):0)}return e}function xe(t){if(!t||t==="none")return null;const e=qt(t);if(!e)return null;const{angle:n,colorPart:r}=e.type==="linear"?Jt(e.inner):{angle:180,colorPart:e.inner},a=Zt(r);return a.length<2?null:{type:e.type,angle:n,stops:a}}function dt({stops:t,selected:e,onSelect:n,onMove:r,disabled:a,testIdPrefix:s}){return o.jsx("div",{style:{position:"relative",height:12,marginTop:2},children:t.map((c,l)=>o.jsx("div",{"data-testid":`${s}-${l}`,onClick:()=>n(l),onMouseDown:u=>{if(a)return;u.preventDefault(),n(l);const h=u.target.parentElement?.getBoundingClientRect(),d=i=>h?.width?Math.max(0,Math.min(1,(i-h.left)/h.width)):c.position,b=i=>r(l,d(i.clientX),!1),m=i=>{r(l,d(i.clientX),!0),window.removeEventListener("mousemove",b),window.removeEventListener("mouseup",m)};window.addEventListener("mousemove",b),window.addEventListener("mouseup",m)},style:{position:"absolute",left:`${c.position*100}%`,top:0,width:10,height:10,borderRadius:"50%",background:c.css,border:`2px solid ${l===e?v.accent:"#fff"}`,transform:"translateX(-50%)",cursor:a?"not-allowed":"pointer"}},l))})}function be({value:t,onChange:e,onChangeEnd:n,disabled:r,recentColors:a,onAddRecentColor:s,testId:c="gradient-editor"}){const[l,u]=$.useState(0),p=(f,g)=>{g?B({onChange:e,onChangeEnd:n},f):N({onChange:e},f)},h=(f,g,k)=>{const C=t.stops.map((z,S)=>S===f?{...z,...g}:z);p({...t,stops:C},k)},d=()=>{const f=t.stops[t.stops.length-1]?.position??1,g=t.stops[0]?.position??0,k=(f+g)/2,C=[...t.stops,{color:"#888888",position:k}].sort((z,S)=>z.position-S.position);u(C.length-1),p({...t,stops:C},!0)},b=f=>{if(t.stops.length<=2)return;const g=t.stops.filter((k,C)=>C!==f);u(Math.min(l,g.length-1)),p({...t,stops:g},!0)},m=t.stops[l]?.color??"#000000",i=m.startsWith("#")?m:Mt(m);return o.jsxs("div",{"data-testid":c,children:[o.jsxs("div",{style:{position:"relative",marginBottom:8},children:[o.jsx("div",{"data-testid":"gradient-preview",style:{height:20,borderRadius:v.radiusSmall,border:`1px solid ${v.border}`,background:Qt(t)}}),o.jsx(dt,{stops:t.stops.map(f=>({position:f.position,css:f.color})),selected:l,onSelect:u,onMove:(f,g,k)=>h(f,{position:g},k),disabled:r,testIdPrefix:"gradient-stop"})]}),o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,marginBottom:4},children:[o.jsx(V,{testId:"gradient-selected-color",value:i,disabled:r,onChange:f=>h(l,{color:f},!1),onChangeEnd:f=>h(l,{color:f},!0),recentColors:a,onAddRecentColor:s}),o.jsxs("span",{style:{fontSize:9,color:v.textMuted},children:["Stop ",l+1]}),t.stops.length>2&&o.jsx(L,{type:"button",variant:"ghost",size:"compact","aria-label":"Remove gradient stop","data-testid":"gradient-remove-stop",onClick:()=>b(l),children:"×"}),o.jsx(L,{type:"button",variant:"ghost",size:"compact","data-testid":"gradient-add-stop",onClick:d,children:"+ stop"})]}),o.jsxs("div",{style:{display:"flex",gap:6,alignItems:"center"},children:[o.jsxs("div",{style:{display:"flex",gap:1,flex:1},children:[o.jsx(ht,{testId:"gradient-type-linear",label:"Linear",active:t.type==="linear",disabled:r,onClick:()=>p({...t,type:"linear"},!0)}),o.jsx(ht,{testId:"gradient-type-radial",label:"Radial",active:t.type==="radial",disabled:r,onClick:()=>p({...t,type:"radial"},!0)})]}),t.type==="linear"&&o.jsx(A,{testId:"gradient-angle",label:"°",value:t.angle,unit:"deg",disabled:r,onChange:f=>p({...t,angle:f},!1),onChangeEnd:f=>p({...t,angle:f},!0),style:{width:70}})]})]})}function jt(t){const e=n=>Math.round(Math.max(0,Math.min(1,n))*255).toString(16).padStart(2,"0");return`#${e(t.r)}${e(t.g)}${e(t.b)}`}function vt(t){return{r:Number.parseInt(t.slice(1,3),16)/255,g:Number.parseInt(t.slice(3,5),16)/255,b:Number.parseInt(t.slice(5,7),16)/255}}function tt(t,e,n){if(t.length===0)return;if(e<=t[0].pos)return t[0].value;const r=t[t.length-1];if(e>=r.pos)return r.value;for(let a=0;a+1<t.length;a++){const s=t[a],c=t[a+1];if(e>=s.pos&&e<=c.pos){const l=c.pos>s.pos?(e-s.pos)/(c.pos-s.pos):0;return n(s.value,c.value,l)}}return r.value}const Y=(t,e,n)=>t+(e-t)*n,$t=(t,e,n)=>({r:Y(t.r,e.r,n),g:Y(t.g,e.g,n),b:Y(t.b,e.b,n)});function et(t,e,n){const r={...t[e],pos:n},a=[...t.filter((s,c)=>c!==e),r].sort((s,c)=>s.pos-c.pos);return{keys:a,index:a.indexOf(r)}}function ye({value:t,onChange:e,onChangeEnd:n,disabled:r,testId:a="quarks-gradient"}){const[s,c]=$.useState({track:"color",i:0}),l=(i,f)=>{f?B({onChange:e,onChangeEnd:n},i):N({onChange:e},i)},u=i=>({...t,color:{...t.color,keys:i}}),p=i=>({...t,alpha:{...t.alpha,keys:i}}),d=[...new Set([...t.color.keys.map(i=>i.pos),...t.alpha.keys.map(i=>i.pos)])].sort((i,f)=>i-f).map(i=>{const f=tt(t.color.keys,i,$t)??{r:1,g:1,b:1},g=tt(t.alpha.keys,i,Y)??1;return`rgba(${Math.round(f.r*255)},${Math.round(f.g*255)},${Math.round(f.b*255)},${Math.round(g*1e3)/1e3}) ${Math.round(i*100)}%`}).join(", "),b=t.color.keys[s.track==="color"?s.i:0],m=t.alpha.keys[s.track==="alpha"?s.i:0];return o.jsxs("div",{"data-testid":a,children:[o.jsx(dt,{stops:t.alpha.keys.map(i=>{const f=Math.round(Math.max(0,Math.min(1,i.value))*255);return{position:i.pos,css:`rgb(${f},${f},${f})`}}),selected:s.track==="alpha"?s.i:-1,onSelect:i=>c({track:"alpha",i}),onMove:(i,f,g)=>{const{keys:k,index:C}=et(t.alpha.keys,i,f);c({track:"alpha",i:C}),l(p(k),g)},disabled:r,testIdPrefix:`${a}-alpha-stop`}),o.jsx("div",{"data-testid":`${a}-preview`,style:{height:20,borderRadius:v.radiusSmall,border:`1px solid ${v.border}`,backgroundImage:`linear-gradient(90deg, ${d}), repeating-linear-gradient(45deg, #777 0 5px, #aaa 5px 10px)`}}),o.jsx(dt,{stops:t.color.keys.map(i=>({position:i.pos,css:jt(i.value)})),selected:s.track==="color"?s.i:-1,onSelect:i=>c({track:"color",i}),onMove:(i,f,g)=>{const{keys:k,index:C}=et(t.color.keys,i,f);c({track:"color",i:C}),l(u(k),g)},disabled:r,testIdPrefix:`${a}-color-stop`}),s.track==="color"&&b&&o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,marginTop:4},children:[o.jsx(V,{testId:`${a}-color-swatch`,value:jt(b.value),disabled:r,onChange:i=>l(u(t.color.keys.map((f,g)=>g===s.i?{...f,value:vt(i)}:f)),!1),onChangeEnd:i=>l(u(t.color.keys.map((f,g)=>g===s.i?{...f,value:vt(i)}:f)),!0)}),o.jsxs("span",{style:{fontSize:9,color:v.textMuted},children:["Color ",s.i+1,"/",t.color.keys.length]}),t.color.keys.length>2&&o.jsx(L,{type:"button",variant:"ghost",size:"compact","aria-label":"Remove color stop","data-testid":`${a}-remove-color-stop`,onClick:()=>{const i=t.color.keys.filter((f,g)=>g!==s.i);c({track:"color",i:Math.min(s.i,i.length-1)}),l(u(i),!0)},children:"×"}),o.jsx(L,{type:"button",variant:"ghost",size:"compact","data-testid":`${a}-add-color-stop`,onClick:()=>{const f=tt(t.color.keys,.5,$t)??{r:1,g:1,b:1},{keys:g,index:k}=et([...t.color.keys,{value:f,pos:.5}],t.color.keys.length,.5);c({track:"color",i:k}),l(u(g),!0)},children:"+ stop"})]}),s.track==="alpha"&&m&&o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,marginTop:4},children:[o.jsx(Dt,{label:"a",step:.05,testId:`${a}-alpha-value`,value:Math.round(m.value*1e3)/1e3,onChange:i=>l(p(t.alpha.keys.map((f,g)=>g===s.i?{...f,value:Math.max(0,Math.min(1,i))}:f)),!1),onChangeEnd:i=>l(p(t.alpha.keys.map((f,g)=>g===s.i?{...f,value:Math.max(0,Math.min(1,i))}:f)),!0)}),o.jsxs("span",{style:{fontSize:9,color:v.textMuted},children:["Alpha ",s.i+1,"/",t.alpha.keys.length]}),t.alpha.keys.length>2&&o.jsx(L,{type:"button",variant:"ghost",size:"compact","aria-label":"Remove alpha stop","data-testid":`${a}-remove-alpha-stop`,onClick:()=>{const i=t.alpha.keys.filter((f,g)=>g!==s.i);c({track:"alpha",i:Math.min(s.i,i.length-1)}),l(p(i),!0)},children:"×"}),o.jsx(L,{type:"button",variant:"ghost",size:"compact","data-testid":`${a}-add-alpha-stop`,onClick:()=>{const f=tt(t.alpha.keys,.5,Y)??1,{keys:g,index:k}=et([...t.alpha.keys,{value:f,pos:.5}],t.alpha.keys.length,.5);c({track:"alpha",i:k}),l(p(g),!0)},children:"+ stop"})]})]})}const te={x:0,y:4,blur:8,spread:0,color:"rgba(0,0,0,0.25)",inset:!1,enabled:!0},ee={x:0,y:2,blur:4,spread:0,color:"rgba(0,0,0,0.3)",inset:!1,enabled:!0};function ne(t,e){return(e?[t.inset?"inset":"",`${t.x}px`,`${t.y}px`,`${t.blur}px`,`${t.spread}px`,t.color]:[`${t.x}px`,`${t.y}px`,`${t.blur}px`,t.color]).filter(Boolean).join(" ")}function je(t,e=!0){const n=t.filter(r=>r.enabled);return n.length===0?"none":n.map(r=>ne(r,e)).join(", ")}function re(t){const e=t.match(/(rgba?\([^)]+\))/);if(e?.[1])return{color:e[1],nums:t.replace(e[1],"").trim()};const n=t.match(/(#[0-9a-fA-F]{3,8})/);return n?.[1]?{color:n[1],nums:t.replace(n[1],"").trim()}:{color:"#000000",nums:t}}function oe(t,e){if(!t||t==="none")return null;const n=t.trim(),r=e&&n.startsWith("inset"),a=r?n.slice(5).trim():n,{color:s,nums:c}=re(a),l=c.split(/\s+/).map(u=>Number.parseFloat(u)).filter(u=>!Number.isNaN(u));return e?{inset:r,x:l[0]??0,y:l[1]??0,blur:l[2]??0,spread:l[3]??0,color:s}:l.length<2?null:{inset:!1,x:l[0]??0,y:l[1]??0,blur:l[2]??0,spread:0,color:s}}function ve(t,e=!0){if(!t||t==="none")return[];const n=t.split(/,\s*(?![^(]*\))/),r=[];for(const a of n){const s=oe(a.trim(),e);s&&r.push({...s,enabled:!0})}return r}function Rt({value:t,onChange:e,onChangeEnd:n,disabled:r,withSpreadInset:a=!0,label:s="Shadow",testId:c="shadow-editor",recentColors:l,onAddRecentColor:u}){const p=(m,i)=>{i?B({onChange:e,onChangeEnd:n},m):N({onChange:e},m)},h=(m,i,f=!1)=>{p(t.map((g,k)=>k===m?{...g,...i}:g),f)},d=m=>{p(t.filter((i,f)=>f!==m),!0)},b=()=>{p([...t,{...a?te:ee}],!0)};return o.jsxs("div",{"data-testid":c,children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,marginBottom:t.length>0?4:0},children:[o.jsx("span",{style:{fontSize:9,color:v.textMuted},children:s}),o.jsx("div",{style:{flex:1}}),!r&&o.jsx(L,{type:"button",variant:"ghost",size:"compact","data-testid":`${c}-add`,onClick:b,children:"+"})]}),t.map((m,i)=>{const f=m.color.startsWith("#")?m.color:Mt(m.color);return o.jsxs("div",{"data-testid":`${c}-row-${i}`,style:{marginBottom:6,padding:"4px 0",borderBottom:`1px solid ${v.border}`},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:4,marginBottom:4},children:[o.jsx(L,{type:"button",variant:"ghost",size:"compact","aria-pressed":m.enabled,"data-testid":`${c}-toggle-${i}`,onClick:()=>{r||h(i,{enabled:!m.enabled},!0)},children:m.enabled?"●":"○"}),o.jsx(V,{testId:`${c}-color-${i}`,value:f,disabled:r,onChange:g=>h(i,{color:g}),onChangeEnd:g=>h(i,{color:g},!0),recentColors:l,onAddRecentColor:u}),a&&o.jsxs("label",{style:{display:"flex",alignItems:"center",gap:2,fontSize:8,color:v.textMuted,cursor:"pointer"},children:[o.jsx(Ft,{className:"vgai-checkbox","data-testid":`${c}-inset-${i}`,checked:m.inset,disabled:r,onChange:g=>h(i,{inset:g.target.checked},!0)}),"in"]}),o.jsx("div",{style:{flex:1}}),!r&&o.jsx(L,{type:"button",variant:"ghost",size:"compact","aria-label":`Remove ${s.toLowerCase()} ${i+1}`,"data-testid":`${c}-remove-${i}`,onClick:()=>d(i),children:"×"})]}),m.enabled&&o.jsxs("div",{style:{display:"flex",gap:4},children:[o.jsx(A,{label:"X",value:m.x,disabled:r,onChange:g=>h(i,{x:g}),onChangeEnd:g=>h(i,{x:g},!0),style:{flex:1}}),o.jsx(A,{label:"Y",value:m.y,disabled:r,onChange:g=>h(i,{y:g}),onChangeEnd:g=>h(i,{y:g},!0),style:{flex:1}}),o.jsx(A,{label:"B",value:m.blur,min:0,disabled:r,onChange:g=>h(i,{blur:Math.max(0,g)}),onChangeEnd:g=>h(i,{blur:Math.max(0,g)},!0),style:{flex:1}}),a&&o.jsx(A,{label:"S",value:m.spread,disabled:r,onChange:g=>h(i,{spread:g}),onChangeEnd:g=>h(i,{spread:g},!0),style:{flex:1}})]})]},i)})]})}function $e(t){return o.jsx(Rt,{...t,withSpreadInset:!0,testId:"box-shadow-editor",label:t.label??"Shadow"})}function we(t){return o.jsx(Rt,{...t,withSpreadInset:!1,testId:"text-shadow-editor",label:t.label??"Text Shadow"})}export{ce as A,pe as B,V as C,te as D,me as F,be as G,ye as Q,A as S,we as T,ue as a,fe as b,Qt as c,he as d,ve as e,$e as f,je as g,ge as h,Xt as i,Vt as j,de as k,Gt as l,ee as m,dt as n,Rt as o,xe as p,Yt as q,Wt as u};