@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,22 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/babylon-authoring-adapter-C8mFMXSr.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/json-history-resource-DwS10tqD.js","assets/source-persistence-backend-CwLYVPXj.js","assets/ingest-source-persistence-Dmdo-UBp.js","assets/pixi-authoring-adapter-BChknIdC.js","assets/index-SS9EugVg.js","assets/component-instance-root-B0C5oNEm.js","assets/user-data-Bpj7diUS.js","assets/workspace-arrangement-BdAlBwvd.js","assets/pixi-transform-channels-P4rvmusc.js","assets/pixi-live-write-target-BjDsBQbp.js","assets/canvas-entry-runtime-UNYuSfG0.js","assets/debug-registry-P0_YQGWd.js","assets/mount-ingest-root-DYR0TMIt.js","assets/active-ingest-DA426a81.js","assets/game-contract-seams-BnPFGLll.js","assets/capability-coverage-DZ-onC5j.js","assets/contract-system-adapters-Bic_7sev.js","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/entity-object-JmYMfLsx.js","assets/three-contract-Dkt6PmWY.js","assets/module-mode-BH2R93XP.js","assets/binding-resolver-dE0GnZT5.js","assets/native-debug-module-2_HVupdg.js","assets/native-entry-surface-BE8LJNdu.js","assets/adapter-surface-Y37Nzcyw.js","assets/entry-adjudication-Dc18TIqT.js","assets/structural-signature-Dc7skRiy.js","assets/webgl-frame-capture-DdJkM2mi.js","assets/events-156d8d12.esm-CYeuVCYr.js","assets/index-bQE2NA0D.js","assets/realm-services-CnY105XU.js","assets/three-ingest-runtime-B7rtg3QE.js","assets/EffectComposer-BEAt0PtQ.js","assets/CopyShader-BzTUYzf6.js","assets/ShaderPass-DTnDQXm0.js","assets/CSS3DRenderer-BsAqfavI.js","assets/relative-path-guard-GiM7Lsz8.js","assets/react-root-BHA-cdrW.js","assets/mount-manifest-DdkFYdVA.js","assets/create-runtime-DBfUy0SO.js","assets/binding-Bmxqznjk.js","assets/root-stacking-BEd9ZvxC.js","assets/assets-BcrMQHRv.js","assets/loader-BTUKnX5Q.js","assets/KTX2Loader-CaqVE6nY.js","assets/GLTFLoader-KeoruJgS.js","assets/BufferGeometryUtils-B22h7jo4.js","assets/setup-renderer-Cwkl1Ar6.js","assets/index-DHhMOs_s.js","assets/defaults-DKiBJCPN.js","assets/render-settings-DS5leCed.js","assets/render-features-rxbawsRb.js","assets/seeded-random-BgCwIAAU.js","assets/loop-gate-report-N52EWFGD.js","assets/system-slot-E2mEdiih.js","assets/user-data-dHvLdpwM.js","assets/object-marks-DwvIEBOK.js","assets/performance-profiler-OwnXQX0M.js","assets/debug-bridge-D3_-EgRE.js","assets/adapter-runtime-bindings-4cmsRvRh.js","assets/game-audio-CaGKzia4.js","assets/game-network-Ct2FQYmu.js","assets/index-OZVqp6xS.js","assets/index-Da9JhEvW.js","assets/rapier-physics-adapter-CaZqWLu0.js","assets/live-project-verbs-C3LzprCe.js","assets/edit-mode-authoring-DeCxPcHM.js","assets/editor-presentation-activity-C7SNSmTd.js","assets/pixi-story-model-DNkfnWUV.js","assets/surface-content-Dg9Kkazf.js","assets/viewport-root-presentation-vgxsTyj4.js","assets/mounted-authoring-Clftxx0x.js","assets/three-TCuY32m_.js","assets/viewport-editor-controls-BYaAZ_Ku.js","assets/three-authoring-adapter-htbnVej2.js","assets/three-projection-core-CG01r5Ta.js","assets/body-marks-RKb_LTwL.js","assets/structural-ids-Br2zjINh.js","assets/object3d-authoring-subject-BDrxd1GA.js","assets/r3f-physics-binding-DzrbpqjM.js","assets/deferred-ingest-play-BdR4qGk6.js","assets/rrweb-Cd2ifIRP.js","assets/react-world-authoring-adapter-DOjv2pYm.js","assets/board-guides-BEKPgD9M.js","assets/relative-import-specifier-BFKIWEWs.js","assets/story-arg-descriptors-Ek86ExX7.js","assets/inspect-Dr4qvDpJ.js","assets/inference-diagnostics-xecGdohW.js","assets/writer-tw6EcuVO.js","assets/viewport-door-Bj_ZIP85.js"])))=>i.map(i=>d[i]);
2
- import{O as et,Y as Bt,X as Cn,lZ as An,l_ as xn,bF as Rn,bG as In,V as jt,l$ as zt,bz as kn,bA as On,bC as Nt,m0 as Dn,U as Fn,m1 as Gn,bB as Bn,M as S,q as C,jN as $t,m2 as jn,m3 as zn,m4 as Nn,m5 as W,ah as $n,l5 as Ut,af as Un,bs as ue,k7 as Vn,m6 as Wn,ar as Vt,m7 as qn,au as Ce,y as Wt,a8 as ge,km as vt,m8 as qt,_ as z,m9 as Ht,ma as Kt,kD as Yt,h3 as Xt,p as Hn,ks as Kn,mb as Yn,mc as Xn,md as Jn,me as Zn,mf as Qn,gM as er,gf as tr,ay as nr,br as Jt,mg as rr,mh as Zt,mi as sr,fX as or,bk as ar,bl as ir,eb as lr,gH as cr,mj as ur,go as dr,fC as fr}from"./index-BRJMIUK0.js";import{e as gr,i as Qt}from"./adapter-runtime-bindings-4cmsRvRh.js";import{B as wt}from"./edit-mode-authoring-DeCxPcHM.js";import{p as en,c as hr}from"./json-history-resource-DwS10tqD.js";import{a as tn}from"./binding-resolver-dE0GnZT5.js";import{i as pr,s as mr}from"./editor-presentation-activity-C7SNSmTd.js";import{E as nn,V as yr,W as vr,G as rn,B as Ve,l as _e,X as wr,g as br}from"./active-ingest-DA426a81.js";import{m as Lr}from"./pixi-story-model-DNkfnWUV.js";import{t as Er,d as _r}from"./surface-content-Dg9Kkazf.js";import{p as Mr,l as Sr}from"./viewport-root-presentation-vgxsTyj4.js";import{g as Pr}from"./seeded-random-BgCwIAAU.js";import{D as bt,g as sn}from"./debug-registry-P0_YQGWd.js";import{assertNever as Tr}from"./adapter-surface-Y37Nzcyw.js";import{r as Cr,o as Ar,s as xr}from"./three-authoring-adapter-htbnVej2.js";import{t as tt}from"./three-contract-Dkt6PmWY.js";import{mountDeferredIngestForPlay as Rr,exitDeferredIngestPlay as Ir}from"./deferred-ingest-play-BdR4qGk6.js";import{r as X}from"./rrweb-Cd2ifIRP.js";import{R as kr,w as Or}from"./react-world-authoring-adapter-DOjv2pYm.js";import{o as Dr}from"./three-state-DwFE3ay2.js";import{p as Fr}from"./viewport-door-Bj_ZIP85.js";async function Gr(t){try{const e=await fetch(`${et}/log-session`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"start",...t?{name:t}:{}})});return(await Cn(e,"Could not start a play log session")).file}catch{return null}}async function Br(){try{const t=await fetch(`${et}/log-session`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"end"})});Bt(t,"Could not end the play log session")}catch{}}async function on(t){if(t.length===0)return!0;try{const e=await fetch(`${et}/log-entries`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({entries:t})});return Bt(e,"Could not flush play log entries"),!0}catch{return!1}}let m=(function(t){return t.info="info",t.warn="warn",t.error="error",t.debug="debug",t.trace="trace",t.fatal="fatal",t})({});const ee={trace:10,debug:20,info:30,warn:40,error:50,fatal:60},an=Symbol.for("loglayer.lazy"),nt="[LazyEvalError]";function Z(t){return t!=null&&typeof t=="object"&&an in t}function Lt(t){let e=0;for(const n of Object.keys(t))Z(t[n])&&e++;return e}function De(t){let e=!1;for(const s of Object.keys(t))if(Z(t[s])){e=!0;break}if(!e)return{resolved:t,errors:null};const n={};let r=null;for(const s of Object.keys(t)){const o=t[s];if(Z(o))try{n[s]=o[an]()}catch(a){n[s]=nt,r||(r=[]),r.push({key:s,error:a})}else n[s]=o}return{resolved:n,errors:r}}function jr(t){for(const e of Object.keys(t))if(t[e]instanceof Promise)return!0;return!1}function Et(t){let e=null;const n={};for(const r of Object.keys(t))t[r]instanceof Promise?(n[r]=nt,e||(e=[]),e.push(r)):n[r]=t[r];return e?{resolved:n,asyncKeys:e}:{resolved:t,asyncKeys:null}}async function zr(t){const e=Object.keys(t),n=await Promise.allSettled(e.map(o=>Promise.resolve(t[o]))),r={};let s=null;for(let o=0;o<e.length;o++){const a=n[o];a.status==="fulfilled"?r[e[o]]=a.value:(r[e[o]]=nt,s||(s=[]),s.push({key:e[o],error:a.reason}))}return{resolved:r,errors:s}}function G(t){const e=t[0];if(Array.isArray(e)&&typeof e.raw<"u"){const n=e,r=t.slice(1);let s="";for(let o=0;o<n.length;o++)s+=n[o],o<r.length&&(s+=String(r[o]));return[s]}return t}let I=(function(t){return t.transformLogLevel="transformLogLevel",t.onBeforeDataOut="onBeforeDataOut",t.shouldSendToLogger="shouldSendToLogger",t.onMetadataCalled="onMetadataCalled",t.onBeforeMessageOut="onBeforeMessageOut",t.onContextCalled="onContextCalled",t})({});var Nr=class ln{context={};hasContext=!1;setContext(e){if(!e){this.context={},this.hasContext=!1;return}this.context=e,this.hasContext=!0}appendContext(e){this.context={...this.context,...e},this.hasContext=!0}getContext(){return this.context}hasContextData(){return this.hasContext}clearContext(e){if(e===void 0){this.context={},this.hasContext=!1;return}const n=Array.isArray(e)?e:[e];for(const r of n)delete this.context[r];this.hasContext=Object.keys(this.context).length>0}onChildLoggerCreated({parentContextManager:e,childContextManager:n}){if(e.hasContextData()){const r=e.getContext();n.setContext({...r})}}clone(){const e=new ln;return e.setContext({...this.context}),e.hasContext=this.hasContext,e}},$r=class We{logLevelEnabledStatus={info:!0,warn:!0,error:!0,debug:!0,trace:!0,fatal:!0};setLevel(e){const n=ee[e];for(const r of Object.values(m)){const s=r,o=ee[r];this.logLevelEnabledStatus[s]=o>=n}}enableIndividualLevel(e){const n=e;n in this.logLevelEnabledStatus&&(this.logLevelEnabledStatus[n]=!0)}disableIndividualLevel(e){const n=e;n in this.logLevelEnabledStatus&&(this.logLevelEnabledStatus[n]=!1)}isLevelEnabled(e){const n=e;return this.logLevelEnabledStatus[n]}enableLogging(){for(const e of Object.keys(this.logLevelEnabledStatus))this.logLevelEnabledStatus[e]=!0}disableLogging(){for(const e of Object.keys(this.logLevelEnabledStatus))this.logLevelEnabledStatus[e]=!1}onChildLoggerCreated({parentLogLevelManager:e,childLogLevelManager:n}){const r=e.logLevelEnabledStatus;n instanceof We&&(n.logLevelEnabledStatus={...r})}clone(){const e=new We;return e.logLevelEnabledStatus={...this.logLevelEnabledStatus},e}},Ur=class{id;enabled;level;consoleDebug;constructor(t){this.id=t.id??Date.now().toString()+Math.random().toString(),this.enabled=t.enabled??!0,this.consoleDebug=t.consoleDebug??!1,this.level=t.level??"trace"}_sendToLogger(t){if(!this.enabled||ee[t.logLevel]<ee[this.level])return;const e=this.shipToLogger(t);if(this.consoleDebug)switch(t.logLevel){case m.info:console.info(...e);break;case m.warn:console.warn(...e);break;case m.error:console.error(...e);break;case m.trace:console.debug(...e);break;case m.debug:console.debug(...e);break;case m.fatal:console.debug(...e);break;default:console.log(...e)}}getLoggerInstance(){throw new Error("This transport does not have a logger instance")}},Vr={};const Wr=[I.onBeforeDataOut,I.onMetadataCalled,I.onBeforeMessageOut,I.transformLogLevel,I.shouldSendToLogger,I.onContextCalled];var _t=class{idToPlugin;transformLogLevel=[];onBeforeDataOut=[];shouldSendToLogger=[];onMetadataCalled=[];onBeforeMessageOut=[];onContextCalled=[];constructor(t){this.idToPlugin={},this.mapPlugins(t),this.indexPlugins()}mapPlugins(t){for(const e of t){if(e.id||(e.id=Date.now().toString()+Math.random().toString()),this.idToPlugin[e.id])throw new Error(`[LogLayer] Plugin with id ${e.id} already exists.`);e.registeredAt=Date.now(),this.idToPlugin[e.id]=e}}indexPlugins(){this.transformLogLevel=[],this.onBeforeDataOut=[],this.shouldSendToLogger=[],this.onMetadataCalled=[],this.onBeforeMessageOut=[],this.onContextCalled=[];const t=Object.values(this.idToPlugin).sort((e,n)=>e.registeredAt-n.registeredAt);for(const e of t){if(e.disabled)return;for(const n of Wr)e[n]&&e.id&&this[n].push(e.id)}}hasPlugins(t){return this[t].length>0}countPlugins(t){return t?this[t].length:Object.keys(this.idToPlugin).length}addPlugins(t){this.mapPlugins(t),this.indexPlugins()}enablePlugin(t){const e=this.idToPlugin[t];e&&(e.disabled=!1),this.indexPlugins()}disablePlugin(t){const e=this.idToPlugin[t];e&&(e.disabled=!0),this.indexPlugins()}removePlugin(t){delete this.idToPlugin[t],this.indexPlugins()}runTransformLogLevel(t,e){let n=null;for(const r of this.transformLogLevel){const s=this.idToPlugin[r];if(s.transformLogLevel){const o=s.transformLogLevel({data:t.data,logLevel:t.logLevel,messages:t.messages,error:t.error,metadata:t.metadata,context:t.context,groups:t.groups,schema:t.schema,prefix:t.prefix},e);o!=null&&o!==!1&&(n=o)}}return n!=null&&n!==!1?n:t.logLevel}runOnBeforeDataOut(t,e){const n={...t},r=n.data;for(const s of this.onBeforeDataOut){const o=this.idToPlugin[s];if(o.onBeforeDataOut){const a=o.onBeforeDataOut({data:n.data,logLevel:n.logLevel,error:n.error,metadata:n.metadata,context:n.context,groups:n.groups,schema:n.schema,prefix:n.prefix},e);a&&(n.data||(n.data={}),a!==r&&Object.assign(n.data,a))}}return n.data}runShouldSendToLogger(t,e){return!this.shouldSendToLogger.some(n=>!this.idToPlugin[n].shouldSendToLogger?.(t,e))}runOnMetadataCalled(t,e){let n={...t};for(const r of this.onMetadataCalled){const s=this.idToPlugin[r].onMetadataCalled?.(n,e);if(s)n=s;else return null}return n}runOnBeforeMessageOut(t,e){let n=[...t.messages];for(const r of this.onBeforeMessageOut){const s=this.idToPlugin[r].onBeforeMessageOut?.({messages:n,logLevel:t.logLevel,groups:t.groups,schema:t.schema,prefix:t.prefix},e);s&&(n=s)}return n}runOnContextCalled(t,e){let n={...t};for(const r of this.onContextCalled){const s=this.idToPlugin[r].onContextCalled?.(n,e);if(s)n=s;else return null}return n}},qr=class cn{pluginManager;idToTransport;hasMultipleTransports;singleTransport;contextManager;logLevelManager;_isLoggingLazyError=!1;_lazyContextCount=0;_assignedGroups=null;_groupsConfig=null;_activeGroups=null;_ungroupedBehavior="all";_config;constructor(e){this._config={...e,enabled:e.enabled??!0},this.contextManager=new Nr,this.logLevelManager=new $r,this._config.enabled||this.disableLogging();const n=[...e.plugins||[],...re.pluginsToInit];this.pluginManager=new _t(n),this._config.errorFieldName||(this._config.errorFieldName="err"),this._config.copyMsgOnOnlyError||(this._config.copyMsgOnOnlyError=!1),this._initializeTransports(this._config.transport),this._groupsConfig=e.groups?{...e.groups}:null,this._ungroupedBehavior=e.ungroupedBehavior??"all",this._activeGroups=e.activeGroups?new Set(e.activeGroups):null,this._parseEnvGroups(),re.logLayerHandlers.length>0&&re.logLayerHandlers.forEach(r=>{r.onConstruct&&r.onConstruct(this,e)})}withContextManager(e){return this.contextManager&&typeof this.contextManager[Symbol.dispose]=="function"&&this.contextManager[Symbol.dispose](),this.contextManager=e,this._lazyContextCount=e.hasContextData()?Lt(e.getContext()):0,this}getContextManager(){return this.contextManager}withLogLevelManager(e){return this.logLevelManager&&typeof this.logLevelManager[Symbol.dispose]=="function"&&this.logLevelManager[Symbol.dispose](),this.logLevelManager=e,this}getLogLevelManager(){return this.logLevelManager}getConfig(){return this._config}_initializeTransports(e){if(this.idToTransport)for(const n in this.idToTransport)this.idToTransport[n]&&typeof this.idToTransport[n][Symbol.dispose]=="function"&&this.idToTransport[n][Symbol.dispose]();this.hasMultipleTransports=Array.isArray(e)&&e.length>1,this.singleTransport=this.hasMultipleTransports?null:Array.isArray(e)?e[0]:e,Array.isArray(e)?this.idToTransport=e.reduce((n,r)=>(n[r.id]=r,n),{}):this.idToTransport={[e.id]:e}}withPrefix(e){const n=this.child();return n._config.prefix=e,n}withGroup(e){const n=this.child(),r=Array.isArray(e)?e:[e];if(n._assignedGroups){const s=new Set([...n._assignedGroups,...r]);n._assignedGroups=Array.from(s)}else n._assignedGroups=[...r];return n}addGroup(e,n){return this._groupsConfig||(this._groupsConfig={}),this._groupsConfig[e]={...n},this}removeGroup(e){return this._groupsConfig&&(delete this._groupsConfig[e],Object.keys(this._groupsConfig).length===0&&(this._groupsConfig=null)),this}enableGroup(e){return this._groupsConfig?.[e]&&(this._groupsConfig[e]={...this._groupsConfig[e],enabled:!0}),this}disableGroup(e){return this._groupsConfig?.[e]&&(this._groupsConfig[e]={...this._groupsConfig[e],enabled:!1}),this}setGroupLevel(e,n){return this._groupsConfig?.[e]&&(this._groupsConfig[e]={...this._groupsConfig[e],level:n}),this}setActiveGroups(e){return this._activeGroups=e?new Set(e):null,this}getGroups(){return this._groupsConfig?{...this._groupsConfig}:{}}withContext(e){let n=e;if(!e)return this._config.consoleDebug&&console.debug("[LogLayer] withContext was called with no context; dropping."),this;if(this.pluginManager.hasPlugins(I.onContextCalled)&&(n=this.pluginManager.runOnContextCalled(e,this),!n))return this._config.consoleDebug&&console.debug("[LogLayer] Context was dropped due to plugin returning falsy value."),this;const r=this.contextManager.getContext();for(const s of Object.keys(n)){const o=s in r&&Z(r[s]),a=Z(n[s]);!o&&a?this._lazyContextCount++:o&&!a&&this._lazyContextCount--}return this.contextManager.appendContext(n),this}clearContext(e){if(e!==void 0&&this._lazyContextCount>0){const n=this.contextManager.getContext(),r=Array.isArray(e)?e:[e];for(const s of r)s in n&&Z(n[s])&&this._lazyContextCount--}else e===void 0&&(this._lazyContextCount=0);return this.contextManager.clearContext(e),this}getContext(e){const n=this.contextManager.getContext();if(e?.raw||this._lazyContextCount===0)return n;const{resolved:r,errors:s}=De(n);s&&this._logLazyEvalErrors(s,"context");const{resolved:o,asyncKeys:a}=Et(r);return a&&this._logAsyncLazyContextErrors(a),o}addPlugins(e){this.pluginManager.addPlugins(e)}enablePlugin(e){this.pluginManager.enablePlugin(e)}disablePlugin(e){this.pluginManager.disablePlugin(e)}removePlugin(e){this.pluginManager.removePlugin(e)}withMetadata(e){return new Mt(this).withMetadata(e)}withError(e){return new Mt(this).withError(e)}child(){const e=new cn({...this._config,transport:Array.isArray(this._config.transport)?[...this._config.transport]:this._config.transport}).withPluginManager(this.pluginManager).withContextManager(this.contextManager.clone()).withLogLevelManager(this.logLevelManager.clone());return this.contextManager.onChildLoggerCreated({parentContextManager:this.contextManager,childContextManager:e.contextManager,parentLogger:this,childLogger:e}),this.logLevelManager.onChildLoggerCreated({parentLogLevelManager:this.logLevelManager,childLogLevelManager:e.logLevelManager,parentLogger:this,childLogger:e}),e._lazyContextCount=e.contextManager.hasContextData()?Lt(e.contextManager.getContext()):0,e._groupsConfig=this._groupsConfig,e._activeGroups=this._activeGroups,e._ungroupedBehavior=this._ungroupedBehavior,e._assignedGroups=this._assignedGroups?[...this._assignedGroups]:null,e}withFreshTransports(e){return this._config.transport=e,this._initializeTransports(e),this}addTransport(e){const n=Array.isArray(e)?e:[e],r=Array.isArray(this._config.transport)?this._config.transport:[this._config.transport],s=new Set(n.map(a=>a.id));for(const a of n){const i=this.idToTransport[a.id];i&&typeof i[Symbol.dispose]=="function"&&i[Symbol.dispose]()}const o=[...r.filter(a=>!s.has(a.id)),...n];this._config.transport=o;for(const a of n)this.idToTransport[a.id]=a;return this.hasMultipleTransports=o.length>1,this.singleTransport=this.hasMultipleTransports?null:o[0],this}removeTransport(e){const n=this.idToTransport[e];if(!n)return!1;typeof n[Symbol.dispose]=="function"&&n[Symbol.dispose](),delete this.idToTransport[e];const r=(Array.isArray(this._config.transport)?this._config.transport:[this._config.transport]).filter(s=>s.id!==e);return this._config.transport=r.length===1?r[0]:r,this.hasMultipleTransports=r.length>1,this.singleTransport=this.hasMultipleTransports?null:r[0]||null,!0}withFreshPlugins(e){return this._config.plugins=e,this.pluginManager=new _t(e),this}withPluginManager(e){return this.pluginManager=e,this}errorOnly(e,n){const r=n?.logLevel||m.error;if(!this.isLevelEnabled(r))return;const{copyMsgOnOnlyError:s}=this._config,o={logLevel:r,err:e};(s&&n?.copyMsg!==!1||n?.copyMsg===!0)&&e?.message&&(o.params=[e.message]),this._formatLog(o)}metadataOnly(e,n=m.info){if(!this.isLevelEnabled(n))return;const{muteMetadata:r,consoleDebug:s}=this._config;if(r)return;if(!e){s&&console.debug("[LogLayer] metadataOnly was called with no metadata; dropping.");return}let o=e;if(this.pluginManager.hasPlugins(I.onMetadataCalled)&&(o=this.pluginManager.runOnMetadataCalled(e,this),!o)){s&&console.debug("[LogLayer] Metadata was dropped due to plugin returning falsy value.");return}const a={logLevel:n,metadata:o};return this._formatLog(a)}info(...e){if(!this.isLevelEnabled(m.info))return;const n=G(e);this._formatMessage(n),this._formatLog({logLevel:m.info,params:n})}warn(...e){if(!this.isLevelEnabled(m.warn))return;const n=G(e);this._formatMessage(n),this._formatLog({logLevel:m.warn,params:n})}error(...e){if(!this.isLevelEnabled(m.error))return;const n=G(e);this._formatMessage(n),this._formatLog({logLevel:m.error,params:n})}debug(...e){if(!this.isLevelEnabled(m.debug))return;const n=G(e);this._formatMessage(n),this._formatLog({logLevel:m.debug,params:n})}trace(...e){if(!this.isLevelEnabled(m.trace))return;const n=G(e);this._formatMessage(n),this._formatLog({logLevel:m.trace,params:n})}fatal(...e){if(!this.isLevelEnabled(m.fatal))return;const n=G(e);this._formatMessage(n),this._formatLog({logLevel:m.fatal,params:n})}raw(e){if(!this.isLevelEnabled(e.logLevel))return;const n={logLevel:e.logLevel,params:e.messages,metadata:e.metadata,rootData:e.rootData,err:e.error,context:e.context};return this._formatMessage(e.messages),this._formatLog(n)}disableLogging(){return this.logLevelManager.disableLogging(),this}enableLogging(){return this.logLevelManager.enableLogging(),this}muteContext(){return this._config.muteContext=!0,this}unMuteContext(){return this._config.muteContext=!1,this}muteMetadata(){return this._config.muteMetadata=!0,this}unMuteMetadata(){return this._config.muteMetadata=!1,this}enableIndividualLevel(e){return this.logLevelManager.enableIndividualLevel(e),this}disableIndividualLevel(e){return this.logLevelManager.disableIndividualLevel(e),this}setLevel(e){return this.logLevelManager.setLevel(e),this}isLevelEnabled(e){return this.logLevelManager.isLevelEnabled(e)}formatContext(e){const{contextFieldName:n,muteContext:r}=this._config;return e&&Object.keys(e).length>0&&!r?n?{[n]:{...e}}:{...e}:{}}formatMetadata(e=null){const{metadataFieldName:n,muteMetadata:r}=this._config;return e&&!r?n?{[n]:{...e}}:{...e}:{}}getLoggerInstance(e){const n=this.idToTransport[e];if(n)return n.getLoggerInstance()}_parseEnvGroups(){const e=typeof process<"u"?Vr?.LOGLAYER_GROUPS:void 0;if(!e)return;const n=e.split(",").map(s=>s.trim()).filter(Boolean),r=[];for(const s of n){const o=s.indexOf(":");if(o>0){const a=s.slice(0,o),i=s.slice(o+1);r.push(a),this._groupsConfig?.[a]&&(this._groupsConfig[a]={...this._groupsConfig[a],level:i})}else r.push(s)}this._activeGroups=new Set(r)}_mergeGroups(e){if(this._assignedGroups&&e){const n=new Set([...this._assignedGroups,...e]);return Array.from(n)}return e||this._assignedGroups}_applyUngroupedRules(e){return this._ungroupedBehavior==="all"?!0:this._ungroupedBehavior==="none"?!1:this._ungroupedBehavior.includes(e)}_shouldTransportReceiveLog(e,n,r){if(!this._groupsConfig)return!0;const s=this._mergeGroups(r);if(!s||s.length===0)return this._applyUngroupedRules(e);let o=!1;for(const a of s){const i=this._groupsConfig[a];if(i&&(o=!0,i.enabled!==!1&&!(this._activeGroups&&!this._activeGroups.has(a)))){if(i.level){const c=ee[i.level];if(ee[n]<c)continue}if(i.transports.includes(e))return!0}}return o?!1:this._applyUngroupedRules(e)}_formatMessage(e=[]){const{prefix:n}=this._config;n&&typeof e[0]=="string"&&(e[0]=`${n} ${e[0]}`)}_formatLog({logLevel:e,params:n=[],metadata:r=null,rootData:s=null,err:o,context:a=null,groups:i=null}){const c=a!==null?a:this.contextManager.getContext();let g;if(this._lazyContextCount>0||a!==null){const p=De(c);p.errors&&this._logLazyEvalErrors(p.errors,"context");const{resolved:f,asyncKeys:u}=Et(p.resolved);u&&this._logAsyncLazyContextErrors(u),g=f}else g=c;let l=null;if(r){const p=De(r);r=p.resolved,l=p.errors}if(l&&this._logLazyEvalErrors(l,"metadata"),r&&jr(r))return this._resolveAsyncAndProcess(e,n,g,r,s,o,a,i);this._processLog(e,n,g,r,s,o,a,i)}async _resolveAsyncAndProcess(e,n,r,s,o,a,i,c){let g=null;if(s){const l=await zr(s);g=l.resolved,l.errors&&this._logLazyEvalErrors(l.errors,"metadata")}this._processLog(e,n,r,g,o,a,i,c)}_logLazyEvalErrors(e,n){if(this._isLoggingLazyError){for(const r of e)console.error(`[LogLayer] Lazy evaluation error in ${n} key "${r.key}":`,r.error);return}this._isLoggingLazyError=!0;try{for(const r of e){const s=r.error instanceof Error?r.error.message:String(r.error);this._processLog(m.error,[`[LogLayer] Lazy evaluation failed for ${n} key "${r.key}": ${s}`],{},null,null,r.error instanceof Error?r.error:void 0,{})}}finally{this._isLoggingLazyError=!1}}_logAsyncLazyContextErrors(e){if(this._isLoggingLazyError){for(const n of e)console.error(`[LogLayer] Async lazy values are not supported in context (key "${n}"). Use async lazy only in metadata.`);return}this._isLoggingLazyError=!0;try{for(const n of e)this._processLog(m.error,[`[LogLayer] Async lazy values are not supported in context (key "${n}"). Use async lazy only in metadata.`],{},null,null,void 0,{})}finally{this._isLoggingLazyError=!1}}_processLog(e,n,r,s,o,a,i,c=null){const{errorSerializer:g,errorFieldInMetadata:l,muteContext:p,contextFieldName:f,metadataFieldName:u,errorFieldName:h,prefix:E}=this._config,w={contextFieldName:f??void 0,metadataFieldName:u??void 0,errorFieldName:h??"err"},_=this._mergeGroups(c)??void 0;let y=!!s||(p?!1:i!==null?Object.keys(i).length>0:this.contextManager.hasContextData()),v={};if(y)if(f&&f===u){const M=this.formatContext(r)[f],P=this.formatMetadata(s)[u];v={[f]:{...M,...P}}}else v={...this.formatContext(r),...this.formatMetadata(s)};if(a){const M=g?g(a):a;l&&s&&u?v?.[u]?v[u][h]=M:v={...v,[u]:{[h]:M}}:l&&!s&&u?v={...v,[u]:{[h]:M}}:v={...v,[h]:M},y=!0}o&&Object.keys(o).length>0&&(v={...v,...o},y=!0),this.pluginManager.hasPlugins(I.onBeforeDataOut)&&(v=this.pluginManager.runOnBeforeDataOut({data:y?v:void 0,logLevel:e,error:a,metadata:s,context:r,groups:_,schema:w,prefix:E},this),v&&!y&&(y=!0)),this.pluginManager.hasPlugins(I.onBeforeMessageOut)&&(n=this.pluginManager.runOnBeforeMessageOut({messages:[...n],logLevel:e,groups:_,schema:w,prefix:E},this)),this.pluginManager.hasPlugins(I.transformLogLevel)&&(e=this.pluginManager.runTransformLogLevel({data:y?v:void 0,logLevel:e,messages:[...n],error:a,metadata:s,context:r,groups:_,schema:w,prefix:E},this));const O={data:y?v:void 0,error:a,metadata:s,context:r,groups:_,schema:w,prefix:E};if(this.hasMultipleTransports){const M=this._config.transport.filter(P=>!(!P.enabled||!this._shouldTransportReceiveLog(P.id,e,_))).map(async P=>{const D=e;if(!(this.pluginManager.hasPlugins(I.shouldSendToLogger)&&!this.pluginManager.runShouldSendToLogger({messages:[...n],logLevel:D,transportId:P.id,...O},this)))return P._sendToLogger({logLevel:D,messages:[...n],hasData:y,...O})});Promise.all(M).catch(P=>{this._config.consoleDebug&&console.error("[LogLayer] Error executing transports:",P)})}else{if(!this.singleTransport?.enabled||!this._shouldTransportReceiveLog(this.singleTransport.id,e,_)||this.pluginManager.hasPlugins(I.shouldSendToLogger)&&!this.pluginManager.runShouldSendToLogger({messages:[...n],logLevel:e,transportId:this.singleTransport.id,...O},this))return;this.singleTransport._sendToLogger({logLevel:e,messages:[...n],hasData:y,...O})}}};const re={logLayerHandlers:[],pluginsToInit:[],logBuilderHandlers:[]};var Mt=class{err;metadata;structuredLogger;hasMetadata;pluginManager;_groups=null;constructor(t){this.err=null,this.metadata={},this.structuredLogger=t,this.hasMetadata=!1,this.pluginManager=t.pluginManager,re.logBuilderHandlers.length>0&&re.logBuilderHandlers.forEach(e=>{e.onConstruct&&e.onConstruct(this,t)})}withMetadata(t){const{pluginManager:e,structuredLogger:{_config:{consoleDebug:n}}}=this;if(!t)return n&&console.debug("[LogLayer] withMetadata was called with no metadata; dropping."),this;let r=t;return e.hasPlugins(I.onMetadataCalled)&&(r=e.runOnMetadataCalled(t,this.structuredLogger),!r)?(n&&console.debug("[LogLayer] Metadata was dropped due to plugin returning falsy value."),this):(this.metadata={...this.metadata,...r},this.hasMetadata=!0,this)}withError(t){return this.err=t,this}withGroup(t){const e=Array.isArray(t)?t:[t];if(this._groups){const n=new Set([...this._groups,...e]);this._groups=Array.from(n)}else this._groups=[...e];return this}info(...t){if(!this.structuredLogger.isLevelEnabled(m.info))return;const e=G(t);return this.structuredLogger._formatMessage(e),this.formatLog(m.info,e)}warn(...t){if(!this.structuredLogger.isLevelEnabled(m.warn))return;const e=G(t);return this.structuredLogger._formatMessage(e),this.formatLog(m.warn,e)}error(...t){if(!this.structuredLogger.isLevelEnabled(m.error))return;const e=G(t);return this.structuredLogger._formatMessage(e),this.formatLog(m.error,e)}debug(...t){if(!this.structuredLogger.isLevelEnabled(m.debug))return;const e=G(t);return this.structuredLogger._formatMessage(e),this.formatLog(m.debug,e)}trace(...t){if(!this.structuredLogger.isLevelEnabled(m.trace))return;const e=G(t);return this.structuredLogger._formatMessage(e),this.formatLog(m.trace,e)}fatal(...t){if(!this.structuredLogger.isLevelEnabled(m.fatal))return;const e=G(t);return this.structuredLogger._formatMessage(e),this.formatLog(m.fatal,e)}disableLogging(){return this.structuredLogger.disableLogging(),this}enableLogging(){return this.structuredLogger.enableLogging(),this}formatLog(t,e){const{muteMetadata:n}=this.structuredLogger._config,r=n?!1:this.hasMetadata;return this.structuredLogger._formatLog({logLevel:t,params:e,metadata:r?this.metadata:null,err:this.err,groups:this._groups})}},Hr=class extends Ur{shipToLoggerFn;constructor(t){super(t),this.shipToLoggerFn=t.shipToLogger}shipToLogger(t){return this.shipToLoggerFn(t)}};let qe=!1;const Kr={trace:"log",debug:"log",info:"log",warn:"warn",error:"error",fatal:"error"},rt=new qr({transport:new Hr({shipToLogger:({logLevel:t,messages:e,data:n,hasData:r})=>{const s=Kr[t]??"log";let o,a;if(r&&n){const{_sub:i,...c}=n;o=i?String(i):void 0,Object.keys(c).length>0&&(a=c)}return qe=!0,a?console[s](...e,a):console[s](...e),qe=!1,typeof window<"u"&&window.postMessage({type:"engine-log",level:t,message:e.join(" "),subsystem:o,metadata:a,timestamp:Date.now()},"*"),e}}),prefix:"[engine]"});rt.setLevel(m.info);typeof window<"u"&&(window.setEngineLogLevel=t=>{rt.setLevel(t)});if(typeof window<"u"){const t=new URLSearchParams(window.location.search).get("engineLogLevel");t&&rt.setLevel(t)}const Yr=4,Xr=1e4;async function Jr(t,e,n,r){const s=t.getRunTicksTarget();if(s===null)throw new bt("RUN_TICKS_UNAVAILABLE","runTicksWhenSettled: no run-ticks target is wired — no Game has mounted yet");const o=Xr,a=Yr,i=n?.render??"last";for(let c=0;c<e;c++){if(!t.worldSettled()){const p=Date.now()+o;for(;!t.worldSettled();){if(Date.now()>p)throw new bt("WORLD_UNSETTLED_TIMEOUT",`runTicksWhenSettled: a world-settled probe still answers false after ${o}ms — a scene remount (or a broken probe) is stuck, and driving ticks into it would race it`);await new Promise(f=>setTimeout(f,a))}}const g=c===e-1,l=i==="all"?"all":i==="none"?"none":g?"last":"none";s.runTicks(1,{render:l})}}const Zr="fit",un=[{id:Zr,label:"Fit panel",kind:"fit",width:null,height:null,dpr:null,safeArea:null},{id:"iphone-portrait",label:"iPhone 14 — 390×844 @3x",kind:"phone",width:390,height:844,dpr:3,safeArea:{top:47,right:0,bottom:34,left:0}},{id:"iphone-landscape",label:"iPhone 14 landscape — 844×390 @3x",kind:"phone",width:844,height:390,dpr:3,safeArea:{top:0,right:47,bottom:21,left:47}},{id:"android-portrait",label:"Android — 412×915 @2.6x",kind:"phone",width:412,height:915,dpr:2.6,safeArea:{top:24,right:0,bottom:24,left:0}},{id:"ipad-portrait",label:"iPad — 820×1180 @2x",kind:"tablet",width:820,height:1180,dpr:2,safeArea:{top:24,right:0,bottom:20,left:0}},{id:"desktop-1080p",label:"Desktop — 1920×1080 @1x",kind:"desktop",width:1920,height:1080,dpr:1,safeArea:null}],st=un[0];function dn(t){return un.find(e=>e.id===t)??st}let k=st,H=null,fn=0;const He=new Set;function ot(){fn++;for(const t of He)t()}function ko(t){return He.add(t),()=>{He.delete(t)}}const Oo=()=>fn;function Do(){return k}function gn(){return H??(k.kind==="phone"||k.kind==="tablet")}function Fo(t){const e=dn(t);e!==k&&(k=e,H=null,hn(),ot())}function Go(t){t!==H&&(H=t,hn(),ot())}function Qr(){return k.dpr}function Bo(){return Math.min(typeof window<"u"&&window.devicePixelRatio||1,2)}function hn(){An({devicePreview:{preset:k.id,touch:H}})}function jo(){const t=xn().devicePreview;return t?.preset?(k=dn(t.preset),H=typeof t.touch=="boolean"?t.touch:null):(k=st,H=null),ot(),k}const St=["pointerdown","pointermove","pointerup","pointercancel"],Pt=new WeakSet;let Ke=null,Fe=null;function Tt(t){if(!gn()||Pt.has(t)||!(t instanceof PointerEvent)||t.pointerType!=="mouse")return;const e=t.target;if(!e)return;t.stopImmediatePropagation();const n=new PointerEvent(t.type,{bubbles:!0,cancelable:t.cancelable,composed:!0,view:t.view,detail:t.detail,clientX:t.clientX,clientY:t.clientY,screenX:t.screenX,screenY:t.screenY,button:t.button,buttons:t.buttons,ctrlKey:t.ctrlKey,shiftKey:t.shiftKey,altKey:t.altKey,metaKey:t.metaKey,pointerId:t.pointerId,pointerType:"touch",isPrimary:!0,pressure:t.type==="pointerup"||t.type==="pointercancel"?0:Math.max(t.pressure,.5),width:20,height:20});Pt.add(n),e.dispatchEvent(n),n.defaultPrevented&&t.preventDefault()}function es(t){if(t!==Ke&&(Fe?.(),Fe=null,Ke=t,!!t)){for(const e of St)t.addEventListener(e,Tt,{capture:!0});Fe=()=>{for(const e of St)t.removeEventListener(e,Tt,{capture:!0})}}}function zo(t){Ke===t&&es(null)}function ts(){return{presetId:k.id,presetLabel:k.label,dpr:k.dpr,safeArea:k.safeArea,touchActive:gn()}}typeof window<"u"&&(window.__vgaiDevicePreview=ts);const ns=15e3;function rs(t,e,n){const r=n?` (open ${n})`:"";return`Play start stalled at "${t}" for ${Math.round(e/1e3)}s and the editor tab is HIDDEN — a backgrounded tab has its network requests deprioritized by the browser, so this step is queued rather than broken. Bring the editor tab to the foreground${r} and run play again; the engine loop itself is hidden-safe, only the boot's fetches are starved.`}function ss(t,e,n){const r=n.stallMs??ns,s=n.setTimer??((a,i)=>setTimeout(a,i)),o=n.clearTimer??(a=>clearTimeout(a));return new Promise((a,i)=>{let c=!1;const g=s(()=>{c||n.isHidden()&&(c=!0,i(new Error(rs(t,r,n.editorUrl))))},r);e.then(l=>{c||(c=!0,o(g),a(l))},l=>{c||(c=!0,o(g),i(l instanceof Error?l:new Error(String(l))))})})}function os(t,e,n=Date.now()){const r=t.filter(s=>s.seq>e).sort((s,o)=>s.seq-o.seq);return{entries:r.map(s=>({t:n,level:"info",source:"game-event",msg:s.event,tick:s.tick,simT:s.simT,meta:{seq:s.seq,...s.detail!==void 0?{detail:s.detail}:{}}})),lastSeq:r.at(-1)?.seq??e}}const ye="data-vgai-replay-block",ne="data-vgai-replay-video",Ct="https://replay-assets.invalid/",as=1e3,is=256*1024,ls=/data:image\/(?:png|jpeg|webp|gif|svg\+xml);base64,[a-zA-Z0-9+/=]+/g;function Ge(t){const e=t.getBoundingClientRect();return{left:e.left,top:e.top,width:e.width,height:e.height}}function cs(t){switch(t.toLowerCase()){case"image/png":return"png";case"image/jpeg":return"jpg";case"image/webp":return"webp";case"image/gif":return"gif";case"image/svg+xml":return"svg";default:return null}}function us(t){const e=/^data:([^;,]+);base64,([\s\S]+)$/i.exec(t);if(!e)throw new Error("image data URL is not base64 encoded");const n=atob(e[2]),r=new Uint8Array(n.length);for(let s=0;s<n.length;s+=1)r[s]=n.charCodeAt(s);return new Blob([r],{type:e[1].toLowerCase()})}function ds(t){const e=[];for(let n=t;n&&n!==document.body;n=n.parentElement){const r=n.parentElement;if(!r)break;for(const s of Array.from(r.children))s!==n&&!["STYLE","LINK","SCRIPT"].includes(s.tagName)&&!s.hasAttribute(ye)&&(s.setAttribute(ye,""),e.push(s))}return()=>{for(const n of e)n.removeAttribute(ye)}}function fs(t,e,n){if(n.format!=="canvas-dom"||n.replayPath===null)throw new Error("gameplay DOM recording requires a canvas-dom sink");const r=ds(t),s=e.getAttribute(ne);e.setAttribute(ne,"");const o=()=>{r(),s===null?e.removeAttribute(ne):e.setAttribute(ne,s)},a=[],i=new Map,c=[];let g=0,l=0,p=0,f=0,u=0,h=null,E=Date.now(),w=null,_=Promise.resolve(),y=!1;const v=(b,j)=>{_=_.then(async()=>{if(!w)try{await j()}catch(Y){const $=Y instanceof Error?Y.message:String(Y);w=new Error(`${b}: ${$}`)}})},O=b=>{const j=i.get(b);if(j)return`${Ct}${j}`;const Y=/^data:([^;,]+)/i.exec(b)?.[1]??"",$=cs(Y);if(!$)return b;const fe=`${String(u).padStart(6,"0")}.${$}`;return u+=1,i.set(b,fe),v(`replay asset ${fe}`,async()=>{const yt=us(b);p+=yt.size,await Rn(n,fe,yt)}),`${Ct}${fe}`},M=b=>b.includes("data:image/")?b.replace(ls,O):b,P=()=>{if(a.length===0)return;const b=new Blob([`[${a.join(",")}]`],{type:"application/json"});a.length=0,g=0;const j=f;f+=1,v(`DOM event batch ${j}`,()=>In(n,j,b))};let D;try{D=X({emit(b){h??=b.timestamp;const j=JSON.stringify(b,(Y,$)=>typeof $=="string"?M($):$);a.push(j),g+=j.length,l+=1,g>=is&&P()},blockSelector:`[${ye}], [${ne}]`,recordCanvas:!0,inlineStylesheet:!0,inlineImages:!1,collectFonts:!0,sampling:{mousemove:!1,mouseInteraction:!1,scroll:100,canvas:15},errorHandler(b){return c.push(b instanceof Error?b.message:String(b)),!0}})}catch(b){throw o(),b}if(!D)throw o(),new Error("rrweb could not start the DOM recording");const F=t.ownerDocument.defaultView??window,L={width:F.innerWidth,height:F.innerHeight,dpr:F.devicePixelRatio},A=Ge(t),te=Ge(e),Oe=X.mirror.getId(t),Pn=X.mirror.getId(e),pt=typeof ResizeObserver>"u"?null:new ResizeObserver(()=>{X.addCustomEvent("vgai-canvas-layout",{rect:Ge(e),drawingWidth:e.width,drawingHeight:e.height,dpr:F.devicePixelRatio})});pt?.observe(e),X.addCustomEvent("vgai-canvas-layout",{rect:te,drawingWidth:e.width,drawingHeight:e.height,dpr:F.devicePixelRatio});const Tn=F.setInterval(P,as),mt=()=>{F.clearInterval(Tn),pt?.disconnect(),o()};return{markVideoStarted(b){E=b},async stop(b){if(y)throw new Error("gameplay DOM recording is already stopped");if(y=!0,X.addCustomEvent("vgai-recording-stop",{}),D(),mt(),P(),await _,w)throw w;return{version:1,recorder:"rrweb@2.1.6",events:"events.json",assets:"assets/",video:b,videoStartEpochMs:E,firstEventEpochMs:h,viewport:L,surface:A,surfaceNodeId:Oe,canvas:{...te,nodeId:Pn,drawingWidth:e.width,drawingHeight:e.height},eventCount:l,assetCount:i.size,assetBytes:p,rrwebErrors:c}},async abort(){y||(y=!0,D(),mt(),a.length=0,await _)}}}function gs(){let t=null,e=!1,n=null;const r=`
3
- let canvas;
4
- onmessage = async ({data}) => {
5
- const {bitmap, width, height, type, quality} = data;
6
- try {
7
- if (!canvas) canvas = new OffscreenCanvas(width, height);
8
- if (canvas.width !== width) canvas.width = width;
9
- if (canvas.height !== height) canvas.height = height;
10
- const context = canvas.getContext('2d');
11
- if (!context) throw new Error('No worker canvas context');
12
- context.globalCompositeOperation = 'copy';
13
- context.drawImage(bitmap, 0, 0, width, height);
14
- bitmap.close();
15
- const blob = await canvas.convertToBlob({type, quality});
16
- postMessage({blob});
17
- } catch (error) {
18
- bitmap.close();
19
- postMessage({error: error instanceof Error ? error.message : String(error)});
20
- }
21
- };
22
- `;function s(o){const a=n;n=null,t?.terminate(),t=null,a?.reject(o)}return{encode(o,a,i,c,g){return e?Promise.reject(new Error("Recording preview encoder stopped")):n?Promise.reject(new Error("Recording preview already in flight")):new Promise((l,p)=>{const f={resolve:l,reject:p};n=f;try{if(!t){const u=URL.createObjectURL(new Blob([r],{type:"text/javascript"}));try{t=new Worker(u)}finally{URL.revokeObjectURL(u)}t.onmessage=({data:h})=>{if(h.error||!h.blob){s(new Error(h.error??"No recording preview image"));return}const E=n;n=null,E?.resolve(h.blob)},t.onerror=h=>{h.preventDefault(),s(new Error(h.message||"Recording preview worker failed"))},t.onmessageerror=()=>s(new Error("Recording preview worker message failed"))}createImageBitmap(o).then(u=>{if(e||n!==f||!t){u.close();return}try{t.postMessage({bitmap:u,width:a,height:i,type:c,quality:g},[u])}catch(h){u.close(),s(h instanceof Error?h:new Error(String(h)))}},u=>{n===f&&s(u instanceof Error?u:new Error(String(u)))})}catch(u){s(u instanceof Error?u:new Error(String(u)))}})},dispose(){e=!0,s(new Error("Recording preview encoder stopped"))}}}let N=null;const At=1,xt=60,hs=30,Ae=2,ps=1e3/Ae,xe=12e4,ms=xe/1e3*Ae,ys=256,vs="image/webp",ws=.72;function bs(t,e){const n="'use strict';var t=null;onmessage=function(e){clearInterval(t);t=null;if(e.data&&e.data.ms>0){t=setInterval(function(){postMessage(0)},e.data.ms)}};";try{const r=URL.createObjectURL(new Blob([n],{type:"text/javascript"})),s=new Worker(r);URL.revokeObjectURL(r);let o=null;return s.addEventListener("error",a=>{a.preventDefault(),o===null&&(o=window.setInterval(e,t))}),s.addEventListener("message",()=>e()),s.postMessage({ms:t}),{stop(){s.postMessage({ms:0}),s.terminate(),o!==null&&window.clearInterval(o)}}}catch{const r=window.setInterval(e,t);return{stop(){window.clearInterval(r)}}}}function Ls(t){const e=t??hs;if(!Number.isFinite(e)||!Number.isInteger(e)||e<At||e>xt)throw new Error(`gameplay recording fps must be an integer from ${At} to ${xt}`);return e}function Es(t){const n=(t?["video/webm;codecs=vp9,opus","video/webm;codecs=vp8,opus","video/webm"]:["video/webm;codecs=vp9","video/webm;codecs=vp8","video/webm"]).find(r=>MediaRecorder.isTypeSupported(r));if(!n)throw new Error("this browser exposes MediaRecorder but no WebM video codec");return n}function at(){Gn(N?.previewSnapshot??null)}function Be(t,e){t.previewSnapshot={startedAt:t.started.startedAt,width:t.started.width,height:t.started.height,liveEdgeMs:e,sampleFps:Ae,retentionMs:xe,frames:[...t.previewFrames],previewError:t.previewError},N===t&&at()}function _s(t){for(const e of t.previewFrames)URL.revokeObjectURL(e.src);t.previewFrames.length=0}function pn(t,e){if(t.stopping||t.previewEncoding||t.previewError||e<t.nextPreviewAt)return;t.nextPreviewAt=e+ps;const n=Math.min(1,ys/Math.max(1,t.output.width)),r=Math.max(1,Math.round(t.output.width*n)),s=Math.max(1,Math.round(t.output.height*n));t.previewEncoding=!0;const o=new Date().toISOString(),a=t.nextPreviewSequence;t.nextPreviewSequence+=1;const i=t.previewEncoder.encode(t.output,r,s,vs,ws).then(c=>{if(t.stopping)return;if(!c){t.previewError="The browser could not encode recording previews.",Be(t,e);return}const g={sequence:a,mediaTimeMs:Math.max(0,Math.round(e)),capturedAt:o,src:URL.createObjectURL(c),width:r,height:s};for(t.previewFrames.push(g);t.previewFrames.length>ms||(t.previewFrames[0]?.mediaTimeMs??g.mediaTimeMs)<g.mediaTimeMs-xe;){const l=t.previewFrames.shift();l&&URL.revokeObjectURL(l.src)}Be(t,g.mediaTimeMs)}).catch(c=>{t.stopping||(t.previewError=c instanceof Error?c.message:"The browser could not encode recording previews.",Be(t,e))}).finally(()=>{t.previewEncoding=!1});t.previewTask=i}function Ms(){if(N)throw new Error("a gameplay recording is already active; stop it before starting one");if(typeof MediaRecorder>"u")throw new Error("this browser does not support MediaRecorder gameplay capture")}function Ss(t){t.stopping||t.drawing||performance.now()<t.nextFrameAt||(typeof document<"u"&&document.hidden&&(t.hidden=!0),t.drawing=!0,t.frameTask=(async()=>{const e=performance.now();try{if(t.options.refreshFrame?.(),t.started.format==="composite-webm"){const n=t.staging,r=t.overlayCache;if(!n||!r)throw new Error("gameplay recording: composite buffers unavailable");await jt(t.container,n,{canvasFrame:t.options.canvasFrame,snapshots:t.snapshots,overlayCache:r});const{output:s}=t,o=s.getContext("2d");if(!o)throw new Error("gameplay recording: output context unavailable");s.width!==n.width&&(s.width=n.width),s.height!==n.height&&(s.height=n.height),o.globalCompositeOperation="copy",o.drawImage(n,0,0),o.globalCompositeOperation="source-over",pn(t,performance.now()-t.startedWallMs)}t.frames+=1}catch{t.frameErrors+=1}finally{t.drawing=!1;const n=performance.now()-e;t.nextFrameAt=e+Math.max(t.intervalMs/2,2*n)}})())}async function mn(t,e={}){Ms();const n=Ls(e.fps),r=e.format??"composite-webm",s=t.ownerDocument.createElement("canvas"),o=e.audio??null;let a=null,i=null,c=null;const g=Fn(),l=Dn();try{const p=await jt(t,s,{canvasFrame:e.canvasFrame,snapshots:g,overlayCache:l});if(p.canvases===0&&p.domOverlays===0)throw new Error("gameplay recording: no game layers are mounted");const f=Array.from(t.querySelectorAll("canvas")).filter(zt);if(r==="canvas-dom"&&f.length!==1)throw new Error(`canvas-dom recording requires exactly one root canvas; this game has ${f.length}`);const u=r==="canvas-dom"?f[0]:s;if(typeof u.captureStream!="function")throw new Error("this browser cannot capture a canvas as a media stream");if(a=u.captureStream(n),o)for(const v of o.stream.getAudioTracks())a.addTrack(v);const h=Es(a.getAudioTracks().length>0),E=new MediaRecorder(a,{mimeType:h}),w=new Date().toISOString();i=await kn({startedAt:w,mimeType:h,name:e.name??null,format:r}),r==="canvas-dom"&&(c=fs(t,u,i),l.dispose());const _={format:r,startedAt:w,mimeType:h,width:u.width,height:u.height,fps:n,audio:a.getAudioTracks().length>0,layers:p,path:i.path,replayPath:i.replayPath,rotates:i.rotates,logFile:i.logFile},y={started:_,recorder:E,output:u,staging:r==="composite-webm"?t.ownerDocument.createElement("canvas"):null,stream:a,audio:o,sink:i,startedWallMs:performance.now(),intervalMs:1e3/n,container:t,options:{canvasFrame:e.canvasFrame,refreshFrame:e.refreshFrame},clock:null,frameTask:null,drawing:!1,nextFrameAt:0,snapshots:g,overlayCache:r==="composite-webm"?l:null,domRecording:c,previewEncoder:gs(),previewFrames:[],previewSnapshot:{startedAt:w,width:u.width,height:u.height,liveEdgeMs:0,sampleFps:Ae,retentionMs:xe,frames:[],previewError:null},previewTask:null,previewEncoding:!1,previewError:null,nextPreviewAt:0,nextPreviewSequence:0,frames:1,frameErrors:0,hidden:typeof document<"u"&&document.hidden,recorderError:null,uploadError:null,uploads:Promise.resolve(),nextSequence:0,stopping:!1};return E.addEventListener("dataavailable",v=>{if(v.data.size===0||y.uploadError)return;const O=y.nextSequence;y.nextSequence+=1,y.uploads=y.uploads.then(async()=>{if(!y.uploadError)try{await On(y.sink,O,v.data)}catch(M){y.uploadError=M instanceof Error?M:new Error(String(M))}})}),E.addEventListener("error",v=>{y.recorderError=v.error??new Error("gameplay recording failed")}),E.addEventListener("start",()=>{y.domRecording?.markVideoStarted(Date.now())}),E.start(1e3),N=y,at(),r==="composite-webm"&&pn(y,0),y.clock=bs(y.intervalMs,()=>Ss(y)),_}catch(p){await c?.abort(),l.dispose(),i&&await Nt(i);for(const f of a?.getTracks()??[])f.stop();throw o?.dispose(),p}}async function yn(t){const e=N;if(!e)throw new Error("no gameplay recording is active");e.stopping=!0,e.clock?.stop(),e.clock=null,await e.frameTask,e.previewEncoder.dispose(),await e.previewTask;let n=!1;try{if(e.recorder.state!=="inactive"){const c=new Promise(g=>{e.recorder.addEventListener("stop",()=>g(),{once:!0})});e.recorder.stop(),await c}if(e.recorderError)throw e.recorderError;if(await e.uploads,e.uploadError)throw e.uploadError;const r=Math.max(0,Math.round(performance.now()-e.startedWallMs)),s=Math.round(r/1e3*e.started.fps),o={...e.started,durationMs:r,droppedFrames:Math.max(0,s-e.frames),frameErrors:e.frameErrors,effectiveFps:r>0?Math.round(e.frames/(r/1e3)*10)/10:0,hidden:e.hidden},a=e.sink.path.split(/[\\/]/).at(-1)??"video.webm",i=await e.domRecording?.stop(a);return await Bn(e.sink,t??null,void 0,i?{...i,capture:{durationMs:o.durationMs,droppedFrames:o.droppedFrames,frameErrors:o.frameErrors,effectiveFps:o.effectiveFps,hidden:o.hidden,fps:o.fps,width:o.width,height:o.height,mimeType:o.mimeType,audio:o.audio}}:null),n=!0,o}finally{n||(await e.domRecording?.abort(),await Nt(e.sink)),N=null,at(),_s(e),e.overlayCache?.dispose();for(const r of e.stream.getTracks())r.stop();e.audio?.dispose()}}function it(){return N!==null}function Ps(){return N?.started??null}function vn(t,e){return Math.max(0,Math.floor(e-t))}function Ts(){const t=N;return t===null?null:{startedAt:t.started.startedAt,elapsedMs:vn(t.startedWallMs,performance.now())}}const No=Object.freeze(Object.defineProperty({__proto__:null,activeGameplayRecording:Ps,activeGameplayRecordingTimeline:Ts,gameplayRecordingActive:it,recordingTimelineElapsedMs:vn,startGameplayRecording:mn,stopGameplayRecording:yn},Symbol.toStringTag,{value:"Module"})),lt=12e4,Cs=5e3,Rt=["keydown","keyup","pointerdown","pointermove","wheel","touchstart","touchmove"];let x=null,ve=null,It=0,As=null,wn=null;function xs(t){wn=t}function Rs(){return!x||!it()?null:{path:x.started.path,format:x.started.format,replayPath:x.started.replayPath,startedAt:x.started.startedAt,rotates:x.started.rotates,logFile:x.started.logFile,idleAutoStopMs:lt}}function bn(){x&&(x.lastActivityMs=Date.now())}function Is(){if(typeof window>"u")return()=>{};const t=()=>bn();for(const e of Rt)window.addEventListener(e,t,{capture:!0,passive:!0});return()=>{for(const e of Rt)window.removeEventListener(e,t,{capture:!0})}}async function $o(t,e={}){if(x&&await ct("restart"),await ve,!t)return S.warn("Play started, but gameplay recording did not: no game surface is mounted to record.","play-recording"),null;try{return x={started:await mn(t,{format:Array.from(t.querySelectorAll("canvas")).filter(zt).length===1?"canvas-dom":"composite-webm",...e.name?{name:e.name}:{},...e.audio?{audio:e.audio}:{},...e.refreshFrame?{refreshFrame:e.refreshFrame}:{},...e.canvasFrame?{canvasFrame:e.canvasFrame}:{}}),lastActivityMs:Date.now(),poll:null,releaseInput:Is(),ending:!1},x.poll=window.setInterval(()=>{const r=x;!r||r.ending||Date.now()-r.lastActivityMs<lt||Os()},Cs),Rs()}catch(n){return S.warn(`Play started, but gameplay recording did not: ${n instanceof Error?n.message:String(n)}`,"play-recording"),null}}async function ct(t){const e=x;if(!e||e.ending)return ve;if(e.ending=!0,e.poll!==null&&window.clearInterval(e.poll),e.releaseInput?.(),x=null,!it())return null;const n=++It,r=(async()=>{try{const s=await yn(t);return As=s,s}catch(s){return S.warn(`Gameplay recording could not be finalized: ${s instanceof Error?s.message:String(s)}`,"play-recording"),null}finally{It===n&&(ve=null)}})();return ve=r,r}function ks(t){const e=Math.round(t.durationMs/100)/10;return`${t.path} — ${e}s at ${t.effectiveFps} fps${t.hidden?" (tab hidden; that is the cadence actually captured, not the requested one)":""}`}async function Os(){const t=Math.round(lt/1e3),e=await ct("idle-autostop");S.log(e===null?`Play auto-stopped after ${t}s with no session command and no player input.`:`Play auto-stopped after ${t}s with no session command and no player input. Recording finalized: ${ks(e)}`,"play-recording"),wn?.()}C().session.onCommandDispatched(()=>bn());const Ds={source:"live",label:"live",detail:"Running DOM adopted from the playing game. Edits apply to this session only and are discarded when play stops."},kt="structure is owned by the running React tree — play edits are live-DOM only and are discarded on stop; stop play to change structure in source";function je(t,e){const n=[];for(const r of Or(t).nodes.values())r.oid===e&&n.push(r.el);return n}function Ot(t){return t.style?t.style:null}function Fs(t){return{writeStyle:async(e,n,r)=>{const s=je(t,e);if(s.length===0)return{changed:!1,error:`no live element carries oid "${e}"`};for(const o of s){const a=Ot(o);a&&(a[n]=r)}return{changed:!0,route:"live-dom"}},removeStyle:async(e,n)=>{const r=je(t,e);if(r.length===0)return{changed:!1,error:`no live element carries oid "${e}"`};let s=!1;for(const o of r){const a=Ot(o),i=a?.[n];a&&i!==void 0&&i!==null&&i!==""&&(delete a[n],s=!0)}return{changed:s,route:"live-dom"}},writeText:async(e,n)=>{const r=je(t,e).filter(o=>o.children.length===0);if(r.length===0)return{changed:!1,error:`no live leaf element carries oid "${e}"`};const s=r[0]?.textContent??null;for(const o of r)o.textContent=n;return{changed:!0,prevText:s}},writeProp:async(e,n)=>({changed:!1,error:`prop "${n}" is owned by the running React element (its value lives at the parent call site, not in the DOM) — play edits are live-DOM only and are discarded on stop; stop play to change it in source`}),writeStruct:async()=>({changed:!1,error:kt}),writeStructMany:async()=>({changed:!1,error:kt})}}function Gs(t,e){return new kr(t,e.shell,{writeBackend:Fs(t),provenance:Ds})}function Ln(){return{id:"",journalSession:"",name:"",container:null,session:null,presentation:null,unregisterPerformanceSource:null,unsubscribeSystemAdapters:null,determinismDeclared:!1,resizeObserver:null,rootResources:[]}}const d=Ln(),B=[];let se=[],U=null;const Ye=new Set;function ut(){return U&&(U===d.id||B.some(t=>t.id===U))?U:d.id}function Uo(){return d.id}function Vo(t){return Ye.add(t),()=>Ye.delete(t)}function dt(){for(const t of Ye)t()}function Wo(t){Ut(t),ut()!==t&&(U=t,dt())}function Xe(t){if(!T)return!1;const{store:e}=T;return e.shell.playState==="playing"&&e.shell.activeViewportTab==="play"&&ut()===t&&sr()}let T=null;const we=new Set;function Bs(){return T?Promise.resolve():new Promise((t,e)=>{const n=()=>{clearTimeout(r),we.delete(n),t()},r=setTimeout(()=>{we.delete(n),e(new Error("Play mode failed to start: the editor shell did not bind within 15 seconds."))},15e3);we.add(n)})}const Je=new Set,Me=new Set;let Se=null;function En(){return Se}function qo(t){return Me.add(t),()=>Me.delete(t)}function js(t){Se=t;for(const e of Me)e();C().live.notifyChanged()}const ze=new Set;function zs(){if(ze.size>0){const t=[...ze].map(e=>({severity:"warn",message:e}));ze.clear(),Qn("console-resolved",{conditions:t,by:"play-mode"})}if(Se!==null){Se=null;for(const t of Me)t();C().live.notifyChanged()}}function Re(){Mn();for(const t of Je)t()}function Ho(t){return Je.add(t),()=>Je.delete(t)}let R=0,ft=null,Pe=null;vr();let be;function he(t){const e={...t.capabilities,persist:!1},n=hr(),r=()=>ar({resolve:()=>ir("play edits are session-local by architecture",lr),record:()=>{}}),s=t.transforms,o=s&&{...s,get:c=>s.get(c),beginEdit:c=>s.beginEdit(c),apply:(c,g)=>s.apply(c,g),endEdit:c=>(s.endEdit(c),r()),...s.remove?{remove:()=>r()}:{}},a=t.inspector,i=a&&{...a,properties:c=>a.properties(c),get:(c,g)=>a.get(c,g),set:(c,g,l)=>(a.set(c,g,l),r()),...a.remove?{remove:()=>r()}:{}};return new Proxy(t,{get(c,g){if(g==="capabilities")return e;if(g==="persistence")return n;if(g==="transforms"&&o)return o;if(g==="inspector"&&i)return i;const l=Reflect.get(c,g,c);return typeof l=="function"?l.bind(c):l}})}function Ns(){be!==void 0&&(Jt(be),be=void 0)}async function $s(t,e,n,r,s){be=dr();const o=[],a=[],i=()=>{for(const l of a)"dispose"in l&&typeof l.dispose=="function"&&l.dispose()};for(const l of e){const p=n?er(n,l.id):void 0,f=p?{zOrder:p.zOrder,pausable:p.pausable,...p.entry?{content:`Entry · ${p.entry}`}:{}}:{};if(p?.adapter.identity==="ingest-react"){o.push({worldId:l.id,kind:l.kind,adapter:new wt(t.shell,{id:l.id,kind:l.kind,adapter:p.adapter.identity,entryOrScenePath:p.entry,zOrder:p.zOrder,pausable:p.pausable}),...f});continue}const u=l.mounted;if(u.kind==="three"){const h=tt(u).scene,E=l.id===r&&h===t.scene,w=E?await Cr():void 0;if(!s()){i();return}const _=E?Ar(t,h,Sr(l.id),Ne(l.id),{explicitSourceCommit:!0,sourceAnchor:w}):xr(t,h,{frameControl:"host",journal:Ne(l.id)});a.push(_),o.push({worldId:l.id,kind:l.kind,adapter:he(_),...f})}else if(u.kind==="canvas"){if(u.substrate.name==="babylon"){const{BabylonAuthoringAdapter:A}=await z(async()=>{const{BabylonAuthoringAdapter:Oe}=await import("./babylon-authoring-adapter-C8mFMXSr.js");return{BabylonAuthoringAdapter:Oe}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13]));if(!s()){i();return}const te=new A(u.substrate.root,t,{canvas:u.canvas,api:u.substrate.api,provenance:{source:"live",label:"live",detail:"Native Babylon.js play scene; ordinary Play edits are ephemeral."}});a.push(te),o.push({worldId:l.id,kind:l.kind,adapter:he(te),...f});continue}if(u.substrate.name!=="pixi"){const A=new wt(t.shell,{id:l.id,kind:l.kind,adapter:u.substrate.name,entryOrScenePath:p?.entry,zOrder:p?.zOrder??0,pausable:p?.pausable??!0},`No authoring adapter is registered for canvas substrate "${u.substrate.name}".`);a.push(A),o.push({worldId:l.id,kind:l.kind,adapter:A,...f});continue}const h=u.substrate.root,[E,w,_,y,v]=await Promise.all([z(()=>import("./physics-registry-B2Jkp8e6.js"),[]),z(()=>import("./system-adapters-rIC8FSGP.js"),[]),z(()=>import("./pixi-authoring-adapter-BChknIdC.js").then(A=>A.p),__vite__mapDeps([14,15,1,2,3,4,5,6,7,8,9,10,12,13,16,17,18,11,19])),z(()=>import("./pixi-live-write-target-BjDsBQbp.js"),__vite__mapDeps([20,1,2,3,4,5,6,7,8,9,10,11,12,13,19])),z(()=>import("./canvas-entry-runtime-UNYuSfG0.js"),__vite__mapDeps([21,1,2,3,4,5,6,7,8,9,10,22]))]);if(!s()){i();return}const{createPhysics2DRegistry:O}=E,{createPhysicsAdapter2D:M}=w,{PixiAuthoringAdapter:P}=_,{createLiveCanvasWriteTarget:D}=y,F=M(l.physics2d??O()),L=new P(h,t,{pixi:await v.resolveCanvasPixiForEditor(),target:D({physics:F}),journal:Ne(l.id),surface:Ws});a.push(L),o.push({worldId:l.id,kind:l.kind,adapter:he(L),...f})}else if(u.kind==="dom"){const h=Gs(u.container,t);a.push(h),o.push({worldId:l.id,kind:l.kind,adapter:he(h),...f})}else Tr(u,"installPlayRootAuthoring")}if(!s()){i();return}d.rootResources=a;const c=tr(Ce()?.config),g=new nr(o,void 0,c);Jt(g),t.shell.notifyIngestEdit()}function Ne(t){return en(d.id,t)}function Us(t){for(const e of d.rootResources)"dispose"in e&&typeof e.dispose=="function"&&e.dispose();d.rootResources=[],d.journalSession&&(t.shell.projectHistory?.expireSession(d.journalSession),d.journalSession="")}function Vs(t){return!(t.defaultPrevented||ur(t.target))}let oe=null,ae=null,ie=null,le=null,ce=null,V=Promise.resolve(),Le=null,q=[],Ee=0;function _n(){const t=d.session?.game;if(!t)return{};const e=t.roots,n=d.presentation?.worldId??(e.length===1?e[0]?.id:void 0),r=t.loop.timeScale;return{...n!==void 0?{world:n}:{},...typeof r=="number"?{simSpeed:r}:{}}}function Ze(){const t=d.session?.game?.systemAdapters?.debug;if(t)try{const e=os(t.events(Ee),Ee);Ee=e.lastSeq;const n=_n();for(const r of e.entries)q.push({...r,...n})}catch{}}Vn(t=>{gr(t),d.session&&js("Project assets changed — restart play to load the revised models or textures.")});function Ws(){return C().workspace.liveDocument.container()}function qs(){const t=()=>{const e=C().workspace.liveDocument.container();if(!e)return;const n=typeof document<"u"?document.activeElement:null;n instanceof HTMLElement&&n!==e&&n.tagName==="BUTTON"&&n.blur(),e.hasAttribute("tabindex")||(e.tabIndex=-1);try{e.focus({preventScroll:!0})}catch{}or("viewport")};t(),setTimeout(t,150),setTimeout(t,600)}Dr(t=>Hs(t));function Hs(t){T={store:t,gameContainer:null},xs(J);for(const e of we)e()}function $e(){return d.session!==null}function pe(){const t=d.session?.game;if(!t)return null;const e=sn(t),n=e?.getRunTicksTarget()??null;return{getInputTarget:r=>e?.getVirtualInputTarget(r)??null,loop:t.loop,runTicks:n?n.runTicks.bind(n):null,runTicksSettled:e&&n?(r,s)=>Jr(e,r,s):null,random:Pr(t),determinismDeclared:d.determinismDeclared}}function Ko(){const t=d.session?.game.defaultRoot.mounted;return t?.kind==="three"?tt(t).scene:null}function Yo(){const t=d.session?.game?.roots;return t?t.map(e=>{const n=e.mounted;let r=!1;if(n.kind==="three")r=Er(tt(n).scene);else if(n.kind==="canvas")try{r=n.substrate.name==="pixi"?Lr(n.substrate.root):n.substrate.name==="babylon"?(n.substrate.root.scenes??[]).some(s=>(s.rootNodes?.length??0)>0):!1}catch{r=!1}else r=_r(n.container);return{rootId:e.id,kind:n.kind,hasRenderableContent:r}}):[]}function Ks(){return d.session?$t(C().workspace.liveDocument.container()).canvas:null}function Ys(t){return!t||t===d.id?C().workspace.liveDocument.container():B.find(e=>e.id===t)?.container??null}function Xo(t){if(!t||t===d.id)return Ks();const e=B.find(n=>n.id===t);return e?.session?$t(e.container).canvas:null}function Xs(){return ft}function Js(){return Pe}function K(){return[d,...B].filter(t=>t.session)}const me=new Set;function Mn(){const t=new Set(K().map(e=>e.session.game.loop));for(const e of me)t.has(e)||me.delete(e);for(const e of t)pr()?me.delete(e)&&e.start():e.liveness!=="stopped"&&(me.add(e),e.stop())}mr(Mn);function Dt(){const t=K(),e=cr();return t.find(n=>n.id===e)??t[0]??null}let Te=null;function Zs(){Te?.(),Te=rr(()=>({projectName:Ce()?.config.name??null,instanceName:K().length>1?Dt()?.name??null:null})),Zt(()=>{const t=Dt();return t?.session?{game:t.session.game,instanceId:t.id,recording:fr}:null})}function Qs(){Te?.(),Te=null,Zt(null)}function Jo(t,e,n){for(const r of K())r.session?.resize(t,e,n)}let Ft=Promise.resolve(),Ie=null,gt=null;function Zo(){return Ie}function eo(){const t=globalThis.crypto?.randomUUID?.()??`private-${Date.now()}`;return{mode:"private",id:t,roomKey:`private:${t}`,revision:null,participantId:$n}}function Gt(t,e=eo(),n,r){const s=r??null,o=Ft.then(()=>(zn(),no(t,e,n??null,s).finally(()=>{Nn()})));return Ft=o.then(()=>{},()=>{}),o}async function to(t){const{autoLaunchIngest:e}=await z(async()=>{const{autoLaunchIngest:s}=await import("./mount-ingest-root-DYR0TMIt.js").then(o=>o.m);return{autoLaunchIngest:s}},__vite__mapDeps([23,1,2,3,4,5,6,7,8,9,10,24,25,26,13,27,28,29,30,31,32,33,34,18,17,35,36]));await e(t);const n=br();if(n)return n.play(),!0;const{isModuleModeActive:r}=await z(async()=>{const{isModuleModeActive:s}=await import("./module-mode-BH2R93XP.js");return{isModuleModeActive:s}},__vite__mapDeps([37,1,2,3,4,5,6,7,8,9,10,26,25,38,39,40,22,27,41,42,43,32,44,45,31,46,47,21,48,49,50,51,33,52,53,54]));return r()}function Ue(t,e){return W(t),ss(t,e,{isHidden:()=>typeof document<"u"&&document.hidden,editorUrl:typeof window<"u"?window.location.href:void 0})}async function no(t,e,n,r){if(!T){const f=R;if(W("waiting for the editor to bind Play"),await Bs(),R!==f)throw new Error("Play start cancelled while waiting for the editor to bind.")}if(!T)throw new Error("Play mode failed to start: the editor shell is not bound.");if(W("waiting for the project bootstrap to settle"),await Wn(),d.session&&J(),gt=r,await to(T.store)||await Rr(T.store))return;const s=++R;Ie=e,ft=Date.now(),Pe=null;const{store:o}=T;uo();const a=V.then(()=>Gr(n));if(V=a,await Ue("starting the play log session",a),s!==R||(q=[],Ee=0,S.setSink(f=>{let u;try{const h=d.session?.game?.systemAdapters.debug?.state("time");typeof h?.tick=="number"&&typeof h.simSeconds=="number"&&(u={tick:h.tick,simT:h.simSeconds})}catch{}q.push({t:f.timestamp,level:f.level,msg:f.message,...f.source?{source:f.source}:{},...f.subsystem?{sub:f.subsystem}:{},...f.metadata?{meta:f.metadata}:{},...u??{},..._n()})}),Le=setInterval(()=>{if(Ze(),q.length>0){const f=q.splice(0);V=V.then(()=>on(f))}},200),oe=f=>{f.key==="Escape"&&Vs(f)&&J()},window.addEventListener("keydown",oe),W("opening the Game document"),await C().workspace.liveDocument.acquire(),s!==R))return;const i=C().workspace.liveDocument.container();if(!i){const f="Play mode failed to start: the game container is not mounted in the workspace.";throw S.error(f,"play-mode"),J(),new Error(f)}const c=i.clientWidth,g=i.clientHeight;i.style.contain||(i.style.cssText+=rn),Vt(i),Ve(i),C().viewport.transition.begin(),o.shell.setPlayState("playing"),qs(),S.log("Play mode started","play-mode"),C().viewport.transition.onSettled(()=>{s===R&&o.shell.playState==="playing"&&qn()});let l=null,p=null;try{const f=Ce();if(!f)throw new Error("No project open — open or create a project first");const u=await Ue("fetching the project manifest",Wt());se=ge(u).map(L=>L.id);for(const L of se)vt({rootId:L,mechanism:"host-mount",source:"declared",state:"waiting"});let h;qt();const{entries:E,mountId:w}=await Ue("resolving the project's root entries",tn(u,f.rootPath,{selectionOverride:r??void 0}));if(S.log(`Resolved manifest composition (${ge(u).length} world${ge(u).length===1?"":"s"}): `+ge(u).map(L=>`${L.id} (${L.surface})`).join(", "),"play-mode"),s!==R)return;const _=i.clientWidth||c,y=i.clientHeight||g;Ve(i,w),l=w,W("mounting the runtime roots");const{mountManifestRoots:v}=await z(async()=>{const{mountManifestRoots:L}=await import("./mount-manifest-DdkFYdVA.js");return{mountManifestRoots:L}},__vite__mapDeps([55,41,1,2,3,4,5,6,7,8,9,10,56,57,58,59,60,61,31,32,62,63,64,65,66,67,68,69,22,70,71,72,73,74,75,76,39,40,27,25,77,78,79,80,81,45,46,82,26,83,11,38,42,43,44,47,21,48,49,50,51,33,52,53,54,84,24,13,85,86,87,88,35,17,18,36,89,34,16,90,91,12,92,93,94,95,96,97,98,99,100,101,102,103,104,105,28,29,30,106]));if(h=await v({manifest:u,container:i,entries:E,width:_,height:y,seed:t,playtest:e}),p=h,s!==R){h.stop(),de(h,w,"Cancelled instance");return}for(const L of Ht(f.rootPath))S.error(Kt(L),"play-mode");for(const L of se)vt({rootId:L,mechanism:"host-mount",source:"declared",state:"ready"});if(Qt(h.game),d.session=h,d.id=w,d.journalSession=en(w,"").session,d.name=Sn(0),d.unregisterPerformanceSource?.(),d.unregisterPerformanceSource=Yt({id:"workspace:game",label:"Game runtime",kind:"game",instanceId:w,profiler:h.game.profiler}),zs(),d.determinismDeclared=u.determinism?.seededRandom===!0,u.configurations.some(L=>L.kind==="process")&&sn(h.game)?.setRoomDeclared(!0),Re(),o.shell.setPlayEditRegime("ephemeral"),d.presentation=Fr(h.game.roots)??Mr(o,h.game.roots),W("installing play authoring for each root"),await $s(o,h.game.roots,u,d.presentation?.worldId??null,()=>s===R),s!==R)return;W("binding the editor to the running game");const O=h.game.systemAdapters;ue(O,w),Ut(w),Zs(),d.unsubscribeSystemAdapters?.(),d.unsubscribeSystemAdapters=h.game.subscribeSystemAdapters?.(()=>{Xt(h.game.systemAdapters,w)})??null,_e(()=>Xe(w),w),_e(()=>Xe(ut()));const M=Hn(O.physics);o.setEcsSyncTransform((L,A)=>{!M||M.ownerOf(L)==="unresolved"||M.commit(L,{position:A.position.toArray(),rotation:A.quaternion.toArray(),scale:A.scale.toArray()})});const P=Qr(),D=i.clientWidth,F=i.clientHeight;D>0&&F>0&&(D!==c||F!==g||P!==null)&&h.resize(D,F,P??void 0),C().viewport.transition.ready(()=>{const L=d.session?.game;if(!L)return null;for(const A of L.roots)if(A.mounted.kind==="three")return A.mounted.camera;return null})}catch(f){const u=`Play mode failed to start: ${f}`;if(S.error(u,"play-mode"),l!==null&&d.id!==l)if(p){try{p.stop()}catch(h){S.error(`Error stopping the failed play session: ${h}`,"play-mode")}de(p,l,"Failed instance")}else ke(l,"Failed instance");throw s===R&&J(),new Error(u)}}async function Qo(t,e){if(!T)throw new Error("Cannot mount an additional instance: play mode is not bound.");if(!d.session)throw new Error("Cannot mount an additional instance: no primary play session is running.");const n=R,r=Ce();if(!r)throw new Error("Cannot mount an additional instance: no project is open.");const s=await Wt();qt();const{entries:o,mountId:a}=await tn(s,r.rootPath,{selectionOverride:gt??void 0});t.style.contain||(t.style.cssText+=rn),Vt(t),Ve(t,a);const{mountManifestRoots:i}=await z(async()=>{const{mountManifestRoots:f}=await import("./mount-manifest-DdkFYdVA.js");return{mountManifestRoots:f}},__vite__mapDeps([55,41,1,2,3,4,5,6,7,8,9,10,56,57,58,59,60,61,31,32,62,63,64,65,66,67,68,69,22,70,71,72,73,74,75,76,39,40,27,25,77,78,79,80,81,45,46,82,26,83,11,38,42,43,44,47,21,48,49,50,51,33,52,53,54,84,24,13,85,86,87,88,35,17,18,36,89,34,16,90,91,12,92,93,94,95,96,97,98,99,100,101,102,103,104,105,28,29,30,106])),c=await i({manifest:s,container:t,entries:o,width:t.clientWidth,height:t.clientHeight,playtest:Ie});for(const f of Ht(r.rootPath))S.error(Kt(f),"play-mode");if(n!==R||!d.session){try{c.stop()}catch{}return de(c,a,e?.trim()||"Cancelled instance"),a}Qt(c.game);const g=Ln();g.id=a,g.name=e?.trim()||Sn(B.length+1),g.container=t,g.session=c,g.unregisterPerformanceSource=Yt({id:`workspace:game:${a}`,label:`Game runtime (instance ${a})`,kind:"game",instanceId:a,profiler:c.game.profiler});const l=c.game.systemAdapters;ue(l,a),g.unsubscribeSystemAdapters=c.game.subscribeSystemAdapters?.(()=>{Xt(c.game.systemAdapters,a)})??null,_e(()=>Xe(a),a),B.push(g);const p=d.session.game.systemAdapters;return ue(p,d.id),Re(),a}function ro(){return B.map(t=>t.id)}function ea(){const t=[];d.id&&t.push({id:d.id,name:d.name});for(const e of B)e.id&&t.push({id:e.id,name:e.name});return t}function so(t){return d.id===t?d.name:B.find(e=>e.id===t)?.name}function ke(t,e){t&&(nn(t),yr(t,e))}function de(t,e,n){t.stopComplete.then(()=>ke(e,n))}function oo(t){const e=B.findIndex(s=>s.id===t);if(e<0)return;const[n]=B.splice(e,1);if(!n)return;n.unsubscribeSystemAdapters?.(),n.unsubscribeSystemAdapters=null;const r=n.session;try{r?.stop()}catch(s){S.error(`Error stopping additional instance ${n.id}: ${s}`,"play-mode")}n.unregisterPerformanceSource?.(),ue(null,n.id),r?de(r,n.id,n.name):ke(n.id,n.name),n.container=null,n.session=null,U===t&&(U=null,dt()),Re()}function ao(){for(const t of ro())oo(t)}let Q=[];const Qe=new Set;function ht(t){if(t===0){const e=Un()?.getPlayerIdentity?.()?.name?.trim();if(e)return e}return`Instance ${t+1}`}function ta(){return Q.length===0?0:Q.length-1}function Sn(t){return Q[t]??ht(t)}function na(t){return Qe.add(t),()=>Qe.delete(t)}function io(){for(const t of Qe)t()}function lo(t){const e=Math.max(0,Math.floor(t));co(e===0?[]:Array.from({length:e+1},(n,r)=>ht(r)))}function co(t){const e=t.length<=1?[]:t.map((n,r)=>n?.trim()?n.trim():ht(r));e.length===Q.length&&e.every((n,r)=>n===Q[r])||(Q=e,io())}function J(){if(R++,jn(),!T||(ct("teardown"),Qs(),gt=null,Ir(T.store)))return;Ie=null,U=null,dt();const{store:t}=T;Ze(),lo(0),ao(),C().viewport.transition.end(),t.setEcsSyncTransform(null);const e=d.id,n=d.name||"Game instance";d.id="",d.unsubscribeSystemAdapters?.(),d.unsubscribeSystemAdapters=null,ue(null,e),d.presentation?.dispose(),d.presentation=null,Us(t),Ns(),t.shell.setPlayEditRegime(null);const r=d.session;if(r)try{r.stop()}catch(s){S.error(`Error stopping play session: ${s}`,"play-mode")}finally{d.unregisterPerformanceSource?.(),d.unregisterPerformanceSource=null,d.session=null,d.determinismDeclared=!1,Re()}r?de(r,e,n):ke(e,n);for(const s of se)Kn(s);if(se=[],_e(()=>!0),nn(),d.resizeObserver?.disconnect(),d.resizeObserver=null,oe&&(window.removeEventListener("keydown",oe),oe=null),S.log("Play mode stopped","play-mode"),Yn(),Le&&(clearInterval(Le),Le=null),Ze(),S.setSink(null),q.length>0){const s=q.splice(0);V=V.then(()=>on(s))}V=V.then(()=>Br()),fo(),t.shell.setPlayState("stopped"),C().workspace.liveDocument.release(),ft!==null&&Pe===null&&(Pe=Date.now())}function ra(){if(!(!d.session||!T)){for(const t of K())t.session?.pause();T.store.shell.setPlayState("paused"),S.log("Play mode paused","play-mode")}}function sa(){if(!(!d.session||!T)){for(const t of K())t.session?.resume();T.store.shell.setPlayState("playing"),S.log("Play mode resumed","play-mode")}}function oa(){if(d.session)for(const t of K())t.session?.step()}function uo(){Xn(),ae=console.log,ie=console.info,le=console.warn,ce=console.error;const t=(e,n)=>{if(qe)return;const r=wr();S.logStructured(e,Zn(n),"game",void 0,r?{instanceId:r,instanceName:so(r)??`Instance ${r}`}:void 0)};console.log=(...e)=>{ae?.apply(console,e),t("info",e)},console.info=(...e)=>{ie?.apply(console,e),t("info",e)},console.warn=(...e)=>{le?.apply(console,e),t("warn",e)},console.error=(...e)=>{ce?.apply(console,e),t("error",e)}}function fo(){Jn(),ae&&(console.log=ae),ie&&(console.info=ie),le&&(console.warn=le),ce&&(console.error=ce),ae=null,ie=null,le=null,ce=null}C().live.register({id:"play",priority:0,mounted:$e,playing:$e,stop:J,instanceContainer:t=>Ys(t),startedAt:Xs,endedAt:Js,restartRequired:En,restart:()=>void Gt(),remount:async t=>{try{return await Gt(void 0,void 0,void 0,t),$e()?{ok:!0}:{ok:!1,error:"Play did not start: the remount was superseded before it finished booting."}}catch(e){return{ok:!1,error:e instanceof Error?e.message:String(e)}}}});C().session.reportFacet(()=>({timeScale:pe()?.loop.timeScale??null,loopLiveness:pe()?.loop.liveness??null,restartRequired:En(),seed:pe()?.random?.seed??null,deterministic:pe()?.determinismDeclared??!1}));export{Xo as A,Rs as B,mn as C,Ts as D,Ko as E,un as F,gn as G,Go as H,Do as I,Fo as J,ko as K,Oo as L,Vo as M,jo as N,es as O,zo as P,Jo as Q,Wo as R,Uo as S,Sn as T,Yo as U,Ho as V,Qo as W,oo as X,Bo as Y,Zr as Z,No as _,ea as a,co as b,yn as c,oa as d,Gt as e,ct as f,pe as g,J as h,$e as i,$o as j,sa as k,Zo as l,Br as m,bn as n,on as o,ra as p,Gr as q,Jr as r,lo as s,Ws as t,ut as u,na as v,ta as w,qo as x,En as y,Ys as z};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["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/gameplay-export-BzYzLZPi.js","assets/output-DK8waum9.js","assets/play-mode-DICV4cKP.js","assets/adapter-runtime-bindings-4cmsRvRh.js","assets/native-debug-module-2_HVupdg.js","assets/native-entry-surface-BE8LJNdu.js","assets/debug-registry-P0_YQGWd.js","assets/contract-system-adapters-Bic_7sev.js","assets/game-contract-seams-BnPFGLll.js","assets/seeded-random-BgCwIAAU.js","assets/game-audio-CaGKzia4.js","assets/game-network-Ct2FQYmu.js","assets/index-OZVqp6xS.js","assets/index-Da9JhEvW.js","assets/rapier-physics-adapter-CaZqWLu0.js","assets/events-156d8d12.esm-CYeuVCYr.js","assets/three.module-BLhyNg0e.js","assets/three.core-3arARmh6.js","assets/index-bQE2NA0D.js","assets/live-project-verbs-C3LzprCe.js","assets/capability-coverage-DZ-onC5j.js","assets/edit-mode-authoring-DeCxPcHM.js","assets/json-history-resource-DwS10tqD.js","assets/binding-resolver-dE0GnZT5.js","assets/adapter-surface-Y37Nzcyw.js","assets/entry-adjudication-Dc18TIqT.js","assets/structural-signature-Dc7skRiy.js","assets/webgl-frame-capture-DdJkM2mi.js","assets/realm-services-CnY105XU.js","assets/canvas-entry-runtime-UNYuSfG0.js","assets/three-ingest-runtime-B7rtg3QE.js","assets/EffectComposer-BEAt0PtQ.js","assets/CopyShader-BzTUYzf6.js","assets/ShaderPass-DTnDQXm0.js","assets/Pass-D1MRT672.js","assets/CSS3DRenderer-BsAqfavI.js","assets/relative-path-guard-GiM7Lsz8.js","assets/react-root-BHA-cdrW.js","assets/editor-presentation-activity-C7SNSmTd.js","assets/active-ingest-DA426a81.js","assets/ingest-source-persistence-Dmdo-UBp.js","assets/pixi-story-model-DNkfnWUV.js","assets/surface-content-Dg9Kkazf.js","assets/viewport-root-presentation-vgxsTyj4.js","assets/mounted-authoring-Clftxx0x.js","assets/entity-object-JmYMfLsx.js","assets/user-data-Bpj7diUS.js","assets/workspace-arrangement-BdAlBwvd.js","assets/three-contract-Dkt6PmWY.js","assets/three-TCuY32m_.js","assets/editor-layers-BDJnAAzj.js","assets/component-instance-root-B0C5oNEm.js","assets/viewport-editor-controls-BYaAZ_Ku.js","assets/three-authoring-adapter-htbnVej2.js","assets/source-persistence-backend-CwLYVPXj.js","assets/three-projection-core-CG01r5Ta.js","assets/body-marks-RKb_LTwL.js","assets/user-data-dHvLdpwM.js","assets/object-marks-DwvIEBOK.js","assets/structural-ids-Br2zjINh.js","assets/object3d-authoring-subject-BDrxd1GA.js","assets/r3f-physics-binding-DzrbpqjM.js","assets/deferred-ingest-play-BdR4qGk6.js","assets/rrweb-Cd2ifIRP.js","assets/react-world-authoring-adapter-DOjv2pYm.js","assets/board-guides-BEKPgD9M.js","assets/relative-import-specifier-BFKIWEWs.js","assets/story-arg-descriptors-Ek86ExX7.js","assets/inspect-Dr4qvDpJ.js","assets/inference-diagnostics-xecGdohW.js","assets/writer-tw6EcuVO.js","assets/three-state-DwFE3ay2.js","assets/editor-shell-store-ChLcVeNB.js","assets/output-pass-HurwNl0G.js","assets/viewport-door-Bj_ZIP85.js","assets/editor-api-BFTIRlWa.js"])))=>i.map(i=>d[i]);
2
- import{q as y,aa as g,_ as f,ab as R,a3 as w}from"./index-BRJMIUK0.js";import{c as T,n as D,d as A,f as F,h as M,e as O,j as $,g as L,k as N,p as q}from"./play-mode-DICV4cKP.js";import{r as W}from"./index-CtzuWnCS.js";import{n as z,s as k}from"./command-results-CUQD49AB.js";import{s as H,a as j}from"./run-selection-DzEkGesJ.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./index-CinJrH5C.js";import"./adapter-runtime-bindings-4cmsRvRh.js";import"./native-debug-module-2_HVupdg.js";import"./native-entry-surface-BE8LJNdu.js";import"./debug-registry-P0_YQGWd.js";import"./contract-system-adapters-Bic_7sev.js";import"./game-contract-seams-BnPFGLll.js";import"./seeded-random-BgCwIAAU.js";import"./game-audio-CaGKzia4.js";import"./game-network-Ct2FQYmu.js";import"./index-OZVqp6xS.js";import"./index-Da9JhEvW.js";import"./rapier-physics-adapter-CaZqWLu0.js";import"./events-156d8d12.esm-CYeuVCYr.js";import"./three.module-BLhyNg0e.js";import"./three.core-3arARmh6.js";import"./index-bQE2NA0D.js";import"./live-project-verbs-C3LzprCe.js";import"./capability-coverage-DZ-onC5j.js";import"./edit-mode-authoring-DeCxPcHM.js";import"./json-history-resource-DwS10tqD.js";import"./binding-resolver-dE0GnZT5.js";import"./adapter-surface-Y37Nzcyw.js";import"./entry-adjudication-Dc18TIqT.js";import"./structural-signature-Dc7skRiy.js";import"./webgl-frame-capture-DdJkM2mi.js";import"./realm-services-CnY105XU.js";import"./canvas-entry-runtime-UNYuSfG0.js";import"./three-ingest-runtime-B7rtg3QE.js";import"./EffectComposer-BEAt0PtQ.js";import"./CopyShader-BzTUYzf6.js";import"./ShaderPass-DTnDQXm0.js";import"./Pass-D1MRT672.js";import"./CSS3DRenderer-BsAqfavI.js";import"./relative-path-guard-GiM7Lsz8.js";import"./react-root-BHA-cdrW.js";import"./editor-presentation-activity-C7SNSmTd.js";import"./active-ingest-DA426a81.js";import"./ingest-source-persistence-Dmdo-UBp.js";import"./pixi-story-model-DNkfnWUV.js";import"./surface-content-Dg9Kkazf.js";import"./viewport-root-presentation-vgxsTyj4.js";import"./mounted-authoring-Clftxx0x.js";import"./entity-object-JmYMfLsx.js";import"./user-data-Bpj7diUS.js";import"./workspace-arrangement-BdAlBwvd.js";import"./three-contract-Dkt6PmWY.js";import"./three-TCuY32m_.js";import"./editor-layers-BDJnAAzj.js";import"./component-instance-root-B0C5oNEm.js";import"./viewport-editor-controls-BYaAZ_Ku.js";import"./three-authoring-adapter-htbnVej2.js";import"./source-persistence-backend-CwLYVPXj.js";import"./three-projection-core-CG01r5Ta.js";import"./body-marks-RKb_LTwL.js";import"./user-data-dHvLdpwM.js";import"./object-marks-DwvIEBOK.js";import"./structural-ids-Br2zjINh.js";import"./object3d-authoring-subject-BDrxd1GA.js";import"./r3f-physics-binding-DzrbpqjM.js";import"./deferred-ingest-play-BdR4qGk6.js";import"./rrweb-Cd2ifIRP.js";import"./react-world-authoring-adapter-DOjv2pYm.js";import"./board-guides-BEKPgD9M.js";import"./relative-import-specifier-BFKIWEWs.js";import"./story-arg-descriptors-Ek86ExX7.js";import"./inspect-Dr4qvDpJ.js";import"./inference-diagnostics-xecGdohW.js";import"./writer-tw6EcuVO.js";import"./three-state-DwFE3ay2.js";import"./editor-shell-store-ChLcVeNB.js";import"./output-pass-HurwNl0G.js";import"./viewport-door-Bj_ZIP85.js";import"./configurations-BXU4GGbV.js";const St="workspace.command";async function x(e){const{liveCanvasFrame:t}=await f(async()=>{const{liveCanvasFrame:r}=await import("./index-BRJMIUK0.js").then(o=>o.tT);return{liveCanvasFrame:r}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9]));return t(e)}function B(){const e=L();e?.loop.liveness==="loop-starved"&&e.runTicks?.(1,{render:"last"})}function J(){const e=w().audio,t=e?.renderOffline;if(!e||!t)return;let r=null;try{const o=w().debug?.state("time");typeof o?.simSeconds=="number"&&Number.isFinite(o.simSeconds)&&(r=o.simSeconds)}catch{r=null}if(r!==null)return{startSeconds:r,render:t.bind(e)}}let d=null;const _t={play:{timeoutMs:12e4,derivedRefresh:"always",handle:async e=>{try{const o=e.seed,l=e.name,m=await j();if(!m.ok)return{ok:!1,error:`${m.title}: ${m.detail}`};await O(typeof o=="number"?o:void 0,void 0,typeof l=="string"?l:null)}catch(o){return{ok:!1,error:o instanceof Error?o.message:String(o)}}if(!y().live.playing())return{ok:!1,error:"Play did not start: the run was superseded before it finished booting (a stop, or a newer play, landed during startup). Nothing is running."};const t=e.record,r=await $(g()??y().workspace.liveDocument.container(),{name:typeof t=="string"?t:null,audio:w().audio?.acquireRecordingStream?.()??null,canvasFrame:x,refreshFrame:B});return{ok:!0,...r?{data:{recording:r}}:{}}}},stop:{timeoutMs:3e4,derivedRefresh:"always",handle:async()=>{d?.abort(new Error("Video export cancelled by Stop."));const e=await F("stop");return M(),await H(),{ok:!0,...e?{data:{recording:e}}:{}}}},pause:{derivedRefresh:"always",handle:()=>(q(),{ok:!0})},resume:{derivedRefresh:"always",handle:()=>(N(),{ok:!0})},step:{derivedRefresh:"always",handle:()=>(A(),{ok:!0})},"bridge-recording-export":{timeoutMs:6e5,derivedRefresh:"none",handle:async e=>{const t=y();if(t.session.playState()!=="paused")return{ok:!1,error:"Pause the game before exporting video."};const r=g();if(!r)return z();if(d)return{ok:!1,error:"A video export is already active."};const{exportGameplayVideo:o,validateGameplayExport:l,assertGameplayVideoSupport:m}=await f(async()=>{const{exportGameplayVideo:n,validateGameplayExport:u,assertGameplayVideoSupport:s}=await import("./gameplay-export-BzYzLZPi.js");return{exportGameplayVideo:n,validateGameplayExport:u,assertGameplayVideoSupport:s}},__vite__mapDeps([10,0,1,2,3,4,5,6,7,8,9,11])),h={frames:Number(e.frames),fps:e.fps===void 0?30:Number(e.fps)};try{l(h)}catch(n){return k(n)}if(d)return{ok:!1,error:"A video export is already active."};const i=new AbortController;d=i,R(!0);const S=setTimeout(()=>i.abort(new Error("Video export exceeded its ten-minute deadline.")),59e4),v=t.live.runWindow()?.startedAt??null,_=t.session.subscribe(()=>{(t.session.playState()!=="paused"||(t.live.runWindow()?.startedAt??null)!==v)&&i.abort(new Error("Video export cancelled: the Play session changed."))}),b=J();try{await m(r),i.signal.throwIfAborted();const{gameplayRecordingActive:n}=await f(async()=>{const{gameplayRecordingActive:a}=await import("./play-mode-DICV4cKP.js").then(p=>p._);return{gameplayRecordingActive:a}},__vite__mapDeps([12,0,1,2,3,4,5,6,7,8,9,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,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84]));n()&&await T();const{blob:u,...s}=await o(r,h,{step:()=>W.flushSync(()=>A()),assertActive:()=>{if(D(),t.session.playState()!=="paused"||g()!==r||(t.live.runWindow()?.startedAt??null)!==v)throw new Error("Video export interrupted: its game must remain paused and mounted.")},canvasFrame:x,signal:i.signal,...b?{audio:b}:{}}),{beginGameplayRecordingSink:E,appendGameplayRecordingChunk:P,finishGameplayRecordingSink:G,abortGameplayRecordingSink:V}=await f(async()=>{const{beginGameplayRecordingSink:a,appendGameplayRecordingChunk:p,finishGameplayRecordingSink:I,abortGameplayRecordingSink:C}=await import("./editor-api-BFTIRlWa.js");return{beginGameplayRecordingSink:a,appendGameplayRecordingChunk:p,finishGameplayRecordingSink:I,abortGameplayRecordingSink:C}},__vite__mapDeps([85,0,1,2,3,4,5,6,7,8,9,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,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84]));i.signal.throwIfAborted();const c=await E({startedAt:new Date().toISOString(),mimeType:"video/webm",purpose:"export",name:typeof e.name=="string"?e.name:`export-${Date.now()}`},i.signal);try{for(let a=0,p=0;a<u.size;a+=4*1024*1024,p++)i.signal.throwIfAborted(),await P(c,p,u.slice(a,a+4*1024*1024),i.signal);i.signal.throwIfAborted(),await G(c,s.audio?`fixed-step export with audio (${s.audio.codec}, ${s.audio.channels}ch @ ${s.audio.sampleRate} Hz)`:"fixed-step export, video only: this world has no AudioAdapter.renderOffline",i.signal),i.signal.throwIfAborted()}catch(a){throw await V(c),a}return{ok:!0,data:{...s,path:c.path}}}catch(n){return k(n)}finally{_(),clearTimeout(S),d=null,R(!1)}}}};export{_t as commands,St as point};
@@ -1 +0,0 @@
1
- import{x as u,dj as l,cW as c}from"./three.core-3arARmh6.js";const a=Symbol.for("vgai.audio-pose-guard");function p(t){return t.elements.every(Number.isFinite)}function r(t,i){const s=t[a];if(s){i&&(s.report=i);return}const e={dropped:0,...i?{report:i}:{}};Object.defineProperty(t,a,{value:e});const n=new WeakSet,d=t.updateMatrixWorld;t.updateMatrixWorld=function(o){if(c.prototype.updateMatrixWorld.call(this,o),this.context.state!=="running"){this._clock&&(this.timeDelta=0,n.add(this));return}if(p(this.matrixWorld)){n.delete(this)&&this._clock?.getDelta(),d.call(this,o);return}e.dropped++,e.report?.(this.type)}}function x(t){r(u.prototype,t),r(l.prototype,t)}export{x as i};
@@ -1 +0,0 @@
1
- import{a as h}from"./jsx-runtime-DPjLkJKQ.js";import{Z as p,$ as w,eF as m,aI as d,cR as b,cS as x}from"./index-BRJMIUK0.js";import{r as g}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";const v=[{label:"Fill",width:null,height:null},{label:"iPhone SE — 375×667",width:375,height:667},{label:"iPhone 14 — 390×844",width:390,height:844},{label:"iPhone 14 Pro Max — 430×932",width:430,height:932},{label:"iPad Mini — 768×1024",width:768,height:1024},{label:"iPad Pro 11″ — 834×1194",width:834,height:1194},{label:"Laptop — 1366×768",width:1366,height:768},{label:"Desktop — 1920×1080",width:1920,height:1080}];function E({resolution:e,onResolutionChange:i,scale:u,title:a="Change preview resolution",options:r=v}){const[n,o]=g.useState(!1),c=g.useRef(null),s=e.width===null,f=s?"Fill":`${e.width}×${e.height}`;return h.jsxs("div",{className:"vgai-playbar-popover-anchor",children:[h.jsxs(p,{ref:c,variant:"ghost",size:"comfortable","aria-haspopup":"menu","aria-expanded":n,"aria-controls":n?"vgai-resolution-picker-menu":void 0,onClick:()=>o(t=>!t),title:a,children:[h.jsx(w,{icon:m,size:"md"}),h.jsx(d,{variant:"code",children:f}),!s&&u<1&&h.jsxs(d,{variant:"caption",tone:"dim",children:[Math.round(u*100),"%"]})]}),n&&h.jsx(b,{id:"vgai-resolution-picker-menu",anchorRef:c,className:"vgai-resolution-menu",gap:4,onDismiss:()=>o(!1),children:r.map(t=>h.jsx(x,{role:"menuitemradio","aria-checked":t.label===e.label,onSelect:()=>{i(t),o(!1)},children:t.label},t.label))})]})}function l(e){return Number.isFinite(e)&&e>0?e:0}function M(e,i,u={}){const a=l(e.width),r=l(e.height),n=l(i.width),o=l(i.height);if(a===0||r===0||n===0||o===0)return{scale:1,width:n,height:o,offsetX:0,offsetY:0};const c=Math.min(a/n,r/o),s=u.allowUpscale===!0?c:Math.min(c,1),f=n*s,t=o*s;return{scale:s,width:f,height:t,offsetX:(a-f)/2,offsetY:(r-t)/2}}const P={kind:"fill"};function F(e,i){return e.width!==null&&e.height!==null?{kind:"logical",width:e.width,height:e.height,source:"device",allowUpscale:!1}:i!==void 0&&l(i.width)>0&&l(i.height)>0?{kind:"logical",width:i.width,height:i.height,source:"manifest",allowUpscale:!0}:P}export{E as R,v as a,M as f,F as r};
@@ -1 +0,0 @@
1
- import{a as e}from"./jsx-runtime-DPjLkJKQ.js";import{p as C}from"./utility-view-state-CAfbFbKQ.js";import{r as h}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{a1 as N,q as k,ad as s,Z as x,ey as m,ew as i,ij as Y,e1 as q,il as A,ik as U,ki as K,kj as Z}from"./index-BRJMIUK0.js";import{s as Q,f as D,a as ee,d as _,c as te,b as ne,g as se,l as ae,i as re,e as ie,h as oe,j as le,u as de,t as ce,k as pe,m as me,n as T,o as E,p as ue}from"./frame-debugger-store-DaCbAYSW.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";const j={fontFamily:s.typography.mono,fontSize:11};function fe({draw:t,selected:n,onSelect:a}){return e.jsxs(x,{type:"button",variant:"ghost","data-testid":"frame-draw-row","data-draw-index":t.index,"data-selected":n||void 0,className:"vgai-frame-draw-row",onClick:a,children:[e.jsxs("span",{style:{...j,color:s.content.dim,width:34,display:"inline-block"},children:["#",t.index]}),e.jsx("span",{style:{...j,color:s.content.primary},children:t.mode}),e.jsxs("span",{style:{...j,color:s.content.muted},children:[" ",t.count]}),t.instanceCount!==null&&e.jsxs("span",{style:{...j,color:s.content.muted},children:[" ×",t.instanceCount]}),e.jsxs("span",{style:{...j,color:t.annotation?s.content.primary:s.content.dim,fontStyle:t.annotation?"normal":"italic"},children:[" ",t.annotation?t.annotation.object.name||t.annotation.object.type:"unattributed"]})]})}function b({label:t,value:n}){return e.jsxs("div",{style:{display:"flex",gap:8,padding:"1px 0"},children:[e.jsx("span",{style:{fontSize:10,color:s.content.muted,width:92,flexShrink:0},children:t}),e.jsx("span",{style:{...j,color:s.content.primary},children:n})]})}const M=t=>t?"on":"off";function he(t){if(t.kind==="canvas")return"canvas (default framebuffer)";const n=t.width!==null&&t.height!==null?`${t.width}×${t.height}`:"(size not queryable)";return`${t.label??"framebuffer"} ${n}`}function xe(t){return`blend ${M(t.blend)} · depth test ${M(t.depthTest)} · depth write ${M(t.depthWrite)} · cull ${t.cull} · scissor ${M(t.scissor)}`}function ge(t){const n=t.instanceCount!==null?` · ${t.instanceCount} instances`:" · not instanced";return`${t.mode} · ${t.count}${n}`}function ye({draw:t}){return e.jsxs("div",{"data-testid":"frame-draw-detail",style:{padding:8},children:[e.jsx(b,{label:"entry point",value:t.entryPoint}),e.jsx(b,{label:"mode / count",value:ge(t)}),e.jsx(b,{label:"program",value:t.programLabel??"none bound"}),e.jsx(b,{label:"target",value:he(t.target)}),e.jsx(b,{label:"viewport",value:`[${t.viewport.join(", ")}]`}),e.jsx(b,{label:"state",value:xe(t.state)}),t.annotation?e.jsxs(e.Fragment,{children:[e.jsx(b,{label:"object",value:`${t.annotation.object.name||"(unnamed)"} · ${t.annotation.object.type}`}),e.jsx(b,{label:"geometry",value:`${t.annotation.geometry.name||t.annotation.geometry.type}${t.annotation.geometry.indexed?" · indexed":""}`}),e.jsx(b,{label:"attributes",value:t.annotation.geometry.attributes.join(", ")||"—"}),e.jsx(b,{label:"material",value:`${t.annotation.material.name||"(unnamed)"} · ${t.annotation.material.type}`})]}):e.jsx("div",{"data-testid":"frame-draw-unattributed",style:{marginTop:6,fontSize:11,fontStyle:"italic",color:s.content.muted},children:"Not attributable (shadow / post-processing pass — the instrument attributes only main-pass draws through each object's onBeforeRender, and reports the gap honestly rather than guessing)."})]})}function be({capture:t,drawIndex:n,setDrawIndex:a}){const r=t.drawCalls.length,o=Math.min(n,Math.max(0,r-1)),l=t.drawCalls[o]??null,d=le(t);return e.jsxs("div",{style:{flex:1,minHeight:0,display:"flex"},children:[e.jsxs("div",{style:{flex:1,minWidth:0,overflow:"auto",borderRight:`1px solid ${s.boundary.default}`},children:[e.jsxs("div",{style:{display:"flex",gap:6,alignItems:"center",padding:4,borderBottom:`1px solid ${s.boundary.default}`},children:[e.jsx(x,{type:"button",size:"compact",variant:"ghost","data-testid":"frame-draw-prev",disabled:o<=0,onClick:()=>a(Math.max(0,o-1)),children:"◀ Prev"}),e.jsx(x,{type:"button",size:"compact",variant:"ghost","data-testid":"frame-draw-next",disabled:o>=r-1,onClick:()=>a(Math.min(r-1,o+1)),children:"Next ▶"}),e.jsxs("span",{style:{fontSize:10,color:s.content.muted},children:[r===0?"0":o+1,"/",r]})]}),d.map(p=>e.jsxs("div",{"data-testid":"frame-target-group","data-target":p.target,children:[e.jsxs("div",{style:{...j,padding:"2px 8px",color:s.content.muted,borderTop:`1px solid ${s.boundary.default}`,borderBottom:`1px solid ${s.boundary.default}`},children:[p.target," · ",p.draws.length," draws"]}),p.draws.map(u=>e.jsx(fe,{draw:u,selected:u.index===o,onSelect:()=>a(u.index)},u.index))]},p.target))]}),e.jsxs("div",{style:{flex:1,minWidth:0,overflow:"auto"},children:[l?e.jsx(ye,{draw:l}):e.jsx("div",{style:{padding:12,color:s.content.muted,fontSize:12},children:"This capture recorded no draws."}),t.notes.length>0&&e.jsx("div",{style:{padding:"4px 8px",fontSize:10,color:s.content.dim},"data-testid":"frame-capture-notes",children:t.notes.join(" ")})]})]})}function je({captures:t,selectedId:n}){return e.jsx("div",{"data-testid":"frame-capture-history",style:{display:"flex",gap:6,flexWrap:"wrap",padding:"4px 8px",borderBottom:`1px solid ${s.boundary.default}`},children:t.map(a=>{const r=ie(a);return e.jsxs(x,{type:"button",size:"compact",variant:"ghost","data-testid":"frame-capture-item","data-capture-id":a.id,"data-selected":a.id===n||void 0,onClick:()=>oe(a.id),children:["#",a.id," · ",r.drawCalls," draws",r.unattributed>0?` · ${r.unattributed} unattr`:"",r.truncated>0?` · +${r.truncated} capped`:""]},a.id)})})}function ve(){h.useSyncExternalStore(Q,D,D);const[t,n]=h.useState(0),a=N(()=>k().systems.inspected().renderDebug??null);h.useEffect(()=>{ee(a)},[a]);const r=_(a),o=se(),l=o.selected;if(h.useEffect(()=>{n(0)},[l?.id]),!a||!r)return e.jsxs("div",{"data-testid":"frame-debugger-empty",style:{padding:16,color:s.content.muted,fontSize:12,lineHeight:"18px"},children:[e.jsx("div",{style:{color:s.content.primary,marginBottom:4},children:"No render-debug adapter — no game session is running."}),"Frame capture exists only while a game session runs. Press Play: first-party worlds register a ",e.jsx("code",{style:j,children:"RenderDebugAdapter"})," automatically when they hold a real WebGL2 context; a custom world exposes its own via"," ",e.jsx("code",{style:j,children:"ctx.registerSystemAdapter?.('renderDebug', adapter)"}),". A headless mount registers none — there is nothing to capture."]});const d=ae(),p=re();return e.jsxs("div",{"data-testid":"frame-debugger",className:"vgai-content-frost",style:{flex:1,minHeight:0,display:"flex",flexDirection:"column",fontSize:12},children:[e.jsxs("div",{style:{display:"flex",flexWrap:"wrap",gap:10,alignItems:"center",padding:"4px 8px",borderBottom:`1px solid ${s.boundary.default}`},children:[e.jsx(x,{type:"button",size:"compact","data-testid":"frame-capture-button",disabled:p,onClick:()=>void te(a),children:p?"Capturing…":"Capture frame"}),e.jsx("span",{style:{fontSize:10,color:s.content.dim},children:"Single-frame draw-call list with per-draw state — not a GPU replayer."}),o.all.length>0&&e.jsx(x,{type:"button",size:"compact",variant:"ghost","data-testid":"frame-capture-clear",onClick:()=>ne(),children:"Clear"})]}),d&&e.jsxs("div",{"data-testid":"frame-capture-error",style:{padding:"4px 8px",fontSize:11,color:s.semantic.danger,borderBottom:`1px solid ${s.boundary.default}`},children:["Capture failed: ",d]}),o.all.length>0&&e.jsx(je,{captures:o.all,selectedId:l?.id??null}),l?e.jsx(be,{capture:l,drawIndex:t,setDrawIndex:n},l.id):e.jsxs("div",{"data-testid":"frame-debugger-no-capture",style:{padding:12,color:s.content.muted,fontSize:12},children:["No frame captured yet. Press ",e.jsx("strong",{children:"Capture frame"})," while the game renders."]})]})}const S=1,w=1,Se=1e3;function $(t){return Math.round(t*Se)}function we(t,n){const a=[];a.push({name:"process_name",cat:"__metadata",ph:"M",ts:0,dur:0,pid:S,tid:w,args:{name:n.processName}}),a.push({name:"thread_name",cat:"__metadata",ph:"M",ts:0,dur:0,pid:S,tid:w,args:{name:n.threadName}});for(const r of t){const o=r.timestamp-r.cpuMs,l=$(o);a.push({name:`frame ${r.id}`,cat:"frame",ph:"X",ts:l,dur:$(r.cpuMs),pid:S,tid:w,args:{id:r.id,drawCalls:r.render.drawCalls,triangles:r.render.triangles}});for(const d of r.phases)a.push({name:d.name,cat:"phase",ph:"X",ts:$(o+(d.startMs??0)),dur:$(d.ms),pid:S,tid:w});for(const d of r.systems)a.push({name:d.name,cat:"system",ph:"X",ts:$(o+d.startMs),dur:$(d.ms),pid:S,tid:w,args:{phase:d.phase}});a.push({name:"render",cat:"counter",ph:"C",ts:l,dur:0,pid:S,tid:w,args:{drawCalls:r.render.drawCalls,triangles:r.render.triangles}})}return{traceEvents:a,displayTimeUnit:"ms",otherData:{version:2,processName:n.processName,threadName:n.threadName,frameCount:t.length}}}function $e(t){if(t.length<4)return 0;let n=Number.POSITIVE_INFINITY;for(const r of t)n=Math.min(n,r);let a=0;for(const r of t)a+=Math.max(0,r-n);return a}const R=1200;function Ce(){const t=[];let n=null,a=0;const r=()=>{const o=performance.now();t.push({t:o,gapMs:o-a}),t.length>R&&t.splice(0,t.length-R),a=o,n=setTimeout(r,0)};return{start(){n===null&&(t.length=0,a=performance.now(),n=setTimeout(r,0))},stop(){n!==null&&(clearTimeout(n),n=null)},busySince(o){const l=[];for(const d of t)d.t>=o&&l.push(d.gapMs);return{busyMs:$e(l),sampleCount:l.length}}}}const B={enabled:!1,recording:!1,fps:0,cpuMs:0,p95Ms:0,p99Ms:0,frames:[],phases:[],systems:[],components:[],render:{gpuMs:null,drawCalls:0,triangles:0,geometries:0,textures:0,renderPasses:null}},Te=500;function Me(t){const n=URL.createObjectURL(new Blob([t.exportJSON()],{type:"application/json"})),a=document.createElement("a");a.href=n,a.download=`vgai-performance-${new Date().toISOString().replaceAll(":","-")}.json`,a.click(),URL.revokeObjectURL(n)}function ze(t,n){const a=we(t.getSnapshot().frames,{processName:n,threadName:"main"}),r=URL.createObjectURL(new Blob([JSON.stringify(a)],{type:"application/json"})),o=document.createElement("a");o.href=r,o.download=`vgai-trace-${new Date().toISOString().replaceAll(":","-")}.json`,o.click(),URL.revokeObjectURL(r)}const z=720,P=18,I=40,L=[s.accent.default,s.semantic.success,s.semantic.warning,s.content.muted];function Pe({snapshot:t}){const n=t.frames,[a,r]=h.useState(null),o=a!==null&&a<n.length?a:n.length-1,l=n[o],d=pe(n,z,I),p=l?me(l,z):[],u=p.reduce((c,g)=>Math.max(c,g.depth),0);return n.length===0?e.jsxs("div",{"data-testid":"flamegraph-empty",style:{padding:i[6],color:s.content.muted},children:["No frames recorded yet. Frames accumulate while the profiler is enabled; use"," ",e.jsx("strong",{children:"Record capture"})," to also collect per-component spans."]}):e.jsxs("div",{"data-testid":"flamegraph-view",style:{padding:i[4]},children:[e.jsxs("div",{style:{marginBottom:i[4],color:s.content.muted},children:["Frame ",e.jsx("span",{style:{color:s.content.primary},children:l?l.id:"—"})," ·"," ",l?`${l.cpuMs.toFixed(2)} ms CPU`:""," · GPU"," ",e.jsx("span",{style:{color:s.content.primary},children:l&&l.render.gpuMs!==null?`${l.render.gpuMs.toFixed(2)} ms`:"n/a"})]}),e.jsx("div",{"data-testid":"flame-frame-strip",style:{position:"relative",width:z,height:I,boxShadow:`inset 0 0 0 1px ${s.boundary.default}`,marginBottom:i[5]},children:d.map(c=>e.jsx("div",{role:"button",tabIndex:0,"data-testid":"flame-frame-bar","data-frame-index":c.index,"data-selected":c.index===o||void 0,title:`frame ${c.frameId} · ${c.cpuMs.toFixed(2)} ms`,onClick:()=>r(c.index),onKeyDown:g=>{(g.key==="Enter"||g.key===" ")&&r(c.index)},style:{position:"absolute",left:c.x,bottom:0,width:Math.max(1,c.w-1),height:Math.max(1,c.h),cursor:"pointer",background:c.index===o?s.semantic.warning:s.accent.default}},c.frameId))}),e.jsx("div",{"data-testid":"flamegraph-rows",style:{position:"relative",width:z,height:(u+1)*P},children:p.map((c,g)=>e.jsx("div",{"data-testid":"flame-rect","data-depth":c.depth,"data-name":c.label,title:`${c.label} · ${c.ms.toFixed(3)} ms`,style:{position:"absolute",left:c.x,top:c.depth*P,width:Math.max(1,c.w),height:P-1,overflow:"hidden",whiteSpace:"nowrap",fontSize:m.sm,lineHeight:`${P-1}px`,paddingLeft:3,color:s.content.onAccent,background:L[Math.min(c.depth,L.length-1)],borderRight:`1px solid ${s.surface.inset}`},children:c.label},`${c.depth}-${g}-${c.label}`))}),e.jsxs("div",{style:{marginTop:i[3],fontSize:m.sm,color:s.content.dim},children:["Rows: frame · phase · system",t.recording?" · component (recording)":"",". Only measured CPU spans are drawn — GPU time is a whole-frame aggregate, never a fabricated lane."]})]})}function O({title:t,entries:n,estimated:a,testId:r}){return e.jsxs("div",{"data-testid":r,style:{marginTop:i[5],border:`1px solid ${s.boundary.default}`},children:[e.jsxs("div",{style:{padding:`${i[3]} ${i[5]}`,borderBottom:`1px solid ${s.boundary.default}`,color:s.content.muted},children:[t,a&&e.jsx("span",{style:{marginLeft:i[3],fontSize:m.xs,color:s.content.dim},children:"ESTIMATED"})]}),n.length===0?e.jsx("div",{style:{padding:`${i[2]} ${i[5]}`,color:s.content.dim,fontSize:m.base},children:"none"}):n.map(o=>e.jsxs("div",{style:{display:"flex",justifyContent:"space-between",gap:i[8],padding:"3px 10px"},children:[e.jsx("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:o.name}),e.jsx("span",{style:{fontVariantNumeric:"tabular-nums"},children:T(o.bytes)})]},o.name))]})}function Fe(){const t=N(()=>k().systems.inspected().renderDebug??null),n=_(t),[a,r]=h.useState(null);h.useEffect(()=>{if(!t?.memorySnapshot){r(null);return}const l=()=>r(t.memorySnapshot?.()??null);l();const d=setInterval(l,1e3);return()=>clearInterval(d)},[t]);const o=K();return e.jsxs("div",{style:{padding:i[4]},children:[e.jsxs("div",{"data-testid":"memory-heap",style:{border:`1px solid ${s.boundary.default}`,padding:i[5],marginBottom:i[5]},children:[e.jsx("div",{style:{color:s.content.dim,textTransform:"uppercase",fontSize:m.sm},children:"JS heap (performance.memory)"}),Z(o)?e.jsxs("div",{style:{fontSize:m.xl,color:s.content.primary,marginTop:3},children:[T(o.usedBytes)," ",e.jsxs("span",{style:{fontSize:m.base,color:s.content.muted},children:["used / ",T(o.totalBytes)," total"]})]}):e.jsx("div",{"data-testid":"memory-heap-unavailable",style:{fontSize:m.base,color:s.content.muted,marginTop:3,fontStyle:"italic"},children:o.unavailable})]}),n?.memory?a===null?e.jsx("div",{style:{padding:i[4],color:s.content.muted,fontSize:m.base},children:"Waiting for the first render-memory sample…"}):e.jsxs("div",{"data-testid":"memory-section",children:[e.jsx("div",{style:{display:"grid",gridTemplateColumns:"repeat(3, minmax(80px, 1fr))",gap:i[4]},children:[["Geometries",String(a.counts.geometries)],["Textures",String(a.counts.textures)],["Programs",a.counts.programs===null?"n/a until first render":String(a.counts.programs)]].map(([l,d])=>e.jsxs("div",{style:{border:`1px solid ${s.boundary.default}`,padding:i[5]},children:[e.jsx("div",{style:{color:s.content.dim,textTransform:"uppercase",fontSize:m.sm},children:l}),e.jsx("div",{style:{fontSize:m["2xl"],color:s.content.primary,marginTop:3},children:d})]},l))}),e.jsxs("div",{"data-testid":"memory-vram-totals",style:{display:"flex",gap:18,marginTop:i[5],fontSize:m.base,color:s.content.muted},children:[e.jsxs("span",{children:["geometry buffers"," ",e.jsx("span",{style:{color:s.content.primary},children:T(a.estimatedGeometryBytes)})," ",e.jsx("span",{style:{fontSize:m.xs,color:s.content.dim},children:"EXACT"})]}),e.jsxs("span",{children:["texture VRAM"," ",e.jsx("span",{style:{color:s.content.primary},children:T(a.estimatedTextureBytes)})," ",e.jsx("span",{style:{fontSize:m.xs,color:s.content.dim},children:"ESTIMATED"})]})]}),e.jsx(O,{title:"Top geometries",entries:a.topGeometries,estimated:!1,testId:"memory-top-geometries"}),e.jsx(O,{title:"Top textures",entries:a.topTextures,estimated:!0,testId:"memory-top-textures"}),a.unestimated.length>0&&e.jsxs("div",{"data-testid":"memory-unestimated",style:{marginTop:i[5],border:`1px solid ${s.boundary.default}`},children:[e.jsxs("div",{style:{padding:`${i[3]} ${i[5]}`,borderBottom:`1px solid ${s.boundary.default}`,color:s.content.muted},children:["Unmeasured textures (",a.unestimated.length,") — excluded from the total, not zeroed"]}),a.unestimated.map(l=>e.jsxs("div",{style:{display:"flex",justifyContent:"space-between",gap:i[8],padding:"3px 10px",fontSize:m.base},children:[e.jsx("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:l.name}),e.jsx("span",{style:{color:s.content.dim},children:l.reason})]},l.name))]})]}):e.jsxs("div",{"data-testid":"memory-absent",style:{padding:i[4],color:s.content.muted,fontSize:m.base,fontStyle:"italic"},children:["Render-memory introspection is not provided by this world's adapter — a headless mount has no ",e.jsx("code",{children:"renderer.info"}),", and a canvas (PixiJS) world's renderer publishes no managed geometry collection to measure at all. Enter Play with a first-party three world to inspect geometry/texture footprints."]})]})}function ke(t){const n=h.useRef([]),a=typeof PerformanceObserver<"u"&&(PerformanceObserver.supportedEntryTypes??[]).includes("long-animation-frame");return h.useEffect(()=>{if(!t||!a)return;n.current=[];const r=new PerformanceObserver(o=>{const l=n.current;for(const d of o.getEntries())l.push(d);l.length>40&&l.splice(0,l.length-40)});return r.observe({type:"long-animation-frame"}),()=>r.disconnect()},[t,a]),{entries:n.current,supported:a}}function De(t,n,a){const r=h.useRef(null);r.current===null&&(r.current=Ce()),h.useEffect(()=>{const l=r.current;if(!(!t||!l))return l.start(),()=>l.stop()},[t]);const o=performance.now()-1e3;return ce(n.frames,o,r.current.busySince(o),a)}function Ee({row:t,rootMs:n}){const a=t.ms!==null&&n>0?Math.min(1,t.ms/n):0,r=t.depth===0;return e.jsxs("div",{style:{display:"grid",gridTemplateColumns:"260px 1fr 70px",gap:i[5],padding:`${i[2]} ${i[5]}`,paddingLeft:10+t.depth*16},children:[e.jsxs("span",{style:{color:r||t.depth===1?s.content.primary:s.content.muted,fontStyle:t.parallel?"italic":void 0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},title:t.note?`${t.label} — ${t.note}`:t.label,children:[t.label,t.note&&e.jsx("span",{style:{marginLeft:i[3],fontSize:m.sm,color:s.content.dim},children:t.note})]}),e.jsx("div",{style:{background:s.surface.raised,height:6,marginTop:5,opacity:t.parallel?.45:1},children:e.jsx("div",{style:{width:`${a*100}%`,height:"100%",background:!r&&t.ms!==null&&t.ms>8?s.semantic.warning:s.accent.default}})}),e.jsx("span",{style:{textAlign:"right",fontVariantNumeric:"tabular-nums",color:r?s.content.primary:void 0},children:t.ms===null?"—":`${t.ms.toFixed(1)} ms`})]})}function Re({snapshot:t,timeSpent:n,entries:a,loafSupported:r}){const o=n?.budget??null,l=o?E(o.frameMs,o.loopMs):E(t.p95Ms,t.cpuMs),d=1e4,p=ue(a.filter(u=>(u.startTime??0)>=performance.now()-d));return n===null&&!l.dominated&&p.longFrameCount===0?null:e.jsxs("div",{"data-testid":"time-spent-section",style:{marginTop:i[6],border:`1px solid ${s.boundary.default}`},children:[e.jsx("div",{style:{padding:"7px 10px",borderBottom:`1px solid ${s.boundary.default}`,color:s.content.muted},children:"Where the frame goes"}),n!==null&&e.jsx("div",{"data-testid":"time-spent-tree",style:{paddingBottom:i[1]},children:n.rows.map(u=>e.jsx(Ee,{row:u,rootMs:n.budget.frameMs},`${u.depth}:${u.label}`))}),l.dominated&&e.jsxs("div",{style:{padding:`${i[3]} ${i[5]}`,color:s.content.muted,borderTop:`1px solid ${s.boundary.default}`},children:["The measured loop explains less than half of the frame time — the bottleneck is"," ",p.scripts.length>0?"partly the main-thread work below, and the rest":"not on the main thread: look at the display pipeline"," ","(GPU/compositor: post-effects, glass chrome, pixel ratio) or browser throttling."]}),p.scripts.length>0&&e.jsx("div",{style:{padding:"5px 10px 2px",borderTop:`1px solid ${s.boundary.default}`,fontSize:m.sm,color:s.content.dim},children:"Named main-thread offenders — longer memory than the tree (last 10s of long frames)"}),p.scripts.map(u=>e.jsxs("div",{style:{display:"flex",justifyContent:"space-between",gap:i[8],padding:`${i[2]} ${i[5]}`},children:[e.jsx("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:u.key}),e.jsxs("span",{style:{fontVariantNumeric:"tabular-nums"},children:[u.totalMs," ms ×",u.count]})]},u.key)),p.longFrameCount>0&&e.jsxs("div",{style:{padding:`${i[2]} ${i[5]}`,fontSize:m.sm,color:s.content.dim},children:[p.longFrameCount," long main-thread frame",p.longFrameCount===1?"":"s"," (",p.totalLongMs," ms total, ",p.unattributedMs," ms unattributed style/layout/GC) — browser long-animation-frame report, last 10s."]}),!r&&e.jsx("div",{style:{padding:`${i[2]} ${i[5]}`,fontSize:m.sm,color:s.content.dim},children:"Main-thread attribution unavailable — this browser does not support long-animation-frame timing."})]})}function Be(){const t=de(),n=t?.profiler??null,[a,r]=h.useState(B),[o,l]=h.useState(!1),[d,p]=h.useState(!1),[u,c]=h.useState("overview"),g=h.useRef(!1),F=ke(n),H=De(n,a,F.entries),V=()=>{const f=!g.current;g.current=f,l(f),!f&&n&&r(n.getSnapshot())},W=()=>{if(!n)return;const f=!n.enabled;f&&p(!1),n.enabled=f,r(n.getSnapshot())};return h.useEffect(()=>{if(!n){r(B);return}g.current=!1,l(!1),p(!1);const f=n.enabled;n.enabled=!0,r(n.getSnapshot());let y=null,v=performance.now();const G=()=>{y=null,!g.current&&(v=performance.now(),r(n.getSnapshot()))},J=n.subscribe(()=>{if(g.current||y!==null)return;const X=Math.max(0,Te-(performance.now()-v));y=setTimeout(G,X)});return()=>{J(),y!==null&&clearTimeout(y),!f&&!n.recording&&(n.enabled=!1)}},[n]),n?e.jsxs("div",{className:"vgai-content-frost",style:{height:"100%",overflow:"auto",padding:i[6],color:s.content.primary,fontSize:m.md},children:[e.jsxs("div",{style:{marginBottom:i[5],color:s.content.muted},children:["Profiling ",e.jsx("span",{style:{color:s.content.primary},children:t?.label}),a.enabled&&d&&e.jsx(Y,{style:{marginLeft:i[4]},children:"Profiling active"})]}),a.enabled&&!d&&e.jsxs(q,{tone:"warning",style:{marginBottom:i[5]},actions:e.jsx(x,{size:"compact",variant:"ghost",onClick:()=>p(!0),children:"Dismiss"}),children:["Live profiling is active and adds measurement overhead. Displayed timings include that cost",a.recording?"; capture recording adds detailed timing marks":"","."]}),e.jsxs("div",{style:{display:"flex",gap:i[4],alignItems:"center",marginBottom:i[6]},children:[e.jsx(x,{size:"compact",onClick:V,children:o?"Resume view":"Freeze view"}),e.jsxs(x,{size:"compact",onClick:W,children:[a.enabled?"Disable":"Enable"," profiler"]}),e.jsx(x,{size:"compact",onClick:()=>a.recording?n.stopRecording():n.startRecording(),children:a.recording?"Stop capture":"Record capture"}),e.jsx(x,{size:"compact",onClick:()=>n.clear(),children:"Clear"}),e.jsx(x,{size:"compact",onClick:()=>Me(n),children:"Export JSON"}),e.jsx(x,{size:"compact","data-testid":"profiler-export-trace",onClick:()=>ze(n,t?.label??"vgai"),children:"Export Chrome trace"})]}),e.jsx(A,{"aria-label":"Profiler views",style:{marginBottom:i[6]},children:[["overview","Overview"],["flamegraph","Flamegraph"],["memory","Memory"]].map(([f,y])=>e.jsx(U,{selected:u===f,"data-testid":`profiler-view-${f}`,onClick:()=>c(f),children:y},f))}),u==="flamegraph"&&e.jsx(Pe,{snapshot:a}),u==="memory"&&e.jsx(Fe,{}),u==="overview"&&e.jsxs(e.Fragment,{children:[e.jsx("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(80px, 1fr))",gap:i[4]},children:[["FPS",a.fps.toFixed(0)],["CPU",`${a.cpuMs.toFixed(2)} ms`],["p95 frame",`${a.p95Ms.toFixed(2)} ms`],["p99 frame",`${a.p99Ms.toFixed(2)} ms`],["GPU",a.render.gpuMs===null?"n/a":`${a.render.gpuMs.toFixed(2)} ms`],["Draw calls",String(a.render.drawCalls)],["Triangles",a.render.triangles.toLocaleString()]].map(([f,y])=>e.jsxs("div",{style:{border:`1px solid ${s.boundary.default}`,padding:i[5]},children:[e.jsx("div",{style:{color:s.content.dim,textTransform:"uppercase",fontSize:m.sm},children:f}),e.jsx("div",{style:{fontSize:18,color:s.content.primary,marginTop:3},children:y})]},f))}),e.jsx(Re,{snapshot:a,timeSpent:H,entries:F.entries,loafSupported:F.supported}),[["Components (recording)",a.components]].map(([f,y])=>e.jsxs("div",{style:{marginTop:i[6],border:`1px solid ${s.boundary.default}`},children:[e.jsx("div",{style:{padding:"7px 10px",borderBottom:`1px solid ${s.boundary.default}`,color:s.content.muted},children:f}),y.slice(0,12).map(v=>e.jsxs("div",{style:{display:"flex",justifyContent:"space-between",gap:i[8],padding:`${i[2]} ${i[5]}`},children:[e.jsx("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:v.name}),e.jsxs("span",{style:{fontVariantNumeric:"tabular-nums"},children:[v.ms.toFixed(2)," ms"]})]},v.name))]},f))]})]}):e.jsx("div",{style:{padding:i[6],fontSize:m.md,color:s.content.muted,maxWidth:480},children:e.jsx("p",{style:{margin:0},children:k().documents.active()?"The active document has no live render loop to profile.":"Open a rendered document to profile it."})})}const Ie=[{id:"profiler",label:"Profiler"},{id:"frame",label:"Frame"}];function Le(){h.useSyncExternalStore(C.subscribe,C.version,C.version);const t=C.active();return e.jsxs("div",{"data-testid":"profiler-panel",style:{flex:1,minHeight:0,display:"flex",flexDirection:"column"},children:[e.jsx(A,{"aria-label":"Profiler views",children:Ie.map(n=>e.jsx(U,{selected:t===n.id,"data-testid":`profiler-tab-${n.id}`,onClick:()=>C.select(n.id),children:n.label},n.id))}),e.jsxs("div",{role:"tabpanel",style:{flex:1,minHeight:0,display:"flex"},children:[t==="profiler"&&e.jsx(Be,{}),t==="frame"&&e.jsx(ve,{})]})]})}const Ye="workspace.utility",qe="Profiler",Ke=20;function Ze(){return e.jsx(Le,{})}export{Ze as default,Ke as order,Ye as point,qe as title};
@@ -1 +0,0 @@
1
- const y=".vgai/provenance.json";function l(t){const r=t.split(/[?#]/,1)[0].replace(/^\/+/,"");return r.startsWith("public/")?r:`public/${r}`}async function d(){const t=await fetch(`/__editor/vgai-file?${new URLSearchParams({path:y})}`);return t.ok?JSON.parse(await t.text()):null}function c(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:null}function h(t,r){const e=c(t);if(e?.path!==r||typeof e.bytes!="number"||typeof e.sha256!="string")return null;const n=e.mediaType,o=e.role;return{path:r,bytes:e.bytes,sha256:e.sha256,...typeof n=="string"?{mediaType:n}:{},...typeof o=="string"?{role:o}:{}}}function A(t,r,e){const n=c(r),o=c(n?.operation),a=n?.outputs,s=n?.createdAt,i=o?.name;if(!n||!o||typeof s!="string"||typeof i!="string"||!Array.isArray(a))return[];const p=o.source;return a.flatMap(f=>{const u=h(f,e);return u?[{operationId:t,createdAt:s,operationName:i,...typeof p=="string"?{operationSource:p}:{},...n.input!==void 0?{input:n.input}:{},output:u}]:[]})}async function m(t){const r=c(await d()),e=c(r?.operations);if(!e)return null;const n=l(t);return Object.entries(e).flatMap(([a,s])=>A(a,s,n)).sort((a,s)=>s.createdAt.localeCompare(a.createdAt))[0]??null}export{m as a,l as p};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/r3f-source-authoring-adapter-DbbeRcvt.js","assets/component-instance-root-B0C5oNEm.js","assets/user-data-Bpj7diUS.js","assets/workspace-arrangement-BdAlBwvd.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/live-gesture-lock-DJbrjOqf.js","assets/relative-import-specifier-BFKIWEWs.js","assets/three-projection-core-CG01r5Ta.js","assets/editor-layers-BDJnAAzj.js","assets/three-TCuY32m_.js","assets/entity-object-JmYMfLsx.js","assets/three-contract-Dkt6PmWY.js","assets/viewport-editor-controls-BYaAZ_Ku.js","assets/three.core-3arARmh6.js","assets/inference-diagnostics-xecGdohW.js","assets/instance-fork-actions-D3sRzS3K.js","assets/oid-transform-D5Kxt6ij.js","assets/writer-tw6EcuVO.js","assets/r3f-physics-binding-DzrbpqjM.js","assets/object3d-authoring-subject-BDrxd1GA.js","assets/user-data-dHvLdpwM.js","assets/object-marks-DwvIEBOK.js","assets/three.module-BLhyNg0e.js"])))=>i.map(i=>d[i]);
2
- import{gd as $e,a8 as Ae,gM as Ce,_ as Ee,f$ as Pe,M as T,p as ce,dD as de,k7 as xe,dl as ue,k8 as Fe,k9 as Ie,bo as De,ka as je,kb as Be,kc as He,bn as Le,au as Ve,bs as pe,dj as Oe,h3 as _e}from"./index-BRJMIUK0.js";import{p as Ge,B as fe,q as ye}from"./edit-mode-authoring-DeCxPcHM.js";import{w as ze,a as We,e as qe}from"./adapter-runtime-bindings-4cmsRvRh.js";import{a as Ue}from"./entry-adjudication-Dc18TIqT.js";import{a as Ne}from"./realm-services-CnY105XU.js";import{p as Qe}from"./scene-framing-BQt72ZCw.js";import{i as Je,b as Ke,n as Xe,a as Ze}from"./native-debug-module-2_HVupdg.js";import{createAssetCache as Ye}from"./assets-BcrMQHRv.js";import{d as ke,a as et,b as tt}from"./create-runtime-DBfUy0SO.js";import{T as st}from"./three.module-BLhyNg0e.js";import{_ as me,fp as ee,el as ot}from"./three.core-3arARmh6.js";import{w as nt,l as rt}from"./live-gesture-lock-DJbrjOqf.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./seeded-random-BgCwIAAU.js";import"./debug-registry-P0_YQGWd.js";import"./game-audio-CaGKzia4.js";import"./game-network-Ct2FQYmu.js";import"./index-OZVqp6xS.js";import"./index-Da9JhEvW.js";import"./rapier-physics-adapter-CaZqWLu0.js";import"./events-156d8d12.esm-CYeuVCYr.js";import"./index-bQE2NA0D.js";import"./live-project-verbs-C3LzprCe.js";import"./capability-coverage-DZ-onC5j.js";import"./game-contract-seams-BnPFGLll.js";import"./structural-signature-Dc7skRiy.js";import"./webgl-frame-capture-DdJkM2mi.js";import"./canvas-entry-runtime-UNYuSfG0.js";import"./three-ingest-runtime-B7rtg3QE.js";import"./EffectComposer-BEAt0PtQ.js";import"./CopyShader-BzTUYzf6.js";import"./ShaderPass-DTnDQXm0.js";import"./Pass-D1MRT672.js";import"./CSS3DRenderer-BsAqfavI.js";import"./editor-layers-BDJnAAzj.js";import"./workspace-arrangement-BdAlBwvd.js";import"./native-entry-surface-BE8LJNdu.js";import"./contract-system-adapters-Bic_7sev.js";import"./loader-BTUKnX5Q.js";import"./KTX2Loader-CaqVE6nY.js";import"./GLTFLoader-KeoruJgS.js";import"./BufferGeometryUtils-B22h7jo4.js";import"./adapter-surface-Y37Nzcyw.js";import"./binding-Bmxqznjk.js";import"./root-stacking-BEd9ZvxC.js";import"./setup-renderer-Cwkl1Ar6.js";import"./index-DHhMOs_s.js";import"./defaults-DKiBJCPN.js";import"./render-settings-DS5leCed.js";import"./render-features-rxbawsRb.js";import"./loop-gate-report-N52EWFGD.js";import"./system-slot-E2mEdiih.js";import"./user-data-dHvLdpwM.js";import"./object-marks-DwvIEBOK.js";import"./performance-profiler-OwnXQX0M.js";function it(t,e){const i=()=>{},a=new Set(["dispose","forceContextLoss","forceContextRestore","setAnimationLoop","setSize","setPixelRatio","setDrawingBufferSize"]),p=new Map,v={...e.shadowMap};let R=e.xr.enabled;const b=e.getClearColor(new me);let C=e.getClearAlpha(),$=null,V=0,O=0;const u=e.getViewport(new ee),h=e.getScissor(new ee);let P=e.getScissorTest(),y=!1,x=!1,F=!1;const _=(c,s,o,r,w)=>{typeof s=="number"?c.set(s,o,r,w):c.copy(s)},B=new Proxy(e.xr,{get(c,s){if(s==="enabled")return R;if(s==="setAnimationLoop"||s==="addEventListener"||s==="removeEventListener")return i;const o=Reflect.get(c,s,c);return typeof o=="function"?o.bind(c):o},set(c,s,o){return s==="enabled"?(R=o,!0):Reflect.set(c,s,o,c)}}),q=new Proxy(e.renderLists,{get(c,s){if(s==="dispose")return i;const o=Reflect.get(c,s,c);return typeof o=="function"?o.bind(c):o}});function G(c,s){const o=new Map,r={...e.shadowMap},w=e.xr.enabled,M=e.getClearColor(new me),I=e.getClearAlpha(),J=e.getRenderTarget(),K=e.getActiveCubeFace(),W=e.getActiveMipmapLevel(),U=e.getViewport(new ee),te=e.getScissor(new ee),X=e.getScissorTest();try{for(const[D,N]of p)o.set(D,Reflect.get(e,D)),Reflect.set(e,D,N);return Object.assign(e.shadowMap,v),e.xr.enabled=R,e.setClearColor(b,C),e.setViewport(u),e.setScissor(h),e.setScissorTest(P),e.setRenderTarget($,V,O),y&&e.setViewport(u),x&&e.setScissor(h),F&&e.setScissorTest(P),c.apply(e,s)}finally{for(const[D,N]of o)Reflect.set(e,D,N);Object.assign(e.shadowMap,r),e.xr.enabled=w,e.setClearColor(M,I),e.setViewport(U),e.setScissor(te),e.setScissorTest(X),e.setRenderTarget(J,K,W)}}const z=new Map;return new Proxy(e,{get(c,s){if(s==="domElement")return t;if(s==="shadowMap")return v;if(s==="xr")return B;if(s==="renderLists")return q;if(a.has(s))return i;if(s==="getRenderTarget")return()=>$;if(s==="getActiveCubeFace")return()=>V;if(s==="getActiveMipmapLevel")return()=>O;if(s==="setRenderTarget")return(r,w=0,M=0)=>{$=r,V=w,O=M,y=x=F=!1};if(s==="getViewport")return r=>r.copy(u);if(s==="getCurrentViewport")return r=>$&&!y?r.copy($.viewport):(r.copy(u).multiplyScalar(e.getPixelRatio()),y?r.round():r.floor());if(s==="getScissor")return r=>r.copy(h);if(s==="getScissorTest")return()=>P;if(s==="setViewport")return(r,w,M,I)=>{_(u,r,w,M,I),y=!0};if(s==="setScissor")return(r,w,M,I)=>{_(h,r,w,M,I),x=!0};if(s==="setScissorTest")return r=>{P=r,F=!0};if(s==="getClearColor")return r=>r.copy(b);if(s==="getClearAlpha")return()=>C;if(s==="setClearColor")return(r,w=C)=>{b.set(r),C=w};if(s==="setClearAlpha")return r=>{C=r};if(p.has(s))return p.get(s);const o=Reflect.get(c,s,c);if(typeof o!="function")return o;if(!z.has(s)){const r=/^(render|compile|clear|copy|init|readRenderTarget)/.test(String(s));z.set(s,r?(...w)=>{if(!((s==="render"||String(s).startsWith("clear"))&&!$))return G(o,w)}:o.bind(c))}return z.get(s)},set(c,s,o){return s!=="domElement"&&p.set(s,o),!0}})}class at{pending=new WeakMap;remember(e,i){const a=[...i];a.length===0?this.pending.delete(e):this.pending.set(e,a)}take(e,i){const a=[...i],p=this.pending.get(e)??[];return this.pending.delete(e),a.length>0?a:p}}function he(t){return decodeURIComponent(t.split("?")[0]).replace(/^\/@fs\/(?=[A-Za-z]:\/)/,"").replace(/^\/@fs/,"")}class lt{sources=new Map;applied=new Map;expected=new Map;missingRevision=!1;source(e){this.sources.set(e.file,e)}complete(e){for(const[i,a]of this.sources){const p=e.filter(R=>a.timestamp===R.timestamp);(a.boundaries?a.boundaries.every(R=>p.some(b=>b.acceptedPath===R)):p.some(R=>he(R.acceptedPath)===i))&&(this.applied.set(a.path,a.sha),this.sources.delete(i))}}matches(e){const i=he(e.acceptedPath);return[...this.sources.values()].some(a=>a.timestamp===e.timestamp&&(a.boundaries?a.boundaries.includes(e.acceptedPath):a.file===i))}revision(e){for(const i of e)this.expected.set(i.path,i.sha),i.sha===null&&this.applied.delete(i.path)}needsRemount(){if(this.missingRevision)return!0;for(const[e,i]of this.expected)if(i===null||this.applied.get(e)!==i)return!0;return!1}missing(){this.missingRevision=!0}mounted(){this.expected.clear(),this.applied.clear(),this.sources.clear(),this.missingRevision=!1}}function ct(t){return t instanceof ot||t!==null&&typeof t=="object"&&t.isScene===!0}function dt(t){return t.find(e=>e.surface==="three")?.id??null}const ge=new at;function ut(t,e,i){return new Error(`three root "${t}" failed to mount: ${e} did not export a RootAdapter or a default React component (exports: ${i.join(", ")||"(nothing)"}).`)}function pt(t,e){const i=De(e);T.error(`[r3f-design] world "${t}" failed to mount: ${i}`,"authoring");const a=je(i);return a&&Be(a).then(p=>T.error(`[r3f-design] world "${t}": ${He(p)}`,"authoring")),Le({worldId:t,kind:"three",identity:"default-three",message:i}),i}async function ft(t,e,i,a){const p=await t.loadEntryModule(i,e,"three"),v=a===i?p:await t.loadEntryModule(a,e,"three");return{designModule:p,rootModule:v}}function mt(t,e,i,a,p,v){ke(t,e,i,{id:a}),Je(t,p?[p]:[]),Ke(t,We(t,v?[v]:[]))}function ht(t){const e=document.createElement("canvas"),i=it(e,t),a=Ye(),p=et({loop:tt({update:()=>{}}),assets:a});return{game:p,host:{three:st,surface:{canvas:e,width:1280,height:720},renderer:i,assets:a,headless:!1,game:p},dispose:()=>p.dispose()}}function we(t){return{id:t.id,kind:t.surface,adapter:t.adapter,entryOrScenePath:t.entry??t.scene,zOrder:t.zOrder??0,pausable:t.pausable??!0}}function re(t){let e=!1,i=!1;const a=()=>{e||i||t.shell.playState!=="stopped"||(i=!0,ye())},p=t.shell.subscribe(a);return a(),()=>{e=!0,p()}}async function $s(t,e,i){const a=Ve();if(!a)return()=>{};const p=await $e();if(t.shell.playState!=="stopped")return re(t);const v=Ge(p);if(!v)return()=>{};const R=dt(Ae(v)),b=R?Ce(v,R):void 0;if(!b)return()=>{};const C=b.world?.entry??b.entry,$=b.world?.export;if(!C||!/\.(tsx|jsx)$/.test(C))return()=>{};const V=Ee(()=>import("./r3f-source-authoring-adapter-DbbeRcvt.js"),__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])),O=Pe();let u=!1,h=!1,P=null,y=null,x=!1,F=null,_=!1,B=!1,q,G,z,c=null,s=null;const o=b.id,r=C,w=()=>{s||!c||u||h||t.shell.playState!=="stopped"||(s=c.systemAdapters,pe(s))},M=()=>{s&&(s=null,pe(null))},I=async()=>{const n=await Ne(a.rootPath,Oe()),{designModule:d,rootModule:f}=await ft(n,o,r,b.entry??r),l=Xe(o,f),m=Ze(o,f,"three"),g=await Ue(d,o,{...$===void 0?{}:{namedExport:$},entryPath:r});if(!g)throw ut(o,r,Object.keys(d));return $!==void 0?{adapter:g,entryDebug:l,entrySystems:m}:{adapter:g,entryDebug:l,entrySystems:m,components:d.components??d.behaviors}},J=async(n,d,f)=>{const{host:l,game:m,dispose:g}=ht(i);let S;try{S=await n.mount(l)}catch(Y){throw g(),Y}if(S.kind!=="three"||!ct(S.scene))throw S.dispose(),g(),new Error(`entry adapter for world "${o}" did not mount a three scene`);return mt(m,n,S,o,d,f),{root:S,game:m,disposeHost:g}},K=n=>{P=n.root,c=n.game,G?.();const d=n.game;G=d.subscribeSystemAdapters?.(()=>{if(c!==d)return;const f=d.systemAdapters;s&&(s=f,_e(f)),t.shell.notifyIngestEdit()}),q=n.disposeHost},W=()=>{M(),G?.(),G=void 0,c=null;try{P?.dispose()}catch(n){T.error(`[r3f-design] dispose failed: ${n}`,"authoring")}P=null;try{q?.()}catch(n){T.error(`[r3f-design] design host dispose failed: ${n}`,"authoring")}q=void 0},U=()=>{if(!x)return;x=!1;const n=F;F=null,n?t.releaseAdoptedScene(n):t.exitPlayScene()},te=()=>{h=!0,U(),W(),e.replaceChild(o,new fe(t.shell,we(b),"R3F design session suspended by play mode — Stop restores it.")),t.shell.notifyIngestEdit()},X=n=>{const d=pt(o,n);e.replaceChild(o,new fe(t.shell,we(b),d)),t.shell.notifyIngestEdit()},D=setTimeout(()=>{T.warn(`[r3f-design] world "${o}" is still importing after 20s (${r}). The in-browser compiler or a module download may be stalled on a slow connection — it keeps trying; reload the tab if nothing appears.`,"authoring")},2e4);try{const[n,{R3fSourceAuthoringAdapter:d},f]=await Promise.all([I(),V,O]);if(clearTimeout(D),!n)return T.warn(`[r3f-design] world "${o}" produced no design entry (${r}) — the scene stays empty. This is a bug worth reporting; reload the tab to retry.`,"authoring"),()=>{};if(u)return()=>{};if(t.shell.playState!=="stopped")return re(t);const l=await J(n.adapter,n.entryDebug,n.entrySystems);if(K(l),u||t.shell.playState!=="stopped")return W(),u?()=>{}:re(t);y=new d(t,l.root.scene,{worldId:o,entryPath:r,writeBackend:f,physics:()=>ce(c?.systemAdapters.physics)}),e.replaceChild(o,y),ze(l.root.scene).then(S=>{S&&!u&&t.shell.notifyIngestEdit()});const m=ge.take(t,t.shell.selectedEntityIds);t.enterPlayScene(l.root.scene,l.root.rendererConfig),x=!0,F=l.root.scene,t.focusOnScene(()=>Qe(null,l.root.scene));const g=m.filter(S=>e.hierarchy.node(S)!==null);g.length>0&&t.shell.selectMultiple(g),de(o),w(),t.shell.notifyIngestEdit(),T.log(`[r3f-design] world "${o}" mounted for design-time authoring (${r})`,"authoring")}catch(n){clearTimeout(D),X(n)}const N=(n,d,f,l,m)=>{const g=performance.now()-d;g<400||console.info(`[r3f-design] world "${n}" remounted in ${g.toFixed(0)}ms (import ${(f-d).toFixed(0)}ms, mount ${(l-f).toFixed(0)}ms, settle ${(m-l).toFixed(0)}ms, adopt ${(performance.now()-m).toFixed(0)}ms)`)},be=async()=>{if(u||h)return;const n=[...t.shell.selectedEntityIds],d=H,f=t.shell.projectHistory?.getSnapshot().busy===!0;let l="importing";const m=setTimeout(()=>{T.warn(`[r3f-design] world "${o}" remount is still ${l} after 20s (${r}) — it keeps trying; reload the tab if nothing appears.`,"authoring")},2e4),g=performance.now();let S=g,Y=g,ae=g;try{const j=await I();if(S=performance.now(),!j||u||h){console.info(`[r3f-design] world "${o}" remount abandoned after import (${j?u?"torn down":"suspended":"no entry"})`);return}l="mounting";const A=await J(j.adapter,j.entryDebug,j.entrySystems);Y=performance.now();for(let E=0;E<50&&(await nt(),await Se(),!(!rt()&&t.shell.projectHistory?.getSnapshot().busy!==!0));E+=1);if(ae=performance.now(),!u&&!h&&H!==d){A.root.dispose(),A.disposeHost(),L();return}if(u||h){console.info(`[r3f-design] world "${o}" remount abandoned after mount (${u?"torn down":"suspended"})`),A.root.dispose(),A.disposeHost();return}const k=new Set(t.shell.selectedEntityIds);if(U(),W(),K(A),y)y.adoptScene(A.root.scene),e.childAdapters().find(ne=>ne.worldId===o)?.adapter!==y&&(e.replaceChild(o,y),T.log(`[r3f-design] world "${o}" recovered and remounted for design-time authoring (${r})`,"authoring"));else{const[{R3fSourceAuthoringAdapter:E},ne]=await Promise.all([V,O]);y=new E(t,A.root.scene,{worldId:o,entryPath:r,writeBackend:ne,physics:()=>ce(c?.systemAdapters.physics)}),e.replaceChild(o,y),T.log(`[r3f-design] world "${o}" recovered and mounted for design-time authoring (${r})`,"authoring")}const Me=k.size>0&&(k.size!==n.length||n.some(E=>!k.has(E)));t.enterPlayScene(A.root.scene,A.root.rendererConfig),x=!0,F=A.root.scene;const le=(Me?[...k]:n).filter(E=>y?.hierarchy.node(E)!==null);le.length>0&&t.shell.selectMultiple(le),de(o),w(),t.shell.notifyIngestEdit(),N(o,g,S,Y,ae),Q.mounted(),clearTimeout(Z),B=!1}catch(j){X(j),!B&&!u&&!h?(B=!0,setTimeout(()=>{!u&&!h&&L()},400)):!u&&!h&&(H===d&&!f?ve(j):(B=!1,L()))}finally{clearTimeout(m),!u&&!h&&H!==d&&L()}},Se=async()=>{const n=t.shell.projectHistory;if(!n)return;const d=Date.now()+1e4;for(;n.getSnapshot().busy&&Date.now()<d;)await new Promise(f=>{const l=setTimeout(f,250),m=n.subscribe(()=>{clearTimeout(l),m(),f()})})},ve=async n=>{const d=n instanceof Error?n.message:String(n);if(!d.includes("fiber crashed"))return;if(/Could not load |Failed to fetch|Unexpected token '<'|not valid JSON/.test(d)){T.error(`World "${o}" failed to load a project asset (${d}). The edit is kept; the world remounts once the asset can be served.`,"authoring");return}const f=t.shell.projectHistory;if(!f)return;const l=f.getSnapshot(),m=l.canUndo?l.transactions[l.cursor-1]:void 0;if(!m||Date.now()-m.timestamp>15e3){console.info(`[r3f-design] world "${o}" crash auto-undo skipped (${m?"last edit too old":l.canUndo?"no entry":`cannot undo: busy=${l.busy} blocked=${l.blocked}`})`);return}if(!await f.undo().catch(()=>!1)){console.info(`[r3f-design] world "${o}" crash auto-undo refused by history`);return}B=!1,T.error(`Undid “${m.label}”: that edit crashed world "${o}" (${n instanceof Error?n.message:String(n)}). The previous source is restored.`,"authoring"),L()};let H=0;const Q=new lt;let Z;const L=()=>{if(u||h){console.info(`[r3f-design] world "${o}" remount skipped: ${u?"session torn down":"suspended for play"}`);return}_||(_=!0,setTimeout(()=>{_=!1,be()},80))},Re=xe(n=>{qe(n).then(()=>{H+=1,L()})});let se=ue()?.revision??0;const Te=Fe(n=>{H+=1;const f=ue()?.revisions.filter(m=>m.revision>se)??[];f.length!==n-se&&Q.missing(),se=n;const l=f.flatMap(m=>m.resources);Q.revision(l),!(l.length&&!Q.needsRemount())&&(clearTimeout(Z),Z=setTimeout(()=>{l.length&&!Q.needsRemount()||(H+=1,L())},2e3))});let ie=!1,oe=!1;return z=t.shell.subscribe(()=>{if(!u){if(t.shell.playState==="stopped"?w():M(),!h&&!oe&&t.shell.playState!=="stopped"){oe=!0,Ie(()=>{oe=!1,!(u||h||t.shell.playState==="stopped")&&te()});return}h&&!ie&&t.shell.playState==="stopped"&&(ie=!0,ye())}}),()=>{u=!0,console.info(`[r3f-design] world "${o}" design session torn down`),M(),Re(),Te(),clearTimeout(Z),z?.(),!h&&t.shell.playState==="stopped"&&t.shell.selectedEntityIds.size>0&&ge.remember(t,t.shell.selectedEntityIds),U(),W()}}export{ft as loadR3FDesignEntryModules,$s as mountR3FDesignSession,mt as registerR3FDesignRoot,pt as reportDesignMountFailure,ut as unresolvedDesignEntryError};
@@ -1 +0,0 @@
1
- import{cy as L}from"./index-BRJMIUK0.js";const Y=.1,w=4,x=.02,X=32,b=.002,P=4;function g(t,o,i){return o===1?t*16:o===2?t*i:t}function D(t,o){let i=g(o.deltaX,o.deltaMode,o.bounds.width),s=g(o.deltaY,o.deltaMode,o.bounds.height);if(o.ctrlKey||o.metaKey){const n=Math.min(w,Math.max(Y,t.zoom*Math.exp(-s*b))),a=o.clientX-o.bounds.left,d=o.clientY-o.bounds.top,c=(a-t.x)/t.zoom,u=(d-t.y)/t.zoom;return{x:a-c*n,y:d-u*n,zoom:n}}return o.shiftKey&&i===0&&(i=s,s=0),{x:t.x-i,y:t.y-s,zoom:t.zoom}}function I(t,o){const i=g(o.deltaY,o.deltaMode,o.bounds.height),s=Math.min(X,Math.max(x,t.zoom*Math.exp(-i*b))),n=o.clientX-o.bounds.left,a=o.clientY-o.bounds.top,d=(n-t.x)/t.zoom,c=(a-t.y)/t.zoom;return{x:n-d*s,y:a-c*s,zoom:s}}function p(t){return t instanceof Element&&t.closest('[data-vgai-canvas-navigation-ignore="true"]')!==null}function C(t,o,i,s={}){let n=null,a=!1,d="";const c=()=>t.querySelector('[data-testid="world-selection-overlay-interaction"]'),u=e=>{t.dataset.canvasPanning=e?"true":"false",t.style.cursor=e?"grabbing":"";const r=c();r&&(e?(d=r.style.cursor,r.style.cursor="grabbing"):r.style.cursor=d)},m=e=>{if(!n||e.pointerId!==n.pointerId)return;const r=n.button===1?4:2;if((e.buttons&r)===0){l(e);return}const f=e.clientX-n.startClientX,v=e.clientY-n.startClientY;if(!n.moved){if(Math.hypot(f,v)<=P)return;n.moved=!0,u(!0)}o.setPan(n.startPan.x+f,n.startPan.y+v)},l=e=>{if(!n||e.pointerId!==n.pointerId)return;const r=n.pointerId;n.button===2&&n.moved&&(a=!0),n=null,u(!1),t.hasPointerCapture?.(r)&&t.releasePointerCapture(r),window.removeEventListener("pointermove",m),window.removeEventListener("pointerup",l),window.removeEventListener("pointercancel",l)},h=e=>{const r=e.button===1,f=s.rightDragPans===!0&&e.button===2;!r&&!f||p(e.target)||(f&&(a=!1),e.preventDefault(),r&&e.stopPropagation(),n={pointerId:e.pointerId,button:e.button,startClientX:e.clientX,startClientY:e.clientY,startPan:o.get(),moved:r},t.setPointerCapture?.(e.pointerId),u(r),window.addEventListener("pointermove",m),window.addEventListener("pointerup",l),window.addEventListener("pointercancel",l))},E=e=>{e.button===1&&!p(e.target)&&e.preventDefault()},M=e=>{s.rightDragPans!==!0||!(n?.button===2&&n.moved)&&!a||(a=!1,e.preventDefault(),e.stopPropagation())},y=e=>{if(p(e.target))return;e.preventDefault(),e.stopPropagation();const r=i(o.get(),{clientX:e.clientX,clientY:e.clientY,deltaX:e.deltaX,deltaY:e.deltaY,deltaMode:e.deltaMode,ctrlKey:e.ctrlKey,metaKey:e.metaKey,shiftKey:e.shiftKey,bounds:t.getBoundingClientRect()});o.setView(r.x,r.y,r.zoom)};return t.addEventListener("pointerdown",h,!0),t.addEventListener("lostpointercapture",l,!0),t.addEventListener("mousedown",E,!0),t.addEventListener("contextmenu",M,!0),t.addEventListener("wheel",y,{capture:!0,passive:!1}),()=>{n=null,u(!1),t.removeEventListener("pointerdown",h,!0),t.removeEventListener("lostpointercapture",l,!0),t.removeEventListener("mousedown",E,!0),t.removeEventListener("contextmenu",M,!0),t.removeEventListener("wheel",y,!0),window.removeEventListener("pointermove",m),window.removeEventListener("pointerup",l),window.removeEventListener("pointercancel",l)}}function z(t,o=L){return C(t,o,D)}function N(t,o){return C(t,o,I,{rightDragPans:!0})}export{X as S,x as a,N as b,z as i};
@@ -1 +0,0 @@
1
- import{a as n}from"./jsx-runtime-DPjLkJKQ.js";import{eR as yt,eS as nt,eT as xt,eU as bt,eV as jt,eW as St,dF as vt,eX as Ct,eY as Rt,eZ as kt,e_ as wt,ay as Et,e$ as m,ew as u,ey as j,Z as k,f0 as O,f1 as $t,f2 as H,du as K,J as B,eC as Tt,aK as Y,f3 as st,f4 as It,f5 as Nt,aP as Mt,ap as it,f6 as Ot,f7 as At}from"./index-BRJMIUK0.js";import{r as v}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{p as rt,G as at,c as M,B as Bt,A as Ft,S as A,a as _t,b as Dt,F as Lt,d as J,e as zt,f as Pt,T as Wt,g as X,h as Gt,C as Ht,i as Ut,j as Kt}from"./ShadowEditor-CVtMlALn.js";import{s as ot,a as U,b as Vt}from"./board-guides-BEKPgD9M.js";import{b as Yt}from"./eyedropper-session-bjPXnfeX.js";import{k as Jt,l as Xt}from"./inspect-Dr4qvDpJ.js";import{D as Zt}from"./dom-authoring-adapter-BrLU8IJ_.js";import{R as D,c as qt}from"./react-world-authoring-adapter-DOjv2pYm.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"./inference-diagnostics-xecGdohW.js";import"./json-history-resource-DwS10tqD.js";import"./relative-import-specifier-BFKIWEWs.js";import"./story-arg-descriptors-Ek86ExX7.js";import"./writer-tw6EcuVO.js";function lt(t,e){if(!t)return null;const s=(()=>{if(!(e instanceof Et))return e;const i=e.ownerOf(t.id);return i===null?null:e.childAdapters().find(a=>a.worldId===i)?.adapter??null})();return s instanceof D||s instanceof Zt?s:null}const Qt=(t,e)=>lt(t,e)!==null,te="element",ee=1500,ne="story",se=1600;function T(t){const e=t.indexOf(".");return e===-1?t:t.slice(e+1)}function ie(t){const e=T(t.path);return t.type==="color"?"color":/^fontFamily$/i.test(e)?"font":e==="background"||e==="backgroundImage"?"gradient":e==="boxShadow"?"shadow":e==="textShadow"?"text-shadow":e==="filter"?"filter":e==="backdropFilter"?"backdrop-filter":e==="borderRadius"?"radius":t.type==="string"&&e==="transform"?"transform":t.type==="boolean"?"checkbox":t.type==="enum"?"select":t.type==="json"?"json":t.type==="number"?"scrub":"text"}function re(t,e,s,i){if(!(t.path==="style.borderWidth"||t.path==="style.borderStyle"||t.path==="style.borderColor"))return!1;const o=e.get("style.borderWidth"),c=e.get("style.borderStyle"),r=e.get("style.borderColor");return!o||!c||!r?!1:(i.push({kind:"border",width:o,style:c,color:r}),s.add(o.path),s.add(c.path),s.add(r.path),!0)}function ae(t,e,s,i){if(!(t.path==="style.justifyContent"||t.path==="style.alignItems"))return!1;const o=e.get("style.justifyContent"),c=e.get("style.alignItems");return!o||!c?!1:(i.push({kind:"align",justify:o,align:c}),s.add(o.path),s.add(c.path),!0)}function ct(t){const e=new Map(t.map(a=>[a.path,a])),s=new Set,i=[];for(const a of t)s.has(a.path)||re(a,e,s,i)||ae(a,e,s,i)||i.push({kind:"single",prop:a});return i}function L(t){return typeof t=="number"&&Number.isFinite(t)?t:0}function F(t){return`react-prop-${t.replace(/\./g,"-")}`}const dt={type:"linear",angle:180,stops:[{color:"#ffffff",position:0},{color:"#000000",position:1}]};function w({label:t,testId:e,children:s}){return n.jsxs("div",{"data-testid":e?`${e}-row`:void 0,style:{...Ot,padding:`${u[2]} ${u[4]}`},children:[n.jsx("span",{style:{width:At,flexShrink:0,fontSize:j.base,color:m.textMuted},children:t}),n.jsx("div",{style:{flex:1,minWidth:0},children:s})]})}function oe({prop:t,raw:e,disabled:s,testId:i,commit:a}){return n.jsx(w,{label:t.label,testId:i,children:n.jsx(Ht,{testId:i,value:String(e??"#ffffff"),disabled:s,onChange:o=>a(t.path,o),onChangeEnd:o=>a(t.path,o),eyedropperFallback:()=>Xt([String(e??"")]),onEyedropperPick:o=>Yt(o)})})}function le({prop:t,raw:e,disabled:s,fonts:i,testId:a,commit:o}){return n.jsx(w,{label:t.label,testId:a,children:n.jsx(Gt,{testId:a,value:String(e??""),fonts:i,disabled:s,onChange:c=>o(t.path,c)})})}function ce({prop:t,raw:e,disabled:s,testId:i,commit:a}){const o=rt(String(e??"none"));return o?n.jsx(w,{label:t.label,testId:i,children:n.jsx(at,{testId:i,value:o,disabled:s,onChange:c=>a(t.path,M(c)),onChangeEnd:c=>a(t.path,M(c))})}):n.jsx(w,{label:t.label,testId:i,children:n.jsx(k,{type:"button",variant:"secondary",className:"vgai-field-trigger","data-testid":i,disabled:s,onClick:()=>a(t.path,M(dt)),children:"No gradient — click to add"})})}function Z({prop:t,raw:e,disabled:s,testId:i,commit:a,withSpreadInset:o}){const c=zt(String(e??"none"),o),r=o?Pt:Wt;return n.jsx(w,{label:t.label,testId:i,children:n.jsx(r,{value:c,disabled:s,onChange:l=>a(t.path,X(l,o)),onChangeEnd:l=>a(t.path,X(l,o))})})}function q({prop:t,raw:e,disabled:s,testId:i,commit:a,label:o}){const c=Dt(String(e??"none"));return n.jsx(w,{label:t.label,testId:i,children:n.jsx(Lt,{testId:i,label:o,value:c,disabled:s,onChange:r=>a(t.path,J(r)),onChangeEnd:r=>a(t.path,J(r))})})}const G=[{key:"topLeft",suffix:"TopLeft"},{key:"topRight",suffix:"TopRight"},{key:"bottomLeft",suffix:"BottomLeft"},{key:"bottomRight",suffix:"BottomRight"}];function de({adapter:t,id:e,prop:s,raw:i,disabled:a,testId:o,commit:c,removeStyle:r}){const l=L(i),d=G.reduce((g,{key:f,suffix:S})=>{const x=t.inspector?.get(e,`style.border${S}Radius`);return g[f]=it(x)??l,g},{}),y=g=>{if(Kt(g)){c(s.path,g.topLeft);for(const{suffix:f}of G)r(`style.border${f}Radius`);return}for(const{key:f,suffix:S}of G)c(`style.border${S}Radius`,g[f])};return n.jsx(w,{label:s.label,testId:o,children:n.jsx(_t,{value:d,disabled:a,onChange:y,onChangeEnd:y})})}function ue({prop:t,raw:e,disabled:s,testId:i,commit:a}){const o=st.has(T(t.path))?"":"px";return n.jsx(A,{testId:i,label:t.label,value:L(e),unit:o,disabled:s,onChange:c=>a(t.path,c),onChangeEnd:c=>a(t.path,c),style:{padding:`${u[2]} ${u[4]}`}})}function pe({prop:t,raw:e,disabled:s,testId:i,commit:a}){return n.jsx(w,{label:t.label,testId:i,children:n.jsx(K,{"data-testid":i,value:String(e??""),disabled:s,"data-dynamic":s||void 0,onChange:o=>a(t.path,o.target.value),style:{width:"100%"},children:(t.options??[]).map(o=>n.jsx("option",{value:String(o),children:String(o)},String(o)))})})}function ge({prop:t,raw:e,disabled:s,testId:i,commit:a}){return n.jsxs("label",{style:{display:"flex",gap:u[3],alignItems:"center",padding:`${u[3]} ${u[4]}`,fontSize:j.md},children:[n.jsx(Mt,{className:"vgai-checkbox","data-testid":i,checked:e!==!1,disabled:s,onChange:o=>a(t.path,o.target.checked)}),t.label]})}function he({prop:t,raw:e,disabled:s,testId:i,commit:a}){return n.jsx(w,{label:t.label,testId:i,children:n.jsx(Nt,{"data-testid":i,defaultValue:JSON.stringify(e??null),disabled:s,"data-dynamic":s||void 0,"data-variant":"code",style:{width:"100%",minHeight:40},onBlur:o=>{try{a(t.path,JSON.parse(o.target.value))}catch{}}})})}function ut({prop:t,raw:e,disabled:s,testId:i,commit:a}){return n.jsx(w,{label:t.label,testId:i,children:n.jsx(It,{type:"text","data-testid":i,readOnly:s,"data-dynamic":s||void 0,value:String(e??""),onCommit:o=>a(t.path,o),style:{width:"100%"}})})}const fe=/^rotate\(\s*(-?[\d.]+)deg\s*\)\s*scale\(\s*(-?[\d.]+)\s*\)$/i,me=/^scale\(\s*(-?[\d.]+)\s*\)\s*rotate\(\s*(-?[\d.]+)deg\s*\)$/i,ye=/^rotate\(\s*(-?[\d.]+)deg\s*\)$/i,xe=/^scale\(\s*(-?[\d.]+)\s*\)$/i,be=/^matrix\(\s*(-?[\d.eE+-]+)\s*,\s*(-?[\d.eE+-]+)\s*,\s*(-?[\d.eE+-]+)\s*,\s*(-?[\d.eE+-]+)\s*,\s*(-?[\d.eE+-]+)\s*,\s*(-?[\d.eE+-]+)\s*\)$/,_=1e-4;function je(t){const e=t.trim();if(e===""||e==="none")return{rotateDeg:0,scale:1};const s=fe.exec(e);if(s)return{rotateDeg:Number(s[1]),scale:Number(s[2])};const i=me.exec(e);if(i)return{rotateDeg:Number(i[2]),scale:Number(i[1])};const a=ye.exec(e);if(a)return{rotateDeg:Number(a[1]),scale:1};const o=xe.exec(e);if(o)return{rotateDeg:0,scale:Number(o[1])};const c=be.exec(e);if(!c)return null;const[r,l,d,y,g,f]=c.slice(1,7).map(Number);if(Math.abs(g)>_||Math.abs(f)>_||Math.abs(d+l)>_||Math.abs(y-r)>_)return null;const S=Math.hypot(r,l);if(S<_)return null;const x=Math.atan2(l,r)*180/Math.PI;return{rotateDeg:Math.round(x*100)/100,scale:Math.round(S*1e3)/1e3}}function Se(t){return`rotate(${t.rotateDeg}deg) scale(${t.scale})`}function ve(t){const{prop:e,raw:s,disabled:i,testId:a,commit:o}=t,c=je(String(s??"none"));if(!c)return n.jsx(ut,{...t});const r=l=>o(e.path,Se(l));return n.jsx(w,{label:e.label,testId:a,children:n.jsxs("div",{style:{display:"flex",gap:u[3]},children:[n.jsx(A,{testId:`${a}-rotate`,label:"Rotate",value:c.rotateDeg,unit:"deg",disabled:i,onChange:l=>r({...c,rotateDeg:l}),onChangeEnd:l=>r({...c,rotateDeg:l}),style:{flex:1}}),n.jsx(A,{testId:`${a}-scale`,label:"Scale",value:c.scale,unit:"x",step:.1,disabled:i,onChange:l=>r({...c,scale:l}),onChangeEnd:l=>r({...c,scale:l}),style:{flex:1}})]})})}function $({adapter:t,id:e,prop:s,fonts:i}){const a=B(),o=(l,d)=>{t.inspector?.set(e,l,d),a.notifyIngestEdit()},c=l=>{t.inspector?.remove?.(e,l),a.notifyIngestEdit()},r={prop:s,raw:t.inspector?.get(e,s.path),disabled:s.readonly,testId:F(s.path),commit:o,fonts:i};switch(ie(s)){case"color":return n.jsx(oe,{...r});case"font":return n.jsx(le,{...r});case"gradient":return n.jsx(ce,{...r});case"shadow":return n.jsx(Z,{...r,withSpreadInset:!0});case"text-shadow":return n.jsx(Z,{...r,withSpreadInset:!1});case"filter":return n.jsx(q,{...r,label:"Filter"});case"backdrop-filter":return n.jsx(q,{...r,label:"Backdrop Filter"});case"radius":return n.jsx(de,{...r,adapter:t,id:e,removeStyle:c});case"transform":return n.jsx(ve,{...r});case"scrub":return n.jsx(ue,{...r});case"select":return n.jsx(pe,{...r});case"checkbox":return n.jsx(ge,{...r});case"json":return n.jsx(he,{...r});default:return n.jsx(ut,{...r})}}function pt({adapter:t,id:e,row:s}){const i=B(),a=(r,l)=>{t.inspector?.set(e,r,l),i.notifyIngestEdit()},o=r=>{t.inspector?.remove?.(e,r),i.notifyIngestEdit()};if(s.kind==="border"){const r={width:L(t.inspector?.get(e,s.width.path)),style:String(t.inspector?.get(e,s.style.path)??"solid"),color:String(t.inspector?.get(e,s.color.path)??"#000000")},l=f=>{const S=it(t.inspector?.get(e,`style.border${f}Width`)),x=t.inspector?.get(e,`style.border${f}Style`),C=t.inspector?.get(e,`style.border${f}Color`),p=typeof C=="string"?qt(C):void 0;return{width:S??r.width,style:typeof x=="string"&&x?x:r.style,color:p??r.color}},d={top:l("Top"),right:l("Right"),bottom:l("Bottom"),left:l("Left")},y=["Top","Right","Bottom","Left"],g=f=>{if(Ut(f)){a(s.width.path,f.top.width),a(s.style.path,f.top.style),a(s.color.path,f.top.color);for(const x of y)o(`style.border${x}Width`),o(`style.border${x}Style`),o(`style.border${x}Color`);return}const S=y.map(x=>({suffix:x,side:f[x.toLowerCase()]}));for(const{suffix:x,side:C}of S)a(`style.border${x}Width`,C.width),a(`style.border${x}Style`,C.style),a(`style.border${x}Color`,C.color)};return n.jsx(w,{label:"Border",testId:"react-prop-border",children:n.jsx(Bt,{value:d,onChange:g,onChangeEnd:g})})}const c={justify:t.inspector?.get(e,s.justify.path)??"flex-start",align:t.inspector?.get(e,s.align.path)??"flex-start"};return n.jsx(w,{label:"Align",testId:"react-prop-align",children:n.jsx(Ft,{value:c,onChange:r=>{a(s.justify.path,r.justify),a(s.align.path,r.align)}})})}function z(t){return t.kind==="single"?t.prop.path:t.kind==="border"?`border:${t.width.path}`:`align:${t.justify.path}`}function E(t,e,s,i,a){if(!s)return null;const o=st.has(T(s.path))?"":"px",c=F(s.path);return n.jsx(A,{testId:c,label:i,value:L(t.inspector?.get(e,s.path)),unit:o,disabled:s.readonly,onChange:r=>a(s.path,r),onChangeEnd:r=>a(s.path,r),style:{flex:1,minWidth:0}},s.path)}function Ce({adapter:t,id:e,props:s,fonts:i,showConstraints:a,onToggleConstraints:o}){const c=B(),r=new Map(s.map(p=>[T(p.path),p])),l=(p,P)=>{t.inspector?.set(e,p,P),c.notifyIngestEdit()},d=String(t.inspector?.get(e,r.get("display")?.path??"style.display")??""),y=d==="flex"||d==="inline-flex",g=d==="grid"||d==="inline-grid",f=r.get("display"),S=r.get("gap"),x=ct(s.filter(p=>["justifyContent","alignItems"].includes(T(p.path)))),C=["flexDirection","flexWrap","overflow"].map(p=>r.get(p)).filter(p=>!!p);return n.jsxs("div",{style:{padding:"2px 8px 7px"},children:[n.jsxs("div",{style:{display:"flex",gap:u[3]},children:[E(t,e,r.get("width"),"W",l),E(t,e,r.get("height"),"H",l)]}),a&&n.jsxs("div",{"data-testid":"react-layout-constraints",style:{marginTop:5},children:[n.jsxs("div",{style:{display:"flex",gap:u[3]},children:[E(t,e,r.get("minWidth"),"Min W",l),E(t,e,r.get("minHeight"),"Min H",l)]}),n.jsxs("div",{style:{display:"flex",gap:u[3],marginTop:u[2]},children:[E(t,e,r.get("maxWidth"),"Max W",l),E(t,e,r.get("maxHeight"),"Max H",l)]})]}),n.jsx(k,{type:"button",variant:"ghost",size:"compact","data-testid":"react-layout-toggle-constraints",onClick:o,style:{display:"flex",margin:"2px auto 5px"},children:a?"− constraints":"··· constraints"}),n.jsxs("div",{style:{display:"grid",gridTemplateColumns:"minmax(0, 1.35fr) minmax(0, 1fr)",gap:u[3]},children:[f&&n.jsx(K,{"data-testid":F(f.path),value:d,disabled:f.readonly,"data-dynamic":f.readonly||void 0,onChange:p=>l(f.path,p.target.value),style:{width:"100%"},children:(f.options??[]).map(p=>n.jsx("option",{value:String(p),children:String(p)},String(p)))}),E(t,e,S,"Gap",l)]}),y&&n.jsxs("div",{"data-testid":"react-layout-flex-controls",style:{marginTop:5},children:[C.filter(p=>T(p.path)!=="overflow").map(p=>n.jsx($,{adapter:t,id:e,prop:p,fonts:i},p.path)),x.map(p=>p.kind==="single"?n.jsx($,{adapter:t,id:e,prop:p.prop,fonts:i},z(p)):n.jsx(pt,{adapter:t,id:e,row:p},z(p)))]}),g&&n.jsxs("div",{"data-testid":"react-layout-grid-controls",style:{marginTop:5},children:[n.jsxs("div",{style:{display:"flex",gap:u[3]},children:[Q(t,e,r.get("gridTemplateColumns"),"Cols",l),Q(t,e,r.get("gridTemplateRows"),"Rows",l)]}),[r.get("gridTemplateColumns"),r.get("gridTemplateRows")].filter(p=>!!p).map(p=>n.jsx($,{adapter:t,id:e,prop:p,fonts:i},p.path)),n.jsxs("div",{style:{display:"flex",gap:u[3],marginTop:u[1]},children:[E(t,e,r.get("rowGap"),"Row Gap",l),E(t,e,r.get("columnGap"),"Col Gap",l)]}),r.get("gridAutoFlow")&&n.jsx($,{adapter:t,id:e,prop:r.get("gridAutoFlow"),fonts:i})]}),C.filter(p=>T(p.path)==="overflow").map(p=>n.jsx($,{adapter:t,id:e,prop:p,fonts:i},p.path)),n.jsx(Re,{adapter:t,id:e,byName:r,fonts:i})]})}function gt(t){const e=t.trim();if(!e||e==="none")return 0;const s=[];let i=0,a=0;for(let c=0;c<e.length;c++){const r=e[c];r==="("||r==="["?i++:r===")"||r==="]"?i--:r===" "&&i===0&&(c>a&&s.push(e.slice(a,c)),a=c+1)}a<e.length&&s.push(e.slice(a));let o=0;for(const c of s){const r=/^repeat\(\s*(\d+)\s*,([\s\S]*)\)$/.exec(c);o+=r?.[1]&&r[2]!==void 0?Number(r[1])*gt(r[2]):1}return o}function Q(t,e,s,i,a){if(!s)return null;let o=null;const c=r=>{const d=`repeat(${Math.max(1,Math.round(r))}, 1fr)`;d!==o&&(o=d,a(s.path,d))};return n.jsx(A,{testId:`${F(s.path)}-count`,label:i,value:gt(String(t.inspector?.get(e,s.path)??"")),min:1,disabled:s.readonly,onChange:c,onChangeEnd:c,style:{flex:1,minWidth:0}},`${s.path}-count`)}function Re({adapter:t,id:e,byName:s,fonts:i}){const[a,o]=v.useState(!1),c=["gridColumn","gridRow","justifySelf"].map(r=>s.get(r)).filter(r=>!!r);return c.length===0?null:n.jsxs(n.Fragment,{children:[n.jsx(k,{type:"button",variant:"ghost",size:"compact","data-testid":"react-layout-toggle-grid-item",onClick:()=>o(r=>!r),style:{display:"flex",margin:"2px auto 0"},children:a?"− grid item":"··· grid item"}),a&&n.jsx("div",{"data-testid":"react-layout-grid-item",children:c.map(r=>n.jsx($,{adapter:t,id:e,prop:r,fonts:i},r.path))})]})}function ke(t){const e=t.trim();if(!e||e==="none")return[];const s=[];let i=0,a=0;for(let o=0;o<e.length;o++){const c=e[o];c==="("?i++:c===")"?i--:c===","&&i===0&&(s.push(e.slice(a,o).trim()),a=o+1)}return s.push(e.slice(a).trim()),s.filter(Boolean)}function tt(t){return/^url\((['"]?)([\s\S]*)\1\)$/.exec(t.trim())?.[2]??null}function we({adapter:t,id:e,props:s,fonts:i}){const a=B(),o=new Map(s.map(h=>[T(h.path),h])),c=(h,b)=>{t.inspector?.set(e,h,b),a.notifyIngestEdit()},r=o.get("backgroundImage"),l=o.get("backgroundColor"),[d,y]=v.useState(null),[g,f]=v.useState(null),S=String(r?t.inspector?.get(e,r.path)??"":""),x=ke(S),C=h=>{if(r){if(h.length>0){c(r.path,h.join(", "));return}t.inspector?.remove?.(e,r.path),a.notifyIngestEdit()}},p=(h,b)=>C(x.map((R,I)=>I===h?b:R)),P=h=>{y(null),C(x.filter((b,R)=>R!==h))},V=(h,b)=>{const R=[...x],I=R[h+b];I===void 0||R[h]===void 0||(R[h+b]=R[h],R[h]=I,y(null),C(R))},W={background:"none",border:"none",color:m.textMuted,cursor:"pointer",fontSize:j.base,padding:`${u[2]} ${u[3]}`,lineHeight:O.tight};return n.jsxs("div",{"data-testid":"react-fill-list",style:{padding:"2px 8px 7px"},children:[x.map((h,b)=>{const R=rt(h),I=tt(h),mt=R?`${R.type} gradient`:I!==null?I.split("/").pop()??"image":h.slice(0,22);return n.jsxs("div",{style:{marginBottom:3},children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:5},children:[n.jsxs("button",{type:"button","data-testid":`react-fill-layer-${b}`,title:h,onClick:()=>y(d===b?null:b),style:{display:"flex",alignItems:"center",gap:u[3],flex:1,minWidth:0,background:"none",border:"none",cursor:"pointer",padding:`${u[1]} 0`,color:m.text,fontSize:j.base,textAlign:"left"},children:[n.jsx("span",{style:{width:16,height:16,flexShrink:0,borderRadius:Tt.sm,border:`1px solid ${m.border}`,background:h,backgroundSize:"cover"}}),n.jsx("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:mt})]}),b>0&&n.jsx("button",{type:"button","data-testid":`react-fill-up-${b}`,title:"Raise this fill",onClick:()=>V(b,-1),style:W,children:"↑"}),b<x.length-1&&n.jsx("button",{type:"button","data-testid":`react-fill-down-${b}`,title:"Lower this fill",onClick:()=>V(b,1),style:W,children:"↓"}),n.jsx("button",{type:"button","data-testid":`react-fill-remove-${b}`,title:"Remove this fill (CSS has no hidden-layer state — removing is Figma's eye)",onClick:()=>P(b),style:W,children:"✕"})]}),d===b&&R&&n.jsx(at,{testId:`react-fill-gradient-${b}`,value:R,onChange:N=>p(b,M(N)),onChangeEnd:N=>p(b,M(N))}),d===b&&I!==null&&n.jsx(Y,{"data-testid":`react-fill-url-${b}`,defaultValue:I,placeholder:"image url",onBlur:N=>p(b,`url("${N.target.value.trim()}")`),onKeyDown:N=>{N.key==="Enter"&&p(b,`url("${N.currentTarget.value.trim()}")`)},style:{width:"100%",marginTop:u[1]}})]},`${b}-${h.slice(0,24)}`)}),g!==null&&n.jsx(Y,{"data-testid":"react-fill-image-draft",value:g,placeholder:"image url — Enter to add",autoFocus:!0,onChange:h=>f(h.target.value),onKeyDown:h=>{h.key==="Enter"&&g.trim()&&(C([`url("${g.trim()}")`,...x]),f(null)),h.key==="Escape"&&f(null)},style:{width:"100%",marginBottom:3}}),n.jsxs("div",{style:{display:"flex",gap:u[2]},children:[n.jsx(k,{type:"button",variant:"ghost",size:"compact","data-testid":"react-fill-add-gradient",onClick:()=>{C([M(dt),...x]),y(0)},children:"+ gradient"}),n.jsx(k,{type:"button",variant:"ghost",size:"compact","data-testid":"react-fill-add-image",onClick:()=>f(""),children:"+ image"})]}),x.some(h=>tt(h)!==null)&&["backgroundSize","backgroundPosition","backgroundRepeat"].map(h=>o.get(h)).filter(h=>!!h).map(h=>n.jsx($,{adapter:t,id:e,prop:h,fonts:i},h.path)),l&&n.jsx($,{adapter:t,id:e,prop:l,fonts:i})]})}function Ee({adapter:t,id:e,props:s,fonts:i}){const a=B(),o=new Map(s.map(g=>[T(g.path),g])),c=o.get("position"),r=String(c?t.inspector?.get(e,c.path)??"static":"static"),l=(g,f)=>{t.inspector?.set(e,g,f),a.notifyIngestEdit()},d=["top","right","bottom","left"],y=["zIndex","flexGrow","flexShrink","flexBasis","alignSelf"].map(g=>o.get(g)).filter(g=>!!g);return n.jsxs("div",{style:{padding:"2px 8px 7px"},children:[c&&n.jsx("div",{"data-testid":F(c.path),style:{display:"grid",gridTemplateColumns:"repeat(5, 1fr)",gap:u[1]},children:(c.options??[]).map(g=>{const f=String(g),S=f===r;return n.jsx(k,{type:"button",variant:S?"primary":"secondary",size:"compact","aria-pressed":S,title:f,disabled:c.readonly,onClick:()=>l(c.path,f),children:f.slice(0,3)},f)})}),r!=="static"&&n.jsx("div",{"data-testid":"react-position-offsets",style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:u[2],marginTop:u[3]},children:d.map(g=>E(t,e,o.get(g),g[0].toUpperCase(),l))}),y.length>0&&n.jsxs("div",{style:{borderTop:`1px solid ${m.border}`,marginTop:7,paddingTop:3},children:[n.jsx("div",{style:{color:m.textMuted,fontSize:j.xs,padding:"2px 0 1px"},children:"STACKING & FLEX ITEM"}),y.map(g=>n.jsx($,{adapter:t,id:e,prop:g,fonts:i},g.path))]})]})}function $e({adapter:t,id:e,props:s}){const i=B(),a=new Map(s.map(d=>[T(d.path),d])),o=(d,y)=>{t.inspector?.set(e,d,y),i.notifyIngestEdit()},c=d=>{const y=a.get(d);return y?n.jsx(A,{testId:F(y.path),label:"",value:L(t.inspector?.get(e,y.path)),unit:"px",disabled:y.readonly,onChange:g=>o(y.path,g),onChangeEnd:g=>o(y.path,g),style:{width:46,minWidth:0,flex:"none"}},y.path):n.jsx("span",{},d)},r=d=>n.jsx("span",{style:{position:"absolute",top:2,left:6,fontSize:8,letterSpacing:".08em",color:m.textMuted,pointerEvents:"none"},children:d}),l={display:"flex",alignItems:"center",justifyContent:"center"};return n.jsx("div",{style:{padding:`${u[1]} ${u[4]} ${u[4]}`},"data-testid":"react-spacing-box",children:n.jsxs("div",{style:{position:"relative",border:`1px solid ${m.border}`,borderRadius:4,padding:"11px 4px 3px"},children:[r("MARGIN"),n.jsx("div",{style:l,children:c("marginTop")}),n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:u[1]},children:[c("marginLeft"),n.jsxs("div",{style:{position:"relative",flex:1,minWidth:0,border:`1px dashed ${m.border}`,borderRadius:4,padding:"11px 4px 3px"},children:[r("PADDING"),n.jsx("div",{style:l,children:c("paddingTop")}),n.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:u[1]},children:[c("paddingLeft"),c("paddingRight")]}),n.jsx("div",{style:l,children:c("paddingBottom")})]}),c("marginRight")]}),n.jsx("div",{style:l,children:c("marginBottom")})]})})}function Te({name:t,groupId:e,props:s,adapter:i,id:a,fonts:o}){const[c,r]=v.useState(!1),l=ct(s);return n.jsxs("div",{"data-testid":`react-inspector-group-${e}`,children:[t==="Layout"&&n.jsx(Ce,{adapter:i,id:a,props:s,fonts:o,showConstraints:c,onToggleConstraints:()=>r(d=>!d)}),t==="Position"&&n.jsx(Ee,{adapter:i,id:a,props:s,fonts:o}),t==="Spacing"&&n.jsx($e,{adapter:i,id:a,props:s}),t==="Fill"&&n.jsx(we,{adapter:i,id:a,props:s,fonts:o}),t!=="Layout"&&t!=="Position"&&t!=="Spacing"&&t!=="Fill"&&l.map(d=>d.kind==="single"?n.jsx($,{adapter:i,id:a,prop:d.prop,fonts:o},z(d)):n.jsx(pt,{adapter:i,id:a,row:d},z(d)))]})}function Ie({adapter:t,node:e}){const s=[];let i=e,a=0;for(;i&&a++<100;)s.unshift(i),i=i.parentId?t.hierarchy.node(i.parentId):null;return n.jsx("nav",{"aria-label":"Selection ancestry","data-testid":"react-inspector-breadcrumbs",style:{display:"flex",alignItems:"center",gap:3,padding:`${u[3]} ${u[4]}`,overflowX:"auto",borderBottom:`1px solid ${m.border}`,whiteSpace:"nowrap"},children:s.map((o,c)=>n.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:3},children:[c>0&&n.jsx("span",{style:{color:m.textMuted},children:"/"}),n.jsx(k,{type:"button",variant:"ghost",size:"compact","aria-current":o.id===e.id?"page":void 0,title:o.secondaryLabel??o.label,onClick:()=>$t(t,[o.id]),children:o.label})]},o.id))})}function Ne({owner:t,node:e}){const s=t.portableArgs(e.id),[i,a]=v.useState("idle"),[o,c]=v.useState(""),[r,l]=v.useState(null),d=async y=>{const g=await t.writeStory(e.id,y);l(g.changed?null:g.error??"refused"),g.changed&&(a("idle"),c(""))};return n.jsxs("div",{"data-testid":"react-story-controls-header",style:{borderBottom:`1px solid ${m.border}`},children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:u[4],padding:"7px 8px"},children:[n.jsxs("div",{style:{minWidth:0},children:[n.jsx("div",{style:{color:m.text,fontSize:j.md,fontWeight:600},children:e.label}),n.jsx("div",{style:{color:m.textMuted,fontSize:j.sm},children:s?`${Object.keys(s).length} args · session controls`:"Portable CSF story"})]}),n.jsx(k,{type:"button",variant:"secondary",size:"compact","data-testid":"react-story-reset-args",onClick:()=>t.resetPortableArgs(e.id),children:"Reset"})]}),n.jsxs("div",{style:{display:"flex",gap:u[2],padding:`0 ${u[4]} ${u[3]}`,flexWrap:"wrap"},children:[n.jsx(k,{type:"button",variant:"ghost",size:"compact","data-testid":"react-story-save-as",title:"Write the CURRENT session args as a new story export in this file",onClick:()=>{l(null),c(""),a(i==="save-as"?"idle":"save-as")},children:"Save as…"}),n.jsx(k,{type:"button",variant:"ghost",size:"compact","data-testid":"react-story-rename",onClick:()=>{l(null),c(""),a(i==="rename"?"idle":"rename")},children:"Rename…"}),i==="confirm-delete"?n.jsx(k,{type:"button",variant:"secondary",size:"compact","data-testid":"react-story-delete-confirm",onClick:()=>void d({kind:"delete"}),children:"Delete story?"}):n.jsx(k,{type:"button",variant:"ghost",size:"compact","data-testid":"react-story-delete",onClick:()=>{l(null),a("confirm-delete")},children:"Delete"})]}),(i==="save-as"||i==="rename")&&n.jsxs("div",{style:{display:"flex",gap:u[2],padding:`0 ${u[4]} ${u[4]}`,alignItems:"center"},children:[n.jsx("input",{"data-testid":"react-story-name-input",autoFocus:!0,value:o,placeholder:i==="save-as"?"NewStoryName":`Rename ${e.label}`,onChange:y=>c(y.target.value),onKeyDown:y=>{y.key==="Enter"&&o.trim()&&d(i==="save-as"?{kind:"save-as",name:o.trim()}:{kind:"rename",newName:o.trim()}),y.key==="Escape"&&a("idle")},style:{flex:1,minWidth:0,background:m.neutralHover,border:`1px solid ${m.border}`,borderRadius:4,color:m.text,fontSize:j.base,padding:"3px 6px"}}),n.jsx(k,{type:"button",variant:"secondary",size:"compact","data-testid":"react-story-name-commit",onClick:()=>void d(i==="save-as"?{kind:"save-as",name:o.trim()}:{kind:"rename",newName:o.trim()}),children:i==="save-as"?"Save":"Rename"})]}),r&&n.jsx("div",{"data-testid":"react-story-write-notice",style:{padding:`0 ${u[4]} ${u[4]}`,color:ft(),fontSize:j.sm,lineHeight:O.normal},children:r})]})}function Me({owner:t,nodeId:e}){const s=t.elementClasses(e),[i,a]=v.useState(""),[o,c]=v.useState(null),r=async()=>{const l=i.trim().replace(/^\./,"");if(!l)return;const d=await t.writeNamedStyle(e,{kind:"set",className:l});c(d.changed?null:d.error??"refused"),d.changed&&a("")};return n.jsxs("div",{"data-testid":"react-element-classes",style:{padding:`${u[3]} ${u[4]}`,borderBottom:`1px solid ${m.border}`},children:[n.jsxs("div",{style:{display:"flex",flexWrap:"wrap",gap:u[2],alignItems:"center"},children:[n.jsx("span",{style:{fontSize:j.sm,color:m.textMuted,marginRight:u[1]},children:"Style class"}),s.map(l=>n.jsxs("span",{"data-testid":`react-class-chip-${l.name}`,title:l.styledIn?`.${l.name} — ${l.count} element${l.count===1?"":"s"} in this game share this style (${l.styledIn.split("/").pop()??l.styledIn})`:`.${l.name} — utility/generated class (no first-party rule to edit)`,style:{display:"inline-flex",alignItems:"center",gap:3,fontFamily:H,fontSize:j.sm,color:l.styledIn?m.text:m.textMuted,background:m.neutralHover,border:`1px solid ${m.border}`,borderRadius:4,padding:"1px 4px"},children:[".",l.name,l.count>1&&n.jsxs("span",{style:{color:m.textMuted,fontSize:j.xs},children:["×",l.count]}),n.jsx("button",{type:"button","data-testid":`react-class-remove-${l.name}`,title:`Remove .${l.name} from this element`,onClick:()=>void t.writeNamedStyle(e,{kind:"remove",className:l.name}).then(d=>c(d.changed?null:d.error??"refused")),style:{background:"none",border:"none",color:m.textMuted,cursor:"pointer",fontSize:j.base,padding:"3px 5px",margin:"-3px -4px -3px -1px",lineHeight:O.tight},children:"✕"})]},l.name)),n.jsx("input",{"data-testid":"react-class-input",value:i,placeholder:s.length===0?"create style…":"add class…",title:"Type a class name — an existing first-party class is applied; a new name creates a style from this element's inline declarations",onChange:l=>{a(l.target.value),o&&c(null)},onKeyDown:l=>{l.key==="Enter"&&r(),l.key==="Escape"&&a("")},style:{flex:1,minWidth:72,background:"transparent",border:`1px dashed ${m.border}`,borderRadius:4,color:m.text,fontSize:j.sm,fontFamily:H,padding:"2px 5px"}})]}),o&&n.jsx("div",{"data-testid":"react-class-notice",style:{paddingTop:u[2],color:ft(),fontSize:j.sm,lineHeight:O.normal},children:o}),n.jsx(Oe,{})]})}function Oe(){const t=v.useSyncExternalStore(Vt,U);return n.jsxs(n.Fragment,{children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:5,paddingTop:5},children:[n.jsx("span",{style:{fontSize:j.sm,color:m.textMuted},children:"Breakpoint"}),n.jsx(K,{"data-testid":"react-breakpoint-select",value:t??"",onChange:e=>ot(e.target.value||null),style:{fontSize:j.sm,flex:1,...t?{color:m.accent,borderColor:m.accent}:{}},children:ht.map(e=>n.jsx("option",{value:e.media??"",children:e.label},e.label))})]}),t&&n.jsxs("div",{"data-testid":"react-breakpoint-note",style:{paddingTop:3,color:m.textMuted,fontSize:j.xs,lineHeight:O.normal},children:["Style edits write @media ",t," — previewed live by frame width."]})]})}const ht=[{label:"Base",media:null},{label:"Tablet ≤991",media:"(max-width: 991px)"},{label:"Phone L ≤767",media:"(max-width: 767px)"},{label:"Phone ≤479",media:"(max-width: 479px)"}];function ft(){return"#e06c75"}function Ae({entry:t}){const[e,s]=v.useState(!1),i=`${t.file}:${t.line}`,a=`${t.file.split("/").pop()??t.file}:${t.line}`,o=async()=>{try{await navigator.clipboard.writeText(i),s(!0),setTimeout(()=>s(!1),1500)}catch{}};return n.jsx("button",{type:"button","data-testid":"react-source-location",title:`${i} — click to copy the path`,onClick:()=>void o(),style:{fontFamily:H,fontSize:"inherit",color:m.textMuted,cursor:"pointer",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",minWidth:0,background:"none",border:"none",padding:0,textAlign:"left"},children:e?"Copied":a})}function Be({owner:t,node:e,nodeId:s}){const i=t instanceof D,a=i?t.sourceLocation(s):void 0,o=e?.role==="story"?`Story · ${e.label}`:e?.role==="document"?`CSF · ${e.secondaryLabel??e.label}`:i?"Source":"Session overlay — not written to source",c=e?.role==="story"?`${e.label} is the active portable CSF design state.`:e?.role==="document"?`${e.secondaryLabel??e.label} owns this root's design states.`:i?`Edits change ${e?.label??"this component"}'s source — every rendered instance updates.`:"This is an ingested game: edits persist as a per-project overlay only, never written to source.";return n.jsxs("div",{"data-testid":i?"react-lane-b-disclosure":"react-overlay-disclosure",title:c,style:{display:"flex",alignItems:"center",gap:u[3],padding:`${u[1]} ${u[4]} ${u[3]}`,borderBottom:`1px solid ${m.border}`,color:m.textMuted,fontSize:j.sm,lineHeight:O.normal,minWidth:0},children:[n.jsx("span",{style:{flexShrink:0,...i?{}:{color:m.accent}},children:o}),a&&n.jsx(Ae,{entry:a})]})}function Fe({adapter:t,node:e,nodeId:s,owner:i}){return n.jsxs("div",{"data-testid":"react-inspector-section",children:[n.jsx(Ie,{adapter:t,node:e}),i instanceof D&&n.jsx(Me,{owner:i,nodeId:s}),n.jsx(Be,{owner:i,node:e,nodeId:s})]})}function et({adapter:t,id:e,name:s,groupId:i,props:a}){const o=v.useMemo(()=>Jt(),[]);return n.jsx(Te,{name:s,groupId:i,props:a,adapter:t,id:e,fonts:o})}function _e(t,e){const s=lt(t,e);if(!s||!t)return[];const i=t.id,a=(e.inspector?.properties(i)??[]).filter(l=>l.path!=="name"),{ungrouped:o,groups:c}=bt(a),r=[{id:te,title:"Element",icon:jt,order:ee,body:{kind:"custom",render:()=>v.createElement(Fe,{adapter:e,node:t,nodeId:i,owner:s}),...s instanceof D?{data:{classes:s.elementClasses(i),breakpoint:U()},editable:{fields:[{path:"element.breakpoint",label:"Breakpoint",type:"enum",options:ht.map(l=>l.media??"")}],io:{get:l=>l==="element.breakpoint"?U()??"":void 0,set:(l,d)=>{l==="element.breakpoint"&&ot(typeof d=="string"&&d?d:null)}}}}:{}}}];return t.role==="story"&&s instanceof D&&r.push({id:ne,title:"Story",icon:St,order:se,body:{kind:"custom",render:()=>v.createElement(Ne,{owner:s,node:t})}}),o.length>0&&r.push({id:nt,title:"Style",icon:Ct,order:vt,defaultOpen:!0,body:{kind:"custom",render:()=>v.createElement(et,{adapter:e,id:i,name:"Style",groupId:"style",props:o})}}),c.forEach((l,d)=>{r.push({id:wt(l.groupId),title:l.name,icon:kt(l.name),order:Rt+d,defaultOpen:!0,body:{kind:"custom",render:()=>v.createElement(et,{adapter:e,id:i,name:l.name,groupId:l.groupId,props:l.properties})}})}),r}const De=xt();function Le(){De.ensure(t=>{t(yt({match:Qt,sections:_e,claims:[nt]}))})}const on="workspace.service";function ln(){return Le(),()=>{}}export{on as point,ln as start};
@@ -1 +0,0 @@
1
- import"./jsx-runtime-DPjLkJKQ.js";import"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{dc as Rt,ad as b,dp as Mt,dq as ot,dr as kt}from"./index-BRJMIUK0.js";const jt="#191c22",Kt="rgba(255, 255, 255, 0.2)",_t="#20242a",K="#2d323a";function St(){return`linear-gradient(45deg, ${K} 25%, transparent 25%, transparent 75%, ${K} 75%), linear-gradient(45deg, ${K} 25%, transparent 25%, transparent 75%, ${K} 75%)`}const B=20,Q=6,H=22,at=10,yt=B+Q,ft=H+at,It=.6,Ct=.4,Lt=.7,$t=.45;function pt(n,s,l){return n>=s?[1,!0]:n<=l?[0,!1]:[(n-l)/(s-l),!0]}function ht(n,s){const l=Math.max(0,n),i=s?Math.min(1,l/ft):0,[u,d]=pt(i,Lt,$t),c=Math.max(0,l-ft*i),y=Math.min(1,c/yt),[v,_]=pt(y,It,Ct),w=_?yt*y:0;return{frame:{scale:y,opacity:v,visible:_,offset:Q*y+B},group:s?{scale:i,opacity:u,visible:d,offset:w+at*i+H}:null}}function mt(n,s){n.style.transformOrigin="0 100%",n.style.transform=s.scale>=1?"":`scale(${s.scale})`,n.style.opacity=s.visible?String(s.opacity):"0",n.style.display=s.visible?"":"none"}const Ot={width:null,height:null};let J=Ot;const st=new Set;function Bt(){return J}function Pt(n,s){const l=n===null?null:Math.max(1,Math.round(n)),i=s===null?null:Math.max(1,Math.round(s));if(!(J.width===l&&J.height===i)){J={width:l,height:i};for(const u of st)u()}}function Jt(){Pt(null,null)}function Ft(n){return st.add(n),()=>st.delete(n)}const Tt=640,Vt=400,N=64,C=64,gt=72,zt=28,nt=C+H+at+B+Q;function wt(n,s){const l=new Map(n.map(i=>[i.id,i]));return s.sections.map(i=>({key:i.id,label:i.label,stories:i.storyIds.flatMap(u=>{const d=l.get(u);return d?[d]:[]})}))}const Nt=n=>n.split("/").map(s=>s.trim()).filter(Boolean);function xt(n){const s=new Set(n.filter(i=>i.stories.length===1).map(i=>i.key)),l=[];{const i=new Map;for(const u of n){if(!s.has(u.key)){l.push({key:u.key,label:u.label,stories:[...u.stories]});continue}const d=Nt(u.label).slice(0,-1).join("/");let c=i.get(d);c||(c={key:`category:${d}`,label:d||null,stories:[]},i.set(d,c),l.push(c)),c.stories.push(...u.stories)}}return l}function Gt(n,s,l){const i=xt(wt(n,s)),u=new Map,d=new Map;let c=N,y=0;i.forEach((w,P)=>{const E=Math.max(1,Math.ceil(Math.sqrt(w.stories.length))),S=Math.ceil(w.stories.length/E),L=w.stories.map(h=>l(h)),I=Array.from({length:E},()=>0),R=Array.from({length:S},()=>0);L.forEach((h,f)=>{const m=f%E,A=Math.floor(f/E);I[m]=Math.max(I[m],h.width),R[A]=Math.max(R[A],h.height)});const F=I.map((h,f)=>I.slice(0,f).reduce((m,A)=>m+A+C,0)),W=R.map((h,f)=>R.slice(0,f).reduce((m,A)=>m+A+C,0)),$=P===0?Number.POSITIVE_INFINITY:w.label!==null?nt:C+B+Q;w.label!==null&&d.set(w.key,{x:N,y:c,roomAbove:$}),w.stories.forEach((h,f)=>{const m=Math.floor(f/E),A=f%E,D=L[f],{width:T,height:U}=D,it=N+F[A],Y=c+W[m];u.set(h.id,{x:it,y:Y,width:T,height:U,roomAbove:m===0?$:C,withGroupLabel:i.length>1&&m===0&&w.label!==null})});const x=I.reduce((h,f)=>h+f,0)+Math.max(0,E-1)*C,O=R.reduce((h,f)=>h+f,0)+Math.max(0,S-1)*C;y=Math.max(y,x),c+=O+nt});const v=N*2+y,_=c-nt+N;return{layouts:u,groupOrigins:d,width:v,height:n.length?_:0}}const k=new WeakMap,rt=new Set,Ht=null;function G(){for(const n of rt)n()}function Qt(n){return rt.add(n),()=>rt.delete(n)}function Xt(n){return n?k.get(n)?.viewport()??Ht:null}function Zt(n,s){const l=n?k.get(n):void 0;return l?(l.setViewport(s),!0):!1}function te(n){const s=n?k.get(n):void 0;return!s||s.viewport().locked?!1:(s.setRotation(!s.viewport().rotated),!0)}function Wt(){const n=Bt();return{width:n.width??Tt,height:n.height??Vt}}function bt(n,s,l){if(s.width<=0||s.height<=0)return;const i=Math.max(1,n.clientWidth-gt*2),u=Math.max(1,n.clientHeight-gt*2),d=Math.min(l,Math.max(.1,Math.min(i/s.width,u/s.height)));kt(n.clientWidth/2-(s.x+s.width/2)*d,n.clientHeight/2-(s.y+s.height/2)*d,d)}function ee(n){const s=k.get(n);return s?(s.fitAll(),!0):!1}function oe(n,s,l){return n?k.get(n)?.selectAtClientPoint(s,l)??!1:!1}function ne(n,s,l){return n?k.get(n)?.zoomAtClientPoint(s,l)??!1:!1}function se(n,s,l,i,u){if(s.length===0)throw new Error("A React story board requires at least one story.");const d=n.parentElement;if(!d)throw new Error("A React story board layer must be attached before mounting.");n.dataset.vgaiReactStoryBoard="true",n.style.contain="none";const c=document.createElement("div");c.dataset.testid="react-story-board",c.dataset.vgaiReactStoryBoardCanvas="true",c.style.position="absolute",c.style.left="0",c.style.top="0",c.style.transformOrigin="0 0",n.appendChild(c);const y=document.createElement("div");y.dataset.testid="react-story-board-chrome",y.dataset.vgaiStoryBoardChromeFor=n.dataset.worldId??"",y.style.position="absolute",y.style.inset="0",y.style.zIndex=String(Rt.sticky),y.style.display=n.style.display||"block",y.style.pointerEvents="none",y.style.overflow="visible",d.appendChild(y);const v=new Map,_=new Map,w=new Map,P=new Map,E=new Map,S=new Map,L=wt(s,u.index),I=new Map,R=new Map,F=new Map,W=new Map;let $,x=s.some(t=>t.id===l)?l:s[0].id,O=!1,h=!1;const f=t=>{const e=u.resolve(t,t.frameSize??Wt(),F.has(t.id)?F.get(t.id):void 0,W.get(t.id)),o=S.get(t.id);return o?{...e,width:o.frame.width,height:o.frame.height,layout:"fullscreen"}:t.frameSize?{...e,layout:"fullscreen"}:e},m=()=>{const t=f(s.find(e=>e.id===x));$={storyId:x,selectedViewportId:t.selectedViewportId,locked:t.locked,rotated:t.rotated,choices:t.choices}};m();const A=new Set(L.filter(t=>t.stories.length===1).map(t=>t.key)),D=t=>t.split("/").map(e=>e.trim()).filter(Boolean),T=new Map;for(const t of L)for(const e of t.stories){const o=(e.title?D(e.title).at(-1):void 0)??D(t.label).at(-1);T.set(e.id,A.has(t.key)?o??e.label:e.label)}const U=xt(L);for(const t of L.flatMap(e=>e.stories)){const e=document.createElement("section");e.dataset.testid="react-story-frame",e.dataset.storyId=t.id,e.dataset.storyLabel=t.label,e.dataset.storyGroup=u.index.sections.find(et=>et.storyIds.includes(t.id))?.label??"",e.style.position="absolute",e.style.border=`1px solid ${b.boundary.strong}`,e.style.borderRadius="0",e.style.backgroundColor=_t,e.style.backgroundImage=St(),e.style.backgroundPosition="0 0, 8px 8px",e.style.backgroundSize="16px 16px",e.style.boxShadow="none";const o=document.createElement("button");o.type="button",o.dataset.testid="react-story-frame-label",o.dataset.storyId=t.id,o.title=`${T.get(t.id)??t.label} — click to select, double-click to zoom — ${t.modulePath}`,o.textContent=T.get(t.id)??t.label,o.style.position="absolute",o.style.height=`${B}px`,o.style.padding="0 2px",o.style.border="0",o.style.appearance="none",o.style.background="transparent",o.style.color=b.content.primary,o.style.font=`600 12px ${b.typography.sans}`,o.style.lineHeight=`${B}px`,o.style.textAlign="left",o.style.cursor="default",o.style.pointerEvents="auto",o.style.whiteSpace="nowrap",o.style.overflow="hidden",o.style.textOverflow="ellipsis",o.style.width="max-content",o.addEventListener("click",()=>i(t.id,"highlight")),o.addEventListener("dblclick",()=>i(t.id,"zoom"));const r=document.createElement("div");r.dataset.testid="react-story-frame-content",r.dataset.storyId=t.id,r.style.position="absolute",r.style.left="0",r.style.top="0",r.style.overflow="hidden",r.style.contain="layout paint",r.style.boxSizing="border-box";const a=document.createElement("div");a.dataset.testid="react-story-frame-note",a.dataset.storyId=t.id,a.style.position="absolute",a.style.left="0",a.style.right="0",a.style.bottom="0",a.style.display="none",a.style.padding="6px 8px",a.style.boxSizing="border-box",a.style.background=b.surface.overlay,a.style.color=b.content.muted,a.style.font=`11px ${b.typography.sans}`,a.style.pointerEvents="none";const p=document.createElement("div");p.dataset.testid="react-story-frame-error",p.dataset.storyId=t.id,p.style.position="absolute",p.style.inset="0",p.style.display="none",p.style.padding="16px",p.style.boxSizing="border-box",p.style.background=b.surface.overlay,p.style.color=b.semantic.danger,p.style.font=`12px ${b.typography.mono}`,p.style.pointerEvents="none",e.append(r,a,p),c.appendChild(e),y.appendChild(o),v.set(t.id,{element:e,content:r}),_.set(t.id,p),w.set(t.id,a),P.set(t.id,o)}if(U.length>1)for(const t of U){if(t.label===null)continue;const e=document.createElement("div");e.dataset.testid="react-story-group-label",e.dataset.storyGroup=t.key,e.textContent=t.label,e.style.position="absolute",e.style.height=`${H}px`,e.style.lineHeight=`${H}px`,e.style.color=b.content.primary,e.style.font=`700 14px ${b.typography.sans}`,e.style.whiteSpace="nowrap",e.style.pointerEvents="none",e.style.width="max-content",y.appendChild(e),I.set(t.key,e)}const Y=()=>{for(const[t,e]of v){const o=t===x;e.element.dataset.active=o?"true":"false",e.element.style.outline=o?`2px solid ${b.accent.default}`:"none",e.element.style.outlineOffset=o?"3px":"0";const r=P.get(t);r.setAttribute("aria-pressed",String(o)),r.style.color=o?b.accent.default:b.content.muted}},lt=(t,e)=>Number.isFinite(t)?t*e:Number.POSITIVE_INFINITY,q=()=>{const t=ot();for(const[e,o]of E){const r=P.get(e),{frame:a}=ht(lt(o.roomAbove,t.zoom),o.withGroupLabel);r.style.left=`${t.x+o.x*t.zoom}px`,r.style.top=`${t.y+o.y*t.zoom-a.offset}px`;const p=Math.max(1,(o.width+C/2)*t.zoom);r.style.maxWidth=`${p}px`,mt(r,p>=zt?a:{...a,opacity:0,visible:!1})}for(const[e,o]of R){const r=I.get(e);if(!r)continue;const{group:a}=ht(lt(o.roomAbove,t.zoom),!0);a&&(r.style.left=`${t.x+o.x*t.zoom}px`,r.style.top=`${t.y+o.y*t.zoom-a.offset}px`,mt(r,a))}},V=()=>{E.clear(),R.clear();const t=Gt(s,u.index,f);for(const[r,a]of t.groupOrigins)R.set(r,a);for(const r of s){const a=t.layouts.get(r.id);if(!a)continue;E.set(r.id,a);const{x:p,y:et,width:dt,height:ut}=a,z=f(r),g=v.get(r.id);g.element.style.left=`${p}px`,g.element.style.top=`${et}px`,g.element.style.width=`${dt}px`,g.element.style.height=`${ut}px`;const M=S.get(r.id);g.element.style.overflow=M?"hidden":"",g.content.style.width=`${M?M.mount.width:dt}px`,g.content.style.height=`${M?M.mount.height:ut}px`,g.content.style.left=`${M?-M.offset.x:0}px`,g.content.style.top=`${M?-M.offset.y:0}px`,g.content.dataset.storyLayout=z.layout,g.content.style.padding=z.layout==="padded"?"16px":"0",g.content.style.display=z.layout==="centered"?"flex":"block",g.content.style.alignItems=z.layout==="centered"?"center":"",g.content.style.justifyContent=z.layout==="centered"?"center":""}const e=t.width,o=t.height;c.style.width=`${e}px`,c.style.height=`${o}px`,n.style.width=`${e}px`,n.style.height=`${o}px`,q()},vt=()=>{const t=Number.parseFloat(c.style.width),e=Number.parseFloat(c.style.height);bt(d,{x:0,y:0,width:t,height:e},1)};let X=null;const Z=()=>{h||(h=!0,queueMicrotask(()=>{h=!1,!O&&(j(x,!0),X=ot())}))},j=(t,e=!1)=>{const o=v.get(t),r=E.get(t);!o||!r||(x=t,Y(),m(),G(),e&&bt(d,r,2))},ct=(t,e)=>{for(const[o,r]of v){const a=r.content.getBoundingClientRect();if(t>=a.left&&t<=a.right&&e>=a.top&&e<=a.bottom)return o}return null},Et=Ft(()=>{V(),Z()}),At=Mt(q);V(),Y(),q();const tt={element:c,frames:v,activeContent:()=>v.get(x).content,activate:j,clearError:t=>{const e=_.get(t);e&&(e.style.display="none",e.textContent="")},fitAll:vt,selectAtClientPoint:(t,e)=>{const o=ct(t,e);return!o||o===x?!1:(i(o,"highlight"),!0)},zoomAtClientPoint:(t,e)=>{const o=ct(t,e);return o?(i(o,"zoom"),!0):!1},setError:(t,e)=>{const o=_.get(t);o&&(o.textContent=e,o.style.display="block")},setMeasuredFrame:(t,e)=>{if(O||!v.has(t))return;const o=S.get(t);if(e===null){if(!o)return;S.delete(t)}else{if(o&&o.frame.width===e.frame.width&&o.frame.height===e.frame.height&&o.mount.width===e.mount.width&&o.mount.height===e.mount.height&&o.offset.x===e.offset.x&&o.offset.y===e.offset.y)return;S.set(t,e)}V(),q(),X!==null&&ot()===X&&Z()},setNote:t=>{for(const e of w.values())e.textContent=t??"",e.style.display=t===null?"none":"block"},viewport:()=>$,setViewport:t=>{$.locked||(F.set(x,t),V(),m(),G(),j(x,!0))},setRotation:t=>{$.locked||(W.set(x,t),V(),m(),G(),j(x,!0))},dispose:()=>{O||(O=!0,Et(),At(),k.get(d)===tt&&k.delete(d),G(),c.remove(),y.remove())}};return k.set(d,tt),G(),Z(),tt}export{jt as R,Qt as a,Xt as b,Zt as c,Pt as d,Jt as e,ee as f,Bt as g,se as h,Kt as i,oe as j,Gt as r,Ft as s,te as t,ne as z};