@volter/game-editor 0.5.67 → 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 (568) 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 +6 -6
  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/music/music-player.ts +18 -12
  17. package/catalog/project-source/src/lib/reflections/volume-reflection-material.ts +59 -59
  18. package/catalog/project-source/src/lib/static-batch/Frozen.tsx +1 -1
  19. package/catalog/project-source/src/lib/static-batch/mutation-watch.ts +1 -1
  20. package/catalog/project-source/src/tools/bake-preview.tool.ts +9 -9
  21. package/dist/.vite/manifest.json +4106 -3965
  22. package/dist/assets/{AssetBudgetPanel-x_FNJbfZ.js → AssetBudgetPanel-BMR3AQhc.js} +10 -10
  23. package/dist/assets/AudioViewer-DESxi7pU.js +1 -0
  24. package/dist/assets/CanvasBoardDocument-Q_nrYFlB.js +1 -0
  25. package/dist/assets/CanvasSceneViewport-WZMoKy_F.js +1 -0
  26. package/dist/assets/ColorInput-C2EK-OnD.js +1 -0
  27. package/dist/assets/{EntityModelDocument-CzUHsH9E.js → EntityModelDocument-B_4ENTCq.js} +1 -1
  28. package/dist/assets/{EnvironmentAssetDocument-ByEB7_4A.js → EnvironmentAssetDocument-BZBp6OFJ.js} +1 -1
  29. package/dist/assets/{GameplaySessionTimeline-dhG-oiqd.js → GameplaySessionTimeline-1ivaucpv.js} +1 -1
  30. package/dist/assets/ImageViewer-D16OExYu.js +1 -0
  31. package/dist/assets/{InspectorCanvasPreview-CEr_Kxna.js → InspectorCanvasPreview-BrFjhoiD.js} +1 -1
  32. package/dist/assets/InspectorObjectPreview-CY5xVsPR.js +1 -0
  33. package/dist/assets/JsonAssetDocument-CvjTlcdr.js +2 -0
  34. package/dist/assets/{LiveModuleDocument-DL8QHSlk.js → LiveModuleDocument-ne1o9giX.js} +1 -1
  35. package/dist/assets/{LutAssetDocument-BImiug2M.js → LutAssetDocument-Cp0v-O7q.js} +1 -1
  36. package/dist/assets/ModelAssetDocument-Ceu7OIN9.js +1 -0
  37. package/dist/assets/{NonThreeAuthoringBootstrap-B40qmGGS.js → NonThreeAuthoringBootstrap-DiElZf-e.js} +1 -1
  38. package/dist/assets/Object3DDocumentToolbar-BLNamqii.js +1 -0
  39. package/dist/assets/Object3DDocumentViewport-D6QoHfa_.js +2 -0
  40. package/dist/assets/{Object3DPreview-ClYDoH2L.js → Object3DPreview-ZVokr044.js} +1 -1
  41. package/dist/assets/OnlineAssetDetail-Dnckd7zB.js +1 -0
  42. package/dist/assets/PlayBar-DsMitSgy.js +1 -0
  43. package/dist/assets/{QuarksAssetDocument-B-VOj-n4.js → QuarksAssetDocument-B5J8uHFM.js} +1 -1
  44. package/dist/assets/ReactCanvasControls-CmfvxJYY.js +1 -0
  45. package/dist/assets/RootSelectionOverlay-BWsNiSuM.js +1 -0
  46. package/dist/assets/{ShaderAssetDocument-Kn8IvRGV.js → ShaderAssetDocument-CT7XzsZq.js} +5 -5
  47. package/dist/assets/ShadowEditor-YO5KEfnz.js +1 -0
  48. package/dist/assets/{SourceAssetViewer-CLQ95VSD.js → SourceAssetViewer-FSLup2km.js} +1 -1
  49. package/dist/assets/StageHost-DYfGYwvq.js +2 -0
  50. package/dist/assets/{StoryPreviewMount-D2lg37et.js → StoryPreviewMount-BhvT5QlB.js} +1 -1
  51. package/dist/assets/ThreeBoardDocument-B-z2nwnH.js +2 -0
  52. package/dist/assets/{ThreeIsolationSceneContent-DbYIylZQ.js → ThreeIsolationSceneContent-B5pU4Y6k.js} +1 -1
  53. package/dist/assets/{ToolObject3DPreview-WEi6C9uU.js → ToolObject3DPreview-VtraiQ4Q.js} +1 -1
  54. package/dist/assets/Toolbar-M62Gob9T.js +1 -0
  55. package/dist/assets/{TransientHint-BpDLhRLd.js → TransientHint-Cc40mHWE.js} +1 -1
  56. package/dist/assets/VideoViewer-BxcUwXQm.js +1 -0
  57. package/dist/assets/ViewportShadingMenu-BoMPnTVh.js +1 -0
  58. package/dist/assets/active-ingest-0QjJWb7i.js +3 -0
  59. package/dist/assets/{animation-clock-Bm80XdqP.js → animation-clock-BXEwUJtz.js} +1 -1
  60. package/dist/assets/animation-mixers.service-C-Ko4KzM.js +1 -0
  61. package/dist/assets/animation-timeline.utility-Bl15-rYb.js +1 -0
  62. package/dist/assets/{asset-budget-asset.menu-CEgP0Kiw.js → asset-budget-asset.menu-BUa3g0Wy.js} +1 -1
  63. package/dist/assets/{asset-budget.action-D4R1c3wi.js → asset-budget.action-Dl5eVPIo.js} +1 -1
  64. package/dist/assets/{asset-budget.document-Syzjn1U1.js → asset-budget.document-DJylQ-0h.js} +1 -1
  65. package/dist/assets/{asset-budget.menu-BbRiqXeM.js → asset-budget.menu-BJtvNMLj.js} +1 -1
  66. package/dist/assets/asset-editor-persistence-BIbf5u0Q.js +1 -0
  67. package/dist/assets/asset-loaders-DoNflsHL.js +2 -0
  68. package/dist/assets/{asset-preview-B1tDziF1.js → asset-preview-DxlSdRZn.js} +1 -1
  69. package/dist/assets/{audio-unlock.service-ucMfCVBw.js → audio-unlock.service-CTaiyXF9.js} +1 -1
  70. package/dist/assets/audio.utility-CEmNc68t.js +1 -0
  71. package/dist/assets/autoplay.service-BZLSUyL8.js +1 -0
  72. package/dist/assets/{babylon-authoring-adapter-C8mFMXSr.js → babylon-authoring-adapter-BZvV2bz_.js} +1 -1
  73. package/dist/assets/binding-resolver-DGbk9_XR.js +2 -0
  74. package/dist/assets/blender-emscripten-engine-B7lfg-RX.js +2 -0
  75. package/dist/assets/{blender-node-editor.document-C1YmwWls.js → blender-node-editor.document-wXJobGNH.js} +1 -1
  76. package/dist/assets/{blender-properties-tab-B8lyjgj3.js → blender-properties-tab-7GFf80ev.js} +1 -1
  77. package/dist/assets/{blender-runtime-host-CyQlImSR.js → blender-runtime-host-CILxrx5T.js} +2 -2
  78. package/dist/assets/{blender-runtime-skin-BK7ShZ6z.js → blender-runtime-skin-Cd5lQYsC.js} +7 -7
  79. package/dist/assets/{blender-runtime.document-B0nVQs0P.js → blender-runtime.document-C0r_R49S.js} +7 -7
  80. package/dist/assets/{blender-timeline.document-CMcdE2CK.js → blender-timeline.document-BaISZMBc.js} +1 -1
  81. package/dist/assets/{blender-uv-editor.document-CjqNo4sZ.js → blender-uv-editor.document-CT_fsyyA.js} +1 -1
  82. package/dist/assets/blender-version.status-DzEx7u7k.js +1 -0
  83. package/dist/assets/blender-wali-engine-DOiQCBXH.js +2 -0
  84. package/dist/assets/{blender.command-C6NmRBo5.js → blender.command-DdiKd8mZ.js} +1 -1
  85. package/dist/assets/blender.keymap-BmOBRY7p.js +1 -0
  86. package/dist/assets/blender.status-BMETIbb2.js +1 -0
  87. package/dist/assets/board-guides-CjHQ9Ynm.js +1 -0
  88. package/dist/assets/body-marks-C1LxJtQb.js +1 -0
  89. package/dist/assets/bridge.command-DXUeavn5.js +3 -0
  90. package/dist/assets/{browserAll-lF_dLQVz.js → browserAll-Dg46xT22.js} +1 -1
  91. package/dist/assets/build-player.document-BHwVV3K0.js +1 -0
  92. package/dist/assets/build-profiles.document-HkpS-Kxa.js +2 -0
  93. package/dist/assets/build-progress.status-u1J0Rm1D.js +1 -0
  94. package/dist/assets/build-session-BLboUUbw.js +9 -0
  95. package/dist/assets/{build.action-DRX2IcYt.js → build.action-C00DL83N.js} +1 -1
  96. package/dist/assets/{build.command-BGvLaLG0.js → build.command-Cjk_NY75.js} +1 -1
  97. package/dist/assets/build.header-BWNmNWFT.js +1 -0
  98. package/dist/assets/{build.menu-UenrjPWS.js → build.menu-BBYtqCIq.js} +1 -1
  99. package/dist/assets/{build.service-BIUoTY6l.js → build.service-DOU15tKN.js} +1 -1
  100. package/dist/assets/{camera-DrvaM47S.js → camera-7DGyYW7Y.js} +1 -1
  101. package/dist/assets/{camera-runtime.inspector-CjJALNO8.js → camera-runtime.inspector-n-jiOR-3.js} +1 -1
  102. package/dist/assets/canvas-design-mount-CSRHU-ag.js +6 -0
  103. package/dist/assets/canvas-entry-runtime-BST8yRuK.js +2 -0
  104. package/dist/assets/{canvas-preview-frames-C0QTagA3.js → canvas-preview-frames-Cja32aW2.js} +1 -1
  105. package/dist/assets/{canvas-story-capture.service-Dgjr-rT1.js → canvas-story-capture.service-D5R5HJ8n.js} +2 -2
  106. package/dist/assets/capability-coverage-ByWftxk4.js +7 -0
  107. package/dist/assets/{collaboration-presence-BVIQuN1l.js → collaboration-presence-D6MC9xJN.js} +1 -1
  108. package/dist/assets/{collider-C7SbIYKY.js → collider-B78EcUc9.js} +1 -1
  109. package/dist/assets/{component-board.service-BEsFAw4_.js → component-board.service-BaQI5Oas.js} +2 -2
  110. package/dist/assets/component-board.service-CkjrsD8x.js +2 -0
  111. package/dist/assets/{component-board.service-CWFaGMCO.js → component-board.service-Dvjz_g-x.js} +2 -2
  112. package/dist/assets/component-contracts.service-C3-AXQp7.js +1 -0
  113. package/dist/assets/component-instance-root-DLI40MiB.js +1 -0
  114. package/dist/assets/{component-verbs.command-oNtGgzQL.js → component-verbs.command-Brr_WcaR.js} +1 -1
  115. package/dist/assets/component-verbs.service-DC2sC3j3.js +1 -0
  116. package/dist/assets/{config-_wCzzlM_.js → config-BI_7osdR.js} +3 -3
  117. package/dist/assets/{configurations-BXU4GGbV.js → configurations-XP9YLkrt.js} +1 -1
  118. package/dist/assets/connection.status-BhRwcFx0.js +1 -0
  119. package/dist/assets/{constraint-5KLYpGm7.js → constraint-Bp1l8hY-.js} +1 -1
  120. package/dist/assets/constraints.inspector-Dm1cycK3.js +1 -0
  121. package/dist/assets/{content-bounds-BeuIXKYu.js → content-bounds-DROIchTa.js} +1 -1
  122. package/dist/assets/{contract-system-adapters-Bic_7sev.js → contract-system-adapters-Cn7OW_ay.js} +1 -1
  123. package/dist/assets/coverage.service-l42ty7lr.js +3 -0
  124. package/dist/assets/create-runtime-B_uTwsmi.js +3 -0
  125. package/dist/assets/curve-THOUsg-j.js +1 -0
  126. package/dist/assets/{data-asset-DfQ2Pjse.js → data-asset-DAANayR6.js} +1 -1
  127. package/dist/assets/data-check-core-CHqar_E8.js +1 -0
  128. package/dist/assets/data-ref-CN34UeVw.js +1 -0
  129. package/dist/assets/debug-bridge-BD1XVAIB.js +1 -0
  130. package/dist/assets/debug-registry-ggQWxtu-.js +1 -0
  131. package/dist/assets/{deferred-ingest-play-BdR4qGk6.js → deferred-ingest-play-B2JUlwlT.js} +2 -2
  132. package/dist/assets/{design-time-canvas-mount-DPQeHSN2.js → design-time-canvas-mount-as9cN9I6.js} +2 -2
  133. package/dist/assets/design-time-layers-BRseeSmV.js +1 -0
  134. package/dist/assets/{design-time-mount.service-Ks-5Wkcs.js → design-time-mount.service-BTVu3yKo.js} +2 -2
  135. package/dist/assets/{design-time-mount.service-Ca-DZGFV.js → design-time-mount.service-DKvc7lVK.js} +2 -2
  136. package/dist/assets/design-time-react-mount-C7rB56QD.js +1 -0
  137. package/dist/assets/{document-preview-three-DThkjI1S.js → document-preview-three-CxmRhCcV.js} +1 -1
  138. package/dist/assets/{dom-authoring-adapter-BrLU8IJ_.js → dom-authoring-adapter-L8OzXfmE.js} +1 -1
  139. package/dist/assets/{draco3d-B2cwv46o.js → draco3d-BjNuXv66.js} +1 -1
  140. package/dist/assets/{edit-mode-audio.service-D4ITNbsm.js → edit-mode-audio.service-BwI5u845.js} +1 -1
  141. package/dist/assets/edit-mode-authoring-D5f7aHHl.js +1 -0
  142. package/dist/assets/{edit-mode-networking.service-BNv-FTRh.js → edit-mode-networking.service-DqP_4lbI.js} +1 -1
  143. package/dist/assets/editor-api-BM7H_F4G.js +1 -0
  144. package/dist/assets/{editor-layers-BDJnAAzj.js → editor-layers-D-CTUqco.js} +1 -1
  145. package/dist/assets/editor-presentation-activity-CqJH4G9t.js +1 -0
  146. package/dist/assets/{editor-shell-store-ChLcVeNB.js → editor-shell-store-DHVWS8cE.js} +1 -1
  147. package/dist/assets/{entity-object-JmYMfLsx.js → entity-object-MKYemTFM.js} +1 -1
  148. package/dist/assets/{extend-Cc-nEa_A.js → extend-BrgqZiMY.js} +1 -1
  149. package/dist/assets/fork-menu-DE2MK3Nq.js +1 -0
  150. package/dist/assets/{frame-debugger-store-DaCbAYSW.js → frame-debugger-store-BXoLKTdZ.js} +1 -1
  151. package/dist/assets/game-audio-BeCyd0Ha.js +1 -0
  152. package/dist/assets/{game-contract-seams-BnPFGLll.js → game-contract-seams-tyKDsfaP.js} +1 -1
  153. package/dist/assets/{game-css-scope-transform-D_p7cVgW.js → game-css-scope-transform-DcjrwtVc.js} +2 -2
  154. package/dist/assets/game-document.service-CTb2itHQ.js +1 -0
  155. package/dist/assets/game-eval.command-CpDKXOQU.js +2 -0
  156. package/dist/assets/game-module-access-BTInp2NG.js +1 -0
  157. package/dist/assets/game-network-DW5ARz4R.js +22 -0
  158. package/dist/assets/{gameplay-export-BzYzLZPi.js → gameplay-export-cHk3v9y-.js} +1 -1
  159. package/dist/assets/gameplay-replay-HRenPTtU.js +1 -0
  160. package/dist/assets/gameplay.command-DcY2lKKX.js +1 -0
  161. package/dist/assets/generation-CdOATubd.css +1 -0
  162. package/dist/assets/{generation-jobs-BZhOMrp-.js → generation-jobs-CJBehuUp.js} +1 -1
  163. package/dist/assets/generation.service-BMOc-C9i.js +1 -0
  164. package/dist/assets/{generations-DVDht_31.js → generations-ssgVOe_6.js} +1 -1
  165. package/dist/assets/generations.status-B_SmPReI.js +1 -0
  166. package/dist/assets/hierarchy-marks-BuCO8Ke-.js +1 -0
  167. package/dist/assets/hierarchy-marks-CsTaTkc7.js +1 -0
  168. package/dist/assets/hosted-asset-materialization-CiXZI85V.js +2 -0
  169. package/dist/assets/{ibl-override-material-CiKkaOTW.js → ibl-override-material-CMo_a49U.js} +1 -1
  170. package/dist/assets/index-B0S4fQQV.js +1 -0
  171. package/dist/assets/{index-C3Pw-9So.js → index-B9bd4k-t.js} +1 -1
  172. package/dist/assets/index-BMxv2MNV.js +1 -0
  173. package/dist/assets/{index-DUZeuA7g.js → index-Bm4_DmRO.js} +1 -1
  174. package/dist/assets/{index-cNc-iFbq.js → index-BvBlIRwM.js} +1 -1
  175. package/dist/assets/{index-Ck3JFh48.js → index-BweKDdi_.js} +1 -1
  176. package/dist/assets/{index-BRJMIUK0.js → index-C5ZAyrKq.js} +346 -345
  177. package/dist/assets/index-CPiRKiDC.css +1 -0
  178. package/dist/assets/index-CfpGZrbC.js +1 -0
  179. package/dist/assets/index-Czvj6whv.js +1 -0
  180. package/dist/assets/{index-SS9EugVg.js → index-DgPDGGSV.js} +2 -2
  181. package/dist/assets/{inference-diagnostics-xecGdohW.js → inference-diagnostics-DLt9ql9I.js} +1 -1
  182. package/dist/assets/{ingest-boot-viewport-DAt8WFSy.js → ingest-boot-viewport-BXVXjYpG.js} +1 -1
  183. package/dist/assets/ingest-siblings-DWJ7OGB_.js +1 -0
  184. package/dist/assets/ingest-source-persistence-6ShMoSCa.js +1 -0
  185. package/dist/assets/ingest.service-BBbX8ibg.js +1 -0
  186. package/dist/assets/{inspect-Dr4qvDpJ.js → inspect-Cz3Zyx_1.js} +1 -1
  187. package/dist/assets/inspection-D8fZOHCM.js +1 -0
  188. package/dist/assets/instances.command-BrdlngrL.js +1 -0
  189. package/dist/assets/{json-history-resource-DwS10tqD.js → json-history-resource-Uqrihfc8.js} +1 -1
  190. package/dist/assets/layered-pick-CAVQMPI7.js +1 -0
  191. package/dist/assets/{light-DcFqVCmv.js → light-CqzsCWeJ.js} +1 -1
  192. package/dist/assets/{live-project-verbs-C3LzprCe.js → live-project-verbs-CdFmLYOo.js} +1 -1
  193. package/dist/assets/{machine.document-BzZxubYQ.js → machine.document-DRIFOVaa.js} +1 -1
  194. package/dist/assets/{machines.finder-BR02bfVG.js → machines.finder-DPCT6few.js} +1 -1
  195. package/dist/assets/material-BVApn1V_.js +1 -0
  196. package/dist/assets/{material-factory-COz7qZhC.js → material-factory-B_75xxFD.js} +1 -1
  197. package/dist/assets/{mesh-DcmO-mWI.js → mesh-DdA3mExo.js} +1 -1
  198. package/dist/assets/model-asset-sections-D1uxOu2v.css +1 -0
  199. package/dist/assets/model-asset-sections.service-CJnSIckZ.js +1 -0
  200. package/dist/assets/{model-inspection-CXHxrafK.js → model-inspection-DvspbmJl.js} +1 -1
  201. package/dist/assets/{model-thumbnail-BEKPWg4l.js → model-thumbnail-BmQs-h6t.js} +1 -1
  202. package/dist/assets/{models.finder-c1I0tp2M.js → models.finder-Qv_Hsccy.js} +1 -1
  203. package/dist/assets/module-mode-MJ4Gbsry.js +2 -0
  204. package/dist/assets/mount-canvas-ingest-root-BxtM8OaB.js +2 -0
  205. package/dist/assets/mount-dom-ingest-root-pGatqO46.js +2 -0
  206. package/dist/assets/mount-ingest-root-C7jb-mCl.js +2 -0
  207. package/dist/assets/mount-manifest-BfoHBuzn.js +1 -0
  208. package/dist/assets/mount-readiness-DyAd17pe.js +4 -0
  209. package/dist/assets/mount-three-ingest-root-Boa5mcaF.js +1 -0
  210. package/dist/assets/{mounted-authoring-Clftxx0x.js → mounted-authoring-DxMISwvR.js} +1 -1
  211. package/dist/assets/{mounted-story-viewport-source-B4-eAYGI.js → mounted-story-viewport-source-DfnLxI1f.js} +1 -1
  212. package/dist/assets/{native-debug-module-2_HVupdg.js → native-debug-module-BlrALjM3.js} +1 -1
  213. package/dist/assets/{navigation-CH3-zr1n.js → navigation-CqG5o5AR.js} +1 -1
  214. package/dist/assets/{navmesh.menu-Dfi-Pk-8.js → navmesh.menu-D4TdVDhe.js} +1 -1
  215. package/dist/assets/{navmesh.service-Cz7QFY-M.js → navmesh.service-DWKT5ruQ.js} +1 -1
  216. package/dist/assets/network-observer.service-ZRAquNq4.js +1 -0
  217. package/dist/assets/network.utility-DjeOEvAY.js +1 -0
  218. package/dist/assets/object-marks-BnvSuCTt.js +1 -0
  219. package/dist/assets/{object3d-authoring-subject-BDrxd1GA.js → object3d-authoring-subject-XccsO0xG.js} +1 -1
  220. package/dist/assets/{object3d-document-session-registry-DJDEDM0p.js → object3d-document-session-registry-CMRJdFp6.js} +2 -2
  221. package/dist/assets/{oid-transform-D5Kxt6ij.js → oid-transform-DaA6yW6o.js} +1 -1
  222. package/dist/assets/{particles-vRp0Lf3o.js → particles-DsQRcDBY.js} +1 -1
  223. package/dist/assets/{performance-profiler-OwnXQX0M.js → performance-profiler-CMbwGBuk.js} +1 -1
  224. package/dist/assets/pixi-authoring-adapter-BoBt8bB5.js +1 -0
  225. package/dist/assets/pixi-live-write-target-CYZgvC6U.js +1 -0
  226. package/dist/assets/play.command-D9JGJP-e.js +2 -0
  227. package/dist/assets/pose-guard-CLabLSzf.js +1 -0
  228. package/dist/assets/presentation-COhHQdmR.js +1 -0
  229. package/dist/assets/{product-CxmUIxmr.js → product-CaRGoiIH.js} +1 -1
  230. package/dist/assets/{profiler.action-Dzy9DuAc.js → profiler.action-Cz7HYWjh.js} +1 -1
  231. package/dist/assets/{profiler.menu-jLDO3U6N.js → profiler.menu-D5aR_FBy.js} +1 -1
  232. package/dist/assets/profiler.utility-KwxlIPKb.js +1 -0
  233. package/dist/assets/{project-authoring-session-C3eusefK.js → project-authoring-session-DKXHVwxO.js} +2 -2
  234. package/dist/assets/project-provenance-BGnJXJwa.js +1 -0
  235. package/dist/assets/{properties-bone-constraints.inspector-B_PbSMV7.js → properties-bone-constraints.inspector-Bo-sU8eR.js} +1 -1
  236. package/dist/assets/{properties-bone.inspector-CMDEQuBd.js → properties-bone.inspector-BQiWplQv.js} +1 -1
  237. package/dist/assets/{properties-collection.inspector-D7Ay8yRj.js → properties-collection.inspector-C5BnR-GE.js} +1 -1
  238. package/dist/assets/{properties-constraints.inspector-DS1fZgXK.js → properties-constraints.inspector-CyheU12R.js} +1 -1
  239. package/dist/assets/{properties-data.inspector-k2pGN2Mp.js → properties-data.inspector-CkycARja.js} +1 -1
  240. package/dist/assets/{properties-material.inspector-Bb3yAGUx.js → properties-material.inspector-Bl_PUmY-.js} +1 -1
  241. package/dist/assets/{properties-modifiers.inspector-BcJfe-Wy.js → properties-modifiers.inspector-j7SnOxQq.js} +1 -1
  242. package/dist/assets/{properties-object.inspector-CUSfXJuq.js → properties-object.inspector-DcR3MGLK.js} +1 -1
  243. package/dist/assets/{properties-output.inspector-BTVW2kn1.js → properties-output.inspector-BLjw6K4b.js} +1 -1
  244. package/dist/assets/{properties-particles.inspector-Cw0fxx3B.js → properties-particles.inspector-BUIm2-Jf.js} +1 -1
  245. package/dist/assets/{properties-physics.inspector-C-0bD2bu.js → properties-physics.inspector-DNvRcxb6.js} +1 -1
  246. package/dist/assets/{properties-render.inspector-C8D5UpjX.js → properties-render.inspector-8FMZ-qoZ.js} +1 -1
  247. package/dist/assets/{properties-scene.inspector-HjK6QHGg.js → properties-scene.inspector-Dx7_z75k.js} +1 -1
  248. package/dist/assets/{properties-texture.inspector-CckZgUaI.js → properties-texture.inspector-WT15951-.js} +1 -1
  249. package/dist/assets/{properties-view-layer.inspector-C1ajtVSk.js → properties-view-layer.inspector-P7VNTdqr.js} +1 -1
  250. package/dist/assets/{properties-world.inspector-BiT_EdT-.js → properties-world.inspector-B3t1q8TF.js} +1 -1
  251. package/dist/assets/r3f-design-session-lsbFnoWH.js +2 -0
  252. package/dist/assets/{r3f-physics-binding-DzrbpqjM.js → r3f-physics-binding-Cx8yhuwt.js} +1 -1
  253. package/dist/assets/{r3f-source-authoring-adapter-DbbeRcvt.js → r3f-source-authoring-adapter-jH3G0TeH.js} +2 -2
  254. package/dist/assets/react-canvas-navigation-B_gOe3CI.js +1 -0
  255. package/dist/assets/react-inspector.service-CZf1vfdX.js +1 -0
  256. package/dist/assets/react-story-board-CCm2Opwn.js +1 -0
  257. package/dist/assets/{react-three-rapier.esm-U8J7g6tH.js → react-three-rapier.esm-CHXGG51p.js} +1 -1
  258. package/dist/assets/react-world-authoring-adapter-CnzxMtYz.js +1 -0
  259. package/dist/assets/{realm-services-CnY105XU.js → realm-services-Do9J6nsb.js} +1 -1
  260. package/dist/assets/reflection-probe-capture.inspector-BAjjIybz.js +1 -0
  261. package/dist/assets/{reflection-probe-BHNGwVyz.js → reflection-probe-sIto9mh0.js} +1 -1
  262. package/dist/assets/registry-Xnduk02T.js +1 -0
  263. package/dist/assets/{relative-import-specifier-BFKIWEWs.js → relative-import-specifier-CPFTrxi4.js} +1 -1
  264. package/dist/assets/{render-env-BkKZ4uMA.js → render-env-YJlI8K0i.js} +1 -1
  265. package/dist/assets/{render-features-rxbawsRb.js → render-features-DMSV2qKJ.js} +1 -1
  266. package/dist/assets/{render-settings-DS5leCed.js → render-settings-CRyDhHyz.js} +1 -1
  267. package/dist/assets/{resolve-three-CVnMRHxw.js → resolve-three-D27rMc37.js} +19 -19
  268. package/dist/assets/root-seam-contract-gjWUd5uu.js +1 -0
  269. package/dist/assets/run-selection-B0jOdyYt.js +2 -0
  270. package/dist/assets/scene-capture-Di9cM1p4.js +1 -0
  271. package/dist/assets/scene-document.service-XxGs4HHE.js +2 -0
  272. package/dist/assets/{scene-framing-BQt72ZCw.js → scene-framing-DkZKDwH3.js} +1 -1
  273. package/dist/assets/{scene-index--lRWLEmW.js → scene-index-DHeKmalD.js} +1 -1
  274. package/dist/assets/{scene-query-s1y04OVB.js → scene-query-ByZtXA2m.js} +1 -1
  275. package/dist/assets/seeded-random-BJthDRMu.js +1 -0
  276. package/dist/assets/{session-CTXsU1lK.js → session-x8E_NJk2.js} +34 -34
  277. package/dist/assets/{setup-renderer-Cwkl1Ar6.js → setup-renderer-F9mG7t6r.js} +1 -1
  278. package/dist/assets/{source-object3d-authoring-adapter-DF679Ncb.js → source-object3d-authoring-adapter-CvmFpSUj.js} +1 -1
  279. package/dist/assets/{source-persistence-backend-CwLYVPXj.js → source-persistence-backend-au3WtEn6.js} +1 -1
  280. package/dist/assets/{spark-renderer-lifecycle-DfYpvEJa.js → spark-renderer-lifecycle-B6Axb6jm.js} +1 -1
  281. package/dist/assets/{stage-keyboard-B8BEW592.js → stage-keyboard-BQkndG_D.js} +1 -1
  282. package/dist/assets/stage-overlay-set-g6eWhuRv.js +1 -0
  283. package/dist/assets/stage-presence-markers-0CDfO5f4.js +1 -0
  284. package/dist/assets/stage-transform-tools-BzPl7OIo.js +1 -0
  285. package/dist/assets/standard-viewport-dressing-BW-dM_1h.js +24 -0
  286. package/dist/assets/{state-watch.action-DnR5Zjr-.js → state-watch.action-Z1nQ5awu.js} +1 -1
  287. package/dist/assets/{state-watch.menu-wYLCLsAw.js → state-watch.menu-CQHGUF3W.js} +1 -1
  288. package/dist/assets/state-watch.utility-DCIg2i79.js +1 -0
  289. package/dist/assets/{story-capture-BmnwHGDV.js → story-capture-BIrjDKeY.js} +1 -1
  290. package/dist/assets/story-documents-BvG2xeaR.js +3 -0
  291. package/dist/assets/{story-documents.service-B6v7Z-WE.js → story-documents.service-DOSEa3ja.js} +1 -1
  292. package/dist/assets/{story-documents.service-yagl1wGp.js → story-documents.service-y1m7XGMJ.js} +1 -1
  293. package/dist/assets/{story-media-presence-BqRMu572.js → story-media-presence-HLV-KaMj.js} +1 -1
  294. package/dist/assets/{story-pixi-preview-Da6afqLg.js → story-pixi-preview-CMhho2gG.js} +1 -1
  295. package/dist/assets/{story-presentation-DMSYRWaz.js → story-presentation-CYhVv8Ku.js} +1 -1
  296. package/dist/assets/story-three-preview-CgcLF5lE.js +2 -0
  297. package/dist/assets/{structural-ids-Br2zjINh.js → structural-ids-BOo2BRoY.js} +1 -1
  298. package/dist/assets/studio-environment-R9qXUUcC.js +2 -0
  299. package/dist/assets/{surface-state-1lTOi8FD.js → surface-state-D8Qnowo6.js} +1 -1
  300. package/dist/assets/{syntactic-prop-specs-eiQXwMIc.js → syntactic-prop-specs-8gkBuc5j.js} +1 -1
  301. package/dist/assets/team-playtest.service-BBMZ2iyk.js +1 -0
  302. package/dist/assets/{three-TCuY32m_.js → three-DiL6vMXq.js} +1 -1
  303. package/dist/assets/three-authoring-adapter-CkLR2zGf.js +1 -0
  304. package/dist/assets/three-authoring.service-CovhlCGx.js +2 -0
  305. package/dist/assets/{three-ingest-runtime-B7rtg3QE.js → three-ingest-runtime-CwTqAHgX.js} +1 -1
  306. package/dist/assets/{three-integration-BdN5Nhsg.js → three-integration-DXOFI88n.js} +2 -2
  307. package/dist/assets/three-integration.service-rCAqpqSp.js +1 -0
  308. package/dist/assets/three-projection-core-B7Lf8tOp.js +1 -0
  309. package/dist/assets/{three-state-DwFE3ay2.js → three-state-BCACvUtm.js} +1 -1
  310. package/dist/assets/{three-story-capture.service-CvpV3v5a.js → three-story-capture.service-rTFKNtHA.js} +2 -2
  311. package/dist/assets/{three-story-model-C2r2BuiA.js → three-story-model-BjKr7OMn.js} +1 -1
  312. package/dist/assets/three-viewport-presentation-CBzvc2v2.js +141 -0
  313. package/dist/assets/tools-DfctM216.js +1 -0
  314. package/dist/assets/transform-mode-request-DlEApNrA.js +1 -0
  315. package/dist/assets/transport-strip-xCg94CuI.js +1 -0
  316. package/dist/assets/transport.header-BRtdky0x.js +1 -0
  317. package/dist/assets/{trigger-volume-DP0G1VBe.js → trigger-volume-BLkHmfm9.js} +1 -1
  318. package/dist/assets/tuples-BDz3wbQL.js +1 -0
  319. package/dist/assets/ui-board-document-DvbK_HVN.js +2 -0
  320. package/dist/assets/{user-data-Bpj7diUS.js → user-data-C84W0V47.js} +1 -1
  321. package/dist/assets/user-data-CODoGZqA.js +1 -0
  322. package/dist/assets/{utility-view-state-CAfbFbKQ.js → utility-view-state-CDRxZSo-.js} +1 -1
  323. package/dist/assets/viewport-door-BARIpMu-.js +1 -0
  324. package/dist/assets/{viewport-root-presentation-vgxsTyj4.js → viewport-root-presentation-hRLF0BeO.js} +1 -1
  325. package/dist/assets/{viewport-surface-status-cwCiBGa7.js → viewport-surface-status-TUfhXKR9.js} +1 -1
  326. package/dist/assets/{webworkerAll-Cm3gTjWi.js → webworkerAll-PJtcQ1FD.js} +1 -1
  327. package/dist/assets/worker-BtXrsgFy.js +2 -0
  328. package/dist/assets/workspace-arrangement-DqG5sUns.js +1 -0
  329. package/dist/assets/world-documents-D69XaqUX.js +1 -0
  330. package/dist/assets/world-root-stage-binding-BgZWZEuD.js +1 -0
  331. package/dist/assets/{xstate-animation-binding-BGLxcZT_.js → xstate-animation-binding-CIyLzGHs.js} +1 -1
  332. package/dist/assets/{xstate-animation-meta-D_T441Ru.js → xstate-animation-meta-CbYWup3R.js} +1 -1
  333. package/dist/volter-shared-react.json +10 -0
  334. package/dist/volter-shared-three.json +3 -0
  335. package/dist-node/cli.js +253 -210
  336. package/dist-node/create.js +103 -82
  337. package/package.json +23 -20
  338. package/src/contributions.d.ts +1 -1
  339. package/src/index.ts +10 -10
  340. package/starter/cube.py +1 -1
  341. package/template/.agents/references/project-manual.md +17 -17
  342. package/template/.agents/skills/editor/SKILL.md +6 -6
  343. package/template/.agents/skills/editor/agents/openai.yaml +3 -3
  344. package/template/.agents/skills/editor/references/editor-control.md +62 -62
  345. package/template/{.claude/skills/vgai-3d-models → .agents/skills/volter-3d-models}/SKILL.md +3 -3
  346. package/template/{.github/skills/vgai-ingest-existing-game → .agents/skills/volter-ingest-existing-game}/SKILL.md +2 -2
  347. package/template/.agents/skills/{vgai-music → volter-music}/SKILL.md +35 -11
  348. package/template/{.claude/skills/vgai-threejs-authoring → .agents/skills/volter-threejs-authoring}/SKILL.md +9 -9
  349. package/template/.agents/skills/volter-threejs-authoring/agents/openai.yaml +4 -0
  350. package/template/{.github/skills/vgai-threejs-authoring → .agents/skills/volter-threejs-authoring}/references/helper-catalog.md +1 -1
  351. package/template/.claude/skills/editor/SKILL.md +6 -6
  352. package/template/.claude/skills/editor/agents/openai.yaml +3 -3
  353. package/template/.claude/skills/editor/references/editor-control.md +62 -62
  354. package/template/{.agents/skills/vgai-3d-models → .claude/skills/volter-3d-models}/SKILL.md +3 -3
  355. package/template/{.agents/skills/vgai-ingest-existing-game → .claude/skills/volter-ingest-existing-game}/SKILL.md +2 -2
  356. package/template/{.github/skills/vgai-threejs-authoring → .claude/skills/volter-threejs-authoring}/SKILL.md +9 -9
  357. package/template/.claude/skills/volter-threejs-authoring/agents/openai.yaml +4 -0
  358. package/template/.claude/skills/{vgai-threejs-authoring → volter-threejs-authoring}/references/helper-catalog.md +1 -1
  359. package/template/.github/copilot-instructions.md +1 -1
  360. package/template/.github/skills/editor/SKILL.md +6 -6
  361. package/template/.github/skills/editor/agents/openai.yaml +3 -3
  362. package/template/.github/skills/editor/references/editor-control.md +62 -62
  363. package/template/.github/skills/{vgai-3d-models → volter-3d-models}/SKILL.md +3 -3
  364. package/template/{.claude/skills/vgai-ingest-existing-game → .github/skills/volter-ingest-existing-game}/SKILL.md +2 -2
  365. package/template/{.agents/skills/vgai-threejs-authoring → .github/skills/volter-threejs-authoring}/SKILL.md +9 -9
  366. package/template/.github/skills/volter-threejs-authoring/agents/openai.yaml +4 -0
  367. package/template/{.agents/skills/vgai-threejs-authoring → .github/skills/volter-threejs-authoring}/references/helper-catalog.md +1 -1
  368. package/template/.mcp.json +3 -3
  369. package/template/AGENTS.md +24 -23
  370. package/template/DEVLOG.md +1 -1
  371. package/template/IDIOMS.md +3 -3
  372. package/template/LICENSE +3 -3
  373. package/template/README.md +12 -12
  374. package/template/check-idioms.ts +51 -51
  375. package/template/manifest-entry-modules-plugin.ts +17 -4
  376. package/template/package.json +12 -12
  377. package/template/server/loopback.ts +1 -1
  378. package/template/server/main.ts +4 -4
  379. package/template/server/rooms/arena-room.ts +8 -8
  380. package/template/server/rooms/game-room.ts +8 -8
  381. package/template/server/rooms.ts +2 -2
  382. package/template/src/bot/QaTester.tsx +1 -1
  383. package/template/src/bot/bot-station.ts +2 -2
  384. package/template/src/bot/tester-station.ts +1 -1
  385. package/template/src/contributions/README.md +1 -1
  386. package/template/src/contributions/analytics.analytics.tsx +1 -1
  387. package/template/src/contributions/data.document.tsx +2 -2
  388. package/template/src/contributions/pages.finder.ts +1 -1
  389. package/template/src/contributions/tester.inspector.tsx +2 -2
  390. package/template/src/contributions/use-game-modules.ts +1 -1
  391. package/template/src/input.ts +2 -2
  392. package/template/src/lib/reflections/volume-reflection-material.ts +59 -59
  393. package/template/src/lib/static-batch/Frozen.tsx +1 -1
  394. package/template/src/lib/static-batch/mutation-watch.ts +1 -1
  395. package/template/src/main.ts +58 -6
  396. package/template/src/manifest-entry-modules.d.ts +12 -1
  397. package/template/src/prefabs/HeroBox.stories.tsx +1 -1
  398. package/template/src/world.tsx +1 -1
  399. package/template/tsconfig.json +1 -1
  400. package/template/validate-manifest.ts +3 -3
  401. package/template/vite.config.ts +11 -11
  402. package/template/{vgai.adapter.ts → volter.adapter.ts} +1 -1
  403. package/template/{vgai.project.json → volter.project.json} +2 -2
  404. package/template-dotfiles/gitignore +27 -27
  405. package/workbench/src/media/game-cover.css +11 -11
  406. package/workbench/src/product.contribution.ts +28 -28
  407. package/workbench/src/{vgaiGameSkew.ts → volterGameSkew.ts} +16 -16
  408. package/dist/assets/AudioViewer-BDPqHDfU.js +0 -1
  409. package/dist/assets/CanvasBoardDocument-mxL0oJ3N.js +0 -1
  410. package/dist/assets/CanvasSceneViewport-C_mapCwC.js +0 -1
  411. package/dist/assets/ColorInput-QUPS1pEB.js +0 -1
  412. package/dist/assets/ImageViewer-tlVvkdM4.js +0 -1
  413. package/dist/assets/InspectorObjectPreview-W-y079DS.js +0 -1
  414. package/dist/assets/JsonAssetDocument-CPmcWFPW.js +0 -2
  415. package/dist/assets/ModelAssetDocument-De1HKuxG.js +0 -1
  416. package/dist/assets/Object3DDocumentToolbar-Cks81kCS.js +0 -1
  417. package/dist/assets/Object3DDocumentViewport-DCwiSY3O.js +0 -2
  418. package/dist/assets/OnlineAssetDetail-CNuwSQRQ.js +0 -1
  419. package/dist/assets/PlayBar-bT8Xdrap.js +0 -1
  420. package/dist/assets/ReactCanvasControls-CnJrPj-B.js +0 -1
  421. package/dist/assets/RootSelectionOverlay-CpaGluQu.js +0 -1
  422. package/dist/assets/ShadowEditor-CVtMlALn.js +0 -1
  423. package/dist/assets/StageHost-B89HKcvd.js +0 -2
  424. package/dist/assets/ThreeBoardDocument-BAgHrbtu.js +0 -2
  425. package/dist/assets/Toolbar-DkTHnQto.js +0 -1
  426. package/dist/assets/VideoViewer-DMV8lf4P.js +0 -1
  427. package/dist/assets/ViewportShadingMenu-CXPi6fl8.js +0 -1
  428. package/dist/assets/active-ingest-DA426a81.js +0 -3
  429. package/dist/assets/adapter-runtime-bindings-4cmsRvRh.js +0 -2
  430. package/dist/assets/animation-mixers.service-DK64IuYq.js +0 -1
  431. package/dist/assets/animation-timeline.utility-D-g0zrOl.js +0 -1
  432. package/dist/assets/asset-editor-persistence-BGWIqZdk.js +0 -1
  433. package/dist/assets/asset-loaders-C0KQI5eY.js +0 -2
  434. package/dist/assets/audio.utility-BmE9WMUg.js +0 -1
  435. package/dist/assets/autoplay.service-CjPnv3QW.js +0 -1
  436. package/dist/assets/binding-resolver-dE0GnZT5.js +0 -2
  437. package/dist/assets/blender-emscripten-engine-BeWFjMn-.js +0 -2
  438. package/dist/assets/blender-version.status-OsFoc9SA.js +0 -1
  439. package/dist/assets/blender-wali-engine-da698rDf.js +0 -2
  440. package/dist/assets/blender.keymap-_rF_vRX8.js +0 -1
  441. package/dist/assets/blender.status-ujwGU6dU.js +0 -1
  442. package/dist/assets/board-guides-BEKPgD9M.js +0 -1
  443. package/dist/assets/body-marks-RKb_LTwL.js +0 -1
  444. package/dist/assets/bridge.command-BF00Iefm.js +0 -3
  445. package/dist/assets/build-profiles.document-CqNrDdh9.js +0 -2
  446. package/dist/assets/build-progress.status-Bo1ZgJcb.js +0 -1
  447. package/dist/assets/build-session-GZcSAfPN.js +0 -9
  448. package/dist/assets/build.header-Bt1kwHWl.js +0 -1
  449. package/dist/assets/canvas-design-mount-BbLW_Nci.js +0 -6
  450. package/dist/assets/canvas-entry-runtime-UNYuSfG0.js +0 -2
  451. package/dist/assets/capability-coverage-DZ-onC5j.js +0 -7
  452. package/dist/assets/component-board.service-q_TM9BCw.js +0 -2
  453. package/dist/assets/component-contracts.service-CPbfXE1h.js +0 -1
  454. package/dist/assets/component-instance-root-B0C5oNEm.js +0 -1
  455. package/dist/assets/component-verbs.service-CnA11bJq.js +0 -1
  456. package/dist/assets/connection.status-Yvt0bX0r.js +0 -1
  457. package/dist/assets/constraints.inspector-4r8jWq5a.js +0 -1
  458. package/dist/assets/coverage.service-DcpEoBuf.js +0 -3
  459. package/dist/assets/create-runtime-DBfUy0SO.js +0 -3
  460. package/dist/assets/curve-DVd18iAX.js +0 -1
  461. package/dist/assets/data-check-core-CQEjuFyt.js +0 -1
  462. package/dist/assets/data-ref-CWnkj-HX.js +0 -1
  463. package/dist/assets/debug-bridge-D3_-EgRE.js +0 -1
  464. package/dist/assets/debug-registry-P0_YQGWd.js +0 -1
  465. package/dist/assets/design-time-layers-ChswRUJt.js +0 -1
  466. package/dist/assets/design-time-react-mount-C85KfXOd.js +0 -1
  467. package/dist/assets/edit-mode-authoring-DeCxPcHM.js +0 -1
  468. package/dist/assets/editor-api-BFTIRlWa.js +0 -1
  469. package/dist/assets/editor-presentation-activity-C7SNSmTd.js +0 -1
  470. package/dist/assets/entry-adjudication-Dc18TIqT.js +0 -1
  471. package/dist/assets/fork-menu-DpKqRhF5.js +0 -1
  472. package/dist/assets/game-audio-CaGKzia4.js +0 -1
  473. package/dist/assets/game-document.service-Chmt4065.js +0 -1
  474. package/dist/assets/game-eval.command-DRSvOJ_1.js +0 -2
  475. package/dist/assets/game-module-access-o3iXZpCA.js +0 -1
  476. package/dist/assets/game-network-Ct2FQYmu.js +0 -1
  477. package/dist/assets/gameplay-replay-BwdxV4oF.js +0 -1
  478. package/dist/assets/gameplay.command-Boqv1hnc.js +0 -1
  479. package/dist/assets/generation-DhwCUHPf.css +0 -1
  480. package/dist/assets/generation.service-o9aXlsx4.js +0 -1
  481. package/dist/assets/generations.status-BvzgHlyk.js +0 -1
  482. package/dist/assets/hierarchy-marks-BLPfSIym.js +0 -1
  483. package/dist/assets/hierarchy-marks-Cc_3lxw6.js +0 -1
  484. package/dist/assets/hosted-asset-materialization-BpbnhJac.js +0 -2
  485. package/dist/assets/index-0Lm0Nf1M.css +0 -1
  486. package/dist/assets/index-BHoAKyAC.js +0 -1
  487. package/dist/assets/index-BeK4RPgj.js +0 -1
  488. package/dist/assets/index-C1c3eOmm.js +0 -1
  489. package/dist/assets/index.module-Ycad3DJq.js +0 -1
  490. package/dist/assets/ingest-siblings-BtiEXLnh.js +0 -1
  491. package/dist/assets/ingest-source-persistence-Dmdo-UBp.js +0 -1
  492. package/dist/assets/ingest.service-vbCucMz7.js +0 -1
  493. package/dist/assets/inspection-CObLhnrs.js +0 -1
  494. package/dist/assets/instances.command-BwayrqNm.js +0 -1
  495. package/dist/assets/layered-pick-kiQf53t5.js +0 -1
  496. package/dist/assets/material-B_V78pTt.js +0 -1
  497. package/dist/assets/model-asset-sections-CFvvihfx.css +0 -1
  498. package/dist/assets/model-asset-sections.service-CqSclZGY.js +0 -1
  499. package/dist/assets/module-mode-BH2R93XP.js +0 -2
  500. package/dist/assets/mount-canvas-ingest-root-D1z9i5B3.js +0 -2
  501. package/dist/assets/mount-dom-ingest-root-BAmmNxlm.js +0 -2
  502. package/dist/assets/mount-ingest-root-DYR0TMIt.js +0 -2
  503. package/dist/assets/mount-manifest-DdkFYdVA.js +0 -1
  504. package/dist/assets/mount-readiness-Ds0HvvLH.js +0 -4
  505. package/dist/assets/mount-three-ingest-root-DVbACDUy.js +0 -1
  506. package/dist/assets/network-observer.service-Ce83TdsU.js +0 -1
  507. package/dist/assets/network.utility-DFDul2Xb.js +0 -1
  508. package/dist/assets/object-marks-DwvIEBOK.js +0 -1
  509. package/dist/assets/pixi-authoring-adapter-BChknIdC.js +0 -1
  510. package/dist/assets/pixi-live-write-target-BjDsBQbp.js +0 -1
  511. package/dist/assets/play-mode-DICV4cKP.js +0 -22
  512. package/dist/assets/play.command-NHyi5rzF.js +0 -2
  513. package/dist/assets/pose-guard-DILO6gGq.js +0 -1
  514. package/dist/assets/presentation-BeNFBfKg.js +0 -1
  515. package/dist/assets/profiler.utility-Do2Bw7MY.js +0 -1
  516. package/dist/assets/project-provenance-4ldz-EOG.js +0 -1
  517. package/dist/assets/r3f-design-session-B5GsZI5M.js +0 -2
  518. package/dist/assets/react-canvas-navigation-Cp3cOHJa.js +0 -1
  519. package/dist/assets/react-inspector.service-Bm0OnanU.js +0 -1
  520. package/dist/assets/react-story-board-GaXqr03H.js +0 -1
  521. package/dist/assets/react-world-authoring-adapter-DOjv2pYm.js +0 -1
  522. package/dist/assets/reflection-probe-capture.inspector-DqSW9p1v.js +0 -1
  523. package/dist/assets/registry-CaCdF63N.js +0 -1
  524. package/dist/assets/root-seam-contract-CxLZaRio.js +0 -1
  525. package/dist/assets/run-selection-DzEkGesJ.js +0 -2
  526. package/dist/assets/scene-capture-0a-bTjT8.js +0 -1
  527. package/dist/assets/scene-document.service-CeDwVA7t.js +0 -2
  528. package/dist/assets/seeded-random-BgCwIAAU.js +0 -1
  529. package/dist/assets/stage-overlay-set-BGE03mqb.js +0 -1
  530. package/dist/assets/stage-presence-markers-DIP7YMcO.js +0 -1
  531. package/dist/assets/stage-transform-tools-BQB7EY4l.js +0 -1
  532. package/dist/assets/standard-viewport-dressing-BCA51Tum.js +0 -24
  533. package/dist/assets/state-watch.utility-CFG1Tu1m.js +0 -1
  534. package/dist/assets/story-documents-BTo90DiA.js +0 -3
  535. package/dist/assets/story-three-preview-R1JvrggS.js +0 -2
  536. package/dist/assets/studio-environment-DRxxq_QX.js +0 -2
  537. package/dist/assets/team-playtest.service-hLfjgScx.js +0 -1
  538. package/dist/assets/three-authoring-adapter-htbnVej2.js +0 -1
  539. package/dist/assets/three-authoring.service-BIQAtVdX.js +0 -2
  540. package/dist/assets/three-integration.service-CS8Nvbd2.js +0 -1
  541. package/dist/assets/three-projection-core-CG01r5Ta.js +0 -1
  542. package/dist/assets/three-viewport-presentation-B0z_cECu.js +0 -141
  543. package/dist/assets/tools-B_NJsk05.js +0 -1
  544. package/dist/assets/transform-mode-request-DzD9aUNA.js +0 -1
  545. package/dist/assets/transport-strip-CUjNltnb.js +0 -1
  546. package/dist/assets/transport.header-Bb4FpQ8J.js +0 -1
  547. package/dist/assets/tuples-DfWSY2tr.js +0 -1
  548. package/dist/assets/ui-board-document-CCiiXjX9.js +0 -2
  549. package/dist/assets/user-data-dHvLdpwM.js +0 -1
  550. package/dist/assets/viewport-door-Bj_ZIP85.js +0 -1
  551. package/dist/assets/worker-CC9Ug5Ei.js +0 -2
  552. package/dist/assets/workspace-arrangement-BdAlBwvd.js +0 -1
  553. package/dist/assets/world-documents-DBybpBq8.js +0 -1
  554. package/dist/assets/world-root-stage-binding-ZVYIgr74.js +0 -1
  555. package/dist/vgai-shared-react.json +0 -10
  556. package/dist/vgai-shared-three.json +0 -3
  557. package/template/.agents/skills/vgai-threejs-authoring/agents/openai.yaml +0 -4
  558. package/template/.claude/skills/vgai-threejs-authoring/agents/openai.yaml +0 -4
  559. package/template/.github/skills/vgai-threejs-authoring/agents/openai.yaml +0 -4
  560. /package/dist/assets/{vgai-shared-fontawesome-CU65D4Ij.js → volter-shared-fontawesome-CU65D4Ij.js} +0 -0
  561. /package/dist/assets/{vgai-shared-jsx-dev-runtime-DFDKL7fx.js → volter-shared-jsx-dev-runtime-DFDKL7fx.js} +0 -0
  562. /package/dist/assets/{vgai-shared-jsx-runtime-DIqBpTut.js → volter-shared-jsx-runtime-DIqBpTut.js} +0 -0
  563. /package/dist/assets/{vgai-shared-react-BT7rMc2H.js → volter-shared-react-BT7rMc2H.js} +0 -0
  564. /package/dist/assets/{vgai-shared-react-dom-DFajMqMT.js → volter-shared-react-dom-DFajMqMT.js} +0 -0
  565. /package/dist/assets/{vgai-shared-react-dom-client-S0ozfl6_.js → volter-shared-react-dom-client-S0ozfl6_.js} +0 -0
  566. /package/dist/assets/{vgai-shared-three-DH4yxKwt.js → volter-shared-three-DH4yxKwt.js} +0 -0
  567. /package/template/{.vgai → .volter}/assets.json +0 -0
  568. /package/template/{.vgai → .volter}/provenance.json +0 -0
