@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
@@ -0,0 +1,2 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-DHhMOs_s.js","assets/three.module-BLhyNg0e.js","assets/three.core-3arARmh6.js","assets/stage-transform-tools-BzPl7OIo.js","assets/jsx-runtime-DPjLkJKQ.js","assets/_commonjsHelpers-D6-XlEtG.js","assets/index-C5ZAyrKq.js","assets/index-nmcBqr7Y.js","assets/index-D_NuPfjr.js","assets/index-CtzuWnCS.js","assets/index-CinJrH5C.js","assets/index-FUuS4qwW.js","assets/client-DNXj_opT.js","assets/index-CPiRKiDC.css","assets/editor-shell-store-DHVWS8cE.js","assets/output-pass-HurwNl0G.js","assets/Pass-D1MRT672.js","assets/editor-layers-D-CTUqco.js","assets/workspace-arrangement-DqG5sUns.js","assets/user-data-C84W0V47.js","assets/entity-object-MKYemTFM.js","assets/three-contract-Dkt6PmWY.js","assets/Toolbar-M62Gob9T.js","assets/transform-mode-request-DlEApNrA.js","assets/three-state-BCACvUtm.js","assets/standard-viewport-dressing-BW-dM_1h.js","assets/content-bounds-DROIchTa.js","assets/hierarchy-marks-BuCO8Ke-.js","assets/environment-Dg-YaLsA.js","assets/RoomEnvironment-BkknvS_I.js","assets/EXRLoader-CITMBvGd.js","assets/HDRLoader-BTGuGhVo.js","assets/preview-renderer-BrYNFV1p.js","assets/renderer-ownership-BovSEcLv.js","assets/live-mixers-B-bwLZ7c.js","assets/live-gesture-lock-DJbrjOqf.js","assets/model-inspection-DvspbmJl.js","assets/three-viewport-presentation-CBzvc2v2.js","assets/clip-planes-CnAI6DZn.js","assets/three-DiL6vMXq.js","assets/component-instance-root-DLI40MiB.js","assets/viewport-editor-controls-BYaAZ_Ku.js","assets/model-thumbnail-BmQs-h6t.js","assets/studio-environment-R9qXUUcC.js","assets/KTX2Loader-CaqVE6nY.js","assets/GLTFLoader-KeoruJgS.js","assets/BufferGeometryUtils-B22h7jo4.js","assets/OrbitControls-B13MKuwC.js","assets/LineSegments2-DN9pUfWA.js","assets/three.quarks.esm-C_HmSKXo.js","assets/three-integration-DXOFI88n.js","assets/host-hierarchy-objects-BV3WqU2w.js","assets/layered-pick-CAVQMPI7.js","assets/root-stacking-BEd9ZvxC.js","assets/object3d-document-session-registry-CMRJdFp6.js","assets/viewport-door-BARIpMu-.js","assets/asset-preview-DxlSdRZn.js","assets/bitmap-label-Ct4k6ehY.js","assets/scene-framing-DkZKDwH3.js","assets/source-object3d-authoring-adapter-CvmFpSUj.js","assets/three-projection-core-B7Lf8tOp.js","assets/editor-presentation-activity-CqJH4G9t.js","assets/transport-strip-xCg94CuI.js","assets/viewport-surface-status-TUfhXKR9.js","assets/stage-overlay-set-g6eWhuRv.js","assets/TransientHint-Cc40mHWE.js","assets/ViewportShadingMenu-BoMPnTVh.js","assets/stage-keyboard-BQkndG_D.js","assets/camera-authoring-DYjhU5Zp.js","assets/stage-presence-markers-0CDfO5f4.js","assets/collaboration-presence-D6MC9xJN.js"])))=>i.map(i=>d[i]);
2
+ import{kH as Cr,lg as ur,kO as Ie,O as us,eU as zn,lD as In,_ as Ke,aJ as Nn,lE as $n,j1 as Ks,cE as Ue,aL as Te,a1 as we,cJ as Gn,dT as Un,a0 as Ne,lF as qn,cK as Kn,cL as Yn,aK as hs,cM as ds,lG as Ys,lH as Xn,iX as Zn,dG as vr,dH as ps,dI as ct,af as qe,en as Jn,lI as Qn,lJ as ei,a2 as ve,ae as ti,lK as ri,lL as si,lM as ni,lN as ii,lO as oi,hk as ai,lP as ci,b4 as li,lQ as Xs,aP as ui,gJ as hi,lR as fs,lS as ms,lT as gs,b0 as vs,kG as ws,fw as bs,lU as di,aI as pi,dK as fi,dJ as ys,lV as mi,dQ as gi,lW as vi,gg as Ss,lX as wi,lY as bi,lZ as yi,hf as Si,dk as xi,kP as Pi,kF as Ci,fR as ki,ga as Mi,l_ as xs,aG as Ei,l$ as Oi,dW as Ri}from"./index-C5ZAyrKq.js";import{a as d}from"./jsx-runtime-DPjLkJKQ.js";import{t as wr,a as ji}from"./three-state-BCACvUtm.js";import{i as N,b as Ti,a as Vi,w as Ai,c as Li,s as Ps}from"./standard-viewport-dressing-BW-dM_1h.js";import{r as f}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{a as br}from"./content-bounds-DROIchTa.js";import{EDITOR_LAYER as Zs,isInEditorOwnedSubtree as Fi}from"./editor-layers-D-CTUqco.js";import{createStandardEnvironment as Di}from"./environment-Dg-YaLsA.js";import{a as _i}from"./preview-renderer-BrYNFV1p.js";import{s as Js}from"./user-data-C84W0V47.js";import{s as Hi,a as Bi}from"./live-mixers-B-bwLZ7c.js";import{n as Wi,T as Qs,ej as kr,c1 as Cs,cu as zi,cp as Vt,aI as Ii,d as Ni,ct as $i,cx as Gi,_ as pe,bh as Lt,N as en,M as tn,dg as rn,df as sn,fo as z,d5 as yr,d9 as Ui,L as ks,I as Sr,ez as qi,dp as Ms,cj as xr,em as Ki,c0 as Yi,aO as Xi,bX as Zi,fx as Es,bi as Ji,eu as Qi,cg as me,el as nn,A as eo,d7 as to,eW as Os,fd as Tt,e6 as Rs,cm as js}from"./three.core-3arARmh6.js";import{l as ro,w as so}from"./live-gesture-lock-DJbrjOqf.js";import{v as no}from"./output-pass-HurwNl0G.js";import{a as Ve}from"./three-contract-Dkt6PmWY.js";import{d as Ft,f as io}from"./model-inspection-DvspbmJl.js";import{c as oo,p as At,d as Ts,i as Vs,r as ao,b as co,a as lo,t as As,s as Ls,C as uo,e as ho,f as po,E as fo}from"./three-viewport-presentation-CBzvc2v2.js";import{s as Pr}from"./workspace-arrangement-DqG5sUns.js";import{a as mo,b as go,L as vo}from"./LineSegments2-DN9pUfWA.js";import{s as wo,o as bo,a as yo,c as So}from"./object3d-document-session-registry-CMRJdFp6.js";import{S as xo}from"./source-object3d-authoring-adapter-CvmFpSUj.js";import{s as Po,i as hr}from"./editor-presentation-activity-CqJH4G9t.js";import{a as Co}from"./three-integration-DXOFI88n.js";import{r as Fs,d as Ds}from"./viewport-door-BARIpMu-.js";import{T as ko}from"./transport-strip-xCg94CuI.js";import{V as Mo,O as Eo}from"./viewport-surface-status-TUfhXKR9.js";import{t as on}from"./editor-shell-store-DHVWS8cE.js";const an=30;function cn(n,e,t){return n<e?e:n>t?t:n}function Oo(n,e){const t=n.animations;if(t.length===0)return null;const r=new Wi(n);let i=t[0];if(!i)return null;const a=o=>{r.stopAllAction();const l=r.clipAction(o);l.paused=!1,l.play(),i=o};a(i);const c=e.attach({id:n.uuid,label:n.name||i.name||"Clip",range:()=>({start:0,end:i?.duration??0,fps:an}),seek:o=>{r.setTime(cn(o,0,i?.duration??0))},clips:()=>t.map(o=>({id:o.name,label:o.name})),setClip:o=>{const l=t.find(p=>p.name===o);l&&a(l)}});return()=>{c(),r.stopAllAction(),r.uncacheRoot(n)}}function Ro(n,e){const t=Bi(n);if(!t)return null;let r=t.clips.values().next().value;if(!r)return null;const i=c=>{t.mixer.stopAllAction();const o=t.mixer.clipAction(c);o.paused=!1,o.play(),r=c};return e.attach({id:n.uuid,label:n.name||r.name||"Animation",range:()=>({start:0,end:r?.duration??0,fps:an}),seek:c=>{t.mixer.setTime(cn(c,0,r?.duration??0))},clips:()=>[...t.clips.entries()].map(([c,o])=>({id:c,label:o.name||c})),setClip:c=>{const o=t.clips.get(c);o&&i(o)}})}function _s(n,e,t={}){const r=new Map,i=()=>{const o=new Set;(typeof n=="function"?n():n)?.traverse(p=>{if(r.has(p.uuid)){o.add(p.uuid);return}const x=Ro(p,e)??Oo(p,e);x&&(r.set(p.uuid,x),o.add(p.uuid))});for(const[p,x]of[...r])o.has(p)||(x(),r.delete(p))};i();const a=t.rescanOnLiveMixers,c=a?Hi(()=>{a()&&i()}):()=>{};return{refresh:i,dispose:()=>{c();for(const o of r.values())o();r.clear()}}}const ke=()=>globalThis.performance?.now()??Date.now();function jo(n,e){return n.length===0?0:n[Math.min(n.length-1,Math.floor((n.length-1)*e))]??0}function To(n=!1){const e=new Set,t=[],r=new Map,i=new Map,a=new Map;let c=[],o=[],l=n,p=!1,x=!1,v=0,P=0,w=0;const L=[];let F=0,M=0,C={gpuMs:null,drawCalls:0,triangles:0,geometries:0,textures:0,renderPasses:null},D={enabled:l,recording:x,fps:0,cpuMs:0,p95Ms:0,p99Ms:0,frames:[],phases:[],systems:[],components:[],render:C};function X(){const b=t.at(-1),I=t.slice();let _;const U=j=>(_??=I.map(H=>H.intervalMs).filter(H=>H>0).sort((H,T)=>H-T),jo(_,j));D={enabled:l,recording:x,fps:b?.intervalMs?1e3/b.intervalMs:0,cpuMs:b?.cpuMs??0,get p95Ms(){return U(.95)},get p99Ms(){return U(.99)},frames:I,phases:b?.phases??[],systems:[...i].map(([j,H])=>({name:j,ms:H})).sort((j,H)=>H.ms-j.ms),components:[...a].map(([j,H])=>({name:j,ms:H})).sort((j,H)=>H.ms-j.ms),render:C};for(const j of e)j()}return{get enabled(){return l},set enabled(b){l!==b&&(l=b,b&&!p&&(w=0),X())},get telemetryEnabled(){return p},set telemetryEnabled(b){if(p===b)return;const I=!l&&!p;p=b,b&&I&&(w=0),X()},get recording(){return x},startRecording(){const b=!l&&!p;l=!0,b&&(w=0),x=!0,t.length=0,X()},stopRecording(){x=!1,X()},clear(){t.length=0,X()},beginFrame(){!l&&!p||(r.clear(),i.clear(),a.clear(),c=[],o=[],L.length=0,C={gpuMs:null,drawCalls:0,triangles:0,geometries:0,textures:0,renderPasses:null},P=ke())},beginPhase(){l&&L.push(ke())},endPhase(b){if(!l)return;const I=L.pop()??P,_=ke()-I,U=r.get(b);r.set(b,{ms:(U?.ms??0)+_,startMs:U?.startMs??I-P}),x&&performance.measure(`volter.phase.${b}`,{start:I,duration:_})},systemObserver:{beginSystem(){l&&(F=ke())},endSystem(b,I,_){if(!l)return;const U=ke(),j=`${b} / ${I} / ${_}`;i.set(j,(i.get(j)??0)+U-F),c.push({name:j,phase:I,startMs:F-P,ms:U-F})}},beginComponent(){x&&(M=ke())},endComponent(b,I=""){if(!x)return;const _=ke();a.set(b,(a.get(b)??0)+_-M),o.push({name:b,phase:I,startMs:M-P,ms:_-M})},reportRender(b){l&&(C={gpuMs:b.gpuMs??C.gpuMs,drawCalls:C.drawCalls+b.drawCalls,triangles:C.triangles+b.triangles,geometries:C.geometries+b.geometries,textures:C.textures+b.textures,renderPasses:b.renderPasses===void 0?C.renderPasses:(C.renderPasses??0)+b.renderPasses})},endFrame(){if(!l&&!p)return;const b=ke(),I=w===0?0:P-w;w=P;const _={id:++v,timestamp:b,intervalMs:I,cpuMs:b-P,phases:[...r].map(([U,{ms:j,startMs:H}])=>({name:U,ms:j,startMs:H})).sort((U,j)=>j.ms-U.ms),systems:c.slice(),components:o.slice(),render:{...C}};t.push(_),t.length>600&&t.splice(0,t.length-600),x&&performance.measure("volter.frame",{start:P,duration:_.cpuMs}),X()},subscribe(b){return e.add(b),()=>{e.delete(b)}},getSnapshot(){return D},exportJSON(){return JSON.stringify({version:2,capturedAt:new Date().toISOString(),frames:t},null,2)}}}const ln=256;function Vo(n){const e=Math.min(1,Math.max(0,n));return e<=.0031308?e*12.92:1.055*e**(1/2.4)-.055}function dr(n,e,t){const r=Math.hypot(n,e,t)||1;return[n/r,e/r,t/r]}function Ao(n=ln){const e=document.createElement("canvas");e.width=n,e.height=n;const t=e.getContext("2d");if(!t)return e;const r=t.createImageData(n,n),i=dr(-.45,.62,.64),a=dr(.65,-.35,.5),c=dr(i[0],i[1],i[2]+1),o=[.7,.69,.68],l=[.34,.4,.52],p=[.85,.88,1];for(let x=0;x<n;x++)for(let v=0;v<n;v++){const P=(v+.5)/n/.5-1,w=1-(x+.5)/n/.5,L=P*P+w*w,F=L>1,M=F?1/Math.sqrt(L):1,C=P*M,D=w*M,X=F?0:Math.sqrt(Math.max(0,1-L)),b=Math.max(0,C*i[0]+D*i[1]+X*i[2]),I=Math.max(0,C*a[0]+D*a[1]+X*a[2]),_=Math.max(0,C*c[0]+D*c[1]+X*c[2])**42*.5,U=(1-X)**3.2*.4,j=(x*n+v)*4;for(let H=0;H<3;H++){const T=o[H]*(.16+.8*b)+l[H]*.3*I+p[H]*U+_;r.data[j+H]=Math.round(Vo(T)*255)}r.data[j+3]=255}return t.putImageData(r,0,0),e}function Lo(n=ln){const e=new Qs(Ao(n));return e.colorSpace=kr,e.minFilter=Cs,e.magFilter=Cs,e.generateMipmaps=!1,e.needsUpdate=!0,e}function Fo(n){return n.color?.clone()??new pe(12502993)}function pr(n,e){return n[e]??null}class Do{_derived=new Map;_normals=new zi;_matcap=null;_matcapTexture=null;_overdraw=new Vt({color:16777215,transparent:!0,opacity:.08,depthTest:!1,depthWrite:!1,blending:Ni,side:Ii,toneMapped:!1});render(e,t,r,i=()=>!0){if(t==="solid"||t==="preview"||t==="rendered"){r();return}const a=[];e.traverse(c=>{const o=c;!o.isMesh||!o.material||!i(o)||(a.push({mesh:o,material:o.material}),o.material=Array.isArray(o.material)?o.material.map(l=>this._materialFor(l,t)):this._materialFor(o.material,t))});try{r()}finally{for(const{mesh:c,material:o}of a)c.material=o}}dispose(){for(const e of this._derived.values())e.clay.dispose(),e.unlit.dispose(),e.wireframe.dispose();this._derived.clear(),this._normals.dispose(),this._overdraw.dispose(),this._matcap?.dispose(),this._matcapTexture?.dispose(),this._matcap=null,this._matcapTexture=null}_materialFor(e,t){if(t==="normals")return this._normals;if(t==="overdraw")return this._overdraw;if(t==="matcap")return this._matcap||(this._matcapTexture=Lo(),this._matcap=new $i({matcap:this._matcapTexture,toneMapped:!1})),this._matcap;let r=this._derived.get(e);if(!r){const i={color:Fo(e),map:pr(e,"map"),alphaMap:pr(e,"alphaMap"),alphaTest:e.alphaTest,opacity:e.opacity,transparent:e.transparent,side:e.side,depthTest:e.depthTest,depthWrite:e.depthWrite,vertexColors:!!e.vertexColors,fog:e.fog??!0};r={clay:new Gi({color:11450048,roughness:.82,metalness:0,flatShading:!0,alphaMap:pr(e,"alphaMap"),alphaTest:e.alphaTest,opacity:e.opacity,transparent:e.transparent,side:e.side,depthTest:e.depthTest,depthWrite:e.depthWrite}),unlit:new Vt(i),wireframe:new Vt({...i,wireframe:!0})},this._derived.set(e,r)}return r[t]}}class _o extends Lt{constructor(e,t){super(),this.bones=e;const r=new Set;for(const o of e){const l=o.parent;l?.isBone&&this.addSegment(l,o,r);for(const p of o.children)p.isBone&&this.addSegment(o,p,r)}this.linePositions=new Float32Array(Math.max(this.segments.length*6,6));const i=new mo;i.setPositions(this.linePositions),this.lineMaterial=new go({color:t,linewidth:5,worldUnits:!1,depthTest:!1,depthWrite:!1,toneMapped:!1,alphaToCoverage:!0}),this.lines=new vo(i,this.lineMaterial),this.lines.onBeforeRender=o=>{o.getSize(this.lineMaterial.resolution)},this.lines.frustumCulled=!1,this.lines.renderOrder=1001,this.add(this.lines),this.pointPositions=new Float32Array(Math.max(e.length*3,3));const a=new en;a.setAttribute("position",new tn(this.pointPositions,3));const c=new rn({color:t,size:11,sizeAttenuation:!1,depthTest:!1,depthWrite:!1,toneMapped:!1});this.points=new sn(a,c),this.points.frustumCulled=!1,this.points.renderOrder=1002,this.add(this.points),this.name="__object3d_document_bone_selection",Pr(this,"editorHelper",!0),this.traverse(o=>o.layers.set(Zs)),this.update()}segments=[];linePositions;pointPositions;lines;lineMaterial;points;worldPosition=new z;setColor(e){this.lineMaterial.color.setHex(e),this.points.material.color.setHex(e)}update(){let e=0;for(const[i,a]of this.segments)i.getWorldPosition(this.worldPosition),this.linePositions.set(this.worldPosition.toArray(),e),a.getWorldPosition(this.worldPosition),this.linePositions.set(this.worldPosition.toArray(),e+3),e+=6;const t=this.lines.geometry.getAttribute("instanceStart");t&&(t.data.needsUpdate=!0),e=0;for(const i of this.bones)i.getWorldPosition(this.worldPosition),this.pointPositions.set(this.worldPosition.toArray(),e),e+=3;const r=this.points.geometry.getAttribute("position");r&&(r.needsUpdate=!0)}dispose(){this.lines.geometry.dispose(),this.lineMaterial.dispose(),this.points.geometry.dispose(),this.points.material.dispose()}addSegment(e,t,r){const i=`${e.uuid}:${t.uuid}`;r.has(i)||(r.add(i),this.segments.push([e,t]))}}const Ho="skeletons",fr=new pe(58879),mr=new pe(16756736);function Bo(n){const e=n.geometry.getAttribute("color");for(let r=0;r<e.count;r+=2)e.setXYZ(r,fr.r,fr.g,fr.b),r+1<e.count&&e.setXYZ(r+1,mr.r,mr.g,mr.b);e.needsUpdate=!0,n.renderOrder=999;const t=n.material;t.depthTest=!1,t.depthWrite=!1,t.toneMapped=!1,Pr(n,"editorHelper",!0),Pr(n,"editorHelperType",Ho),n.traverse(r=>r.layers.set(Zs))}const Wo=1,zo=700,Io=.001,No=Math.PI-.001,$o=n=>n<.5?4*n*n*n:1-(-2*n+2)**3/2,Go=n=>n;function $e(n,e){return typeof n=="number"&&Number.isFinite(n)?n:e}const Hs={mode:"solid",background:"neutral",projection:"perspective",skeleton:!1,bounds:!1},Bs=1119773;class Uo{constructor(e,t,r,i,a,c,o=new pe(2106410),l=null){this.documentId=e,this.root=t,this.scene=r,this.renderer=i,this.viewport=a,this.authoring=c,this.neutralBackground=o,this.frameBox=l,this.unsubscribeSelectionTheme=Cr(i.domElement,this.syncSelectionTheme),a.orbitControls.addEventListener("start",this.cancelLookForHuman),this.unsubscribeRotateStart=a.onRotateStart(this.autoPerspective),this.unsubscribeAxisView=a.onAxisView(this.axisView)}profiler=To();shading=new Do;helpers=[];skeletonHelper=null;boundsHelper=null;boneSelectionHighlight=null;boneSelectionSignature="";composer=null;composerLoading=!1;disposed=!1;sceneRenderPass=null;selectionOutline=null;selectionOutlinePass=null;selectedObjects=[];selectionOrigins=null;renderWidth=1;renderHeight=1;orthographicCamera=new yr;captureAspect=null;cameraOverride=null;cameraViewSource=null;through=null;leaving=!1;viewMemo=null;throughPerspective=new Ui;throughOrthographic=new yr;beforeRender=null;state=Hs;version=0;listeners=new Set;unsubscribeSelectionTheme=()=>{};flight=null;flightPose=new z;topologyOverlay=null;topologyFollowers=[];unsubscribeRotateStart;unsubscribeAxisView;axisView=()=>(this.leaveCameraView(!1),this.settleFlight("superseded"),ur().autoPerspective&&this.setProjection("orthographic"),!0);autoPerspective=()=>{if(!ur().autoPerspective||this.cameraView()!==null||this.state.projection!=="orthographic")return;const e=this.viewport.camera,t=e.position.clone().sub(this.viewport.orbitControls.target),r=new z(0,1,0).applyQuaternion(e.quaternion);Ft(t,r)!==null&&this.setProjection("perspective")};replaceContent(e,t){N(),this.selectionOutline?.selection.clear(),this.selectedObjects=[],this.boneSelectionSignature="",this.clearBoneSelectionHighlight(),this.clearSkeletonHelper(),this.clearBoundsHelper(),this.clearTopologyOverlay(),this.root=e,this.authoring=t,this.state.mode==="wireframe"&&this.buildTopologyOverlay(),this.state.bounds&&(this.boundsHelper=new ks(e,16757844),this.addHelper(this.boundsHelper,"bounds")),this.syncSelectionPresentation(),this.refreshSkeletonHelper(),this.notify()}cancelLookForHuman=()=>{this.settleFlight("human")};selectionColors=null;syncSelectionTheme=()=>{this.selectionColors=Ie(this.renderer.domElement);const e=this.selectionColors.visible;this.selectionOutline&&oo(this.selectionOutline,Ie(this.renderer.domElement)),this.boneSelectionHighlight?.setColor(e)};subscribe=e=>(this.listeners.add(e),()=>this.listeners.delete(e));getSnapshot=()=>this.version;presentation(){return this.state}resolveFrameBounds(e="selection"){const t=e==="all"?[]:this.authoring?.selection?.get()??[];if(t.length>0){const r=new Sr;let i=!1;for(const a of t){const c=this.authoring?Ve(this.authoring.hierarchy,a):null;if(!c)continue;const o=br(c);o.isEmpty()||(r.union(o),i=!0)}if(i)return r}return this.frameBox&&!this.frameBox.isEmpty()?this.frameBox:br(this.root)}frame(e=1,t="selection"){this.leaveCameraView(!1);const r=this.resolveFrameBounds(t);if(r.isEmpty()){let l=0,p=0;return this.root.traverse(x=>{const v=x.geometry;v&&(l+=1,p+=v.getAttribute("position")?.count??0)}),us.warn(`frame: nothing to frame — root "${this.root.name}" (${this.root.children.length} children, ${l} meshes, ${p} positions), selection ${JSON.stringify(this.authoring?.selection?.get()??[])}, frameBox ${this.frameBox?this.frameBox.isEmpty()?"empty":"set":"none"}`,"document"),!1}this.settleFlight("superseded");const i=r.getCenter(new z),a=this.viewport.camera.position.clone().sub(this.viewport.orbitControls.target).normalize();a.lengthSq()===0&&a.set(.8,.5,-1).normalize();const c=Math.min(10,Math.max(.1,$e(e,1))),o=At(r,this.viewport.camera,a)*c;return this.viewport.setPose(i.clone().addScaledVector(a,o),i),!0}orbit(e){return this.launchFlight($e(e.azimuth,0),$e(e.elevation,0),Math.min(60,Math.max(0,$e(e.duration,.6))),$o)}turntable(e){const t=$e(e.revolutions,1);return this.launchFlight(t*Math.PI*2,0,Math.min(60,Math.max(0,$e(e.seconds,6))),Go)}looking(){return this.flight!==null}launchFlight(e,t,r,i){this.settleFlight("superseded");const a=this.viewport.camera,c=this.viewport.orbitControls.target.clone(),o=new qi().setFromVector3(a.position.clone().sub(c)),l=o.radius>1e-4?o.radius:Math.max(this.resolveFrameBounds().getSize(new z).length(),1),p={pivot:c,radius:l,startTheta:o.theta,startPhi:o.phi,deltaTheta:e,deltaPhi:-t,duration:r,ease:i,elapsed:0,theta:o.theta,phi:o.phi,settle:null};this.flight=p;const x=new Promise(v=>{p.settle=v});return this.applyFlightPose(p,0),r<=0&&this.settleFlight(null),x}applyFlightPose(e,t){const r=e.ease(t);e.theta=e.startTheta+e.deltaTheta*r,e.phi=Math.min(No,Math.max(Io,e.startPhi+e.deltaPhi*r));const i=this.viewport.camera;i.position.setFromSphericalCoords(e.radius,e.phi,e.theta).add(e.pivot),this.viewport.orbitControls.target.copy(e.pivot),i.lookAt(e.pivot),i.updateMatrixWorld(),this.flightPose.copy(i.position)}advanceLook(e){const t=this.flight;if(!t)return;const r=Math.max(1e-4,t.radius*.001);if(this.viewport.camera.position.distanceToSquared(this.flightPose)>r*r){this.settleFlight("human");return}e>0&&Number.isFinite(e)&&(t.elapsed+=e);const i=t.duration<=0?1:Math.min(1,t.elapsed/t.duration);this.applyFlightPose(t,i),i>=1&&this.settleFlight(null)}settleFlight(e){const t=this.flight;if(!t)return;this.flight=null;const r={completed:e===null,azimuth:t.theta,elevation:Math.PI/2-t.phi,seconds:Math.min(t.elapsed,t.duration)};t.settle?.(e===null?r:{...r,cancelledBy:e})}select(e){N(),this.authoring&&zn(this.authoring,[...e])}selection(){return[...this.authoring?.selection?.get()??[]]}idForObject(e){return this.authoring?.hierarchy.idForObject3D?.(e)??null}syncSelectionPresentation(){N();const e=(this.authoring?.selection?.get()??[]).map(i=>this.authoring?Ve(this.authoring.hierarchy,i):null).filter(i=>i!==null);if(this.selectedObjects=e,this.selectionOutline&&(Ts(this.selectionOutline,this.selectionOutlineWanted?e:[]),this.syncComposerOutput()),this.selectionOrigins){const i=Ie(this.renderer.domElement);this.selectionOrigins.update(e,{visible:i.visible,...i.active?{active:i.active.visible}:{}})}const t=e.filter(i=>!!i.isBone),r=t.map(i=>i.uuid).join("\0");r!==this.boneSelectionSignature&&(this.boneSelectionSignature=r,this.clearBoneSelectionHighlight(),t.length>0&&(this.boneSelectionHighlight=new _o(t,Ie(this.renderer.domElement).visible),this.scene.add(this.boneSelectionHighlight)),this.refreshSkeletonHelper())}frameSelection(){return this.frameIds(this.authoring?.selection?.get()??[])}frameIds(e){this.leaveCameraView(!1),this.settleFlight("superseded");const t=e.map(r=>this.authoring?Ve(this.authoring.hierarchy,r):null).filter(r=>r!==null);return t.length===0?!1:t.every(r=>r.isBone)?(this.frameBones(t),!0):(this.viewport.focusOnMultiple(t),!0)}setViewPreset(e,t="bounds"){N(),this.leaveCameraView(!1),this.settleFlight("superseded");const r=io(e);let i,a;if(t==="view")i=this.viewport.orbitControls.target.clone(),a=this.viewport.camera.position.distanceTo(i);else{const l=this.resolveFrameBounds();if(l.isEmpty())return;i=l.getCenter(new z),a=At(l,this.viewport.camera,r)}const c=i.clone().addScaledVector(r,a),o=e==="top"?{x:0,y:0,z:-1}:e==="bottom"?{x:0,y:0,z:1}:{x:0,y:1,z:0};this.viewport.setPose(c,i,void 0,o),this.setProjection(e==="isometric"?"perspective":"orthographic")}setCameraPose(e,t,r){N(),this.leaveCameraView(!1),this.settleFlight("superseded"),this.viewport.setPose(e,t,r)}cameraPose(){return{position:this.viewport.camera.position.toArray(),target:this.viewport.orbitControls.target.toArray(),fov:this.viewport.camera.fov}}camera(){if(this.cameraOverride)return this.cameraOverride;const e=this.drawnCamera();return this.viewport.setGizmoCamera(e===this.viewport.camera?null:e),e}drawnCamera(){const e=this.through?this.cameraView():null;return e?this.throughCamera(e):(this.through&&!this.leaving&&(this.leaving=!0,queueMicrotask(()=>{this.leaving=!1,this.through&&!this.cameraView()&&this.leaveCameraView(!1)})),this.state.projection==="perspective"?this.viewport.camera:(this.syncOrthographicCamera(),this.orthographicCamera))}setCameraViewSource(e){this.cameraViewSource!==e&&(this.cameraViewSource=e,e||this.leaveCameraView(!1),this.notify())}hasCameraView(){return this.cameraViewSource!==null}cameraView(){const e=this.through,t=this.cameraViewSource;if(!e||!t)return null;const r=this.renderer.domElement,i=this.captureAspect?{width:this.captureAspect,height:1}:{width:r.clientWidth,height:r.clientHeight},a=this.viewport.camera,c=e.locked?`${a.position.toArray().join(",")}|${a.quaternion.toArray().join(",")}`:"",o=`${e.camera}|${i.width}|${i.height}|${e.zoom}|${e.offset.join(",")}|${c}`;if(this.viewMemo?.key===o)return this.viewMemo.view;const l=t.view(e.camera,i,e.zoom,e.offset),p=l&&e.locked?{...l,position:a.position.toArray(),quaternion:a.quaternion.toArray()}:l;return this.viewMemo={key:o,view:p},queueMicrotask(()=>{this.viewMemo=null}),p}toggleCameraView(){if(this.through)return this.leaveCameraView(!0),!0;const e=this.cameraViewSource,t=e?.camera()??null;if(!e)return!1;if(t===null)return us.warn("camera view: No active camera — the scene has no camera to look through","document"),!1;N(),this.settleFlight("superseded");const r=this.viewport,i=r.orbitControls,a=i.enableDamping;return i.enableDamping=!1,i.update(),i.enableDamping=a,this.through={camera:t,zoom:e.zoom.opening,offset:[0,0],left:{position:r.camera.position.clone(),target:r.orbitControls.target.clone(),up:r.camera.up.clone(),projection:this.state.projection},release:this.captureCameraViewInput(),locked:!1},e.showing?.(t),this.notify(),!0}cameraViewLocked(){return!this.through||!this.cameraViewSource?.setPose?null:this.through.locked}toggleCameraViewLock(){const e=this.through,t=this.cameraViewSource;if(!(!e||!t?.setPose)){if(e.release(),e.locked=!e.locked,!e.locked)e.release=this.captureCameraViewInput();else{const r=this.cameraView(),i=this.viewport.orbitControls,a=this.viewport.camera;if(r){const M=new z(...r.position),C=new Ms(...r.quaternion),D=e.left.position.distanceTo(e.left.target);a.up.set(0,1,0).applyQuaternion(C),a.position.copy(M),a.quaternion.copy(C),i.target.copy(M).addScaledVector(new z(0,0,-1).applyQuaternion(C),D),i.update()}const c=i.enabled;i.enabled=!0;const o=i.enableDamping;i.enableDamping=!1;const l=e.camera,p=M=>({position:a.position.toArray(),quaternion:a.quaternion.toArray(),final:M});let x=!1,v=null,P=!1;const w=M=>{if(x){v={...M,final:M.final||(v?.final??!1)};return}x=!0,v=null,Promise.resolve(t.setPose(l,M.position,M.quaternion,M.final)).catch(()=>{}).finally(()=>{x=!1,v&&w(v)})},L=()=>{P=!0,N(),this.notify(),w(p(!1))},F=()=>{P&&(P=!1,w(p(!0)))};i.addEventListener("change",L),i.addEventListener("end",F),e.release=()=>{F(),i.removeEventListener("change",L),i.removeEventListener("end",F),i.enabled=c,i.enableDamping=o}}this.viewMemo=null,N(),this.notify()}}cameraViewZoom(){return this.through?.zoom??null}setCameraViewZoom(e){const t=this.through,r=this.cameraViewSource;!t||!r||!Number.isFinite(e)||e<=0||(t.zoom=Math.min(r.zoom.max,Math.max(r.zoom.min,e)),N(),this.notify())}zoomCameraView(e){this.through&&this.setCameraViewZoom(this.through.zoom*e)}panCameraView(e,t){const r=this.through,i=this.cameraViewSource;if(!r||!i)return;const[a,c]=i.pan(r.offset,r.zoom,e,t);r.offset=[a,c],N(),this.notify()}leaveCameraView(e){const t=this.through;if(!t)return;const r=this.cameraView();t.release(),this.through=null,this.viewMemo=null,this.cameraViewSource?.showing?.(null),this.viewport.setGizmoCamera(null);const i=this.viewport;if(e)i.camera.position.copy(t.left.position),i.camera.up.copy(t.left.up),i.orbitControls.target.copy(t.left.target),this.state={...this.state,projection:t.left.projection};else if(r){const a=t.left.position.distanceTo(t.left.target),c=new z(...r.position),o=new Ms(...r.quaternion),l=new z(0,0,-1).applyQuaternion(o);i.camera.up.set(0,1,0).applyQuaternion(o),i.camera.position.copy(c),i.orbitControls.target.copy(c).addScaledVector(l,a);const p=Ft(t.left.position.clone().sub(t.left.target),t.left.up)!==null,x=ur().autoPerspective&&p?"perspective":t.left.projection;this.state={...this.state,projection:x}}i.camera.lookAt(i.orbitControls.target),i.orbitControls.update(),N(),this.notify()}throughCamera(e){const{left:t,right:r,top:i,bottom:a}=e.window,c=this.viewport.camera.layers.mask;if(e.projection==="orthographic"){const l=this.throughOrthographic;return Object.assign(l,{left:t,right:r,top:i,bottom:a,near:e.near,far:e.far,zoom:1}),l.position.set(...e.position),l.quaternion.set(...e.quaternion),l.layers.mask=c,l.updateProjectionMatrix(),l.updateMatrixWorld(!0),l}const o=this.throughPerspective;return o.near=e.near,o.far=e.far,o.fov=xr.radToDeg(2*Math.atan((i-a)/2)),o.aspect=(r-t)/(i-a),o.zoom=1,o.position.set(...e.position),o.quaternion.set(...e.quaternion),o.layers.mask=c,o.projectionMatrix.makePerspective(t*e.near,r*e.near,i*e.near,a*e.near,e.near,e.far),o.projectionMatrixInverse.copy(o.projectionMatrix).invert(),o.updateMatrixWorld(!0),o}captureCameraViewInput(){const e=this.viewport.orbitControls,t=this.renderer.domElement,r=t.parentElement??t,i=e.enabled;e.enabled=!1;const a=o=>{o.target!==t||o.deltaY===0||(o.preventDefault(),this.zoomCameraView(o.deltaY<0?1.2:1/1.2))},c=o=>{if(o.target!==t)return;const l=e.mouseButtons;let p=[l.LEFT,l.MIDDLE,l.RIGHT][o.button]??null;const x=o.ctrlKey||o.metaKey||o.shiftKey;if(o.button===1&&(o.ctrlKey||o.metaKey)&&p===me.ROTATE?p=me.DOLLY:x&&p===me.ROTATE?p=me.PAN:x&&p===me.PAN&&(p=me.ROTATE),p===me.ROTATE){this.leaveCameraView(!1);return}if(p!==me.PAN&&p!==me.DOLLY)return;o.preventDefault();const v=t.getBoundingClientRect();let P=o.clientX,w=o.clientY;const L=this.through?.zoom??1,F=Math.max(5+o.clientY-v.top,1),M=D=>{if(p===me.PAN){this.panCameraView((D.clientX-P)/Math.max(v.width,1),(D.clientY-w)/Math.max(v.height,1)),P=D.clientX,w=D.clientY;return}const X=Math.max(.01,2*((5+D.clientY-v.top)/F-1)+1);this.setCameraViewZoom(L/X)},C=()=>{window.removeEventListener("pointermove",M),window.removeEventListener("pointerup",C),window.removeEventListener("pointercancel",C)};window.addEventListener("pointermove",M),window.addEventListener("pointerup",C),window.addEventListener("pointercancel",C)};return r.addEventListener("wheel",a,{capture:!0,passive:!1}),r.addEventListener("pointerdown",c,{capture:!0}),()=>{r.removeEventListener("wheel",a,{capture:!0}),r.removeEventListener("pointerdown",c,{capture:!0}),e.enabled=i}}projection(){return this.state.projection}setProjection(e){N(),this.state.projection!==e&&(this.state={...this.state,projection:e},this.notify())}setMode(e){N(),this.state.mode!==e&&(this.clearDiagnosticPresentation(),this.state={...this.state,mode:e},e==="uv"?this.scene.overrideMaterial=new Ki({vertexShader:"varying vec2 vUv; void main(){ vUv=uv; gl_Position=projectionMatrix*modelViewMatrix*vec4(position,1.0); }",fragmentShader:"varying vec2 vUv; void main(){ gl_FragColor=vec4(vUv,0.0,1.0); }"}):e==="vertex-colors"?this.scene.overrideMaterial=new Vt({vertexColors:!0}):e==="wireframe"&&this.buildTopologyOverlay(),this.notify())}buildTopologyOverlay(){const e=new Lt,t=[];this.root.updateMatrixWorld(!0),this.root.traverse(r=>{const i=r;if(!i.isMesh||!i.geometry)return;const a=new Yi(new Xi(i.geometry,Wo),new Zi({color:Bs,toneMapped:!1,transparent:!0,opacity:.85,depthTest:!1,depthWrite:!1}));a.matrixAutoUpdate=!1,a.matrixWorldAutoUpdate=!1,a.matrixWorld.copy(i.matrixWorld),a.frustumCulled=!1,a.renderOrder=2,e.add(a),t.push({line:a,source:i})}),t.length!==0&&(this.topologyOverlay=e,this.topologyFollowers=t,this.addHelper(e,"topology"))}syncTopologyOverlay(){this.topologyFollowers.some(({source:i})=>i.parent===null)&&(this.clearTopologyOverlay(),this.buildTopologyOverlay()),this.selectionColors??=Ie(this.renderer.domElement);const e=this.selectionColors,t=this.selectedObjects.at(-1)??null,r=(i,a)=>{for(let c=i;c;c=c.parent)if(c===a)return!0;return!1};for(const{line:i,source:a}of this.topologyFollowers){i.matrixWorld.copy(a.matrixWorld),i.visible=a.visible;const c=i.material,o=t!==null&&r(a,t),l=o||this.selectedObjects.some(x=>r(a,x)),p=o?e.active?.visible??e.visible:l?e.visible:null;c.color.setHex(p??Bs)}}clearTopologyOverlay(){for(const{line:r}of this.topologyFollowers.splice(0))r.geometry.dispose(),r.material.dispose();const e=this.topologyOverlay;if(this.topologyOverlay=null,!e)return;e.removeFromParent();const t=this.helpers.indexOf(e);t>=0&&this.helpers.splice(t,1)}setBounds(e){N(),this.state.bounds!==e&&(this.state={...this.state,bounds:e},e?(this.boundsHelper=new ks(this.root,16757844),this.addHelper(this.boundsHelper,"bounds")):this.clearBoundsHelper(),this.notify())}setSkeleton(e){N(),this.state.skeleton!==e&&(this.state={...this.state,skeleton:e},this.refreshSkeletonHelper(),this.notify())}neutralBackgroundTexture(){return this.neutralBackground}setNeutralBackground(e){N();const t=this.scene.background,r=this.neutralBackground,i=t===r||t instanceof pe&&r instanceof pe&&t.equals(r);this.neutralBackground=e,i&&(this.scene.background=e)}setBackground(e){N(),this.state.background!==e&&(this.scene.background=e==="transparent"?null:this.neutralBackground,this.state={...this.state,background:e},this.notify())}resetPresentation(){N(),In(this.documentId),this.clearDiagnosticPresentation(),this.state=Hs,this.refreshSkeletonHelper(),this.clearBoundsHelper(),this.scene.background=this.neutralBackground,this.viewport.camera.up.set(0,1,0),this.frame(),this.notify()}setBeforeRender(e){this.beforeRender=e}presentedFrameWaiters=[];presentsFrames=!1;setPresentsFrames(e){this.presentsFrames=e,e||this.resolvePresentedFrame(null)}requestPresentedFrame(){return this.presentsFrames?new Promise(e=>{let t=!1;const r=i=>{t||(t=!0,e(i))};this.presentedFrameWaiters.push(r),N(),setTimeout(()=>r(null),zo)}):Promise.resolve(null)}needsFrame(){return this.flight!==null||this.presentedFrameWaiters.length>0}servePresentedFrame(){if(this.presentedFrameWaiters.length===0)return;const e=this.renderer.domElement,t=document.createElement("canvas");t.width=Math.max(1,e.width),t.height=Math.max(1,e.height);const r=t.getContext("2d");if(!r){this.resolvePresentedFrame(null);return}r.drawImage(e,0,0),this.resolvePresentedFrame(t)}resolvePresentedFrame(e){const t=this.presentedFrameWaiters;this.presentedFrameWaiters=[];for(const r of t)r(e)}render(e){this.beforeRender?.(),this.boneSelectionHighlight?.update();const t=this.camera(),r=this.state.mode;if(this.boundsHelper?.update(),this.selectionOrigins?.place(),r==="uv"||r==="vertex-colors"){e(t);return}if(r==="wireframe"&&this.topologyOverlay){if(this.syncTopologyOverlay(),this.xray.enabled&&this.xray.alpha<=0){const i=new Set;this.root.traverse(a=>{const c=a;if(c.isMesh)for(const o of Array.isArray(c.material)?c.material:[c.material])o?.visible&&(o.visible=!1,i.add(o))});try{e(t)}finally{for(const a of i)a.visible=!0}return}this.shading.render(this.scene,"clay",()=>e(t),Vs);return}this.shading.render(this.scene,r,()=>e(t),Vs)}renderViewport(e=0){this.advanceLook(e),this.ensureComposer(),this.render(t=>{const r=this.composer;if(!r){this.renderer.render(this.scene,t);return}r.setMainScene(this.scene),r.setMainCamera(t),r.render(e)})}resize(e,t){N(),this.renderWidth=Math.max(1,e),this.renderHeight=Math.max(1,t),this.composer?.setSize(this.renderWidth,this.renderHeight)}renderCapture(e,t){this.render(r=>{if(!t){e(r);return}const i=this.scene.background,a=this.renderer.getClearColor(new pe),c=this.renderer.getClearAlpha();try{this.scene.background=null,this.renderer.setClearColor(0,0),e(r)}finally{this.scene.background=i,this.renderer.setClearColor(a,c)}})}captureImage(e=512){const t=typeof e=="number"?e:e.width,r=typeof e=="number"?e:e.height;if(!Number.isFinite(t)||t<1||!Number.isFinite(r)||r<1)return null;const i=Math.min(2048,Math.round(t)),a=Math.min(2048,Math.round(r)),c=i*2,o=a*2,l=new Es(c,o,{type:Ji}),p=new Es(c,o),x=this.renderer.getRenderTarget(),v=this.renderer.getPixelRatio(),P=this.viewport.camera,w=P.aspect;try{this.captureAspect=i/a;const L=typeof e=="number"?void 0:e.camera;L?this.cameraOverride=L:(P.aspect=i/a,P.updateProjectionMatrix()),this.renderer.setPixelRatio(1),this.renderer.setRenderTarget(l),this.renderCapture(_=>this.renderSolidForCapture(_,l,c,o),typeof e!="number"&&e.transparent===!0),no(typeof e!="number"&&e.transparent===!0).render(this.renderer,p,l,0,!1);const F=c*4,M=new Uint8Array(F*o);this.renderer.readRenderTargetPixels(p,0,0,c,o,M);const C=document.createElement("canvas");C.width=c,C.height=o;const D=C.getContext("2d");if(!D)return null;const X=D.createImageData(c,o);for(let _=0;_<o;_++){const U=(o-1-_)*F,j=_*F;X.data.set(M.subarray(U,U+F),j)}D.putImageData(X,0,0);const b=document.createElement("canvas");b.width=i,b.height=a;const I=b.getContext("2d");return I?(I.drawImage(C,0,0,i,a),b.toDataURL("image/png")):null}finally{this.captureAspect=null,this.cameraOverride=null,P.aspect=w,P.updateProjectionMatrix(),this.renderer.setRenderTarget(x),this.renderer.setPixelRatio(v),this.composer?.setSize(this.renderWidth,this.renderHeight,!1),p.dispose(),l.dispose()}}dispose(){this.disposed=!0,this.leaveCameraView(!1),this.selectionOrigins?.dispose(),this.selectionOrigins=null,this.settleFlight("closed"),this.viewport.orbitControls.removeEventListener("start",this.cancelLookForHuman),this.unsubscribeRotateStart(),this.unsubscribeAxisView(),this.unsubscribeSelectionTheme(),this.clearDiagnosticPresentation(),this.clearBoneSelectionHighlight(),this.clearBoundsHelper(),this.clearSkeletonHelper(),this.selectionOutline&&ao(this.renderer,this.selectionOutline,this.selectionOutlinePass),this.composer?.dispose(),this.sceneRenderPass=null,this.selectionOutline=null,this.selectionOutlinePass=null,this.composer=null,this.shading.dispose(),this.listeners.clear()}addHelper(e,t){e.name=`__object3d_document_${t}`,Js(e,"editorHelper",!0),this.scene.add(e),this.helpers.push(e)}get selectionOutlineEnabled(){return this.selectionOutlineWanted}set selectionOutlineEnabled(e){e!==this.selectionOutlineWanted&&(this.selectionOutlineWanted=e,e?this.syncSelectionPresentation():(this.selectionOutline?.selection.clear(),this.syncComposerOutput()))}selectionOutlineWanted=!0;xray={enabled:!1,alpha:1};setXray(e){this.xray.enabled===e.enabled&&this.xray.alpha===e.alpha||(this.xray=e,N())}set selectionOriginsEnabled(e){e!==(this.selectionOrigins!==null)&&(e?(this.selectionOrigins=new Yo,this.scene.add(this.selectionOrigins),this.syncSelectionPresentation()):(this.selectionOrigins?.dispose(),this.selectionOrigins=null,N()))}ensureComposer(){this.selectionOutlineWanted&&(this.composer||this.composerLoading||this.disposed||(this.composerLoading=!0,Ke(()=>import("./index-DHhMOs_s.js"),__vite__mapDeps([0,1,2])).then(e=>{if(this.composerLoading=!1,this.disposed||this.composer)return;const t=this.camera(),r=new e.EffectComposer(this.renderer);this.sceneRenderPass=new e.RenderPass(this.scene,t),r.addPass(this.sceneRenderPass),this.selectionOutline=co(e,this.renderer,this.scene,t,Ie(this.renderer.domElement)),this.syncSelectionTheme(),Ts(this.selectionOutline,this.selectedObjects),this.selectionOutlinePass=new e.EffectPass(t,this.selectionOutline),r.addPass(this.selectionOutlinePass),this.composer=r,this.syncComposerOutput(),r.setSize(this.renderWidth,this.renderHeight),N()}).catch(()=>{this.composerLoading=!1})))}renderSolidForCapture(e,t,r,i){const a=this.composer,c=(this.selectionOutline?.selection.size??0)>0;if(!a||!c||!this.sceneRenderPass||!this.selectionOutlinePass){this.renderer.render(this.scene,e);return}const o=this.renderWidth,l=this.renderHeight;try{this.sceneRenderPass.renderToScreen=!1,this.selectionOutlinePass.renderToScreen=!1,a.setSize(r,i,!1),this.sceneRenderPass.render(this.renderer,a.inputBuffer,a.outputBuffer,0),this.selectionOutlinePass.render(this.renderer,a.inputBuffer,t,0)}finally{a.setSize(o,l,!1),this.syncComposerOutput(),this.renderer.setRenderTarget(t)}}syncComposerOutput(){const e=(this.selectionOutline?.selection.size??0)>0;this.sceneRenderPass&&(this.sceneRenderPass.renderToScreen=!e),this.selectionOutlinePass&&(this.selectionOutlinePass.enabled=e,this.selectionOutlinePass.renderToScreen=e)}refreshSkeletonHelper(){const e=this.state.skeleton||this.boneSelectionHighlight!==null;e&&!this.skeletonHelper?(this.skeletonHelper=new Qi(this.root),Bo(this.skeletonHelper),this.scene.add(this.skeletonHelper)):e||this.clearSkeletonHelper()}clearSkeletonHelper(){this.skeletonHelper&&(this.skeletonHelper.removeFromParent(),this.skeletonHelper.dispose(),this.skeletonHelper=null)}clearBoneSelectionHighlight(){this.boneSelectionHighlight&&(this.boneSelectionHighlight.removeFromParent(),this.boneSelectionHighlight.dispose(),this.boneSelectionHighlight=null)}clearBoundsHelper(){if(!this.boundsHelper)return;const e=this.boundsHelper;this.boundsHelper=null;const t=this.helpers.indexOf(e);t>=0&&this.helpers.splice(t,1),e.removeFromParent(),e.geometry.dispose(),Array.isArray(e.material)?e.material.forEach(r=>{r.dispose()}):e.material.dispose()}frameBones(e){const t=new Sr,r=new z;for(const l of e){t.expandByPoint(l.getWorldPosition(r)),l.parent?.isBone&&t.expandByPoint(l.parent.getWorldPosition(r));for(const p of l.children)p.isBone&&t.expandByPoint(p.getWorldPosition(r))}const i=t.getCenter(new z),a=Math.max(t.getSize(new z).length(),.2);t.expandByScalar(a*.35);const c=this.viewport.camera.position.clone().sub(this.viewport.orbitControls.target).normalize(),o=At(t,this.viewport.camera,c);this.viewport.setPose(i.clone().addScaledVector(c,o),i)}syncOrthographicCamera(){const e=this.viewport.camera,t=this.viewport.orbitControls.target,r=Math.max(e.position.distanceTo(t),.001),i=Math.max(r*Math.tan(xr.degToRad(e.fov)/2),.001),a=Math.max(this.renderer.domElement.clientWidth,1),c=Math.max(this.renderer.domElement.clientHeight,1),o=this.captureAspect??a/c;this.orthographicCamera.left=-i*o,this.orthographicCamera.right=i*o,this.orthographicCamera.top=i,this.orthographicCamera.bottom=-i,this.orthographicCamera.near=e.near,this.orthographicCamera.far=e.far,this.orthographicCamera.position.copy(e.position),this.orthographicCamera.quaternion.copy(e.quaternion),this.orthographicCamera.up.copy(e.up),this.orthographicCamera.layers.mask=e.layers.mask,this.orthographicCamera.updateProjectionMatrix(),this.orthographicCamera.updateMatrixWorld(!0)}clearDiagnosticPresentation(){this.clearTopologyOverlay(),this.scene.overrideMaterial?.dispose(),this.scene.overrideMaterial=null;for(const e of this.helpers.splice(0)){e.removeFromParent();const t=e;t.geometry?.dispose();const r=t.material;Array.isArray(r)?r.forEach(i=>{i.dispose()}):r?.dispose()}}notify(){this.version++;for(const e of this.listeners)e()}}const qo=7;let at=null;function Ko(){if(at)return at;const n=64,e=document.createElement("canvas");e.width=n,e.height=n;const t=e.getContext("2d");return t.beginPath(),t.arc(n/2,n/2,n/2-1,0,Math.PI*2),t.fillStyle="rgba(0, 0, 0, 0.75)",t.fill(),t.beginPath(),t.arc(n/2,n/2,n/2-8,0,Math.PI*2),t.fillStyle="#ffffff",t.fill(),at=new Qs(e),at.colorSpace=kr,at}class Yo extends sn{objects=[];origin=new z;constructor(){super(new en,new rn({map:Ko(),size:qo,sizeAttenuation:!1,transparent:!0,alphaTest:.05,depthTest:!1,depthWrite:!1,toneMapped:!1})),this.name="volter:selection-origins",this.userData.editorHelper=!0,this.renderOrder=1e3,this.frustumCulled=!1,this.raycast=()=>{}}update(e,t){this.objects=e,this.material.color.setHex(e.length===1&&t.active!==void 0?t.active:t.visible),this.visible=e.length>0}place(){const e=this.objects.length;let t=this.geometry.getAttribute("position");(t===void 0||t.count<e)&&(this.geometry.dispose(),t=new tn(new Float32Array(Math.max(e,8)*3),3),this.geometry.setAttribute("position",t)),this.geometry.setDrawRange(0,e),this.objects.forEach((r,i)=>{r.getWorldPosition(this.origin),t.setXYZ(i,this.origin.x,this.origin.y,this.origin.z)}),t.needsUpdate=!0}dispose(){this.removeFromParent(),this.geometry.dispose(),this.material.dispose()}}class Xo{constructor(e){this.options=e}active=null;settling=!1;idleWaiters=new Set;begin(e){if(this.active||this.settling)return!1;try{const t=this.options.begin(e);return t?(this.active={pointerId:e.pointerId,gesture:t},!0):!1}catch(t){return this.options.reportError(t),!1}}update(e){if(!(!this.active||this.active.pointerId!==e.pointerId))try{this.active.gesture.update(e)}catch(t){this.cancelWithError(t)}}async commit(e){const t=this.take(e.pointerId);if(!t)return!1;this.settling=!0;try{return await t.commit(e),await this.options.persist(t.label),!0}catch(r){try{await t.cancel()}catch(i){return this.options.reportError({operationError:r,rollbackError:i}),!1}return this.options.reportError(r),!1}finally{this.settling=!1;for(const r of this.idleWaiters)r();this.idleWaiters.clear()}}async cancel(e){const t=this.take(e);if(!t)return!1;this.settling=!0;try{return await t.cancel(),!0}catch(r){return this.options.reportError(r),!1}finally{this.settling=!1;for(const r of this.idleWaiters)r();this.idleWaiters.clear()}}async settle(){this.active&&await this.cancel(),this.settling&&await new Promise(e=>this.idleWaiters.add(e))}hasActiveGesture(){return this.active!==null}take(e){if(!this.active||e!==void 0&&this.active.pointerId!==e)return null;const t=this.active.gesture;return this.active=null,t}async cancelWithError(e){const t=this.take();if(t){this.settling=!0;try{await t.cancel(),this.options.reportError(e)}catch(r){this.options.reportError({operationError:e,rollbackError:r})}finally{this.settling=!1;for(const r of this.idleWaiters)r();this.idleWaiters.clear()}}}}class Zo{constructor(e,t){this.frame=e,this.releaseRenderer=t,this.unsubscribeActivity=Po(()=>this.syncActivity())}rafId=0;running=!1;disposed=!1;active=!1;unsubscribeActivity;get isDisposed(){return this.disposed}get isRunning(){return this.running}setActive(e){this.disposed||(this.active=e,this.syncActivity())}syncActivity(){this.active&&hr()?this.start():this.stop()}redraw(){this.running&&!this.disposed&&hr()&&this.guardedFrame(performance.now())}dispose(){this.stop(),!this.disposed&&(this.disposed=!0,this.unsubscribeActivity(),this.releaseRenderer())}start(){this.disposed||this.running||(this.running=!0,this.guardedFrame(performance.now(),!0),!(!this.running||this.disposed)&&(this.rafId=requestAnimationFrame(this.tick)))}lastFrameFailure=null;guardedFrame(e,t=!1){try{this.frame(e,t),this.lastFrameFailure=null}catch(r){const i=r instanceof Error?r.message:String(r);i!==this.lastFrameFailure&&(this.lastFrameFailure=i,console.error("[document renderer] a frame threw; the loop continues:",r))}}stop(){this.running=!1,this.rafId!==0&&(cancelAnimationFrame(this.rafId),this.rafId=0)}tick=e=>{if(!(!this.running||this.disposed)){if(!hr()){this.stop();return}this.guardedFrame(e),!(!this.running||this.disposed)&&(this.rafId=requestAnimationFrame(this.tick))}}}const Jo=new Set(["solid","clay","unlit","wireframe","normals","overdraw"]);function Qo(n,e){return{read:()=>{const t=n.cameraPose;if(!t)return null;const{position:r,target:i}=t;return{camera:{position:{x:r.x,y:r.y,z:r.z},target:{x:i.x,y:i.y,z:i.z},...t.fov?{fov:t.fov}:{}},diagnostic:n.shadingMode,grid:Nn(e)}},setDiagnostic:t=>Jo.has(t)?(n.setShadingMode(t),!0):!1,setCamera:t=>typeof t!="string"?(n.shell.setCameraPose(t.position,t.target,t.fov),!0):t==="isometric"?!1:(n.shell.setViewPreset(t),!0),frame:t=>t==="document"?!1:(n.shell.focusOnSelection(),!0)}}function ea(n){const e=wr();return e?$n(Ks(e.shell,n)):"none"}const ta=f.lazy(()=>Ke(()=>import("./stage-transform-tools-BzPl7OIo.js"),__vite__mapDeps([3,4,5,6,7,8,9,10,11,12,13,14,15,1,2,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])).then(n=>({default:n.ThreeStageTransformTools}))),ra=f.lazy(()=>Ke(()=>import("./stage-transform-tools-BzPl7OIo.js"),__vite__mapDeps([3,4,5,6,7,8,9,10,11,12,13,14,15,1,2,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])).then(n=>({default:n.ThreeStageTransformControls})));function Ws(n){return{transformTools:()=>ea(n),TransformTools:ta,TransformControls:ra}}class sa{constructor(e,t,r){this.create=e,this.isOpen=t,this.subscribe=r}states=new Map;generations=new WeakMap;unsubscribe=null;claim(e){const t=this.states.get(e)??[];let r=t.find(i=>!i.inUse);return r||(r=this.create(e),t.push(r),this.states.set(e,t)),r.inUse=!0,this.generations.set(r,this.generation(r)+1),this.unsubscribe??=this.subscribe(()=>this.discardClosed()),r}generation(e){return this.generations.get(e)??0}release(e,t=this.generation(e)){this.generation(e)===t&&(e.inUse=!1,queueMicrotask(()=>this.discardClosed()))}retain(e,t,r){if(!this.isOpen(e.documentId)||!this.states.get(e.documentId)?.includes(e)||this.generation(e)!==r){t.dispose();return}const i=e.source;e.source=t,i!==t&&i?.dispose()}discardClosed(){const e=[];for(const[r,i]of this.states){if(this.isOpen(r))continue;const a=i.filter(c=>c.inUse);e.push(...i.filter(c=>!c.inUse)),a.length?this.states.set(r,a):this.states.delete(r)}this.states.size===0&&(this.unsubscribe?.(),this.unsubscribe=null);const t=[];for(const r of e){const i=r.source;r.source=null;try{i?.dispose()}catch(a){t.push(a)}}if(t.length)throw new AggregateError(t,"Retained document cleanup failed")}}const na=f.lazy(async()=>({default:(await Ke(()=>import("./stage-overlay-set-g6eWhuRv.js"),__vite__mapDeps([64,4,5,7,8,6,9,10,11,12,13,54,65,66,24,14,15,1,2,16,17,18,19,20,21,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,55,56,57,58,59,60,61,62,63]))).StageOverlaySet}));function ia(n){return d.jsx(f.Suspense,{fallback:null,children:d.jsx(na,{...n})})}function zs(n,e,t){if(e==="orthographic"){const r=Ft(n.camera.position.clone().sub(n.orbitControls.target),new z(0,1,0).applyQuaternion(n.camera.quaternion));return r!==null?r:t==="short"?"Iso":"Orthographic"}return t==="short"?"Persp":"Perspective"}const oa=()=>()=>{},Is=()=>0;function aa({shell:n,documentId:e,label:t,kebab:r=!1}){const i=f.useSyncExternalStore(lo,As,As);f.useSyncExternalStore(wo,bo);const a=e?yo(e):null;f.useSyncExternalStore(a?.subscribe??oa,a?.getSnapshot??Is,a?.getSnapshot??Is);const c=a?a.projection():i.projection,o=P=>{a?a.setProjection(P):Ls(P)},[l,p]=f.useState(!1),x=f.useRef(null);f.useEffect(()=>{if(!l)return;const P=w=>{x.current?.contains(w.target)||p(!1)};return document.addEventListener("mousedown",P),()=>document.removeEventListener("mousedown",P)},[l]);const v=P=>{if(a){a.setViewPreset(P,"view");return}Ls("orthographic"),n.setViewPreset(P)};return d.jsxs("div",{ref:x,className:"volter-viewport-popover-anchor",children:[t===void 0?d.jsx(Ue,{text:c==="perspective"?"Perspective":"Orthographic",children:d.jsx(Te,{"aria-label":"Viewport views","aria-expanded":l,size:"comfortable",onClick:()=>p(P=>!P),children:d.jsx(we,{icon:l?Gn:Un,size:"md"})})}):d.jsxs(Ne,{size:"comfortable",variant:"ghost","aria-label":"Viewport views","aria-expanded":l,"data-testid":"viewport-view-name",onClick:()=>p(P=>!P),children:[r?d.jsx(we,{icon:qn,size:"sm"}):null,t]}),l?d.jsx(Kn,{style:{minWidth:230},children:d.jsxs(Yn,{gap:3,children:[d.jsx(hs,{variant:"caption",tone:"muted",children:"Projection"}),d.jsxs(ds,{gap:1,children:[d.jsx(Ne,{size:"compact",variant:c==="perspective"?"primary":"ghost",onClick:()=>o("perspective"),children:"Perspective"}),d.jsx(Ne,{size:"compact",variant:c==="orthographic"?"primary":"ghost",onClick:()=>o("orthographic"),children:"Orthographic"})]}),d.jsx(hs,{variant:"caption",tone:"muted",children:"Axis View"}),d.jsxs(ds,{gap:1,children:[d.jsx(Ne,{size:"compact",variant:"ghost",onClick:()=>v("top"),children:"Top"}),d.jsx(Ne,{size:"compact",variant:"ghost",onClick:()=>v("front"),children:"Front"}),d.jsx(Ne,{size:"compact",variant:"ghost",onClick:()=>v("right"),children:"Right"})]})]})}):null]})}const ca=po;function Ns(n){return Cr(null,n)}const la=()=>()=>{},$s=()=>0,ua=5,ha=58;function da(n,e){const t=e?.camera()??n.renderCamera,r=n.camera.position,i=n.orbitControls.target,a=t.isOrthographicCamera?un(t,n,e):0;return[r.x,r.y,r.z,i.x,i.y,i.z,a].map(c=>c.toPrecision(6)).join(",")}function un(n,e,t){const r=e.orbitControls.domElement,i=Math.max(1,t?.renderer.domElement.height??(r?.clientHeight??1)*(r?.ownerDocument.defaultView?.devicePixelRatio??1));return(n.top-n.bottom)/n.zoom/i}function pa({viewport:n,documentId:e,session:t,store:r,projection:i,displayName:a,objectName:c,statistics:o,subject:l,gridScale:p}){f.useSyncExternalStore(r.subscribe,r.getShellSnapshot??r.getSnapshot),f.useSyncExternalStore(f.useCallback(T=>{const W=n?.orbitControls;return W?.addEventListener("change",T),()=>W?.removeEventListener("change",T)},[n]),()=>n?da(n,t):""),f.useSyncExternalStore(t?.subscribe??la,t?.getSnapshot??$s,t?.getSnapshot??$s);const x=f.useSyncExternalStore(Ns,Ys),v=f.useSyncExternalStore(Ns,Xn),P=x&&!v?qe.content.onAccent:qe.content.primary,w=Zn();f.useSyncExternalStore(vr,ps,ps);const L=ct(e).overlays.navigationControls;if(!n)return null;const F=Ft(n.camera.position.clone().sub(n.orbitControls.target),new z(0,1,0).applyQuaternion(n.camera.quaternion))??"User",M=t?.projection()??i,C=t?.cameraView()??null,D=C?`Camera ${C.projection==="perspective"?"Perspective":"Orthographic"}`:`${F} ${M==="perspective"?"Perspective":"Orthographic"}`,X=r.selectedEntityId,b=(X===null?null:c(X))||null,I=l??(b===null||b===a?a:`${a} | ${b}`),_=t?.camera()??n.renderCamera,U=p&&!C&&F!=="User"&&_.isOrthographicCamera?p(un(_,n,t)):null,j=T=>{T.preventDefault();const W=T.currentTarget;W.setPointerCapture(T.pointerId);const be=n.orbitControls.domElement?.getBoundingClientRect().top??0,Me=Math.max(5+T.clientY-be,1),oe=n.camera,le=n.orbitControls.target,ae=oe.position.clone().sub(le),te=!t&&n.renderCamera instanceof yr?n.renderCamera:null,se=te?.zoom??1,Ee=t?.cameraViewZoom()??null,ue=he=>{const Ae=5+he.clientY-be,ye=Math.max(.01,2*(Ae/Me-1)+1);Ee!==null&&t?.cameraView()?t.setCameraViewZoom(Ee/ye):te?(te.zoom=se/ye,te.updateProjectionMatrix()):oe.position.copy(le).addScaledVector(ae,ye),n.orbitControls.update()},Q=()=>{W.removeEventListener("pointermove",ue),W.removeEventListener("pointerup",Q),W.removeEventListener("pointercancel",Q),W.removeEventListener("lostpointercapture",Q)};W.addEventListener("pointermove",ue),W.addEventListener("pointerup",Q),W.addEventListener("pointercancel",Q),W.addEventListener("lostpointercapture",Q)},H=T=>{T.preventDefault();const W=T.currentTarget;W.setPointerCapture(T.pointerId);let be=T.clientX,Me=T.clientY;const oe=new z,le=new z,ae=se=>{const Ee=se.clientX-be,ue=se.clientY-Me;if(be=se.clientX,Me=se.clientY,t?.cameraView()){const Xe=t.renderer.domElement;t.panCameraView(Ee/Math.max(Xe.clientWidth,1),ue/Math.max(Xe.clientHeight,1));return}const Q=n.camera,he=n.orbitControls.target,Ae=Q.position.distanceTo(he),ye=Math.max(1,W.ownerDocument.defaultView?.innerHeight??1),Ye=2*Ae*Math.tan(xr.degToRad(Q.fov/2))/ye;oe.setFromMatrixColumn(Q.matrixWorld,0).multiplyScalar(-Ee*Ye),le.setFromMatrixColumn(Q.matrixWorld,1).multiplyScalar(ue*Ye),Q.position.add(oe).add(le),he.add(oe).add(le),n.orbitControls.update()},te=()=>{W.removeEventListener("pointermove",ae),W.removeEventListener("pointerup",te),W.removeEventListener("pointercancel",te),W.removeEventListener("lostpointercapture",te)};W.addEventListener("pointermove",ae),W.addEventListener("pointerup",te),W.addEventListener("pointercancel",te),W.addEventListener("lostpointercapture",te)};return d.jsxs(d.Fragment,{children:[w.viewName==="text"?d.jsxs("div",{"data-testid":"viewport-view-text","aria-hidden":"true",style:{position:"absolute",top:"var(--volter-space-3)",left:"calc(var(--volter-space-4) + var(--volter-control-comfortable-height) * 2 + var(--volter-space-4))",display:"flex",flexDirection:"column",gap:"var(--volter-space-1)",fontSize:"var(--volter-font-sm)",color:P,textShadow:"var(--volter-content-text-shadow, none)",pointerEvents:"none",userSelect:"none"},children:[d.jsx("span",{children:D}),d.jsx("span",{children:I}),U?d.jsx("span",{"data-testid":"viewport-grid-scale",children:U}):null,o&&o.length>0?d.jsx("div",{"data-testid":"viewport-statistics",style:{display:"grid",gridTemplateColumns:`${ha}px auto`,rowGap:"var(--volter-space-1)",marginTop:Jn[ua]},children:o.map(T=>d.jsxs(f.Fragment,{children:[d.jsx("span",{children:T.label}),d.jsx("span",{children:T.value})]},T.id))}):null]}):null,w.viewName==="menu"?d.jsx("div",{className:"volter-viewport-view-pill",style:{position:"absolute",top:"var(--volter-viewport-overlay-top, var(--volter-space-4))",left:"var(--volter-stage-name-left, calc(var(--volter-space-4) + var(--volter-control-comfortable-height) * 2 + var(--volter-space-4)))",zIndex:"calc(var(--volter-z-dropdown, 1000) - 1)",pointerEvents:"auto"},children:d.jsx(aa,{shell:r,documentId:e,label:zs(n,M,"long"),kebab:!0})}):null,w.viewName==="gizmo"?d.jsxs("button",{type:"button","data-testid":"viewport-view-name",className:"volter-viewport-gizmo-label","aria-label":M==="perspective"?"Switch to orthographic":"Switch to perspective",onClick:()=>{const T=M==="perspective"?"orthographic":"perspective";t?t.setProjection(T):n.setProjection(T)},style:{position:"absolute",top:ho+4,right:uo,transform:"translateX(50%)",display:"inline-flex",alignItems:"center",gap:"var(--volter-space-1)",padding:0,border:0,background:"none",fontSize:"var(--volter-font-sm)",color:P,textShadow:"var(--volter-content-text-shadow, none)",cursor:"pointer",pointerEvents:"auto"},children:[d.jsx(we,{size:"xs",icon:M==="perspective"?Qn:ei}),zs(n,M,"short")]}):null,L?d.jsxs("div",{"data-testid":"viewport-navigation",role:"toolbar","aria-label":"Navigation","aria-orientation":"vertical",className:"volter-chrome-island volter-viewport-navigation",style:{position:"absolute",top:ca,right:"var(--volter-space-6)",display:"flex",flexDirection:"column",gap:"var(--volter-space-1)",padding:"var(--volter-space-1) 0",borderRadius:"var(--volter-radius-full)",background:"var(--volter-island-surface, var(--volter-surface-overlay))",pointerEvents:"auto"},children:[d.jsx(Ue,{text:"Zoom (drag)",children:d.jsx(Te,{size:"comfortable","aria-label":"Zoom the view",onPointerDown:j,children:d.jsx(we,{size:"2xl",icon:ve.viewport.zoomIn})})}),d.jsx(Ue,{text:"Pan (drag)",children:d.jsx(Te,{size:"comfortable","aria-label":"Pan the view",onPointerDown:H,children:d.jsx(we,{size:"2xl",icon:ve.viewport.pan})})}),t?.hasCameraView()?d.jsx(Ue,{text:C?"Leave the camera view":"Look through the camera",children:d.jsx(Te,{size:"comfortable","aria-label":"Toggle the camera view",onClick:()=>t.toggleCameraView(),children:d.jsx(we,{size:"2xl",icon:C?ve.viewport.cameraView:ve.viewport.camera})})}):null,C&&t?.cameraViewLocked()!==null?d.jsx(Ue,{text:t?.cameraViewLocked()?"Unlock the camera from the view":"Lock the camera to the view",children:d.jsx(Te,{size:"comfortable","aria-label":"Lock the camera to the view",onClick:()=>t?.toggleCameraViewLock(),children:d.jsx(we,{size:"2xl",icon:t?.cameraViewLocked()?ve.viewport.cameraLocked:ve.viewport.cameraUnlocked})})}):null,C||w.viewName==="gizmo"?null:d.jsx(Ue,{text:M==="perspective"?"Orthographic":"Perspective",children:d.jsx(Te,{size:"comfortable","aria-label":"Toggle perspective and orthographic",onClick:()=>{const T=M==="perspective"?"orthographic":"perspective";t?t.setProjection(T):n.setProjection(T)},children:d.jsx(we,{size:"2xl",icon:M==="orthographic"?ve.viewport.projectionOrthographic:ve.viewport.projection})})})]}):null,C&&t?d.jsx(fa,{view:C,canvas:t.renderer.domElement,locked:t.cameraViewLocked()===!0}):null]})}function fa({view:n,canvas:e,locked:t}){const[r,i]=f.useState(null),[,a]=f.useState(0);f.useEffect(()=>{const M=new ResizeObserver(()=>a(C=>C+1));return M.observe(e),()=>M.disconnect()},[e]);const c=e.clientWidth,o=e.clientHeight,l=e.ownerDocument.defaultView?.devicePixelRatio??1,p=e.getBoundingClientRect(),x=r?.getBoundingClientRect(),v=1/l,P=n.frame.left*c-v,w=n.frame.top*o-v,L=n.frame.width*c+2*v,F=n.frame.height*o+2*v;return d.jsx("div",{ref:i,"aria-hidden":"true",style:{position:"absolute",inset:0,pointerEvents:"none"},children:x?d.jsxs("svg",{"data-testid":"viewport-camera-frame",width:c,height:o,style:{position:"absolute",left:p.left-x.left,top:p.top-x.top},children:[n.passepartout.opacity>0?d.jsx("path",{d:`M0 0H${c}V${o}H0Z M${P} ${w}V${w+F}H${P+L}V${w}Z`,fill:n.passepartout.color,fillOpacity:n.passepartout.opacity,fillRule:"evenodd"}):null,n.passepartout.opacity>0?d.jsx("rect",{x:P,y:w,width:L,height:F,fill:"none",stroke:n.border.solid,strokeWidth:v,shapeRendering:"crispEdges"}):null,d.jsx("rect",{x:P,y:w,width:L,height:F,fill:"none",stroke:n.border.dashed,strokeWidth:v,strokeDasharray:`${3*v} ${3*v}`,shapeRendering:"crispEdges"}),t?d.jsx("rect",{x:P-v,y:w-v,width:L+2*v,height:F+2*v,fill:"none",stroke:n.border.locked,strokeWidth:v,strokeDasharray:`${3*v} ${3*v}`,shapeRendering:"crispEdges"}):null]}):null})}const ma=f.lazy(async()=>({default:(await Ke(()=>import("./stage-keyboard-BQkndG_D.js"),__vite__mapDeps([67,7,5,8,68,6,4,9,10,11,12,13,54,23]))).StageKeyboardBinding})),ga=n=>{const e=n.split(":");return(e[0]==="document"?e[1]:e[0])??n},Gs=()=>Ri(),gr=12;function Us(n){if(!n)return null;const e=new Sr(new z(n.min[0],n.min[1],n.min[2]),new z(n.max[0],n.max[1],n.max[2]));return e.isEmpty()?null:e}const va=500;function wa(n){return Cr(null,n)}const ba=["solid","preview","rendered","clay","unlit","wireframe","matcap","normals","overdraw"];let ya=0;const Ge=new sa(n=>({documentId:n,store:on(new Xs),inUse:!1,source:null,camera:null,presentation:null,transport:null,contentSeconds:0,transportAdvances:0}),n=>ui().some(e=>e.descriptor.id===n),hi);function Sa({canvasHostRef:n}){return d.jsx("div",{ref:n,style:{position:"absolute",inset:0}})}function xa(n,e,t,r,i){if(e==="inspector-preview"){const l=_i();return l.canvas.setAttribute("aria-label",`${t} authoring viewport`),n.appendChild(l.canvas),{canvas:l.canvas,renderer:l.renderer,lease:l}}const a=Co(r.width,r.height,i),{canvas:c,renderer:o}=a;return c.setAttribute("aria-label",`${t} authoring viewport`),n.appendChild(c),{canvas:c,renderer:o,lease:a}}class qs{constructor(e,t,r){this.lane=e,this.surface=t,this.store=r??on(new Xs),this.transport=new Oi(this.store.shell)}scene=new nn;store;cleanups=[];rendererSession=new Zo((e,t)=>this.frame?.(e,t),()=>{});viewport=null;session=null;dressing=null;presentationRig=null;applyPresentation=null;backdropOverridden=!1;documentStudio=null;contentLights=[];contentHas={light:!1,"directional-light":!1};darkened=[];darkenContentLights(){for(const t of this.contentLights)t.visible&&(t.visible=!1,this.darkened.push(t));if(this.darkened.length===0)return 0;const e=this.darkened.length;return this.scene.onAfterRender=()=>{for(const t of this.darkened)t.visible=!0;this.darkened=[],this.scene.onAfterRender=()=>{}},e}defaultEnvironment=null;defaultBackground=null;adapter=null;presentationAdapter=null;content=null;frame=null;syncHostScene=null;presence=null;initialized=!1;contentSeconds=0;transportAdvances=0;users=0;closed=!1;released=!1;get isClosed(){return this.closed}transport;borrow(){this.users++;let e=!1;return()=>{e||(e=!0,this.users--,this.releaseIfClosed())}}close(){this.closed=!0,this.frame=null,this.syncHostScene=null,this.session?.setBeforeRender(null),this.session?.setPresentsFrames(!1),this.rendererSession.setActive(!1),this.content?.dispose(),this.transport.dispose(),this.releaseIfClosed()}releaseIfClosed(){if(!this.closed||this.users!==0||this.released)return;this.released=!0;const{lease:e,renderer:t,canvas:r}=this.surface;for(const i of[...this.cleanups.splice(0),()=>this.session?.dispose(),()=>this.viewport?.dispose(),()=>this.rendererSession.dispose(),()=>this.dressing?.dispose(),...e?[()=>e.release()]:[()=>t.dispose(),()=>t.forceContextLoss(),()=>r.remove()]])try{i()}catch(a){console.error("Object3D document cleanup failed.",a)}}}function hn({documentId:n,sourcePath:e,build:t,displayName:r="Source Object3D",background:i,cameraDirection:a,persistence:c,documentSource:o,authoring:l,interaction:p,selectionOutline:x=!0,active:v=!0,audit:P=!0,chromeless:w=!1,modelSource:L,assetType:F,sourceAuthoring:M,dressing:C,rendererLane:D="own",onOpenNode:X,frameBounds:b,openingFrameBounds:I,openingFit:_,openingView:U,presentation:j,cameraView:H,stageKind:T,statistics:W,subject:be,gridScale:Me,content:oe}){const le=T??ga(n);f.useEffect(()=>{if(!w)return ti(n)},[n,w]);const ae=ji(ri()),te=ae??wr(),se=te?Ks(te.shell,n,w?"embedded":"document"):null,Ee=f.useSyncExternalStore(wa,Ys),ue=se!==null&&si(se,Ee),Q=f.useRef(ue);Q.current=ue;const he=se!==null&&ni(se),Ae=f.useRef(he);Ae.current=he;const ye=se!==null&&ii(se),Ye=f.useRef(ye);Ye.current=ye;const Xe=oi(),Dt=f.useRef(Xe);Dt.current=Xe;const _t=f.useRef(null),Ht=f.useRef(null),q=f.useRef(null),Oe=f.useRef(null);(!Oe.current||Oe.current.documentId!==n)&&(Oe.current&&Ge.release(Oe.current),Oe.current=Ge.claim(n)),f.useEffect(()=>{const O=Oe.current,de=Ge.generation(O);return()=>Ge.release(O,de)},[n]);const $=Oe.current,Le=oe?.kind==="world-root",Bt=v||Le,Mr=f.useRef(oe?.kind==="world-root"?oe.load:null);Mr.current=oe?.kind==="world-root"?oe.load:null;const[Fe,Wt]=f.useState(Bt);f.useEffect(()=>Wt(Bt),[Bt]);const zt=f.useRef(x);f.useEffect(()=>{zt.current=x;const O=q.current?.session;O&&(O.selectionOutlineEnabled=D!=="inspector-preview"&&x),q.current?.applyPresentation?.()},[x,D]);const Er=f.useRef(Promise.resolve()),It=f.useRef(!1);f.useEffect(()=>{if(Fe)return Ze.current=!1,Ut("building"),()=>{const O=q.current;if(O&&!Le){It.current=!lt.current;const de=O.store.cameraPose;$.camera=de&&O.viewport?{...de,up:O.viewport.camera.up.clone()}:null,$.presentation=O.session?.presentation()??null,$.transport=O.transport.snapshot(),$.contentSeconds=O.contentSeconds,$.transportAdvances=O.transportAdvances}dt.current=null,pt.current=null,ht.current=null,ut.current=null,O?.close(),q.current=null}},[n,D,$,Fe,Le]);const Or=f.useRef(X);Or.current=X;const Rr=f.useRef(b);Rr.current=b;const jr=f.useRef(I);jr.current=I;const Nt=f.useRef(U);Nt.current=U;const Tr=f.useRef(j);Tr.current=j;const Vr=f.useRef(H);Vr.current=H;const lt=f.useRef(v);lt.current=v;const Ar=f.useRef(v),Lr=f.useRef({build:t,sourcePath:e});f.useEffect(()=>{const O=Lr.current;Lr.current={build:t,sourcePath:e},!(O.build===t&&O.sourcePath===e)&&!Fe&&$.source&&($.source.dispose(),$.source=null)},[t,$,e,Fe]);const ut=f.useRef(null),Ze=f.useRef(!1),ht=f.useRef(null),dt=f.useRef(null),pt=f.useRef(null),[$t,ne]=f.useState(null),[Gt,Ut]=f.useState("building"),[Fr,dn]=f.useState(null),[pn,fn]=f.useState("mounting"),[mn,gn]=f.useState([]),Dr=f.useRef(null),[_r,vn]=f.useState("perspective"),[wn,Hr]=f.useState(null),ft=f.useRef(null);ft.current=wn;const qt=a?.[0],Kt=a?.[1],Yt=a?.[2],Je=L?.kind,Xt=L?.kind==="project-file"?L.path:void 0,mt=L?.kind==="entity"?L.entityId:void 0,Br=C?.environment,Wr=C?.background,zr=C?.keyLight,Zt=C?.grid,Qe=C?.viewLocked,Jt=C?.toneMapping;v&&ai(n),f.useEffect(()=>{let O=!1;if(!Fe)return;const de=async Se=>{const G=_t.current,et=Ht.current;if(!G||!et||q.current)return;const E=Dt.current;if(!E){ne("The world root needs the editor shell above it; this host has none.");return}const tt=await Se();if(O||q.current)return;dn(()=>tt),fs();const s=new qs("own",tt.mountWorldRootSurface(et,G,r),wr()??void 0);q.current=s,s.cleanups.push(ms(n,s.store.shell)),s.cleanups.push(gs(n,s.transport)),s.cleanups.push(Ei(n,{...Qo(s.store,n),...Ws(n)}));const ie=tt.installWorldRootStage({store:s.store,documentId:n,container:G,canvas:s.surface.canvas,renderer:s.surface.renderer,stats:E,cameraPreview:()=>Dr.current,onMountStatus:fn,onRootIds:gn,runFrame:xe=>Fs(n,xe)});s.viewport=ie.viewport,s.frame=ie.frame,s.content={scene:ie.scene,settle:()=>Promise.resolve(),dispose:async()=>ie.dispose()};const V=_s(()=>s.store.scene??ie.scene,s.transport,{rescanOnLiveMixers:()=>s.store.shell.playState==="stopped"});let re=0;s.cleanups.push(()=>V.dispose()),s.cleanups.push(s.store.shell.subscribe(()=>{if(s.store.shell.playState!=="stopped")return;const xe=performance.now();xe-re<va||(re=xe,V.refresh())})),s.cleanups.push(Ds({camera:ie.viewport.camera,drawCamera:()=>ie.viewport.renderCamera,orbit:ie.viewport.orbitControls,scene:ie.scene},ie.present,ie.setHelper,{documentId:n})),ut.current=s.rendererSession,s.initialized=!0,xs(),Ut("ready"),s.rendererSession.setActive(!0)},yn=async()=>{for(await q.current?.content?.settle();ro();)await so();if(O)return;const Se=Mr.current;if(Se)return de(Se);const G=_t.current,et=Ht.current;if(!G||!et)return;if(!t||e===void 0){ne("This stage shows `build` content and was given no `build()`/`sourcePath`.");return}let E;const tt=Ge.generation($);try{E=$.source??t(),$.source=null}catch(ee){ne(ee instanceof Error?ee.message:String(ee));return}try{q.current||(fs(),q.current=new qs(D,xa(et,D,r,{width:Math.max(1,G.clientWidth),height:Math.max(1,G.clientHeight)},()=>{Wt(!1),window.setTimeout(()=>{lt.current&&Wt(!0)},0)}),$.store),q.current.contentSeconds=$.contentSeconds,q.current.transportAdvances=$.transportAdvances)}catch(ee){throw E.dispose(),ee}const s=q.current,ie=s.borrow(),{renderer:V,canvas:re,lease:xe}=s.surface,A=s.store;w||(s.cleanups.push(ms(n,A.shell)),s.cleanups.push(gs(n,s.transport)));const vt=vs();vt&&A.shell.attachHistory(vt);const er=D==="inspector-preview",De=Q.current,Nr=Ae.current,$r=Ye.current,B=new nn,wt=E.root.parent;B.add(E.root),E.animations&&(E.root.animations=[...E.animations]);const tr={root:E.root,animations:E.root.animations};let _e=null,He=null,Be=null,Pe=null,ce=null,bt=null,yt=null,St=null,xt=null,Pt=null,rr=null,Gr=null,Ur=null,qr=!1,Ct=!1,kt=null;const sr={scene:B,settle:()=>ce?.settle()??Promise.resolve(),dispose:()=>{if(kt)return kt;Ct=!0;const ee=It.current;return It.current=!1,bt&&G.removeEventListener("pointerdown",bt,!0),yt&&G.removeEventListener("pointermove",yt,!0),St&&G.removeEventListener("pointerup",St,!0),xt&&G.removeEventListener("pointercancel",xt,!0),Pt&&window.removeEventListener("keydown",Pt),rr?.(),rr=null,kt=(async()=>{await ce?.settle();const rt=[];for(const Mt of[()=>Pe?.dispose(),()=>He?.dispose?.(),()=>_e?.dispose(),()=>B.removeFromParent(),()=>{ee?Ge.retain($,E,tt):E.dispose()},ie])try{Mt()}catch(fe){rt.push(fe)}rt.length&&console.error("Object3D source cleanup failed.",...rt)})(),kt}};try{const ee=async u=>{try{const g=tr;if(o&&!c){if(!g)throw new Error("Project history is unavailable; the edit was not saved.");const h=vs();if(!h)throw new Error("Project history is unavailable; the edit was not saved.");const m=o.serialize(g);if(m===null)return ne(null),!1;const y=await Gs().replaceSource(h,{file:o.path,source:m,label:u??o.label??`Edit ${r}`});return ne(null),y}if(!c)throw new Error("This Asset Lab document has no persistence binding.");if(!Be||!g)throw new Error("Project history is unavailable; the edit was not saved.");const{persisted:k}=await(await Be).commit(g,u);return ne(null),k}catch(g){throw ne(g instanceof Error?g.message:JSON.stringify(g)),g}};_e=new xo(A,B,{documentId:n,title:r,sourcePath:e,documentKind:$r?"asset":"source",audit:P,...E.hierarchyRoots?{hierarchyRoots:E.hierarchyRoots}:{},...Je==="project-file"&&Xt?{modelSource:{kind:Je,path:Xt}}:Je==="entity"&&mt?{modelSource:{kind:Je,entityId:mt}}:{}});const rt={documentId:n,sourcePath:e,root:E.root,animations:E.root.animations,scene:B,defaultAdapter:_e,commit:ee};He=l?.(rt)??null;const Mt=He?_e:null;!He&&M&&(He=M({store:A,scene:B,...E.hierarchyRoots?{hierarchyRoots:E.hierarchyRoots}:{}}),_e.dispose()),Be=c&&vt?Gs().openPersistence({binding:c,document:tr,history:vt}):null,Be&&Be.catch(u=>{!Ct&&q.current?.content===sr&&ne(u instanceof Error?u.message:JSON.stringify(u))});const fe=He?.adapter??_e;if(!s.dressing){V.outputColorSpace=kr,V.toneMapping=Jt??eo,V.shadowMap.enabled=!0,V.shadowMap.type=to,V.info.autoReset=!1,V.setPixelRatio(Math.min(window.devicePixelRatio,2)),De&&V.setClearColor(0,0);const u=Br===!1?null:xe&&"environment"in xe?xe.environment():Di(V),g=ws(re);s.dressing=Ti(s.scene,{environment:u,background:!De&&i===void 0&&Wr!==!1,keyLight:!1,grid:Zt===!0,content:E.root}),!De&&i!==void 0?s.scene.background=new pe(i):!De&&g.background!==null&&(s.scene.background=new pe(g.background)),s.defaultEnvironment=s.scene.environment,s.defaultBackground=s.scene.background;{const k=new Vi(s.scene,N);s.presentationRig=k,bs(n,le);const h=()=>{const m=ct(n);if(k.apply(m,V,Jt),s.viewport?.setStageFunction(m.world,m.interaction),s.viewport?.setFieldOfView(m.camera.fov),s.viewport?.setSelectionMarks(m.overlays.selection),s.viewport?.setGridMajorEvery(m.overlays.grid.majorEvery),s.viewport?.setAxisLines(m.overlays.axes),s.viewport?.setNavigation(m.overlays.navigation),s.viewport?.setGridVisible(m.overlays.grid.visible),s.session){const y=s.session.presentation().mode==="wireframe"&&m.xray.enabled&&m.xray.alpha<=0;s.session.selectionOutlineEnabled=!er&&zt.current&&m.overlays.selection.outline&&!y,s.session.selectionOriginsEnabled=!er&&m.overlays.selection.origins,s.session.setXray(m.xray)}N()};s.applyPresentation=h,h(),s.cleanups.push(vr(h)),s.cleanups.push(di(()=>{k.forgetFailedImages(),h()})),s.cleanups.push(()=>{k.dispose(),s.presentationRig===k&&(s.presentationRig=null)})}s.cleanups.push(()=>{s.defaultBackground instanceof Os&&s.defaultBackground!==s.dressing?.backgroundTexture&&s.defaultBackground.dispose()})}const Kr=(u,g)=>{const k=s.adapter,h=s.viewport;if(!k||!h)return null;const m=re.getBoundingClientRect(),y=new Tt((u-m.left)/Math.max(m.width,1)*2-1,-((g-m.top)/Math.max(m.height,1))*2+1),R=new Rs;R.layers.enableAll(),R.params.Line2={threshold:4},R.setFromCamera(y,s.session?.camera()??h.camera);const J=s.presentationAdapter,ge=Y=>{for(let Z=Y;Z;Z=Z.parent){const it=J?.hierarchy.idForObject3D?.(Z)??k.hierarchy.idForObject3D?.(Z);if(it)return it}return null};let je=null;for(const Y of R.intersectObjects([...A.objectMap.values()],!0)){if(Fi(Y.object))continue;const Z=ge(Y.object);if(Z){je={distance:Y.distance,id:Z};break}}const jt=h.visibleHelpers().filter(Y=>Y.userData.volterPickable===!0);for(const Y of R.intersectObjects(jt,!0)){let Z=null,it=!0;for(let ot=Y.object;ot;ot=ot.parent)ot.visible||(it=!1),Z??=ot.userData.volterPicksAs??null;if(!it)continue;const ls=Z?ge(Z):null;if(ls){(!je||Y.distance<je.distance)&&(je={distance:Y.distance,id:ls});break}}return je?.id??null};if(!s.viewport){s.viewport=new fo(re,s.scene,A,G,{renderer:V,authoring:()=>s.adapter??fe,pick:Kr,drawCamera:()=>s.session?.camera()??s.viewport.camera,publishPickContext:!1,onProjectionChange:vn,chromeInsetPx:w||Nr?0:gr,lightRig:!1}),Zt===!0&&s.viewport.grid.removeFromParent();const u=g=>{const k=Kr(g.clientX,g.clientY),h=k&&s.adapter?Ve(s.adapter.hierarchy,k):null;h&&Or.current?.(h)};G.addEventListener("dblclick",u),s.cleanups.push(()=>G.removeEventListener("dblclick",u))}const S=s.viewport;if(Qe){const u=S.camera;s.scene.add(u);const g=new Lt;g.name="volter:document-studio",g.add(Qe),u.add(g),s.documentStudio=g,s.cleanups.push(()=>{Qe.removeFromParent(),g.removeFromParent(),s.documentStudio===g&&(s.documentStudio=null),u.removeFromParent()})}if(p){const u=new Lt;u.name="__object3d_document_overlay",Js(u,"editorHelper",!0),B.add(u),Pe=p.setup({root:E.root,scene:B,renderer:V,overlay:u,camera:()=>s.session?.camera()??S.camera,writable:c!==void 0||o!==void 0});const g=h=>{const m=re.getBoundingClientRect(),y=new Tt((h.clientX-m.left)/Math.max(m.width,1)*2-1,-((h.clientY-m.top)/Math.max(m.height,1))*2+1),R=new Rs;return R.layers.enableAll(),R.setFromCamera(y,s.session?.camera()??S.camera),{pointerId:h.pointerId,button:h.button,buttons:h.buttons,clientX:h.clientX,clientY:h.clientY,altKey:h.altKey,ctrlKey:h.ctrlKey,metaKey:h.metaKey,shiftKey:h.shiftKey,ray:R.ray.clone(),hits:R.intersectObjects([E.root,u],!0)}};ce=new Xo({begin:h=>{if(!c&&!o)throw new Error("This Asset Lab document has no persistence binding; project gestures are read-only.");return Pe.begin(h)},persist:async h=>{await ee(h)},reportError:h=>ne(h instanceof Error?h.message:JSON.stringify(h))});const k=h=>{h.preventDefault(),h.stopPropagation()};bt=h=>{h.target instanceof Element&&h.target.closest('[role="alert"], [role="toolbar"]')!==null||ce?.begin(g(h))&&(k(h),h.isTrusted&&re.setPointerCapture?.(h.pointerId))},yt=h=>{ce?.hasActiveGesture()&&(k(h),ce.update(g(h)))},St=h=>{ce?.hasActiveGesture()&&(k(h),re.hasPointerCapture?.(h.pointerId)&&re.releasePointerCapture?.(h.pointerId),ce.commit(g(h)))},xt=h=>{ce?.hasActiveGesture()&&(k(h),ce.cancel(h.pointerId))},Pt=h=>{h.key!=="Escape"||!ce?.hasActiveGesture()||(h.preventDefault(),ce.cancel())},Gr=()=>{G.addEventListener("pointerdown",bt,!0),G.addEventListener("pointermove",yt,!0),G.addEventListener("pointerup",St,!0),G.addEventListener("pointercancel",xt,!0),window.addEventListener("keydown",Pt)}}const Re=s.content,Yr=[...A.shell.selectedEntityIds],st=s.adapter,xn=s.presentationAdapter,Pn=new Map(A.objectMap),We=s.session?.root,Cn=s.frame,kn=s.syncHostScene,Mn=dt.current,En=pt.current,On=ht.current,Xr=s.session?.neutralBackgroundTexture(),Rn=s.dressing.lights.map(u=>u.visible),jn=s.cleanups.length,Tn=s.initialized;if(Ur=()=>{B.removeFromParent(),wt&&wt.add(E.root),Re&&s.scene.add(Re.scene),s.adapter=st,s.presentationAdapter=xn,s.content=Re,s.frame=Cn,s.syncHostScene=kn,s.initialized=Tn;for(const u of s.cleanups.splice(jn))u();!We&&s.session&&(s.session.dispose(),s.session=null),A.objectMap.clear();for(const[u,g]of Pn)A.objectMap.set(u,g);Re&&A.bindScene(Re.scene,V,S.batchedRenderer,S.camera),We&&st&&s.session?.replaceContent(We,st),dt.current=Mn,pt.current=En,ht.current=On,ft.current=st,Hr(st),Xr!==void 0&&s.session?.setNeutralBackground(Xr),s.dressing?.lights.forEach((u,g)=>{u.visible=Rn[g]??!0}),We&&(s.dressing?.frameContent(We),s.presentationRig?.placeFloor(We)),A.shell.selectMultiple(Yr),A.notifyIngestObjectMapEdit()},Re?.scene.removeFromParent(),s.scene.add(B),s.adapter=fe,s.presentationAdapter=Mt,s.content=sr,A.bindScene(B,V,S.batchedRenderer,S.camera),A.setOrbitTarget(S.orbitControls.target),A.objectMap.clear(),B.traverse(u=>{const g=Mt?.hierarchy.idForObject3D?.(u)??fe.hierarchy.idForObject3D?.(u);g&&A.objectMap.set(g,u)}),s.session)s.session.replaceContent(E.root,fe);else{const u=Us(Rr.current),g=Us(jr.current)??u,k=ct(n).camera;S.setFieldOfView(k.fov);const h=Nt.current,m=qt!==void 0&&Kt!==void 0&&Yt!==void 0;if(!h&&!m){const y=S.orbitControls.target,R=S.camera.position.distanceTo(y);S.camera.position.copy(y).addScaledVector(new z(...k.opening).normalize(),R)}if(g||S.focusOn(E.root),h){const y=new z(...h.target),R=new z(...h.direction).normalize();S.camera.position.copy(y).addScaledVector(R,h.distance),S.camera.up.set(0,1,0),h.up&&S.camera.up.set(...h.up),S.orbitControls.target.copy(y)}else if(m){const y=g??br(E.root),R=y.getCenter(new z),J=new z(qt,Kt,Yt).normalize(),ge=At(y,S.camera,J)*Math.min(10,Math.max(.1,_??1));S.camera.position.copy(R).add(J.multiplyScalar(ge)),S.orbitControls.target.copy(R)}if(s.session=new Uo(n,E.root,s.scene,V,S,fe,De?null:i===void 0?s.dressing.backgroundTexture:new pe(i),u),s.session.selectionOutlineEnabled=!er&&zt.current,s.session.setCameraViewSource(Vr.current??null),s.applyPresentation?.(),Nt.current?.projection==="orthographic"&&s.session.setProjection("orthographic"),!De&&i===void 0&&s.dressing.backgroundTexture){const y=s.session;s.cleanups.push(Ai(()=>{const R=ws(re).background,J=s.defaultBackground;s.defaultBackground=R!==null?new pe(R):Li(),y.neutralBackgroundTexture()===J&&y.setNeutralBackground(s.defaultBackground),J instanceof Os&&J!==s.dressing?.backgroundTexture&&J.dispose()}))}}const nt=$.camera;nt&&(S.setPose(nt.position,nt.target,nt.fov||void 0,nt.up),S.setProjection(_r),$.camera=null);const K=s.session;dt.current=tr,pt.current=Be,ht.current=Pe,ft.current=fe,Hr(fe);const nr=pi(le)?.all?.lighting!==void 0||fi(le)?null:Qe?{all:{lighting:{source:"studio",studioPreset:ys.id,auto:null}}}:zr===!1?{all:{lighting:{source:"scene"}}}:null,ir=Tr.current??null;bs(n,le,nr&&ir?mi(nr,ir):ir??nr);const or=new Set(ba);let Zr;const Jr=()=>{const u=s.session?.presentation().mode;u!==Zr&&(Zr=u,s.applyPresentation?.()),!(u===void 0||!or.has(u))&&ct(n).drawMode!==u&&gi(n,{drawMode:u})},ar=vi(n).drawMode;ar!==void 0&&or.has(ar)&&s.session?s.session.setMode(ar):Jr();const Vn=s.session?.subscribe(Jr),An=vr(()=>{const u=s.session,g=ct(n).drawMode;u&&u.presentation().mode!==g&&or.has(u.presentation().mode)&&u.setMode(g)});s.cleanups.push(()=>{Vn?.(),An()});const Et=[];E.root.traverse(u=>{u.isLight&&Et.push(u)});const Ln={light:Et.length>0,"directional-light":Et.some(u=>u.isDirectionalLight)};s.contentLights=Et,s.contentHas=Ln,s.dressing.frameContent(E.root),s.presentationRig?.placeFloor(E.root),s.cleanups.push(A.shell.subscribe(()=>s.presentationRig?.placeFloor(E.root)));const Qr=new Set;A.shell.selectMultiple(Yr.filter(u=>{const g=A.objectMap.get(u)??Ve(fe.hierarchy,u);if(g===null&&!A.objectMap.has(u))return!1;const k=g??u;return Qr.has(k)?!1:(Qr.add(k),!0)})),A.notifyIngestObjectMapEdit(),K.syncSelectionPresentation(),Gr?.(),ne(null),w||Ss(n);let Ot=B.background;K.setNeutralBackground(Ot??s.defaultBackground);const ze=$.presentation;ze&&(K.setMode(ze.mode),K.setBackground(ze.background),K.setProjection(ze.projection),K.setSkeleton(ze.skeleton),K.setBounds(ze.bounds),$.presentation=null);const Fn=()=>{s.viewport?.alignGridToView(K.camera(),V.domElement.width),s.scene.environment=B.environment??s.defaultEnvironment,s.scene.fog=B.fog,s.scene.environmentIntensity=B.environmentIntensity,s.scene.environmentRotation.copy(B.environmentRotation),s.scene.backgroundIntensity=B.backgroundIntensity,s.scene.backgroundBlurriness=B.backgroundBlurriness,s.scene.backgroundRotation.copy(B.backgroundRotation);const u=s.presentationRig;if(u){const g=u.resolveSource({...s.contentHas,environment:B.environment!==null}),k=u.environment();k&&(s.scene.environment=k.texture??s.defaultEnvironment,s.scene.environmentIntensity=k.intensity,s.scene.environmentRotation.set(0,k.rotation,0));const h=u.backdrop();h!=="keep"?(s.scene.background=h.value,s.scene.backgroundBlurriness=h.blur,s.scene.backgroundIntensity=h.intensity,s.scene.backgroundRotation.set(0,h.rotation,0),s.backdropOverridden=!0):s.backdropOverridden&&(s.scene.background=K.neutralBackgroundTexture(),s.scene.backgroundBlurriness=B.backgroundBlurriness,s.scene.backgroundIntensity=B.backgroundIntensity,s.backdropOverridden=!1);const m=g==="studio"&&u.presetId()===ys.id;s.documentStudio&&(s.documentStudio.visible=m);const y=g==="studio"&&!m||g==="preview"&&!u.sceneLightsShown()?s.darkenContentLights():0;u.update(K.camera()),wi(n,{source:g,presetId:u.presetId(),presetLights:u.lightsVisible(),documentStudio:s.documentStudio?s.documentStudio.visible:null,contentLights:s.contentLights.length,contentLightsDarkened:y,environmentIntensity:s.scene.environmentIntensity,environmentImage:u.imageReport().shown,environmentImagePending:u.imageReport().pending,toneMapping:String(V.toneMapping)})}Ot!==B.background&&(Ot=B.background,K.setNeutralBackground(Ot??s.defaultBackground))};s.syncHostScene=Fn,K.setBeforeRender(()=>s.syncHostScene?.()),K.setPresentsFrames(!0);const Dn=u=>{Ct||!(u>0)||!Number.isFinite(u)||(s.contentSeconds+=u,s.transportAdvances++,E.update?.(u))},_n=_s(E.root,s.transport);s.cleanups.push(()=>_n.dispose());const Ce=$.transport;Ce&&(Ce.activeSubject&&s.transport.setActiveSubject(Ce.activeSubject),s.transport.setLoop(Ce.range.loop),s.transport.setTimeScale(Ce.timeScale),s.transport.seek(Ce.time),Ce.playbackState==="playing"?s.transport.play():Ce.playbackState==="paused"&&s.transport.pause(),$.transport=null);let cr=performance.now();const es=typeof E.onChange=="function";let lr=!0;const Rt=()=>{lr=!0};if(es){const u=E.onChange(Rt),g=A.shell.subscribe(Rt),k=["pointerdown","pointermove","pointerup","pointerleave","wheel","keydown","keyup"];for(const h of k)G.addEventListener(h,Rt,{capture:!0,passive:!0});rr=()=>{u(),g();for(const h of k)G.removeEventListener(h,Rt,{capture:!0})}}let ts=-1;const rs=new js,ss=new js,ns=new Tt,is=new Tt;let os,as=null,cs=Number.NaN;const Hn=u=>{if(!es||lr||u>0||Ps()!==ts||K.needsFrame()||s.presence?.live()||Pe?.prepareFrame||Pe?.update||(S.batchedRenderer.batches?.length??0)>0)return!0;const g=K.camera();return g.updateMatrixWorld(),V.getDrawingBufferSize(is),!g.matrixWorld.equals(rs)||!g.projectionMatrix.equals(ss)||!is.equals(ns)||s.scene.background!==os||V.toneMapping!==as||V.toneMappingExposure!==cs},Bn=()=>{lr=!1,ts=Ps();const u=K.camera();rs.copy(u.matrixWorld),ss.copy(u.projectionMatrix),V.getDrawingBufferSize(ns),os=s.scene.background,as=V.toneMapping,cs=V.toneMappingExposure},Wn=(u,g)=>{if(Ct||!V||!S)return;const k=V,h=S,m=K?.profiler;m?.beginFrame(),g&&(cr=u);const y=Math.min((u-cr)/1e3,.1);cr=u,m?.beginPhase();const R=s.transport.tick(y);if(R>0&&Dn(R),Pe?.prepareFrame?.(y),Pe?.update?.(y),m?.endPhase("animation"),m?.beginPhase(),s.presence?.syncMarkers(y),S.update(y),w||Fs(n,y),S.batchedRenderer.update(y),m?.endPhase("editor"),!g&&!Hn(R)){m?.endFrame();return}m?.beginPhase(),k.info.reset();const J=!Ze.current&&bi()===n;J&&yi(n);const ge=J?Date.now():0,je=s.scene.overrideMaterial,jt=K.presentation().mode;jt!=="uv"&&jt!=="vertex-colors"&&(s.scene.overrideMaterial=B.overrideMaterial);try{h.renderWithInfrastructure(()=>{K.renderViewport(y),h.renderViewCube(k)})}finally{s.scene.overrideMaterial=je}K.servePresentedFrame(),Bn(),Ze.current||(Ze.current=!0,J&&Si("first-render",Date.now()-ge),xi(n),Ut("ready")),m?.reportRender({gpuMs:null,drawCalls:k.info.render.calls,triangles:k.info.render.triangles,geometries:k.info.memory.geometries,textures:k.info.memory.textures}),m?.endPhase("render"),m?.endFrame();const Y=Dt.current;if(Y&&ae&&Pi(ae.shell)===A.shell){const Z=K.cameraPose();Y.frameTime=y*1e3,Y.fps=y>0?1/y:0,Y.drawCalls=k.info.render.calls,Y.triangles=k.info.render.triangles,Y.cameraPosition.x=Z.position[0],Y.cameraPosition.y=Z.position[1],Y.cameraPosition.z=Z.position[2],Y.cameraTarget.x=Z.target[0],Y.cameraTarget.y=Z.target[1],Y.cameraTarget.z=Z.target[2]}};if(s.frame=Wn,ut.current=s.rendererSession,!s.initialized){w||(s.cleanups.push(Ds({camera:S.camera,drawCamera:()=>s.session?.camera()??S.camera,orbit:S.orbitControls,scene:s.scene},()=>null,(m,y)=>S.setHelper(m,y),{documentId:n})),Ke(()=>import("./stage-presence-markers-0CDfO5f4.js"),__vite__mapDeps([69,4,5,7,8,9,10,6,11,12,13,26,27,18,2,70])).then(m=>{if(s.isClosed||q.current!==s||s.presence)return;const y=m.bindStagePresenceMarkers({scene:s.scene,store:A,documentId:n,container:G,canvas:re,viewport:S,readVisibleCameraPose:()=>{const R=s.session?.camera()??S.renderCamera,J=R.getWorldPosition(new z),ge=R.fov;return{position:J,target:S.orbitControls.target,fov:typeof ge=="number"?ge:0}}});s.presence=y,s.cleanups.push(()=>y.dispose())}),s.cleanups.push(So(K,Ws(n))),s.cleanups.push(Ci({id:n,label:r,kind:$r?"asset":"source",profiler:K.profiler}))),!w&&!Nr&&s.cleanups.push(ki(n,()=>({adapter:s.adapter,nodeId:s.adapter?.selection?.get()[0]??null})));const u=w?`${n}#chromeless-${++ya}`:n;s.cleanups.push(Mi({id:u,label:r,contentClock:()=>s.contentSeconds,transportAdvances:()=>s.transportAdvances})),s.cleanups.push(A.shell.onViewportAction(m=>{switch(m.type){case"focus-selection":case"focus-scene":!s.session?.frame()&&s.session?.root&&S.focusOn(s.session.root);break;case"focus-entity":{const y=s.adapter?Ve(s.adapter.hierarchy,m.id):null;y&&S.focusOn(y);break}case"snap-selection-to-floor":S.snapSelectionToFloor();break;case"set-view-preset":s.session?s.session.setViewPreset(m.preset==="perspective"?"isometric":m.preset,"view"):S.setViewPreset(m.preset);break;case"toggle-camera-view":s.session?.toggleCameraView();break;case"frame-all":!s.session?.frame(1,"all")&&s.session?.root?S.focusOn(s.session.root):s.session||S.focusOnScene();break;case"zoom-view":s.session?.cameraView()&&!s.session.cameraViewLocked()?s.session.zoomCameraView(m.direction>0?1.2:1/1.2):S.zoomStep(m.direction);break;case"step-view":if(s.session?.cameraView()&&!s.session.cameraViewLocked())break;S.stepView(m.step);break;case"toggle-projection":{const y=s.session;if(y?.cameraView())break;const J=(y?y.projection():S.projection)==="perspective"?"orthographic":"perspective";y?y.setProjection(J):S.setProjection(J);break}case"set-camera-pose":S.setPose(m.position,m.target,m.fov);break}}));let g="";s.cleanups.push(A.shell.subscribe(()=>{S.objectMap=A.objectMap,S.syncFromStore(),s.session?.syncSelectionPresentation();const m=(s.adapter?.selection?.get()??[]).join("\0");m!==g&&(g=m,w||Ss(n))}));const k=()=>{const m=Math.max(1,G.clientWidth),y=Math.max(1,G.clientHeight),R=V.getPixelRatio();(re.width!==Math.floor(m*R)||re.height!==Math.floor(y*R))&&V.setSize(m,y,!1),S.resize(m,y),s.session?.resize(m,y),s.rendererSession.redraw()},h=new ResizeObserver(k);h.observe(G),s.cleanups.push(()=>h.disconnect()),k(),s.initialized=!0,xs()}S.objectMap=A.objectMap,S.syncFromStore(),s.rendererSession.setActive(lt.current),s.rendererSession.redraw(),qr=!0,Re?.dispose()}catch(ee){if(!qr)try{Ur?.()}finally{wt&&E.root.parent===B&&wt.add(E.root),sr.dispose()}console.error(`[object3d document] ${r}: source update failed`,ee),ne(ee instanceof Error?ee.message:String(ee))}},Sn=Er.current.then(yn);return Er.current=Sn.catch(Se=>{O||ne(Se instanceof Error?Se.message:String(Se))}),()=>{O=!0}},[l,i,t,qt,Kt,Yt,r,n,ue,Wr,Br,Zt,zr,Qe,Jt,w,mt,Je,Xt,p,c,o,D,$,Fe,M,e,Le]),f.useEffect(()=>{const O=ut.current,de=v&&!Ar.current;Ar.current=v,O&&(de&&(Ze.current=!1,ci(n)),O.setActive(v||Le))},[v,n,Le]);const gt=q.current,Qt=Gt==="ready"&&gt?.viewport?{store:gt.store,viewport:gt.viewport,canvas:gt.surface.canvas}:null,bn=f.useCallback(()=>{const O=ft.current;return O?{adapter:O,nodeId:O.selection?.get()[0]??O.hierarchy.roots()[0]?.id??null}:null},[]),Ir=d.jsx("div",{"data-testid":"tool-object3d-authoring","data-volter-chromeless":w||void 0,className:ue?"volter-object3d-studio-stage":void 0,style:{position:w||he?"relative":"absolute",...w?{width:"100%",height:"100%"}:he?{flex:1,minHeight:0}:{inset:-gr},overflow:"hidden",background:ue?void 0:qe.surface.raised,pointerEvents:"auto"},children:d.jsxs("div",{ref:_t,style:{position:"absolute",inset:0,minHeight:0,overflow:"hidden"},children:[d.jsx(Sa,{canvasHostRef:Ht}),v&&Qt&&!w?d.jsx(f.Suspense,{fallback:null,children:d.jsx(ma,{stage:Qt})}):null,ae&&!w?d.jsx(ia,{store:ae,documentId:n,stage:Qt,active:v,chrome:"document"}):null,ae&&Fr?d.jsx(Fr.Overlays,{store:ae,documentId:n,cameraPreviewRef:Dr,mountStatus:pn,rootIds:mn}):null,$t&&d.jsx("div",{role:"alert",style:{position:"absolute",insetInline:0,top:0,display:"flex",justifyContent:"center",padding:"var(--volter-space-3)",pointerEvents:"none"},children:d.jsxs("div",{className:"volter-chrome-island",style:{display:"flex",alignItems:"center",gap:"var(--volter-space-3)",maxWidth:"80%",padding:"var(--volter-space-2) var(--volter-space-3)",borderRadius:"var(--volter-radius-md)",border:`var(--volter-stroke-resting) solid ${qe.semantic.danger}`,background:qe.surface.raised,color:qe.semantic.danger,pointerEvents:"auto"},children:[d.jsx("span",{children:$t}),d.jsx(Te,{size:"compact","aria-label":"Dismiss",onClick:()=>ne(null),"data-testid":"object3d-document-error-dismiss",children:d.jsx(we,{icon:ve.action.close})})]})}),!$t&&Gt==="building"&&d.jsx(Mo,{testId:"object3d-document-status",children:Eo}),d.jsx("div",{style:{position:"absolute",inset:w||he?0:gr,pointerEvents:"none"},children:!w&&Gt==="ready"&&q.current&&d.jsx(pa,{viewport:q.current.viewport,documentId:n,session:q.current.session,store:q.current.store.shell,projection:_r,displayName:r,...W?{statistics:W}:{},...be!==void 0?{subject:be}:{},...Me?{gridScale:Me}:{},objectName:O=>(de=>de?Ve(de.hierarchy,O)?.name:void 0)(q.current?.adapter)??q.current?.store.objectMap.get(O)?.name??null})})]})});return he?d.jsx(li,{documentId:n,active:v,type:F??(mt?"entity":"model"),title:r,status:e,selection:bn,fill:!0,children:d.jsxs("div",{className:"volter-object3d-asset-workspace",children:[Ir,d.jsx(ko,{transport:q.current?.transport??null})]})}):Ir}function Pa(n){return d.jsx(hn,{...n})}const Qa=Object.freeze(Object.defineProperty({__proto__:null,Object3DDocumentViewport:hn,ToolObject3DAuthoring:Pa},Symbol.toStringTag,{value:"Module"}));export{hn as O,Qa as S,aa as V,zs as s,ea as t};
@@ -1 +1 @@
1
- import{a as e}from"./jsx-runtime-DPjLkJKQ.js";import{ar as y,as as f,ad as g,at as x,au as S}from"./index-BRJMIUK0.js";import{r as j}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";class w extends j.Component{state={error:null};static getDerivedStateFromError(t){return{error:t}}componentDidCatch(t,o){console.error(`[stories] ${this.props.modulePath} — story "${this.props.storyName}" crashed while rendering:`,t,o.componentStack)}render(){return this.state.error?e.jsxs("div",{style:{padding:12,fontSize:12,color:g.semantic.danger,maxWidth:640},children:[e.jsxs("div",{style:{fontWeight:600,marginBottom:4},children:["Story crashed: ",e.jsx("code",{children:this.props.modulePath})," — export"," ",e.jsx("code",{children:this.props.storyName})]}),e.jsx("div",{style:{whiteSpace:"pre-wrap"},children:String(this.state.error)})]}):this.props.children}}const a=new WeakMap;async function k(r,t,o,i,s){const n=a.get(r),c=(n?.generation??0)+1;a.set(r,{root:n?.root,generation:c}),y(r);const l=S();l&&await x(l.rootPath),await i.load();const{createRoot:m,flushSync:h}=await f(),p=a.get(r);if(!p||p.generation!==c)return null;const d=n?.root??m(r);return a.set(r,{root:d,generation:c}),h(()=>{d.render(e.jsx(w,{modulePath:t,storyName:o,children:e.jsx(i,{...s??{}})}))}),{root:d,unmount:()=>{queueMicrotask(()=>{const u=a.get(r);!u||u.generation!==c||!u.root||(a.delete(r),u.root.unmount())})}}}async function B(r,t,o,i){if(typeof o.play!="function")return{ran:!1};try{return await o.play({canvasElement:i}),{ran:!0}}catch(s){const n=String(s instanceof Error?s.message:s);return console.error(`[stories] ${r} — story "${t}"'s play() threw:`,s),{ran:!0,error:`[stories] ${r} — story "${t}"'s play() failed: ${n}`}}}export{k as m,B as r};
1
+ import{a as e}from"./jsx-runtime-DPjLkJKQ.js";import{at as y,au as f,af as g,av as x,aw as S}from"./index-C5ZAyrKq.js";import{r as w}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";class j extends w.Component{state={error:null};static getDerivedStateFromError(t){return{error:t}}componentDidCatch(t,o){console.error(`[stories] ${this.props.modulePath} — story "${this.props.storyName}" crashed while rendering:`,t,o.componentStack)}render(){return this.state.error?e.jsxs("div",{style:{padding:12,fontSize:12,color:g.semantic.danger,maxWidth:640},children:[e.jsxs("div",{style:{fontWeight:600,marginBottom:4},children:["Story crashed: ",e.jsx("code",{children:this.props.modulePath})," — export"," ",e.jsx("code",{children:this.props.storyName})]}),e.jsx("div",{style:{whiteSpace:"pre-wrap"},children:String(this.state.error)})]}):this.props.children}}const a=new WeakMap;async function k(r,t,o,i,s){const n=a.get(r),c=(n?.generation??0)+1;a.set(r,{root:n?.root,generation:c}),y(r);const d=S();d&&await x(d.rootPath),await i.load();const{createRoot:m,flushSync:h}=await f(),p=a.get(r);if(!p||p.generation!==c)return null;const l=n?.root??m(r);return a.set(r,{root:l,generation:c}),h(()=>{l.render(e.jsx(j,{modulePath:t,storyName:o,children:e.jsx(i,{...s??{}})}))}),{root:l,unmount:()=>{queueMicrotask(()=>{const u=a.get(r);!u||u.generation!==c||!u.root||(a.delete(r),u.root.unmount())})}}}async function B(r,t,o,i){if(typeof o.play!="function")return{ran:!1};try{return await o.play({canvasElement:i}),{ran:!0}}catch(s){const n=String(s instanceof Error?s.message:s);return console.error(`[stories] ${r} — story "${t}"'s play() threw:`,s),{ran:!0,error:`[stories] ${r} — story "${t}"'s play() failed: ${n}`}}}export{k as m,B as r};
@@ -0,0 +1,2 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/document-preview-three-CxmRhCcV.js","assets/content-bounds-DROIchTa.js","assets/hierarchy-marks-BuCO8Ke-.js","assets/workspace-arrangement-DqG5sUns.js","assets/index-C5ZAyrKq.js","assets/index-nmcBqr7Y.js","assets/_commonjsHelpers-D6-XlEtG.js","assets/index-D_NuPfjr.js","assets/jsx-runtime-DPjLkJKQ.js","assets/index-CtzuWnCS.js","assets/index-CinJrH5C.js","assets/index-FUuS4qwW.js","assets/client-DNXj_opT.js","assets/index-CPiRKiDC.css","assets/three.core-3arARmh6.js","assets/editor-layers-D-CTUqco.js","assets/renderer-ownership-BovSEcLv.js","assets/three.module-BLhyNg0e.js","assets/scene-framing-DkZKDwH3.js","assets/environment-Dg-YaLsA.js","assets/RoomEnvironment-BkknvS_I.js","assets/EXRLoader-CITMBvGd.js","assets/HDRLoader-BTGuGhVo.js","assets/standard-viewport-dressing-BW-dM_1h.js","assets/user-data-C84W0V47.js"])))=>i.map(i=>d[i]);
2
+ import{hf as O,hg as lt,ao as Q,aq as Kt,bh as zt,fP as It,bi as Vt,fQ as St,ap as tt,hh as Ht,af as g,eI as Xt,dw as Zt,hi as Ut,f2 as Wt,fd as Z,dm as Yt,am as Mt,hj as qt,fk as Jt,gC as mt,eK as Qt,b8 as te,an as U,c4 as Et,_ as A,hk as ee,hl as ne,O as oe,hm as X,hn as re,d4 as se}from"./index-C5ZAyrKq.js";import{a as m}from"./jsx-runtime-DPjLkJKQ.js";import{a as ie}from"./three-contract-Dkt6PmWY.js";import{a as ae}from"./object3d-document-session-registry-CMRJdFp6.js";import{O as ce}from"./Object3DDocumentViewport-D6QoHfa_.js";import{S as ue}from"./standard-viewport-dressing-BW-dM_1h.js";import{t as de}from"./viewport-surface-status-TUfhXKR9.js";import{r as w}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{withStoryMountTurn as vt,lastStoryMountPhaseTiming as le}from"./story-three-preview-CgcLF5lE.js";import{m as me}from"./three-story-model-BjKr7OMn.js";import{c as pe}from"./content-bounds-DROIchTa.js";import{EDITOR_LAYER as he}from"./editor-layers-D-CTUqco.js";import{setUserData as fe}from"./user-data-CODoGZqA.js";import{bh as R,co as Dt,K as xe,cx as ge,db as ye,cp as be,aI as we,N as Se,a$ as Me,c0 as Ee,b_ as ve,el as De,I as _e,fo as P,ex as Oe,cj as Pe}from"./three.core-3arARmh6.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";import"./environment-Dg-YaLsA.js";import"./three.module-BLhyNg0e.js";import"./RoomEnvironment-BkknvS_I.js";import"./EXRLoader-CITMBvGd.js";import"./HDRLoader-BTGuGhVo.js";import"./user-data-C84W0V47.js";import"./workspace-arrangement-DqG5sUns.js";import"./asset-preview-DxlSdRZn.js";import"./renderer-ownership-BovSEcLv.js";import"./hierarchy-marks-BuCO8Ke-.js";import"./studio-environment-R9qXUUcC.js";import"./KTX2Loader-CaqVE6nY.js";import"./GLTFLoader-KeoruJgS.js";import"./BufferGeometryUtils-B22h7jo4.js";import"./bitmap-label-Ct4k6ehY.js";import"./crash-null-boundary-v3a0uEgw.js";import"./events-156d8d12.esm-CYeuVCYr.js";import"./index-bQE2NA0D.js";import"./story-mount-turn-DFRTj5hi.js";import"./object-marks-BnvSuCTt.js";const L={neighbourGapFactor:.45,minGap:.5,districtGapFactor:.6,minDistrictGap:3},$=.7,Te={min:[0,0,0],max:[0,0,0]};function et(t){return[...t.min,...t.max].some(r=>!Number.isFinite(r))?Te:{min:[Math.min(t.min[0],t.max[0]),Math.min(t.min[1],t.max[1]),Math.min(t.min[2],t.max[2])],max:[Math.max(t.min[0],t.max[0]),Math.max(t.min[1],t.max[1]),Math.max(t.min[2],t.max[2])]}}function nt(t){return[t.max[0]-t.min[0],t.max[1]-t.min[1],t.max[2]-t.min[2]]}function pt(t){const e=nt(et(t));return e[0]*e[2]}function ke(t){return-et(t).min[1]}function _t(t){const e=Math.max(t[0],t[2]),r=Math.max(.15,.1*e);return[Math.max(t[0]+2*r,$),Math.max(t[2]+2*r,$)]}function Ot(t){return Math.max(t[0],t[1])}function Be(t){return t.map(e=>({item:e,bounds:et(e.bounds)})).sort((e,r)=>{const n=pt(e.bounds)-pt(r.bounds);return n!==0?n:e.item.id<r.item.id?-1:1})}function Re(t){const e=Math.max($,...t.map(({bounds:r})=>Ot(_t(nt(r)))));return Math.max(10,2.2*e)}function Ce(t,e,r){const n=Re(t),s=[];let o={slots:[],xEdge:0,depth:0,previousSpan:null};const i=()=>{o.slots.length>0&&s.push({slots:o.slots,xEdge:o.xEdge,depth:o.depth}),o={slots:[],xEdge:0,depth:0,previousSpan:null}};for(const{item:a,bounds:u}of t){const c=nt(u),d=_t(c),l=Ot(d),p=o.previousSpan===null?0:Math.max(r,e*Math.max(o.previousSpan,l));o.slots.length>0&&o.xEdge+p+d[0]>n&&i();const y=o.previousSpan===null?0:p,b=o.xEdge+y+d[0]/2;o.xEdge=b+d[0]/2,o.depth=Math.max(o.depth,d[1]),o.previousSpan=l,o.slots.push({item:a,bounds:u,size:c,footprint:d,centreX:b})}return i(),s}function ht(t,e,r,n,s){const o=Ce(e,n,s),i=[];let a=r,u=null,c=0;for(const d of o){u!==null&&(a+=Math.max(s,n*Math.max(u,d.depth)));const l=a+d.depth/2;a=l+d.depth/2,u=d.depth,c=Math.max(c,d.xEdge);for(const p of d.slots)i.push({id:p.item.id,groupKey:t,translation:[p.centreX-(p.bounds.min[0]+p.bounds.max[0])/2,ke(p.bounds),l-(p.bounds.min[2]+p.bounds.max[2])/2],anchor:[p.centreX,0,l],size:p.size,footprint:p.footprint})}return{placements:i,xEdge:c,depth:a-r}}function je(t){return Math.min(3,Math.max(.6,.08*t))}function Ne(t,e={}){const r=e.neighbourGapFactor??L.neighbourGapFactor,n=e.minGap??L.minGap,s=e.districtGapFactor??L.districtGapFactor,o=e.minDistrictGap??L.minDistrictGap,i=new Map;for(const l of t){const p=i.get(l.groupKey);p?p.push(l):i.set(l.groupKey,[l])}const a=[];let u=0,c=null;for(const l of i.keys()){const p=Be(i.get(l)??[]),y=ht(l,p,0,r,n),b=je(Math.max(y.depth,$)),x=y.depth+2*b;c!==null&&(u+=Math.max(o,s*Math.max(c,x)));const h=u;u=h+x,c=x;const{placements:v,xEdge:V}=ht(l,p,h+b,r,n),_={minX:-b,maxX:V+b,minZ:h,maxZ:h+x};a.push({groupKey:l,items:v,extent:_,anchor:[(_.minX+_.maxX)/2,0,_.minZ]})}const d=a.length===0?{minX:0,maxX:0,minZ:0,maxZ:0}:{minX:Math.min(...a.map(l=>l.extent.minX)),maxX:Math.max(...a.map(l=>l.extent.maxX)),minZ:Math.min(...a.map(l=>l.extent.minZ)),maxZ:Math.max(...a.map(l=>l.extent.maxZ))};return{districts:a,extent:d}}const Pt={min:[0,0,0],max:[0,0,0]},Ae=.35,ft=20;function ot(t){return[...t.min,...t.max].every(e=>Number.isFinite(e))}function z(t){return ot(t)?{min:[Math.min(t.min[0],t.max[0]),Math.min(t.min[1],t.max[1]),Math.min(t.min[2],t.max[2])],max:[Math.max(t.min[0],t.max[0]),Math.max(t.min[1],t.max[1]),Math.max(t.min[2],t.max[2])]}:Pt}function Tt(t){const e=z(t);return[e.max[0]-e.min[0],e.max[1]-e.min[1],e.max[2]-e.min[2]]}function K(t){const e=t.map(z).filter(o=>ot(o));if(e.length===0)return Pt;const r=e[0],n=[r.min[0],r.min[1],r.min[2]],s=[r.max[0],r.max[1],r.max[2]];for(let o=1;o<e.length;o++){const i=e[o];n[0]=Math.min(n[0],i.min[0]),n[1]=Math.min(n[1],i.min[1]),n[2]=Math.min(n[2],i.min[2]),s[0]=Math.max(s[0],i.max[0]),s[1]=Math.max(s[1],i.max[1]),s[2]=Math.max(s[2],i.max[2])}return{min:n,max:s}}function W(t,e){const r=z(t);return{min:[r.min[0]+e[0],r.min[1]+e[1],r.min[2]+e[2]],max:[r.max[0]+e[0],r.max[1]+e[1],r.max[2]+e[2]]}}function Le(t){return"min"in t?{bounds:t}:{bounds:t.bounds,...t.overlay===!0?{overlay:!0}:{},...t.enclosure===!0?{enclosure:!0}:{}}}function Ge(t,e={}){if(e.overlay)return"volume";if(e.enclosure)return"environment-scale";const n=[...Tt(t)].sort((a,u)=>u-a),s=n[0]??0,o=n[1]??0;return(n[2]??0)<Ae&&o>=ft&&s>=ft?"unbounded-plane":null}function Fe(t){const e=t.map(Le).map(a=>({bounds:z(a.bounds),overlay:a.overlay===!0,enclosure:a.enclosure===!0})).filter(a=>ot(a.bounds)),r=e.map(a=>a.bounds),n=K(r);if(e.length<2)return{full:n,presence:n,helpers:[]};const s=e.map(a=>Ge(a.bounds,{overlay:a.overlay,enclosure:a.enclosure})),o=e.filter((a,u)=>s[u]===null).map(a=>a.bounds);if(o.length===0)return{full:n,presence:n,helpers:[]};const i=[];for(let a=0;a<e.length;a++){const u=s[a]??null;u!==null&&i.push({kind:u,bounds:e[a].bounds,size:Tt(e[a].bounds)})}return{full:n,presence:K(o),helpers:i}}function $e(t){const e=t.map(u=>({exhibit:u,presence:Fe(u.nodes)})),r=e.map(({exhibit:u,presence:c})=>({id:u.id,groupKey:u.groupKey,bounds:c.presence})),n=Ne(r),s=new Map;for(const u of n.districts)for(const c of u.items)s.set(c.id,c);const o=[],i=[],a=[];for(const{exhibit:u,presence:c}of e){const d=s.get(u.id);d&&(o.push({id:u.id,groupKey:u.groupKey,full:c.full,presence:c.presence,helpers:c.helpers,placement:d}),i.push(W(c.presence,d.translation)),a.push(W(c.full,d.translation)))}return{layout:n,exhibits:o,frame:K(i),fullFrame:K(a)}}const kt="volterBoardStoryId",Bt="volterBoardComponentKey",I="volter:board:no-story";function Ke(t){return{stories:t.length,modules:new Set(t.map(e=>e.modulePath)).size}}const Y="Ungrouped",xt="No story yet",ze=.9;function Ie(t){return t instanceof Error?t.message:String(t)}async function Ve(t,e,r){const n=Date.now();let s=null,o=null;try{s=await r(e),me(s.root)||(s.dispose(),s=null,o="The story mounted no three content.")}catch(a){o=Ie(a)}const i=le();return Ht({id:t.id,ms:Date.now()-n,runtimeMs:i?.runtimeMs??0,loadMs:i?.loadMs??0,fiberMs:i?.fiberMs??0,settleMs:i?.settleMs??0,ok:s!==null}),{identity:t,mounted:s,reason:o}}function Rt(t){t.traverse(e=>{e.layers.enable(he),fe(e,"editorHelper",!0)})}const He={color:3291977,roughness:.92,metalness:.04,polygonOffset:!0,polygonOffsetFactor:1,polygonOffsetUnits:2},gt=.06,Xe=0,yt=0,Ze=11124182,Ue=9413565;function We(t){const e=t.extent.maxX-t.extent.minX,r=t.extent.maxZ-t.extent.minZ,n=new Dt(new xe(e,gt,r),new ge(He));return n.name=`volter:board-pad:${t.groupKey||Y}`,n.position.set((t.extent.minX+t.extent.maxX)/2,Xe-gt/2,(t.extent.minZ+t.extent.maxZ)/2),n.receiveShadow=!0,Rt(n),n}function Ye(t,e){const r=t/2,n=e/2,s=[[-r,-n],[r,-n],[r,n],[-r,n]],o=[];for(let u=0;u<s.length;u++){const c=s[u],d=s[(u+1)%s.length];o.push(c[0],0,c[1],d[0],0,d[1])}const i=new Se;i.setAttribute("position",new Me(o,3));const a=new Ee(i,new ve({color:Ze,dashSize:.09,gapSize:.06}));return a.computeLineDistances(),a}function qe(t){const e=new R;e.name=`volter:board-ghost:${t.name}`,e.userData[Bt]=t.key;const[r,n]=t.placement.footprint,s=new Dt(new ye(r,n),new be({color:Ue,transparent:!0,opacity:.1,depthWrite:!1,side:we}));s.rotation.x=-Math.PI/2,s.position.y=yt;const o=Ye(r,n);return o.position.y=yt,e.add(s,o),e.position.set(t.placement.anchor[0],0,t.placement.anchor[2]),e}function Je(t,e,r){if(!r.componentName)return!0;const n=St(t,r.componentName,e);return!n||n.modulePath===e&&n.name===r.name}function Qe(t){return Ct(t).length}function Ct(t){const e=[],r=new Map,n=tt();for(const s of t)if(s.ok)for(const o of s.stories){const i=Q({modulePath:s.modulePath,regions:n});if(i.medium!=="three"){i.via==="undeclared"&&Kt(s.modulePath,i.reason);continue}if(!Je(t,s.modulePath,o))continue;const a=zt({modulePath:s.modulePath,...o.title===void 0?{}:{title:o.title}}),u=It(a),c=`${u}/${a.leaf}`;r.set(c,(r.get(c)??0)+1),e.push({identity:{id:`${s.modulePath}#${o.name}`,storyName:o.name,modulePath:s.modulePath,groupKey:u,groupLeaf:a.leaf,groupPath:Vt(a)},storyLabel:o.label,Component:o.Component})}return e.map(({identity:s,storyLabel:o,Component:i})=>({identity:{...s,label:(r.get(`${s.groupKey}/${s.groupLeaf}`)??0)>1?`${s.groupLeaf} · ${o}`:s.groupLeaf},Component:i}))}function tn(t,e){const r=new Set,n=[];for(const s of e){if(s.surface!=="three"||s.contentKind==="image")continue;const o=`${s.path}#${s.name}`;r.has(o)||(r.add(o),!St(t,s.name,s.path)&&n.push(s))}return n}function en(t,e,r){const n=new R;return n.name=`volter:board-exhibit:${t.label}`,n.position.set(...e.translation),n.add(r.root),n.userData[kt]=t.id,n}function q(t){return vt(async()=>{t.dispose()})}async function jt(t,e=[],r){return vt(n=>an(t,e,r,n))}async function nn(t,e,r){const n=[];for(const{identity:s,Component:o}of t){if(e?.aborted)break;n.push(await Ve(s,o,r))}return n}function on(t){return{min:t.min.toArray(),max:t.max.toArray()}}function rn(t){const e=new Map,r=new Map,n=[],s=[];for(const o of t){if(!o.mounted){s.push({id:o.identity.id,modulePath:o.identity.modulePath,storyName:o.identity.storyName,reason:o.reason??"The story produced no Object3D."});continue}const i=pe(o.mounted.root).map(a=>({bounds:on(a.box),overlay:a.overlay,enclosure:a.enclosure}));e.set(o.identity.id,o.mounted),r.set(o.identity.id,o.identity),n.push({id:o.identity.id,groupKey:o.identity.groupKey,nodes:i})}return{mounts:e,identities:r,measures:n,skipped:s}}function sn(t){const e=ze/2;return{id:`${t.path}#${t.name}`,groupKey:I,nodes:[{min:[-e,0,-e],max:[e,0,e]}]}}async function an(t,e,r,n){const s=Date.now(),o=Ct(t);O("candidate-collect",Date.now()-s),lt({candidateCount:o.length});const i=Date.now(),a=await nn(o,r,n);O("story-mounts",Date.now()-i);const u=Date.now(),{mounts:c,identities:d,measures:l,skipped:p}=rn(a);O("bounds",Date.now()-u);const y=Date.now(),b=tn(t,e),x=new Map(b.map(f=>[`${f.path}#${f.name}`,f])),h=$e([...l,...b.map(sn)]),v=h.layout,V=new Map(h.exhibits.map(f=>[f.id,f]));O("layout",Date.now()-y);const _=Date.now(),T=new R;T.name="volter:three-board";const k=new R;k.name="volter:board-chrome",Rt(k),T.add(k);const C=[],rt=[],st=[],it=[k];for(const f of v.districts){const M=f.groupKey===I,D=new R;D.name=`volter:board-district:${M?xt:f.groupKey||Y}`,T.add(D),k.add(We(f));for(const S of f.items){if(M){const N=x.get(S.id);if(!N)continue;const ut={key:S.id,name:N.name,path:N.path,line:N.line,placement:S},dt=qe(ut);D.add(dt),it.push(dt),st.push(ut);continue}const j=c.get(S.id),H=d.get(S.id),E=V.get(S.id);!j||!H||!E||(D.add(en(H,S,j)),C.push({...H,placement:S,fullSize:[E.full.max[0]-E.full.min[0],E.full.max[1]-E.full.min[1],E.full.max[2]-E.full.min[2]],helpers:E.helpers}))}rt.push({groupKey:f.groupKey,label:M?xt:f.groupKey||Y,placement:f})}const $t=C.flatMap(f=>f.helpers.map(M=>({exhibitId:f.id,exhibitLabel:f.label,kind:M.kind,size:M.size})));let at=!1;const ct={root:T,exhibits:C,districts:rt,ghostSlots:st,skipped:p,frameBounds:h.frame,openingFrameBounds:h.exhibits[0]?W(h.exhibits[0].presence,h.exhibits[0].placement.translation):h.frame,helperVolumes:$t,dispose(){if(!at){at=!0;for(const f of it)f.traverse(M=>{const D=M;D.geometry?.dispose();const S=D.material;if(Array.isArray(S))for(const j of S)j.dispose();else S?.dispose()}),f.removeFromParent();for(const f of c.values())try{f.dispose()}catch(M){console.error("[three-board] a story mount failed to dispose.",M)}c.clear(),T.clear()}}};if(O("assemble",Date.now()-_),lt({exhibitCount:C.length,skippedCount:p.length}),r?.aborted)throw ct.dispose(),new Error("The 3D board build was superseded by a newer one.");return ct}function cn(t){return Nt(t,kt)}function un(t){return Nt(t,Bt)}function Nt(t,e){let r=t;for(;r;){const n=r.userData[e];if(typeof n=="string")return n;r=r.parent}return null}const At="3D";let F=null,Lt=0;const J=new Set;function bt(){Lt++;for(const t of J)t()}function dn(t){return J.add(t),()=>{J.delete(t)}}function ln(){return Lt}function Gt(t){return Number.isFinite(t)?t>=10?`${Math.round(t)} m`:t>=1?`${t.toFixed(1)} m`:`${t.toFixed(2)} m`:"—"}function mn(t,e,r){const n=Ft(e,r);return n?qt(Jt,t,{modulePath:n.modulePath,storyName:n.storyName,title:n.label}):null}function pn(t,e,r){const n=Mn(t,e);if(!n)return null;const s={definitionLocation:()=>({file:n.path,line:n.line})};return r?mt(s,n.key,"definition",r):mt(s,n.key,"definition")}function hn(t){const e=tt(),r=t.filter(o=>o.ok&&Q({modulePath:o.modulePath,regions:e}).medium==="three"),n=w.useRef([]),s=n.current;return(s.length!==r.length||s.some((o,i)=>o!==r[i]))&&(n.current=r),n.current}function fn({documentId:t,active:e,store:r}){const n=w.useSyncExternalStore(Mt,U),s=hn(n),[o,i]=w.useState({status:"idle"});e&&ee(t);const[a,u]=w.useState(e);w.useEffect(()=>{e&&u(!0)},[e]),w.useEffect(()=>{if(!a)return;const p=new AbortController;let y=null;i({status:"building"}),ne(t,{modulesAlreadyLoaded:s.length>0});const b=Date.now();return Et().then(x=>{const h=Date.now()-b;return O("component-index",h,{busyMs:0,waitMs:h}),x.ok||oe.warn(`Component index unavailable, so this board shows no ghost slots: ${x.reason}`,"three-board"),jt(s,x.ok?x.entries:[],p.signal)}).then(x=>{if(p.signal.aborted){X(t),q(x);return}y=x,F=x,bt(),re(),i({status:"ready",scene:x})},x=>{if(p.signal.aborted){X(t);return}i({status:"error",message:x instanceof Error?x.message:String(x)})}),()=>{p.abort(),y?(F===y&&(F=null),q(y),bt()):X(t)}},[s,a,t]);const c=o.status==="ready"?o.scene:null,d=w.useCallback(()=>{if(!c)throw new Error("The 3D board is still building.");return{root:c.root,dispose(){}}},[c]),l=w.useCallback(p=>{if(mn(r,c,p)!==null)return;const y=pn(c,p);y&&y.then(se)},[c,r]);return m.jsx("div",{style:{position:"relative",flex:1,minHeight:0,pointerEvents:"auto"},children:c?m.jsxs(m.Fragment,{children:[m.jsx(ce,{documentId:t,sourcePath:"Generated from this project’s stories",displayName:At,build:d,active:e,onOpenNode:l,cameraDirection:ue,frameBounds:c.frameBounds,openingFrameBounds:c.openingFrameBounds,dressing:{grid:!0}}),m.jsx(gn,{documentId:t,scene:c,active:e}),m.jsx(xn,{scene:c})]}):m.jsxs("div",{"data-testid":"three-board-status",style:{padding:16,fontSize:12,color:g.content.muted},children:[o.status==="error"&&o.message,o.status==="building"&&de(Qe(s)),o.status==="idle"&&"Open this tab to lay out every story at true scale."]})})}function xn({scene:t}){const[e,r]=w.useState(!1),n=Ke(t.skipped),s=t.districts.filter(o=>o.groupKey!==I).length;return m.jsxs("div",{"data-testid":"three-board-status",style:{position:"absolute",left:8,bottom:8,maxWidth:420,padding:"4px 8px",borderRadius:g.shape.small,background:g.surface.raised,border:`1px solid ${g.boundary.default}`,fontSize:10,color:g.content.muted,pointerEvents:"auto"},children:[t.exhibits.length," exhibit",t.exhibits.length===1?"":"s"," · ",s," ","district",s===1?"":"s",t.helperVolumes.length>0&&m.jsxs(m.Fragment,{children:[" · ",t.helperVolumes.length," helper volume",t.helperVolumes.length===1?"":"s"," at true scale, outside the default frame"]}),t.ghostSlots.length>0&&m.jsxs(m.Fragment,{children:[" · ",t.ghostSlots.length," component",t.ghostSlots.length===1?"":"s"," without stories"]}),t.skipped.length>0&&m.jsxs(m.Fragment,{children:[" · ",m.jsxs("span",{role:"button",tabIndex:0,"aria-expanded":e,onClick:()=>r(o=>!o),onKeyDown:o=>{(o.key===" "||o.key==="Enter")&&(o.preventDefault(),r(i=>!i))},style:{cursor:"pointer",color:g.accent.default},children:[n.stories," ",n.stories===1?"story":"stories"," in ",n.modules," ",n.modules===1?"module":"modules"," not on this board"]})]}),e&&m.jsx("div",{style:{marginTop:4,maxHeight:160,overflow:"auto"},children:t.skipped.map(o=>m.jsxs("div",{style:{padding:"1px 0"},children:[m.jsxs("code",{style:{color:g.content.dim},children:[o.modulePath,"#",o.storyName]})," ","— ",o.reason]},o.id))})]})}function gn({documentId:t,scene:e,active:r}){const n=w.useRef(null),[s,o]=w.useState([]);return w.useEffect(()=>{if(!r)return;let i=0,a=!1;const u=yn(e),c=()=>{if(a)return;i=requestAnimationFrame(c);const d=n.current,l=ae(t);!d||!l||d.clientWidth===0||d.clientHeight===0||o(bn(u,l.camera(),d.clientWidth,d.clientHeight))};return i=requestAnimationFrame(c),()=>{a=!0,cancelAnimationFrame(i)}},[r,t,e]),m.jsx("div",{ref:n,"data-testid":"three-board-labels",style:{position:"absolute",inset:-12,pointerEvents:"none",overflow:"hidden"},children:s.map(i=>m.jsxs("div",{style:{position:"absolute",left:i.x,top:i.y,transform:"translate(-50%, -100%)",whiteSpace:"nowrap",padding:i.district?"2px 7px":"1px 5px",borderRadius:g.shape.small,background:g.surface.raised,border:`1px ${i.ghost?"dashed":"solid"} ${i.district&&!i.ghost?g.accent.default:g.boundary.default}`,color:i.district&&!i.ghost?g.content.primary:g.content.muted,fontSize:i.district?12:10,fontWeight:i.district?600:400,opacity:i.ghost?.9:1},children:[i.text,m.jsx("span",{style:{marginLeft:6,color:g.content.dim,fontWeight:400},children:i.detail})]},i.key))})}const B=new P;function wt(t){return[t.anchor[0],0,t.anchor[2]-t.footprint[1]/2]}function yn(t){return[...t.districts.map(e=>{const r=e.groupKey===I,n=e.placement.items.length;return{key:`district:${e.groupKey}`,text:e.label,detail:r?`${n} component${n===1?"":"s"}`:`${n} exhibit${n===1?"":"s"}`,district:!0,ghost:r,point:e.placement.anchor}}),...t.exhibits.map(e=>({key:`exhibit:${e.id}`,text:e.label,detail:Gt(e.placement.size[1]),district:!1,ghost:!1,point:wt(e.placement)})),...t.ghostSlots.map(e=>({key:`ghost:${e.key}`,text:e.name,detail:"No story yet",district:!1,ghost:!0,point:wt(e.placement)}))]}function bn(t,e,r,n){e.updateMatrixWorld();const s=[];for(const o of t)B.set(o.point[0],o.point[1],o.point[2]).project(e),!(B.z>1)&&s.push({key:o.key,text:o.text,detail:o.detail,district:o.district,ghost:o.ghost,x:(B.x*.5+.5)*r,y:(-B.y*.5+.5)*n,depth:B.z});return Sn(s).sort((o,i)=>i.depth-o.depth)}function wn(t){const e=t.district?12:10,r=(t.text.length+t.detail.length)*e*.62+24,n=e+8;return[t.x-r/2,t.y-n,t.x+r/2,t.y]}function Sn(t){const e=[...t].sort((n,s)=>(s.district?1:0)-(n.district?1:0)||n.depth-s.depth),r=[];for(const n of e){const s=wn(n);r.some(i=>s[0]<i.rect[2]&&s[2]>i.rect[0]&&s[1]<i.rect[3]&&s[3]>i.rect[1])||r.push({label:n,rect:s})}return r.map(n=>n.label)}function Ft(t,e){if(!t)return null;const r=cn(e);return r?t.exhibits.find(n=>n.id===r)??null:null}function Mn(t,e){if(!t)return null;const r=un(e);return r?t.ghostSlots.find(n=>n.key===r)??null:null}function En({adapter:t,nodeId:e}){w.useSyncExternalStore(dn,ln);const n=[...e?[e]:[],...t.selection?.get()??[]].reduce((s,o)=>s??Ft(F,ie(t.hierarchy,o)),null);return m.jsx("div",{"data-testid":"inspector-exhibit",style:{pointerEvents:"auto",padding:8,borderBottom:`1px solid ${g.boundary.default}`},children:n?m.jsxs("div",{style:{display:"grid",gap:3,fontSize:11},children:[m.jsx("div",{style:{color:g.content.primary,fontWeight:600},children:n.label}),m.jsx(G,{label:"Story",value:n.storyName}),m.jsx(G,{label:"Group",value:n.groupPath}),m.jsx(G,{label:"Module",value:n.modulePath}),m.jsx(G,{label:"Size",value:n.placement.size.map(s=>Gt(s)).join(" × ")})]}):m.jsx("div",{style:{fontSize:11,color:g.content.dim},children:"Pick an exhibit to read its story."})})}function G({label:t,value:e}){return m.jsxs("div",{style:{display:"flex",gap:6},children:[m.jsx("span",{style:{width:52,flexShrink:0,color:g.content.muted},children:t}),m.jsx("code",{style:{color:g.content.primary,overflow:"hidden",textOverflow:"ellipsis"},title:e,children:e})]})}const vn=Qt();function Dn(){vn.ensure(t=>{t(Xt({match:()=>Wt()?.descriptor.id===Z,id:"exhibit",title:"Exhibit",icon:Ut,order:Zt,Section:En}))})}const _n={revision:()=>JSON.stringify(U().map(t=>t.modulePath)),subscribe:Mt,capture:async t=>{await te();const e=tt(),r=U().filter(o=>o.ok&&Q({modulePath:o.modulePath,regions:e}).medium==="three"),n=await Et(),s=await jt(r,n.ok?n.entries:[]);try{const{captureAuthoredThreeScenePreview:o}=await A(async()=>{const{captureAuthoredThreeScenePreview:h}=await import("./document-preview-three-CxmRhCcV.js");return{captureAuthoredThreeScenePreview:h}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18])),{createStandardEnvironment:i}=await A(async()=>{const{createStandardEnvironment:h}=await import("./environment-Dg-YaLsA.js");return{createStandardEnvironment:h}},__vite__mapDeps([19,17,14,20,21,22])),{applyStandardViewportDressing:a}=await A(async()=>{const{applyStandardViewportDressing:h}=await import("./standard-viewport-dressing-BW-dM_1h.js").then(v=>v.d);return{applyStandardViewportDressing:h}},__vite__mapDeps([23,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,19,17,20,21,22,24])),{isEditorOwnedObject:u}=await A(async()=>{const{isEditorOwnedObject:h}=await import("./editor-layers-D-CTUqco.js");return{isEditorOwnedObject:h}},__vite__mapDeps([15,3,4,5,6,7,8,9,10,11,12,13]));s.root.traverse(h=>{u(h)&&(h.visible=!1)});const c=new De;c.add(s.root);const d=new _e(new P(...s.frameBounds.min),new P(...s.frameBounds.max)),l=d.isEmpty()?new P:d.getCenter(new P),y=(d.isEmpty()?1:Math.max(.01,d.getBoundingSphere(new Oe).radius))/Math.sin(Pe.degToRad(42/2))*1.15,b=l.clone().addScaledVector(new P(1,.75,1).normalize(),y),x={...t,camera:{position:b,target:l,fov:42}};return o(s.root,c,x,h=>{const v=a(c,{environment:i(h),background:!1});return()=>v.dispose()})}finally{await q(s)}}};function ho(t){return Dn(),Yt({id:Z,title:At,kind:"content-browser",workspaceRole:"workspace-reference",Content:e=>m.jsx(fn,{...e,store:t}),readOnly:!0,preview:_n,presentation:()=>({kind:"workspace",id:Z})},{category:"canvas"})}export{En as BoardExhibitSection,Z as THREE_COMPONENTS_DOCUMENT_ID,Dn as ensureThreeBoardContributionsRegistered,ho as installThreeBoardDocument,mn as openExhibitStoryDocument,pn as openGhostComponentSource};
@@ -1 +1 @@
1
- import{a as i}from"./jsx-runtime-DPjLkJKQ.js";import{ad as p,fF as g,au as b}from"./index-BRJMIUK0.js";import{r as m}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{captureAuthoredThreeScenePreview as E}from"./document-preview-three-DThkjI1S.js";import{m as v}from"./mounted-story-viewport-source-B4-eAYGI.js";import{mountStoryObject3D as w,disposeStoryObject3D as x}from"./story-three-preview-R1JvrggS.js";import{O as N}from"./Object3DDocumentViewport-DCwiSY3O.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"./content-bounds-BeuIXKYu.js";import"./hierarchy-marks-Cc_3lxw6.js";import"./workspace-arrangement-BdAlBwvd.js";import"./three.core-3arARmh6.js";import"./editor-layers-BDJnAAzj.js";import"./renderer-ownership-BovSEcLv.js";import"./three.module-BLhyNg0e.js";import"./scene-framing-BQt72ZCw.js";import"./asset-preview-B1tDziF1.js";import"./studio-environment-DRxxq_QX.js";import"./user-data-Bpj7diUS.js";import"./KTX2Loader-CaqVE6nY.js";import"./GLTFLoader-KeoruJgS.js";import"./BufferGeometryUtils-B22h7jo4.js";import"./environment-Dg-YaLsA.js";import"./RoomEnvironment-BkknvS_I.js";import"./EXRLoader-CITMBvGd.js";import"./HDRLoader-BTGuGhVo.js";import"./bitmap-label-Ct4k6ehY.js";import"./crash-null-boundary-v3a0uEgw.js";import"./events-156d8d12.esm-CYeuVCYr.js";import"./index-bQE2NA0D.js";import"./story-mount-turn-DFRTj5hi.js";import"./viewport-surface-status-cwCiBGa7.js";async function P(e,n,t){const s=(await import(e))[t??"default"];if(typeof s!="function")throw new Error(`${n} does not export ${t===void 0?"a default component":`\`${t}\``}, which is what the adapter's scene table names. The table and the module disagree.`);return s}function at({active:e,documentId:n,state:t}){const[o,c]=m.useState(null),[s,l]=m.useState(null),a=m.useRef(null),[f,j]=m.useState(e);m.useEffect(()=>{e&&j(!0)},[e]);const u=t?.path,h=t?.exportName;return m.useEffect(()=>{if(!f||!u)return;let d=!1;return l(null),c(null),y(u,h).then(r=>w(r,{})).then(r=>{if(d){x(r);return}const S=v(r);a.current=S,c(S)}).catch(r=>{d||l(r instanceof Error?r.message:String(r))}),()=>{d=!0,a.current?.dispose(),a.current=null,c(null)}},[f,u,h]),t?s?i.jsxs("div",{role:"alert","data-testid":"scene-document-error",style:{padding:12,fontSize:12,color:p.semantic.danger,maxWidth:640},children:[i.jsxs("div",{style:{fontWeight:600,marginBottom:4},children:[t.path,t.exportName?` — ${t.exportName}`:""]}),i.jsx("div",{style:{color:p.content.muted,whiteSpace:"pre-wrap"},children:s})]}):o?i.jsx(N,{documentId:n,sourcePath:t.path,build:o.build,displayName:t.label,active:e}):i.jsx("div",{"data-testid":"scene-document-loading",style:{padding:12,fontSize:12,color:p.content.muted,fontStyle:"italic"},children:"mounting…"}):i.jsx("div",{style:{padding:12,fontSize:12,color:p.content.muted},children:"This scene document is no longer declared by the project's adapter."})}async function y(e,n){const t=b();if(!t)throw new Error("No project is open, so its scene modules cannot be loaded.");const o=`${g(t.rootPath,e)}?t=${Date.now()}`;return P(o,e,n)}async function ut(e,n){const t=await y(e.path,e.exportName),o=await w(t,{});try{return E(o.root,o.scene,n)}finally{await x(o)}}export{at as ThreeIsolationSceneContent,ut as captureThreeIsolationScenePreview};
1
+ import{a as i}from"./jsx-runtime-DPjLkJKQ.js";import{af as p,fO as g,aw as b}from"./index-C5ZAyrKq.js";import{r as m}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{captureAuthoredThreeScenePreview as E}from"./document-preview-three-CxmRhCcV.js";import{m as v}from"./mounted-story-viewport-source-DfnLxI1f.js";import{mountStoryObject3D as S,disposeStoryObject3D as x}from"./story-three-preview-CgcLF5lE.js";import{O as N}from"./Object3DDocumentViewport-D6QoHfa_.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"./content-bounds-DROIchTa.js";import"./hierarchy-marks-BuCO8Ke-.js";import"./workspace-arrangement-DqG5sUns.js";import"./three.core-3arARmh6.js";import"./editor-layers-D-CTUqco.js";import"./renderer-ownership-BovSEcLv.js";import"./three.module-BLhyNg0e.js";import"./scene-framing-DkZKDwH3.js";import"./asset-preview-DxlSdRZn.js";import"./studio-environment-R9qXUUcC.js";import"./user-data-C84W0V47.js";import"./KTX2Loader-CaqVE6nY.js";import"./GLTFLoader-KeoruJgS.js";import"./BufferGeometryUtils-B22h7jo4.js";import"./environment-Dg-YaLsA.js";import"./RoomEnvironment-BkknvS_I.js";import"./EXRLoader-CITMBvGd.js";import"./HDRLoader-BTGuGhVo.js";import"./bitmap-label-Ct4k6ehY.js";import"./crash-null-boundary-v3a0uEgw.js";import"./events-156d8d12.esm-CYeuVCYr.js";import"./index-bQE2NA0D.js";import"./story-mount-turn-DFRTj5hi.js";import"./viewport-surface-status-TUfhXKR9.js";async function P(e,n,t){const s=(await import(e))[t??"default"];if(typeof s!="function")throw new Error(`${n} does not export ${t===void 0?"a default component":`\`${t}\``}, which is what the adapter's scene table names. The table and the module disagree.`);return s}function at({active:e,documentId:n,state:t}){const[o,c]=m.useState(null),[s,l]=m.useState(null),a=m.useRef(null),[f,j]=m.useState(e);m.useEffect(()=>{e&&j(!0)},[e]);const u=t?.path,h=t?.exportName;return m.useEffect(()=>{if(!f||!u)return;let d=!1;return l(null),c(null),y(u,h).then(r=>S(r,{})).then(r=>{if(d){x(r);return}const w=v(r);a.current=w,c(w)}).catch(r=>{d||l(r instanceof Error?r.message:String(r))}),()=>{d=!0,a.current?.dispose(),a.current=null,c(null)}},[f,u,h]),t?s?i.jsxs("div",{role:"alert","data-testid":"scene-document-error",style:{padding:12,fontSize:12,color:p.semantic.danger,maxWidth:640},children:[i.jsxs("div",{style:{fontWeight:600,marginBottom:4},children:[t.path,t.exportName?` — ${t.exportName}`:""]}),i.jsx("div",{style:{color:p.content.muted,whiteSpace:"pre-wrap"},children:s})]}):o?i.jsx(N,{documentId:n,sourcePath:t.path,build:o.build,displayName:t.label,active:e}):i.jsx("div",{"data-testid":"scene-document-loading",style:{padding:12,fontSize:12,color:p.content.muted,fontStyle:"italic"},children:"mounting…"}):i.jsx("div",{style:{padding:12,fontSize:12,color:p.content.muted},children:"This scene document is no longer declared by the project's adapter."})}async function y(e,n){const t=b();if(!t)throw new Error("No project is open, so its scene modules cannot be loaded.");const o=`${g(t.rootPath,e)}?t=${Date.now()}`;return P(o,e,n)}async function ut(e,n){const t=await y(e.path,e.exportName),o=await S(t,{});try{return E(o.root,o.scene,n)}finally{await x(o)}}export{at as ThreeIsolationSceneContent,ut as captureThreeIsolationScenePreview};
@@ -1 +1 @@
1
- import{a as o}from"./jsx-runtime-DPjLkJKQ.js";import{Object3DPreview as d}from"./Object3DPreview-ClYDoH2L.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-BRJMIUK0.js";import"./index-nmcBqr7Y.js";import"./index-D_NuPfjr.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./three.module-BLhyNg0e.js";import"./three.core-3arARmh6.js";import"./OrbitControls-B13MKuwC.js";import"./asset-preview-B1tDziF1.js";import"./editor-layers-BDJnAAzj.js";import"./workspace-arrangement-BdAlBwvd.js";import"./renderer-ownership-BovSEcLv.js";import"./hierarchy-marks-Cc_3lxw6.js";import"./studio-environment-DRxxq_QX.js";import"./user-data-Bpj7diUS.js";import"./KTX2Loader-CaqVE6nY.js";import"./GLTFLoader-KeoruJgS.js";import"./BufferGeometryUtils-B22h7jo4.js";import"./environment-Dg-YaLsA.js";import"./RoomEnvironment-BkknvS_I.js";import"./EXRLoader-CITMBvGd.js";import"./HDRLoader-BTGuGhVo.js";import"./bitmap-label-Ct4k6ehY.js";import"./editor-presentation-activity-C7SNSmTd.js";import"./model-thumbnail-BEKPWg4l.js";function Q({build:r,displayName:m="Object3D preview",height:p=360,background:e,showSkeleton:s=!1,cameraDirection:n,showGrid:c,useDefaultLighting:u,exposure:a,setupPreview:t,active:j=!0}){const i=t!==void 0;return o.jsx("div",{style:{width:"100%",height:p,minHeight:240},children:o.jsx(d,{sourceFactory:r,displayName:m,active:j,showSkeleton:s,background:e,cameraDirection:n,showGrid:c??!i,useDefaultLighting:u??!i,exposure:a,setupPreview:t})})}export{Q as ToolObject3DPreview};
1
+ import{a as o}from"./jsx-runtime-DPjLkJKQ.js";import{Object3DPreview as d}from"./Object3DPreview-ZVokr044.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-C5ZAyrKq.js";import"./index-nmcBqr7Y.js";import"./index-D_NuPfjr.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./three.module-BLhyNg0e.js";import"./three.core-3arARmh6.js";import"./OrbitControls-B13MKuwC.js";import"./asset-preview-DxlSdRZn.js";import"./editor-layers-D-CTUqco.js";import"./workspace-arrangement-DqG5sUns.js";import"./renderer-ownership-BovSEcLv.js";import"./hierarchy-marks-BuCO8Ke-.js";import"./studio-environment-R9qXUUcC.js";import"./user-data-C84W0V47.js";import"./KTX2Loader-CaqVE6nY.js";import"./GLTFLoader-KeoruJgS.js";import"./BufferGeometryUtils-B22h7jo4.js";import"./environment-Dg-YaLsA.js";import"./RoomEnvironment-BkknvS_I.js";import"./EXRLoader-CITMBvGd.js";import"./HDRLoader-BTGuGhVo.js";import"./bitmap-label-Ct4k6ehY.js";import"./editor-presentation-activity-CqJH4G9t.js";import"./model-thumbnail-BmQs-h6t.js";function Q({build:r,displayName:m="Object3D preview",height:p=360,background:e,showSkeleton:s=!1,cameraDirection:n,showGrid:c,useDefaultLighting:u,exposure:a,setupPreview:t,active:j=!0}){const i=t!==void 0;return o.jsx("div",{style:{width:"100%",height:p,minHeight:240},children:o.jsx(d,{sourceFactory:r,displayName:m,active:j,showSkeleton:s,background:e,cameraDirection:n,showGrid:c??!i,useDefaultLighting:u??!i,exposure:a,setupPreview:t})})}export{Q as ToolObject3DPreview};
@@ -0,0 +1 @@
1
+ import{a as e}from"./jsx-runtime-DPjLkJKQ.js";import{K as O,cB as N,cC as k,cD as A,a2 as h,cE as u,aL as f,a1 as p,cF as v,cG as R,cH as B,cI as G,a0 as w,cJ as M,cK as z,cL as I,aK as l,aM as m,cM as b,aR as y,cN as C,cO as F,cP as L,cQ as V,cR as $,cS as K,cT as H,cU as U,cV as _,cW as X,cX as W}from"./index-C5ZAyrKq.js";import{r as c}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{r as T}from"./transform-mode-request-DlEApNrA.js";function D({active:a,onArm:t,faIcon:r,action:s,label:i}){return e.jsx(u,{text:i,hotkey:v(s),children:e.jsx(f,{"aria-label":i,"aria-pressed":a,shape:"segment",size:"comfortable",onClick:t,children:e.jsx(p,{icon:r,size:"md"})})})}function P({store:a,dimensions:t="3d",size:r="comfortable",variant:s="ghost",showValues:i=!1}){const[o,S]=c.useState(!1),j=c.useRef(null);return c.useEffect(()=>{if(!o)return;const n=d=>{j.current&&!j.current.contains(d.target)&&S(!1)};return document.addEventListener("mousedown",n),()=>document.removeEventListener("mousedown",n)},[o]),e.jsxs("div",{ref:j,className:"volter-viewport-popover-anchor",children:[e.jsxs(R,{children:[t==="2d"&&e.jsx(u,{text:"Smart Snap",children:e.jsx(f,{"aria-label":"Toggle smart snap","aria-pressed":a.smartSnap.enabled,variant:s,size:r,onClick:()=>a.setSmartSnap({enabled:!a.smartSnap.enabled}),children:e.jsx(p,{icon:B,size:"md"})})}),e.jsx(u,{text:t==="2d"?"Grid Snap":"Toggle Snap",hotkey:v("viewport.toggleSnap"),children:e.jsx(f,{"aria-label":"Toggle snap","aria-pressed":a.snapEnabled,variant:s,size:r,onClick:()=>a.toggleSnap(),children:e.jsx(p,{icon:G,size:"md"})})}),i?[["translate",h.tool.move,`${a.snapValues.translate}`],["rotate",h.tool.rotate,`${a.snapValues.rotate}°`],["scale",h.tool.scale,`${a.snapValues.scale}`]].map(([n,d,g])=>e.jsx(u,{text:"Snap Settings",children:e.jsxs(w,{"aria-label":`${n} snap step`,"aria-haspopup":"dialog","aria-expanded":o,variant:s,size:r,"data-snap-step":n,onClick:()=>S(!o),children:[e.jsx(p,{icon:d,size:"xs"}),g]})},n)):e.jsx(u,{text:"Snap Settings",children:e.jsx(f,{"aria-label":"Snap settings","aria-haspopup":"dialog","aria-expanded":o,variant:s,size:r,onClick:()=>S(!o),children:e.jsx(p,{icon:M,size:"xs"})})})]}),o&&e.jsx(z,{className:"volter-snap-popover",children:e.jsxs(I,{gap:2,children:[t==="2d"?e.jsxs(e.Fragment,{children:[e.jsx(l,{variant:"caption",tone:"muted",children:"Grid Step (px)"}),e.jsx(m,{type:"number","aria-label":"Grid step",value:a.snap2D.step,step:1,min:1,onChange:n=>a.setSnap2D({step:Number(n.target.value)||8})}),e.jsx(l,{variant:"caption",tone:"muted",children:"Grid Offset (px)"}),e.jsxs(b,{gap:1,children:[e.jsx(m,{type:"number","aria-label":"Grid offset x",value:a.snap2D.offsetX,step:1,onChange:n=>a.setSnap2D({offsetX:Number(n.target.value)||0})}),e.jsx(m,{type:"number","aria-label":"Grid offset y",value:a.snap2D.offsetY,step:1,onChange:n=>a.setSnap2D({offsetY:Number(n.target.value)||0})})]}),e.jsx(l,{variant:"caption",tone:"muted",children:"Primary Line Every (steps)"}),e.jsx(m,{type:"number","aria-label":"Primary line every",value:a.snap2D.primaryEvery,step:1,min:1,onChange:n=>a.setSnap2D({primaryEvery:Number(n.target.value)||8})})]}):e.jsxs(e.Fragment,{children:[e.jsx(l,{variant:"caption",tone:"muted",children:"Translate"}),e.jsx(m,{type:"number",value:a.snapValues.translate,step:.25,min:.01,onChange:n=>a.setSnapValues({translate:Number(n.target.value)||1})})]}),t==="2d"?e.jsxs(e.Fragment,{children:[e.jsx(l,{variant:"caption",tone:"muted",children:"Rotation Offset (deg)"}),e.jsx(m,{type:"number","aria-label":"Rotation offset",value:a.snap2D.rotationOffset,step:1,onChange:n=>a.setSnap2D({rotationOffset:Number(n.target.value)||0})}),e.jsx(l,{variant:"caption",tone:"muted",children:"Rotation Step (deg)"}),e.jsx(m,{type:"number","aria-label":"Rotation step",value:a.snap2D.rotationStep,step:1,min:1,onChange:n=>a.setSnap2D({rotationStep:Number(n.target.value)||15})}),e.jsx(l,{variant:"caption",tone:"muted",children:"Scale Step"}),e.jsx(m,{type:"number","aria-label":"Scale step",value:a.snap2D.scaleStep,step:.05,min:.01,onChange:n=>a.setSnap2D({scaleStep:Number(n.target.value)||.1})})]}):e.jsxs(e.Fragment,{children:[e.jsx(l,{variant:"caption",tone:"muted",children:"Rotate (deg)"}),e.jsx(m,{type:"number",value:a.snapValues.rotate,step:5,min:1,onChange:n=>a.setSnapValues({rotate:Number(n.target.value)||15})}),e.jsx(l,{variant:"caption",tone:"muted",children:"Scale"}),e.jsx(m,{type:"number",value:a.snapValues.scale,step:.05,min:.01,onChange:n=>a.setSnapValues({scale:Number(n.target.value)||.25})})]}),t==="2d"&&e.jsxs(e.Fragment,{children:[[["Use Rotation Snap",a.rotationSnap,()=>a.setRotationSnap(!a.rotationSnap)],["Use Scale Snap",a.scaleSnap,()=>a.setScaleSnap(!a.scaleSnap)],["Snap Relative",a.snap2D.relative,()=>a.setSnap2D({relative:!a.snap2D.relative})],["Use Pixel Snap",a.snap2D.pixel,()=>a.setSnap2D({pixel:!a.snap2D.pixel})]].map(([n,d,g])=>e.jsxs(b,{gap:2,align:"center",role:"menuitemcheckbox","aria-checked":d,onClick:g,children:[e.jsx(y,{checked:d,readOnly:!0}),e.jsx(l,{children:n})]},n)),e.jsx(l,{variant:"caption",tone:"muted",children:"Smart Snapping"}),[["parent","Snap to Parent"],["others","Snap to Other Nodes"],["sides","Snap to Node Sides"],["center","Snap to Node Center"],["guides","Snap to Guides"]].map(([n,d])=>e.jsxs(b,{gap:2,align:"center",role:"menuitemcheckbox","aria-checked":a.smartSnap[n],onClick:()=>a.setSmartSnap({[n]:!a.smartSnap[n]}),children:[e.jsx(y,{checked:a.smartSnap[n],readOnly:!0}),e.jsx(l,{children:d})]},n))]}),t==="3d"&&e.jsxs(e.Fragment,{children:[e.jsxs(b,{gap:2,align:"center",onClick:()=>a.toggleSnapToSurface(),children:[e.jsx(y,{checked:a.snapToSurface,readOnly:!0}),e.jsx(l,{children:"Snap to Surface"})]}),e.jsxs(l,{variant:"caption",tone:"dim",children:["Hold ",e.jsx(C,{children:"Ctrl"})," while dragging to snap once ·"," ",e.jsx(C,{children:v("viewport.toggleSnap")})," toggles"]}),e.jsxs(l,{variant:"caption",tone:"dim",children:["Hold ",e.jsx(C,{children:v("viewport.vertexSnapHold")})," during translate for vertex snap"]})]})]})})]})}const Y={"active-element":"Active Element","median-point":"Median Point","individual-origins":"Individual Origins"};function q({store:a}){const t=["active-element","median-point","individual-origins"],r=`Pivot: ${Y[a.pivotMode]}`;return e.jsx(u,{text:r,hotkey:v("viewport.cyclePivot"),children:e.jsx(f,{"aria-label":r,"aria-pressed":a.pivotMode!=="active-element",variant:"secondary",onClick:()=>{const s=t.indexOf(a.pivotMode);a.setPivotMode(t[(s+1)%t.length])},children:e.jsx(p,{icon:U,size:"md"})})})}const J={auto:"Auto",pivot:"Pivot",center:"Center"};function Q({store:a}){const t=["auto","pivot","center"],r=`Anchor: ${J[a.gizmoAnchor]}`;return e.jsx(u,{text:r,children:e.jsx(f,{"aria-label":r,"aria-pressed":a.gizmoAnchor!=="auto",variant:"secondary",onClick:()=>{const s=t.indexOf(a.gizmoAnchor);a.setGizmoAnchor(t[(s+1)%t.length])},children:e.jsx(p,{icon:a.gizmoAnchor==="center"?_:X,size:"md"})})})}function Z({store:a}){const[t,r]=c.useState(!1),s=c.useRef(null);return c.useEffect(()=>{if(!t)return;const i=o=>{s.current?.contains(o.target)||r(!1)};return document.addEventListener("mousedown",i),()=>document.removeEventListener("mousedown",i)},[t]),e.jsxs("div",{ref:s,className:"volter-viewport-popover-anchor",children:[e.jsx(u,{text:"Transform options",children:e.jsx(f,{"aria-label":"Transform options","aria-haspopup":"dialog","aria-expanded":t,variant:"secondary",onClick:()=>r(i=>!i),children:e.jsx(p,{icon:W,size:"md"})})}),t?e.jsx(z,{style:{minWidth:240},children:e.jsxs(I,{gap:3,children:[e.jsxs(w,{size:"compact",variant:"ghost",onClick:()=>{a.snapSelectionToFloor(),r(!1)},children:["Snap Selection to Floor ",e.jsx(C,{children:v("viewport.snapToFloor")})]}),e.jsxs(b,{gap:2,align:"center",onClick:()=>a.togglePreserveChildrenTransform(),style:{cursor:"pointer"},children:[e.jsx(y,{checked:a.preserveChildrenTransform,readOnly:!0}),e.jsx(l,{children:"Preserve Children Transform"})]}),e.jsx(l,{variant:"caption",tone:"dim",children:"Keep source-writable children fixed in world space while their parent moves."})]})}):null]})}function ee({store:a}){const[t,r]=c.useState(!1),s=c.useRef(null),i=a.transformSpace==="world"?"Global":"Local";return e.jsxs("div",{className:"volter-viewport-popover-anchor",children:[e.jsx(u,{text:`Transform orientation: ${i}`,children:e.jsxs(w,{ref:s,type:"button",size:"compact",variant:"secondary","aria-label":`Transform orientation: ${i}`,"aria-haspopup":"menu","aria-expanded":t,onClick:()=>r(o=>!o),className:"volter-transform-orientation-trigger",children:[e.jsx(p,{icon:a.transformSpace==="world"?L:V,size:"sm"}),e.jsx("span",{children:i}),e.jsx(p,{icon:M,size:"xs"})]})}),t&&e.jsx($,{anchorRef:s,align:"start",clamp:!0,"aria-label":"Transform orientation",onDismiss:()=>r(!1),children:["world","local"].map(o=>e.jsxs(K,{role:"menuitemradio","aria-checked":a.transformSpace===o,onSelect:()=>{a.setTransformSpace(o),r(!1)},children:[e.jsx("span",{className:"volter-menu-check",children:a.transformSpace===o&&e.jsx(p,{icon:H,size:"xs"})}),o==="world"?"Global":"Local"]},o))})]})}function ie({store:a}={}){const t=O(),r=a??t;c.useSyncExternalStore(r.subscribe,r.getShellSnapshot??r.getSnapshot),c.useSyncExternalStore(N,k,k);const[s,i]=c.useState(null),o=s?.closest(".volter-stage-bar")!=null;return e.jsxs(F,{compact:!0,label:"Transform controls","data-testid":"transform-header-controls",className:"volter-transform-header-controls",children:[e.jsx("span",{ref:i,hidden:!0}),e.jsx(ee,{store:r}),e.jsxs(R,{children:[e.jsx(q,{store:r}),e.jsx(Q,{store:r})]}),e.jsx(P,{store:r,size:"default",variant:"secondary",showValues:o}),e.jsx(Z,{store:r})]})}const ae=()=>()=>{},E=()=>null;function le({dimensions:a="3d",door:t,store:r,otherToolActive:s=!1,onToolArmed:i,viewTools:o,trailingTools:S}={}){const j=O(),n=r??j;c.useSyncExternalStore(n.subscribe,n.getShellSnapshot??n.getSnapshot),c.useSyncExternalStore(N,k,k);const d=c.useSyncExternalStore(t?.subscribe??ae,t?.armed??E,t?.armed??E),g=[{mode:"translate",faIcon:h.tool.move,action:"transform.translate",label:"Move"},{mode:"rotate",faIcon:h.tool.rotate,action:"transform.rotate",label:"Rotate"},{mode:"scale",faIcon:h.tool.scale,action:"transform.scale",label:"Scale"}];return e.jsxs(A,{label:"Transform tools","data-testid":a==="2d"?"canvas-2d-toolstrip":"threejs-toolstrip",className:"volter-viewport-toolbar volter-viewport-toolbar-left",children:[t?null:e.jsx(D,{faIcon:h.tool.select,action:"transform.select",label:"Select",active:!s&&(n.transformMode==="select"||a==="2d"&&n.transformMode==="combined"),onArm:()=>{i?.(),T(n,"select")}}),g.map(x=>e.jsx(D,{faIcon:x.faIcon,action:x.action,label:x.label,active:!s&&(t?d===x.mode:n.transformMode===x.mode),onArm:()=>{i?.(),t?t.begin(x.mode):T(n,x.mode)}},x.mode)),t||a==="2d"?null:e.jsx(D,{faIcon:h.tool.transform,action:"transform.combined",label:"Transform (all handles)",active:n.transformMode==="combined",onArm:()=>T(n,"combined")}),o,a==="2d"?e.jsx(P,{store:n,dimensions:"2d"}):null,S]})}export{ie as T,le as a};
@@ -1 +1 @@
1
- import{a}from"./jsx-runtime-DPjLkJKQ.js";import{r as s}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{da as i,db as n,dc as o,ad as t,dd as r}from"./index-BRJMIUK0.js";function u(){const e=s.useSyncExternalStore(i,n,n);return e?a.jsx("div",{role:"status","aria-live":"polite","data-testid":"transient-hint",style:{position:"absolute",left:"50%",bottom:r[6],transform:"translateX(-50%)",maxWidth:"min(440px, 80%)",padding:`${r[3]}px ${r[5]}px`,borderRadius:t.shape.medium,border:`1px solid ${t.boundary.strong}`,background:t.surface.overlay,color:t.content.primary,fontSize:"var(--vgai-font-base)",lineHeight:1.4,textAlign:"center",pointerEvents:"none",zIndex:o.toast},children:e.message},e.id):null}export{u as T};
1
+ import{a}from"./jsx-runtime-DPjLkJKQ.js";import{r as s}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{cY as i,cZ as n,c_ as o,af as t,c$ as r}from"./index-C5ZAyrKq.js";function c(){const e=s.useSyncExternalStore(i,n,n);return e?a.jsx("div",{role:"status","aria-live":"polite","data-testid":"transient-hint",style:{position:"absolute",left:"50%",bottom:r[6],transform:"translateX(-50%)",maxWidth:"min(440px, 80%)",padding:`${r[3]}px ${r[5]}px`,borderRadius:t.shape.medium,border:`1px solid ${t.boundary.strong}`,background:t.surface.overlay,color:t.content.primary,fontSize:"var(--volter-font-base)",lineHeight:1.4,textAlign:"center",pointerEvents:"none",zIndex:o.toast},children:e.message},e.id):null}export{c as T};
@@ -0,0 +1 @@
1
+ import{a as t}from"./jsx-runtime-DPjLkJKQ.js";import{r}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{aK as c,aY as x}from"./index-C5ZAyrKq.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";function H({assetPath:s}){const[p,a]=r.useState(!1),[d,m]=r.useState(null),i=s;r.useEffect(()=>{a(!1)},[i]);const n=s.split("/").pop()??s,l=r.useCallback(e=>{if(e){if(e.error){a(!0);return}e.videoWidth<=0||m(o=>o&&o.w===e.videoWidth&&o.h===e.videoHeight?o:{w:e.videoWidth,h:e.videoHeight})}},[]);return t.jsxs("div",{"data-testid":"video-asset-document",style:{height:"100%",minHeight:240,display:"flex",flexDirection:"column",minWidth:0},children:[t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,padding:"6px 8px"},children:[t.jsx(c,{tone:"dim",variant:"label",children:n}),d&&t.jsxs(c,{tone:"muted",variant:"code",children:[d.w," × ",d.h]})]}),t.jsx("div",{className:"volter-asset-transparency-well",style:{flex:1,minHeight:0,display:"flex",alignItems:"center",justifyContent:"center",padding:12},children:p?t.jsxs("div",{style:{color:x[2],fontSize:12,textAlign:"center"},children:[n," could not be played from ",i,". The file may be missing, or its codec may not be one this browser decodes."]}):t.jsx("video",{src:i,controls:!0,playsInline:!0,preload:"metadata",ref:l,onError:()=>a(!0),onLoadedMetadata:e=>l(e.currentTarget),style:{maxWidth:"100%",maxHeight:"100%",display:"block"}},i)})]})}export{H as VideoViewer};
@@ -0,0 +1 @@
1
+ import{a as e}from"./jsx-runtime-DPjLkJKQ.js";import{gi as S,cS as g,a1 as c,cT as w,dj as b,a0 as y,cJ as j,cG as C,cE as f,aL as v,gj as M,gk as z,cR as N,af as V}from"./index-C5ZAyrKq.js";import{r as x}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";function B(){return e.jsxs("svg",{viewBox:"0 0 16 16",className:"volter-viewport-overlays-glyph","aria-hidden":"true",focusable:"false",children:[e.jsx("path",{d:"M5.24 4.51 A5.3 5.3 0 1 1 11.89 11.16 A5.85 5.85 0 0 0 5.24 4.51 Z",fill:"currentColor"}),e.jsx("circle",{cx:"6.1",cy:"10.3",r:"4.4",fill:"none",stroke:"currentColor",strokeWidth:"1.1"})]})}function D({label:r="Overlays",choices:p,master:l,glyph:t,word:h}){const[s,o]=x.useState(!1),i=x.useRef(null),m=p.some(n=>n.enabled),d=l?.enabled??m,u=t??e.jsx(c,{icon:d?M:z,size:"md"});x.useEffect(()=>{if(!s)return;const n=k=>{i.current&&!i.current.contains(k.target)&&o(!1)};return document.addEventListener("mousedown",n),()=>document.removeEventListener("mousedown",n)},[s]);const a=s?e.jsxs(S,{className:"volter-helpers-menu",onDismiss:()=>o(!1),children:[l?e.jsxs(e.Fragment,{children:[e.jsxs(g,{role:"menuitemcheckbox","aria-checked":l.enabled,onSelect:l.onToggle,children:[e.jsx("span",{className:"volter-menu-check",children:l.enabled&&e.jsx(c,{icon:w,size:"xs"})}),"Show ",r]}),e.jsx(b,{})]}):null,p.map(n=>e.jsxs(g,{role:"menuitemcheckbox","aria-checked":n.enabled,disabled:n.disabled,onSelect:n.onToggle,children:[e.jsx("span",{className:"volter-menu-check",children:n.enabled&&e.jsx(c,{icon:w,size:"xs"})}),n.label]},n.id))]}):null;return h!==void 0?e.jsxs("div",{ref:i,className:"volter-viewport-popover-anchor",children:[e.jsxs(y,{variant:"ghost",size:"comfortable","aria-label":`Choose ${r.toLowerCase()}`,"aria-expanded":s,onClick:()=>o(!s),children:[h,e.jsx(c,{icon:j,size:"xs"})]}),a]}):e.jsxs("div",{ref:i,className:"volter-viewport-popover-anchor",children:[l?e.jsxs(C,{children:[e.jsx(f,{text:`${r}: ${d?"On":"Off"}`,children:e.jsx(v,{"aria-label":`Toggle ${r.toLowerCase()}`,"aria-pressed":d,size:"comfortable",onClick:l.onToggle,children:u})}),e.jsx(v,{"aria-label":`Choose ${r.toLowerCase()}`,"aria-expanded":s,size:"comfortable",onClick:()=>o(!s),children:e.jsx(c,{icon:j,size:"xs"})})]}):e.jsx(f,{text:`${r}: ${d?"On":"Off"}`,children:e.jsx(v,{"aria-label":`Choose ${r.toLowerCase()}`,"aria-expanded":s,"aria-pressed":d,size:"comfortable",onClick:()=>o(!s),children:u})}),a]})}const O=[{mode:"solid",label:"Material",description:"Authored materials and lighting"},{mode:"clay",label:"Solid",description:"Neutral flat-shaded geometry"},{mode:"unlit",label:"Unlit",description:"Base color without scene lighting"},{mode:"wireframe",label:"Wireframe",description:"Renderable triangle edges"},{mode:"matcap",label:"Matcap",description:"Neutral clay sphere — form without color"},{mode:"normals",label:"Normals",description:"Surface-normal direction colors"},{mode:"overdraw",label:"Overdraw",description:"Additive overlap visualization"}],E={preview:"Material Preview",rendered:"Rendered",uv:"UV","vertex-colors":"Vertex Colors"},G=[{mode:"wireframe",glyph:"wireframe",label:"Wireframe"},{mode:"clay",glyph:"sphere",label:"Solid"},{mode:"solid",glyph:"preview",label:"Material"}];function I(r){return[{mode:"wireframe",glyph:"wireframe",label:"Wireframe"},{mode:"solid",glyph:"sphere",label:"Solid"},...r.has("preview")?[{mode:"preview",glyph:"preview",label:"Material Preview"}]:[],...r.has("rendered")?[{mode:"rendered",glyph:"rendered",label:"Rendered"}]:[]]}function $({glyph:r}){return e.jsxs("svg",{viewBox:"0 0 16 16",className:"volter-viewport-shading-glyph","aria-hidden":"true",focusable:"false",children:[r==="sphere"||r==="rendered"?e.jsx("circle",{cx:"8",cy:"8",r:"7.3",fill:"currentColor"}):e.jsx("circle",{cx:"8",cy:"8",r:"7.3",fill:"none",stroke:"currentColor",strokeWidth:"1.05"}),r==="wireframe"?e.jsxs("g",{stroke:"currentColor",strokeWidth:"1.05",children:[e.jsx("line",{x1:"1.7",y1:"5.4",x2:"14.3",y2:"5.4"}),e.jsx("line",{x1:"1.7",y1:"10.6",x2:"14.3",y2:"10.6"}),e.jsx("line",{x1:"5.4",y1:"1.7",x2:"5.4",y2:"14.3"})]}):null,r==="rendered"?e.jsx("circle",{cx:"5.6",cy:"5.6",r:"2.3",fill:"var(--volter-surface-overlay, #ffffff)",fillOpacity:"0.7"}):null,r==="preview"?e.jsx("path",{d:"M7.73 1.23 L7.73 10.43 L1.22 8.04 A6.78 6.78 0 0 1 7.73 1.23 Z",fill:"currentColor"}):null]})}function L({mode:r,onChange:p,choices:l,disabled:t=!1,segments:h,children:s}){const[o,i]=x.useState(!1),m=x.useRef(null),d=l.find(a=>a.mode===r)??l[0];if(!d)return null;const u=o&&!t?e.jsxs(N,{id:"volter-viewport-shading-menu",anchorRef:m,"aria-label":"Viewport shading modes",onDismiss:()=>i(!1),style:{minWidth:230},children:[l.map(a=>e.jsxs(g,{role:"menuitemradio","aria-checked":a.mode===r,onSelect:()=>{p(a.mode),i(!1)},style:{display:"grid",gridTemplateColumns:"14px 1fr",gap:7},children:[e.jsx("span",{style:{opacity:a.mode===r?1:0},children:e.jsx(c,{icon:w,size:"xs"})}),e.jsxs("span",{children:[e.jsx("span",{style:{display:"block"},children:a.label}),e.jsx("span",{style:{display:"block",color:V.content.dim,fontSize:10},children:a.description})]})]},a.mode)),s?e.jsxs(e.Fragment,{children:[e.jsx(b,{}),e.jsx("div",{className:"volter-viewport-shading-options",children:s})]}):null]}):null;return h?e.jsxs("div",{className:"volter-viewport-popover-anchor",children:[e.jsxs("span",{className:"volter-viewport-shading-segments",role:"group","aria-label":"Viewport shading",children:[h.map(a=>e.jsx(f,{text:`Viewport shading: ${a.label}`,children:e.jsx(v,{size:"compact",shape:"segment",variant:"secondary","aria-pressed":a.mode===r,"aria-label":`Viewport shading: ${a.label}`,disabled:t,onClick:()=>p(a.mode),children:e.jsx($,{glyph:a.glyph})})},a.mode)),e.jsx(f,{text:"Shading options",children:e.jsx(v,{ref:m,size:"compact",shape:"segment",variant:"secondary","aria-label":"Shading options","aria-haspopup":"menu","aria-expanded":o,"aria-controls":o?"volter-viewport-shading-menu":void 0,disabled:t,onClick:()=>i(a=>!a),children:e.jsx(c,{icon:j,size:"xs"})})})]}),u]}):e.jsxs("div",{style:{position:"relative"},children:[e.jsx(f,{text:`Viewport shading: ${d.label}`,children:e.jsxs(y,{ref:m,type:"button",size:"compact",variant:"secondary","aria-label":`Viewport shading: ${d.label}`,"aria-haspopup":"menu","aria-expanded":o,"aria-controls":o?"volter-viewport-shading-menu":void 0,disabled:t,onClick:()=>i(a=>!a),style:{display:"inline-flex",alignItems:"center",gap:5,minWidth:66},children:[e.jsx("span",{children:d.label}),e.jsx(c,{icon:j,size:"xs"})]})}),u]})}function F({mode:r,onChange:p,disabled:l=!1,words:t}){const h=x.useMemo(()=>{const s=O.map(i=>({...i,label:t?.[i.mode]??i.label}));if(s.some(i=>i.mode===r))return s;const o=t?.[r]??E[r]??r;return[...s,{mode:r,label:o,description:"The mode this view is drawn in"}]},[t,r]);return e.jsx(L,{mode:r,onChange:p,choices:h,disabled:l})}export{L as V,G as a,D as b,B as c,F as d,I as p,O as v};
@@ -0,0 +1,3 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/game-css-scope-transform-DcjrwtVc.js","assets/_commonjsHelpers-D6-XlEtG.js","assets/index-C5ZAyrKq.js","assets/index-nmcBqr7Y.js","assets/index-D_NuPfjr.js","assets/jsx-runtime-DPjLkJKQ.js","assets/index-CtzuWnCS.js","assets/index-CinJrH5C.js","assets/index-FUuS4qwW.js","assets/client-DNXj_opT.js","assets/index-CPiRKiDC.css"])))=>i.map(i=>d[i]);
2
+ import{_ as se,m0 as Fe,m1 as He,m2 as De,O as P,m3 as je,j8 as ze,I as Ne,a5 as pe,jE as Be,bt as W,bu as O,bv as q,bx as We}from"./index-C5ZAyrKq.js";import{GAME_SCENES_SHAPE as Oe}from"./game-contract-seams-tyKDsfaP.js";import{g as qe,c as Ve,d as Ue,e as Ke,S as Ye}from"./capability-coverage-ByWftxk4.js";import{i as Qe,b as Je,l as Xe}from"./ingest-source-persistence-6ShMoSCa.js";import{p as Ze}from"./contract-system-adapters-Cn7OW_ay.js";const rn="contain: layout; font: initial; color: initial; letter-spacing: normal; word-spacing: normal; text-align: start; text-indent: 0; text-transform: none; white-space: normal; direction: ltr; cursor: auto; visibility: visible;";function ae(e){return typeof e=="boolean"?e:e?.capture??!1}const ie="volterScopedCss";let le=null;function et(){return le??=Promise.all([se(()=>import("./game-css-scope-transform-DcjrwtVc.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10])),se(()=>import("./index-C5ZAyrKq.js").then(e=>e.tX),__vite__mapDeps([2,3,1,4,5,6,7,8,9,10]))]).then(([{scopeGameCss:e},{GAME_CSS_SCOPE_SELECTOR:t}])=>n=>e({css:n,scopeSelector:t,styleSheetPath:"/"})),le}function tt(e){let t=null;const n=()=>et().then(i=>{t=i}),o=i=>{const g=i.textContent??"";if(g.length===0||i.dataset[ie]===g)return;if(!t){const y=g;i.textContent="",n().then(()=>{i.isConnected&&(i.textContent??"")===""&&(i.textContent=y,o(i))});return}let h;try{h=t(g)}catch{i.textContent="";return}i.dataset[ie]=h,i.textContent=h},a=i=>{if(i instanceof HTMLStyleElement)return i;const g=i.parentElement;return g instanceof HTMLStyleElement?g:null},u=new MutationObserver(i=>{const g=new Set;for(const h of i)if(h.type==="childList")for(const y of h.addedNodes){const w=a(y);if(w)g.add(w);else if(y instanceof Element)for(const d of y.querySelectorAll("style"))g.add(d)}else if(h.type==="characterData"){const y=a(h.target);y&&g.add(y)}for(const h of g)h.isConnected&&o(h)});u.observe(e,{childList:!0,subtree:!0,characterData:!0});for(const i of e.querySelectorAll("style"))o(i);return u}class nt{surfaceElement=null;injectedStyles=null;get surface(){return this.surfaceElement}set surface(t){this.injectedStyles?.disconnect(),this.injectedStyles=null,this.surfaceElement=t,t&&(this.injectedStyles=tt(t))}pageTitle="";executingClassicScript=null;headElement=null;resizeBus=new EventTarget;resizeListeners=new Map;addResizeListener(t,n){let o=this.resizeListeners.get(t);o||(o=new Set,this.resizeListeners.set(t,o)),o.add(ae(n)),this.resizeBus.addEventListener("resize",t,n)}removeResizeListener(t,n){const o=this.resizeListeners.get(t);o&&(o.delete(ae(n)),o.size===0&&this.resizeListeners.delete(t)),this.resizeBus.removeEventListener("resize",t,n)}get gameResizesItself(){return this.resizeListeners.size>0}reset(){this.headElement?.remove(),this.headElement=null,this.pageTitle="",this.executingClassicScript=null,this.surface=null,this.resizeListeners.clear(),this.resizeBus=new EventTarget}dispatchResize(){this.resizeBus.dispatchEvent(new Event("resize"))}viewport(){const t=this.surface;return t?{width:t.clientWidth,height:t.clientHeight}:null}get title(){return this.pageTitle}set title(t){this.pageTitle=String(t)}get currentScript(){return this.executingClassicScript}withCurrentScript(t,n){const o=this.executingClassicScript,a=document.createElement("script");a.src=t,this.executingClassicScript=a;try{return n()}finally{this.executingClassicScript=o}}head(){const t=this.surface;if(!t)return null;if(!this.headElement||this.headElement.parentElement!==t){const n=document.createElement("div");n.dataset.volterGameHead="",n.hidden=!0,t.prepend(n),this.headElement=n}return this.headElement}}function rt(e){const t=`(__volterHost.__volterGameRealm?__volterHost.__volterGameRealm(${JSON.stringify("")}):null)`;return ot.replace("__VOLTER_REALM__",t)}const ot=`const __volterHost=({}).constructor.constructor('return globalThis')(),__volterR=__VOLTER_REALM__,__volterGlobal=((__volterR&&__volterR.globalThis)||__volterHost.__volterGameWindow||__volterHost),globalThis=__volterGlobal,__volterSched=((__volterR&&__volterR.timers)||__volterHost.__volterGameTimers||__volterHost),__volterBind=function(n){var f=__volterSched[n];return typeof f==='function'?f.bind(__volterSched):f;},console=((__volterR&&__volterR.console)||__volterHost.__volterGameConsole||__volterHost.console),window=((__volterR&&__volterR.window)||__volterHost.__volterGameWindow||__volterGlobal.window),document=((__volterR&&__volterR.document)||__volterHost.__volterGameDocument||__volterGlobal.document),__volterWindowBind=function(n){var f=window&&window[n];return typeof f==='function'?f.bind(window):f;},localStorage=(window&&window.localStorage),sessionStorage=(window&&window.sessionStorage),location=(window&&window.location),addEventListener=__volterWindowBind('addEventListener'),removeEventListener=__volterWindowBind('removeEventListener'),dispatchEvent=__volterWindowBind('dispatchEvent'),fetch=function(){var f=__volterHost.__volterProjectFetch;return f?f.apply(null,arguments):__volterHost.fetch.apply(__volterHost,arguments)},setTimeout=__volterBind('setTimeout'),clearTimeout=__volterBind('clearTimeout'),setInterval=__volterBind('setInterval'),clearInterval=__volterBind('clearInterval'),requestAnimationFrame=__volterBind('requestAnimationFrame'),cancelAnimationFrame=__volterBind('cancelAnimationFrame');
3
+ `,on=rt(),st=new Set(["href","protocol","host","hostname","port","pathname","search"]),at=new Set(["assign","replace","reload"]),it=new Set(["play","project","hub","scene","ingest","create-from","checkout_id"]);function lt(e){return it.has(e)||e.startsWith("volter")}function _e(e){const t=e.startsWith("?")?e.slice(1):e;if(!t)return"";const n=new URLSearchParams;for(const[a,u]of new URLSearchParams(t))lt(a)||n.append(a,u);const o=n.toString();return o.length>0?`?${o}`:""}function ct(e){try{const t=new URL(e);return t.search=_e(t.search),t.href}catch{return e}}function ut(e,t,n){const o=Object.create(null);return new Proxy(o,{get(a,u){if(typeof u=="string"&&at.has(u))return(...g)=>{u==="reload"&&n?.reloadGame?.()||t(`location.${u}(${g.map(h=>String(h)).join(", ")})`)};if(u==="search")return _e(String(Reflect.get(e,"search")??""));if(u==="href")return ct(String(Reflect.get(e,"href")??""));const i=Reflect.get(e,u);return typeof i=="function"?i.bind(e):i},set(a,u,i){return typeof u=="string"&&st.has(u)?(t(`location.${u} = ${String(i)}`),!0):Reflect.set(e,u,i)},has(a,u){return Reflect.has(e,u)}})}function dt(e){return`Ingested game attempted to navigate the editor away (${e}) — refused. A game running in-realm shares the editor's document, so leaving it would take the whole session with it; game code sees a scoped \`location\` facade whose reads pass through and whose navigating writes do not (packages/editor/src/game-location-guard.ts).`}function ft(e){let t=0,n=0;const o=Object.create(Object.getPrototypeOf(e)),a=w=>(t+=1,e.getItem(String(w))),u=(w,d)=>{n+=1,e.setItem(String(w),String(d))},i=w=>{n+=1,e.removeItem(String(w))},g=()=>{n+=1,e.clear()},h=w=>(t+=1,e.key(Number(w)));return{storage:new Proxy(o,{get(w,d){return d==="length"?(t+=1,e.length):d==="getItem"?a:d==="setItem"?u:d==="removeItem"?i:d==="clear"?g:d==="key"?h:d===Symbol.toStringTag?"Storage":typeof d=="string"?a(d)??void 0:Reflect.get(o,d,o)},set(w,d,p){return typeof d!="string"?Reflect.set(o,d,p,o):(u(d,String(p)),!0)},deleteProperty(w,d){return typeof d!="string"?Reflect.deleteProperty(o,d):(i(d),!0)},defineProperty(w,d,p){return typeof d!="string"||!("value"in p)?!1:(u(d,String(p.value)),!0)},has(w,d){return typeof d!="string"?Reflect.has(o,d):d in o?!0:a(d)!==null},ownKeys(){const w=[];for(let d=0;d<e.length;d+=1){const p=e.key(d);p!==null&&w.push(p)}return w},getOwnPropertyDescriptor(w,d){if(typeof d!="string")return;const p=e.getItem(d);return p===null?void 0:{configurable:!0,enumerable:!0,value:p,writable:!0}}}),stats:()=>({reads:t,writes:n})}}function mt(e){return!e||e.loop!=="gated"&&e.loop!=="self-driven"?null:{verdict:e.loop,evidence:e.evidence}}function gt(e){let t="open",n=0,o=0,a=0,u=0,i=0,g=0,h=0,y=0,w=!1;const d=[],p=new Set,T=new Set,I=new Set,S=new Map,A=()=>(t==="held"?h:e.now())-y,c=m=>{a++,t==="held"&&u++;try{m.run()}catch(_){e.setTimeout(()=>{throw _},0)}},f=()=>{const m=d.splice(0,d.length);S.clear();for(const _ of m)c(_)},s=m=>{d.push(m)},r=m=>()=>{if(t==="held"){s(m);return}c(m)},l=()=>{t!=="held"&&(h=e.now(),t="held")},v=()=>{t==="held"&&(y+=e.now()-h)};return{schedulers:{setTimeout(m,_,...E){if(o++,w)return-1;const R={run:()=>m(...E)};let L=-1;const C=r(R);return L=e.setTimeout(()=>{p.delete(L),C()},_),p.add(L),R.timerId=L,L},clearTimeout(m){e.clearTimeout(m),p.delete(m);const _=d.findIndex(E=>E.timerId===m);_!==-1&&d.splice(_,1)},setInterval(m,_,...E){if(o++,w)return-1;let R=-1;const L=()=>{const C={run:()=>m(...E)};if(t==="held"){const re=S.get(R);if(re){const oe=d.indexOf(re);oe!==-1&&d.splice(oe,1)}S.set(R,C),s(C);return}c(C)};return R=e.setInterval(L,_),T.add(R),R},clearInterval(m){e.clearInterval(m),T.delete(m);const _=S.get(m);if(_){S.delete(m);const E=d.indexOf(_);E!==-1&&d.splice(E,1)}},requestAnimationFrame(m){if(o++,w)return-1;const _={run:()=>m(A())};let E=-1;const R=r(_);return E=e.requestAnimationFrame(()=>{I.delete(E),R()}),I.add(E),_.frameId=E,E},cancelAnimationFrame(m){e.cancelAnimationFrame(m),I.delete(m);const _=d.findIndex(E=>E.frameId===m);_!==-1&&d.splice(_,1)}},hold:l,release(){w||(v(),t="open",f())},step(m=1){if(!w){for(v(),n=m>0?m:1,t="step";n>0&&d.length>0;)n--,f();t="held",h=e.now()}},stats(){return{mode:t,pending:d.length,requests:o,fired:a,firedWhileHeld:u,activeTimeouts:p.size,activeIntervals:T.size,activeAnimationFrames:I.size,input:i,inputBlocked:g}},recordInput(m){i++,m&&g++},dispose(){if(w)return{timeouts:0,intervals:0,animationFrames:0,parkedCallbacks:0};w=!0;const m={timeouts:p.size,intervals:T.size,animationFrames:I.size,parkedCallbacks:d.length};for(const _ of p)e.clearTimeout(_);for(const _ of T)e.clearInterval(_);for(const _ of I)e.cancelAnimationFrame(_);return p.clear(),T.clear(),I.clear(),d.length=0,S.clear(),n=0,t="held",h=e.now(),m}}}async function sn(e){const t=e.windowMs??1500,n=Math.max(1,Math.min(e.sampleMs??50,t)),o=e.sleep??(T=>new Promise(I=>setTimeout(I,T))),a=e.gate;if(!a)return{loop:"self-driven",reason:"no same-realm loop gate is installed, so nothing here controls this game’s scheduling",evidence:{pendingWhileHeld:0,firedWhileHeld:0,progressBefore:0,progressAfter:0,windowMs:t}};const u=a.stats(),i=e.progress();let g=u,h=i,y=u.pending,w=u.mode==="held";for(let T=0;T<t;T+=n)if(await o(Math.min(n,t-T)),g=a.stats(),h=e.progress(),y=Math.max(y,g.pending),g.mode!=="held"){w=!1;break}const d=g.firedWhileHeld-u.firedWhileHeld,p={pendingWhileHeld:y,firedWhileHeld:d,progressBefore:i,progressAfter:h,windowMs:t};return!w||g.mode!=="held"?{loop:"unmeasured",reason:"the gate was not held for the whole probe window — something else released it, so control was not measured",evidence:p}:d>0?{loop:"self-driven",reason:`${d} gated callback(s) ran while the gate was held — the gate leaked, so it cannot claim control`,evidence:p}:h>i?{loop:"self-driven",reason:`the game kept rendering while its scheduling was withheld (frame ${i} → ${h} in ${t}ms) — something outside this gate drives its loop`,evidence:p}:y===0?{loop:"unmeasured",reason:"nothing was due while the gate was held, so it withheld nothing and the probe learned nothing about this loop — note a hidden or backgrounded tab schedules no frames at all, which is a fact about the TAB, never about the game",evidence:p}:{loop:"gated",reason:`verified: ${y} scheduled callback(s) withheld, none ran, and no frame advanced in ${t}ms of held time`,evidence:p}}let V=null;function ht(){return V}const z=new Set(["keydown","keyup","keypress","mousedown","mouseup","mousemove","click","dblclick","contextmenu","wheel","pointerdown","pointerup","pointermove","pointercancel","touchstart","touchmove","touchend","touchcancel"]);function Se(e){const t=new Set,n=new WeakSet,o=((a,u)=>{const i=vt(a,u),g=yt(a,u);if(e()){for(const y of i)t.add(y);for(const y of g)t.delete(y);return!1}if(n.has(u))return!1;let h=!1;for(const y of g)t.delete(y)&&(h=!0);return h&&n.add(u),!h});return o.outstandingReleases=()=>{const a=[];for(const u of t){const i=u.indexOf(":"),g=u.slice(0,i),h=u.slice(i+1);g==="key"?a.push(new KeyboardEvent("keyup",{code:h,key:wt(h),bubbles:!0})):g==="mouse"?a.push(new MouseEvent("mouseup",{button:Number(h),bubbles:!0})):g==="pointer"&&typeof PointerEvent=="function"&&a.push(new PointerEvent("pointerup",{pointerId:Number(h),bubbles:!0}))}return a},o}function wt(e){const t=/^Key([A-Z])$/.exec(e);if(t)return t[1].toLowerCase();const n=/^Digit(\d)$/.exec(e);return n?n[1]:e==="Space"?" ":e}function be(e){const t=e.changedTouches;return t?Array.from(t,n=>`touch:${n.identifier}`):["touch"]}function vt(e,t){switch(e){case"keydown":return[`key:${t.code}`];case"mousedown":return[`mouse:${t.button}`];case"pointerdown":return[`pointer:${t.pointerId}`];case"touchstart":return be(t);default:return[]}}function yt(e,t){switch(e){case"keyup":return[`key:${t.code}`];case"mouseup":return[`mouse:${t.button}`];case"pointerup":case"pointercancel":return[`pointer:${t.pointerId}`];case"touchend":case"touchcancel":return be(t);default:return[]}}const Ee=new Set(["setTimeout","clearTimeout","setInterval","clearInterval","requestAnimationFrame","cancelAnimationFrame"]);function Re(e,t){return typeof e!="function"||Object.hasOwn(e,"prototype")?e:e.bind(t)}const k="",F=new Map,U=new Map,H=new Map,ce=new WeakMap;function K(e){let t=H.get(e);return t||(t=new nt,H.set(e,t)),t}function an(e,t=k){const n=K(t);return n.surface=e,n}function ln(e=k){H.get(e)?.reset()}function cn(e=k){return K(e)}function un(){const e=[];for(const[t,n]of H)n.surface&&e.push({surface:n.surface,gate:Te(t)});return e}function Te(e){return()=>Fe()&&(U.get(e)??(()=>!0))()}function pt(e,t){const n=Te(e);return()=>t.alive&&n()}const M=[];function _t(){return M[M.length-1]??null}De(_t);function $(e,t){M.push(e);try{return t()}finally{M.pop()}}function St(e,t){return{setTimeout(n,o,...a){return t.setTimeout((...u)=>$(e,()=>n(...u)),o,...a)},clearTimeout:n=>t.clearTimeout(n),setInterval(n,o,...a){return t.setInterval((...u)=>$(e,()=>n(...u)),o,...a)},clearInterval:n=>t.clearInterval(n),requestAnimationFrame(n){return t.requestAnimationFrame(o=>$(e,()=>n(o)))},cancelAnimationFrame:n=>t.cancelAnimationFrame(n)}}function bt(e){const t=new Map;return new Proxy(console,{get(n,o){const a=Reflect.get(n,o,n);if(typeof a!="function")return a;let u=t.get(o);return u||(u=(...i)=>$(e,()=>a.apply(n,i)),t.set(o,u)),u}})}function ue(e){let t=!1,n=null;return()=>{if(t)return n;t=!0;try{n=ft(window[e])}catch{n=null}return n}}let Ie=null;function Et(e){Ie=e}let Pe=null;function Rt(e){const t={alive:!0},n=new Map,o=pt(e,t),a=gt({setTimeout:(S,A)=>window.setTimeout(S,A),clearTimeout:S=>window.clearTimeout(S),setInterval:(S,A)=>window.setInterval(S,A),clearInterval:S=>window.clearInterval(S),requestAnimationFrame:S=>window.requestAnimationFrame(S),cancelAnimationFrame:S=>window.cancelAnimationFrame(S),now:()=>performance.now()}),u=new WeakSet,i=(S,A)=>{u.has(S)||(u.add(S),a.recordInput?.(A))};e===k&&(Pe=a);const g=K(e),h=St(e,a.schedulers),y=ue("localStorage"),w=ue("sessionStorage");let d,p;const T=me(de(window,()=>!0,{page:g,role:"window"}),o,{execute:S=>$(e,S),realmId:e,recordInput:i,role:"window",schedulers:h,self:()=>d,document:()=>p,localStorage:y,sessionStorage:w,isolateExpandos:!0});d=T.proxy;const I=me(de(document,()=>!0,{page:g,role:"document"}),o,{execute:S=>$(e,S),realmId:e,recordInput:i,role:"document",self:()=>d});return p=I.proxy,{moduleUrls:n,live:t,loop:a,document:I,localStorage:y,sessionStorage:w,window:T,public:{recordModuleUrl(S){t.alive&&n.set(new URL(S).pathname,S)},console:bt(e),document:p,globalThis:d,timers:h,window:d}}}function Y(e=k){let t=F.get(e);return t||(t=Rt(e),F.set(e,t)),t.public}function Tt(e){return[...F.get(e)?.moduleUrls.values()??[]]}function dn(e){const t=F.get(e);if(!t)return null;const n={reads:0,writes:0};return{globals:t.window.expandoCount(),mountId:e,loop:t.loop.stats(),listeners:{document:t.document.count(),window:t.window.count()},storage:{local:t.localStorage()?.stats()??n,session:t.sessionStorage()?.stats()??n}}}function It(e=k){U.delete(e),H.get(e)?.reset(),e!==k&&H.delete(e);const n=F.get(e);if(!n)return{mountId:e,listeners:0,timers:{timeouts:0,intervals:0,animationFrames:0,parkedCallbacks:0}};F.delete(e),n.moduleUrls.clear(),n.live.alive=!1;const o=n.document.dispose()+n.window.dispose(),a=n.loop.dispose?.()??{timeouts:0,intervals:0,animationFrames:0,parkedCallbacks:0};return e===k&&Ce(),{mountId:e,listeners:o,timers:a}}function fn(e,t=k){U.set(t,e)}function de(e,t,n){const o=new Map,a=Se(t),u=()=>n?.page.surface??null,i=()=>n?.role==="window"&&n.page.surface?n.page:null,g=(c,f,s)=>{const r=i();if(r&&c==="resize"&&f!==null){r.addResizeListener(f,s);return}if((c==="load"||c==="DOMContentLoaded"||c==="pageshow")&&f!==null&&document.readyState==="complete"){window.setTimeout(()=>{const l=new Event(c);typeof f=="function"?f.call(p,l):f.handleEvent(l)},0);return}if(z.has(c)&&f!==null){let l=o.get(c);l||(l=new Map,o.set(c,l));const v=f;let b=l.get(v);b||(b=function(m){if(!a(c,m))return typeof v=="function"?v.call(this,m):v.handleEvent(m)},l.set(v,b)),e.addEventListener(c,b,s);return}e.addEventListener(c,f,s)},h=(c,f,s)=>{const r=i();if(r&&c==="resize"&&f!==null){r.removeResizeListener(f,s);return}if(z.has(c)&&f!==null){const l=o.get(c),v=l?.get(f);if(v){l?.delete(f),e.removeEventListener(c,v,s);return}}e.removeEventListener(c,f,s)},y=new WeakMap,w=c=>{if(typeof c!="string"||!c.startsWith("on"))return null;const f=c.slice(2);return z.has(f)?f:null},d=c=>{console.error(dt(c))};let p;const T=()=>{const c=Reflect.get(e,"location",e);if(!c||!n)return null;const f=ce.get(n.page);if(f?.source===c)return{value:f.view};const s=ut(c,d,{reloadGame:()=>{const r=Ie;return r?(r(),!0):!1}});return ce.set(n.page,{source:c,view:s}),{value:s}},I=c=>{const f=i();if(!f)return null;if(c==="window"||c==="self"||c==="top"||c==="parent")return{value:p};if(c!=="innerWidth"&&c!=="outerWidth"&&c!=="innerHeight"&&c!=="outerHeight")return null;const s=f.viewport();return s?c==="innerWidth"||c==="outerWidth"?{value:s.width}:c==="innerHeight"||c==="outerHeight"?{value:s.height}:null:null},S=c=>{if(!n)return null;if(c==="location")return T();if(n.role==="document"){const f=u();if(f&&(c==="body"||c==="documentElement"))return{value:f};if(f&&c==="head")return{value:n.page.head()};if(f&&c==="title")return{value:n.page.title};if(f&&c==="currentScript")return{value:n.page.currentScript};if(f&&c==="activeElement"){const s=Reflect.get(e,"activeElement",e);return{value:s&&f.contains(s)?s:f}}}return I(c)},A=c=>{if(n?.role!=="document"||typeof c!="string")return;const f=u();if(!f)return;const s=e;if(c==="querySelector")return r=>r.trim().toLowerCase()==="head"?n.page.head():f.matches(r)?f:f.querySelector(r);if(c==="querySelectorAll")return f.querySelectorAll.bind(f);if(c==="getElementById")return r=>{const l=s.getElementById(r);return l&&f.contains(l)?l:null};if(c==="getElementsByClassName")return f.getElementsByClassName.bind(f);if(c==="getElementsByTagName")return r=>{if(r.toLowerCase()!=="head")return f.getElementsByTagName(r);const l=n.page.head();return l?Object.assign([l],{item:v=>v===0?l:null,namedItem:v=>l.id===v?l:null}):[]};if(c==="elementFromPoint"||c==="elementsFromPoint")return(r,l)=>{const v=f.getBoundingClientRect(),m=s[c].bind(s)(r+v.left,l+v.top);return Array.isArray(m)?m.filter(_=>f.contains(_)):m&&f.contains(m)?m:null}};return p=new Proxy(e,{get(c,f){if(f==="addEventListener")return g;if(f==="removeEventListener")return h;const s=S(f);if(s)return s.value;const r=A(f);if(r)return r;if(typeof f=="string"&&Ee.has(f)){const v=V;if(v)return v.schedulers[f]}const l=Reflect.get(c,f,c);return typeof l!="function"?l:y.get(l)??Re(l,c)},set(c,f,s){if(f==="location"&&n)return d(`${n.role}.location = ${String(s)}`),!0;if(n?.role==="document"&&f==="title"&&n.page.surface)return n.page.title=String(s),!0;if(w(f)!==null&&typeof s=="function"){const l=s,v=function(b){if(t())return l.call(this,b)};return y.set(v,l),Reflect.set(c,f,v,c)}if(f==="onload"&&typeof s=="function"&&document.readyState==="complete"){const l=s;return window.setTimeout(()=>l.call(p,new Event("load")),0),!0}return Reflect.set(c,f,s,c)}}),p}function fe(e){return typeof e=="boolean"?e:e?.capture??!1}function me(e,t,n){const o=n.execute??(s=>s()),a=[],u=Se(t);let i=!1,g=!1;const h=s=>{if(g)return;g=!0;const r=n.realmId?`"${n.realmId}"`:"the default realm";console.warn(`volter: a stopped game tried to register ${s} on its ${n.role} after its realm (${r}) was reclaimed; refused. Later refusals in this generation are silent.`)},y=new Map,w=new Map,d=new WeakMap;let p;const T=s=>n.role==="window"&&n.self&&(s===e||typeof window<"u"&&s===window)?n.self():n.document&&(s===n.document()||typeof document<"u"&&s===document)?n.document():s,I=s=>{const r=d.get(s);if(r)return r;const l=new Proxy(s,{get(v,b){if(b==="currentTarget")return p;if(b==="target"||b==="srcElement"){const _=Reflect.get(v,b,v);return _===v.currentTarget?p:T(_)}if(b==="view")return T(Reflect.get(v,b,v));if(b==="composedPath")return()=>v.composedPath().map(T);const m=Reflect.get(v,b,v);return typeof m=="function"?m.bind(v):m}});return d.set(s,l),l},S=s=>{const r=a.indexOf(s);r!==-1&&a.splice(r,1),e.removeEventListener(s.type,s.actual,s.capture),s.abort?.signal.removeEventListener("abort",s.abort.handler)},A=(s,r,l)=>{if(r===null)return;if(i){h(`a "${s}" listener`);return}const v=fe(l),b=l&&typeof l!="boolean"?l.signal:void 0;if(b?.aborted||a.some(R=>R.type===s&&R.original===r&&R.capture===v))return;let m;const _=function(R){if(l&&typeof l!="boolean"&&l.once){const C=a.indexOf(m);C!==-1&&a.splice(C,1),m.abort?.signal.removeEventListener("abort",m.abort.handler)}if(z.has(s)){const C=u(s,R);if(n.recordInput?.(R,C),C)return}const L=I(R);return o(()=>typeof r=="function"?r.call(p,L):r.handleEvent(L))},E=()=>S(m);m={type:s,original:r,actual:_,capture:v,...b?{abort:{signal:b,handler:E}}:{}},a.push(m),e.addEventListener(s,_,l),b?.addEventListener("abort",E,{once:!0}),(s==="load"||s==="DOMContentLoaded"||s==="pageshow")&&document.readyState==="complete"&&window.setTimeout(()=>{!i&&a.includes(m)&&_.call(e,new Event(s))},0)},c=(s,r,l)=>{if(r===null)return;const v=fe(l),b=a.find(m=>m.type===s&&m.original===r&&m.capture===v);b?S(b):e.removeEventListener(s,r,l)},f=s=>typeof s=="string"&&s.startsWith("on")&&s.length>2?s.slice(2):null;return p=new Proxy(e,{get(s,r){if(r==="addEventListener")return A;if(r==="removeEventListener")return c;const l=w.get(r);if(l)return l.original;if(n.self&&(n.role==="window"&&(r==="window"||r==="self"||r==="frames"||r==="top"||r==="parent")||n.role==="document"&&r==="defaultView"))return n.self();if(n.role==="window"&&r==="document"&&n.document)return n.document();if(n.role==="window"&&r==="globalThis"&&n.self)return n.self();if(n.role==="window"&&r==="localStorage"&&n.localStorage)return n.localStorage()?.storage;if(n.role==="window"&&r==="sessionStorage"&&n.sessionStorage)return n.sessionStorage()?.storage;if(typeof r=="string"&&Ee.has(r)&&n.schedulers)return n.schedulers[r];const v=y.get(r);if(v)return v.get?v.get.call(p):v.value;const b=Reflect.get(s,r,s);return typeof b!="function"?b:Re(b,s)},set(s,r,l){if(r==="location")return Reflect.set(s,r,l,s);if(n.role==="window"&&(r==="document"||r==="globalThis"||r==="localStorage"||r==="sessionStorage"))return!0;const v=f(r);if(v){if(i)return h(`an "${String(r)}" handler`),!0;const b=w.get(r);if(b&&(e.removeEventListener(b.type,b.actual),w.delete(r)),typeof l!="function")return!0;const m=l,_=(v==="load"||v==="DOMContentLoaded"||v==="pageshow")&&document.readyState==="complete",E=function(R){if(z.has(v)){const C=u(v,R);if(n.recordInput?.(R,C),C)return}const L=o(()=>m.call(p,I(R)));return L===!1&&R.preventDefault(),L};return w.set(r,{type:v,original:m,actual:E}),e.addEventListener(v,E),_&&window.setTimeout(()=>{!i&&w.get(r)?.actual===E&&E.call(e,new Event(v))},0),!0}return n.isolateExpandos?(y.set(r,{configurable:!0,enumerable:!0,value:l,writable:!0}),!0):Reflect.set(s,r,l,s)},defineProperty(s,r,l){return n.isolateExpandos?Reflect.getOwnPropertyDescriptor(s,r)?.configurable===!1?!1:(y.set(r,{...l,configurable:!0,enumerable:l.enumerable??!0}),!0):Reflect.defineProperty(s,r,l)},deleteProperty(s,r){return y.delete(r)?!0:n.isolateExpandos?Reflect.getOwnPropertyDescriptor(s,r)?.configurable!==!1:Reflect.deleteProperty(s,r)},has(s,r){return y.has(r)||Reflect.has(s,r)},ownKeys(s){const r=new Set(Reflect.ownKeys(s));for(const l of y.keys())typeof l!="number"&&r.add(l);return[...r]},getOwnPropertyDescriptor(s,r){const l=Reflect.getOwnPropertyDescriptor(s,r);return l?.configurable===!1?l:y.get(r)??l}}),{proxy:p,count:()=>a.length+w.size,expandoCount:()=>y.size,dispose(){for(const r of u.outstandingReleases()){for(const l of[...a])l.type===r.type&&l.actual.call(p,r);for(const l of w.values())l.type===r.type&&l.actual.call(p,r)}i=!0;const s=a.length+w.size;for(const r of[...a])S(r);for(const r of w.values())e.removeEventListener(r.type,r.actual);return w.clear(),y.clear(),s}}}let B=!1;function Ce(){if(!B)return;const e=globalThis,t=Y();V=Pe,e.__volterGameTimers=t.timers,e.__volterGameWindow=t.window,e.__volterGameDocument=t.document,e.__volterGameConsole=t.console}function mn(){if(B||typeof window>"u"||typeof document>"u")return;B=!0;const e=globalThis;He(),e.__volterGameModuleUrls=Tt,e.__volterGameRealm=t=>(M.push(t),queueMicrotask(()=>{const n=M.lastIndexOf(t);n>=0&&M.splice(n,1)}),Y(t)),Ce()}function Q(e,t){const n=It(e),o=n.timers.timeouts+n.timers.intervals+n.timers.animationFrames+n.timers.parkedCallbacks;if(n.listeners===0&&o===0)return;const a=[];n.listeners>0&&a.push(`${n.listeners} window/document listener${n.listeners===1?"":"s"}`),o>0&&a.push(`${o} timer/frame callback${o===1?"":"s"}`),P.logStructured("warn",`${t} stopped without releasing ${a.join(" and ")}; the editor reclaimed them.`,"environment",void 0,{instanceId:e,instanceName:t})}function Le(e=typeof window>"u"?null:window){const t=e?.volterGame;return!t||t.contractVersion!==1?null:t}const Pt=Object.entries(Oe).filter(([,e])=>!e.optional).map(([e])=>e);function Ae(e){const t=e?.scenes;if(t==null)return{scenes:null,malformed:null};if(typeof t!="object")return{scenes:null,malformed:`declared as ${typeof t}; expected an object with list(), current() and goTo()`};const n=Pt.filter(o=>typeof t[o]!="function");return n.length>0?{scenes:null,malformed:`declared a scenes surface missing required member(s): ${n.join(", ")}`}:{scenes:t,malformed:null}}function Ct(e){const t=e?.ready;if(t==null)return{ready:null,malformed:null};if(typeof t=="function"){const n=t;return{ready:()=>Promise.resolve(n()),malformed:null}}if(typeof t.then=="function"){const n=t;return{ready:()=>Promise.resolve(n),malformed:null}}return{ready:null,malformed:`declared \`ready\` as ${typeof t}; expected a promise or a function returning one`}}function Lt(e){const t=e?.world;return t==null?{world:null,malformed:null}:typeof t!="object"||t.isScene!==!0?{world:null,malformed:`declared \`world\` as ${typeof t}; expected the game's own THREE.Scene`}:{world:t,malformed:null}}function At(e){const t=e?.presentation;if(t==null)return{canvas:null,malformed:null};const n=t;return typeof n!="object"||n.tagName!=="CANVAS"||typeof n.getContext!="function"?{canvas:null,malformed:`declared \`presentation\` as ${typeof t=="object"?String(n.tagName??"object"):typeof t}; expected the game's own <canvas> element`}:{canvas:t,malformed:null}}const gn=Object.freeze(Object.defineProperty({__proto__:null,readGameContract:Le,readGamePresentation:At,readGameReady:Ct,readGameScenes:Ae,readGameWorld:Lt},Symbol.toStringTag,{value:"Module"}));function kt(e){if(!Array.isArray(e))throw new Error("scenes.list() did not return an array");const t=new Set;for(const n of e){if(typeof n!="object"||n===null||typeof n.id!="string"||n.id.trim().length===0||typeof n.label!="string"||n.label.trim().length===0)throw new Error("scenes.list() returned an invalid { id, label } scene");if(t.has(n.id))throw new Error(`scenes.list() returned duplicate id "${n.id}"`);t.add(n.id)}return e}function xt(e){return typeof e?.goToScene=="function"}function hn(e,t={}){const{scenes:n,malformed:o}=Ae(e);if(o!==null&&P.warn(`Ignored the game contract's \`scenes\` surface: ${o}`,"ingest"),!n)return null;let a=!1;const u=()=>{try{return kt(n.list())}catch(g){return a||(a=!0,P.warn(`Ignored invalid game-contract scenes: ${g instanceof Error?g.message:String(g)}`,"ingest")),[]}},i=g=>{const h=u().map(w=>w.id);return h.includes(g)?(t.onSwitchAccepted?.(g),{ok:!0,settled:(async()=>{try{return await n.goTo(g),{requested:g,current:n.current()}}catch(w){return{requested:g,current:n.current(),error:w instanceof Error?w.message:String(w)}}})()}):{ok:!1,error:`scenes.goTo: "${g}" is not one of this game's scenes (${h.length>0?h.join(", "):"it lists none"}).`,known:h}};return{title:"Scenes",storiesFor:g=>u().map(({id:h,label:y})=>({id:h,label:y})),active:g=>n.current(),goToScene:i,apply:(g,h)=>{if(h===null){P.warn("This game’s scenes cannot be cleared: it is always in one of its own scenes. Pick the scene to switch to instead.","ingest");return}const y=i(h);if(!y.ok){P.warn(`${y.error} — ignoring.`,"ingest");return}y.settled.then(w=>{w.error!==void 0&&P.error(`scenes.goTo("${h}") failed: ${w.error}`,"ingest")})}}}function Gt(){const e=G();if(!e)return null;const n=(()=>{switch(e.kind){case"canvas":return e.session.adapter;case"dom":return e.session.adapter;case"three":return e.session.mount?.authoring}})()?.stories;return xt(n)?n:null}let J=!1;function ge(){return J}function wn(){J=!0}function vn(){J=!1}let D=null,x=null;function yn(e){D=e,e||X()}function pn(){D=null,X()}function X(){const e=x;x=null,e&&(clearTimeout(e.timer),e.settle(null))}function ke(){const e=D?.renderer.domElement;return typeof e=="object"&&e!==null?e:null}function _n(){const e=x;if(!(!e||!D))try{const t=D.renderer;if(typeof t.getRenderTarget=="function"&&t.getRenderTarget()!==null)return;const n=ke();if(!n||n.width===0||n.height===0)return;const o=e.image??n.ownerDocument.createElement("canvas");o.width=n.width,o.height=n.height;const a=o.getContext("2d");if(!a||(a.drawImage(n,0,0),e.image=o,e.delivering))return;e.delivering=!0,setTimeout(()=>{x===e&&(x=null,clearTimeout(e.timer),e.settle(e.image))},0)}catch{}}function Mt(e=2e3){return D?(X(),new Promise(t=>{const n=setTimeout(()=>{x?.timer===n&&(x=null),t(null)},e);x={settle:t,timer:n,image:null,delivering:!1}})):Promise.resolve(null)}const $t={play:e=>(e.play(),"driven"),resume:e=>(e.resume(),"driven"),stop:(e,t)=>t?.stopEndsRun?"declined":(e.pause(),"driven"),pause:e=>(e.pause(),"driven"),step:e=>e.canStep?(e.step(),"driven"):{ok:!1,error:"this ingested game cannot be stepped — no serve-time loop gate measured control over its frames, so a single-frame step would be a button that lies (see ingest/same-realm-loop-gate.ts)"}};function Ft(e,t,n){if(!je(t))return null;const o=$t[t](e,n);return o==="declined"?null:o!=="driven"?o:{ok:!0,data:{ingest:!0,playing:e.playing}}}function Ht(){return Y().window}function Z(){return typeof window>"u"?null:Le(Ht())}let ee=!1;function Dt(){return ee}function N(e){ee=e}function jt(){N(!1);const e=window;delete e.__volterMountCold,delete e.__volterIngestPlayed}function he(e,t,n){const o=(a,u)=>ze({seam:`contract.lifecycle.${t}`,subject:"game",epoch:qe(e),stage:"effect",outcome:a,source:"consumer",detail:u});try{n(),o("pass",`the mounted ingest lifecycle consumed lifecycle.${t}`)}catch(a){throw o("fail",`lifecycle.${t} failed: ${a instanceof Error?a.message:String(a)}`),a}}function Sn(e={}){const t=Z(),n=t?.lifecycle,o=()=>{if(t&&n?.start){he(t,"start",()=>n.start?.());return}window.dispatchEvent(new CustomEvent("volter:ingest-play"))},a=typeof n?.pause=="function",u=typeof n?.resume=="function";return t&&a!==u?{start:o,pauseGap:a?"the game contract declares lifecycle.pause without lifecycle.resume":"the game contract declares lifecycle.resume without lifecycle.pause"}:t&&a&&u?{start:o,setPaused:i=>he(t,i?"pause":"resume",()=>{i?n?.pause?.():n?.resume?.()})}:e.setPaused?{start:o,setPaused:e.setPaused,...e.step?{step:e.step}:{},...e.canStep?{canStep:e.canStep}:{}}:{start:o,pauseGap:e.pauseGap??"the game declares no lifecycle.pause/resume pair and its mounted adapter exposes no setPaused capability"}}function bn(){const e=G();return e?e.session.lifecycle.pauseGap??null:null}function we(e){const t=G();if(t)for(const n of t.siblings)try{n.setPaused?.(e)}catch(o){P.error(`Composite sibling setPaused(${e}) failed: ${o}`,"ingest")}}function zt(){return Z()}function xe(){const e=G()?.session.lifecycle;if(!e?.setPaused)return null;const t=()=>{e.setPaused?.(!0),we(!0),N(!1)},n=()=>{e.setPaused?.(!1),we(!1),N(!0)};return{get playing(){return ee},play(){Ne();const o=window;if(o.__volterIngestPlayed)return n();o.__volterIngestPlayed=!0,e.start(),n()},pause:t,resume:n,canStep:!!e.step&&(e.canStep?.()??!0),step(){e.canStep?.()!==!1&&(e.step?.(),N(!1))}}}function En(e){const t=xe();return t?(t.pause(),!0):!1}const Nt=Ve(e=>{e.level==="warn"?P.warn(e.message,"ingest"):P.log(e.message,"ingest")});let Bt=0,Ge="";function Rn(e){Ge=`${e}#${++Bt}`}function Tn(e){const t=mt(e.realmLoopVerdict?.()),n=e.realmLoopVerdict?.()?.reason??null;return t!==null||n!==null?{loop:t,reason:n}:e.realmLoopVerdict?{loop:null,reason:null}:{loop:null,reason:Wt}}function In(){return{loop:null,reason:"⏸ calls the host runtime's own play pause on this route, but no probe has measured whether that reaches this game's frames — an unmodified React game that schedules its own timers is not held by the host loop"}}const Wt="this mount installs no loop gate, so no verdict will ever be measured here — nothing in the editor holds this game's frames";function Ot(e,t,n){const o=Ze(t?.systems,n),a=new Map(o.empty.map(i=>[i.slot,i.evidence])),u=new Map(o.malformed.map(i=>[i.slot,i.reason]));return Ye.map(i=>{if(e[i]!=null)return{slot:i,state:"bound",proof:Be({slot:i,adapter:e[i],subject:"game"})};const g=a.get(i);if(g!==void 0)return{slot:i,state:"empty",evidence:g};const h=u.get(i);return h!==void 0?{slot:i,state:"malformed",evidence:h}:{slot:i,state:"unanswered"}})}function qt(){const e=Je();switch(e.state){case"absent":return null;case"loading":return{state:"loading"};case"ready":return{state:"ready",dataFile:e.writer.dataFile};default:return{state:"failed",reason:e.reason}}}function te(){const e=G(),t=e?.coverage;if(!e||!t)return null;const n=Qe(),o=t.loop(),a=zt();return Ue({worldId:e.worldId,reach:t.reach,surface:e.kind,reachMechanism:t.reachMechanism,loop:o.loop,loopReason:o.reason,contract:Ke(a),systemAdapters:Ot(pe(),a,e.kind),ownership:n?{writable:n.writable,reason:n.reason??null,recorder:n.recorder??null}:null,dataWriter:qt(),projectVerbs:[],writeReach:t.writeReach?.()??null})}function Pn(e){const t=G();if(!t)return;t.coverage=e;const n=te();n&&Nt.report(Ge,n)}function Cn(e,t){if(!t)return;const n=`Ingest "${e}" loop: ${t.loop} — ${t.reason}`;t.loop==="gated"?P.log(n,"ingest"):P.warn(n,"adapter")}const Vt=["hierarchy","selection","transforms","inspector","assetSubject","structure","persistence","pickable","rects","boxEdit","text","colorSample","stories","truth","assetDrop"];function Ut(e){return Vt.filter(t=>e[t]!==void 0)}function Ln(e){return{coverage:()=>te(),prepareCoverage:()=>Xe(),authoringProviders:()=>Ut(e),engineSystems:()=>Object.keys(pe())}}function An(e,t){Object.defineProperties(e,{loop:{enumerable:!0,get:()=>t.realmLoopVerdict?.()?.loop??null},loopReason:{enumerable:!0,get:()=>t.realmLoopVerdict?.()?.reason??null}}),e.realmLoopStats=()=>ht()?.stats()??null}function kn(e,t){const n=e,o=typeof n.querySelectorAll=="function"?n.querySelectorAll("*").length:t.nodeCount(),a=Object.keys(e).some(u=>u.startsWith("__reactContainer"));return{elementCount:o,hierarchyNodeCount:t.nodeCount(),reactRootPresent:a}}function xn(e,t){window[e]=t}function ne(e){delete window[e]}function Me(){Et(null);const e=G();if(e){Jt(null),jt();try{Z()?.lifecycle?.dispose?.()}catch(t){P.error(`The game's own lifecycle.dispose threw at teardown: ${t}`,"ingest")}for(let t=e.siblings.length-1;t>=0;t--)try{e.siblings[t].dispose()}catch(n){P.error(`Composite sibling dispose failed: ${n}`,"ingest")}switch(e.kind){case"three":Kt(e.session);return;case"canvas":Yt(e.session);return;case"dom":Qt(e.session);return}}}function Kt(e){if(e.mount?.authoring&&e.mount.authoring.dispose?.(),W(null),O(null),q(),e.resizeObserver?.disconnect(),e.inputGateUnsubscribe?.(),e.mount)try{e.store.exitPlayScene()}catch{}e.store.shell.setPlayState("stopped");try{e.mount?.game.dispose()}catch{}Q("","The ingested game"),ne("__volterIngest"),P.log("Ingest root unmounted","ingest")}function Yt(e){e.adapter&&e.adapter.dispose(),W(null),O(null),q(),e.store.shell.setPlayState("stopped");try{e.dispose()}catch{}Q("","The ingested canvas game"),ne("__volterIngest2D"),P.log("canvas ingest root unmounted","ingest")}function Qt(e){e.adapter.dispose(),W(null),O(null),q(),e.store.shell.setPlayState("stopped");try{e.stop()}catch{}Q("","The ingested DOM game"),ne("__volterIngestReact"),P.log("DOM ingest root unmounted","ingest")}function Gn(){G()?.kind==="three"&&Me()}let j=null;function G(){return j}function Jt(e){j=e}function $e(){return j?.kind??null}function ve(){return $e()!==null}function Mn(e){j&&(j.siblings=[...e])}let ye=Promise.resolve();function $n(e){const t=ye.then(e);return ye=t.then(()=>{},()=>{}),t}We({id:"ingest",priority:1,mounted:ve,playing:()=>Dt()||ge(),stop:Me,instanceContainer:()=>null,frameCanvas:ke,snapshotFrame:()=>Mt(),command:e=>{const t=ve()?xe():null;return t?Ft(t,e.type,{stopEndsRun:ge()}):null},scenes:Gt,surface:$e,coverage:te,authoringRefusal:()=>j?.kind==="dom"?"This is an ingested native-React game: its components render directly as a DOM layer under the host React — there is no scene graph or renderer to introspect, and authoring is deliberately off for react ingests (the editor never writes JSX back into an unmodified game). The game is hosted, sized, and disposed; play it in the Game tab.":null});export{Q as $,un as A,an as B,Ct as C,Z as D,ln as E,At as F,rn as G,Ht as H,sn as I,pn as J,ht as K,Lt as L,Rn as M,N,Cn as O,Tn as P,An as Q,dn as R,Gt as S,hn as T,Wt as U,yn as V,_n as W,on as X,cn as Y,et as Z,ie as _,G as a,mn as a0,_t as a1,gn as a2,wn as b,Me as c,ge as d,vn as e,bn as f,xe as g,En as h,ve as i,Sn as j,Jt as k,fn as l,In as m,kn as n,Ln as o,xn as p,mt as q,Pn as r,$n as s,te as t,Dt as u,jt as v,Mn as w,$e as x,Gn as y,zt as z};
@@ -1 +1 @@
1
- import{e3 as p}from"./index-BRJMIUK0.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";const u=1e-9,d=1e5;function f(m,e,t){const r=t.end-t.start,i=t.loop&&r>u,o=[];let s=m,a=e,c=!1,l=0;for(;;){const h=t.end-s;if(!i||a<=h+u){const n=Math.min(s+a,t.end);o.push({from:s,to:n,direction:"forward"}),s=n;break}if(o.push({from:s,to:t.end,direction:"forward"}),a-=h,s=t.start,c=!0,l++,l>d){const n=t.start+a%r;o.push({from:s,to:n,direction:"forward"}),s=n;break}}return{pos:s,intervals:o,looped:c}}function g(m,e,t){const r=t.end-t.start,i=t.loop&&r>u,o=[];let s=m,a=e,c=!1,l=0;for(;;){const h=s-t.start;if(!i||a<=h+u){const n=Math.max(s-a,t.start);o.push({from:s,to:n,direction:"reverse"}),s=n;break}if(o.push({from:s,to:t.start,direction:"reverse"}),a-=h,s=t.end,c=!0,l++,l>d){const n=t.end-a%r;o.push({from:s,to:n,direction:"reverse"}),s=n;break}}return{pos:s,intervals:o,looped:c}}function _(m,e){return m<e.start?e.start:m>e.end?e.end:m}class D{_previousTime;_currentTime;_range;_timeScale;_playDirection="forward";_lastCrossingDirection="forward";_playbackState="stopped";_evaluators=[];_registrationCounter=0;constructor(e={}){const t=e.start??0,r=e.end??Math.max(t,1);if(r<t)throw new Error(`[AnimationClock] range end (${r}) must be >= start (${t})`);const i=e.timeScale??1;if(!Number.isFinite(i)||i<0)throw new Error(`[AnimationClock] timeScale must be a finite number >= 0, got ${i}`);this._range={start:t,end:r,loop:e.loop??!1},this._timeScale=i,this._previousTime=t,this._currentTime=t}get time(){return this._currentTime}get previousTime(){return this._previousTime}get direction(){return this._playbackState==="playing"?this._playDirection:"paused"}get playbackState(){return this._playbackState}get timeScale(){return this._timeScale}set timeScale(e){if(!Number.isFinite(e)||e<0)throw new Error(`[AnimationClock] timeScale must be a finite number >= 0, got ${e}`);this._timeScale=e}get range(){return this._range}setRange(e){const t=e.start??this._range.start,r=e.end??this._range.end,i=e.loop??this._range.loop;if(r<t)throw new Error(`[AnimationClock] range end (${r}) must be >= start (${t})`);this._range={start:t,end:r,loop:i};const o=_(this._currentTime,this._range);o!==this._currentTime&&this.seek(o)}play(e){e&&(this._playDirection=e),this._playbackState="playing"}pause(){this._playbackState="paused"}stop(){this._playbackState="stopped"}seek(e){const t=_(e,this._range);if(t===this._currentTime)return this.emit(this._currentTime,this._currentTime,[{from:t,to:t,direction:this._lastCrossingDirection}],!1,this._lastCrossingDirection);const r=t>this._currentTime?"forward":"reverse",i=this._currentTime;return this._previousTime=i,this._currentTime=t,this._lastCrossingDirection=r,this.emit(i,t,[{from:i,to:t,direction:r}],!1,r)}seekFrame(e,t){if(!Number.isFinite(t)||t<=0)throw new Error(`[AnimationClock] seekFrame fps must be a finite number > 0, got ${t}`);return this.seek(this._range.start+e/t)}advance(e){if(this._playbackState!=="playing")return null;if(!Number.isFinite(e))throw new Error(`[AnimationClock] advance(dt) requires a finite dt, got ${e}`);const t=Math.abs(e)*this._timeScale,r=this._currentTime;if(t===0)return this.emit(r,r,[],!1,this._playDirection);const i=this._playDirection==="forward"?f(r,t,this._range):g(r,t,this._range);return this._previousTime=r,this._currentTime=i.pos,this._lastCrossingDirection=this._playDirection,this.emit(r,i.pos,i.intervals,i.looped,this._playDirection)}subscribe(e,t){if(!p.includes(e))throw new Error(`[AnimationClock] unknown phase "${e}". Valid: ${p.join(", ")}`);const r={phase:e,order:this._registrationCounter++,fn:t};return this._evaluators.push(r),{dispose:()=>{const i=this._evaluators.indexOf(r);i!==-1&&this._evaluators.splice(i,1)}}}emit(e,t,r,i,o){const s={previousTime:e,currentTime:t,direction:o,timeScale:this._timeScale,looped:i,intervals:r};if(this._evaluators.length>0){const a=[...this._evaluators].sort((c,l)=>{const h=p.indexOf(c.phase),n=p.indexOf(l.phase);return h!==n?h-n:c.order-l.order});for(const c of a)try{c.fn(s)}catch(l){console.error(`[AnimationClock] evaluator in phase "${c.phase}" threw:`,l)}}return s}}export{D as AnimationClock};
1
+ import{dX as p}from"./index-C5ZAyrKq.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";const u=1e-9,d=1e5;function f(m,e,t){const r=t.end-t.start,i=t.loop&&r>u,o=[];let s=m,a=e,c=!1,l=0;for(;;){const h=t.end-s;if(!i||a<=h+u){const n=Math.min(s+a,t.end);o.push({from:s,to:n,direction:"forward"}),s=n;break}if(o.push({from:s,to:t.end,direction:"forward"}),a-=h,s=t.start,c=!0,l++,l>d){const n=t.start+a%r;o.push({from:s,to:n,direction:"forward"}),s=n;break}}return{pos:s,intervals:o,looped:c}}function g(m,e,t){const r=t.end-t.start,i=t.loop&&r>u,o=[];let s=m,a=e,c=!1,l=0;for(;;){const h=s-t.start;if(!i||a<=h+u){const n=Math.max(s-a,t.start);o.push({from:s,to:n,direction:"reverse"}),s=n;break}if(o.push({from:s,to:t.start,direction:"reverse"}),a-=h,s=t.end,c=!0,l++,l>d){const n=t.end-a%r;o.push({from:s,to:n,direction:"reverse"}),s=n;break}}return{pos:s,intervals:o,looped:c}}function _(m,e){return m<e.start?e.start:m>e.end?e.end:m}class D{_previousTime;_currentTime;_range;_timeScale;_playDirection="forward";_lastCrossingDirection="forward";_playbackState="stopped";_evaluators=[];_registrationCounter=0;constructor(e={}){const t=e.start??0,r=e.end??Math.max(t,1);if(r<t)throw new Error(`[AnimationClock] range end (${r}) must be >= start (${t})`);const i=e.timeScale??1;if(!Number.isFinite(i)||i<0)throw new Error(`[AnimationClock] timeScale must be a finite number >= 0, got ${i}`);this._range={start:t,end:r,loop:e.loop??!1},this._timeScale=i,this._previousTime=t,this._currentTime=t}get time(){return this._currentTime}get previousTime(){return this._previousTime}get direction(){return this._playbackState==="playing"?this._playDirection:"paused"}get playbackState(){return this._playbackState}get timeScale(){return this._timeScale}set timeScale(e){if(!Number.isFinite(e)||e<0)throw new Error(`[AnimationClock] timeScale must be a finite number >= 0, got ${e}`);this._timeScale=e}get range(){return this._range}setRange(e){const t=e.start??this._range.start,r=e.end??this._range.end,i=e.loop??this._range.loop;if(r<t)throw new Error(`[AnimationClock] range end (${r}) must be >= start (${t})`);this._range={start:t,end:r,loop:i};const o=_(this._currentTime,this._range);o!==this._currentTime&&this.seek(o)}play(e){e&&(this._playDirection=e),this._playbackState="playing"}pause(){this._playbackState="paused"}stop(){this._playbackState="stopped"}seek(e){const t=_(e,this._range);if(t===this._currentTime)return this.emit(this._currentTime,this._currentTime,[{from:t,to:t,direction:this._lastCrossingDirection}],!1,this._lastCrossingDirection);const r=t>this._currentTime?"forward":"reverse",i=this._currentTime;return this._previousTime=i,this._currentTime=t,this._lastCrossingDirection=r,this.emit(i,t,[{from:i,to:t,direction:r}],!1,r)}seekFrame(e,t){if(!Number.isFinite(t)||t<=0)throw new Error(`[AnimationClock] seekFrame fps must be a finite number > 0, got ${t}`);return this.seek(this._range.start+e/t)}advance(e){if(this._playbackState!=="playing")return null;if(!Number.isFinite(e))throw new Error(`[AnimationClock] advance(dt) requires a finite dt, got ${e}`);const t=Math.abs(e)*this._timeScale,r=this._currentTime;if(t===0)return this.emit(r,r,[],!1,this._playDirection);const i=this._playDirection==="forward"?f(r,t,this._range):g(r,t,this._range);return this._previousTime=r,this._currentTime=i.pos,this._lastCrossingDirection=this._playDirection,this.emit(r,i.pos,i.intervals,i.looped,this._playDirection)}subscribe(e,t){if(!p.includes(e))throw new Error(`[AnimationClock] unknown phase "${e}". Valid: ${p.join(", ")}`);const r={phase:e,order:this._registrationCounter++,fn:t};return this._evaluators.push(r),{dispose:()=>{const i=this._evaluators.indexOf(r);i!==-1&&this._evaluators.splice(i,1)}}}emit(e,t,r,i,o){const s={previousTime:e,currentTime:t,direction:o,timeScale:this._timeScale,looped:i,intervals:r};if(this._evaluators.length>0){const a=[...this._evaluators].sort((c,l)=>{const h=p.indexOf(c.phase),n=p.indexOf(l.phase);return h!==n?h-n:c.order-l.order});for(const c of a)try{c.fn(s)}catch(l){console.error(`[AnimationClock] evaluator in phase "${c.phase}" threw:`,l)}}return s}}export{D as AnimationClock};
@@ -0,0 +1 @@
1
+ import{r}from"./index-C5ZAyrKq.js";import{l as t}from"./live-mixers-B-bwLZ7c.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";const u="workspace.service";function v(){return r().session.reportFacet(()=>({liveMixers:t().map(i=>({site:i.key,clips:[...i.clips.keys()],animates:[...i.roots].map(o=>o.name||"(unnamed)")}))}))}export{u as point,v as start};
@@ -0,0 +1 @@
1
+ import{a as s}from"./jsx-runtime-DPjLkJKQ.js";import{r as c,aK as p}from"./index-C5ZAyrKq.js";import{T as m}from"./transport-strip-xCg94CuI.js";import{r as a}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";const E="workspace.utility",T="Animation";function j(){const{documents:o,transport:n}=c(),e=a.useSyncExternalStore(o.subscribe,o.activeId,o.activeId),t=a.useSyncExternalStore(n.subscribe,a.useCallback(()=>e?n.for(e):null,[e,n])),r=a.useSyncExternalStore(a.useCallback(i=>t?t.subscribe(i):()=>{},[t]),a.useCallback(()=>t?.snapshot()??null,[t]));return!t||!r||r.activeSubject===null?s.jsx(p,{as:"p",variant:"caption","data-testid":"animation-timeline-empty","data-document":e??"","data-transport":t?"yes":"no",style:{padding:"var(--volter-space-2) var(--volter-space-3)"},children:t?"Nothing in the active document plays an animation.":"The active document has no stage to animate."}):s.jsx(m,{transport:t})}export{j as default,E as point,T as title};
@@ -1 +1 @@
1
- import{o}from"./AssetBudgetPanel-x_FNJbfZ.js";import"./jsx-runtime-DPjLkJKQ.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-BRJMIUK0.js";import"./index-nmcBqr7Y.js";import"./index-D_NuPfjr.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./asset-loaders-C0KQI5eY.js";import"./SkeletonUtils-YH9iLOY_.js";import"./three.module-BLhyNg0e.js";import"./three.core-3arARmh6.js";import"./asset-parse-error-BHMwBRU3.js";import"./user-data-dHvLdpwM.js";import"./object-marks-DwvIEBOK.js";import"./loader-BTUKnX5Q.js";import"./KTX2Loader-CaqVE6nY.js";import"./GLTFLoader-KeoruJgS.js";import"./BufferGeometryUtils-B22h7jo4.js";const D="workspace.menu",I={menu:"asset",items:[{id:"open-budget",label:"Open in Asset Budget",testId:"asset-context-open-budget",execute:({assetPath:t})=>{t!==void 0&&o(t)}}]};export{I as menu,D as point};
1
+ import{o}from"./AssetBudgetPanel-BMR3AQhc.js";import"./jsx-runtime-DPjLkJKQ.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-C5ZAyrKq.js";import"./index-nmcBqr7Y.js";import"./index-D_NuPfjr.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./asset-loaders-DoNflsHL.js";import"./SkeletonUtils-YH9iLOY_.js";import"./three.module-BLhyNg0e.js";import"./three.core-3arARmh6.js";import"./asset-parse-error-BHMwBRU3.js";import"./user-data-CODoGZqA.js";import"./object-marks-BnvSuCTt.js";import"./loader-BTUKnX5Q.js";import"./KTX2Loader-CaqVE6nY.js";import"./GLTFLoader-KeoruJgS.js";import"./BufferGeometryUtils-B22h7jo4.js";const D="workspace.menu",I={menu:"asset",items:[{id:"open-budget",label:"Open in Asset Budget",testId:"asset-context-open-budget",execute:({assetPath:t})=>{t!==void 0&&o(t)}}]};export{I as menu,D as point};
@@ -1 +1 @@
1
- import{o as t}from"./AssetBudgetPanel-x_FNJbfZ.js";import"./jsx-runtime-DPjLkJKQ.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-BRJMIUK0.js";import"./index-nmcBqr7Y.js";import"./index-D_NuPfjr.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./asset-loaders-C0KQI5eY.js";import"./SkeletonUtils-YH9iLOY_.js";import"./three.module-BLhyNg0e.js";import"./three.core-3arARmh6.js";import"./asset-parse-error-BHMwBRU3.js";import"./user-data-dHvLdpwM.js";import"./object-marks-DwvIEBOK.js";import"./loader-BTUKnX5Q.js";import"./KTX2Loader-CaqVE6nY.js";import"./GLTFLoader-KeoruJgS.js";import"./BufferGeometryUtils-B22h7jo4.js";const D="workspace.action",O=[{id:"asset-budget",label:"Open Asset Budget",execute:()=>{t()}}];export{O as actions,D as point};
1
+ import{o as t}from"./AssetBudgetPanel-BMR3AQhc.js";import"./jsx-runtime-DPjLkJKQ.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-C5ZAyrKq.js";import"./index-nmcBqr7Y.js";import"./index-D_NuPfjr.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./asset-loaders-DoNflsHL.js";import"./SkeletonUtils-YH9iLOY_.js";import"./three.module-BLhyNg0e.js";import"./three.core-3arARmh6.js";import"./asset-parse-error-BHMwBRU3.js";import"./user-data-CODoGZqA.js";import"./object-marks-BnvSuCTt.js";import"./loader-BTUKnX5Q.js";import"./KTX2Loader-CaqVE6nY.js";import"./GLTFLoader-KeoruJgS.js";import"./BufferGeometryUtils-B22h7jo4.js";const D="workspace.action",O=[{id:"asset-budget",label:"Open Asset Budget",execute:()=>{t()}}];export{O as actions,D as point};