@@ -1 +0,0 @@
1
- import{a as e}from"./jsx-runtime-DPjLkJKQ.js";import{J as $,cz as _,cA as I,cB as L,aH as G,cC as P,au as R,cD as Z,cE as T,cF as C,aJ as w,$ as z,cG as U,cH as D,Z as V,cI as J,cJ as K,cK as Q,cL as q,cM as ee,cN as te,cO as oe,cP as ne,cQ as k,cR as se,cS as M,cT as re,cU as ie}from"./index-BRJMIUK0.js";import{r as p}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{S as ae,a as Y}from"./react-canvas-navigation-Cp3cOHJa.js";import{s as O,c as A,a as B,r as le,m as X,b as ce,d as de}from"./RootSelectionOverlay-CpaGluQu.js";import{T as ue}from"./Toolbar-DkTHnQto.js";import{T as pe}from"./TransientHint-BpDLhRLd.js";const Ce="#111214";function H(o,r=32){let t=r>0?r:32;for(;t*o<12;)t*=2;for(;t*o>48;)t/=2;return t}function N(o){if(o.length===0)return null;let r=Number.POSITIVE_INFINITY,t=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY,h=Number.NEGATIVE_INFINITY;for(const n of o)r=Math.min(r,n.x),t=Math.min(t,n.y),i=Math.max(i,n.x+n.width),h=Math.max(h,n.y+n.height);return{x:r,y:t,width:i-r,height:h-t}}function F(o,r,t){if(!t||!(t.width>0)||!(t.height>0))return;const i=Math.max(1,o.clientWidth-96),h=Math.max(1,o.clientHeight-96),n=Math.min(4,Math.max(Y,Math.min(i/t.width,h/t.height)));r.setView(o.clientWidth/2-(t.x+t.width/2)*n,o.clientHeight/2-(t.y+t.height/2)*n,n)}function ke({view:o,documentId:r}){const t=$();p.useSyncExternalStore(t.subscribe,t.getSnapshot),p.useEffect(()=>_(r,"canvas"),[r]),p.useSyncExternalStore(I,L);const i=G(r),h=P(r),n=R()?.config.resolution,c=p.useSyncExternalStore(o.subscribe,o.get,o.get);p.useSyncExternalStore(p.useCallback(d=>O(o,d),[o]),p.useCallback(()=>A(o),[o]));const v=B(o),b=t.snap2D,S=H(c.zoom,b.step)*c.zoom,y=S*4,s=c.x+b.offsetX*c.zoom,m=c.y+b.offsetY*c.zoom;return e.jsxs("div",{"data-testid":"canvas-scene-backdrop",style:{position:"absolute",inset:0,zIndex:2,overflow:"hidden",pointerEvents:"none"},children:[i&&e.jsx("div",{style:{position:"absolute",inset:0,backgroundImage:"linear-gradient(rgba(255,255,255,.075) 1px, transparent 1px),linear-gradient(90deg, rgba(255,255,255,.075) 1px, transparent 1px),linear-gradient(rgba(255,255,255,.14) 1px, transparent 1px),linear-gradient(90deg, rgba(255,255,255,.14) 1px, transparent 1px)",backgroundPosition:`${s}px ${m}px`,backgroundSize:`${S}px ${S}px, ${S}px ${S}px, ${y}px ${y}px, ${y}px ${y}px`}}),h.viewport&&n&&n.width>0&&n.height>0&&e.jsx("div",{"data-testid":"canvas-scene-viewport-rect",style:{position:"absolute",left:c.x,top:c.y,width:n.width*c.zoom,height:n.height*c.zoom,boxSizing:"border-box",borderStyle:"solid",borderWidth:1,borderColor:"rgba(160, 120, 255, .75)"}}),h.origin&&e.jsxs(e.Fragment,{children:[e.jsx("div",{"data-testid":"canvas-scene-origin-y",style:{position:"absolute",left:0,right:0,top:c.y,height:1,background:"rgba(238, 91, 91, .8)"}}),e.jsx("div",{"data-testid":"canvas-scene-origin-x",style:{position:"absolute",top:0,bottom:0,left:c.x,width:1,background:"rgba(87, 199, 126, .8)"}}),e.jsx("div",{style:{position:"absolute",left:c.x+6,top:c.y+6,color:"rgba(255,255,255,.68)",font:"10px ui-monospace, SFMono-Regular, Menlo, monospace"},children:"0, 0"})]}),h.guides&&v.map(d=>e.jsx("div",{"data-testid":`canvas-scene-guide-${d.axis}`,title:`${d.axis.toUpperCase()} ${Math.round(d.value*100)/100} · drag to move · right-click to remove`,onContextMenu:u=>{u.preventDefault(),le(o,d.id)},onPointerDown:u=>{u.preventDefault(),u.stopPropagation();const x=u.currentTarget.parentElement?.getBoundingClientRect();if(!x)return;const a=g=>{const f=d.axis==="x"?g.clientX-x.left:g.clientY-x.top,j=o.get();X(o,d.id,(f-(d.axis==="x"?j.x:j.y))/j.zoom)},l=()=>{window.removeEventListener("pointermove",a),window.removeEventListener("pointerup",l)};window.addEventListener("pointermove",a),window.addEventListener("pointerup",l,{once:!0})},style:{position:"absolute",pointerEvents:"auto",cursor:d.axis==="x"?"ew-resize":"ns-resize",...d.axis==="x"?{left:c.x+d.value*c.zoom-4,top:20,bottom:0,width:9,borderLeft:"1px solid rgba(74, 180, 255, .95)"}:{top:c.y+d.value*c.zoom-4,left:20,right:0,height:9,borderTop:"1px solid rgba(74, 180, 255, .95)"}}},d.id)),h.rulers&&e.jsx(he,{view:o})]})}function he({view:o}){const r=p.useSyncExternalStore(o.subscribe,o.get,o.get),t=p.useRef(null),i=p.useRef(null),[h,n]=p.useState({width:0,height:0});p.useEffect(()=>{const s=()=>{const d=t.current?.clientWidth??0,u=i.current?.clientHeight??0;n(x=>x.width===d&&x.height===u?x:{width:d,height:u})};if(s(),typeof ResizeObserver>"u")return;const m=new ResizeObserver(s);return t.current&&m.observe(t.current),i.current&&m.observe(i.current),()=>m.disconnect()},[]);const c=(s,m)=>{if(!(m>0))return[];const d=s==="x"?r.x:r.y,u=H(r.zoom),x=u*r.zoom,a=20,l=Math.ceil((a-d)/x),g=Math.floor((a+m-d)/x);return Array.from({length:Math.max(0,g-l+1)},(f,j)=>{const E=l+j;return{major:E%4===0,screen:d+E*x-a,value:E*u}})},v=c("x",h.width),b=c("y",h.height),S=(s,m)=>{m.preventDefault(),m.stopPropagation();const d=m.currentTarget.parentElement?.getBoundingClientRect();if(!d)return;const u=(g,f)=>{const j=o.get();return((s==="x"?g-d.left:f-d.top)-(s==="x"?j.x:j.y))/j.zoom},x=ce(o,s,u(m.clientX,m.clientY)),a=g=>X(o,x,u(g.clientX,g.clientY)),l=()=>{window.removeEventListener("pointermove",a),window.removeEventListener("pointerup",l)};window.addEventListener("pointermove",a),window.addEventListener("pointerup",l,{once:!0})},y={position:"absolute",pointerEvents:"auto",backgroundColor:"rgba(24, 26, 30, .96)",border:0,borderColor:"rgba(255,255,255,.14)",boxSizing:"border-box"};return e.jsxs(e.Fragment,{children:[e.jsx("button",{ref:t,type:"button","data-testid":"canvas-scene-ruler-x","aria-label":"Horizontal ruler; drag to create a horizontal guide",onPointerDown:s=>S("y",s),style:{...y,left:20,right:0,top:0,height:20,borderBottomStyle:"solid",borderBottomWidth:1,cursor:"row-resize",padding:0,overflow:"hidden"},children:v.map(s=>e.jsx("span",{"aria-hidden":"true","data-ruler-axis":"x","data-ruler-value":s.value,style:{position:"absolute",left:s.screen,bottom:0,width:1,height:s.major?8:4,background:s.major?"rgba(255,255,255,.5)":"rgba(255,255,255,.28)",pointerEvents:"none"},children:s.major&&e.jsx("span",{style:{position:"absolute",left:3,bottom:5,color:"rgba(255,255,255,.62)",font:"9px ui-monospace, SFMono-Regular, Menlo, monospace",lineHeight:1,whiteSpace:"nowrap"},children:s.value})},s.value))}),e.jsx("button",{ref:i,type:"button","data-testid":"canvas-scene-ruler-y","aria-label":"Vertical ruler; drag to create a vertical guide",onPointerDown:s=>S("x",s),style:{...y,top:20,bottom:0,left:0,width:20,borderRightStyle:"solid",borderRightWidth:1,cursor:"col-resize",padding:0,overflow:"hidden"},children:b.map(s=>e.jsx("span",{"aria-hidden":"true","data-ruler-axis":"y","data-ruler-value":s.value,style:{position:"absolute",top:s.screen,right:0,width:s.major?8:4,height:1,background:s.major?"rgba(255,255,255,.5)":"rgba(255,255,255,.28)",pointerEvents:"none"},children:s.major&&e.jsx("span",{style:{position:"absolute",right:4,top:3,color:"rgba(255,255,255,.62)",font:"9px ui-monospace, SFMono-Regular, Menlo, monospace",lineHeight:1,whiteSpace:"nowrap",writingMode:"vertical-rl",transform:"rotate(180deg)"},children:s.value})},s.value))}),e.jsx("div",{style:{...y,left:0,top:0,width:20,height:20}})]})}function Me({active:o,adapter:r,containerRef:t,view:i,documentId:h}){const n=$();p.useSyncExternalStore(n.subscribe,n.getSnapshot),p.useSyncExternalStore(I,L);const c=G(h),v=p.useSyncExternalStore(i.subscribe,i.get,i.get),[b,S]=p.useState(null),y=p.useCallback(a=>{const l=t.current;if(!l)return;const g=Math.min(ae,Math.max(Y,a)),f=l.clientWidth/2,j=l.clientHeight/2,E=(f-v.x)/v.zoom,W=(j-v.y)/v.zoom;i.setView(f-E*g,j-W*g,g)},[t,v,i]),s=p.useCallback(a=>{if(!r?.rects)return[];const l=[];for(const g of a){const f=r.rects.rect(g);f&&f.width>0&&f.height>0&&l.push(f)}return l},[r]),m=p.useCallback(()=>{const a=t.current;a&&F(a,i,N(s(n.selectedEntityIds)))},[t,s,n,i]),d=p.useCallback(()=>{const a=t.current;if(!a)return;const l=i.get(),g=R()?.config.resolution,f=g?g.width/2:0,j=g?g.height/2:0;i.setView(a.clientWidth/2-f*l.zoom,a.clientHeight/2-j*l.zoom,l.zoom)},[t,i]),u=p.useCallback(()=>{const a=t.current,l=N(s(n.selectedEntityIds));if(!a||!l)return;const g=i.get();i.setView(a.clientWidth/2-(l.x+l.width/2)*g.zoom,a.clientHeight/2-(l.y+l.height/2)*g.zoom,g.zoom)},[t,s,n,i]),x=p.useCallback(()=>{const a=t.current;!a||!r||F(a,i,N(s(Z(r))))},[r,t,s,i]);return p.useEffect(()=>{if(o)return n.onViewportAction(a=>{if(a.type==="focus-entity"){const l=t.current;if(!l)return;F(l,i,N(s([a.id])))}else a.type==="focus-selection"?m():a.type==="focus-scene"&&x()})},[o,t,x,m,s,n,i]),e.jsxs(e.Fragment,{children:[e.jsx(pe,{}),e.jsx(ue,{dimensions:"2d"}),b?e.jsx(me,{mode:b,view:i,containerRef:t,onExit:()=>S(null)}):null,e.jsxs(T,{label:"2D scene display",className:"vgai-viewport-toolbar vgai-viewport-toolbar-right","data-vgai-canvas-navigation-ignore":"true",children:[e.jsx(C,{text:`Grid: ${c?"On":"Off"}`,children:e.jsx(w,{"aria-label":"Toggle 2D grid","aria-pressed":c,size:"comfortable",onClick:()=>D(h,!c),children:e.jsx(z,{icon:U,size:"md"})})}),e.jsx(V,{"aria-label":"Frame all",variant:"ghost",size:"comfortable",onClick:x,children:"Frame all"}),e.jsx(C,{text:"Pan (Space-drag pans in any mode)",children:e.jsx(w,{"aria-label":"Pan mode","aria-pressed":b==="pan",size:"comfortable",onClick:()=>S(b==="pan"?null:"pan"),children:e.jsx(z,{icon:J,size:"md"})})}),e.jsx(C,{text:"Ruler: drag to measure distance and angle",children:e.jsx(w,{"aria-label":"Ruler mode","aria-pressed":b==="ruler",size:"comfortable",onClick:()=>S(b==="ruler"?null:"ruler"),children:e.jsx(z,{icon:K,size:"md"})})}),e.jsx(xe,{adapter:r,selected:[...n.selectedEntityIds]}),e.jsx(be,{adapter:r,selected:[...n.selectedEntityIds]}),e.jsx(ge,{documentId:h,view:i,hasSelection:n.selectedEntityIds.size>0,onCenterSelection:u,onFrameSelection:m})]}),e.jsxs(T,{label:"2D scene navigation",className:"vgai-canvas-scene-navigation","data-vgai-canvas-navigation-ignore":"true",children:[e.jsx(w,{"aria-label":"Center view",title:"Center view: the game's viewport in the middle of the pane, at this zoom",size:"comfortable",onClick:d,children:e.jsx(z,{icon:Q,size:"md"})}),e.jsx(w,{"aria-label":"Zoom out",title:"Zoom out",size:"comfortable",onClick:()=>y(v.zoom/1.2),children:e.jsx(z,{icon:q,size:"md"})}),e.jsxs(V,{variant:"ghost","aria-label":"Reset zoom to 100%",title:"Reset zoom to 100%",size:"comfortable",onClick:()=>y(1),children:[Math.round(v.zoom*100),"%"]}),e.jsx(w,{"aria-label":"Zoom in",title:"Zoom in",size:"comfortable",onClick:()=>y(v.zoom*1.2),children:e.jsx(z,{icon:ee,size:"md"})})]})]})}function ge({documentId:o,view:r,hasSelection:t,onCenterSelection:i,onFrameSelection:h}){const[n,c]=p.useState(!1),v=p.useRef(null);p.useSyncExternalStore(I,L),p.useSyncExternalStore(p.useCallback(s=>O(r,s),[r]),p.useCallback(()=>A(r),[r]));const b=P(o),S=[{label:"Grid",on:G(o),toggle:()=>D(o,!G(o))},{label:"Rulers",on:b.rulers,toggle:()=>k(o,{rulers:!b.rulers})},{label:"Guides",on:b.guides,toggle:()=>k(o,{guides:!b.guides})},{label:"Origin",on:b.origin,toggle:()=>k(o,{origin:!b.origin})},{label:"Viewport",on:b.viewport,toggle:()=>k(o,{viewport:!b.viewport})}],y=s=>()=>{s(),c(!1)};return e.jsxs(e.Fragment,{children:[e.jsx(V,{ref:v,"aria-label":"View","aria-haspopup":"menu","aria-expanded":n,variant:"ghost",size:"comfortable",onClick:()=>c(!n),children:"View"}),n&&e.jsxs(se,{anchorRef:v,align:"end",clamp:!0,"aria-label":"2D view",onDismiss:()=>c(!1),children:[S.map(s=>e.jsxs(M,{role:"menuitemcheckbox","aria-checked":s.on,onSelect:y(s.toggle),children:[e.jsx("span",{className:"vgai-menu-check",children:s.on&&e.jsx(z,{icon:re,size:"xs"})}),`Show ${s.label}`]},s.label)),e.jsx(ie,{}),e.jsxs(M,{disabled:!t,onSelect:y(i),children:[e.jsx("span",{className:"vgai-menu-check"}),"Center Selection"]}),e.jsxs(M,{disabled:!t,onSelect:y(h),children:[e.jsx("span",{className:"vgai-menu-check"}),"Frame Selection"]}),e.jsxs(M,{disabled:B(r).length===0,onSelect:y(()=>de(r)),children:[e.jsx("span",{className:"vgai-menu-check"}),"Clear Guides"]})]})]})}function xe({adapter:o,selected:r}){const t=r.length===1?r[0]:null,i=t!==null&&o?.inspector?.get(t,"locked")===!0,h=i?"Unlock selected node":"Lock selected node";return e.jsx(C,{text:t?h:"Select one node to lock it",children:e.jsx(w,{"aria-label":h,"aria-pressed":i,size:"comfortable",disabled:t===null||!o?.inspector?.set,onClick:()=>{t&&o?.inspector?.set?.(t,"locked",!i)},children:e.jsx(z,{icon:i?te:oe,size:"md"})})})}function me({mode:o,view:r,containerRef:t,onExit:i}){const h=p.useSyncExternalStore(r.subscribe,r.get,r.get),[n,c]=p.useState(null);p.useEffect(()=>{const u=x=>{x.key==="Escape"&&i()};return window.addEventListener("keydown",u),()=>window.removeEventListener("keydown",u)},[i]);const v=(u,x)=>{const a=t.current?.getBoundingClientRect(),l=r.get(),g=u-(a?.left??0),f=x-(a?.top??0);return{x:(g-l.x)/l.zoom,y:(f-l.y)/l.zoom}},b=u=>{if(u.button!==0)return;u.preventDefault(),u.currentTarget.setPointerCapture(u.pointerId);const x={clientX:u.clientX,clientY:u.clientY,pose:r.get()},a=v(u.clientX,u.clientY);o==="ruler"&&c({from:a,to:a});const l=f=>{o==="pan"?r.setView(x.pose.x+f.clientX-x.clientX,x.pose.y+f.clientY-x.clientY,x.pose.zoom):c({from:a,to:v(f.clientX,f.clientY)})},g=()=>{window.removeEventListener("pointermove",l),window.removeEventListener("pointerup",g)};window.addEventListener("pointermove",l),window.addEventListener("pointerup",g,{once:!0})},S=u=>({x:h.x+u.x*h.zoom,y:h.y+u.y*h.zoom}),y=n?Math.hypot(n.to.x-n.from.x,n.to.y-n.from.y):0,s=n?Math.atan2(n.to.y-n.from.y,n.to.x-n.from.x)*180/Math.PI:0,m=n?S(n.from):null,d=n?S(n.to):null;return e.jsx("div",{"data-testid":`canvas-scene-${o}-layer`,"data-vgai-canvas-navigation-ignore":"true",onPointerDown:b,style:{position:"absolute",inset:0,zIndex:60,cursor:o==="pan"?"grab":"crosshair"},children:m&&d?e.jsxs(e.Fragment,{children:[e.jsx("svg",{style:{position:"absolute",inset:0,width:"100%",height:"100%",pointerEvents:"none"},children:e.jsx("line",{x1:m.x,y1:m.y,x2:d.x,y2:d.y,stroke:"#ff5fa2",strokeWidth:1.5})}),e.jsx("div",{"data-testid":"canvas-scene-ruler-reading",style:{position:"absolute",left:(m.x+d.x)/2+8,top:(m.y+d.y)/2+8,padding:"2px 6px",borderRadius:4,background:"rgba(24, 26, 30, .92)",color:"#fff",font:"11px ui-monospace, SFMono-Regular, Menlo, monospace",pointerEvents:"none",whiteSpace:"nowrap"},children:`${y.toFixed(1)} px · ${s.toFixed(1)}° · Δ ${(n.to.x-n.from.x).toFixed(1)}, ${(n.to.y-n.from.y).toFixed(1)}`})]}):null})}function be({adapter:o,selected:r}){const t=r.length===1?r[0]:null,i=t!==null&&o?.inspector?.properties(t).some(c=>c.path==="grouped")===!0,h=t!==null&&o?.inspector?.get(t,"grouped")===!0,n=h?"Ungroup selected node":"Group selected node with its children";return e.jsx(C,{text:t?n:"Select one node to group it",children:e.jsx(w,{"aria-label":n,"aria-pressed":h,size:"comfortable",disabled:!i||!o?.inspector?.set,onClick:()=>{t&&o?.inspector?.set?.(t,"grouped",!h)},children:e.jsx(z,{icon:ne,size:"md"})})})}export{Ce as C,ke as a,Me as b};
@@ -1 +0,0 @@
1
- import{a as e}from"./jsx-runtime-DPjLkJKQ.js";import{r as u}from"./index-nmcBqr7Y.js";import{dK as m,aK as l,dL as p}from"./index-BRJMIUK0.js";function g({value:r,onChange:o,disabled:a=!1}){const[i,s]=u.useState(r??""),n=m();u.useEffect(()=>{s(r??"")},[r]);const c=()=>{const t=i.trim();t&&t!==r&&o(t)};return r===null?e.jsxs("div",{className:"vgai-color-input",children:[e.jsx("div",{className:"vgai-color-input-mixed"}),e.jsx(l,{placeholder:"—",disabled:a,onChange:t=>{t.target.value&&o(t.target.value)},"data-mixed":"true"})]}):e.jsxs("div",{className:"vgai-color-input",children:[e.jsx(p,{value:r,disabled:a,onChange:t=>{n?.begin(),o(t.target.value)},onBlur:()=>n?.end()}),e.jsx(l,{value:i,disabled:a,onChange:t=>s(t.target.value),onBlur:c,onKeyDown:t=>{t.key==="Enter"?(c(),t.target.blur()):t.key==="Escape"&&(s(r),t.target.blur())}})]})}export{g as C};
@@ -1 +0,0 @@
1
- import{a as e}from"./jsx-runtime-DPjLkJKQ.js";import{r as o}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{aS as W,aT as H,aU as B,aV as M,aI as v,Z as P,aW as h,aX as E}from"./index-BRJMIUK0.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";function J({assetPath:n,displayName:l}){const{sheetPath:i,frameName:t}=W(n),a=`/${i}`,[s,r]=o.useState(null),[x,p]=o.useState(t),[m,u]=o.useState("fit"),[j,F]=o.useState(null),w=o.useRef(null),[y,N]=o.useState({w:320,h:240}),f=x??t,g=f?s?.frames.find(c=>c.name===f)??null:null;o.useEffect(()=>{p(t),u("fit")},[t]),o.useEffect(()=>{if(!t){r(null);return}let c=!1;return fetch(`/${H(i)}`).then(d=>d.ok?d.text():null).then(d=>{c||!d||r(B(d))}).catch(()=>{c||r(null)}),()=>{c=!0}},[t,i]),o.useEffect(()=>{const c=w.current;if(!c)return;const d=new ResizeObserver(R=>{const S=R[0]?.contentRect;S&&N({w:Math.max(1,S.width-24),h:Math.max(1,S.height-24)})});return d.observe(c),()=>d.disconnect()},[]);const b=g?.sourceWidth??j?.w??0,$=g?.sourceHeight??j?.h??0,I=M(m,b,$,y.w,y.h),k=l??f??i.split("/").pop()??n;return e.jsxs("div",{"data-testid":"image-asset-document",style:{height:"100%",minHeight:240,display:"flex",flexDirection:"column",minWidth:0},children:[e.jsx(T,{title:k,srcWidth:b,srcHeight:$,scaleMode:m,scale:I,onScaleMode:u}),e.jsx(z,{stageRef:w,frameName:t,frame:g,sheet:s,sheetUrl:a,title:k,scale:I,onNatural:F}),s&&s.frames.length>1?e.jsx(C,{sheetUrl:a,frames:s.frames,activeName:f,onPick:p}):null]})}function T({title:n,srcWidth:l,srcHeight:i,scaleMode:t,scale:a,onScaleMode:s}){return e.jsxs("div",{style:{display:"flex",flexWrap:"wrap",alignItems:"center",gap:6,padding:"6px 8px"},children:[e.jsx(v,{tone:"dim",variant:"label",children:n}),l>0&&e.jsxs(v,{tone:"muted",variant:"code",children:[l," × ",i,t==="fit"?` · ${O(a)}`:""]}),e.jsx("span",{style:{flex:1}}),[1,4,8,"fit"].map(r=>e.jsx(P,{type:"button",size:"compact",shape:"segment","aria-pressed":t===r,variant:t===r?"primary":"secondary",onClick:()=>s(r),children:r==="fit"?"Fit":`${r}×`},String(r)))]})}function z({stageRef:n,frameName:l,frame:i,sheet:t,sheetUrl:a,title:s,scale:r,onNatural:x}){let p;return l&&!i?p=e.jsx(v,{tone:"muted",variant:"body",children:t?`No sprite named ${l}`:"Loading sprite…"}):i?p=e.jsx(E,{sheetUrl:a,frame:i,scale:r}):p=e.jsx("img",{src:a,alt:s,style:{imageRendering:"pixelated",display:"block",transform:`scale(${r})`,transformOrigin:"center center"},onLoad:m=>{const u=m.currentTarget;x({w:u.naturalWidth,h:u.naturalHeight})}}),e.jsx("div",{ref:n,className:"vgai-asset-transparency-well","data-testid":"sprite-stage",style:{flex:1,minHeight:0,display:"flex",alignItems:"center",justifyContent:"center",overflow:"auto"},children:p})}function C({sheetUrl:n,frames:l,activeName:i,onPick:t}){return e.jsx("div",{"data-testid":"sprite-filmstrip",style:{display:"flex",gap:6,overflowX:"auto",padding:"8px 8px 10px",borderTop:`1px solid ${h[3]}`},children:l.map(a=>{const s=a.name===i;return e.jsxs("button",{type:"button",title:a.name,"aria-pressed":s,onClick:()=>t(a.name),style:{border:s?`1px solid ${h[1]}`:"1px solid transparent",background:"transparent",padding:2,cursor:"pointer",flex:"0 0 auto"},children:[e.jsx(E,{sheetUrl:n,frame:a,maxEdge:40}),e.jsx("div",{style:{fontSize:9,color:s?h[1]:h[3],maxWidth:56,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:a.name})]},a.name)})})}function O(n){return n>=1?`${n}×`:`1/${Math.round(1/n)}×`}export{J as ImageViewer};
@@ -1 +0,0 @@
1
- import{a as t}from"./jsx-runtime-DPjLkJKQ.js";import{Object3DSnapshotDocument as m}from"./EntityModelDocument-CzUHsH9E.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./editor-shell-store-ChLcVeNB.js";import"./output-pass-HurwNl0G.js";import"./three.module-BLhyNg0e.js";import"./three.core-3arARmh6.js";import"./Pass-D1MRT672.js";import"./editor-layers-BDJnAAzj.js";import"./workspace-arrangement-BdAlBwvd.js";import"./index-BRJMIUK0.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-Bpj7diUS.js";import"./entity-object-JmYMfLsx.js";import"./three-contract-Dkt6PmWY.js";import"./live-mixers-B-bwLZ7c.js";import"./asset-preview-B1tDziF1.js";import"./renderer-ownership-BovSEcLv.js";import"./hierarchy-marks-Cc_3lxw6.js";import"./studio-environment-DRxxq_QX.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-B89HKcvd.js";import"./three-state-DwFE3ay2.js";import"./standard-viewport-dressing-BCA51Tum.js";import"./content-bounds-BeuIXKYu.js";import"./preview-renderer-BrYNFV1p.js";import"./live-gesture-lock-DJbrjOqf.js";import"./model-inspection-CXHxrafK.js";import"./three-viewport-presentation-B0z_cECu.js";import"./clip-planes-CnAI6DZn.js";import"./three-TCuY32m_.js";import"./component-instance-root-B0C5oNEm.js";import"./viewport-editor-controls-BYaAZ_Ku.js";import"./model-thumbnail-BEKPWg4l.js";import"./OrbitControls-B13MKuwC.js";import"./LineSegments2-DN9pUfWA.js";import"./three.quarks.esm-C_HmSKXo.js";import"./three-integration-BdN5Nhsg.js";import"./host-hierarchy-objects-BV3WqU2w.js";import"./layered-pick-kiQf53t5.js";import"./root-stacking-BEd9ZvxC.js";import"./object3d-document-session-registry-DJDEDM0p.js";import"./viewport-door-Bj_ZIP85.js";import"./scene-framing-BQt72ZCw.js";import"./source-object3d-authoring-adapter-DF679Ncb.js";import"./three-projection-core-CG01r5Ta.js";import"./editor-presentation-activity-C7SNSmTd.js";import"./transport-strip-CUjNltnb.js";import"./viewport-surface-status-cwCiBGa7.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 g}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{ad as n,_ as b,gY as z,aR as F,gZ as M,b2 as J}from"./index-BRJMIUK0.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:m,to:i,revision:y}=d.value,f=m===i?e.view.Decoration.widget({widget:new o(y),side:-1}).range(m):e.view.Decoration.mark({class:`cm-source-change cm-source-change-${y%2}`}).range(m,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 Y({value:e,language:o,fontSize:t=11,maxHeight:r,ariaLabel:c,followChanges:s=!1}){const l=g.useRef(null),d=g.useRef(null),m=g.useRef(null),i=g.useRef(null),y=g.useRef(0),f=g.useRef(e);f.current=e;const[p,I]=g.useState(null),[N,$]=g.useState(!1);g.useEffect(()=>{let u=!1;return W().then(h=>{u||I(h)},()=>{u||$(!0)}),()=>{u=!0}},[]),g.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,m.current=h,()=>{i.current!==null&&clearTimeout(i.current),i.current=null,m.current=null,d.current=null,w.destroy()}},[p,o,t,r]),g.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=m.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 q={fontSize:11,color:n.content.muted,marginBottom:2};function X({assetPath:e}){const[o,t]=g.useState(null),[r,c]=g.useState("json"),[s,l]=g.useState(!1),d=e.split("/").pop()??e;return g.useEffect(()=>{let m=!1;return t(null),l(!1),fetch(z(e)).then(i=>i.text()).then(i=>{try{const y=JSON.parse(i);m||(c("json"),t(JSON.stringify(y,null,2)))}catch{m||(c("text"),t(i))}}).catch(()=>{m||l(!0)}),()=>{m=!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(Y,{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:q,children:"Path"}),a.jsx("div",{style:{fontSize:11,color:n.content.primary,wordBreak:"break-all"},children:e})]})})]})}function Z({documentId:e,assetPath:o,displayName:t,active:r,sections:c,status:s}){const[l,d]=g.useState({kind:"loading"}),m=M();if(g.useEffect(()=>{if(!r){d({kind:"loading"});return}const i=new AbortController;return d({kind:"loading"}),(async()=>{for(const f of m){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,m]),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(X,{assetPath:o})})}const ie=Object.freeze(Object.defineProperty({__proto__:null,JsonAssetDocument:Z},Symbol.toStringTag,{value:"Module"}));export{Y as C,Z as J,ie as a,re as c};
@@ -1 +0,0 @@
1
- import{a as s}from"./jsx-runtime-DPjLkJKQ.js";import{r as e}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{ad as a}from"./index-BRJMIUK0.js";import{l as w,d as f}from"./asset-preview-B1tDziF1.js";import{m as x,l as E,c as S}from"./model-thumbnail-BEKPWg4l.js";import{O as M}from"./StageHost-B89HKcvd.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./editor-layers-BDJnAAzj.js";import"./workspace-arrangement-BdAlBwvd.js";import"./renderer-ownership-BovSEcLv.js";import"./hierarchy-marks-Cc_3lxw6.js";import"./studio-environment-DRxxq_QX.js";import"./user-data-Bpj7diUS.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";import"./three-state-DwFE3ay2.js";import"./editor-shell-store-ChLcVeNB.js";import"./output-pass-HurwNl0G.js";import"./Pass-D1MRT672.js";import"./entity-object-JmYMfLsx.js";import"./three-contract-Dkt6PmWY.js";import"./standard-viewport-dressing-BCA51Tum.js";import"./content-bounds-BeuIXKYu.js";import"./preview-renderer-BrYNFV1p.js";import"./live-mixers-B-bwLZ7c.js";import"./live-gesture-lock-DJbrjOqf.js";import"./model-inspection-CXHxrafK.js";import"./three-viewport-presentation-B0z_cECu.js";import"./clip-planes-CnAI6DZn.js";import"./three-TCuY32m_.js";import"./component-instance-root-B0C5oNEm.js";import"./viewport-editor-controls-BYaAZ_Ku.js";import"./OrbitControls-B13MKuwC.js";import"./LineSegments2-DN9pUfWA.js";import"./three.quarks.esm-C_HmSKXo.js";import"./three-integration-BdN5Nhsg.js";import"./host-hierarchy-objects-BV3WqU2w.js";import"./layered-pick-kiQf53t5.js";import"./root-stacking-BEd9ZvxC.js";import"./object3d-document-session-registry-DJDEDM0p.js";import"./viewport-door-Bj_ZIP85.js";import"./scene-framing-BQt72ZCw.js";import"./source-object3d-authoring-adapter-DF679Ncb.js";import"./three-projection-core-CG01r5Ta.js";import"./editor-presentation-activity-C7SNSmTd.js";import"./transport-strip-CUjNltnb.js";import"./viewport-surface-status-cwCiBGa7.js";function Co({documentId:g,assetPath:o,displayName:d,active:p}){const[b,n]=e.useState(null),[u,c]=e.useState(null);e.useEffect(()=>{if(!p){n(null);return}const m=new AbortController;let l=null;n(null),c(null);const i=x(o);return(i==="glb"||i==="gltf"||i==="spz"?w(o,m.signal):i?E({url:o,format:i}).then(S).then(r=>({root:r,sourceBytes:null})):Promise.reject(new Error(`No native Three.js model loader supports ${o}.`))).then(r=>{if(m.signal.aborted){f(r.root);return}l=r.root,n(r)},r=>{m.signal.aborted||c(r instanceof Error?r.message:String(r))}),()=>{m.abort(),l&&f(l)}},[p,o]);const t=b?.root??null,j=e.useCallback(()=>{if(!t)throw new Error(`Model asset ${o} is not loaded.`);return{root:t,animations:t.animations,dispose(){}}},[o,t]);return u?s.jsx("div",{role:"alert",style:{padding:20,color:a.semantic.danger},children:u}):t?s.jsx(M,{documentId:g,sourcePath:o,displayName:d,build:j,active:p,assetType:"model",modelSource:{kind:"project-file",path:o}}):s.jsxs("div",{style:{padding:20,color:a.content.muted},children:["Loading ",d,"…"]})}export{Co as ModelAssetDocument};
@@ -1 +0,0 @@
1
- import{a as s}from"./jsx-runtime-DPjLkJKQ.js";import{dM as ee,dN as N,dO as se,dP as z,dQ as ie,cA as te,cB as L,dR as $,aF as ae,aG as re,dS as S,dT as oe,d4 as B,cF as v,aJ as f,$ as n,dt as ne,Z as F,d6 as le,c$ as ce,cR as A,cS as d,cU as U,cT as de,dU as pe,dV as me,dW as W,du as H,dX as ue,dY as he,dZ as G,aK as ge,aI as K,cH as ve,aH as _,d_ as be,d$ as xe,e0 as je,d0 as we,e1 as Se,e2 as fe}from"./index-BRJMIUK0.js";import{r as a}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{e as ye,f as Ce}from"./asset-preview-B1tDziF1.js";import{s as Pe}from"./model-inspection-CXHxrafK.js";import{s as Ve,o as Z,a as ke}from"./object3d-document-session-registry-DJDEDM0p.js";import{v as Ee}from"./viewport-door-Bj_ZIP85.js";import{v as q,V as Me,a as De,p as Te,b as Oe,c as Re}from"./ViewportShadingMenu-CXPi6fl8.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-BDJnAAzj.js";import"./workspace-arrangement-BdAlBwvd.js";import"./renderer-ownership-BovSEcLv.js";import"./hierarchy-marks-Cc_3lxw6.js";import"./studio-environment-DRxxq_QX.js";import"./user-data-Bpj7diUS.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 J=()=>()=>{},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,Z,Z);const i=ke(t);a.useSyncExternalStore(ee,N,N),a.useSyncExternalStore(i?.subscribe??J,i?.getSnapshot??b,i?.getSnapshot??b),a.useSyncExternalStore(se,z,z);const l=ie(t);a.useSyncExternalStore(l?.subscribe??J,l?.getSnapshot??b,l?.getSnapshot??b);const Q=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,L,L),!i)return null;const r=i.presentation(),{lighting:m}=$(t),u=ae(t),D=u?re(u.stageKind):null,X=u?.documentLayer?.all?.lighting?.studioPreset===S.id||D?.all?.lighting?.studioPreset===S.id,x=u?oe(u.stageKind):!1,T=e=>x?{modes:{[$(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)),Y=[...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"}]:[]],O=async e=>{if(p){h(null);try{await fe().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(B,{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(f,{"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(A,{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(U,{}),["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(f,{"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(B,{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:Y,segments:x?Te(j):De,children:[W().length>0?s.jsxs("label",{children:[s.jsx("span",{children:"View"}),s.jsxs(H,{"aria-label":"View preset",value:"",onChange:e=>{e.target.value&&ue(t,e.target.value)},children:[s.jsx("option",{value:"",children:"Choose…"}),W().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(H,{"aria-label":"Lighting",value:m.source==="studio"?`studio:${m.studioPreset}`:m.source,onChange:e=>{const o=e.target.value;G(t,T(o.startsWith("studio:")?{source:"studio",studioPreset:o.slice(7)}:{source:o}))},children:[he().filter(e=>e.id!==S.id||X).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,T({tone:{exposure:Number(e.target.value)}}))}),s.jsx(K,{as:"span",variant:"caption",children:m.tone.exposure.toFixed(1)})]})]}),s.jsx(Oe,{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=>Q.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(f,{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(A,{anchorRef:M,clamp:!0,"aria-label":"Asset preview actions",onDismiss:()=>c(!1),style:{minWidth:210},children:[s.jsxs(d,{onSelect:()=>{c(!1),I()},children:[s.jsx(n,{icon:xe,size:"sm"}),"Capture preview"]}),p?s.jsxs(s.Fragment,{children:[s.jsx(d,{onSelect:()=>{c(!1),O(!1)},children:"Save thumbnail framing"}),s.jsx(d,{onSelect:()=>{c(!1),O(!0)},children:"Reset thumbnail framing"})]}):null,s.jsx(U,{}),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(Se,{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-B89HKcvd.js","assets/index-BRJMIUK0.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-0Lm0Nf1M.css","assets/three-state-DwFE3ay2.js","assets/editor-shell-store-ChLcVeNB.js","assets/output-pass-HurwNl0G.js","assets/three.module-BLhyNg0e.js","assets/three.core-3arARmh6.js","assets/Pass-D1MRT672.js","assets/editor-layers-BDJnAAzj.js","assets/workspace-arrangement-BdAlBwvd.js","assets/user-data-Bpj7diUS.js","assets/entity-object-JmYMfLsx.js","assets/three-contract-Dkt6PmWY.js","assets/standard-viewport-dressing-BCA51Tum.js","assets/content-bounds-BeuIXKYu.js","assets/hierarchy-marks-Cc_3lxw6.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-CXHxrafK.js","assets/three-viewport-presentation-B0z_cECu.js","assets/clip-planes-CnAI6DZn.js","assets/three-TCuY32m_.js","assets/component-instance-root-B0C5oNEm.js","assets/viewport-editor-controls-BYaAZ_Ku.js","assets/model-thumbnail-BEKPWg4l.js","assets/studio-environment-DRxxq_QX.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-BdN5Nhsg.js","assets/host-hierarchy-objects-BV3WqU2w.js","assets/layered-pick-kiQf53t5.js","assets/root-stacking-BEd9ZvxC.js","assets/object3d-document-session-registry-DJDEDM0p.js","assets/viewport-door-Bj_ZIP85.js","assets/asset-preview-B1tDziF1.js","assets/bitmap-label-Ct4k6ehY.js","assets/scene-framing-BQt72ZCw.js","assets/source-object3d-authoring-adapter-DF679Ncb.js","assets/three-projection-core-CG01r5Ta.js","assets/editor-presentation-activity-C7SNSmTd.js","assets/transport-strip-CUjNltnb.js","assets/viewport-surface-status-cwCiBGa7.js"])))=>i.map(i=>d[i]);
2
- import{ac as r,_ as a}from"./index-BRJMIUK0.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-cwCiBGa7.js";const s=n.lazy(async()=>({default:(await a(()=>import("./StageHost-B89HKcvd.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{bX as L,bD as R,bI as U,bY as W,di as M,ad as i,$ as b,fD as w,b3 as N,aR as C,du as J,Z as V,cT as _,fE as G}from"./index-BRJMIUK0.js";import{r}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{d as K}from"./asset-editor-persistence-BGWIqZdk.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,X=new Set;function I(){for(const e of X)e()}function Y(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 Z={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,D]=r.useState(null),[$,v]=r.useState(!0),[A,B]=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),B(null),L(e.source,e.id).then(a=>{s||(z(a),a.length>0&&D(a[0]))}).catch(a=>{s||(z([]),B(a instanceof R?U(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=Y(s,e.name);y(s,{stage:"fetch",loaded:0,total:o.sizeBytes??0,status:"running"}),g("downloading");try{const d={source:e.source,id:e.id,name:e.name,url:o.url,format:o.format,jobId:s,signal:a.controller.signal};o.includes&&(d.includes=o.includes);const u=await K(d);u.ok&&u.path?(y(s,{stage:"commit",loaded:o.sizeBytes??1,total:o.sizeBytes??1,status:u.alreadyExists?"skipped":"imported",message:u.path}),g("done"),M(`${e.name} added to Content — drag it from there into the viewport to place it.`),f?.(`/${u.path}`)):(y(s,{status:"failed",message:u.error??"The import was rejected."}),g("error"))}catch(d){y(s,{status:a.controller.signal.aborted?"cancelled":"failed",message:d instanceof Error?d.message:String(d)}),g("error")}},[e,o,f]),k=t.jsx("img",{src:j?"/__editor/asset-library/local-placeholder.svg":e.thumbnailUrl,alt:j?`${e.name} preview unavailable`:e.name,onError:()=>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(N,{route:"model-preview",documentId:"",assetPath:m.path,...m.materialPath?{materialPath:m.materialPath}:{},displayName:e.name,active:!0,whenUnregistered:k})}):k}),j&&t.jsx("div",{role:"status",style:{color:i.content.dim,fontSize:10},children:"The catalog preview could not be loaded; showing the typed fallback."}),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..."]}):A?t.jsxs("div",{role:"alert",style:{fontSize:11,color:i.content.muted},children:["Delivery unavailable: ",A]}):h.length>0?t.jsxs(t.Fragment,{children:[t.jsx(J,{"aria-label":"Asset delivery",value:o?h.indexOf(o):0,onChange:s=>D(h[Number(s.target.value)]??null),style:Z,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 z}from"./configurations-BXU4GGbV.js";import{c as F,P as _,b as G,d as $,s as B,a as L}from"./run-selection-DzEkGesJ.js";import{Z as A,$ as f,gv as V,aI as v,eO as q,cR as S,cS as R,gw as Y,gx as U,q as P,d2 as w,a0 as p,gy as I,gz as D,aJ as N}from"./index-BRJMIUK0.js";import{r as l}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{i as H,g as J,d as K}from"./active-ingest-DA426a81.js";import"./client-DNXj_opT.js";import"./ingest-source-persistence-Dmdo-UBp.js";import"./capability-coverage-DZ-onC5j.js";import{v as W,w as k,s as X,x as Z,y as C,d as Q,h as E,e as ee,k as se,p as te}from"./play-mode-DICV4cKP.js";const O="play-control",T=4;function ae(s){return Math.min(T,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(W,k,k),[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:T},(o,c)=>c+1).map(o=>e.jsx(R,{role:"menuitemradio","aria-checked":o===r,onSelect:()=>{X(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(w,{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:O,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(I,{}),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(I,{}),e.jsx(re,{regime:i})]})]})]})}function Pe({placement:s="launcher"}){const n=l.useSyncExternalStore(Y,U),{session:a}=P();l.useSyncExternalStore(a.subscribe,a.version,a.version);const i=a.playState(),r=l.useSyncExternalStore(Z,C,C),[,o]=l.useState(0),c=ce(),t=H()?J():null;if(t)return e.jsxs(w,{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:O,onClick:()=>{t.playing?t.pause():t.play(),o(d=>d+1)}}),s==="runtime"&&K()&&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 L();if(!d.ok){P().notify({tone:"error",title:d.title,detail:d.detail});return}d.started&&c.refresh(),await ee()},x=()=>{E(),B().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:()=>Q(),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:D})}),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=_;function ce(){const[s,n]=l.useState([]),[a,i]=l.useState(F),r=l.useCallback(async()=>{const u=await z().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=G(s,a),t=l.useCallback(u=>{i(u),$(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:D,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 E,dp as V,dq as B,dr as p,ds as F,cE as I,Z as w,aJ as v,$ as b,cL as W,cM as Z,dt as H,du as T,dv as P}from"./index-BRJMIUK0.js";import{r as l}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{s as A,g as D,a as G,b as J,c as N,d as j,f as q,t as L}from"./react-story-board-GaXqr03H.js";const z={fill:null,desktop:{width:1440,height:900},tablet:{width:768,height:1024},mobile:{width:390,height:844}};function X({boardViewport:o,containerRef:d,selectViewport:r,viewportValue:h}){return t.jsxs(t.Fragment,{children:[t.jsxs(T,{"aria-label":"Responsive viewport",title:o?.locked?"Viewport is locked by this story’s globals.viewport":"Responsive viewport",value:h,disabled:o?.locked===!0,onChange:a=>r(a.target.value),className:"vgai-react-viewport-select",children:[t.jsx("option",{value:"fill",children:"Responsive"}),o?o.choices.map(a=>t.jsxs("option",{value:a.id,children:[a.label," · ",a.width,"×",a.height]},a.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"})]})]}),o&&t.jsx(v,{"aria-label":"Rotate viewport",title:o.locked?"Viewport is locked by this story’s globals.viewport":"Rotate viewport",size:"comfortable",disabled:o.locked,onClick:()=>L(d.current),children:t.jsx(b,{icon:P,size:"md"})})]})}function U({containerRef:o,context:d,boardOnly:r=!1}){const h=E();l.useSyncExternalStore(h.subscribe,h.getSnapshot);const a=l.useSyncExternalStore(V,B),c=l.useSyncExternalStore(A,D),m=l.useSyncExternalStore(G,()=>J(o.current),()=>null),x=l.useCallback(i=>{const s=o.current;if(!s)return;const e=Math.min(4,Math.max(.1,i)),n=s.clientWidth/2,g=s.clientHeight/2,u=(n-a.x)/a.zoom,M=(g-a.y)/a.zoom;p(n-u*e,g-M*e,e)},[o,a]),k=l.useCallback(()=>{const i=o.current,s=[...h.selectedEntityIds].at(-1);if(!i||!s)return;const e=d?.adapter.rects?.rect(s);if(!e||e.width<=0||e.height<=0)return;const n=Math.max(1,i.clientWidth-96),g=Math.max(1,i.clientHeight-96),u=Math.min(4,Math.max(.1,Math.min(n/e.width,g/e.height)));p(i.clientWidth/2-(e.x+e.width/2)*u,i.clientHeight/2-(e.y+e.height/2)*u,u)},[o,d,h]),S=l.useCallback(i=>{const s=o.current;if(m){N(s,i==="fill"?null:i);return}const e=z[i];if(!s||e===null){j(null,null),p(0,0,1);return}j(e.width,e.height);const n=Math.min(1,Math.max(.1,Math.min((s.clientWidth-96)/e.width,(s.clientHeight-96)/e.height)));p((s.clientWidth-e.width*n)/2,(s.clientHeight-e.height*n)/2,n)},[m,o]),y=l.useCallback(()=>{const i=o.current;i&&q(i)},[o]),f=m!==null,C=d?.kind==="dom"&&!!d.adapter.rects;if(r?!f:!C)return null;const R=m?m.selectedViewportId??"fill":Object.entries(z).find(([,i])=>i===null?c.width===null:i.width===c.width&&i.height===c.height)?.[0]??"fill";return t.jsxs(t.Fragment,{children:[!f&&c.width!==null&&c.height!==null&&t.jsx("div",{"data-testid":"react-canvas-device-frame",style:{position:"absolute",left:0,top:0,zIndex:0,width:c.width,height:c.height,transform:F(a),transformOrigin:"0 0",pointerEvents:"none",background:"#fff",boxShadow:"0 0 0 1px #ffffff40, 0 8px 30px #0009"}}),t.jsxs(I,{label:r?"2D component board view":"React canvas view","data-testid":r?"canvas-board-zoom-controls":"react-canvas-zoom-controls","data-vgai-canvas-navigation-ignore":"true",className:"vgai-react-canvas-controls",children:[!r&&t.jsx(X,{boardViewport:m,containerRef:o,selectViewport:S,viewportValue:R}),f&&t.jsx(w,{variant:"ghost","aria-label":"Fit story board",title:"Fit all stories",size:"comfortable",onClick:y,children:"Fit board"}),t.jsx(v,{"aria-label":"Zoom out",title:"Zoom out",size:"comfortable",onClick:()=>x(a.zoom/1.2),children:t.jsx(b,{icon:W,size:"md"})}),t.jsxs(w,{variant:"ghost","aria-label":"Reset zoom to 100%",title:"Reset zoom to 100%",size:"comfortable",onClick:()=>x(1),children:[Math.round(a.zoom*100),"%"]}),t.jsx(v,{"aria-label":"Zoom in",title:"Zoom in",size:"comfortable",onClick:()=>x(a.zoom*1.2),children:t.jsx(b,{icon:Z,size:"md"})}),!r&&t.jsx(v,{"aria-label":"Zoom to selection",title:"Zoom to selection",size:"comfortable",onClick:k,children:t.jsx(b,{icon:H,size:"md"})})]})]})}export{U as R};
@@ -1 +0,0 @@
1
- import{a as d}from"./jsx-runtime-DPjLkJKQ.js";import{r as c}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{ha as Ve,cE as Ue,dc as wt,hb as qt,hc as te,hd as ee,aJ as ne,$ as oe,he as Ze,gy as Je,hf as Qe,hg as qe,hh as tn,hi as O,f5 as en,J as nn,av as on,cy as rn,hj as Tt,hk as sn,hl as S,hm as Gt,hn as Bt,ho as Mt,hp as rt,hq as an,hr as ln,hs as cn,ht as dn,hu as un,hv as pn,hw as fn,hx as ie,hy as hn,hz as xn,hA as gn,hB as bn,hC as yn,hD as vn,hE as mn,f1 as be,hF as wn,hG as En,ad as st,hH as Sn,hI as ye,hJ as Rn,hK as Cn,ds as kn,hL as Pn,hM as zn,ay as ve,hN as Dn,hO as In,hP as Ln,hQ as On,hR as jn,hS as Tn,g9 as Bn,cS as Mn,az as $n,cD as Xn}from"./index-BRJMIUK0.js";import{s as Gn,i as Fn,r as re}from"./eyedropper-session-bjPXnfeX.js";import{p as Yn,a as An}from"./layered-pick-kiQf53t5.js";import{z as Hn,j as _n}from"./react-story-board-GaXqr03H.js";import{v as Ft}from"./viewport-editor-controls-BYaAZ_Ku.js";import{l as Nn}from"./inspect-Dr4qvDpJ.js";const se=new WeakMap;let ae=0;function J(e){let n=se.get(e);return n||(n={guides:[],listeners:new Set,revision:0},se.set(e,n)),n}function Et(e){e.revision+=1;for(const n of e.listeners)n()}function Kn(e){return J(e).guides}function Wn(e){return J(e).revision}function Vn(e,n){const o=J(e);return o.listeners.add(n),()=>o.listeners.delete(n)}function ni(e,n,o){ae+=1;const r=J(e),u=`canvas-guide-${ae}`;return r.guides=[...r.guides,{id:u,axis:n,value:o}],Et(r),u}function oi(e,n,o){const r=J(e),u=r.guides.map(s=>s.id===n?{...s,value:o}:s);u.every((s,p)=>s===r.guides[p])||(r.guides=u,Et(r))}function ii(e,n){const o=J(e),r=o.guides.filter(u=>u.id!==n);r.length!==o.guides.length&&(o.guides=r,Et(o))}function ri(e){const n=J(e);n.guides.length!==0&&(n.guides=[],Et(n))}function le(e,n){for(const o of n){const r=O(e,o.id);if(!r)continue;const u={};o.x!==void 0&&(u.x=o.x),o.y!==void 0&&(u.y=o.y),Object.keys(u).length!==0&&(r.begin(o.id),r.apply(o.id,u),r.end(o.id))}}const Un=[{op:"left",testId:"align-left",label:"Align left",icon:qt},{op:"hcenter",testId:"align-hcenter",label:"Align horizontal center",icon:te},{op:"right",testId:"align-right",label:"Align right",icon:ee},{op:"top",testId:"align-top",label:"Align top",icon:qt,rotate:!0},{op:"vcenter",testId:"align-vcenter",label:"Align vertical center",icon:te,rotate:!0},{op:"bottom",testId:"align-bottom",label:"Align bottom",icon:ee,rotate:!0}],Zn=[{axis:"horizontal",testId:"distribute-horizontal",label:"Distribute horizontally",icon:Qe},{axis:"vertical",testId:"distribute-vertical",label:"Distribute vertically",icon:qe}];function Jn(e){const r=e.y-30-8;return{left:e.x,top:r<0?e.y+e.height+8:r}}function Qn({adapter:e,entries:n}){if(n.length<2)return null;const o=Ve(n.map(p=>p.rect));if(!o)return null;const{left:r,top:u}=Jn(o),s=n.length>=3;return d.jsxs(Ue,{label:"Align and distribute","data-testid":"align-toolbar",style:{position:"absolute",left:r,top:u,zIndex:wt.overlayLow,gap:2,padding:3},children:[Un.map(({op:p,testId:x,label:y,icon:b,rotate:v})=>d.jsx(ne,{"data-testid":x,title:y,"aria-label":y,variant:"ghost",size:"compact",onClick:()=>le(e,Ze(n,p)),children:d.jsx(oe,{icon:b,"aria-hidden":"true",style:v?{transform:"rotate(90deg)"}:void 0})},p)),s&&d.jsxs(d.Fragment,{children:[d.jsx(Je,{}),Zn.map(({axis:p,testId:x,label:y,icon:b})=>d.jsx(ne,{"data-testid":x,title:y,"aria-label":y,variant:"ghost",size:"compact",onClick:()=>le(e,tn(n,p)),children:d.jsx(oe,{icon:b,"aria-hidden":"true"})},p))]})]})}function qn({rect:e,initialText:n,onCommit:o,onCancel:r}){const[u,s]=c.useState(n),p=c.useRef(null),x=c.useRef(!1);c.useEffect(()=>{const v=p.current;v&&(v.focus(),v.select())},[]);const y=()=>{x.current||(x.current=!0,o(u))},b=()=>{x.current||(x.current=!0,r())};return d.jsx(en,{ref:p,"data-testid":"world-text-editor",value:u,onChange:v=>s(v.target.value),onBlur:y,onKeyDown:v=>{v.key==="Escape"?(v.stopPropagation(),b()):v.key==="Enter"&&!v.shiftKey&&(v.preventDefault(),y())},"data-variant":"inline-editor",style:{position:"absolute",left:e.x,top:e.y,width:Math.max(e.width,40),height:Math.max(e.height,20),boxSizing:"border-box",zIndex:wt.overlayLow,pointerEvents:"auto",resize:"none"}})}const k=st.accent.default,to=wt.overlayLow,mt=5;function eo(e,n,o){return e?!1:Ft()?.activate(n,o)??!1}function no(e,n,o,r,u,s){const p=e?null:Ft()?.hover(n,o)??null;u(p),s(p?null:r(n,o))}function oo(e,n){const o=e.hierarchy.node(n);return o?`${o.label}·${o.kind}`:n}function io(e){return e instanceof ve?e.childAdapters().some(n=>!!n.adapter.rects):!!e.rects}function ro(e){const n=e instanceof ve?e.childAdapters():[{worldId:"",adapter:e}],o=[];for(const{worldId:r,adapter:u}of n)if(u.rects&&!(r&&$n(r)))for(const s of Xn(u)){if(u.inspector?.get(s,"locked")===!0)continue;const p=u.rects.rect(s);p&&o.push({id:s,rect:p})}return o}function so(e,n){return e.x<n.x+n.width&&e.x+e.width>n.x&&e.y<n.y+n.height&&e.y+e.height>n.y}function ao(e,n,o){if(!o)return[n];const r=new Set(e);return r.has(n)?r.delete(n):r.add(n),[...r]}function lo(e,n,o,r){return n&&!!o&&(o.width>mt||o.height>mt)&&o?ro(e).filter(p=>so(o,p.rect)).map(p=>p.id):r?null:[]}function co(e,n,o,r){return e?"grabbing":n?"grab":o||r?"crosshair":"default"}function W(e){try{e.currentTarget.setPointerCapture?.(e.pointerId)}catch{}}function $t(e){e.currentTarget.hasPointerCapture?.(e.pointerId)&&e.currentTarget.releasePointerCapture?.(e.pointerId)}function uo(e,n){if(n!==null)return!1;const o=e.currentTarget.parentElement?.parentElement??null;return _n(o,e.clientX,e.clientY)}function Xt(e,n,o){return!e||n===o||n==="combined"||n==="select"}function ce(e,n){return{position:"absolute",left:e.x,top:e.y,width:e.width,height:e.height,borderStyle:"solid",borderColor:k,borderWidth:n?2:1,background:n?`color-mix(in srgb, ${k} 6%, transparent)`:"transparent",boxSizing:"border-box",pointerEvents:"none"}}function po(e,n,o){if(!e)return{left:n.x+n.width/2-M/2,top:n.y-o-M/2};const r=(e.tl.x+e.tr.x)/2,u=(e.tl.y+e.tr.y)/2,s=e.tl.x-e.bl.x,p=e.tl.y-e.bl.y,x=Math.hypot(s,p)||1;return{left:r+s/x*o-M/2,top:u+p/x*o-M/2}}function fo(e,n){const o=Math.hypot(e.tr.x-e.tl.x,e.tr.y-e.tl.y),r=Math.hypot(e.bl.x-e.tl.x,e.bl.y-e.tl.y),u=(e.tl.x+e.br.x)/2,s=(e.tl.y+e.br.y)/2;return{position:"absolute",left:u-o/2,top:s-r/2,width:o,height:r,transform:`rotate(${ye(e)}rad)`,transformOrigin:"center",borderStyle:"solid",borderColor:k,borderWidth:n,background:"transparent",boxSizing:"border-box",pointerEvents:"none"}}function ho(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:k,borderRadius:3,pointerEvents:"none",whiteSpace:"nowrap"}}const yt=10,de=48;function ue(e,n){return{position:"absolute",left:e.x-yt/2,top:e.y-yt/2,width:yt,height:yt,background:"#fff",border:`1px solid ${k}`,boxSizing:"border-box",cursor:n,pointerEvents:"auto"}}const M=12,me=24;function xo(e){return{position:"absolute",left:e.x+e.width/2-M/2,top:e.y-me-M/2,width:M,height:M,borderRadius:"50%",background:"#fff",border:`1px solid ${k}`,boxSizing:"border-box",cursor:"grab",padding:0,pointerEvents:"auto"}}const pe=12;function go(e){return{position:"absolute",left:e.position[0],top:e.position[1],width:pe,height:pe,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 bo(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 ${k}`,boxSizing:"border-box",color:k,cursor:"crosshair",fontSize:9,fontFamily:"'SF Mono', 'Fira Code', Menlo, Consolas, monospace",fontWeight:700,lineHeight:1,padding:0,pointerEvents:"auto",touchAction:"none"}}function yo(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:k,borderRadius:3,pointerEvents:"none",whiteSpace:"nowrap"}}const vo="rgba(46, 204, 113, 0.25)",mo="rgba(230, 126, 34, 0.25)";function wo(e){return{position:"absolute",left:e.x,top:e.y,width:e.width,height:e.height,background:e.kind==="padding"?vo:mo,boxSizing:"border-box",cursor:e.cursor,pointerEvents:"auto"}}function Eo(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 So(e){return{position:"absolute",left:e.x,top:e.y,width:e.width,height:e.height,border:`2px dashed ${k}`,background:`color-mix(in srgb, ${k} 15%, transparent)`,boxSizing:"border-box",pointerEvents:"none",opacity:.7}}function Ro(e){return{position:"absolute",left:e.x,top:e.y,width:e.width,height:e.height,background:"#ff5fa2",borderRadius:2,pointerEvents:"none"}}const Yt="#ff2d92",vt=6;function Co(e){const n=e.orientation==="horizontal";return{position:"absolute",left:Math.min(e.x1,e.x2),top:Math.min(e.y1,e.y2),width:n?Math.abs(e.x2-e.x1):1,height:n?1:Math.abs(e.y2-e.y1),background:Yt,pointerEvents:"none"}}function fe(e,n,o){return{position:"absolute",left:o?e:e-vt/2,top:o?n-vt/2:n,width:o?1:vt,height:o?vt:1,background:Yt,pointerEvents:"none"}}function ko(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:Yt,borderRadius:2,pointerEvents:"none",whiteSpace:"nowrap"}}const he="#f24822";function Po(e){const n=e.orientation==="vertical";return{position:"absolute",left:n?e.at:e.start,top:n?e.start:e.at,width:n?1:e.end-e.start,height:n?e.end-e.start:1,borderLeft:n?`1px dashed ${he}`:void 0,borderTop:n?void 0:`1px dashed ${he}`,pointerEvents:"none"}}function zo(e){return{position:"absolute",left:e.x,top:Math.max(0,e.y-36),display:"flex",gap:4,pointerEvents:"none"}}const xe={padding:"2px 6px",fontSize:10,fontFamily:"'SF Mono', 'Fira Code', Menlo, Consolas, monospace",fontWeight:600,color:st.content.onAccent,background:`color-mix(in srgb, ${k} 85%, transparent)`,borderRadius:3,whiteSpace:"nowrap"};function Do(e){return{position:"absolute",left:e.x,top:e.y,width:e.width,height:e.height,border:`1px dashed color-mix(in srgb, ${k} 45%, transparent)`,boxSizing:"border-box",pointerEvents:"none"}}function ge(e,n,o,r=0){return n&&o>0?Math.round((e-r)/o)*o+r:e}function Io(e,n,o,r,u,s,p=!1){const x=e.nativeHandleSpan??1,y=p?"both":e.nativeScaleAxis??"both",b=p&&e.nativeScaleAxis==="x"?n:p&&e.nativeScaleAxis==="y"?o:null;let v,$;if(y==="x")v=1+n/x,$=1;else if(y==="y")v=1,$=1+o/x;else{const X=b!==null?1+b/x:1+(n+o)/(Math.SQRT2*x);v=X,$=X}return{...y!=="y"?{scaleXFactor:v}:{},...y!=="x"?{scaleYFactor:$}:{},...r&&!u?{scaleStep:s}:{}}}function Lo(e,n,o,r,u,s,p={x:0,y:0}){const x=e.nativeOrigin;if(!x)return{};const y=r&&!u;return{...e.moveAxis!=="y"?{originX:ge(x.x+n,y,s,p.x)}:{},...e.moveAxis!=="x"?{originY:ge(x.y+o,y,s,p.y)}:{}}}function Oo(e,n,o){return e==="x"?{x:n.x+o,y:n.y}:e==="y"?{x:n.x,y:n.y+o}:{x:n.x+o/Math.SQRT2,y:n.y+o/Math.SQRT2}}function jo(e,n,o){return e==="x"?{dx:n,dy:0}:e==="y"?{dx:0,dy:o}:{dx:n,dy:o}}function To(e,n){e.ownerBoxEdit.begin(e.id);for(const o of e.peers)o.ownerBoxEdit.begin(o.id);return{kind:"move",id:e.id,ownerBoxEdit:e.ownerBoxEdit,startLocal:n,origRect:e.origRect,context:e.context,...e.nativeOrigin?{nativeOrigin:e.nativeOrigin}:{},movePeers:e.peers}}function Bo(e,n,o){let r=n;for(let u=0;r!==null&&u<256;u++){if(o.has(r))return r;r=e.hierarchy.node(r)?.parentId??null}return null}function Mo(e,n,o){const r=O(e,n);if(!r)return null;const u=e.inspector?.get(n,"style.position"),s=Gt(e,n)==="2d";if(u!=="absolute"&&u!=="fixed"&&!s)return null;const p=S(e,n);if(!p)return null;const x=s?r.gizmoOrigin?.(n)??void 0:void 0,y=[];for(const b of o){if(b===n)continue;const v=O(e,b),$=S(e,b);if(!v||!$)continue;const X=e.inspector?.get(b,"style.position"),A=Gt(e,b)==="2d";if(X!=="absolute"&&X!=="fixed"&&!A)continue;const at=A?v.gizmoOrigin?.(b)??void 0:void 0;y.push({id:b,ownerBoxEdit:v,origRect:$,...at?{nativeOrigin:at}:{}})}return{id:n,ownerBoxEdit:r,origRect:p,context:rt(e,n),...x?{nativeOrigin:x}:{},peers:y}}function $o(e,n){if(!Pn(e,n)?.reorder)return null;const r=zn(e,n);if(!r||r.length<3)return null;const u=S(e,n);if(!u)return null;const s=[];for(const p of r){if(p===n)continue;const x=S(e,p);x&&s.push({id:p,rect:x})}return s.length===0?null:{id:n,adapter:e,origRect:u,siblingRects:s}}function Xo(){return Dn()}function Go(e,n){if(n.size!==1)return null;const o=[...n][0],r=O(e,o);if(!r)return null;const u=S(e,o);if(!u)return null;const s=In(u,Ln(e,o));return{id:o,rect:u,ownerBoxEdit:r,spacingBands:s}}function Fo(e,n){if(n.size<2)return null;const o=[];for(const r of n){const u=S(e,r);if(!u||!O(e,r))return null;o.push({id:r,rect:u})}return o}function Yo(e,n,o){const r=n.size===1?[...n][0]:null,u=r?S(e,r):null,s=u&&o?On(u,o):[],p=r?jn(e,r):null,x=!!(p&&(p.position||p.parentLayout)),y=r?rt(e,r)?.parent??null:null;return{selectedSingleRect:u,measureLines:s,positionBadge:p,showPositionBadge:x,parentRect:y}}function Ao({state:e,adapter:n,onClose:o}){const r=c.useRef(null);return c.useEffect(()=>{const u=p=>{r.current?.contains(p.target)||o()},s=p=>{p.key==="Escape"&&o()};return document.addEventListener("pointerdown",u),document.addEventListener("keydown",s),()=>{document.removeEventListener("pointerdown",u),document.removeEventListener("keydown",s)}},[o]),d.jsx(Tn,{children:d.jsx(Bn,{ref:r,"aria-label":"Pick object under pointer","data-testid":"viewport-pick-menu",style:{position:"fixed",left:e.x,top:e.y,minWidth:190,maxWidth:320,zIndex:wt.dropdown},children:e.ids.map(u=>{const s=n.hierarchy.node(u);return d.jsxs(Mn,{"data-testid":"viewport-pick-menu-item",onSelect:()=>{be(n,[u]),o()},style:{justifyContent:"space-between",gap:20},children:[d.jsx("span",{children:s?.label??u}),d.jsx("span",{style:{color:st.content.muted,fontSize:11},children:s?.kind??""})]},u)})})})}function si({adapter:e,view:n,transformModeAware:o=!1}={}){const r=nn(),u=c.useSyncExternalStore(r.subscribe,r.getSnapshot),s=e??on(r),p=c.useCallback((t,i)=>e?e.pickable?.pick(t,i)??null:Yn(r,t,i),[e,r]),x=c.useRef(null),y=c.useRef(null),b=c.useRef(null),[v,$]=c.useState(null),[X,A]=c.useState(null),[at,At]=c.useState(null),[Ht,St]=c.useState(null),lt=c.useRef(null),_t=c.useCallback((t,i)=>{const l=An(r,t,i,{...e?{adapter:e}:{}});if(l.length===0){St(null);return}St({x:t,y:i,ids:l})},[e,r]);c.useEffect(()=>{const t=l=>{const a=lt.current;!a||a.pointerId!==l.pointerId||a.moved||Math.hypot(l.clientX-a.startClientX,l.clientY-a.startClientY)>mt&&(a.moved=!0)},i=l=>{const a=lt.current;!a||a.pointerId!==l.pointerId||(lt.current=null,l.type==="pointerup"&&!a.moved&&_t(l.clientX,l.clientY))};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)}},[_t]);const we=c.useCallback(t=>{t.preventDefault(),t.stopPropagation()},[]),D=n??rn,g=c.useSyncExternalStore(D.subscribe,D.get,D.get);c.useSyncExternalStore(c.useCallback(t=>Vn(D,t),[D]),c.useCallback(()=>Wn(D),[D]));const Rt=o?Kn(D):[],I=o?1/g.zoom:1,ct=o&&r.transformMode!=="combined"&&r.transformMode!=="select",Ct=c.useRef(!1),[Ee,Nt]=c.useState(!1),H=c.useRef(null),[Se,dt]=c.useState(!1),P=c.useRef(null);c.useEffect(()=>()=>{const t=P.current;if(P.current=null,!!t){t.ownerBoxEdit.end(t.id);for(const i of t.movePeers??[])i.ownerBoxEdit.end(i.id)}},[]);const[,Re]=c.useState(0),[Ce,tt]=c.useState(null),[ke,V]=c.useState([]),kt=c.useRef(null),[Pe,ze]=c.useState(null),Q=c.useCallback(t=>{kt.current=t,ze(t)},[]),Kt=c.useRef(null),[De,Ie]=c.useState(null),[ut,et]=c.useState(null),U=c.useCallback(t=>{Kt.current=t,Ie(t)},[]),Pt=c.useRef(null),Wt=c.useRef(null);c.useEffect(()=>{const t=Pt.current;if(!t)return;Pt.current=null;const i=Tt(s,t.id);i&&i.get(t.id)===null&&et({id:t.id,rect:t.rect})},[u]);const Vt=c.useRef("");c.useEffect(()=>{const t=[...r.selectedEntityIds].sort().join(",");t!==Vt.current&&(Vt.current=t,ut&&et(null))}),c.useEffect(()=>{if(!ut)return;const t=window.setTimeout(()=>et(null),4e3);return()=>window.clearTimeout(t)},[ut]);const _=c.useSyncExternalStore(Gn,Fn),[Le,Ut]=c.useState(null),j=c.useCallback(t=>{b.current=t,$(t)},[]),m=c.useCallback((t,i)=>{const l=x.current?.getBoundingClientRect();return{x:(t-(l?.left??0)-g.x)/g.zoom,y:(i-(l?.top??0)-g.y)/g.zoom}},[g.x,g.y,g.zoom]),Oe=c.useCallback(t=>{!n||!o||!s.assetDrop||!t.dataTransfer.types.includes("application/x-editor-asset")||(t.preventDefault(),t.dataTransfer.dropEffect="copy")},[s.assetDrop,n,o]),je=c.useCallback(t=>{if(!n||!o||!s.assetDrop)return;const i=t.dataTransfer.getData("application/x-editor-asset");if(!i)return;let l;try{l=JSON.parse(i)}catch{return}const a=m(t.clientX,t.clientY),f={position:[a.x,a.y,0],item:l.component??{kind:"file",name:l.name??l.path.split("/").pop()??l.path}};s.assetDrop.accepts("",l.path,f)&&(t.preventDefault(),t.stopPropagation(),sn(s,"",l.path,f))},[s.assetDrop,n,m,o]),N=c.useCallback(()=>Re(t=>t+1),[]),pt=c.useCallback(()=>{const t=P.current;if(!t)return!1;P.current=null,t.ownerBoxEdit.end(t.id);for(const i of t.movePeers??[])i.ownerBoxEdit.end(i.id);return tt(null),V([]),N(),!0},[N]),Te=c.useCallback((t,i)=>{if(i.stopPropagation(),i.button!==0)return;const l=r.selectedEntityIds;if(l.size!==1)return;const a=[...l][0],f=O(s,a),h=S(s,a);if(!f||!h)return;const w=s.inspector?.get(a,"style.position"),T=Gt(s,a)==="2d",E=T?Bt(s,a):null,it=E&&Mt(E)?f.gizmoOrigin?.(a)??null:null;W(i),f.begin(a),P.current={kind:"resize",id:a,ownerBoxEdit:f,startLocal:m(i.clientX,i.clientY),origRect:h,pos:t,...E&&it?{frame:E,frameOrigin:it}:{},isPositioned:w==="absolute"||w==="fixed"||T,context:rt(s,a)}},[s,r,m]),zt=c.useCallback(t=>{if(t.stopPropagation(),t.button!==0)return;const i=r.selectedEntityIds;if(i.size!==1)return;const l=[...i][0],a=O(s,l),f=S(s,l);if(!a||!f)return;const h=o?a.gizmoOrigin?.(l):null;W(t),a.begin(l),P.current={kind:"rotate",id:l,ownerBoxEdit:a,startLocal:m(t.clientX,t.clientY),origRect:f,center:h??{x:f.x+f.width/2,y:f.y+f.height/2},...h?{nativeOrigin:h}:{}}},[s,r,m,o]),Dt=c.useCallback((t,i)=>{if(i.stopPropagation(),i.button!==0)return;const l=r.selectedEntityIds;if(l.size!==1)return;const a=[...l][0],f=O(s,a),h=S(s,a);if(!f||!h)return;const w=f.gizmoOrigin?.(a)??{x:h.x+h.width/2,y:h.y+h.height/2};W(i),f.begin(a),P.current={kind:"move",id:a,ownerBoxEdit:f,startLocal:m(i.clientX,i.clientY),origRect:h,context:rt(s,a),moveAxis:t,nativeOrigin:w}},[s,r,m]),It=c.useCallback((t,i)=>{if(i.stopPropagation(),i.button!==0)return;const l=r.selectedEntityIds;if(l.size!==1)return;const a=[...l][0],f=O(s,a),h=S(s,a);if(!f||!h)return;const w=f.gizmoOrigin?.(a)??{x:h.x+h.width/2,y:h.y+h.height/2};W(i),f.begin(a),P.current={kind:"native-scale",id:a,ownerBoxEdit:f,startLocal:m(i.clientX,i.clientY),origRect:h,nativeOrigin:w,nativeScaleAxis:t,nativeHandleSpan:de/g.zoom}},[s,g.zoom,r,m]),Be=c.useCallback((t,i)=>{if(i.stopPropagation(),i.button!==0)return;const l=r.selectedEntityIds;if(l.size!==1)return;const a=[...l][0],f=O(s,a),h=S(s,a);!f||!h||f.referencePoint?.(a)?.id!==t.id||(W(i),f.begin(a),P.current={kind:"reference",id:a,ownerBoxEdit:f,startLocal:m(i.clientX,i.clientY),origRect:h,context:rt(s,a),pointerId:i.pointerId,referencePoint:t})},[s,r,m]),ft=c.useRef(null),Me=c.useCallback((t,i,l,a)=>{a.stopPropagation(),!(a.button!==0||!l.writable)&&(W(a),ft.current={id:t,handleId:l.id,provider:i})},[]),$e=c.useCallback(t=>{const i=ft.current;if(!i)return;const l=m(t.clientX,t.clientY);i.provider.preview(i.id,i.handleId,[l.x,l.y,0]),N()},[N,m]),Lt=c.useCallback(t=>{const i=ft.current;if(ft.current=null,!i)return;$t(t);const l=m(t.clientX,t.clientY);i.provider.commit(i.id,i.handleId,[l.x,l.y,0]),N()},[N,m]),Xe=c.useCallback((t,i)=>{if(i.stopPropagation(),i.button!==0)return;const l=r.selectedEntityIds;if(l.size!==1)return;const a=[...l][0],f=O(s,a),h=S(s,a);!f||!h||(W(i),f.begin(a),P.current={kind:"spacing",id:a,ownerBoxEdit:f,startLocal:m(i.clientX,i.clientY),origRect:h,side:t.side,origValue:t.value})},[s,r,m]),ht=c.useCallback((t,i)=>{if(t.pointerId!==void 0&&i.pointerId!==t.pointerId)return;const l=m(i.clientX,i.clientY),a=l.x-t.startLocal.x,f=l.y-t.startLocal.y;let h;if(t.kind==="resize"&&t.frame&&t.frameOrigin)h=an(t.frame,t.pos,a,f,t.frameOrigin,i.shiftKey),V([]);else if(t.kind==="resize")h=ln(t.pos,a,f,t.origRect,!!t.isPositioned,i.altKey,t.context),i.shiftKey&&t.isPositioned&&(h=cn(h,t.origRect,t.pos)),V(dn(t.pos,a,f,t.origRect,i.altKey,t.context));else if(t.kind==="native-scale")h=Io(t,a,f,r.scaleSnap,i.altKey,r.snapValues.scale,i.shiftKey),V([]);else if(t.kind==="move"){const{dx:w,dy:T}=jo(t.moveAxis,a,f);if(t.nativeOrigin){h=Lo(t,w,T,r.snapEnabled,i.altKey,r.snap2D.step,r.snap2D.relative?t.nativeOrigin:{x:r.snap2D.offsetX,y:r.snap2D.offsetY});const E=un({x:h.originX??t.nativeOrigin.x,y:h.originY??t.nativeOrigin.y},t.nativeOrigin,t.origRect,t.context,t.moveAxis,!r.smartSnap.enabled||i.altKey,pn/Math.max(g.zoom,.01),{x:Rt.filter(B=>B.axis==="x").map(B=>B.value),y:Rt.filter(B=>B.axis==="y").map(B=>B.value)},r.smartSnap),it=B=>r.snap2D.pixel?Math.round(B):B;h.originX!==void 0&&(h.originX=it(E.position.x)),h.originY!==void 0&&(h.originY=it(E.position.y)),V(E.guides)}else h=fn(w,T,t.origRect,i.altKey,t.context);tt(ie(t.origRect,w,T)),t.nativeOrigin||V(hn(w,T,t.origRect,i.altKey,t.context))}else if(t.kind==="reference"){const w=xn(l,t.origRect,i.altKey,t.context,{bounded:t.referencePoint?.bounded,snapPoints:t.referencePoint?.snapPoints});h={referenceX:w.position.x,referenceY:w.position.y},V(w.guides)}else t.kind==="rotate"?h=gn(t.center,t.startLocal,l,t.nativeOrigin&&!r.rotationSnap||i.altKey,t.nativeOrigin?r.snapValues.rotate:15):h=bn(t.side,a,f,t.origValue??0);if(t.ownerBoxEdit.apply(t.id,h),t.kind==="move"&&t.movePeers){const w=t.nativeOrigin?(h.originX??t.nativeOrigin.x)-t.nativeOrigin.x:(h.x??t.origRect.x)-t.origRect.x,T=t.nativeOrigin?(h.originY??t.nativeOrigin.y)-t.nativeOrigin.y:(h.y??t.origRect.y)-t.origRect.y;for(const E of t.movePeers)E.ownerBoxEdit.apply(E.id,E.nativeOrigin?{originX:E.nativeOrigin.x+w,originY:E.nativeOrigin.y+T}:{x:E.origRect.x+w,y:E.origRect.y+T})}N()},[m,N,r,Rt,g.zoom]),xt=c.useCallback((t,i)=>{const l=p(t,i);if(!l)return null;const a=yn(s,l)?.backgroundChainAt(t,i)??null;return a?Nn(a):null},[s,p]);c.useEffect(()=>{if(!_)return;const t=i=>{i.key==="Escape"&&re(null)};return window.addEventListener("keydown",t),()=>window.removeEventListener("keydown",t)},[_]),c.useEffect(()=>{const t=a=>a instanceof HTMLInputElement||a instanceof HTMLTextAreaElement||a instanceof HTMLSelectElement||a instanceof HTMLElement&&a.isContentEditable,i=a=>{a.code!=="Space"||a.repeat||t(a.target)||a.target instanceof HTMLButtonElement||(a.preventDefault(),Ct.current=!0,Nt(!0))},l=a=>{a.code==="Space"&&(Ct.current=!1,Nt(!1),H.current&&(H.current=null,dt(!1)))};return window.addEventListener("keydown",i),window.addEventListener("keyup",l),()=>{window.removeEventListener("keydown",i),window.removeEventListener("keyup",l)}},[]);const Zt=c.useCallback(t=>{if(t.stopPropagation(),W(t),Ct.current){H.current={startClientX:t.clientX,startClientY:t.clientY,startPan:D.get()},dt(!0);return}if(o&&r.selectedEntityIds.size===1&&(t.metaKey||t.ctrlKey)){t.altKey?It("both",t):zt(t);return}if(_){re(xt(t.clientX,t.clientY)),Ut(null);return}if(eo(e,t.clientX,t.clientY)){y.current=null,A(null),j(null);return}const i=p(t.clientX,t.clientY);if(uo(t,i)){y.current=null,A(null),j(null);return}const l=i!==null?Bo(s,i,r.selectedEntityIds):null,a=Xt(o,r.transformMode,"translate")&&l!==null?Mo(s,l,r.selectedEntityIds):null,f=!a&&l!==null?$o(s,l):null;y.current={downClientX:t.clientX,downClientY:t.clientY,downLocal:m(t.clientX,t.clientY),hitAtDown:i,moved:!1,moveCandidate:a,reorderCandidate:f},A(null),j(null)},[s,r,D,o,m,j,_,xt,p,e,It,zt]),Ge=c.useCallback(t=>{if(t.button===2){lt.current={pointerId:t.pointerId,startClientX:t.clientX,startClientY:t.clientY,moved:!1};return}t.button===0&&Zt(t)},[Zt]),Jt=c.useCallback((t,i)=>{const l=i.clientX-t.downClientX,a=i.clientY-t.downClientY;if(!t.moved&&Math.hypot(l,a)>mt&&(t.moved=!0),!!t.moved){if(t.moveCandidate){const f=To(t.moveCandidate,t.downLocal);P.current=f,ht(f,i);return}if(t.reorderCandidate){const f=m(i.clientX,i.clientY),h=vn(t.reorderCandidate.siblingRects,f);h&&(Q({id:t.reorderCandidate.id,adapter:t.reorderCandidate.adapter,gap:h}),tt(ie(t.reorderCandidate.origRect,f.x-t.downLocal.x,f.y-t.downLocal.y)));return}if(t.hitAtDown===null){const f=m(i.clientX,i.clientY);j({x:Math.min(t.downLocal.x,f.x),y:Math.min(t.downLocal.y,f.y),width:Math.abs(f.x-t.downLocal.x),height:Math.abs(f.y-t.downLocal.y)})}}},[m,j,ht,Q]),G=c.useCallback(t=>{const i=H.current;if(i){D.setPan(i.startPan.x+(t.clientX-i.startClientX),i.startPan.y+(t.clientY-i.startClientY));return}if(_){const f=m(t.clientX,t.clientY);Ut({...f,color:xt(t.clientX,t.clientY)});return}const l=P.current;if(l){ht(l,t);return}if((t.buttons&1)===0){no(e,t.clientX,t.clientY,p,At,A);return}const a=y.current;a&&Jt(a,t)},[r,D,m,ht,_,xt,Jt,p,e]),F=c.useCallback(t=>{if($t(t),H.current){H.current=null,dt(!1);return}const i=P.current;if(i?.pointerId!==void 0&&t.pointerId!==i.pointerId||pt())return;const l=kt.current;if(l){Q(null),tt(null),y.current=null,mn(l.adapter,l.id,l.gap.beforeSiblingId);return}const a=y.current;if(y.current=null,!a)return;const f=a.hitAtDown!==null?ao(r.selectedEntityIds,a.hitAtDown,t.shiftKey):lo(s,a.moved,b.current,t.shiftKey);f!==null&&be(s,f),j(null)},[s,r,j,pt,Q]),L=c.useCallback(t=>{if($t(t),H.current){H.current=null,dt(!1);return}const i=P.current;i?.pointerId!==void 0&&t.pointerId!==i.pointerId||pt()||(kt.current&&(Q(null),tt(null)),y.current=null,j(null))},[pt,j,Q]),Fe=c.useCallback(()=>{e||Ft()?.clearHover(),At(null),A(null)},[e]),Ye=c.useCallback(t=>{const i=x.current?.parentElement??null;if(Hn(i,t.clientX,t.clientY))return;const l=p(t.clientX,t.clientY);if(!l)return;const a=Tt(s,l);if(!a)return;const f=S(s,l);if(!f)return;const h=a.get(l);if(h===null){console.warn(`[RootSelectionOverlay] text edit refused for "${l}": dynamic body or has child elements — not inline-editable.`),U(null),et({id:l,rect:f});return}et(null),U({id:l,rect:f,initialText:h})},[s,p,U]),Ae=c.useCallback(t=>{const i=Kt.current;if(!i)return;const l=Tt(s,i.id);l&&(Pt.current={id:i.id,rect:i.rect},l.set(i.id,t)),U(null)},[s,U]),He=c.useCallback(()=>U(null),[U]);if(!io(s)||Xo())return null;const Z=new Set([...r.selectedEntityIds].filter(t=>s.hierarchy.node(t)!==void 0)),Ot=X!==null&&!Z.has(X)?S(s,X):null,R=Go(s,Z),Y=R?.rect??null,_e=R?.ownerBoxEdit??null,jt=o&&R?Bt(s,R.id):null,z=jt&&Mt(jt)?jt:null,C=o&&R?R.ownerBoxEdit.gizmoOrigin?.(R.id)??{x:R.rect.x+R.rect.width/2,y:R.rect.y+R.rect.height/2}:null,nt=de/g.zoom,K=R?R.ownerBoxEdit.referencePoint?.(R.id):null,Ne=R?.spacingBands??[],q=Z.size===1?[...Z][0]:null,gt=q?wn(s,q):null,Ke=q&&gt&&r.showHelpers?gt.layers(q).filter(t=>r.helperVisibility[t.category]??!0):[],ot=o?{selectedSingleRect:null,measureLines:[],positionBadge:null,showPositionBadge:!1,parentRect:null}:Yo(s,Z,Ot),Qt=o?null:Fo(s,Z),bt=Wt.current,We=o?[]:bt&&bt.adapter===s&&bt.version===u?bt.hints:(()=>{const t=En(s);return Wt.current={adapter:s,version:u,hints:t},t})();return d.jsxs("div",{style:{position:"absolute",inset:0,zIndex:to,pointerEvents:"none"},children:[d.jsx("div",{ref:x,"data-testid":"world-selection-overlay-interaction",style:{position:"absolute",inset:0,pointerEvents:"auto",touchAction:"none",userSelect:"none",cursor:at??co(Se,Ee,_,!!v)},onPointerDownCapture:Ge,onPointerMove:G,onPointerUp:F,onPointerCancel:L,onLostPointerCapture:L,onPointerLeave:Fe,onDoubleClick:Ye,onContextMenu:we,onDragOver:Oe,onDrop:je}),Ht?d.jsx(Ao,{state:Ht,adapter:s,onClose:()=>St(null)}):null,d.jsxs("div",{"data-testid":"world-selection-overlay-chrome",style:{position:"absolute",inset:0,pointerEvents:"none",transform:kn(g),transformOrigin:"0 0"},children:[!o&&We.map(t=>d.jsx("div",{"data-testid":"world-empty-container-hint","data-entity-id":t.id,title:t.displayName,style:{position:"absolute",left:t.rect.x,top:t.rect.y,width:t.rect.width,height:t.rect.height,borderStyle:"dashed",borderColor:"rgba(154, 160, 166, 0.7)",borderWidth:o?1/g.zoom:1,boxSizing:"border-box",pointerEvents:"none"}},t.id)),Ot&&d.jsx("div",{"data-testid":"world-selection-hover",style:{...ce(Ot,!1),...o?{borderWidth:1/g.zoom}:{}}}),[...Z].map(t=>{const i=S(s,t);if(!i)return null;const l=o?Bt(s,t):null,a=l&&Mt(l)?l:null;return d.jsxs("div",{children:[d.jsx("div",{"data-testid":"world-selection-box","data-entity-id":t,"data-turned":a?"true":void 0,style:{...a?fo(a,1/g.zoom):ce(i,!0),...o&&!a?{borderWidth:1/g.zoom,background:"transparent"}:{}}}),!o&&d.jsx("div",{"data-testid":"world-selection-label",style:ho(i),children:oo(s,t)})]},t)}),v&&d.jsx("div",{"data-testid":"world-selection-marquee",style:{position:"absolute",left:v.x,top:v.y,width:v.width,height:v.height,border:`1px solid ${k}`,background:`color-mix(in srgb, ${k} 10%, transparent)`,pointerEvents:"none"}}),!o&&d.jsx(Ho,{measureLines:ot.measureLines,snapGuides:ke,positionBadge:ot.positionBadge,showPositionBadge:ot.showPositionBadge,badgeAnchorRect:ot.selectedSingleRect,parentRect:ot.parentRect,screenScale:I,screenZoom:1}),!o&&d.jsx(_o,{dragGhost:Ce,reorderPreview:Pe}),!o&&Qt&&d.jsx(Qn,{adapter:s,entries:Qt}),Y&&_e&&d.jsxs(d.Fragment,{children:[!o&&Ne.map(t=>d.jsxs("div",{children:[d.jsx("div",{"data-testid":`world-spacing-${t.kind}-${Ko(t.side)}`,style:wo(t),onPointerDown:i=>Xe(t,i),onPointerMove:G,onPointerUp:F,onPointerCancel:L}),!t.isZero&&d.jsx("div",{style:{...Eo(t),...o?{transform:`translate(-50%, -50%) scale(${I})`,transformOrigin:"center"}:{}},children:Math.round(t.value)})]},t.side)),K&&d.jsx("div",{"aria-label":`Edit ${K.label}`,"data-reference-kind":K.kind,"data-testid":"world-reference-point-handle",title:`${K.label} (${K.bounded?"native corner/edge/center snap":"8px/alignment snap"}, Alt for free movement)`,style:{...bo(K),...o?{transform:`scale(${I})`,transformOrigin:"center"}:{}},onPointerDown:t=>Be(K,t),onPointerMove:G,onPointerUp:F,onPointerCancel:L,onLostPointerCapture:L,role:"button",tabIndex:0,children:K.kind==="anchor"?"A":"P"}),q&&gt&&Ke.flatMap(t=>t.handles.map(i=>d.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:{...go(i),transform:`translate(-50%, -50%) scale(${I})`},onPointerDown:l=>Me(q,gt,i,l),onPointerMove:$e,onPointerUp:Lt,onPointerCancel:Lt,onLostPointerCapture:Lt},`${t.id}:${i.id}`))),o&&r.transformMode==="translate"&&d.jsxs(d.Fragment,{children:[d.jsx("div",{"data-testid":"world-2d-move-axis-x",title:"Move on X axis",style:{position:"absolute",left:C.x,top:C.y-5/g.zoom,width:nt,height:10/g.zoom,borderTop:`${2/g.zoom}px solid #ef5350`,boxSizing:"border-box",cursor:"ew-resize",pointerEvents:"auto"},onPointerDown:t=>Dt("x",t),onPointerMove:G,onPointerUp:F,onPointerCancel:L}),d.jsx("div",{"data-testid":"world-2d-move-axis-y",title:"Move on Y axis",style:{position:"absolute",left:C.x-5/g.zoom,top:C.y,width:10/g.zoom,height:nt,borderLeft:`${2/g.zoom}px solid #66bb6a`,boxSizing:"border-box",cursor:"ns-resize",pointerEvents:"auto"},onPointerDown:t=>Dt("y",t),onPointerMove:G,onPointerUp:F,onPointerCancel:L}),d.jsx("div",{"data-testid":"world-2d-move-center",title:"Move freely",style:{position:"absolute",left:C.x-5/g.zoom,top:C.y-5/g.zoom,width:10/g.zoom,height:10/g.zoom,border:"1px solid rgba(255,255,255,.9)",background:"#4aa3ff",boxSizing:"border-box",cursor:"move",pointerEvents:"auto"},onPointerDown:t=>Dt("both",t),onPointerMove:G,onPointerUp:F,onPointerCancel:L})]}),Xt(o,r.transformMode,"scale")&&(ct?d.jsxs(d.Fragment,{children:[d.jsx("div",{"data-testid":"world-2d-scale-axis-x",style:{position:"absolute",left:C.x,top:C.y,width:nt,borderTop:`${2/g.zoom}px solid #ef5350`,pointerEvents:"none"}}),d.jsx("div",{"data-testid":"world-2d-scale-axis-y",style:{position:"absolute",left:C.x,top:C.y,height:nt,borderLeft:`${2/g.zoom}px solid #66bb6a`,pointerEvents:"none"}}),[["x","ew-resize"],["y","ns-resize"],["both","nwse-resize"]].map(([t,i])=>{const l=Oo(t,C,nt),a=t==="x"?"e":t==="y"?"s":"se";return d.jsx("div",{"data-testid":`world-resize-handle-${a}`,style:{...ue(l,i),transform:`scale(${I})`,transformOrigin:"center",background:t==="x"?"#ef5350":t==="y"?"#66bb6a":"#fff"},onPointerDown:f=>It(t,f),onPointerMove:G,onPointerUp:F,onPointerCancel:L},t)})]}):d.jsxs(d.Fragment,{children:[Sn.map(({pos:t,cursor:i})=>d.jsx("div",{"data-testid":`world-resize-handle-${t}`,style:{...ue(z?Rn(z,t):Cn(Y,t),i),...o?{transform:z?`rotate(${ye(z)}rad) scale(${I})`:`scale(${I})`,transformOrigin:"center"}:{}},onPointerDown:l=>Te(t,l),onPointerMove:G,onPointerUp:F,onPointerCancel:L},t)),d.jsx("div",{"data-testid":"world-resize-dimension-label",style:{...yo(Y),...o?{top:Y.y+Y.height+4*I,transform:`scale(${I})`,transformOrigin:"top left"}:{}},children:z?`${Math.round(Math.hypot(z.tr.x-z.tl.x,z.tr.y-z.tl.y))}×${Math.round(Math.hypot(z.bl.x-z.tl.x,z.bl.y-z.tl.y))}`:`${Math.round(Y.width)}×${Math.round(Y.height)}`})]})),Xt(o,r.transformMode,"rotate")&&d.jsxs(d.Fragment,{children:[ct&&d.jsx("div",{"data-testid":"world-2d-rotate-ring",style:{position:"absolute",left:C.x-40/g.zoom,top:C.y-40/g.zoom,width:80/g.zoom,height:80/g.zoom,border:`${1/g.zoom}px solid #4aa3ff`,borderRadius:"50%",boxSizing:"border-box",pointerEvents:"none"}}),d.jsx("div",{"data-testid":"world-rotate-handle","aria-label":"Rotate selection",title:"Rotate selection (15° snap, Alt for free rotation)",style:{...xo(Y),...o&&!ct?{...po(z,Y,me*I),transform:`scale(${I})`,transformOrigin:"center"}:{},...ct?{left:C.x-M/2,top:C.y-40/g.zoom-M/2,transform:`scale(${I})`,transformOrigin:"center",background:"#4aa3ff"}:{}},onPointerDown:zt,onPointerMove:G,onPointerUp:F,onPointerCancel:L,role:"button",tabIndex:0})]})]}),!o&&d.jsx(No,{textEdit:De,onCommitTextEdit:Ae,onCancelTextEdit:He,textEditRefused:ut,eyedropperActive:_,eyedropperPreview:Le})]})]})}function Ho(e){const{measureLines:n,snapGuides:o,positionBadge:r,showPositionBadge:u,badgeAnchorRect:s,parentRect:p,screenScale:x,screenZoom:y}=e;return d.jsxs(d.Fragment,{children:[p&&d.jsx("div",{"data-testid":"world-parent-outline",style:Do(p)}),n.map(b=>d.jsxs("div",{"data-testid":"world-measure-line",children:[d.jsx("div",{style:Co(b)}),d.jsx("div",{style:fe(b.x1,b.y1,b.orientation==="horizontal")}),d.jsx("div",{style:fe(b.x2,b.y2,b.orientation==="horizontal")}),d.jsx("div",{"data-testid":"world-measure-line-label",style:{...ko(b),...x!==1?{transform:`translate(-50%, -50%) scale(${x})`,transformOrigin:"center"}:{}},children:b.distance})]},b.orientation)),o.map(b=>d.jsx("div",{"data-testid":"world-snap-guide",style:Po(b)},b.orientation)),u&&s&&r&&d.jsxs("div",{"data-testid":"world-position-badge",style:{...zo(s),...x!==1?{top:s.y-36/y,transform:`scale(${x})`,transformOrigin:"top left"}:{}},children:[r.position&&d.jsx("span",{"data-testid":"world-position-badge-mode",style:xe,children:r.position}),r.parentLayout&&d.jsx("span",{"data-testid":"world-position-badge-layout",style:xe,children:r.parentLayout})]})]})}function _o(e){const{dragGhost:n,reorderPreview:o}=e;return d.jsxs(d.Fragment,{children:[n&&d.jsx("div",{"data-testid":"world-drag-ghost",style:So(n)}),o&&d.jsx("div",{"data-testid":"world-reorder-preview",style:Ro(o.gap.marker)})]})}function No(e){const{textEdit:n,onCommitTextEdit:o,onCancelTextEdit:r,textEditRefused:u,eyedropperActive:s,eyedropperPreview:p}=e;return d.jsxs(d.Fragment,{children:[n&&d.jsx("div",{style:{pointerEvents:"auto"},children:d.jsx(qn,{rect:n.rect,initialText:n.initialText,onCommit:o,onCancel:r})}),u&&d.jsx("div",{"data-testid":"world-text-edit-refused",title:"dynamic body — not inline-editable",style:{position:"absolute",left:u.rect.x,top:u.rect.y,width:Math.max(u.rect.width,40),height:Math.max(u.rect.height,20),border:`2px dashed ${st.semantic.danger}`,boxSizing:"border-box",background:st.semantic.dangerMuted,pointerEvents:"none"}}),s&&p&&d.jsx("div",{"data-testid":"world-eyedropper-swatch","data-color-state":p.color?"resolved":"unknown",style:{position:"absolute",left:p.x+12,top:p.y+12,width:24,height:24,borderRadius:4,border:"2px solid #fff",boxShadow:"0 1px 4px rgba(0,0,0,0.5)",background:p.color??"repeating-linear-gradient(45deg, #999, #999 4px, #ccc 4px, #ccc 8px)",pointerEvents:"none"}})]})}function Ko(e){return e.endsWith("Top")?"top":e.endsWith("Right")?"right":e.endsWith("Bottom")?"bottom":"left"}export{si as R,Kn as a,ni as b,Wn as c,ri as d,oi as m,ii as r,Vn 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{e$ as v,Z as L,i1 as N,d0 as wt,aK as pt,i0 as B,f6 as zt,du as ut,$ as X,cG as ft,kP as it,eO as Bt,iC as ht,dJ as Dt,aP as Ft}from"./index-BRJMIUK0.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 Q(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(()=>Q(...h)),[m,i]=$.useState(()=>lt(t)),[f,g]=$.useState("hex"),[k,R]=$.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,C,I]=K(x[0],x[1],x[2]);return xt(M,C,I,y,j)},[d,m,f]);$.useEffect(()=>{R(H())},[H]),$.useEffect(()=>{const x=S.current,y=x?.getContext("2d");if(!x||!y)return;const[j,M,C]=K(d[0],1,1),I=y.createLinearGradient(0,0,F,0);I.addColorStop(0,"#ffffff"),I.addColorStop(1,`rgb(${j},${M},${C})`),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[C,I,P]=K(M/6,1,1);j.addColorStop(M/6,`rgb(${C},${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 J=0;J<F;J+=j)y.fillStyle=(J/j+q/j)%2===0?"#ffffff":"#cccccc",y.fillRect(J,q,j,j);const[M,C,I]=K(d[0],d[1],d[2]),P=y.createLinearGradient(0,0,F,0);P.addColorStop(0,`rgba(${M},${C},${I},0)`),P.addColorStop(1,`rgba(${M},${C},${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 O=$.useCallback((x,y,j,M)=>{const C=y?.getBoundingClientRect();if(C)if(x==="sat"){const I=[d[0],ct(j,C.left,C.width),Ot(M,C.top,C.height)];b(I),N({onChange:e},H(I))}else if(x==="hue"){const I=[ct(j,C.left,C.width),d[1],d[2]];b(I),N({onChange:e},H(I))}else{const I=Math.round(ct(j,C.left,C.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 C=M==="sat"?S.current:M==="hue"?w.current:E.current;O(M,C,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)}},[O,H,e,n,s]);const D=(x,y)=>{u||(y.preventDefault(),T.current=x,O(x,y.currentTarget,y.clientX,y.clientY))},G=()=>{const x=k.trim(),y=_t(x),j=y?{r:y[0],g:y[1],b:y[2],a:1}:Kt(x)??Ut(x);if(!j)return;b(Q(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")},_=typeof globalThis.EyeDropper=="function",at=x=>{const y=rt(x);b(Q(...nt(y))),i(lt(x)),N({onChange:e},x),B({onChange:e,onChangeEnd:n},x)},Rt=async()=>{if(_){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=>R(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()}),(_||c||l)&&o.jsx(L,{type:"button",variant:"secondary",size:"compact","data-testid":"color-picker-eyedropper",onClick:Rt,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(Q(...nt(j))),i(lt(x)),N({onChange:e},x),B({onChange:e,onChangeEnd:n},x)},title:x,style:{width:16,height:16,borderRadius:v.radiusSmall,cursor:"pointer",background:x,border:`1px solid ${v.border}`}},`${x}-${y}`))})]})}function Y({label:t,value:e,onChange:n,onChangeEnd:r,recentColors:a,onAddRecentColor:s,eyedropperFallback:c,onEyedropperPick:l,disabled:u,testId:p}){const[h,d]=$.useState(!1),b=rt(e);return o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,position:"relative"},children:[o.jsx("div",{"data-testid":p?`${p}-swatch`:"color-swatch",onClick:()=>{u||d(m=>!m)},style:{width:20,height:20,borderRadius:v.radiusSmall,flexShrink:0,background:b,border:`1px solid ${v.border}`,cursor:u?"not-allowed":"pointer"}}),t&&o.jsx("span",{style:{fontSize:10,color:v.textMuted,flexShrink:0},children:t}),h&&!u&&o.jsx("div",{style:{position:"absolute",zIndex:"var(--vgai-z-dropdown)",top:"100%",left:0,marginTop:4},children:o.jsx(Gt,{value:e,onChange:n,onChangeEnd:r,onClose:()=>d(!1),recentColors:a,onAddRecentColor:s,eyedropperFallback:c,onEyedropperPick:l})})]})}function Et(t){return Math.max(0,Math.min(1,t))}function ct(t,e,n){return Et(n?(t-e)/n:0)}function Ot(t,e,n){return Et(n?1-(t-e)/n:0)}function _t(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,_=f(b.current.startValue+G*r*st);b.current.last=_,N({onChange:u},_)},T=()=>{document.body.style.cursor="",window.removeEventListener("mousemove",E),window.removeEventListener("mouseup",H),window.removeEventListener("keydown",O)},H=()=>{if(b.current){const D=b.current.last;b.current=null,B({onChange:u,onChangeEnd:p},D)}T()},O=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",O)},[k,R]=$.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=>{R(`${e}${n}`),w.target.select()},onChange:w=>R(w.target.value),onBlur:w=>{z.current||S(w.target.value),z.current=!1,R(null)},onKeyDown:w=>{w.key==="Enter"&&w.target.blur(),w.key==="Escape"&&(z.current=!0,w.target.blur())},style:{flex:1,width:0}})]})}const bt=["none","solid","dashed","dotted","double"];function Wt(t){return{top:t,right:t,bottom:t,left:t}}function Xt(t){const e=r=>`${r.width}|${r.style}|${r.color}`,n=e(t.top);return e(t.right)===n&&e(t.bottom)===n&&e(t.left)===n}function pe({value:t,onChange:e,onChangeEnd:n,disabled:r,recentColors:a,onAddRecentColor:s}){const[c,l]=$.useState(!Xt(t)),u=(d,b)=>{const m={...t.top,...d},i=Wt(m);b?B({onChange:e,onChangeEnd:n},i):N({onChange:e},i)},p=(d,b,m)=>{const i={...t,[d]:{...t[d],...b}};m?B({onChange:e,onChangeEnd:n},i):N({onChange:e},i)};if(!c)return o.jsxs("div",{"data-testid":"border-editor-uniform",style:{display:"flex",gap:6,alignItems:"center"},children:[o.jsx(Y,{testId:"border-color",value:t.top.color,disabled:r,onChange:d=>u({color:d},!1),onChangeEnd:d=>u({color:d},!0),recentColors:a,onAddRecentColor:s}),o.jsx(A,{testId:"border-width",label:"W",value:t.top.width,min:0,disabled:r,onChange:d=>u({width:d},!1),onChangeEnd:d=>u({width:d},!0),style:{width:64}}),o.jsx(ut,{className:"vgai-select","data-testid":"border-style",value:t.top.style,disabled:r,"data-dynamic":r||void 0,onChange:d=>u({style:d.target.value},!0),style:{flex:1},children:bt.map(d=>o.jsx("option",{value:d,children:d},d))}),o.jsx(L,{type:"button","data-testid":"border-expand",title:"Per-side borders","aria-label":"Edit borders per side",onClick:()=>l(!0),variant:"ghost",size:"compact",children:o.jsx(X,{icon:ft})})]});const h=[{key:"top",label:"T"},{key:"right",label:"R"},{key:"bottom",label:"B"},{key:"left",label:"L"}];return o.jsxs("div",{"data-testid":"border-editor-expanded",style:{display:"flex",flexDirection:"column",gap:4},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:4},children:[o.jsx("span",{style:{fontSize:10,color:v.textMuted},children:"Per-side"}),o.jsx("div",{style:{flex:1}}),o.jsx(L,{type:"button",variant:"primary",size:"compact","data-testid":"border-collapse",title:"Uniform border","aria-label":"Use one border for all sides",onClick:()=>l(!1),children:o.jsx(X,{icon:ft})})]}),h.map(({key:d,label:b})=>o.jsxs("div",{style:{display:"flex",gap:4,alignItems:"center"},children:[o.jsx("span",{style:{fontSize:10,color:v.textMuted,width:10,textAlign:"center"},children:b}),o.jsx(Y,{testId:`border-${d}-color`,value:t[d].color,disabled:r,onChange:m=>p(d,{color:m},!1),onChangeEnd:m=>p(d,{color:m},!0),recentColors:a,onAddRecentColor:s}),o.jsx(A,{testId:`border-${d}-width`,label:"",value:t[d].width,min:0,disabled:r,onChange:m=>p(d,{width:m},!1),onChangeEnd:m=>p(d,{width:m},!0),style:{width:48}}),o.jsx(ut,{className:"vgai-select","data-testid":`border-${d}-style`,value:t[d].style,disabled:r,"data-density":"compact","data-dynamic":r||void 0,onChange:m=>p(d,{style:m.target.value},!0),style:{flex:1},children:bt.map(m=>o.jsx("option",{value:m,children:m},m))})]},d))]})}function Vt(t){return{topLeft:t,topRight:t,bottomLeft:t,bottomRight:t}}function Yt(t){return t.topLeft===t.topRight&&t.topRight===t.bottomLeft&&t.bottomLeft===t.bottomRight}function ue({value:t,onChange:e,onChangeEnd:n,disabled:r}){const[a,s]=$.useState(!Yt(t)),c=(p,h)=>{const d=Vt(p);h?B({onChange:e,onChangeEnd:n},d):N({onChange:e},d)},l=(p,h,d)=>{const b={...t,[p]:h};d?B({onChange:e,onChangeEnd:n},b):N({onChange:e},b)};if(!a)return o.jsxs("div",{"data-testid":"border-radius-editor-uniform",style:{display:"flex",gap:4,alignItems:"center"},children:[o.jsx(A,{testId:"border-radius",label:o.jsx(X,{icon:it,label:"Radius"}),value:t.topLeft,min:0,disabled:r,onChange:p=>c(p,!1),onChangeEnd:p=>c(p,!0),style:{flex:1}}),o.jsx(L,{type:"button","data-testid":"border-radius-expand",title:"Independent corners","aria-label":"Edit radius per corner",onClick:()=>s(!0),variant:"ghost",size:"compact",children:o.jsx(X,{icon:it})})]});const u=[{key:"topLeft",label:"TL"},{key:"topRight",label:"TR"},{key:"bottomLeft",label:"BL"},{key:"bottomRight",label:"BR"}];return o.jsxs("div",{"data-testid":"border-radius-editor-expanded",children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:4,marginBottom:4},children:[o.jsx("span",{style:{fontSize:10,color:v.textMuted},children:"Corners"}),o.jsx("div",{style:{flex:1}}),o.jsx(L,{type:"button",variant:"primary",size:"compact","data-testid":"border-radius-collapse",title:"Uniform radius","aria-label":"Use one radius for all corners",onClick:()=>s(!1),children:o.jsx(X,{icon:it})})]}),o.jsx("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:3},children:u.map(({key:p,label:h})=>o.jsx(A,{testId:`border-radius-${p}`,label:h,value:t[p],min:0,disabled:r,onChange:d=>l(p,d,!1),onChangeEnd:d=>l(p,d,!0)},p))})]})}const ot=[{name:"blur",unit:"px",min:0,max:50,step:.5,default:0},{name:"brightness",unit:"%",min:0,max:300,step:1,default:100},{name:"contrast",unit:"%",min:0,max:300,step:1,default:100},{name:"saturate",unit:"%",min:0,max:300,step:1,default:100},{name:"grayscale",unit:"%",min:0,max:100,step:1,default:0},{name:"hue-rotate",unit:"deg",min:0,max:360,step:1,default:0}];function fe(t){return!t||t==="none"?ot.map(e=>({name:e.name,value:e.default})):ot.map(e=>{const n=new RegExp(`${e.name}\\(([\\d.]+)${e.unit}?\\)`),r=t.match(n);return{name:e.name,value:r?.[1]?Number.parseFloat(r[1]):e.default}})}function he(t){const e=[];for(let n=0;n<t.length;n++){const r=t[n],a=ot[n];r&&a&&r.value!==a.default&&e.push(`${r.name}(${r.value}${a.unit})`)}return e.length?e.join(" "):"none"}function me({value:t,onChange:e,onChangeEnd:n,disabled:r,label:a="Filter",testId:s="filter-editor"}){const c=(l,u,p)=>{const h=t.map((d,b)=>b===l?{...d,value:u}:d);p?B({onChange:e,onChangeEnd:n},h):N({onChange:e},h)};return o.jsxs("div",{"data-testid":s,children:[o.jsx("div",{style:{fontSize:9,color:v.textMuted,marginBottom:4},children:a}),t.map((l,u)=>{const p=ot[u];return p?o.jsx("div",{"data-testid":`filter-row-${l.name}`,style:{marginBottom:3},children:o.jsx(A,{testId:`filter-${l.name}`,label:l.name.replace("hue-rotate","hue"),value:l.value,unit:p.unit,min:p.min,max:p.max,step:p.step,disabled:r,onChange:h=>c(u,h,!1),onChangeEnd:h=>c(u,h,!0)})},l.name):null})]})}const W=28,yt=10;function ge({value:t,onChange:e,disabled:n,fonts:r,testId:a="font-picker"}){const[s,c]=$.useState(!1),[l,u]=$.useState(""),[p,h]=$.useState(0),d=$.useRef(null),b=$.useRef(null);$.useEffect(()=>{s&&b.current?.focus()},[s]),$.useEffect(()=>{if(!s)return;const S=w=>{d.current&&!d.current.contains(w.target)&&c(!1)};return document.addEventListener("mousedown",S),()=>document.removeEventListener("mousedown",S)},[s]),$.useEffect(()=>{if(!s)return;const S=w=>{w.key==="Escape"&&c(!1)};return document.addEventListener("keydown",S),()=>document.removeEventListener("keydown",S)},[s]);const m=$.useMemo(()=>{if(!l)return r;const S=l.toLowerCase();return r.filter(w=>w.toLowerCase().includes(S))},[r,l]),i=m.length*W,f=Math.floor(p/W),g=Math.min(m.length,f+yt+2),k=m.slice(f,g),R=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:()=>R(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 Jt(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 Qt(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=Jt(t);if(!e)return null;const{angle:n,colorPart:r}=e.type==="linear"?Qt(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 R=t.stops.map((z,S)=>S===f?{...z,...g}:z);p({...t,stops:R},k)},d=()=>{const f=t.stops[t.stops.length-1]?.position??1,g=t.stops[0]?.position??0,k=(f+g)/2,R=[...t.stops,{color:"#888888",position:k}].sort((z,S)=>z.position-S.position);u(R.length-1),p({...t,stops:R},!0)},b=f=>{if(t.stops.length<=2)return;const g=t.stops.filter((k,R)=>R!==f);u(Math.min(l,g.length-1)),p({...t,stops:g},!0)},m=t.stops[l]?.color??"#000000",i=m.startsWith("#")?m:Mt(m);return o.jsxs("div",{"data-testid":c,children:[o.jsxs("div",{style:{position:"relative",marginBottom:8},children:[o.jsx("div",{"data-testid":"gradient-preview",style:{height:20,borderRadius:v.radiusSmall,border:`1px solid ${v.border}`,background:qt(t)}}),o.jsx(dt,{stops:t.stops.map(f=>({position:f.position,css:f.color})),selected:l,onSelect:u,onMove:(f,g,k)=>h(f,{position:g},k),disabled:r,testIdPrefix:"gradient-stop"})]}),o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,marginBottom:4},children:[o.jsx(Y,{testId:"gradient-selected-color",value:i,disabled:r,onChange:f=>h(l,{color:f},!1),onChangeEnd:f=>h(l,{color:f},!0),recentColors:a,onAddRecentColor:s}),o.jsxs("span",{style:{fontSize:9,color:v.textMuted},children:["Stop ",l+1]}),t.stops.length>2&&o.jsx(L,{type:"button",variant:"ghost",size:"compact","aria-label":"Remove gradient stop","data-testid":"gradient-remove-stop",onClick:()=>b(l),children:"×"}),o.jsx(L,{type:"button",variant:"ghost",size:"compact","data-testid":"gradient-add-stop",onClick:d,children:"+ stop"})]}),o.jsxs("div",{style:{display:"flex",gap:6,alignItems:"center"},children:[o.jsxs("div",{style:{display:"flex",gap:1,flex:1},children:[o.jsx(ht,{testId:"gradient-type-linear",label:"Linear",active:t.type==="linear",disabled:r,onClick:()=>p({...t,type:"linear"},!0)}),o.jsx(ht,{testId:"gradient-type-radial",label:"Radial",active:t.type==="radial",disabled:r,onClick:()=>p({...t,type:"radial"},!0)})]}),t.type==="linear"&&o.jsx(A,{testId:"gradient-angle",label:"°",value:t.angle,unit:"deg",disabled:r,onChange:f=>p({...t,angle:f},!1),onChangeEnd:f=>p({...t,angle:f},!0),style:{width:70}})]})]})}function jt(t){const e=n=>Math.round(Math.max(0,Math.min(1,n))*255).toString(16).padStart(2,"0");return`#${e(t.r)}${e(t.g)}${e(t.b)}`}function vt(t){return{r:Number.parseInt(t.slice(1,3),16)/255,g:Number.parseInt(t.slice(3,5),16)/255,b:Number.parseInt(t.slice(5,7),16)/255}}function tt(t,e,n){if(t.length===0)return;if(e<=t[0].pos)return t[0].value;const r=t[t.length-1];if(e>=r.pos)return r.value;for(let a=0;a+1<t.length;a++){const s=t[a],c=t[a+1];if(e>=s.pos&&e<=c.pos){const l=c.pos>s.pos?(e-s.pos)/(c.pos-s.pos):0;return n(s.value,c.value,l)}}return r.value}const V=(t,e,n)=>t+(e-t)*n,$t=(t,e,n)=>({r:V(t.r,e.r,n),g:V(t.g,e.g,n),b:V(t.b,e.b,n)});function et(t,e,n){const r={...t[e],pos:n},a=[...t.filter((s,c)=>c!==e),r].sort((s,c)=>s.pos-c.pos);return{keys:a,index:a.indexOf(r)}}function ye({value:t,onChange:e,onChangeEnd:n,disabled:r,testId:a="quarks-gradient"}){const[s,c]=$.useState({track:"color",i:0}),l=(i,f)=>{f?B({onChange:e,onChangeEnd:n},i):N({onChange:e},i)},u=i=>({...t,color:{...t.color,keys:i}}),p=i=>({...t,alpha:{...t.alpha,keys:i}}),d=[...new Set([...t.color.keys.map(i=>i.pos),...t.alpha.keys.map(i=>i.pos)])].sort((i,f)=>i-f).map(i=>{const f=tt(t.color.keys,i,$t)??{r:1,g:1,b:1},g=tt(t.alpha.keys,i,V)??1;return`rgba(${Math.round(f.r*255)},${Math.round(f.g*255)},${Math.round(f.b*255)},${Math.round(g*1e3)/1e3}) ${Math.round(i*100)}%`}).join(", "),b=t.color.keys[s.track==="color"?s.i:0],m=t.alpha.keys[s.track==="alpha"?s.i:0];return o.jsxs("div",{"data-testid":a,children:[o.jsx(dt,{stops:t.alpha.keys.map(i=>{const f=Math.round(Math.max(0,Math.min(1,i.value))*255);return{position:i.pos,css:`rgb(${f},${f},${f})`}}),selected:s.track==="alpha"?s.i:-1,onSelect:i=>c({track:"alpha",i}),onMove:(i,f,g)=>{const{keys:k,index:R}=et(t.alpha.keys,i,f);c({track:"alpha",i:R}),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:R}=et(t.color.keys,i,f);c({track:"color",i:R}),l(u(k),g)},disabled:r,testIdPrefix:`${a}-color-stop`}),s.track==="color"&&b&&o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,marginTop:4},children:[o.jsx(Y,{testId:`${a}-color-swatch`,value:jt(b.value),disabled:r,onChange:i=>l(u(t.color.keys.map((f,g)=>g===s.i?{...f,value:vt(i)}:f)),!1),onChangeEnd:i=>l(u(t.color.keys.map((f,g)=>g===s.i?{...f,value:vt(i)}:f)),!0)}),o.jsxs("span",{style:{fontSize:9,color:v.textMuted},children:["Color ",s.i+1,"/",t.color.keys.length]}),t.color.keys.length>2&&o.jsx(L,{type:"button",variant:"ghost",size:"compact","aria-label":"Remove color stop","data-testid":`${a}-remove-color-stop`,onClick:()=>{const i=t.color.keys.filter((f,g)=>g!==s.i);c({track:"color",i:Math.min(s.i,i.length-1)}),l(u(i),!0)},children:"×"}),o.jsx(L,{type:"button",variant:"ghost",size:"compact","data-testid":`${a}-add-color-stop`,onClick:()=>{const f=tt(t.color.keys,.5,$t)??{r:1,g:1,b:1},{keys:g,index:k}=et([...t.color.keys,{value:f,pos:.5}],t.color.keys.length,.5);c({track:"color",i:k}),l(u(g),!0)},children:"+ stop"})]}),s.track==="alpha"&&m&&o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,marginTop:4},children:[o.jsx(Dt,{label:"a",step:.05,testId:`${a}-alpha-value`,value:Math.round(m.value*1e3)/1e3,onChange:i=>l(p(t.alpha.keys.map((f,g)=>g===s.i?{...f,value:Math.max(0,Math.min(1,i))}:f)),!1),onChangeEnd:i=>l(p(t.alpha.keys.map((f,g)=>g===s.i?{...f,value:Math.max(0,Math.min(1,i))}:f)),!0)}),o.jsxs("span",{style:{fontSize:9,color:v.textMuted},children:["Alpha ",s.i+1,"/",t.alpha.keys.length]}),t.alpha.keys.length>2&&o.jsx(L,{type:"button",variant:"ghost",size:"compact","aria-label":"Remove alpha stop","data-testid":`${a}-remove-alpha-stop`,onClick:()=>{const i=t.alpha.keys.filter((f,g)=>g!==s.i);c({track:"alpha",i:Math.min(s.i,i.length-1)}),l(p(i),!0)},children:"×"}),o.jsx(L,{type:"button",variant:"ghost",size:"compact","data-testid":`${a}-add-alpha-stop`,onClick:()=>{const f=tt(t.alpha.keys,.5,V)??1,{keys:g,index:k}=et([...t.alpha.keys,{value:f,pos:.5}],t.alpha.keys.length,.5);c({track:"alpha",i:k}),l(p(g),!0)},children:"+ stop"})]})]})}const te={x:0,y:4,blur:8,spread:0,color:"rgba(0,0,0,0.25)",inset:!1,enabled:!0},ee={x:0,y:2,blur:4,spread:0,color:"rgba(0,0,0,0.3)",inset:!1,enabled:!0};function ne(t,e){return(e?[t.inset?"inset":"",`${t.x}px`,`${t.y}px`,`${t.blur}px`,`${t.spread}px`,t.color]:[`${t.x}px`,`${t.y}px`,`${t.blur}px`,t.color]).filter(Boolean).join(" ")}function je(t,e=!0){const n=t.filter(r=>r.enabled);return n.length===0?"none":n.map(r=>ne(r,e)).join(", ")}function re(t){const e=t.match(/(rgba?\([^)]+\))/);if(e?.[1])return{color:e[1],nums:t.replace(e[1],"").trim()};const n=t.match(/(#[0-9a-fA-F]{3,8})/);return n?.[1]?{color:n[1],nums:t.replace(n[1],"").trim()}:{color:"#000000",nums:t}}function oe(t,e){if(!t||t==="none")return null;const n=t.trim(),r=e&&n.startsWith("inset"),a=r?n.slice(5).trim():n,{color:s,nums:c}=re(a),l=c.split(/\s+/).map(u=>Number.parseFloat(u)).filter(u=>!Number.isNaN(u));return e?{inset:r,x:l[0]??0,y:l[1]??0,blur:l[2]??0,spread:l[3]??0,color:s}:l.length<2?null:{inset:!1,x:l[0]??0,y:l[1]??0,blur:l[2]??0,spread:0,color:s}}function ve(t,e=!0){if(!t||t==="none")return[];const n=t.split(/,\s*(?![^(]*\))/),r=[];for(const a of n){const s=oe(a.trim(),e);s&&r.push({...s,enabled:!0})}return r}function Ct({value:t,onChange:e,onChangeEnd:n,disabled:r,withSpreadInset:a=!0,label:s="Shadow",testId:c="shadow-editor",recentColors:l,onAddRecentColor:u}){const p=(m,i)=>{i?B({onChange:e,onChangeEnd:n},m):N({onChange:e},m)},h=(m,i,f=!1)=>{p(t.map((g,k)=>k===m?{...g,...i}:g),f)},d=m=>{p(t.filter((i,f)=>f!==m),!0)},b=()=>{p([...t,{...a?te:ee}],!0)};return o.jsxs("div",{"data-testid":c,children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,marginBottom:t.length>0?4:0},children:[o.jsx("span",{style:{fontSize:9,color:v.textMuted},children:s}),o.jsx("div",{style:{flex:1}}),!r&&o.jsx(L,{type:"button",variant:"ghost",size:"compact","data-testid":`${c}-add`,onClick:b,children:"+"})]}),t.map((m,i)=>{const f=m.color.startsWith("#")?m.color:Mt(m.color);return o.jsxs("div",{"data-testid":`${c}-row-${i}`,style:{marginBottom:6,padding:"4px 0",borderBottom:`1px solid ${v.border}`},children:[o.jsxs("div",{style:{display:"flex",alignItems:"center",gap:4,marginBottom:4},children:[o.jsx(L,{type:"button",variant:"ghost",size:"compact","aria-pressed":m.enabled,"data-testid":`${c}-toggle-${i}`,onClick:()=>{r||h(i,{enabled:!m.enabled},!0)},children:m.enabled?"●":"○"}),o.jsx(Y,{testId:`${c}-color-${i}`,value:f,disabled:r,onChange:g=>h(i,{color:g}),onChangeEnd:g=>h(i,{color:g},!0),recentColors:l,onAddRecentColor:u}),a&&o.jsxs("label",{style:{display:"flex",alignItems:"center",gap:2,fontSize:8,color:v.textMuted,cursor:"pointer"},children:[o.jsx(Ft,{className:"vgai-checkbox","data-testid":`${c}-inset-${i}`,checked:m.inset,disabled:r,onChange:g=>h(i,{inset:g.target.checked},!0)}),"in"]}),o.jsx("div",{style:{flex:1}}),!r&&o.jsx(L,{type:"button",variant:"ghost",size:"compact","aria-label":`Remove ${s.toLowerCase()} ${i+1}`,"data-testid":`${c}-remove-${i}`,onClick:()=>d(i),children:"×"})]}),m.enabled&&o.jsxs("div",{style:{display:"flex",gap:4},children:[o.jsx(A,{label:"X",value:m.x,disabled:r,onChange:g=>h(i,{x:g}),onChangeEnd:g=>h(i,{x:g},!0),style:{flex:1}}),o.jsx(A,{label:"Y",value:m.y,disabled:r,onChange:g=>h(i,{y:g}),onChangeEnd:g=>h(i,{y:g},!0),style:{flex:1}}),o.jsx(A,{label:"B",value:m.blur,min:0,disabled:r,onChange:g=>h(i,{blur:Math.max(0,g)}),onChangeEnd:g=>h(i,{blur:Math.max(0,g)},!0),style:{flex:1}}),a&&o.jsx(A,{label:"S",value:m.spread,disabled:r,onChange:g=>h(i,{spread:g}),onChangeEnd:g=>h(i,{spread:g},!0),style:{flex:1}})]})]},i)})]})}function $e(t){return o.jsx(Ct,{...t,withSpreadInset:!0,testId:"box-shadow-editor",label:t.label??"Shadow"})}function we(t){return o.jsx(Ct,{...t,withSpreadInset:!1,testId:"text-shadow-editor",label:t.label??"Text Shadow"})}export{ce as A,pe as B,Y as C,te as D,me as F,be as G,ye as Q,A as S,we as T,ue as a,fe as b,qt as c,he as d,ve as e,$e as f,je as g,ge as h,Xt as i,Yt as j,de as k,Gt as l,ee as m,dt as n,Ct as o,xe as p,Vt as q,Wt as u};