@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 @@
1
+ import{a as e}from"./jsx-runtime-DPjLkJKQ.js";import{r as l}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{af as r,a0 as k,aR as w,aS as z,aT as C}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";const m={fontSize:11,color:r.content.dim,marginBottom:2};function L({assetPath:s}){const o=l.useRef(null),[a,p]=l.useState(!1),[n,f]=l.useState(null),[c,x]=l.useState(0),[h,v]=l.useState(!1),[y,g]=l.useState(1),j=s.split("/").pop()??s,b=s.split(".").pop()?.toUpperCase()??"";l.useEffect(()=>()=>{o.current?.pause()},[]);const S=()=>{const t=o.current;t&&(a?t.pause():t.play(),p(!a))},d=t=>{const i=Math.floor(t/60),u=Math.floor(t%60);return`${i}:${u.toString().padStart(2,"0")}`};return e.jsxs("div",{style:{padding:8,display:"flex",flexDirection:"column",gap:8},children:[e.jsx("div",{style:{fontWeight:600,fontSize:12,color:r.content.primary,wordBreak:"break-all"},children:j}),e.jsxs("div",{className:"volter-content-frost",style:{width:"100%",border:`1px solid ${r.boundary.default}`,borderRadius:r.shape.small,display:"flex",alignItems:"center",justifyContent:"center",flexDirection:"column",gap:8,padding:16},children:[e.jsxs("svg",{viewBox:"0 0 24 24",width:48,height:48,children:[e.jsx("rect",{x:"3",y:"3",width:"18",height:"18",rx:"2",fill:"var(--volter-asset-icon-audio)"}),e.jsx("path",{d:"M9 8l4-2v12l-4-2H7V10h2zm6 1v6m2-5v4",stroke:"var(--volter-text-1)",strokeWidth:"1.5",fill:"none",strokeLinecap:"round"})]}),n!=null&&e.jsxs("div",{style:{width:"100%",fontSize:10,color:r.content.muted,textAlign:"center"},children:[d(c)," / ",d(n)]}),n!=null&&n>0&&e.jsx("div",{style:{width:"100%",height:4,background:r.surface.raised,borderRadius:r.shape.small,cursor:"pointer",position:"relative"},onClick:t=>{const i=t.currentTarget.getBoundingClientRect(),u=(t.clientX-i.left)/i.width;o.current&&(o.current.currentTime=u*n)},children:e.jsx("div",{style:{width:`${c/n*100}%`,height:"100%",background:"var(--volter-asset-icon-audio)",borderRadius:r.shape.small}})}),e.jsx(k,{type:"button",variant:"secondary",size:"comfortable",onClick:S,children:a?"Pause":"Play"}),e.jsx("div",{role:"img","aria-label":"Audio waveform",style:{width:"100%",height:36,display:"flex",alignItems:"center",gap:2},children:Array.from({length:48},(t,i)=>e.jsx("i",{style:{flex:1,height:`${20+i*37%75}%`,background:"var(--volter-asset-icon-audio)",opacity:i/48<=c/(n||1)?1:.3}},i))}),e.jsxs("label",{style:{fontSize:11,color:r.content.muted},children:[e.jsx(w,{checked:h,onChange:t=>v(t.target.checked)})," Loop"]}),e.jsxs("label",{style:{fontSize:11,color:r.content.muted},children:["Volume"," ",e.jsx(z,{"aria-label":"Audio volume",min:"0",max:"1",step:"0.05",value:y,onChange:t=>{const i=Number(t.target.value);g(i),o.current&&(o.current.volume=i)}})]})]}),e.jsx("audio",{ref:o,src:s,loop:h,onLoadedMetadata:()=>{o.current&&f(o.current.duration)},onTimeUpdate:()=>{o.current&&x(o.current.currentTime)},onEnded:()=>p(!1)}),e.jsx(C,{label:"Info",children:e.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:4},children:[e.jsxs("div",{children:[e.jsx("div",{style:m,children:"Path"}),e.jsx("div",{style:{fontSize:11,color:r.content.primary,wordBreak:"break-all"},children:s})]}),n!=null&&e.jsxs("div",{children:[e.jsx("div",{style:m,children:"Duration"}),e.jsx("div",{style:{fontSize:11,color:r.content.primary},children:d(n)})]}),e.jsxs("div",{children:[e.jsx("div",{style:m,children:"Format"}),e.jsx("div",{style:{fontSize:11,color:r.content.primary},children:b})]})]})})]})}export{L as AudioViewer};
@@ -0,0 +1 @@
1
+ import{a as y}from"./jsx-runtime-DPjLkJKQ.js";import{i as O}from"./react-canvas-navigation-B_gOe3CI.js";import{R as E,h as D,i as F}from"./react-story-board-CCm2Opwn.js";import{ao as z,aq as B,bh as L,fP as X,fQ as I,ap as G,dm as V,eG as w,am as Y,an as K,c4 as H,O as q,fR as U,fS as W,af as S,fT as Z,da as $,db as N,dd as Q}from"./index-C5ZAyrKq.js";import{registerPresentedPixiApps as J}from"./canvas-preview-frames-Cja32aW2.js";import{R as tt}from"./ReactCanvasControls-CmfvxJYY.js";import{r as d}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{s as et}from"./story-presentation-CYhVv8Ku.js";import{m as nt}from"./pixi-story-model-DNkfnWUV.js";import{withPixiStoryMountTurn as T}from"./story-pixi-preview-CMhho2gG.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"./index-DgPDGGSV.js";import"./crash-null-boundary-v3a0uEgw.js";import"./story-mount-turn-DFRTj5hi.js";const ot="No story yet",st={width:160,height:160},A={width:240,height:180},R=96;function rt(e){return{stories:e.length,modules:new Set(e.map(o=>o.modulePath)).size}}function at(e){const o=e.layout;return o==="fullscreen"||o==="padded"||o==="centered"?o:"padded"}function it(e,o,i){if(!i.componentName)return!0;const r=I(e,i.componentName,o);return!r||r.modulePath===o&&r.name===i.name}function ct(e){const o=[],i=new Map,r=G();for(const t of e)if(t.ok)for(const n of t.stories){const c=z({modulePath:t.modulePath,regions:r});if(c.medium!=="canvas"){c.via==="undeclared"&&B(t.modulePath,c.reason);continue}if(!it(e,t.modulePath,n))continue;const h=L({modulePath:t.modulePath,...n.title===void 0?{}:{title:n.title}}),g=X(h),u=`${g}/${h.leaf}`;i.set(u,(i.get(u)??0)+1),o.push({identity:{id:`${t.modulePath}#${n.name}`,storyName:n.name,modulePath:t.modulePath,district:g},leafKey:u,leaf:h.leaf,storyLabel:n.label,Component:n.Component,layout:at(n.parameters)})}return o.map(({identity:t,leafKey:n,leaf:c,storyLabel:h,Component:g,layout:u})=>({identity:{...t,label:(i.get(n)??0)>1?`${c} · ${h}`:c},Component:g,layout:u}))}function lt(e,o){const i=new Set,r=[];for(const t of o){if(t.surface!=="canvas"||t.contentKind==="image")continue;const n=`${t.path}#${t.name}`;i.has(n)||(i.add(n),!I(e,t.name,t.path)&&r.push({key:n,name:t.name,path:t.path,line:t.line}))}return r}function dt(e,o){const i=o==="fullscreen"?e.app.screen:e.stage.getBounds(),r=o==="fullscreen"?0:8,t={x:Math.floor(i.x-r),y:Math.floor(i.y-r),width:Math.ceil(i.width+r*2),height:Math.ceil(i.height+r*2)};if(!Number.isFinite(t.width)||!Number.isFinite(t.height)||t.width<1||t.height<1)return{frameSize:{...A},crop:{x:0,y:0,...A}};if(o!=="fullscreen"){const n=Math.max(R,t.width),c=Math.max(R,t.height);t.x-=(n-t.width)/2,t.y-=(c-t.height)/2,t.width=n,t.height=c}return{frameSize:{width:t.width,height:t.height},crop:t}}function ut(e){return e instanceof Error?e.message:String(e)}async function pt(e,o,i){const r=[],t=[];for(const{identity:n,Component:c,layout:h}of e){if(o?.aborted)break;const g=u=>{t.push({id:n.id,modulePath:n.modulePath,storyName:n.storyName,reason:u})};try{const u=await i(c);if(!nt(u.stage)){u.dispose(),g("The story mounted no Pixi content.");continue}r.push({...n,mounted:u,...dt(u,h)})}catch(u){g(ut(u))}}return{exhibits:r,skipped:t}}function mt(e,o=[],i){return T(async r=>{const{exhibits:t,skipped:n}=await pt(ct(e),i,r),c={exhibits:t,ghosts:lt(e,o),skipped:n};if(i?.aborted)throw _(c),new Error("The 2D board build was superseded by a newer one.");return c})}function M(e){return T(async()=>{_(e)})}function _(e){for(const o of e.exhibits)try{o.mounted.dispose()}catch(i){console.error("[canvas-board] a story mount failed to dispose.",i)}}const ft="2D",ht=4;function yt(e,o,i){const r=new Set,t=j(e).map(n=>({id:n.id,label:n.label,...n.title?{secondaryLabel:n.title}:{},kind:"frame",typeLabel:"Frame",parentId:null,childIds:[]}));return{capabilities:{transform:!1,inspectorFields:!1,persist:!1},hierarchy:{roots:()=>t,node:n=>t.find(c=>c.id===n)??null},selection:{get:()=>{const n=o();return n?[n]:[]},set:n=>{const c=n.at(-1);c&&i(c)}},subscribe(n){return r.add(n),()=>r.delete(n)},notify(){for(const n of r)n()}}}function j(e){return[...e.exhibits.map(o=>({id:o.id,label:o.label,modulePath:o.modulePath,...o.district?{title:o.district}:{},frameSize:o.frameSize})),...e.ghosts.map(o=>({id:o.key,label:o.name,modulePath:o.path,title:ot,frameSize:st}))]}function gt(e,o,i){const r=j(o),t=r[0];if(!t)return null;const n=document.createElement("div");n.dataset.testid="canvas-board-layer",n.style.position="absolute",n.style.left="0",n.style.top="0",n.style.transformOrigin="0 0",e.appendChild(n);let c=null,h=t.id;c=D(n,r,t.id,(a,m)=>{h=a,c?.activate(a,m==="zoom"),i?.()},et(r));const g=[];for(const a of o.exhibits){const m=c.frames.get(a.id);if(!m)continue;const f=a.mounted.host;f.setAttribute("style",`position:absolute;left:${-a.crop.x}px;top:${-a.crop.y}px;width:${a.mounted.app.screen.width}px;height:${a.mounted.app.screen.height}px;overflow:visible;contain:layout paint;`);const k=a.mounted.app.canvas;k.style.display="block",k.style.width=`${a.mounted.app.screen.width}px`,k.style.height=`${a.mounted.app.screen.height}px`,m.content.appendChild(f),g.push(k)}for(const a of o.ghosts){const m=c.frames.get(a.key);if(!m)continue;m.element.style.border=`1px dashed ${S.boundary.strong}`;const f=document.createElement("div");f.dataset.testid="canvas-board-ghost",f.textContent="No story yet",f.style.position="absolute",f.style.inset="0",f.style.display="flex",f.style.alignItems="center",f.style.justifyContent="center",f.style.color=S.content.dim,f.style.font=`11px ${S.typography.sans}`,f.style.pointerEvents="none",m.content.appendChild(f)}const u=J(o.exhibits.map(a=>a.mounted.app)),b=()=>{const a=N();n.style.transform=Q(a)??"";const m=a.zoom>=1?"pixelated":"auto";for(const f of g)f.style.imageRendering=m},v=$(b);b();const P=requestAnimationFrame(()=>c?.fitAll());let C=!1,x=0,s=0,p=0;const l=a=>{x=requestAnimationFrame(l),p+=s===0?16:Math.min(100,a-s),s=a;for(const m of o.exhibits)try{m.mounted.ticker.update(p)}catch(f){console.error("[canvas-board] an exhibit failed to tick.",f)}};return{selectAt(a,m){return c?.selectAtClientPoint(a,m)??!1},activeStoryId(){return h},selectStory(a){return r.some(m=>m.id===a)?(h=a,c?.activate(a,!1),i?.(),!0):!1},zoomAt(a,m){return c?.zoomAtClientPoint(a,m)??!1},setPlaying(a){a!==C&&(C=a,a?(s=0,x=requestAnimationFrame(l)):(cancelAnimationFrame(x),x=0))},dispose(){cancelAnimationFrame(x),cancelAnimationFrame(P),v(),u();for(const a of o.exhibits)a.mounted.host.remove();c?.dispose(),c=null,n.remove()}}}function bt({active:e}){const o=d.useSyncExternalStore(Y,K),i=d.useRef(null),r=d.useRef(null),t=d.useRef(null),n=d.useRef(null),[c,h]=d.useState({status:"idle"}),[g,u]=d.useState(e);d.useEffect(()=>{e&&u(!0)},[e]),d.useEffect(()=>{const s=i.current;if(s)return O(s)},[]),d.useEffect(()=>{if(!g)return;const s=new AbortController;let p=null;return h({status:"building"}),H().then(l=>(l.ok||q.warn(`Component index unavailable, so this board shows no ghost frames: ${l.reason}`,"canvas-board"),mt(o,l.ok?l.entries:[],s.signal))).then(l=>{if(s.signal.aborted){M(l);return}p=l,h({status:"ready",board:l})},l=>{s.signal.aborted||h({status:"error",message:l instanceof Error?l.message:String(l)})}),()=>{s.abort(),p&&M(p)}},[o,g]);const b=c.status==="ready"?c.board:null,[v,P]=d.useState(null);d.useEffect(()=>{const s=i.current;if(!s||!b)return;const p=gt(s,b,()=>{P(r.current?.activeStoryId()??null)});return r.current=p,P(p?.activeStoryId()??null),()=>{r.current=null,p?.dispose()}},[b]);const C=b?.exhibits.find(s=>s.id===v)??null,x=d.useMemo(()=>b?yt(b,()=>r.current?.activeStoryId()??null,s=>r.current?.selectStory(s)):null,[b]);return d.useEffect(()=>{x?.notify()},[x,v]),d.useEffect(()=>{if(e)return U(w,()=>({adapter:x,nodeId:null}))},[e,x]),d.useEffect(()=>{if(!(!e||!C))return W(w,()=>({id:C.id,title:C.label,kindLabel:"Canvas story",note:{text:`${C.storyName} · ${C.modulePath}`,testId:"canvas-board-subject-note"},sections:[]}))},[e,C]),d.useEffect(()=>(r.current?.setPlaying(e),()=>r.current?.setPlaying(!1)),[e,b]),y.jsxs("div",{"data-testid":"canvas-board","data-volter-backdrop-color":e?E:void 0,"data-volter-backdrop-policy":e?"dark-frost":void 0,style:{position:"absolute",inset:0,overflow:"hidden",pointerEvents:"auto",touchAction:"none",userSelect:"none",WebkitUserSelect:"none",backgroundColor:E},ref:i,onPointerDown:s=>{t.current={x:s.clientX,y:s.clientY},n.current={x:s.clientX,y:s.clientY},s.currentTarget.setPointerCapture(s.pointerId)},onPointerMove:s=>{const p=n.current;if(!p)return;const l=s.clientX-p.x,a=s.clientY-p.y;l===0&&a===0||(n.current={x:s.clientX,y:s.clientY},Z(l,a))},onPointerUp:s=>{const p=t.current;t.current=null,n.current=null,s.currentTarget.hasPointerCapture(s.pointerId)&&s.currentTarget.releasePointerCapture(s.pointerId),!(!p||Math.hypot(s.clientX-p.x,s.clientY-p.y)>ht)&&r.current?.selectAt(s.clientX,s.clientY)},onPointerCancel:()=>{t.current=null,n.current=null},onDoubleClick:s=>{r.current?.zoomAt(s.clientX,s.clientY)},children:[y.jsx(xt,{}),b?y.jsx(St,{board:b}):y.jsxs("div",{"data-testid":"canvas-board-status",style:{padding:16,fontSize:12,color:S.content.muted},children:[c.status==="error"&&c.message,c.status==="building"&&"Mounting every canvas story off-screen…",c.status==="idle"&&"Open this tab to lay out every canvas story at 1× texels."]}),y.jsx(tt,{containerRef:i,context:null,boardOnly:!0})]})}function xt(){const e=d.useSyncExternalStore($,N),o=Math.max(8,24*e.zoom),i=Math.max(.7,Math.min(1.4,e.zoom));return y.jsx("div",{"data-testid":"react-design-canvas-backdrop","aria-hidden":"true",style:{position:"absolute",inset:0,pointerEvents:"none",backgroundColor:E,backgroundImage:`radial-gradient(circle, ${F} ${i}px, transparent ${i}px)`,backgroundPosition:`${e.x}px ${e.y}px`,backgroundSize:`${o}px ${o}px`}})}function St({board:e}){const[o,i]=d.useState(!1),r=rt(e.skipped);return y.jsxs("div",{"data-testid":"canvas-board-status",style:{position:"absolute",left:8,bottom:8,maxWidth:420,padding:"4px 8px",borderRadius:S.shape.small,background:S.surface.raised,border:`1px solid ${S.boundary.default}`,fontSize:10,color:S.content.muted,pointerEvents:"auto"},children:[e.exhibits.length," exhibit",e.exhibits.length===1?"":"s",e.ghosts.length>0&&y.jsxs(y.Fragment,{children:[" · ",e.ghosts.length," component",e.ghosts.length===1?"":"s"," without stories"]}),e.skipped.length>0&&y.jsxs(y.Fragment,{children:[" · ",y.jsxs("span",{role:"button",tabIndex:0,"aria-expanded":o,onClick:()=>i(t=>!t),onKeyDown:t=>{(t.key===" "||t.key==="Enter")&&(t.preventDefault(),i(n=>!n))},style:{cursor:"pointer",color:S.accent.default},children:[r.stories," ",r.stories===1?"story":"stories"," in ",r.modules," ",r.modules===1?"module":"modules"," not on this board"]})]}),o&&y.jsx("div",{style:{marginTop:4,maxHeight:160,overflow:"auto"},children:e.skipped.map(t=>y.jsxs("div",{style:{padding:"1px 0"},children:[y.jsxs("code",{style:{color:S.content.dim},children:[t.modulePath,"#",t.storyName]})," ","— ",t.reason]},t.id))})]})}function Bt(){return V({id:w,title:ft,kind:"content-browser",workspaceRole:"workspace-reference",Content:bt,closeable:!1,readOnly:!0,presentation:()=>({kind:"workspace",id:w})},{category:"canvas"})}export{w as CANVAS_COMPONENTS_DOCUMENT_ID,Bt as installCanvasBoardDocument};
@@ -0,0 +1 @@
1
+ import{a as e}from"./jsx-runtime-DPjLkJKQ.js";import{r as he,K as $,fw as ge,dG as R,dH as X,aJ as U,fx as H,aw as te,fy as xe,fz as oe,cE as T,aL as F,a1 as k,fA as fe,cW as me,fB as be,fC as Se,cD as q,a0 as _,cU as ye,de as ve,df as je,fD as ne,fE as ze,fF as se,dR as Y,fG as L,cR as Ee,fH as Q,cS as P,cT as I,dj as ee,fI as we,fJ as Ce,fK as ke,fL as Me,fM as Ge,fN as Ne}from"./index-C5ZAyrKq.js";import{r as u}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{S as Fe,a as re}from"./react-canvas-navigation-B_gOe3CI.js";import{s as ie,c as ae,a as le,r as Le,b as K,m as ce,V as Pe,d as Te,e as Ve}from"./RootSelectionOverlay-BWsNiSuM.js";import{a as De}from"./Toolbar-M62Gob9T.js";import{r as We}from"./transform-mode-request-DlEApNrA.js";import{T as Ye}from"./TransientHint-Cc40mHWE.js";import{p as $e}from"./layered-pick-CAVQMPI7.js";function Re(t,s,o,r){const g=i=>()=>{s(),We(t,i)};return he().keyboard.bindActions([{id:"transform.select",scope:"stage",run:g("select")},{id:"transform.translate",scope:"stage",run:g("translate")},{id:"transform.rotate",scope:"stage",run:g("rotate")},{id:"transform.scale",scope:"stage",run:g("scale")},{id:"canvas.panMode",scope:"stage",run:()=>o("pan")},{id:"canvas.rulerMode",scope:"stage",run:()=>o("ruler")},{id:"canvas.toggleGrid",scope:"stage",run:r}])}const nt="#111214";function de(t,s=32){let o=s>0?s:32;for(;o*t<12;)o*=2;for(;o*t>48;)o/=2;return o}function D(t){if(t.length===0)return null;let s=Number.POSITIVE_INFINITY,o=Number.POSITIVE_INFINITY,r=Number.NEGATIVE_INFINITY,g=Number.NEGATIVE_INFINITY;for(const i of t)s=Math.min(s,i.x),o=Math.min(o,i.y),r=Math.max(r,i.x+i.width),g=Math.max(g,i.y+i.height);return{x:s,y:o,width:r-s,height:g-o}}function B(t,s,o){if(!o||!(o.width>0)||!(o.height>0))return;const r=Math.max(1,t.clientWidth-96),g=Math.max(1,t.clientHeight-96),i=Math.min(4,Math.max(re,Math.min(r/o.width,g/o.height)));s.setView(t.clientWidth/2-(o.x+o.width/2)*i,t.clientHeight/2-(o.y+o.height/2)*i,i)}function st({view:t,documentId:s}){const o=$();u.useSyncExternalStore(o.subscribe,o.getSnapshot),u.useEffect(()=>ge(s,"canvas"),[s]),u.useSyncExternalStore(R,X);const r=U(s),g=H(s),i=te()?.config.resolution,l=u.useSyncExternalStore(t.subscribe,t.get,t.get);u.useSyncExternalStore(u.useCallback(x=>ie(t,x),[t]),u.useCallback(()=>ae(t),[t]));const c=le(t),v=o.snap2D,a=de(l.zoom,v.step)*l.zoom,y=a*Math.max(1,Math.round(v.primaryEvery)),p=l.x+v.offsetX*l.zoom,b=l.y+v.offsetY*l.zoom;return e.jsxs("div",{"data-testid":"canvas-scene-backdrop",style:{position:"absolute",inset:0,zIndex:2,overflow:"hidden",pointerEvents:"none"},children:[r&&(!g.gridWhenSnapping||o.snapEnabled)&&e.jsx("div",{"data-testid":"canvas-scene-grid",style:{position:"absolute",inset:0,backgroundImage:"linear-gradient(rgba(255,255,255,.075) 1px, transparent 1px),linear-gradient(90deg, rgba(255,255,255,.075) 1px, transparent 1px),linear-gradient(rgba(255,255,255,.14) 1px, transparent 1px),linear-gradient(90deg, rgba(255,255,255,.14) 1px, transparent 1px)",backgroundPosition:`${p}px ${b}px`,backgroundSize:`${a}px ${a}px, ${a}px ${a}px, ${y}px ${y}px, ${y}px ${y}px`}}),g.viewport&&i&&i.width>0&&i.height>0&&e.jsx("div",{"data-testid":"canvas-scene-viewport-rect",style:{position:"absolute",left:l.x,top:l.y,width:i.width*l.zoom,height:i.height*l.zoom,boxSizing:"border-box",borderStyle:"solid",borderWidth:1,borderColor:"rgba(160, 120, 255, .75)"}}),g.origin&&e.jsxs(e.Fragment,{children:[e.jsx("div",{"data-testid":"canvas-scene-origin-y",style:{position:"absolute",left:0,right:0,top:l.y,height:1,background:"rgba(238, 91, 91, .8)"}}),e.jsx("div",{"data-testid":"canvas-scene-origin-x",style:{position:"absolute",top:0,bottom:0,left:l.x,width:1,background:"rgba(87, 199, 126, .8)"}}),e.jsx("div",{style:{position:"absolute",left:l.x+6,top:l.y+6,color:"rgba(255,255,255,.68)",font:"10px ui-monospace, SFMono-Regular, Menlo, monospace"},children:"0, 0"})]}),g.guides&&c.map(x=>e.jsx("div",{"data-testid":`canvas-scene-guide-${x.axis}`,title:`${x.axis.toUpperCase()} ${Math.round(x.value*100)/100} · drag to move · right-click to remove`,onContextMenu:S=>{S.preventDefault(),Le(t,x.id)},onPointerDown:S=>{S.preventDefault(),S.stopPropagation();const h=S.currentTarget.parentElement?.getBoundingClientRect();if(!h)return;const E=d=>{const m=x.axis==="x"?d.clientX-h.left:d.clientY-h.top,n=t.get();ce(t,x.id,(m-(x.axis==="x"?n.x:n.y))/n.zoom)},C=()=>{window.removeEventListener("pointermove",E),window.removeEventListener("pointerup",C)};window.addEventListener("pointermove",E),window.addEventListener("pointerup",C,{once:!0})},style:{position:"absolute",pointerEvents:"auto",cursor:x.axis==="x"?"ew-resize":"ns-resize",...x.axis==="x"?{left:l.x+x.value*l.zoom-4,top:20,bottom:0,width:9,borderLeft:"1px solid rgba(74, 180, 255, .95)"}:{top:l.y+x.value*l.zoom-4,left:20,right:0,height:9,borderTop:"1px solid rgba(74, 180, 255, .95)"}}},x.id)),g.rulers&&e.jsx(Xe,{view:t})]})}function Xe({view:t}){const s=u.useSyncExternalStore(t.subscribe,t.get,t.get),o=u.useRef(null),r=u.useRef(null),[g,i]=u.useState({width:0,height:0});u.useEffect(()=>{const p=()=>{const x=o.current?.clientWidth??0,S=r.current?.clientHeight??0;i(h=>h.width===x&&h.height===S?h:{width:x,height:S})};if(p(),typeof ResizeObserver>"u")return;const b=new ResizeObserver(p);return o.current&&b.observe(o.current),r.current&&b.observe(r.current),()=>b.disconnect()},[]);const l=(p,b)=>{if(!(b>0))return[];const x=p==="x"?s.x:s.y,S=de(s.zoom),h=S*s.zoom,E=20,C=Math.ceil((E-x)/h),d=Math.floor((E+b-x)/h);return Array.from({length:Math.max(0,d-C+1)},(m,n)=>{const f=C+n;return{major:f%4===0,screen:x+f*h-E,value:f*S}})},c=l("x",g.width),v=l("y",g.height),a=(p,b)=>{b.preventDefault(),b.stopPropagation();const x=b.currentTarget.parentElement?.getBoundingClientRect();if(!x)return;const S=(d,m)=>{const n=t.get();return((p==="x"?d-x.left:m-x.top)-(p==="x"?n.x:n.y))/n.zoom},h=Te(t,p,S(b.clientX,b.clientY)),E=d=>ce(t,h,S(d.clientX,d.clientY)),C=()=>{window.removeEventListener("pointermove",E),window.removeEventListener("pointerup",C)};window.addEventListener("pointermove",E),window.addEventListener("pointerup",C,{once:!0})},y={position:"absolute",pointerEvents:"auto",backgroundColor:"rgba(24, 26, 30, .96)",border:0,borderColor:"rgba(255,255,255,.14)",boxSizing:"border-box"};return e.jsxs(e.Fragment,{children:[e.jsx("button",{ref:o,type:"button","data-testid":"canvas-scene-ruler-x","aria-label":"Horizontal ruler; drag to create a horizontal guide",onPointerDown:p=>a("y",p),style:{...y,left:20,right:0,top:0,height:20,borderBottomStyle:"solid",borderBottomWidth:1,cursor:"row-resize",padding:0,overflow:"hidden"},children:c.map(p=>e.jsx("span",{"aria-hidden":"true","data-ruler-axis":"x","data-ruler-value":p.value,style:{position:"absolute",left:p.screen,bottom:0,width:1,height:p.major?8:4,background:p.major?"rgba(255,255,255,.5)":"rgba(255,255,255,.28)",pointerEvents:"none"},children:p.major&&e.jsx("span",{style:{position:"absolute",left:3,bottom:5,color:"rgba(255,255,255,.62)",font:"9px ui-monospace, SFMono-Regular, Menlo, monospace",lineHeight:1,whiteSpace:"nowrap"},children:p.value})},p.value))}),e.jsx("button",{ref:r,type:"button","data-testid":"canvas-scene-ruler-y","aria-label":"Vertical ruler; drag to create a vertical guide",onPointerDown:p=>a("x",p),style:{...y,top:20,bottom:0,left:0,width:20,borderRightStyle:"solid",borderRightWidth:1,cursor:"col-resize",padding:0,overflow:"hidden"},children:v.map(p=>e.jsx("span",{"aria-hidden":"true","data-ruler-axis":"y","data-ruler-value":p.value,style:{position:"absolute",top:p.screen,right:0,width:p.major?8:4,height:1,background:p.major?"rgba(255,255,255,.5)":"rgba(255,255,255,.28)",pointerEvents:"none"},children:p.major&&e.jsx("span",{style:{position:"absolute",right:4,top:3,color:"rgba(255,255,255,.62)",font:"9px ui-monospace, SFMono-Regular, Menlo, monospace",lineHeight:1,whiteSpace:"nowrap",writingMode:"vertical-rl",transform:"rotate(180deg)"},children:p.value})},p.value))}),e.jsx("div",{style:{...y,left:0,top:0,width:20,height:20}})]})}function rt({active:t,adapter:s,containerRef:o,view:r,documentId:g}){const i=$();u.useSyncExternalStore(i.subscribe,i.getSnapshot),u.useSyncExternalStore(R,X);const l=u.useSyncExternalStore(r.subscribe,r.get,r.get),[c,v]=u.useState(()=>O.get(r)??null),a=u.useCallback(d=>{O.set(r,d),v(d)},[r]);u.useEffect(()=>xe(g),[g]),u.useEffect(()=>{if(t)return Re(i,()=>a(null),d=>a(O.get(r)===d?null:d),()=>ue(g))},[t,i,a,r,g]);const y=i.transformMode,p=u.useRef(y);u.useEffect(()=>{p.current!==y&&(p.current=y,a(null))},[y,a]);const b=u.useCallback(d=>{const m=o.current;if(!m)return;const n=Math.min(Fe,Math.max(re,d)),f=m.clientWidth/2,j=m.clientHeight/2,z=(f-l.x)/l.zoom,G=(j-l.y)/l.zoom;r.setView(f-z*n,j-G*n,n)},[o,l,r]),x=u.useCallback(d=>{if(!s?.rects)return[];const m=[];for(const n of d){const f=s.rects.rect(n);f&&f.width>0&&f.height>0&&m.push(f)}return m},[s]),S=u.useCallback(()=>{const d=o.current;d&&B(d,r,D(x(i.selectedEntityIds)))},[o,x,i,r]),h=u.useCallback(()=>{const d=o.current;if(!d)return;const m=r.get(),n=te()?.config.resolution,f=n?n.width/2:0,j=n?n.height/2:0;r.setView(d.clientWidth/2-f*m.zoom,d.clientHeight/2-j*m.zoom,m.zoom)},[o,r]),E=u.useCallback(()=>{const d=o.current,m=D(x(i.selectedEntityIds));if(!d||!m)return;const n=r.get();r.setView(d.clientWidth/2-(m.x+m.width/2)*n.zoom,d.clientHeight/2-(m.y+m.height/2)*n.zoom,n.zoom)},[o,x,i,r]),C=u.useCallback(()=>{const d=o.current;!d||!s||B(d,r,D(x(oe(s))))},[s,o,x,r]);return u.useEffect(()=>{if(t)return i.onViewportAction(d=>{if(d.type==="focus-entity"){const m=o.current;if(!m)return;B(m,r,D(x([d.id])))}else d.type==="focus-selection"?S():d.type==="focus-scene"&&C()})},[t,o,C,S,x,i,r]),e.jsxs(e.Fragment,{children:[e.jsx(Ye,{}),e.jsx(De,{dimensions:"2d",otherToolActive:c!==null,onToolArmed:()=>a(null),viewTools:e.jsxs(e.Fragment,{children:[e.jsx(T,{text:"List Select: click to list the selectable nodes there",children:e.jsx(F,{"aria-label":"List Select mode","aria-pressed":c==="list",size:"comfortable",onClick:()=>a(c==="list"?null:"list"),children:e.jsx(k,{icon:fe,size:"md"})})}),e.jsx(T,{text:"Pivot: click or drag to put the selected node's pivot there",children:e.jsx(F,{"aria-label":"Pivot mode","aria-pressed":c==="pivot",size:"comfortable",onClick:d=>{if(d.shiftKey){const m=s?[...i.selectedEntityIds].map(f=>s.rects?.rect(f)).filter(f=>f!=null):[],n=D(m);n&&K(r,{x:n.x+n.width/2,y:n.y+n.height/2}),a("pivot");return}a(c==="pivot"?null:"pivot")},children:e.jsx(k,{icon:me,size:"md"})})}),e.jsx(T,{text:"Pan (Space-drag pans in any mode)",children:e.jsx(F,{"aria-label":"Pan mode","aria-pressed":c==="pan",size:"comfortable",onClick:()=>a(c==="pan"?null:"pan"),children:e.jsx(k,{icon:be,size:"md"})})}),e.jsx(T,{text:"Ruler: drag to measure distance and angle",children:e.jsx(F,{"aria-label":"Ruler mode","aria-pressed":c==="ruler",size:"comfortable",onClick:()=>a(c==="ruler"?null:"ruler"),children:e.jsx(k,{icon:Se,size:"md"})})})]}),trailingTools:e.jsxs(e.Fragment,{children:[e.jsx(Ie,{adapter:s,selected:[...i.selectedEntityIds]}),e.jsx(Oe,{adapter:s,selected:[...i.selectedEntityIds]}),e.jsx(Ae,{documentId:g,view:r,hasSelection:i.selectedEntityIds.size>0,onCenterSelection:E,onFrameSelection:S})]})}),e.jsx(He,{adapter:s,view:r,documentId:g}),c?e.jsx(Be,{mode:c,view:r,adapter:s,containerRef:o,onExit:()=>a(null)}):null,e.jsx(q,{label:"2D scene display",className:"volter-viewport-toolbar volter-viewport-toolbar-right","data-volter-canvas-navigation-ignore":"true",children:e.jsx(_,{"aria-label":"Frame all",variant:"ghost",size:"comfortable",onClick:C,children:"Frame all"})}),e.jsxs(q,{label:"2D scene navigation",className:"volter-canvas-scene-navigation","data-volter-canvas-navigation-ignore":"true",children:[e.jsx(F,{"aria-label":"Center view",title:"Center view: the game's viewport in the middle of the pane, at this zoom",size:"comfortable",onClick:h,children:e.jsx(k,{icon:ye,size:"md"})}),e.jsx(F,{"aria-label":"Zoom out",title:"Zoom out",size:"comfortable",onClick:()=>b(l.zoom/1.2),children:e.jsx(k,{icon:ve,size:"md"})}),e.jsxs(_,{variant:"ghost","aria-label":"Reset zoom to 100%",title:"Reset zoom to 100%",size:"comfortable",onClick:()=>b(1),children:[Math.round(l.zoom*100),"%"]}),e.jsx(F,{"aria-label":"Zoom in",title:"Zoom in",size:"comfortable",onClick:()=>b(l.zoom*1.2),children:e.jsx(k,{icon:je,size:"md"})})]})]})}function He({adapter:t,view:s,documentId:o}){const r=u.useSyncExternalStore(s.subscribe,s.get,s.get),g=u.useCallback(a=>t?.subscribe?.(a)??(()=>{}),[t]),[i,l]=u.useState(0);u.useEffect(()=>g(()=>l(a=>a+1)),[g]),u.useSyncExternalStore(R,X);const c=H(o);if(!t?.inspector||!t.rects||!c.lock&&!c.group)return null;const v=oe(t).flatMap(a=>{const y=c.lock&&t.inspector?.get(a,"locked")===!0,p=c.group&&t.inspector?.get(a,"grouped")===!0,b=y||p?t.rects?.rect(a):null;return b?[{id:a,locked:y,grouped:p,x:r.x+b.x*r.zoom,y:r.y+b.y*r.zoom}]:[]});return e.jsx("div",{"data-testid":"canvas-scene-edit-gizmos","data-revision":i,style:{position:"absolute",inset:0,zIndex:55,pointerEvents:"none",overflow:"hidden"},children:v.map(a=>e.jsxs("div",{"data-testid":"canvas-scene-edit-gizmo","data-locked":a.locked,"data-grouped":a.grouped,style:{position:"absolute",left:a.x+2,top:a.y+2,display:"flex",gap:2,color:"#fff"},children:[a.locked?e.jsx(k,{icon:ne,size:"xs"}):null,a.grouped?e.jsx(k,{icon:se,size:"xs"}):null]},a.id))})}function Ae({documentId:t,view:s,hasSelection:o,onCenterSelection:r,onFrameSelection:g}){const[i,l]=u.useState(!1),c=u.useRef(null);u.useSyncExternalStore(R,X),u.useSyncExternalStore(u.useCallback(h=>ie(s,h),[s]),u.useCallback(()=>ae(s),[s]));const v=$();u.useSyncExternalStore(v.subscribe,v.getSnapshot);const a=H(t),y=U(t),p=[{label:"Show Grid",on:y&&!a.gridWhenSnapping,pick:()=>{Y(t,!0),L(t,{gridWhenSnapping:!1})}},{label:"Show Grid When Snapping",on:y&&a.gridWhenSnapping,pick:()=>{Y(t,!0),L(t,{gridWhenSnapping:!0})}},{label:"Hide Grid",on:!y,pick:()=>Y(t,!1)}],b=()=>ue(t),x=[{label:"Rulers",on:a.rulers,toggle:()=>L(t,{rulers:!a.rulers})},{label:"Guides",on:a.guides,toggle:()=>L(t,{guides:!a.guides})},{label:"Origin",on:a.origin,toggle:()=>L(t,{origin:!a.origin})},{label:"Viewport",on:a.viewport,toggle:()=>L(t,{viewport:!a.viewport})}],S=h=>()=>{h(),l(!1)};return e.jsxs(e.Fragment,{children:[e.jsx(_,{ref:c,"aria-label":"View","aria-haspopup":"menu","aria-expanded":i,variant:"ghost",size:"comfortable",onClick:()=>l(!i),children:"View"}),i&&e.jsxs(Ee,{anchorRef:c,align:"end",clamp:!0,"aria-label":"2D view",onDismiss:()=>l(!1),children:[e.jsxs(Q,{label:"Grid","data-testid":"canvas-scene-grid-submenu",children:[p.map(h=>e.jsxs(P,{role:"menuitemradio","aria-checked":h.on,onSelect:S(h.pick),children:[e.jsx("span",{className:"volter-menu-check",children:h.on&&e.jsx(k,{icon:I,size:"xs"})}),h.label]},h.label)),e.jsx(ee,{}),e.jsxs(P,{"data-testid":"canvas-scene-toggle-grid",onSelect:S(b),children:[e.jsx("span",{className:"volter-menu-check"}),"Toggle Grid"]})]}),x.map(h=>e.jsxs(P,{role:"menuitemcheckbox","aria-checked":h.on,onSelect:S(h.toggle),children:[e.jsx("span",{className:"volter-menu-check",children:h.on&&e.jsx(k,{icon:I,size:"xs"})}),h.label.startsWith("Show ")?h.label:`Show ${h.label}`]},h.label)),e.jsx(Q,{label:"Gizmos","data-testid":"canvas-scene-gizmos-submenu",children:[["position","Position"],["lock","Lock"],["group","Group"],["transformation","Transformation"]].map(([h,E])=>e.jsxs(P,{role:"menuitemcheckbox","aria-checked":a[h],onSelect:S(()=>L(t,{[h]:!a[h]})),children:[e.jsx("span",{className:"volter-menu-check",children:a[h]&&e.jsx(k,{icon:I,size:"xs"})}),E]},h))}),e.jsx(ee,{}),e.jsxs(P,{disabled:!o,onSelect:S(r),children:[e.jsx("span",{className:"volter-menu-check"}),"Center Selection"]}),e.jsxs(P,{disabled:!o,onSelect:S(g),children:[e.jsx("span",{className:"volter-menu-check"}),"Frame Selection"]}),e.jsxs(P,{disabled:le(s).length===0,onSelect:S(()=>Ve(s)),children:[e.jsx("span",{className:"volter-menu-check"}),"Clear Guides"]})]})]})}function Ie({adapter:t,selected:s}){const o=s.filter(l=>t?.inspector?.properties(l).some(c=>c.path==="locked")),r=o.length>0&&o.every(l=>t?.inspector?.get(l,"locked")===!0),g=o.length>1?"nodes":"node",i=r?`Unlock selected ${g}`:`Lock selected ${g}`;return e.jsx(T,{text:o.length>0?i:"Select a node to lock it",children:e.jsx(F,{"aria-label":i,"aria-pressed":r,size:"comfortable",disabled:o.length===0||!t?.inspector?.set,onClick:()=>{for(const l of o)t?.inspector?.set?.(l,"locked",!r)},children:e.jsx(k,{icon:r?ne:ze,size:"md"})})})}function ue(t){const s=U(t)&&!H(t).gridWhenSnapping;Y(t,!0),L(t,{gridWhenSnapping:s})}const O=new WeakMap;function Be({mode:t,view:s,adapter:o,containerRef:r,onExit:g}){const i=$(),l=u.useSyncExternalStore(s.subscribe,s.get,s.get),[c,v]=u.useState(null),[a,y]=u.useState(null);u.useEffect(()=>{const n=f=>{f.key==="Escape"&&(t==="pivot"&&K(s,null),g())};return window.addEventListener("keydown",n),()=>window.removeEventListener("keydown",n)},[g]);const p=(n,f)=>{const j=r.current?.getBoundingClientRect(),z=s.get(),G=n-(j?.left??0),w=f-(j?.top??0);return{x:(G-z.x)/z.zoom,y:(w-z.y)/z.zoom}},b=n=>{const f=i.snap2D,j=(G,w)=>i.snapEnabled&&f.step>0?Math.round((G-w)/f.step)*f.step+w:G,z={x:j(n.x,f.offsetX),y:j(n.y,f.offsetY)};return f.pixel?{x:Math.round(z.x),y:Math.round(z.y)}:z},x=(n,f,j)=>{if(!o)return f;const z=Ce(o,n);return ke(f,Ge(o,n)??(z?Ne(z):null),{invert:j,smart:i.smartSnap,gridOn:i.snapEnabled,grid:i.snap2D,threshold:Me/Math.max(s.get().zoom,.01)})},S=n=>{if(n.button!==0)return;if(n.preventDefault(),t==="list"){const w=$e(i,n.clientX,n.clientY,o?{adapter:o}:{});y(w.length>0?{x:n.clientX,y:n.clientY,ids:w}:null);return}if(t==="pivot"&&n.shiftKey){K(s,b(p(n.clientX,n.clientY)));return}if(t==="pivot"){const w=i.selectedEntityIds,N=w.size===1&&o?[...w][0]:null,V=N&&o?we(o,N):null,W=N?V?.layers(N).find(M=>M.category==="origin")?.handles.find(M=>M.writable):void 0;if(!N||!V||!W)return;n.currentTarget.setPointerCapture(n.pointerId);const A=M=>{const J=x(N,p(M.clientX,M.clientY),M.metaKey||M.ctrlKey);return[J.x,J.y,0]};V.preview(N,W.id,A(n));const Z=M=>V.preview(N,W.id,A(M)),pe=M=>{window.removeEventListener("pointermove",Z),V.commit(N,W.id,A(M))};window.addEventListener("pointermove",Z),window.addEventListener("pointerup",pe,{once:!0});return}n.currentTarget.setPointerCapture(n.pointerId);const f={clientX:n.clientX,clientY:n.clientY,pose:s.get()},j=p(n.clientX,n.clientY);t==="ruler"&&v({from:b(j),to:b(j)});const z=w=>{t==="pan"?s.setView(f.pose.x+w.clientX-f.clientX,f.pose.y+w.clientY-f.clientY,f.pose.zoom):v({from:b(j),to:b(p(w.clientX,w.clientY))})},G=()=>{window.removeEventListener("pointermove",z),window.removeEventListener("pointerup",G)};window.addEventListener("pointermove",z),window.addEventListener("pointerup",G,{once:!0})},h=n=>({x:l.x+n.x*l.zoom,y:l.y+n.y*l.zoom}),E=c?Math.hypot(c.to.x-c.from.x,c.to.y-c.from.y):0,C=c?Math.atan2(c.to.y-c.from.y,c.to.x-c.from.x)*180/Math.PI:0,d=c?h(c.from):null,m=c?h(c.to):null;return e.jsxs("div",{"data-testid":`canvas-scene-${t}-layer`,"data-volter-canvas-navigation-ignore":"true",onPointerDown:S,style:{position:"absolute",inset:0,zIndex:60,cursor:t==="pan"?"grab":t==="list"?"context-menu":"crosshair"},children:[a&&o?e.jsx(Pe,{state:a,adapter:o,onClose:()=>y(null)}):null,d&&m?e.jsxs(e.Fragment,{children:[e.jsx("svg",{style:{position:"absolute",inset:0,width:"100%",height:"100%",pointerEvents:"none"},children:e.jsx("line",{x1:d.x,y1:d.y,x2:m.x,y2:m.y,stroke:"#ff5fa2",strokeWidth:1.5})}),e.jsx("div",{"data-testid":"canvas-scene-ruler-reading",style:{position:"absolute",left:(d.x+m.x)/2+8,top:(d.y+m.y)/2+8,padding:"2px 6px",borderRadius:4,background:"rgba(24, 26, 30, .92)",color:"#fff",font:"11px ui-monospace, SFMono-Regular, Menlo, monospace",pointerEvents:"none",whiteSpace:"nowrap"},children:`${E.toFixed(1)} px · ${C.toFixed(1)}° · Δ ${(c.to.x-c.from.x).toFixed(1)}, ${(c.to.y-c.from.y).toFixed(1)}`})]}):null]})}function Oe({adapter:t,selected:s}){const o=s.filter(l=>t?.inspector?.properties(l).some(c=>c.path==="grouped")),r=o.length>0&&o.every(l=>t?.inspector?.get(l,"grouped")===!0),g=o.length>1?"nodes":"node",i=r?`Ungroup selected ${g}`:`Group selected ${g} with their children`;return e.jsx(T,{text:o.length>0?i:"Select a node to group it",children:e.jsx(F,{"aria-label":i,"aria-pressed":r,size:"comfortable",disabled:o.length===0||!t?.inspector?.set,onClick:()=>{for(const l of o)t?.inspector?.set?.(l,"grouped",!r)},children:e.jsx(k,{icon:se,size:"md"})})})}export{nt as C,st as a,rt as b};
@@ -0,0 +1 @@
1
+ import{a as e}from"./jsx-runtime-DPjLkJKQ.js";import{r as l}from"./index-nmcBqr7Y.js";import{dz as m,aM as u,dA as p}from"./index-C5ZAyrKq.js";function g({value:r,onChange:o,disabled:s=!1}){const[n,a]=l.useState(r??""),i=m();l.useEffect(()=>{a(r??"")},[r]);const c=()=>{const t=n.trim();t&&t!==r&&o(t)};return r===null?e.jsxs("div",{className:"volter-color-input",children:[e.jsx("div",{className:"volter-color-input-mixed"}),e.jsx(u,{placeholder:"—",disabled:s,onChange:t=>{t.target.value&&o(t.target.value)},"data-mixed":"true"})]}):e.jsxs("div",{className:"volter-color-input",children:[e.jsx(p,{value:r,disabled:s,onChange:t=>{i?.begin(),o(t.target.value)},onBlur:()=>i?.end()}),e.jsx(u,{value:n,disabled:s,onChange:t=>a(t.target.value),onBlur:c,onKeyDown:t=>{t.key==="Enter"?(c(),t.target.blur()):t.key==="Escape"&&(a(r),t.target.blur())}})]})}export{g as C};
@@ -1 +1 @@
1
- import{a as n}from"./jsx-runtime-DPjLkJKQ.js";import{t as f}from"./editor-shell-store-ChLcVeNB.js";import{J as d,ad as v}from"./index-BRJMIUK0.js";import{r as l}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{a as S}from"./live-mixers-B-bwLZ7c.js";import{c as h,a as b,b as x}from"./asset-preview-B1tDziF1.js";import{O as j}from"./StageHost-B89HKcvd.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./output-pass-HurwNl0G.js";import"./three.module-BLhyNg0e.js";import"./three.core-3arARmh6.js";import"./Pass-D1MRT672.js";import"./editor-layers-BDJnAAzj.js";import"./workspace-arrangement-BdAlBwvd.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./user-data-Bpj7diUS.js";import"./entity-object-JmYMfLsx.js";import"./three-contract-Dkt6PmWY.js";import"./renderer-ownership-BovSEcLv.js";import"./hierarchy-marks-Cc_3lxw6.js";import"./studio-environment-DRxxq_QX.js";import"./KTX2Loader-CaqVE6nY.js";import"./GLTFLoader-KeoruJgS.js";import"./BufferGeometryUtils-B22h7jo4.js";import"./environment-Dg-YaLsA.js";import"./RoomEnvironment-BkknvS_I.js";import"./EXRLoader-CITMBvGd.js";import"./HDRLoader-BTGuGhVo.js";import"./bitmap-label-Ct4k6ehY.js";import"./three-state-DwFE3ay2.js";import"./standard-viewport-dressing-BCA51Tum.js";import"./content-bounds-BeuIXKYu.js";import"./preview-renderer-BrYNFV1p.js";import"./live-gesture-lock-DJbrjOqf.js";import"./model-inspection-CXHxrafK.js";import"./three-viewport-presentation-B0z_cECu.js";import"./clip-planes-CnAI6DZn.js";import"./three-TCuY32m_.js";import"./component-instance-root-B0C5oNEm.js";import"./viewport-editor-controls-BYaAZ_Ku.js";import"./model-thumbnail-BEKPWg4l.js";import"./OrbitControls-B13MKuwC.js";import"./LineSegments2-DN9pUfWA.js";import"./three.quarks.esm-C_HmSKXo.js";import"./three-integration-BdN5Nhsg.js";import"./host-hierarchy-objects-BV3WqU2w.js";import"./layered-pick-kiQf53t5.js";import"./root-stacking-BEd9ZvxC.js";import"./object3d-document-session-registry-DJDEDM0p.js";import"./viewport-door-Bj_ZIP85.js";import"./scene-framing-BQt72ZCw.js";import"./source-object3d-authoring-adapter-DF679Ncb.js";import"./three-projection-core-CG01r5Ta.js";import"./editor-presentation-activity-C7SNSmTd.js";import"./transport-strip-CUjNltnb.js";import"./viewport-surface-status-cwCiBGa7.js";function w(e){const t=new Set;return e.traverse(i=>{const r=S(i);if(r)for(const o of r.clips.values())t.add(o);for(const o of i.animations)t.add(o)}),[...t]}function E({documentId:e,source:t,sourcePath:i,displayName:r,active:o,chromeless:p=!1,revision:m=0,modelSource:a}){const u=l.useCallback(()=>{const s=h(b(t)),c=w(t);return s.animations=[...c],{root:s,animations:c,dispose(){x(s)}}},[t,m]);return n.jsx(j,{documentId:e,sourcePath:i??r,displayName:r,build:u,active:o,chromeless:p,rendererLane:p?"inspector-preview":"own",assetType:"entity",...a?{modelSource:a}:{}})}function Vt({documentId:e,entityId:t,displayName:i,active:r}){const o=f(d()),p=l.useSyncExternalStore(o.shell.subscribe,o.shell.getSnapshot),m=o.objectMap.get(t);return m?n.jsx(E,{documentId:e,source:m,sourcePath:`Entity ${t}`,displayName:i,active:r,revision:p,modelSource:{kind:"entity",entityId:t}}):n.jsxs("div",{role:"alert",style:{padding:20,color:v.semantic.danger},children:["Scene entity ",t," is no longer available."]})}export{Vt as EntityModelDocument,E as Object3DSnapshotDocument};
1
+ import{a as n}from"./jsx-runtime-DPjLkJKQ.js";import{t as f}from"./editor-shell-store-DHVWS8cE.js";import{K as d,af as v}from"./index-C5ZAyrKq.js";import{r as l}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{a as S}from"./live-mixers-B-bwLZ7c.js";import{c as h,a as b,b as x}from"./asset-preview-DxlSdRZn.js";import{O as j}from"./StageHost-DYfGYwvq.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./output-pass-HurwNl0G.js";import"./three.module-BLhyNg0e.js";import"./three.core-3arARmh6.js";import"./Pass-D1MRT672.js";import"./editor-layers-D-CTUqco.js";import"./workspace-arrangement-DqG5sUns.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./user-data-C84W0V47.js";import"./entity-object-MKYemTFM.js";import"./three-contract-Dkt6PmWY.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"./environment-Dg-YaLsA.js";import"./RoomEnvironment-BkknvS_I.js";import"./EXRLoader-CITMBvGd.js";import"./HDRLoader-BTGuGhVo.js";import"./bitmap-label-Ct4k6ehY.js";import"./three-state-BCACvUtm.js";import"./standard-viewport-dressing-BW-dM_1h.js";import"./content-bounds-DROIchTa.js";import"./preview-renderer-BrYNFV1p.js";import"./live-gesture-lock-DJbrjOqf.js";import"./model-inspection-DvspbmJl.js";import"./three-viewport-presentation-CBzvc2v2.js";import"./clip-planes-CnAI6DZn.js";import"./three-DiL6vMXq.js";import"./component-instance-root-DLI40MiB.js";import"./viewport-editor-controls-BYaAZ_Ku.js";import"./model-thumbnail-BmQs-h6t.js";import"./OrbitControls-B13MKuwC.js";import"./LineSegments2-DN9pUfWA.js";import"./three.quarks.esm-C_HmSKXo.js";import"./three-integration-DXOFI88n.js";import"./host-hierarchy-objects-BV3WqU2w.js";import"./layered-pick-CAVQMPI7.js";import"./root-stacking-BEd9ZvxC.js";import"./object3d-document-session-registry-CMRJdFp6.js";import"./viewport-door-BARIpMu-.js";import"./scene-framing-DkZKDwH3.js";import"./source-object3d-authoring-adapter-CvmFpSUj.js";import"./three-projection-core-B7Lf8tOp.js";import"./editor-presentation-activity-CqJH4G9t.js";import"./transport-strip-xCg94CuI.js";import"./viewport-surface-status-TUfhXKR9.js";function w(e){const t=new Set;return e.traverse(i=>{const r=S(i);if(r)for(const o of r.clips.values())t.add(o);for(const o of i.animations)t.add(o)}),[...t]}function E({documentId:e,source:t,sourcePath:i,displayName:r,active:o,chromeless:p=!1,revision:m=0,modelSource:a}){const u=l.useCallback(()=>{const s=h(b(t)),c=w(t);return s.animations=[...c],{root:s,animations:c,dispose(){x(s)}}},[t,m]);return n.jsx(j,{documentId:e,sourcePath:i??r,displayName:r,build:u,active:o,chromeless:p,rendererLane:p?"inspector-preview":"own",assetType:"entity",...a?{modelSource:a}:{}})}function Vt({documentId:e,entityId:t,displayName:i,active:r}){const o=f(d()),p=l.useSyncExternalStore(o.shell.subscribe,o.shell.getSnapshot),m=o.objectMap.get(t);return m?n.jsx(E,{documentId:e,source:m,sourcePath:`Entity ${t}`,displayName:i,active:r,revision:p,modelSource:{kind:"entity",entityId:t}}):n.jsxs("div",{role:"alert",style:{padding:20,color:v.semantic.danger},children:["Scene entity ",t," is no longer available."]})}export{Vt as EntityModelDocument,E as Object3DSnapshotDocument};
@@ -1 +1 @@
1
- import{a as o}from"./jsx-runtime-DPjLkJKQ.js";import{dF as M,dG as C,dH as D,dI as k,ad as y,b2 as R,dJ as b}from"./index-BRJMIUK0.js";import{r as f}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{W as A}from"./three.module-BLhyNg0e.js";import{OrbitControls as P}from"./OrbitControls-B13MKuwC.js";import{E as z}from"./EXRLoader-CITMBvGd.js";import{HDRLoader as I}from"./HDRLoader-BTGuGhVo.js";import{s as T}from"./asset-editor-persistence-BGWIqZdk.js";import{aT as F,ej as H,A as L,el as O,d9 as B,_ as G,db as $,cp as N,co as E,cx as j,ey as S,X as _,cj as q}from"./three.core-3arARmh6.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";function X(e){return e.split("/").pop()??e}function v(e,t,r){return Math.min(r,Math.max(t,e))}function U(e){return e.split(/[?#]/,1)[0].toLowerCase().endsWith(".exr")}async function W(e){const t=U(e)?"EXR":"HDR",s=await(t==="EXR"?new z:new I).loadAsync(e),p=s.image,n=p.width??0,a=p.height??0,c=n>0&&a>0&&Math.abs(n/a-2)<=.04;return s.mapping=F,s.needsUpdate=!0,{texture:s,width:n,height:a,format:t,panorama:c}}function J(e){const t=new O,r=new B(38,1,.05,100);r.position.set(6.2,3.4,7.8),r.lookAt(0,.7,0);const s=[],p=[];if(!e.panorama){t.background=new G("#11141b");const i=e.width>0&&e.height>0?e.width/e.height:1,d=new $(i>=1?4.8:4.8*i,i>=1?4.8/i:4.8),m=new N({map:e.texture,toneMapped:!0});return s.push(d),p.push(m),t.add(new E(d,m)),r.position.set(0,0,6.5),r.lookAt(0,0,0),{scene:t,camera:r,geometries:s,materials:p}}t.background=e.texture,t.environment=e.texture;const n=(i,d,m)=>{s.push(i),p.push(d);const x=new E(i,d);x.position.set(...m),t.add(x)};n(new S(1,64,40),new j({color:"#d8dde5",roughness:.08,metalness:1}),[-2.3,1.15,0]),n(new S(1,64,40),new j({color:"#c97341",roughness:.32,metalness:.25}),[0,1.15,0]),n(new S(1,64,40),new j({color:"#d7d5cf",roughness:.82,metalness:0}),[2.3,1.15,0]);const a=new _(5.7,96),c=new j({color:"#737881",roughness:.58,metalness:0});s.push(a),p.push(c);const l=new E(a,c);return l.rotation.x=-Math.PI/2,l.position.y=.08,t.add(l),{scene:t,camera:r,geometries:s,materials:p}}function V({image:e,settingsRef:t}){const r=f.useRef(null);return f.useEffect(()=>{const s=r.current;if(!s)return;let p=!1,n=0;const a=document.createElement("canvas");a.setAttribute("aria-label",`${e.format} environment preview`),a.style.width="100%",a.style.height="100%",a.style.display="block",s.replaceChildren(a);const c=new A({canvas:a,antialias:!0});c.outputColorSpace=H,c.toneMapping=L;const l=J(e),i=new P(l.camera,a);i.target.set(0,e.panorama?.8:0,0),i.enableDamping=!0,i.enablePan=!1,i.minDistance=e.panorama?3.8:4,i.maxDistance=e.panorama?14:10,i.update();const d={width:1,height:1},m=()=>{const u=t.current;if(c.toneMappingExposure=v(u.exposure,.05,8),e.panorama){const h=q.degToRad(u.rotation);l.scene.backgroundRotation.y=h,l.scene.environmentRotation.y=h,l.scene.backgroundBlurriness=v(u.blur,0,1),l.scene.environmentIntensity=v(u.intensity,0,8)}i.update(),c.render(l.scene,l.camera)},x=()=>{const u=s.getBoundingClientRect();d.width=Math.max(1,Math.floor(u.width)),d.height=Math.max(1,Math.floor(u.height)),c.setPixelRatio(Math.min(window.devicePixelRatio||1,2)),c.setSize(d.width,d.height,!1),l.camera.aspect=d.width/d.height,l.camera.updateProjectionMatrix(),m()};x();const w=new ResizeObserver(x);w.observe(s);const g=()=>{p||(m(),n=requestAnimationFrame(g))};return n=requestAnimationFrame(g),()=>{p=!0,cancelAnimationFrame(n),w.disconnect(),i.dispose();for(const u of l.geometries)u.dispose();for(const u of l.materials)u.dispose();c.dispose(),a.remove()}},[e,t]),o.jsx("div",{ref:r,"data-testid":"environment-preview",style:{width:"100%",height:"100%",minHeight:260,background:"#11141b"}})}function K({panorama:e,settings:t,onChange:r}){return o.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:12,padding:4},children:[o.jsxs("label",{style:{display:"flex",flexDirection:"column",gap:5,fontSize:11},children:["Exposure",o.jsx(b,{value:t.exposure,onChange:s=>r({...t,exposure:v(s,.05,8)}),step:.05,precision:2})]}),e&&o.jsxs(o.Fragment,{children:[o.jsxs("label",{style:{display:"flex",flexDirection:"column",gap:5,fontSize:11},children:["Lighting intensity",o.jsx(b,{value:t.intensity,onChange:s=>r({...t,intensity:v(s,0,8)}),step:.05,precision:2})]}),o.jsxs("label",{style:{display:"flex",flexDirection:"column",gap:5,fontSize:11},children:["Rotation",o.jsx(b,{value:t.rotation,onChange:s=>r({...t,rotation:s%360}),step:1,precision:0})]}),o.jsxs("label",{style:{display:"flex",flexDirection:"column",gap:5,fontSize:11},children:["Background blur",o.jsx(b,{value:t.blur,onChange:s=>r({...t,blur:v(s,0,1)}),step:.05,precision:2})]})]}),o.jsx("div",{style:{color:y.content.muted,fontSize:10,lineHeight:1.45},children:"Preview controls are session-only. Bind the image, orientation, and accepted intensity in the owning scene source."})]})}function pe({documentId:e,assetPath:t,active:r=!0}){const[s,p]=f.useState(0),[n,a]=f.useState(null),[c,l]=f.useState(null),[i,d]=f.useState({exposure:1,intensity:1,rotation:0,blur:0}),m=f.useRef(i);m.current=i,f.useEffect(()=>{if(r)return T(t,()=>p(g=>g+1))},[r,t]),f.useEffect(()=>{if(!r)return;let g=!1,u=null;return a(null),l(null),W(t).then(h=>{if(u=h,g){h.texture.dispose();return}a(h)},h=>{g||l(h instanceof Error?h.message:String(h))}),()=>{g=!0,u?.texture.dispose()}},[r,t,s]);const x=f.useMemo(()=>[{id:"environment-image",title:"Environment Image",icon:C,order:M,body:{kind:"custom",...n?{data:{format:n.format,width:n.width,height:n.height,panorama:n.panorama}}:{},render:()=>o.jsxs("div",{style:{display:"grid",gridTemplateColumns:"auto 1fr",gap:"6px 10px"},children:[o.jsx("span",{style:{color:y.content.muted},children:"Format"}),o.jsx("span",{children:n?.format??"—"}),o.jsx("span",{style:{color:y.content.muted},children:"Resolution"}),o.jsx("span",{children:n?`${n.width} × ${n.height}`:"—"}),o.jsx("span",{style:{color:y.content.muted},children:"Projection"}),o.jsx("span",{children:n?.panorama?"2:1 equirectangular":"Flat image"})]})}},{id:"environment-preview-settings",title:"Preview",icon:k,order:D,body:{kind:"custom",data:{...i},render:()=>o.jsx(K,{panorama:n?.panorama??!1,settings:i,onChange:d})}}],[n,i]),w=X(t);return c?o.jsx(R,{documentId:e,active:r,type:"environment image",title:w,status:"HDR image unavailable",children:o.jsx("div",{role:"alert",style:{padding:20,color:y.semantic.danger},children:c})}):n?o.jsx(R,{documentId:e,active:r,type:"environment image",title:w,sections:x,status:`${n.format} · ${n.width} × ${n.height}`,fill:!0,children:o.jsxs("div",{style:{position:"relative",width:"100%",height:"100%",minHeight:0},children:[o.jsx(V,{image:n,settingsRef:m}),o.jsx("div",{style:{position:"absolute",left:12,bottom:12,padding:"4px 7px",borderRadius:4,background:"rgba(12,14,20,0.72)",color:"#f2f4f8",fontSize:10,pointerEvents:"none"},children:n.panorama?"Drag to orbit · wheel to frame":"Non-2:1 image · flat preview"})]})}):o.jsx(R,{documentId:e,active:r,type:"environment image",title:w,status:"Loading HDR image",children:o.jsx("div",{style:{padding:20,color:y.content.muted},children:"Loading environment…"})})}export{pe as EnvironmentAssetDocument};
1
+ import{a as o}from"./jsx-runtime-DPjLkJKQ.js";import{du as M,dv as C,dw as D,dx as k,af as y,b4 as R,dy as b}from"./index-C5ZAyrKq.js";import{r as f}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{W as A}from"./three.module-BLhyNg0e.js";import{OrbitControls as P}from"./OrbitControls-B13MKuwC.js";import{E as z}from"./EXRLoader-CITMBvGd.js";import{HDRLoader as T}from"./HDRLoader-BTGuGhVo.js";import{s as I}from"./asset-editor-persistence-BIbf5u0Q.js";import{aT as L,ej as O,A as B,el as F,d9 as H,_ as G,db as $,cp as N,co as E,cx as j,ey as S,X as _,cj as q}from"./three.core-3arARmh6.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";function X(e){return e.split("/").pop()??e}function v(e,t,r){return Math.min(r,Math.max(t,e))}function U(e){return e.split(/[?#]/,1)[0].toLowerCase().endsWith(".exr")}async function W(e){const t=U(e)?"EXR":"HDR",s=await(t==="EXR"?new z:new T).loadAsync(e),p=s.image,n=p.width??0,a=p.height??0,c=n>0&&a>0&&Math.abs(n/a-2)<=.04;return s.mapping=L,s.needsUpdate=!0,{texture:s,width:n,height:a,format:t,panorama:c}}function V(e){const t=new F,r=new H(38,1,.05,100);r.position.set(6.2,3.4,7.8),r.lookAt(0,.7,0);const s=[],p=[];if(!e.panorama){t.background=new G("#11141b");const i=e.width>0&&e.height>0?e.width/e.height:1,d=new $(i>=1?4.8:4.8*i,i>=1?4.8/i:4.8),m=new N({map:e.texture,toneMapped:!0});return s.push(d),p.push(m),t.add(new E(d,m)),r.position.set(0,0,6.5),r.lookAt(0,0,0),{scene:t,camera:r,geometries:s,materials:p}}t.background=e.texture,t.environment=e.texture;const n=(i,d,m)=>{s.push(i),p.push(d);const x=new E(i,d);x.position.set(...m),t.add(x)};n(new S(1,64,40),new j({color:"#d8dde5",roughness:.08,metalness:1}),[-2.3,1.15,0]),n(new S(1,64,40),new j({color:"#c97341",roughness:.32,metalness:.25}),[0,1.15,0]),n(new S(1,64,40),new j({color:"#d7d5cf",roughness:.82,metalness:0}),[2.3,1.15,0]);const a=new _(5.7,96),c=new j({color:"#737881",roughness:.58,metalness:0});s.push(a),p.push(c);const l=new E(a,c);return l.rotation.x=-Math.PI/2,l.position.y=.08,t.add(l),{scene:t,camera:r,geometries:s,materials:p}}function J({image:e,settingsRef:t}){const r=f.useRef(null);return f.useEffect(()=>{const s=r.current;if(!s)return;let p=!1,n=0;const a=document.createElement("canvas");a.setAttribute("aria-label",`${e.format} environment preview`),a.style.width="100%",a.style.height="100%",a.style.display="block",s.replaceChildren(a);const c=new A({canvas:a,antialias:!0});c.outputColorSpace=O,c.toneMapping=B;const l=V(e),i=new P(l.camera,a);i.target.set(0,e.panorama?.8:0,0),i.enableDamping=!0,i.enablePan=!1,i.minDistance=e.panorama?3.8:4,i.maxDistance=e.panorama?14:10,i.update();const d={width:1,height:1},m=()=>{const u=t.current;if(c.toneMappingExposure=v(u.exposure,.05,8),e.panorama){const h=q.degToRad(u.rotation);l.scene.backgroundRotation.y=h,l.scene.environmentRotation.y=h,l.scene.backgroundBlurriness=v(u.blur,0,1),l.scene.environmentIntensity=v(u.intensity,0,8)}i.update(),c.render(l.scene,l.camera)},x=()=>{const u=s.getBoundingClientRect();d.width=Math.max(1,Math.floor(u.width)),d.height=Math.max(1,Math.floor(u.height)),c.setPixelRatio(Math.min(window.devicePixelRatio||1,2)),c.setSize(d.width,d.height,!1),l.camera.aspect=d.width/d.height,l.camera.updateProjectionMatrix(),m()};x();const w=new ResizeObserver(x);w.observe(s);const g=()=>{p||(m(),n=requestAnimationFrame(g))};return n=requestAnimationFrame(g),()=>{p=!0,cancelAnimationFrame(n),w.disconnect(),i.dispose();for(const u of l.geometries)u.dispose();for(const u of l.materials)u.dispose();c.dispose(),a.remove()}},[e,t]),o.jsx("div",{ref:r,"data-testid":"environment-preview",style:{width:"100%",height:"100%",minHeight:260,background:"#11141b"}})}function K({panorama:e,settings:t,onChange:r}){return o.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:12,padding:4},children:[o.jsxs("label",{style:{display:"flex",flexDirection:"column",gap:5,fontSize:11},children:["Exposure",o.jsx(b,{value:t.exposure,onChange:s=>r({...t,exposure:v(s,.05,8)}),step:.05,precision:2})]}),e&&o.jsxs(o.Fragment,{children:[o.jsxs("label",{style:{display:"flex",flexDirection:"column",gap:5,fontSize:11},children:["Lighting intensity",o.jsx(b,{value:t.intensity,onChange:s=>r({...t,intensity:v(s,0,8)}),step:.05,precision:2})]}),o.jsxs("label",{style:{display:"flex",flexDirection:"column",gap:5,fontSize:11},children:["Rotation",o.jsx(b,{value:t.rotation,onChange:s=>r({...t,rotation:s%360}),step:1,precision:0})]}),o.jsxs("label",{style:{display:"flex",flexDirection:"column",gap:5,fontSize:11},children:["Background blur",o.jsx(b,{value:t.blur,onChange:s=>r({...t,blur:v(s,0,1)}),step:.05,precision:2})]})]}),o.jsx("div",{style:{color:y.content.muted,fontSize:10,lineHeight:1.45},children:"Preview controls are session-only. Bind the image, orientation, and accepted intensity in the owning scene source."})]})}function pe({documentId:e,assetPath:t,active:r=!0}){const[s,p]=f.useState(0),[n,a]=f.useState(null),[c,l]=f.useState(null),[i,d]=f.useState({exposure:1,intensity:1,rotation:0,blur:0}),m=f.useRef(i);m.current=i,f.useEffect(()=>{if(r)return I(t,()=>p(g=>g+1))},[r,t]),f.useEffect(()=>{if(!r)return;let g=!1,u=null;return a(null),l(null),W(t).then(h=>{if(u=h,g){h.texture.dispose();return}a(h)},h=>{g||l(h instanceof Error?h.message:String(h))}),()=>{g=!0,u?.texture.dispose()}},[r,t,s]);const x=f.useMemo(()=>[{id:"environment-image",title:"Environment Image",icon:C,order:M,body:{kind:"custom",...n?{data:{format:n.format,width:n.width,height:n.height,panorama:n.panorama}}:{},render:()=>o.jsxs("div",{style:{display:"grid",gridTemplateColumns:"auto 1fr",gap:"6px 10px"},children:[o.jsx("span",{style:{color:y.content.muted},children:"Format"}),o.jsx("span",{children:n?.format??"—"}),o.jsx("span",{style:{color:y.content.muted},children:"Resolution"}),o.jsx("span",{children:n?`${n.width} × ${n.height}`:"—"}),o.jsx("span",{style:{color:y.content.muted},children:"Projection"}),o.jsx("span",{children:n?.panorama?"2:1 equirectangular":"Flat image"})]})}},{id:"environment-preview-settings",title:"Preview",icon:k,order:D,body:{kind:"custom",data:{...i},render:()=>o.jsx(K,{panorama:n?.panorama??!1,settings:i,onChange:d})}}],[n,i]),w=X(t);return c?o.jsx(R,{documentId:e,active:r,type:"environment image",title:w,status:"HDR image unavailable",children:o.jsx("div",{role:"alert",style:{padding:20,color:y.semantic.danger},children:c})}):n?o.jsx(R,{documentId:e,active:r,type:"environment image",title:w,sections:x,status:`${n.format} · ${n.width} × ${n.height}`,fill:!0,children:o.jsxs("div",{style:{position:"relative",width:"100%",height:"100%",minHeight:0},children:[o.jsx(J,{image:n,settingsRef:m}),o.jsx("div",{style:{position:"absolute",left:12,bottom:12,padding:"4px 7px",borderRadius:4,background:"rgba(12,14,20,0.72)",color:"#f2f4f8",fontSize:10,pointerEvents:"none"},children:n.panorama?"Drag to orbit · wheel to frame":"Non-2:1 image · flat preview"})]})}):o.jsx(R,{documentId:e,active:r,type:"environment image",title:w,status:"Loading HDR image",children:o.jsx("div",{style:{padding:20,color:y.content.muted},children:"Loading environment…"})})}export{pe as EnvironmentAssetDocument};
@@ -1 +1 @@
1
- import{a as r}from"./jsx-runtime-DPjLkJKQ.js";import{r as c}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{fB as d,fC as M,dd as f,ad as o,ey as F}from"./index-BRJMIUK0.js";import{c as $}from"./gameplay-replay-BwdxV4oF.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./rrweb-Cd2ifIRP.js";import"./output-DK8waum9.js";function T(t,u,p){return Math.max(0,t+p-(u??t))}function y(t){const u=Math.max(0,Math.floor(t/1e3)),p=Math.floor(u/60),i=u%60;return`${p}:${String(i).padStart(2,"0")}`}function K(){const t=c.useSyncExternalStore(d.subscribe,d.getSnapshot,d.getSnapshot),u=c.useRef(null),p=c.useRef(null),[i,j]=c.useState(null),v=c.useSyncExternalStore(M.subscribe,M.getSnapshot,M.getSnapshot),a=t.selectedSession,n=a?.recording?.finalized?a.recording:null,[b,S]=c.useState(null),A=c.useRef(Promise.resolve());c.useEffect(()=>{if(S(null),!n||n.format!=="canvas-dom"||!n.replay||!i)return;let e=!1;const s=n.replay,l=T(a?.startedAt??0,n.startedAt??a?.startedAt??0,i.ms),w=setTimeout(()=>{A.current=A.current.catch(()=>{}).then(async()=>{if(!e)try{const g=await $(s,l);e||S({src:`data:image/png;base64,${g.base64}`})}catch(g){e||S({error:g instanceof Error?g.message:String(g)})}})},180);return()=>{e=!0,clearTimeout(w)}},[n?.replay,n?.format,n?.startedAt,i?.ms,a?.startedAt]);const E=v?Date.parse(v.startedAt):Number.NaN,m=a?.status==="live"&&v&&Number.isFinite(E)&&E>=a.startedAt?v:null,h=a&&i?a.startedAt+i.ms:null,x=m&&h!==null?m.frames.reduce((e,s)=>{const l=Date.parse(s.capturedAt);return Number.isFinite(l)?e?Math.abs(l-h)<Math.abs(Date.parse(e.capturedAt)-h)?s:e:s:e},null)??null:null,k=x?Date.parse(x.capturedAt):Number.NaN,z=x&&h!==null&&Number.isFinite(k)&&Math.abs(k-h)<=Math.max(1e3,2e3/(m?.sampleFps??1))?x:null;function R(e,s){if(!Number.isFinite(e.duration))return;const l=a?.startedAt??0,w=T(l,n?.startedAt??l,s.ms);e.currentTime=Math.min(w/1e3,Math.max(0,e.duration-.01))}c.useEffect(()=>{const e=p.current;!e||!i||R(e,i)},[i,n?.startedAt,a?.startedAt]);function N(e){const s=u.current?.getBoundingClientRect();if(!s||s.width<=0)return{ms:0,x:0};const l=Math.max(0,Math.min(e-s.left,s.width));return{ms:l/s.width*t.liveEdgeMs,x:l}}return t.loading&&t.sessions.length===0?r.jsx("div",{style:{padding:`4px ${f[3]}`,fontSize:11},children:"Loading sessions…"}):t.error&&t.sessions.length===0?r.jsxs("div",{role:"alert",style:{padding:`4px ${f[3]}`,fontSize:11,color:o.semantic.danger},children:["Gameplay Sessions unavailable: ",t.error]}):r.jsxs("div",{style:{height:28,minHeight:28,display:"flex",alignItems:"center",gap:f[2],padding:`0 ${f[3]}`,borderBottom:`1px solid ${o.boundary.default}`,background:o.surface.inset,position:"relative",zIndex:2},children:[r.jsxs("select",{"aria-label":"Gameplay Session",value:t.selectedSessionId??"",onChange:e=>d.select(e.currentTarget.value),style:{maxWidth:180,height:20,fontSize:11},children:[t.sessions.length===0?r.jsx("option",{value:"",children:"No sessions yet"}):null,t.sessions.map((e,s)=>r.jsx("option",{value:e.id,children:e.status==="live"?"Live":e.run??`Session ${t.sessions.length-s}`},e.id))]}),r.jsx("span",{style:{width:34,fontVariantNumeric:"tabular-nums",fontSize:11},children:y(t.cursorMs)}),r.jsxs("div",{ref:u,role:"slider","aria-label":"Session time","aria-valuemin":0,"aria-valuemax":t.liveEdgeMs,"aria-valuenow":t.cursorMs,tabIndex:0,onPointerDown:e=>{e.currentTarget.setPointerCapture(e.pointerId),d.seek(N(e.clientX).ms)},onPointerMove:e=>{const s=N(e.clientX);j(s),e.currentTarget.hasPointerCapture(e.pointerId)&&d.seek(s.ms)},onPointerLeave:()=>j(null),onKeyDown:e=>{e.key==="ArrowLeft"&&d.seek(t.cursorMs-1e3),e.key==="ArrowRight"&&d.seek(t.cursorMs+1e3)},style:{flex:1,height:12,position:"relative",cursor:"ew-resize",outline:"none"},children:[r.jsx("div",{style:{position:"absolute",left:0,right:0,top:5,height:2,background:o.boundary.strong}}),r.jsx("div",{style:{position:"absolute",left:`${t.liveEdgeMs>0?t.cursorMs/t.liveEdgeMs*100:0}%`,top:1,width:2,height:10,background:o.accent.default}}),i&&(n||m)?r.jsxs("div",{style:{position:"absolute",left:Math.max(0,i.x-80),top:16,width:160,padding:3,background:o.surface.raised,border:`1px solid ${o.boundary.strong}`,boxShadow:"0 6px 18px rgba(0,0,0,.35)",pointerEvents:"none"},children:[n?.format==="canvas-dom"?b?.src?r.jsx("img",{src:b.src,alt:"Recorded gameplay with HUD",style:{width:"100%",display:"block"}}):r.jsx("div",{role:"status",style:{padding:f[4],fontSize:F.sm},children:b?.error??"Reconstructing frame…"}):n?r.jsx("video",{ref:p,src:n.url,muted:!0,preload:"metadata",onLoadedMetadata:e=>{i&&R(e.currentTarget,i)},style:{width:"100%",display:"block"}}):z?r.jsx("img",{src:z.src,alt:"Live gameplay recording preview",style:{width:"100%",display:"block"}}):r.jsx("div",{style:{padding:8,fontSize:10,color:o.content.muted},children:m?.frames.length===0?"Frame previews are available after recording stops.":`This point is outside the ${y(m?.retentionMs??0)} live preview window.`}),r.jsx("div",{style:{fontSize:10,textAlign:"center",paddingTop:2},children:y(i.ms)})]}):null]}),r.jsx("span",{style:{width:34,fontVariantNumeric:"tabular-nums",fontSize:11},children:y(t.liveEdgeMs)}),a?.status==="live"?r.jsxs("span",{style:{color:o.semantic.danger,fontSize:10},children:["● LIVE",m?" VIDEO":""]}):n?r.jsx("span",{style:{fontSize:10,color:o.content.muted},children:"VIDEO"}):null,t.error?r.jsx("span",{role:"status",title:t.error,style:{color:o.semantic.warning,fontSize:11},children:"⚠"}):null]})}export{K as GameplaySessionTimeline};
1
+ import{a as r}from"./jsx-runtime-DPjLkJKQ.js";import{r as c}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{fs as d,ft as M,c$ as g,af as o,ep as $}from"./index-C5ZAyrKq.js";import{c as F}from"./gameplay-replay-HRenPTtU.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./rrweb-Cd2ifIRP.js";import"./output-DK8waum9.js";function T(t,u,m){return Math.max(0,t+m-(u??t))}function y(t){const u=Math.max(0,Math.floor(t/1e3)),m=Math.floor(u/60),i=u%60;return`${m}:${String(i).padStart(2,"0")}`}function K(){const t=c.useSyncExternalStore(d.subscribe,d.getSnapshot,d.getSnapshot),u=c.useRef(null),m=c.useRef(null),[i,j]=c.useState(null),v=c.useSyncExternalStore(M.subscribe,M.getSnapshot,M.getSnapshot),a=t.selectedSession,n=a?.recording?.finalized?a.recording:null,[b,S]=c.useState(null),A=c.useRef(Promise.resolve());c.useEffect(()=>{if(S(null),!n||n.format!=="canvas-dom"||!n.replay||!i)return;let e=!1;const s=n.replay,l=T(a?.startedAt??0,n.startedAt??a?.startedAt??0,i.ms),w=setTimeout(()=>{A.current=A.current.catch(()=>{}).then(async()=>{if(!e)try{const f=await F(s,l);e||S({src:`data:image/png;base64,${f.base64}`})}catch(f){e||S({error:f instanceof Error?f.message:String(f)})}})},180);return()=>{e=!0,clearTimeout(w)}},[n?.replay,n?.format,n?.startedAt,i?.ms,a?.startedAt]);const E=v?Date.parse(v.startedAt):Number.NaN,p=a?.status==="live"&&v&&Number.isFinite(E)&&E>=a.startedAt?v:null,h=a&&i?a.startedAt+i.ms:null,x=p&&h!==null?p.frames.reduce((e,s)=>{const l=Date.parse(s.capturedAt);return Number.isFinite(l)?e?Math.abs(l-h)<Math.abs(Date.parse(e.capturedAt)-h)?s:e:s:e},null)??null:null,k=x?Date.parse(x.capturedAt):Number.NaN,z=x&&h!==null&&Number.isFinite(k)&&Math.abs(k-h)<=Math.max(1e3,2e3/(p?.sampleFps??1))?x:null;function R(e,s){if(!Number.isFinite(e.duration))return;const l=a?.startedAt??0,w=T(l,n?.startedAt??l,s.ms);e.currentTime=Math.min(w/1e3,Math.max(0,e.duration-.01))}c.useEffect(()=>{const e=m.current;!e||!i||R(e,i)},[i,n?.startedAt,a?.startedAt]);function N(e){const s=u.current?.getBoundingClientRect();if(!s||s.width<=0)return{ms:0,x:0};const l=Math.max(0,Math.min(e-s.left,s.width));return{ms:l/s.width*t.liveEdgeMs,x:l}}return t.loading&&t.sessions.length===0?r.jsx("div",{style:{padding:`4px ${g[3]}`,fontSize:11},children:"Loading sessions…"}):t.error&&t.sessions.length===0?r.jsxs("div",{role:"alert",style:{padding:`4px ${g[3]}`,fontSize:11,color:o.semantic.danger},children:["Gameplay Sessions unavailable: ",t.error]}):r.jsxs("div",{style:{height:28,minHeight:28,display:"flex",alignItems:"center",gap:g[2],padding:`0 ${g[3]}`,borderBottom:`1px solid ${o.boundary.default}`,background:o.surface.inset,position:"relative",zIndex:2},children:[r.jsxs("select",{"aria-label":"Gameplay Session",value:t.selectedSessionId??"",onChange:e=>d.select(e.currentTarget.value),style:{maxWidth:180,height:20,fontSize:11},children:[t.sessions.length===0?r.jsx("option",{value:"",children:"No sessions yet"}):null,t.sessions.map((e,s)=>r.jsx("option",{value:e.id,children:e.status==="live"?"Live":e.run??`Session ${t.sessions.length-s}`},e.id))]}),r.jsx("span",{style:{width:34,fontVariantNumeric:"tabular-nums",fontSize:11},children:y(t.cursorMs)}),r.jsxs("div",{ref:u,role:"slider","aria-label":"Session time","aria-valuemin":0,"aria-valuemax":t.liveEdgeMs,"aria-valuenow":t.cursorMs,tabIndex:0,onPointerDown:e=>{e.currentTarget.setPointerCapture(e.pointerId),d.seek(N(e.clientX).ms)},onPointerMove:e=>{const s=N(e.clientX);j(s),e.currentTarget.hasPointerCapture(e.pointerId)&&d.seek(s.ms)},onPointerLeave:()=>j(null),onKeyDown:e=>{e.key==="ArrowLeft"&&d.seek(t.cursorMs-1e3),e.key==="ArrowRight"&&d.seek(t.cursorMs+1e3)},style:{flex:1,height:12,position:"relative",cursor:"ew-resize",outline:"none"},children:[r.jsx("div",{style:{position:"absolute",left:0,right:0,top:5,height:2,background:o.boundary.strong}}),r.jsx("div",{style:{position:"absolute",left:`${t.liveEdgeMs>0?t.cursorMs/t.liveEdgeMs*100:0}%`,top:1,width:2,height:10,background:o.accent.default}}),i&&(n||p)?r.jsxs("div",{style:{position:"absolute",left:Math.max(0,i.x-80),top:16,width:160,padding:3,background:o.surface.raised,border:`1px solid ${o.boundary.strong}`,boxShadow:"0 6px 18px rgba(0,0,0,.35)",pointerEvents:"none"},children:[n?.format==="canvas-dom"?b?.src?r.jsx("img",{src:b.src,alt:"Recorded gameplay with HUD",style:{width:"100%",display:"block"}}):r.jsx("div",{role:"status",style:{padding:g[4],fontSize:$.sm},children:b?.error??"Reconstructing frame…"}):n?r.jsx("video",{ref:m,src:n.url,muted:!0,preload:"metadata",onLoadedMetadata:e=>{i&&R(e.currentTarget,i)},style:{width:"100%",display:"block"}}):z?r.jsx("img",{src:z.src,alt:"Live gameplay recording preview",style:{width:"100%",display:"block"}}):r.jsx("div",{style:{padding:8,fontSize:10,color:o.content.muted},children:p?.frames.length===0?"Frame previews are available after recording stops.":`This point is outside the ${y(p?.retentionMs??0)} live preview window.`}),r.jsx("div",{style:{fontSize:10,textAlign:"center",paddingTop:2},children:y(i.ms)})]}):null]}),r.jsx("span",{style:{width:34,fontVariantNumeric:"tabular-nums",fontSize:11},children:y(t.liveEdgeMs)}),a?.status==="live"?r.jsxs("span",{style:{color:o.semantic.danger,fontSize:10},children:["● LIVE",p?" VIDEO":""]}):n?r.jsx("span",{style:{fontSize:10,color:o.content.muted},children:"VIDEO"}):null,t.error?r.jsx("span",{role:"status",title:t.error,style:{color:o.semantic.warning,fontSize:11},children:"⚠"}):null]})}export{K as GameplaySessionTimeline};
@@ -0,0 +1 @@
1
+ import{a as e}from"./jsx-runtime-DPjLkJKQ.js";import{r as o}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{aU as W,aV as H,aW as B,aX as M,aK as v,a0 as P,aY as h,aZ as F}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 q({assetPath:n,displayName:l}){const{sheetPath:i,frameName:t}=W(n),a=`/${i}`,[s,r]=o.useState(null),[x,p]=o.useState(t),[m,u]=o.useState("fit"),[j,I]=o.useState(null),w=o.useRef(null),[y,N]=o.useState({w:320,h:240}),f=x??t,g=f?s?.frames.find(c=>c.name===f)??null:null;o.useEffect(()=>{p(t),u("fit")},[t]),o.useEffect(()=>{if(!t){r(null);return}let c=!1;return fetch(`/${H(i)}`).then(d=>d.ok?d.text():null).then(d=>{c||!d||r(B(d))}).catch(()=>{c||r(null)}),()=>{c=!0}},[t,i]),o.useEffect(()=>{const c=w.current;if(!c)return;const d=new ResizeObserver(R=>{const S=R[0]?.contentRect;S&&N({w:Math.max(1,S.width-24),h:Math.max(1,S.height-24)})});return d.observe(c),()=>d.disconnect()},[]);const b=g?.sourceWidth??j?.w??0,$=g?.sourceHeight??j?.h??0,k=M(m,b,$,y.w,y.h),E=l??f??i.split("/").pop()??n;return e.jsxs("div",{"data-testid":"image-asset-document",style:{height:"100%",minHeight:240,display:"flex",flexDirection:"column",minWidth:0},children:[e.jsx(z,{title:E,srcWidth:b,srcHeight:$,scaleMode:m,scale:k,onScaleMode:u}),e.jsx(C,{stageRef:w,frameName:t,frame:g,sheet:s,sheetUrl:a,title:E,scale:k,onNatural:I}),s&&s.frames.length>1?e.jsx(O,{sheetUrl:a,frames:s.frames,activeName:f,onPick:p}):null]})}function z({title:n,srcWidth:l,srcHeight:i,scaleMode:t,scale:a,onScaleMode:s}){return e.jsxs("div",{style:{display:"flex",flexWrap:"wrap",alignItems:"center",gap:6,padding:"6px 8px"},children:[e.jsx(v,{tone:"dim",variant:"label",children:n}),l>0&&e.jsxs(v,{tone:"muted",variant:"code",children:[l," × ",i,t==="fit"?` · ${T(a)}`:""]}),e.jsx("span",{style:{flex:1}}),[1,4,8,"fit"].map(r=>e.jsx(P,{type:"button",size:"compact",shape:"segment","aria-pressed":t===r,variant:t===r?"primary":"secondary",onClick:()=>s(r),children:r==="fit"?"Fit":`${r}×`},String(r)))]})}function C({stageRef:n,frameName:l,frame:i,sheet:t,sheetUrl:a,title:s,scale:r,onNatural:x}){let p;return l&&!i?p=e.jsx(v,{tone:"muted",variant:"body",children:t?`No sprite named ${l}`:"Loading sprite…"}):i?p=e.jsx(F,{sheetUrl:a,frame:i,scale:r}):p=e.jsx("img",{src:a,alt:s,style:{imageRendering:"pixelated",display:"block",transform:`scale(${r})`,transformOrigin:"center center"},onLoad:m=>{const u=m.currentTarget;x({w:u.naturalWidth,h:u.naturalHeight})}}),e.jsx("div",{ref:n,className:"volter-asset-transparency-well","data-testid":"sprite-stage",style:{flex:1,minHeight:0,display:"flex",alignItems:"center",justifyContent:"center",overflow:"auto"},children:p})}function O({sheetUrl:n,frames:l,activeName:i,onPick:t}){return e.jsx("div",{"data-testid":"sprite-filmstrip",style:{display:"flex",gap:6,overflowX:"auto",padding:"8px 8px 10px",borderTop:`1px solid ${h[3]}`},children:l.map(a=>{const s=a.name===i;return e.jsxs("button",{type:"button",title:a.name,"aria-pressed":s,onClick:()=>t(a.name),style:{border:s?`1px solid ${h[1]}`:"1px solid transparent",background:"transparent",padding:2,cursor:"pointer",flex:"0 0 auto"},children:[e.jsx(F,{sheetUrl:n,frame:a,maxEdge:40}),e.jsx("div",{style:{fontSize:9,color:s?h[1]:h[3],maxWidth:56,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:a.name})]},a.name)})})}function T(n){return n>=1?`${n}×`:`1/${Math.round(1/n)}×`}export{q as ImageViewer};
@@ -1 +1 @@
1
- import{a as i}from"./jsx-runtime-DPjLkJKQ.js";import{r as o}from"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";function f({capture:r,previewKey:s,size:l}){const[n,e]=o.useState(null);return o.useEffect(()=>{let t=!1;return e(null),r(l).then(a=>{t||e(a)},()=>{t||e(null)}),()=>{t=!0}},[r,s,l]),n?i.jsx("img",{src:n,alt:"Selected object preview",className:"vgai-component-thumbnail"}):null}export{f as InspectorCanvasPreview};
1
+ import{a as i}from"./jsx-runtime-DPjLkJKQ.js";import{r as o}from"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";function f({capture:r,previewKey:s,size:l}){const[n,e]=o.useState(null);return o.useEffect(()=>{let t=!1;return e(null),r(l).then(a=>{t||e(a)},()=>{t||e(null)}),()=>{t=!0}},[r,s,l]),n?i.jsx("img",{src:n,alt:"Selected object preview",className:"volter-component-thumbnail"}):null}export{f as InspectorCanvasPreview};
@@ -0,0 +1 @@
1
+ import{a as t}from"./jsx-runtime-DPjLkJKQ.js";import{Object3DSnapshotDocument as m}from"./EntityModelDocument-B_4ENTCq.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./editor-shell-store-DHVWS8cE.js";import"./output-pass-HurwNl0G.js";import"./three.module-BLhyNg0e.js";import"./three.core-3arARmh6.js";import"./Pass-D1MRT672.js";import"./editor-layers-D-CTUqco.js";import"./workspace-arrangement-DqG5sUns.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"./user-data-C84W0V47.js";import"./entity-object-MKYemTFM.js";import"./three-contract-Dkt6PmWY.js";import"./live-mixers-B-bwLZ7c.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"./environment-Dg-YaLsA.js";import"./RoomEnvironment-BkknvS_I.js";import"./EXRLoader-CITMBvGd.js";import"./HDRLoader-BTGuGhVo.js";import"./bitmap-label-Ct4k6ehY.js";import"./StageHost-DYfGYwvq.js";import"./three-state-BCACvUtm.js";import"./standard-viewport-dressing-BW-dM_1h.js";import"./content-bounds-DROIchTa.js";import"./preview-renderer-BrYNFV1p.js";import"./live-gesture-lock-DJbrjOqf.js";import"./model-inspection-DvspbmJl.js";import"./three-viewport-presentation-CBzvc2v2.js";import"./clip-planes-CnAI6DZn.js";import"./three-DiL6vMXq.js";import"./component-instance-root-DLI40MiB.js";import"./viewport-editor-controls-BYaAZ_Ku.js";import"./model-thumbnail-BmQs-h6t.js";import"./OrbitControls-B13MKuwC.js";import"./LineSegments2-DN9pUfWA.js";import"./three.quarks.esm-C_HmSKXo.js";import"./three-integration-DXOFI88n.js";import"./host-hierarchy-objects-BV3WqU2w.js";import"./layered-pick-CAVQMPI7.js";import"./root-stacking-BEd9ZvxC.js";import"./object3d-document-session-registry-CMRJdFp6.js";import"./viewport-door-BARIpMu-.js";import"./scene-framing-DkZKDwH3.js";import"./source-object3d-authoring-adapter-CvmFpSUj.js";import"./three-projection-core-B7Lf8tOp.js";import"./editor-presentation-activity-CqJH4G9t.js";import"./transport-strip-xCg94CuI.js";import"./viewport-surface-status-TUfhXKR9.js";function ut({previewKey:o,object:r,displayName:i,fill:p=!1}){return t.jsx("div",{"data-testid":"inspector-object-preview",style:p?{position:"absolute",inset:0,overflow:"hidden"}:{width:"100%",height:220,minHeight:220,borderBottom:"1px solid var(--volter-structural-divider)",overflow:"hidden",position:"relative"},children:t.jsx(m,{documentId:`inspector-preview:${o}`,source:r,displayName:i,active:!0,chromeless:!0})})}export{ut as InspectorObjectPreview};
@@ -0,0 +1,2 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-DgapqSPi.js","assets/index-BP6wv2A0.js","assets/index-CJbYy-CF.js","assets/index-CanA16PU.js","assets/index-Bge9JUr6.js","assets/index-gHZae-lw.js","assets/index-BncK9THk.js","assets/index-IEjydI9d.js","assets/index-DUqP1RMl.js"])))=>i.map(i=>d[i]);
2
+ import{a}from"./jsx-runtime-DPjLkJKQ.js";import{r as m}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{af as t,_ as b,h5 as z,aT as F,h6 as M,b4 as J}from"./index-C5ZAyrKq.js";const P={ts:"typescript",tsx:"typescript",mts:"typescript",cts:"typescript",js:"typescript",jsx:"typescript",mjs:"typescript",cjs:"typescript",json:"json",jsonc:"json",json5:"json"};function re(e){const o=e.split("/").pop()??e,n=o.lastIndexOf(".");return n<0?"text":P[o.slice(n+1).toLowerCase()]??"text"}let T=null;function W(){return T??=Promise.all([b(()=>import("./index-BP6wv2A0.js"),[]),b(()=>import("./index-DgapqSPi.js").then(e=>e.i),__vite__mapDeps([0,1])),b(()=>import("./index-CJbYy-CF.js").then(e=>e.w),__vite__mapDeps([2,1,0])),b(()=>import("./index-CanA16PU.js"),__vite__mapDeps([3,0,1])),b(()=>import("./index-Bge9JUr6.js"),__vite__mapDeps([4,1,0,2])),b(()=>import("./index-gHZae-lw.js"),__vite__mapDeps([5,6,2,1,0])),b(()=>import("./index-IEjydI9d.js"),__vite__mapDeps([7,6,2,1,0])),b(()=>import("./index-DUqP1RMl.js"),__vite__mapDeps([8,0,1,2]))]).then(([e,o,n,r,c,s,l,d])=>({state:e,view:o,language:n,search:r,commands:c,javascript:s,json:l,oneDark:d})),T}function S(e){return typeof e=="number"?`${e}px`:e}function R(e){return typeof e=="string"&&e.trim().endsWith("%")}function G(e,o){let n=0;for(;n<e.length&&n<o.length&&e[n]===o[n];)n++;let r=e.length,c=o.length;for(;r>n&&c>n&&e[r-1]===o[c-1];)r--,c--;return{from:n,oldEnd:r,newEnd:c}}const L=1800,k=`color-mix(in srgb, ${t.semantic.warning} 42%, transparent)`,C=`color-mix(in srgb, ${t.semantic.warning} 18%, transparent)`;function U(e){class o extends e.view.WidgetType{constructor(s){super(),this.revision=s}eq(s){return this.revision===s.revision}toDOM(){const s=document.createElement("span");return s.className=`cm-source-deletion cm-source-change cm-source-change-${this.revision%2}`,s.setAttribute("aria-hidden","true"),s}}const n=e.state.StateEffect.define(),r=e.state.StateField.define({create:()=>e.view.Decoration.none,update(c,s){let l=c.map(s.changes);for(const d of s.effects){if(!d.is(n))continue;if(!d.value){l=e.view.Decoration.none;continue}const{from:f,to:i,revision:y}=d.value,g=f===i?e.view.Decoration.widget({widget:new o(y),side:-1}).range(f):e.view.Decoration.mark({class:`cm-source-change cm-source-change-${y%2}`}).range(f,i);l=e.view.Decoration.set([g])}return l},provide:c=>e.view.EditorView.decorations.from(c)});return{mark:n,field:r}}function K(e,o,n){return e.view.EditorView.theme({"&":{color:t.content.primary,backgroundColor:"transparent",fontSize:`${o}px`,...R(n)?{height:S(n)}:{}},"&.cm-focused":{outline:"none"},".cm-content":{fontFamily:t.typography.mono,padding:"2px 0",caretColor:"transparent"},".cm-scroller":{fontFamily:t.typography.mono,lineHeight:"1.5",overflow:"auto",...n===void 0?{}:{maxHeight:S(n)}},".cm-gutters":{backgroundColor:"transparent",color:t.content.dim,border:"none",userSelect:"none"},".cm-lineNumbers .cm-gutterElement":{padding:"0 8px 0 4px",minWidth:"2ch"},".cm-content ::selection":{backgroundColor:t.selection.background},".cm-panels":{backgroundColor:t.surface.raised,color:t.content.primary,border:"none",fontFamily:t.typography.sans},".cm-panels.cm-panels-top":{borderBottom:`1px solid ${t.boundary.default}`},".cm-textfield":{backgroundColor:t.surface.inset,color:t.content.primary,border:`1px solid ${t.boundary.default}`,borderRadius:t.shape.small},".cm-button":{backgroundColor:t.surface.raised,backgroundImage:"none",color:t.content.primary,border:`1px solid ${t.boundary.default}`,borderRadius:t.shape.small},".cm-searchMatch":{backgroundColor:t.accent.muted},".cm-searchMatch.cm-searchMatch-selected":{backgroundColor:t.accent.default,color:t.content.onAccent},".cm-source-change":{backgroundColor:k,borderRadius:"2px"},".cm-line:has(.cm-source-change)":{backgroundColor:C},".cm-source-change, .cm-line:has(.cm-source-change)":{animationDuration:`${L}ms`,animationTimingFunction:"ease-out",animationFillMode:"forwards"},".cm-source-deletion":{display:"inline-block",width:"0",position:"relative"},".cm-source-deletion::after":{content:'""',position:"absolute",left:"-2px",bottom:"0",width:"4px",height:"1em",backgroundColor:"inherit",borderRadius:"2px"},".cm-source-change-0":{animationName:"volter-source-change-even"},".cm-source-change-1":{animationName:"volter-source-change-odd"},".cm-line:has(.cm-source-change-0)":{animationName:"volter-source-line-even"},".cm-line:has(.cm-source-change-1)":{animationName:"volter-source-line-odd"},"@keyframes volter-source-line-even":{"0%, 40%":{backgroundColor:C},"100%":{backgroundColor:"transparent"}},"@keyframes volter-source-line-odd":{"0%, 40%":{backgroundColor:C},"100%":{backgroundColor:"transparent"}},"@keyframes volter-source-change-even":{"0%, 40%":{backgroundColor:k},"100%":{backgroundColor:"transparent"}},"@keyframes volter-source-change-odd":{"0%, 40%":{backgroundColor:k},"100%":{backgroundColor:"transparent"}},"@media (prefers-reduced-motion: reduce)":{".cm-source-change, .cm-line:has(.cm-source-change)":{animation:"none"}},".cm-matchingBracket, &.cm-focused .cm-matchingBracket":{backgroundColor:t.neutralOverlay.active,outline:`1px solid ${t.boundary.strong}`}},{dark:!0})}function H(e,o,n,r){const c=o==="typescript"?[e.javascript.javascript({typescript:!0,jsx:!0})]:o==="json"?[e.json.json()]:[];return[e.view.lineNumbers(),e.view.highlightSpecialChars(),e.language.bracketMatching(),e.language.syntaxHighlighting(e.oneDark.oneDarkHighlightStyle),e.search.search({top:!0}),e.view.keymap.of([...e.commands.standardKeymap,...e.search.searchKeymap]),e.view.EditorView.lineWrapping,e.state.EditorState.readOnly.of(!0),e.view.EditorView.editable.of(!1),e.view.EditorView.contentAttributes.of({tabindex:"0"}),...c,K(e,n,r)]}function q({value:e,language:o,fontSize:n=11,maxHeight:r,ariaLabel:c,followChanges:s=!1}){const l=m.useRef(null),d=m.useRef(null),f=m.useRef(null),i=m.useRef(null),y=m.useRef(0),g=m.useRef(e);g.current=e;const[p,I]=m.useState(null),[N,$]=m.useState(!1);m.useEffect(()=>{let u=!1;return W().then(h=>{u||I(h)},()=>{u||$(!0)}),()=>{u=!0}},[]),m.useEffect(()=>{const u=l.current;if(!u||!p)return;const h=U(p),w=new p.view.EditorView({parent:u,state:p.state.EditorState.create({doc:g.current,extensions:[H(p,o,n,r),h.field]})});return d.current=w,f.current=h,()=>{i.current!==null&&clearTimeout(i.current),i.current=null,f.current=null,d.current=null,w.destroy()}},[p,o,n,r]),m.useEffect(()=>{const u=d.current;if(!u)return;const h=u.state.toText(e).toString(),w=u.state.doc.toString();if(w===h)return;const{from:x,oldEnd:B,newEnd:D}=G(w,h),O=u.state.changes({from:x,to:B,insert:h.slice(x,D)}),v=f.current,E=[];if(s&&p&&v){const _=u.coordsAtPos(x),j=u.scrollDOM.getBoundingClientRect(),A=_&&_.top>=j.top&&_.bottom<=j.bottom&&_.left>=j.left&&_.right<=j.right?u.scrollSnapshot().map(O):p.view.EditorView.scrollIntoView(x,{y:"nearest",x:"nearest"});A&&E.push(A),E.push(v.mark.of({from:x,to:D,revision:++y.current}))}else v&&E.push(v.mark.of(null));u.dispatch({changes:O,effects:E}),i.current!==null&&clearTimeout(i.current),i.current=null,s&&v&&(i.current=setTimeout(()=>{d.current===u&&u.dispatch({effects:v.mark.of(null)}),i.current=null},L))},[e,s,p]);const V=R(r)?{height:"100%",minHeight:0}:{};return p?a.jsx("div",{ref:l,role:"group","aria-label":c,style:{minWidth:0,...V}}):a.jsxs("div",{role:"group","aria-label":c,style:{minWidth:0,...V},children:[N&&a.jsx("div",{style:{color:t.semantic.warning,fontSize:10,marginBottom:4},children:"Syntax highlighting failed to load — showing plain text."}),a.jsx("pre",{style:{margin:0,fontFamily:t.typography.mono,fontSize:n,lineHeight:1.5,color:t.content.primary,whiteSpace:"pre-wrap",wordBreak:"break-word",overflow:"auto",...r===void 0?{}:{maxHeight:S(r)},...R(r)?{height:S(r)}:{}},children:e})]})}const X={fontSize:11,color:t.content.muted,marginBottom:2};function Y({assetPath:e}){const[o,n]=m.useState(null),[r,c]=m.useState("json"),[s,l]=m.useState(!1),d=e.split("/").pop()??e;return m.useEffect(()=>{let f=!1;return n(null),l(!1),fetch(z(e)).then(i=>i.text()).then(i=>{try{const y=JSON.parse(i);f||(c("json"),n(JSON.stringify(y,null,2)))}catch{f||(c("text"),n(i))}}).catch(()=>{f||l(!0)}),()=>{f=!0}},[e]),a.jsxs("div",{style:{padding:8,display:"flex",flexDirection:"column",gap:8},children:[a.jsx("div",{style:{fontWeight:600,fontSize:12,color:t.content.primary,wordBreak:"break-all"},children:d}),a.jsx("div",{className:"volter-content-frost",style:{border:`1px solid ${t.boundary.default}`,borderRadius:t.shape.small,padding:8,overflow:"hidden",maxHeight:500},children:s?a.jsx("span",{style:{color:t.semantic.danger,fontSize:11},children:"Failed to load file"}):o===null?a.jsx("span",{style:{color:t.content.muted,fontSize:11},children:"Loading..."}):a.jsx(q,{value:o,language:r,fontSize:10,maxHeight:484,ariaLabel:`Contents of ${d}`})}),a.jsx(F,{label:"Info",defaultOpen:!1,children:a.jsxs("div",{children:[a.jsx("div",{style:X,children:"Path"}),a.jsx("div",{style:{fontSize:11,color:t.content.primary,wordBreak:"break-all"},children:e})]})})]})}function Q({documentId:e,assetPath:o,displayName:n,active:r,sections:c,status:s}){const[l,d]=m.useState({kind:"loading"}),f=M();if(m.useEffect(()=>{if(!r){d({kind:"loading"});return}const i=new AbortController;return d({kind:"loading"}),(async()=>{for(const g of f){const p=await g.recognize(o,i.signal);if(p!==null)return{kind:"content",viewer:g,content:p}}return{kind:"generic"}})().then(g=>{i.signal.aborted||d(g)},g=>{i.signal.aborted||d({kind:"error",message:g instanceof Error?g.message:String(g)})}),()=>i.abort()},[r,o,f]),l.kind==="content"){const{Viewer:i}=l.viewer;return a.jsx(i,{documentId:e,assetPath:o,displayName:n,active:r,content:l.content})}return a.jsx(J,{documentId:e,active:r,type:"json",title:n,sections:c,status:s,children:l.kind==="loading"?a.jsxs("div",{style:{padding:20,color:t.content.muted},children:["Inspecting ",n,"…"]}):l.kind==="error"?a.jsx("div",{role:"alert",style:{padding:20,color:t.semantic.danger},children:l.message}):a.jsx(Y,{assetPath:o})})}const ie=Object.freeze(Object.defineProperty({__proto__:null,JsonAssetDocument:Q},Symbol.toStringTag,{value:"Module"}));export{q as C,Q as J,ie as a,re as c};
@@ -1 +1 @@
1
- import{a as i}from"./jsx-runtime-DPjLkJKQ.js";import{g4 as V,ad as g,b5 as P,g5 as U,g6 as G,M as J,g7 as K,g8 as Q}from"./index-BRJMIUK0.js";import{r as f}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{d as S}from"./asset-preview-B1tDziF1.js";import{r as X,a as Y}from"./object3d-document-session-registry-DJDEDM0p.js";import{O as Z}from"./Object3DDocumentViewport-DCwiSY3O.js";import{S as ee}from"./standard-viewport-dressing-BCA51Tum.js";import{bh as te,I as re}from"./three.core-3arARmh6.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";import"./editor-layers-BDJnAAzj.js";import"./workspace-arrangement-BdAlBwvd.js";import"./renderer-ownership-BovSEcLv.js";import"./hierarchy-marks-Cc_3lxw6.js";import"./studio-environment-DRxxq_QX.js";import"./user-data-Bpj7diUS.js";import"./KTX2Loader-CaqVE6nY.js";import"./three.module-BLhyNg0e.js";import"./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"./viewport-surface-status-cwCiBGa7.js";import"./content-bounds-BeuIXKYu.js";class v extends Error{constructor(t){super(t.message),this.refusal=t,this.name="LiveModuleError"}}function oe(e){return Object.keys(e).filter(t=>t!=="__esModule"&&t!=="Symbol.toStringTag")}function T(e){return typeof e=="object"&&e!==null&&e.isObject3D===!0}function ie(e){if("default"in e)return{name:"default",value:e.default};const t=oe(e);return t.length===0?{kind:"not-a-model",message:"This module exports nothing."}:t.length>1?{kind:"not-a-model",message:`This module has no default export and ${t.length} named exports (${t.join(", ")}), so there is no single subject to build. A model module default-exports its builder.`}:{name:t[0],value:e[t[0]]}}function $(e){if(T(e))return{root:e};if(!e||typeof e!="object")return;const t=e;if(!T(t.root))return;const r=t.root;return Array.isArray(t.animations)&&r.animations.length===0&&(r.animations=t.animations),{root:r,...typeof t.dispose=="function"?{dispose:()=>t.dispose.call(e)}:{}}}function L(e){if(e===void 0)return"undefined";if(e===null)return"null";if(typeof e!="object")return typeof e;if(Array.isArray(e))return"an array";const t=Object.keys(e);return t.length>0?`an object with keys ${t.slice(0,8).join(", ")}`:"an object with no own keys"}const R="a model module returns a THREE.Object3D, or a build result `{ root, animations?, dispose? }` whose `root` is one.";async function ne(e,t){const r=$(t);if(r)return{...r,exportName:e};if(typeof t!="function")return{kind:"not-a-model",message:`Export '${e}' is ${L(t)}, not a function and not a model — `+R};let l;try{l=await t()}catch(n){return{kind:"import-failed",message:`Export '${e}' threw while building: ${H(n)}`,...n instanceof Error&&n.stack?{stack:n.stack}:{}}}const c=$(l);return c?{...c,exportName:e}:{kind:"not-a-model",message:`Export '${e}' ran but returned ${L(l)} — ${R}`}}function H(e){return e instanceof Error?e.message:String(e)}async function se(e,t,r){let l;try{l=await import(V(e,t,r))}catch(u){throw new v({kind:"import-failed",message:H(u),...u instanceof Error&&u.stack?{stack:u.stack}:{}})}const c=ie(l);if("kind"in c)throw new v(c);const n=await ne(c.name,c.value);if("kind"in n)throw new v(n);return n}const C={height:"100%",width:"100%",minHeight:0,display:"flex",position:"relative"},F={flex:1,minWidth:0,minHeight:0,display:"flex"};function ae(e,t){if(e.kind!=="import-failed")return{message:e.message};const r=Q(t);return r?{message:r,stack:e.message}:{message:e.message,stack:e.stack}}function Be({documentId:e,projectRoot:t,modulePath:r,displayName:l,active:c,fallback:n}){const[u,w]=f.useState({status:"probing"}),[b,E]=f.useState(null),d=f.useMemo(()=>{const s=new te;return s.name=r.split("/").pop()??r,s},[r]),D=f.useRef(!1);f.useEffect(()=>{let s=!1,y=0,m=null,p=Promise.resolve(),x=null,k=null;const M=()=>{m&&(d.remove(m),d.animations=[],k?k():S(m),m=null,k=null)},B=(o,h)=>{M(),m=o,k=h,d.add(o),d.animations=o.animations,K(e)},I=(o,h)=>{if(o.kind==="not-a-model"&&!h){w({status:"fallback",reason:o.message});return}const a=ae(o,r);E(a),J.error(`${r}: ${a.message}`,"live-module"),h||w({status:"fallback",reason:o.message})},A=o=>s||o!==y,W=async()=>{y+=1;const o=y,h=G();let a;try{a=await se(t,r,h)}catch(j){if(A(o))return;if(!(j instanceof v))throw j;x=j,I(j.refusal,m!==null);return}if(A(o)){a.dispose?a.dispose():S(a.root);return}B(a.root,a.dispose??null),x=null,U(r),E(null),w({status:"live",exportName:a.exportName})},O=()=>(p=W(),p),q=X(e,async()=>{let o=O();for(;;){if(await o,s)throw new Error(`Document closed while rebuilding: ${r}`);if(o===p)break;o=p}if(x)throw x});O();const z=P();return()=>{s=!0,q(),z(),M()}},[d,e,r,t]),f.useEffect(()=>{if(u.status!=="live"||D.current)return;let s=0,y=0;const m=()=>{const p=Y(e);if(p){D.current=!0,new re().setFromObject(d).isEmpty()||p.frame();return}++y>60||(s=requestAnimationFrame(m))};return s=requestAnimationFrame(m),()=>cancelAnimationFrame(s)},[d,e,u.status]);const _=f.useCallback(()=>({root:d,dispose(){}}),[d]);return u.status==="probing"?i.jsxs("div",{style:{padding:20,color:g.content.muted},children:["Inspecting ",l,"…"]}):u.status==="fallback"?i.jsxs("div",{style:C,children:[b?i.jsx(N,{failure:b}):null,i.jsx("div",{style:{...F,overflow:"auto"},children:n})]}):i.jsxs("div",{style:C,children:[i.jsx("div",{style:{...F,opacity:b?.35:1},children:i.jsx(Z,{documentId:e,sourcePath:r,displayName:l,build:_,active:c,assetType:"model module",cameraDirection:ee,modelSource:{kind:"project-file",path:r}})}),b?i.jsx(N,{failure:b}):null]})}function N({failure:e}){return i.jsxs("div",{role:"alert","data-testid":"live-module-error",style:{position:"absolute",top:8,left:8,right:8,zIndex:2,maxHeight:"60%",overflow:"auto",padding:"8px 10px",borderRadius:g.shape.small,background:g.surface.raised,border:`1px solid ${g.semantic.danger}`,color:g.semantic.danger,fontFamily:g.typography.mono,fontSize:11,lineHeight:1.5,whiteSpace:"pre-wrap",wordBreak:"break-word",pointerEvents:"auto"},children:[i.jsx("div",{style:{fontWeight:600},children:"This module did not build — showing the last good model."}),i.jsx("div",{style:{marginTop:4},children:e.message}),e.stack?i.jsx("div",{style:{marginTop:6,color:g.content.muted},children:e.stack}):null]})}export{Be as LiveModuleDocument};
1
+ import{a as i}from"./jsx-runtime-DPjLkJKQ.js";import{gd as V,af as g,b7 as P,ge as U,gf as G,O as J,gg as K,gh as Q}from"./index-C5ZAyrKq.js";import{r as f}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{d as S}from"./asset-preview-DxlSdRZn.js";import{r as X,a as Y}from"./object3d-document-session-registry-CMRJdFp6.js";import{O as Z}from"./Object3DDocumentViewport-D6QoHfa_.js";import{S as ee}from"./standard-viewport-dressing-BW-dM_1h.js";import{bh as te,I as re}from"./three.core-3arARmh6.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";import"./editor-layers-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"./three.module-BLhyNg0e.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"./viewport-surface-status-TUfhXKR9.js";import"./content-bounds-DROIchTa.js";class v extends Error{constructor(t){super(t.message),this.refusal=t,this.name="LiveModuleError"}}function oe(e){return Object.keys(e).filter(t=>t!=="__esModule"&&t!=="Symbol.toStringTag")}function T(e){return typeof e=="object"&&e!==null&&e.isObject3D===!0}function ie(e){if("default"in e)return{name:"default",value:e.default};const t=oe(e);return t.length===0?{kind:"not-a-model",message:"This module exports nothing."}:t.length>1?{kind:"not-a-model",message:`This module has no default export and ${t.length} named exports (${t.join(", ")}), so there is no single subject to build. A model module default-exports its builder.`}:{name:t[0],value:e[t[0]]}}function $(e){if(T(e))return{root:e};if(!e||typeof e!="object")return;const t=e;if(!T(t.root))return;const r=t.root;return Array.isArray(t.animations)&&r.animations.length===0&&(r.animations=t.animations),{root:r,...typeof t.dispose=="function"?{dispose:()=>t.dispose.call(e)}:{}}}function L(e){if(e===void 0)return"undefined";if(e===null)return"null";if(typeof e!="object")return typeof e;if(Array.isArray(e))return"an array";const t=Object.keys(e);return t.length>0?`an object with keys ${t.slice(0,8).join(", ")}`:"an object with no own keys"}const R="a model module returns a THREE.Object3D, or a build result `{ root, animations?, dispose? }` whose `root` is one.";async function ne(e,t){const r=$(t);if(r)return{...r,exportName:e};if(typeof t!="function")return{kind:"not-a-model",message:`Export '${e}' is ${L(t)}, not a function and not a model — `+R};let l;try{l=await t()}catch(n){return{kind:"import-failed",message:`Export '${e}' threw while building: ${H(n)}`,...n instanceof Error&&n.stack?{stack:n.stack}:{}}}const c=$(l);return c?{...c,exportName:e}:{kind:"not-a-model",message:`Export '${e}' ran but returned ${L(l)} — ${R}`}}function H(e){return e instanceof Error?e.message:String(e)}async function se(e,t,r){let l;try{l=await import(V(e,t,r))}catch(u){throw new v({kind:"import-failed",message:H(u),...u instanceof Error&&u.stack?{stack:u.stack}:{}})}const c=ie(l);if("kind"in c)throw new v(c);const n=await ne(c.name,c.value);if("kind"in n)throw new v(n);return n}const C={height:"100%",width:"100%",minHeight:0,display:"flex",position:"relative"},F={flex:1,minWidth:0,minHeight:0,display:"flex"};function ae(e,t){if(e.kind!=="import-failed")return{message:e.message};const r=Q(t);return r?{message:r,stack:e.message}:{message:e.message,stack:e.stack}}function Be({documentId:e,projectRoot:t,modulePath:r,displayName:l,active:c,fallback:n}){const[u,w]=f.useState({status:"probing"}),[b,E]=f.useState(null),d=f.useMemo(()=>{const s=new te;return s.name=r.split("/").pop()??r,s},[r]),D=f.useRef(!1);f.useEffect(()=>{let s=!1,y=0,m=null,p=Promise.resolve(),x=null,k=null;const M=()=>{m&&(d.remove(m),d.animations=[],k?k():S(m),m=null,k=null)},B=(o,h)=>{M(),m=o,k=h,d.add(o),d.animations=o.animations,K(e)},I=(o,h)=>{if(o.kind==="not-a-model"&&!h){w({status:"fallback",reason:o.message});return}const a=ae(o,r);E(a),J.error(`${r}: ${a.message}`,"live-module"),h||w({status:"fallback",reason:o.message})},O=o=>s||o!==y,W=async()=>{y+=1;const o=y,h=G();let a;try{a=await se(t,r,h)}catch(j){if(O(o))return;if(!(j instanceof v))throw j;x=j,I(j.refusal,m!==null);return}if(O(o)){a.dispose?a.dispose():S(a.root);return}B(a.root,a.dispose??null),x=null,U(r),E(null),w({status:"live",exportName:a.exportName})},A=()=>(p=W(),p),q=X(e,async()=>{let o=A();for(;;){if(await o,s)throw new Error(`Document closed while rebuilding: ${r}`);if(o===p)break;o=p}if(x)throw x});A();const z=P();return()=>{s=!0,q(),z(),M()}},[d,e,r,t]),f.useEffect(()=>{if(u.status!=="live"||D.current)return;let s=0,y=0;const m=()=>{const p=Y(e);if(p){D.current=!0,new re().setFromObject(d).isEmpty()||p.frame();return}++y>60||(s=requestAnimationFrame(m))};return s=requestAnimationFrame(m),()=>cancelAnimationFrame(s)},[d,e,u.status]);const _=f.useCallback(()=>({root:d,dispose(){}}),[d]);return u.status==="probing"?i.jsxs("div",{style:{padding:20,color:g.content.muted},children:["Inspecting ",l,"…"]}):u.status==="fallback"?i.jsxs("div",{style:C,children:[b?i.jsx(N,{failure:b}):null,i.jsx("div",{style:{...F,overflow:"auto"},children:n})]}):i.jsxs("div",{style:C,children:[i.jsx("div",{style:{...F,opacity:b?.35:1},children:i.jsx(Z,{documentId:e,sourcePath:r,displayName:l,build:_,active:c,assetType:"model module",cameraDirection:ee,modelSource:{kind:"project-file",path:r}})}),b?i.jsx(N,{failure:b}):null]})}function N({failure:e}){return i.jsxs("div",{role:"alert","data-testid":"live-module-error",style:{position:"absolute",top:8,left:8,right:8,zIndex:2,maxHeight:"60%",overflow:"auto",padding:"8px 10px",borderRadius:g.shape.small,background:g.surface.raised,border:`1px solid ${g.semantic.danger}`,color:g.semantic.danger,fontFamily:g.typography.mono,fontSize:11,lineHeight:1.5,whiteSpace:"pre-wrap",wordBreak:"break-word",pointerEvents:"auto"},children:[i.jsx("div",{style:{fontWeight:600},children:"This module did not build — showing the last good model."}),i.jsx("div",{style:{marginTop:4},children:e.message}),e.stack?i.jsx("div",{style:{marginTop:6,color:g.content.muted},children:e.stack}):null]})}export{Be as LiveModuleDocument};
@@ -1 +1 @@
1
- import{a as i}from"./jsx-runtime-DPjLkJKQ.js";import{dF as U,g2 as A,dH as N,dI as I,ad as y,b2 as M,cf as k,dJ as C,aP as F}from"./index-BRJMIUK0.js";import{r as w}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{EffectComposer as P,LUT3DEffect as _,RenderPass as B,EffectPass as O}from"./index-DHhMOs_s.js";import{W as $}from"./three.module-BLhyNg0e.js";import{ca as G,ff as T,aZ as H,fo as L,as as V,c1 as R,Y as j,ej as W,A as Z,el as q,_ as D,d9 as X,bj as J,aE as K,cx as v,ey as Y,K as Q,db as ee,co as te}from"./three.core-3arARmh6.js";import{s as re}from"./asset-editor-persistence-BGWIqZdk.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";class ne extends G{constructor(t){super(t),this.type=T}setType(t){return this.type=t,this}load(t,a,f,g){const n=new H(this.manager);n.setPath(this.path),n.setResponseType("text"),n.load(t,c=>{try{a(this.parse(c))}catch(e){g?g(e):console.error(e),this.manager.itemError(t)}},f,g)}parse(t){const a=/TITLE +"([^"]*)"/,f=/LUT_3D_SIZE +(\d+)/,g=/DOMAIN_MIN +([\d.]+) +([\d.]+) +([\d.]+)/,n=/DOMAIN_MAX +([\d.]+) +([\d.]+) +([\d.]+)/,c=/^([\d.e+-]+) +([\d.e+-]+) +([\d.e+-]+) *$/gm;let e=a.exec(t);const p=e!==null?e[1]:null;if(e=f.exec(t),e===null)throw new Error("LUTCubeLoader: Missing LUT_3D_SIZE information");const s=Number(e[1]),u=s**3*4,o=this.type===T?new Uint8Array(u):new Float32Array(u),d=new L(0,0,0),m=new L(1,1,1);if(e=g.exec(t),e!==null&&d.set(Number(e[1]),Number(e[2]),Number(e[3])),e=n.exec(t),e!==null&&m.set(Number(e[1]),Number(e[2]),Number(e[3])),d.x>m.x||d.y>m.y||d.z>m.z)throw new Error("LUTCubeLoader: Invalid input domain");const x=this.type===T?255:1;let h=0;for(;(e=c.exec(t))!==null;)o[h++]=Number(e[1])*x,o[h++]=Number(e[2])*x,o[h++]=Number(e[3])*x,o[h++]=x;const l=new V;return l.image.data=o,l.image.width=s,l.image.height=s,l.image.depth=s,l.type=this.type,l.magFilter=R,l.minFilter=R,l.wrapS=j,l.wrapT=j,l.wrapR=j,l.generateMipmaps=!1,l.needsUpdate=!0,{title:p,size:s,domainMin:d,domainMax:m,texture3D:l}}}function b(r){return r.split("/").pop()??r}function E(r,t,a){return Math.min(a,Math.max(t,r))}function z(r){return[r.x,r.y,r.z].map(t=>t.toFixed(2)).join(", ")}function se(){const r=new q;r.background=new D("#171a22");const t=new X(34,1,.1,100);t.position.set(6.6,4.6,8.8),t.lookAt(0,.7,0),r.add(new J("#dce8ff","#322a27",2.1));const a=new K("#fff3db",3.8);a.position.set(4,7,5),r.add(a);const f=[],g=[],n=(s,u,o)=>{f.push(s),g.push(u);const d=new te(s,u);return d.position.set(...o),d.castShadow=!0,d.receiveShadow=!0,r.add(d),d},c=[["#e64d45",-2.4],["#e5ad42",-1.2],["#55b86a",0],["#47a9d8",1.2],["#8a68d7",2.4]];for(const[s,u]of c)n(new Y(.48,48,32),new v({color:s,roughness:.3,metalness:.08}),[u,.65,0]);[.06,.18,.5,.82,1].forEach((s,u)=>{const o=Math.round(s*255);n(new Q(.78,.78,.78),new v({color:new D(`rgb(${o}, ${o}, ${o})`),roughness:.72}),[-2.4+u*1.2,1.85,-.1])});const p=n(new ee(9,6),new v({color:"#777b86",roughness:.92}),[0,.08,-1.8]);return p.rotation.x=-Math.PI/2,{scene:r,camera:t,dispose:()=>{for(const s of f)s.dispose();for(const s of g)s.dispose()}}}function oe({lut:r,settingsRef:t}){const a=w.useRef(null);return w.useEffect(()=>{const f=a.current;if(!f)return;let g=!1,n=0;const c=document.createElement("canvas");c.setAttribute("aria-label","LUT before and after preview"),c.style.width="100%",c.style.height="100%",c.style.display="block",f.replaceChildren(c);const e=new $({canvas:c,antialias:!0});e.outputColorSpace=W,e.toneMapping=Z,e.toneMappingExposure=1,e.shadowMap.enabled=!0;const p=se(),s=new P(e),u=new _(r.texture3D,{tetrahedralInterpolation:!0});s.addPass(new B(p.scene,p.camera)),s.addPass(new O(p.camera,u));const o={width:1,height:1},d=()=>{const l=t.current,S=Math.round(o.width*E(l.split,.05,.95));u.blendMode.opacity.value=E(l.intensity,0,1),u.tetrahedralInterpolation=l.tetrahedral,e.setScissorTest(!1),e.setRenderTarget(null),e.clear(),e.setScissorTest(!0),e.setScissor(0,0,S,o.height),e.render(p.scene,p.camera),e.setScissor(S,0,o.width-S,o.height),s.render(),e.setScissorTest(!1)},m=()=>{const l=f.getBoundingClientRect();o.width=Math.max(1,Math.floor(l.width)),o.height=Math.max(1,Math.floor(l.height)),e.setPixelRatio(Math.min(window.devicePixelRatio||1,2)),e.setSize(o.width,o.height,!1),s.setSize(o.width,o.height),p.camera.aspect=o.width/o.height,p.camera.updateProjectionMatrix()};m(),d();const x=new ResizeObserver(()=>{m(),d()});x.observe(f);const h=()=>{g||(d(),n=requestAnimationFrame(h))};return n=requestAnimationFrame(h),()=>{g=!0,cancelAnimationFrame(n),x.disconnect(),s.dispose(),u.dispose(),p.dispose(),e.dispose(),c.remove()}},[r,t]),i.jsx("div",{ref:a,"data-testid":"lut-preview",style:{width:"100%",height:"100%",minHeight:260,background:"#171a22"}})}function ie({settings:r,onChange:t}){return i.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:12,padding:4},children:[i.jsxs("label",{style:{display:"flex",flexDirection:"column",gap:5,fontSize:11},children:["Intensity",i.jsx(C,{value:r.intensity,onChange:a=>t({...r,intensity:E(a,0,1)}),step:.01,precision:2})]}),i.jsxs("label",{style:{display:"flex",flexDirection:"column",gap:5,fontSize:11},children:["Comparison split",i.jsx(C,{value:r.split,onChange:a=>t({...r,split:E(a,.05,.95)}),step:.01,precision:2})]}),i.jsxs("label",{style:{display:"flex",alignItems:"center",gap:7,fontSize:11},children:[i.jsx(F,{checked:r.tetrahedral,onChange:a=>t({...r,tetrahedral:a.target.checked})}),"Tetrahedral interpolation"]}),i.jsx("div",{style:{color:y.content.muted,fontSize:10,lineHeight:1.45},children:"Preview controls are session-only. Bind the LUT and accepted intensity in the owning TSX post-processing composition."})]})}async function ae(r){const t=await k(r);if(t===null)throw new Error(`CUBE LUT not found: ${r}`);return new ne().parse(t)}function Ee({documentId:r,assetPath:t,active:a=!0}){const[f,g]=w.useState(0),[n,c]=w.useState(null),[e,p]=w.useState(null),[s,u]=w.useState({intensity:1,split:.5,tetrahedral:!0}),o=w.useRef(s);o.current=s,w.useEffect(()=>{if(a)return re(t,()=>g(m=>m+1))},[a,t]),w.useEffect(()=>{if(!a)return;let m=!1,x=null;return c(null),p(null),ae(t).then(h=>{if(x=h,m){h.texture3D.dispose();return}c(h)},h=>{m||p(h instanceof Error?h.message:String(h))}),()=>{m=!0,x?.texture3D.dispose()}},[a,t,f]);const d=w.useMemo(()=>[{id:"lut-profile",title:"Color Grade",icon:A,order:U,body:{kind:"custom",...n?{data:{title:n.title,size:n.size,domainMin:n.domainMin.toArray(),domainMax:n.domainMax.toArray()}}:{},render:()=>i.jsxs("div",{style:{display:"grid",gridTemplateColumns:"auto 1fr",gap:"6px 10px"},children:[i.jsx("span",{style:{color:y.content.muted},children:"Title"}),i.jsx("span",{children:n?.title||b(t)}),i.jsx("span",{style:{color:y.content.muted},children:"Cube"}),i.jsx("span",{children:n?`${n.size}³`:"—"}),i.jsx("span",{style:{color:y.content.muted},children:"Domain"}),i.jsx("span",{children:n?`${z(n.domainMin)} → ${z(n.domainMax)}`:"—"})]})}},{id:"lut-preview-settings",title:"Preview",icon:I,order:N,body:{kind:"custom",data:{...s},render:()=>i.jsx(ie,{settings:s,onChange:u})}}],[t,n,s]);return e?i.jsx(M,{documentId:r,active:a,type:"color grade",title:b(t),status:"CUBE LUT unavailable",children:i.jsx("div",{role:"alert",style:{padding:20,color:y.semantic.danger},children:e})}):n?i.jsx(M,{documentId:r,active:a,type:"color grade",title:b(t),sections:d,status:`CUBE LUT · ${n.size}³`,fill:!0,children:i.jsxs("div",{style:{position:"relative",width:"100%",height:"100%",minHeight:0,background:"#171a22"},children:[i.jsx(oe,{lut:n,settingsRef:o}),i.jsx("div",{style:{position:"absolute",left:12,top:12,padding:"4px 7px",borderRadius:4,background:"rgba(12,14,20,0.72)",color:"#f2f4f8",fontSize:10,pointerEvents:"none"},children:"Original"}),i.jsx("div",{style:{position:"absolute",right:12,top:12,padding:"4px 7px",borderRadius:4,background:"rgba(12,14,20,0.72)",color:"#f2f4f8",fontSize:10,pointerEvents:"none"},children:n.title||"Graded"})]})}):i.jsx(M,{documentId:r,active:a,type:"color grade",title:b(t),status:"Loading CUBE LUT",children:i.jsx("div",{style:{padding:20,color:y.content.muted},children:"Loading color grade…"})})}export{Ee as LutAssetDocument};
1
+ import{a as i}from"./jsx-runtime-DPjLkJKQ.js";import{du as U,gb as A,dw as N,dx as I,af as y,b4 as M,ch as k,dy as C,aR as F}from"./index-C5ZAyrKq.js";import{r as w}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{EffectComposer as P,LUT3DEffect as _,RenderPass as B,EffectPass as O}from"./index-DHhMOs_s.js";import{W as $}from"./three.module-BLhyNg0e.js";import{ca as G,ff as T,aZ as H,fo as L,as as V,c1 as R,Y as j,ej as W,A as Z,el as q,_ as D,d9 as X,bj as K,aE as Y,cx as v,ey as J,K as Q,db as ee,co as te}from"./three.core-3arARmh6.js";import{s as re}from"./asset-editor-persistence-BIbf5u0Q.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";class ne extends G{constructor(t){super(t),this.type=T}setType(t){return this.type=t,this}load(t,a,f,g){const n=new H(this.manager);n.setPath(this.path),n.setResponseType("text"),n.load(t,c=>{try{a(this.parse(c))}catch(e){g?g(e):console.error(e),this.manager.itemError(t)}},f,g)}parse(t){const a=/TITLE +"([^"]*)"/,f=/LUT_3D_SIZE +(\d+)/,g=/DOMAIN_MIN +([\d.]+) +([\d.]+) +([\d.]+)/,n=/DOMAIN_MAX +([\d.]+) +([\d.]+) +([\d.]+)/,c=/^([\d.e+-]+) +([\d.e+-]+) +([\d.e+-]+) *$/gm;let e=a.exec(t);const p=e!==null?e[1]:null;if(e=f.exec(t),e===null)throw new Error("LUTCubeLoader: Missing LUT_3D_SIZE information");const s=Number(e[1]),u=s**3*4,o=this.type===T?new Uint8Array(u):new Float32Array(u),d=new L(0,0,0),m=new L(1,1,1);if(e=g.exec(t),e!==null&&d.set(Number(e[1]),Number(e[2]),Number(e[3])),e=n.exec(t),e!==null&&m.set(Number(e[1]),Number(e[2]),Number(e[3])),d.x>m.x||d.y>m.y||d.z>m.z)throw new Error("LUTCubeLoader: Invalid input domain");const x=this.type===T?255:1;let h=0;for(;(e=c.exec(t))!==null;)o[h++]=Number(e[1])*x,o[h++]=Number(e[2])*x,o[h++]=Number(e[3])*x,o[h++]=x;const l=new V;return l.image.data=o,l.image.width=s,l.image.height=s,l.image.depth=s,l.type=this.type,l.magFilter=R,l.minFilter=R,l.wrapS=j,l.wrapT=j,l.wrapR=j,l.generateMipmaps=!1,l.needsUpdate=!0,{title:p,size:s,domainMin:d,domainMax:m,texture3D:l}}}function b(r){return r.split("/").pop()??r}function E(r,t,a){return Math.min(a,Math.max(t,r))}function z(r){return[r.x,r.y,r.z].map(t=>t.toFixed(2)).join(", ")}function se(){const r=new q;r.background=new D("#171a22");const t=new X(34,1,.1,100);t.position.set(6.6,4.6,8.8),t.lookAt(0,.7,0),r.add(new K("#dce8ff","#322a27",2.1));const a=new Y("#fff3db",3.8);a.position.set(4,7,5),r.add(a);const f=[],g=[],n=(s,u,o)=>{f.push(s),g.push(u);const d=new te(s,u);return d.position.set(...o),d.castShadow=!0,d.receiveShadow=!0,r.add(d),d},c=[["#e64d45",-2.4],["#e5ad42",-1.2],["#55b86a",0],["#47a9d8",1.2],["#8a68d7",2.4]];for(const[s,u]of c)n(new J(.48,48,32),new v({color:s,roughness:.3,metalness:.08}),[u,.65,0]);[.06,.18,.5,.82,1].forEach((s,u)=>{const o=Math.round(s*255);n(new Q(.78,.78,.78),new v({color:new D(`rgb(${o}, ${o}, ${o})`),roughness:.72}),[-2.4+u*1.2,1.85,-.1])});const p=n(new ee(9,6),new v({color:"#777b86",roughness:.92}),[0,.08,-1.8]);return p.rotation.x=-Math.PI/2,{scene:r,camera:t,dispose:()=>{for(const s of f)s.dispose();for(const s of g)s.dispose()}}}function oe({lut:r,settingsRef:t}){const a=w.useRef(null);return w.useEffect(()=>{const f=a.current;if(!f)return;let g=!1,n=0;const c=document.createElement("canvas");c.setAttribute("aria-label","LUT before and after preview"),c.style.width="100%",c.style.height="100%",c.style.display="block",f.replaceChildren(c);const e=new $({canvas:c,antialias:!0});e.outputColorSpace=W,e.toneMapping=Z,e.toneMappingExposure=1,e.shadowMap.enabled=!0;const p=se(),s=new P(e),u=new _(r.texture3D,{tetrahedralInterpolation:!0});s.addPass(new B(p.scene,p.camera)),s.addPass(new O(p.camera,u));const o={width:1,height:1},d=()=>{const l=t.current,S=Math.round(o.width*E(l.split,.05,.95));u.blendMode.opacity.value=E(l.intensity,0,1),u.tetrahedralInterpolation=l.tetrahedral,e.setScissorTest(!1),e.setRenderTarget(null),e.clear(),e.setScissorTest(!0),e.setScissor(0,0,S,o.height),e.render(p.scene,p.camera),e.setScissor(S,0,o.width-S,o.height),s.render(),e.setScissorTest(!1)},m=()=>{const l=f.getBoundingClientRect();o.width=Math.max(1,Math.floor(l.width)),o.height=Math.max(1,Math.floor(l.height)),e.setPixelRatio(Math.min(window.devicePixelRatio||1,2)),e.setSize(o.width,o.height,!1),s.setSize(o.width,o.height),p.camera.aspect=o.width/o.height,p.camera.updateProjectionMatrix()};m(),d();const x=new ResizeObserver(()=>{m(),d()});x.observe(f);const h=()=>{g||(d(),n=requestAnimationFrame(h))};return n=requestAnimationFrame(h),()=>{g=!0,cancelAnimationFrame(n),x.disconnect(),s.dispose(),u.dispose(),p.dispose(),e.dispose(),c.remove()}},[r,t]),i.jsx("div",{ref:a,"data-testid":"lut-preview",style:{width:"100%",height:"100%",minHeight:260,background:"#171a22"}})}function ie({settings:r,onChange:t}){return i.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:12,padding:4},children:[i.jsxs("label",{style:{display:"flex",flexDirection:"column",gap:5,fontSize:11},children:["Intensity",i.jsx(C,{value:r.intensity,onChange:a=>t({...r,intensity:E(a,0,1)}),step:.01,precision:2})]}),i.jsxs("label",{style:{display:"flex",flexDirection:"column",gap:5,fontSize:11},children:["Comparison split",i.jsx(C,{value:r.split,onChange:a=>t({...r,split:E(a,.05,.95)}),step:.01,precision:2})]}),i.jsxs("label",{style:{display:"flex",alignItems:"center",gap:7,fontSize:11},children:[i.jsx(F,{checked:r.tetrahedral,onChange:a=>t({...r,tetrahedral:a.target.checked})}),"Tetrahedral interpolation"]}),i.jsx("div",{style:{color:y.content.muted,fontSize:10,lineHeight:1.45},children:"Preview controls are session-only. Bind the LUT and accepted intensity in the owning TSX post-processing composition."})]})}async function ae(r){const t=await k(r);if(t===null)throw new Error(`CUBE LUT not found: ${r}`);return new ne().parse(t)}function Ee({documentId:r,assetPath:t,active:a=!0}){const[f,g]=w.useState(0),[n,c]=w.useState(null),[e,p]=w.useState(null),[s,u]=w.useState({intensity:1,split:.5,tetrahedral:!0}),o=w.useRef(s);o.current=s,w.useEffect(()=>{if(a)return re(t,()=>g(m=>m+1))},[a,t]),w.useEffect(()=>{if(!a)return;let m=!1,x=null;return c(null),p(null),ae(t).then(h=>{if(x=h,m){h.texture3D.dispose();return}c(h)},h=>{m||p(h instanceof Error?h.message:String(h))}),()=>{m=!0,x?.texture3D.dispose()}},[a,t,f]);const d=w.useMemo(()=>[{id:"lut-profile",title:"Color Grade",icon:A,order:U,body:{kind:"custom",...n?{data:{title:n.title,size:n.size,domainMin:n.domainMin.toArray(),domainMax:n.domainMax.toArray()}}:{},render:()=>i.jsxs("div",{style:{display:"grid",gridTemplateColumns:"auto 1fr",gap:"6px 10px"},children:[i.jsx("span",{style:{color:y.content.muted},children:"Title"}),i.jsx("span",{children:n?.title||b(t)}),i.jsx("span",{style:{color:y.content.muted},children:"Cube"}),i.jsx("span",{children:n?`${n.size}³`:"—"}),i.jsx("span",{style:{color:y.content.muted},children:"Domain"}),i.jsx("span",{children:n?`${z(n.domainMin)} → ${z(n.domainMax)}`:"—"})]})}},{id:"lut-preview-settings",title:"Preview",icon:I,order:N,body:{kind:"custom",data:{...s},render:()=>i.jsx(ie,{settings:s,onChange:u})}}],[t,n,s]);return e?i.jsx(M,{documentId:r,active:a,type:"color grade",title:b(t),status:"CUBE LUT unavailable",children:i.jsx("div",{role:"alert",style:{padding:20,color:y.semantic.danger},children:e})}):n?i.jsx(M,{documentId:r,active:a,type:"color grade",title:b(t),sections:d,status:`CUBE LUT · ${n.size}³`,fill:!0,children:i.jsxs("div",{style:{position:"relative",width:"100%",height:"100%",minHeight:0,background:"#171a22"},children:[i.jsx(oe,{lut:n,settingsRef:o}),i.jsx("div",{style:{position:"absolute",left:12,top:12,padding:"4px 7px",borderRadius:4,background:"rgba(12,14,20,0.72)",color:"#f2f4f8",fontSize:10,pointerEvents:"none"},children:"Original"}),i.jsx("div",{style:{position:"absolute",right:12,top:12,padding:"4px 7px",borderRadius:4,background:"rgba(12,14,20,0.72)",color:"#f2f4f8",fontSize:10,pointerEvents:"none"},children:n.title||"Graded"})]})}):i.jsx(M,{documentId:r,active:a,type:"color grade",title:b(t),status:"Loading CUBE LUT",children:i.jsx("div",{style:{padding:20,color:y.content.muted},children:"Loading color grade…"})})}export{Ee as LutAssetDocument};
@@ -0,0 +1 @@
1
+ import{a as s}from"./jsx-runtime-DPjLkJKQ.js";import{r as e}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{af as a}from"./index-C5ZAyrKq.js";import{l as w,d as f}from"./asset-preview-DxlSdRZn.js";import{m as x,l as E,c as S}from"./model-thumbnail-BmQs-h6t.js";import{O as M}from"./StageHost-DYfGYwvq.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./editor-layers-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"./three.module-BLhyNg0e.js";import"./three.core-3arARmh6.js";import"./GLTFLoader-KeoruJgS.js";import"./BufferGeometryUtils-B22h7jo4.js";import"./environment-Dg-YaLsA.js";import"./RoomEnvironment-BkknvS_I.js";import"./EXRLoader-CITMBvGd.js";import"./HDRLoader-BTGuGhVo.js";import"./bitmap-label-Ct4k6ehY.js";import"./three-state-BCACvUtm.js";import"./editor-shell-store-DHVWS8cE.js";import"./output-pass-HurwNl0G.js";import"./Pass-D1MRT672.js";import"./entity-object-MKYemTFM.js";import"./three-contract-Dkt6PmWY.js";import"./standard-viewport-dressing-BW-dM_1h.js";import"./content-bounds-DROIchTa.js";import"./preview-renderer-BrYNFV1p.js";import"./live-mixers-B-bwLZ7c.js";import"./live-gesture-lock-DJbrjOqf.js";import"./model-inspection-DvspbmJl.js";import"./three-viewport-presentation-CBzvc2v2.js";import"./clip-planes-CnAI6DZn.js";import"./three-DiL6vMXq.js";import"./component-instance-root-DLI40MiB.js";import"./viewport-editor-controls-BYaAZ_Ku.js";import"./OrbitControls-B13MKuwC.js";import"./LineSegments2-DN9pUfWA.js";import"./three.quarks.esm-C_HmSKXo.js";import"./three-integration-DXOFI88n.js";import"./host-hierarchy-objects-BV3WqU2w.js";import"./layered-pick-CAVQMPI7.js";import"./root-stacking-BEd9ZvxC.js";import"./object3d-document-session-registry-CMRJdFp6.js";import"./viewport-door-BARIpMu-.js";import"./scene-framing-DkZKDwH3.js";import"./source-object3d-authoring-adapter-CvmFpSUj.js";import"./three-projection-core-B7Lf8tOp.js";import"./editor-presentation-activity-CqJH4G9t.js";import"./transport-strip-xCg94CuI.js";import"./viewport-surface-status-TUfhXKR9.js";function Co({documentId:g,assetPath:o,displayName:u,active:p}){const[b,n]=e.useState(null),[d,c]=e.useState(null);e.useEffect(()=>{if(!p){n(null);return}const m=new AbortController;let l=null;n(null),c(null);const i=x(o);return(i==="glb"||i==="gltf"||i==="spz"?w(o,m.signal):i?E({url:o,format:i}).then(S).then(r=>({root:r,sourceBytes:null})):Promise.reject(new Error(`No native Three.js model loader supports ${o}.`))).then(r=>{if(m.signal.aborted){f(r.root);return}l=r.root,n(r)},r=>{m.signal.aborted||c(r instanceof Error?r.message:String(r))}),()=>{m.abort(),l&&f(l)}},[p,o]);const t=b?.root??null,j=e.useCallback(()=>{if(!t)throw new Error(`Model asset ${o} is not loaded.`);return{root:t,animations:t.animations,dispose(){}}},[o,t]);return d?s.jsx("div",{role:"alert",style:{padding:20,color:a.semantic.danger},children:d}):t?s.jsx(M,{documentId:g,sourcePath:o,displayName:u,build:j,active:p,assetType:"model",modelSource:{kind:"project-file",path:o}}):s.jsxs("div",{style:{padding:20,color:a.content.muted},children:["Loading ",u,"…"]})}export{Co as ModelAssetDocument};
@@ -1 +1 @@
1
- import{r as i}from"./index-nmcBqr7Y.js";import{r as s}from"./project-authoring-session-C3eusefK.js";import{M as e}from"./index-BRJMIUK0.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./edit-mode-authoring-DeCxPcHM.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";function A({store:r}){return i.useEffect(()=>{const t=s(r);return t.ready.catch(o=>{e.error(`Authoring session failed: ${o instanceof Error?o.message:String(o)}`,"authoring")}),t.dispose},[r]),null}export{A as ProjectAuthoringBootstrap};
1
+ import{r as i}from"./index-nmcBqr7Y.js";import{r as s}from"./project-authoring-session-DKXHVwxO.js";import{O as e}from"./index-C5ZAyrKq.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./edit-mode-authoring-D5f7aHHl.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";function A({store:r}){return i.useEffect(()=>{const t=s(r);return t.ready.catch(o=>{e.error(`Authoring session failed: ${o instanceof Error?o.message:String(o)}`,"authoring")}),t.dispose},[r]),null}export{A as ProjectAuthoringBootstrap};
@@ -0,0 +1 @@
1
+ import{a as s}from"./jsx-runtime-DPjLkJKQ.js";import{dB as ee,dC as N,dD as se,dE as L,dF as te,dG as ie,dH as z,dI as B,aH as re,aI as ae,dJ as S,dK as oe,cO as F,cE as v,aL as f,a1 as n,dg as ne,a0 as W,cQ as le,cJ as ce,cR as A,cS as d,dj as H,cT as de,dL as pe,dM as me,dN as K,dh as U,dO as ue,dP as he,dQ as $,aM as ge,aK as G,dR as ve,aJ as _,dS as be,dT as xe,dU as je,cK as we,dV as Se,dW as fe}from"./index-C5ZAyrKq.js";import{r}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{e as ye,f as Ce}from"./asset-preview-DxlSdRZn.js";import{s as Ee}from"./model-inspection-DvspbmJl.js";import{s as Pe,o as J,a as Ve}from"./object3d-document-session-registry-CMRJdFp6.js";import{v as ke}from"./viewport-door-BARIpMu-.js";import{v as Q,V as Me,a as De,p as Oe,b as Te,c as Re}from"./ViewportShadingMenu-BoMPnTVh.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";import"./editor-layers-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"./three.module-BLhyNg0e.js";import"./three.core-3arARmh6.js";import"./GLTFLoader-KeoruJgS.js";import"./BufferGeometryUtils-B22h7jo4.js";import"./environment-Dg-YaLsA.js";import"./RoomEnvironment-BkknvS_I.js";import"./EXRLoader-CITMBvGd.js";import"./HDRLoader-BTGuGhVo.js";import"./bitmap-label-Ct4k6ehY.js";const q=()=>()=>{},b=()=>0,Ne=[{key:"skeletons",label:"Bones"},{key:"weights",label:"Weights"},{key:"cursor",label:"3D Cursor"},{key:"cameras",label:"Cameras"},{key:"lights",label:"Lights"},{key:"empties",label:"Empties"}];function ps({documentId:i,assetPath:p}){r.useSyncExternalStore(Pe,J,J);const t=Ve(i);r.useSyncExternalStore(ee,N,N),r.useSyncExternalStore(t?.subscribe??q,t?.getSnapshot??b,t?.getSnapshot??b),r.useSyncExternalStore(se,L,L);const l=te(i);r.useSyncExternalStore(l?.subscribe??q,l?.getSnapshot??b,l?.getSnapshot??b);const X=ke(i),[y,C]=r.useState(null),[E,h]=r.useState(null),[P,g]=r.useState(!1),[V,c]=r.useState(!1),k=r.useRef(null),M=r.useRef(null);if(r.useSyncExternalStore(ie,z,z),!t)return null;const a=t.presentation(),{lighting:m}=B(i),u=re(i),D=u?ae(u.stageKind):null,Y=u?.documentLayer?.all?.lighting?.studioPreset===S.id||D?.all?.lighting?.studioPreset===S.id,x=u?oe(u.stageKind):!1,O=e=>x?{modes:{[B(i).drawMode]:{lighting:e}}}:{all:{lighting:e}},j=new Set(Object.entries(D?.modes??{}).filter(([,e])=>e?.lighting!==void 0).map(([e])=>e)),w=new Set(Ee(t.root).filter(e=>e.available).map(e=>e.mode)),Z=[...x?Q.map(e=>e.mode==="solid"?{...e,label:"Solid",description:"Materials' colours under the studio lights"}:e.mode==="clay"?{...e,label:"Clay"}:e):Q,...j.has("preview")?[{mode:"preview",label:"Material Preview",description:"Materials lit by a preview environment"}]:[],...j.has("rendered")?[{mode:"rendered",label:"Rendered",description:"Lit as a render is, by the scene's own lights"}]:[],...w.has("uv")?[{mode:"uv",label:"UV",description:"UV coordinates as surface color"}]:[],...w.has("vertex-colors")?[{mode:"vertex-colors",label:"Vertex colors",description:"Authored color attributes without textures"}]:[]],T=async e=>{if(p){h(null);try{await fe().saveThumbnailFraming(p,e?void 0:t.cameraPose())}catch(o){h(o instanceof Error?o.message:String(o))}}},I=async()=>{h(null);try{const e={background:a.background},o=p?.toLowerCase().endsWith(".spz")?await ye(p,e):Ce(t.root,e);C(`data:image/png;base64,${o.contactSheet.base64}`)}catch(e){h(e instanceof Error?e.message:String(e))}},R=t.selection().length>0?"Frame selection":"Frame all";return s.jsxs("div",{className:"volter-model-document-header",children:[s.jsxs(F,{compact:!0,label:"Viewport view controls",className:"volter-model-viewport-toolbar volter-model-viewport-toolbar--view",children:[s.jsx(v,{text:R,children:s.jsx(f,{"aria-label":R,onClick:()=>t.frame(),children:s.jsx(n,{icon:ne,size:"md"})})}),s.jsxs("div",{className:"volter-viewport-popover-anchor",children:[s.jsx(v,{text:"Camera orientation and projection",children:s.jsxs(W,{ref:k,type:"button",size:"compact",variant:"secondary","aria-label":`Camera view: ${a.projection}`,"aria-haspopup":"menu","aria-expanded":P,onClick:()=>g(e=>!e),className:"volter-model-toolbar-labelled-control",children:[s.jsx(n,{icon:le,size:"sm"}),s.jsx("span",{children:a.projection==="perspective"?"Perspective":"Orthographic"}),s.jsx(n,{icon:ce,size:"xs"})]})}),P&&s.jsxs(A,{anchorRef:k,align:"start",clamp:!0,"aria-label":"Camera view",onDismiss:()=>g(!1),style:{minWidth:210},children:[["front","right","top","isometric"].map(e=>s.jsx(d,{onSelect:()=>{t.setViewPreset(e,"view"),g(!1)},children:e==="isometric"?"Perspective 3/4":`${e[0]?.toUpperCase()}${e.slice(1)} view`},e)),s.jsx(H,{}),["perspective","orthographic"].map(e=>s.jsxs(d,{role:"menuitemradio","aria-checked":a.projection===e,onSelect:()=>{t.setProjection(e),g(!1)},children:[s.jsx("span",{className:"volter-menu-check",children:a.projection===e&&s.jsx(n,{icon:de,size:"xs"})}),e==="perspective"?"Perspective":"Orthographic"]},e))]})]}),w.has("skeleton")?s.jsx(v,{text:`Rig: ${a.skeleton?"Visible":"Hidden"}`,children:s.jsx(f,{"aria-label":"Toggle rig overlay","aria-pressed":a.skeleton,onClick:()=>t.setSkeleton(!a.skeleton),children:s.jsx(n,{icon:pe,size:"md"})})}):null,me("object3d-document").map(({id:e,Component:o})=>s.jsx(o,{documentId:i},e))]}),s.jsxs(F,{compact:!0,label:"Viewport preview controls",className:"volter-model-viewport-toolbar volter-model-viewport-toolbar--preview",children:[s.jsxs(Me,{mode:a.mode,onChange:e=>t.setMode(e),choices:Z,segments:x?Oe(j):De,children:[K().length>0?s.jsxs("label",{children:[s.jsx("span",{children:"View"}),s.jsxs(U,{"aria-label":"View preset",value:"",onChange:e=>{e.target.value&&ue(i,e.target.value)},children:[s.jsx("option",{value:"",children:"Choose…"}),K().map(e=>s.jsx("option",{value:e.id,children:e.title},e.id))]})]}):null,s.jsxs("label",{children:[s.jsx("span",{children:"Lighting"}),s.jsxs(U,{"aria-label":"Lighting",value:m.source==="studio"?`studio:${m.studioPreset}`:m.source,onChange:e=>{const o=e.target.value;$(i,O(o.startsWith("studio:")?{source:"studio",studioPreset:o.slice(7)}:{source:o}))},children:[he().filter(e=>e.id!==S.id||Y).map(e=>s.jsx("option",{value:`studio:${e.id}`,children:e.title},e.id)),s.jsx("option",{value:"scene",children:"Scene lights"})]})]}),s.jsxs("label",{children:[s.jsx("span",{children:"Exposure"}),s.jsx(ge,{"aria-label":"Preview exposure",type:"range",min:"0.2",max:"2",step:"0.1",value:m.tone.exposure,onChange:e=>$(i,O({tone:{exposure:Number(e.target.value)}}))}),s.jsx(G,{as:"span",variant:"caption",children:m.tone.exposure.toFixed(1)})]})]}),s.jsx(Te,{glyph:s.jsx(Re,{}),choices:[{id:"grid",label:"Grid",enabled:_(i),onToggle:()=>ve(i,!_(i))},{id:"bounds",label:"Bounds",enabled:a.bounds,onToggle:()=>t.setBounds(!a.bounds)},...l===null?[]:Ne.filter(e=>X.includes(e.key)).map(e=>({id:e.key,label:e.label,enabled:l.helperVisibility[e.key],onToggle:()=>l.toggleHelperType(e.key)}))]}),s.jsxs("div",{className:"volter-viewport-popover-anchor",children:[s.jsx(v,{text:"Asset preview actions",children:s.jsx(f,{ref:M,"aria-label":"Asset preview actions","aria-haspopup":"menu","aria-expanded":V,onClick:()=>c(e=>!e),children:s.jsx(n,{icon:be,size:"md"})})}),V&&s.jsxs(A,{anchorRef:M,clamp:!0,"aria-label":"Asset preview actions",onDismiss:()=>c(!1),style:{minWidth:210},children:[s.jsxs(d,{onSelect:()=>{c(!1),I()},children:[s.jsx(n,{icon:xe,size:"sm"}),"Capture preview"]}),p?s.jsxs(s.Fragment,{children:[s.jsx(d,{onSelect:()=>{c(!1),T(!1)},children:"Save thumbnail framing"}),s.jsx(d,{onSelect:()=>{c(!1),T(!0)},children:"Reset thumbnail framing"})]}):null,s.jsx(H,{}),s.jsxs(d,{onSelect:()=>{t.resetPresentation(),c(!1)},children:[s.jsx(n,{icon:je,size:"sm"}),"Reset viewport settings"]})]})]})]}),y?s.jsxs(we,{className:"volter-model-capture-preview",children:[s.jsxs("div",{children:[s.jsx(G,{as:"strong",variant:"label",children:"Deterministic views"}),s.jsx(W,{type:"button",variant:"ghost",onClick:()=>C(null),children:"Close"})]}),s.jsx("img",{src:y,alt:"Front, right, top, and three-quarter model preview"})]}):null,E?s.jsx(Se,{className:"volter-model-toolbar-error",tone:"error",children:E}):null]})}export{ps as Object3DDocumentToolbar};
@@ -0,0 +1,2 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/StageHost-DYfGYwvq.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-state-BCACvUtm.js","assets/editor-shell-store-DHVWS8cE.js","assets/output-pass-HurwNl0G.js","assets/three.module-BLhyNg0e.js","assets/three.core-3arARmh6.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/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"])))=>i.map(i=>d[i]);
2
+ import{ae as r,_ as a}from"./index-C5ZAyrKq.js";import{a as o}from"./jsx-runtime-DPjLkJKQ.js";import{r as n}from"./index-nmcBqr7Y.js";import{V as c,O as u}from"./viewport-surface-status-TUfhXKR9.js";const s=n.lazy(async()=>({default:(await a(()=>import("./StageHost-DYfGYwvq.js").then(e=>e.S),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60]))).Object3DDocumentViewport}));function l(t){return i(t.documentId,t.chromeless),o.jsx(n.Suspense,{fallback:o.jsx(c,{testId:"object3d-document-loading",children:u}),children:o.jsx(s,{...t})})}function i(t,e=!1){n.useEffect(()=>{if(!e)return r(t)},[t,e])}export{l as O};
@@ -1,2 +1,2 @@
1
1
  const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/spark.module-Byplgb8G.js","assets/three.module-BLhyNg0e.js","assets/three.core-3arARmh6.js","assets/Pass-D1MRT672.js"])))=>i.map(i=>d[i]);
2
- import{g1 as te,ad as A,_ as re}from"./index-BRJMIUK0.js";import{a as E}from"./jsx-runtime-DPjLkJKQ.js";import{r as C}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{W as ie}from"./three.module-BLhyNg0e.js";import{OrbitControls as oe}from"./OrbitControls-B13MKuwC.js";import{g as ne,h as se,d as J,m as ae,i as le}from"./asset-preview-B1tDziF1.js";import{s as ce,i as F}from"./editor-presentation-activity-C7SNSmTd.js";import{m as me,l as pe,c as de,d as ue}from"./model-thumbnail-BEKPWg4l.js";import{h as fe}from"./user-data-Bpj7diUS.js";import{el as we,d9 as ge,ej as he,A as be,bj as ve,aE as xe,bg as ye,Z as Ae,eu as Ee,fo as Ce,n as Me}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"./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"./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";const v={webglContext:0,animationFrame:0,resizeObserver:0,objectUrl:0},K={...v};function _(r){v[r]++,K[r]=Math.max(K[r],v[r]);let s=!1;return()=>{s||(s=!0,v[r]=Math.max(0,v[r]-1))}}function je(r){const s=r.animations[0];if(!s)return null;const d=new Me(r),g=d.clipAction(s).play();return g.paused=!0,d.update(0),d}let Se=0;function ot({assetPath:r,materialPath:s,displayName:d="Object3D preview",active:g=!0,sourceFactory:M,showSkeleton:D=!1,background:z,cameraDirection:j,showGrid:H=!0,useDefaultLighting:L=!0,exposure:T=1,setupPreview:k}){const W=C.useRef(null),[S,q]=C.useState(null),[$,R]=C.useState(!0);return C.useEffect(()=>{if(!g)return;const n=W.current;if(!n)return;const x=new AbortController,N=te({id:`preview-card:${++Se}`,label:`${d} (preview card)`,contentClock:()=>0}),t=new ie({antialias:!0,alpha:!0}),Q=_("webglContext"),X=_("animationFrame"),Y=_("resizeObserver"),a=new we,u=new ge(35,1,.01,1e3),f=new oe(u,t.domElement),I=new Ae;let U=null,w=null,y=null,c,l=null,h=null;const O=[];let m=0,p=!1;if(q(null),R(!0),t.outputColorSpace=he,t.toneMapping=be,t.toneMappingExposure=T,t.shadowMap.enabled=!0,t.setClearColor(z??2106410,1),t.setPixelRatio(Math.min(window.devicePixelRatio,2)),t.domElement.style.width="100%",t.domElement.style.height="100%",t.domElement.style.display="block",n.appendChild(t.domElement),f.enableDamping=!0,f.dampingFactor=.1,L){a.add(new ve(16777215,3489874,1.8));const e=new xe(16777215,2.2);e.position.set(3,5,4),a.add(e)}if(H){const e=new ye(10,20,5333103,3423044);a.add(e),O.push(e)}const V=(e,i)=>{if(!h)return;const o=j?new Ce(...j):void 0,b=le(h,Math.max(e,1)/Math.max(i,1),o);u.copy(b,!1),f.target.copy(h.center),f.update()},G=async e=>{if(p)return;a.add(e);let i=!1;if(e.traverse(o=>{fe(o,"gaussianSplat")&&(i=!0)}),i){const{SparkRenderer:o}=await re(async()=>{const{SparkRenderer:b}=await import("./spark.module-Byplgb8G.js");return{SparkRenderer:b}},__vite__mapDeps([0,1,2,3]));if(p)return;l=new o({renderer:t,enableLod:!1})}if(h=ae(e,"perspective"),V(n.clientWidth,n.clientHeight),U=je(e),D){const o=new Ee(e);o.name="__compact_preview_skeleton",a.add(o),O.push(o)}c=k?.({scene:a,camera:u,renderer:t,model:e}),c?.resize?.(Math.max(n.clientWidth,1),Math.max(n.clientHeight,1),t.getPixelRatio()),R(!1)};(async()=>{try{if(M){y=ne(M),await G(y.root);return}if(!r)throw new Error("Compact Object3D preview has no source.");const e=me(r);if(!e)throw new Error(`No native Three.js loader supports ${r}.`);const i=e==="glb"||e==="gltf"||e==="spz"?await se(r,x.signal):await pe({url:r,format:e,...s?{materialUrl:s}:{}});if(w=de(i),x.signal.aborted||p){J(w),w=null;return}await G(w)}catch(e){!x.signal.aborted&&!p&&(q(e instanceof Error?e.message:String(e)),R(!1))}})();const B=()=>{const e=Math.max(n.clientWidth,1),i=Math.max(n.clientHeight,1);t.setSize(e,i,!1),h&&!c?V(e,i):(u.aspect=e/i,u.updateProjectionMatrix()),c?.resize?.(e,i,t.getPixelRatio())},Z=new ResizeObserver(B);Z.observe(n),B();const P=()=>{if(m=0,p||!F())return;const e=Math.min(I.getDelta(),.1);f.update(),l&&a.add(l);try{c?.render?c.render(e):t.render(a,u)}finally{l?.removeFromParent()}m=requestAnimationFrame(P)},ee=ce(()=>{F()?!p&&m===0&&(I.getDelta(),P()):(cancelAnimationFrame(m),m=0)});return F()&&(m=requestAnimationFrame(P)),()=>{p=!0,ee(),N(),x.abort(new Error("Compact Object3D preview closed.")),cancelAnimationFrame(m),Z.disconnect(),U?.stopAllAction(),c?.dispose(),f.dispose(),l&&(l.removeFromParent(),ue(l),l=null),t.dispose(),t.forceContextLoss();for(const e of O){const i=e;i.geometry?.dispose();const o=i.material;if(Array.isArray(o))for(const b of o)b.dispose();else o?.dispose()}y&&y.dispose(),w&&J(w),n.contains(t.domElement)&&n.removeChild(t.domElement),Y(),X(),Q()}},[g,r,z,j,T,s,k,H,D,M,L]),E.jsxs("div",{ref:W,"data-testid":"object3d-compact-preview",role:"region","aria-label":`Interactive 3D preview: ${d}`,"aria-busy":$,style:{width:"100%",height:"100%",minHeight:220,overflow:"hidden",position:"relative",background:A.surface.inset},children:[$&&!S?E.jsx("span",{style:{position:"absolute",padding:10,color:A.content.muted},children:"Loading…"}):null,g?null:E.jsx("span",{style:{position:"absolute",padding:10,color:A.content.muted},children:"Preview suspended while inactive."}),S?E.jsx("div",{role:"alert",style:{position:"absolute",padding:10,color:A.semantic.danger},children:S}):null]})}export{ot as Object3DPreview};
2
+ import{ga as te,af as A,_ as re}from"./index-C5ZAyrKq.js";import{a as E}from"./jsx-runtime-DPjLkJKQ.js";import{r as C}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{W as ie}from"./three.module-BLhyNg0e.js";import{OrbitControls as oe}from"./OrbitControls-B13MKuwC.js";import{g as ne,h as se,d as J,m as ae,i as le}from"./asset-preview-DxlSdRZn.js";import{s as ce,i as F}from"./editor-presentation-activity-CqJH4G9t.js";import{m as me,l as pe,c as de,d as ue}from"./model-thumbnail-BmQs-h6t.js";import{h as fe}from"./user-data-C84W0V47.js";import{el as we,d9 as ge,ej as he,A as be,bj as ve,aE as xe,bg as ye,Z as Ae,eu as Ee,fo as Ce,n as Me}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"./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"./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";const v={webglContext:0,animationFrame:0,resizeObserver:0,objectUrl:0},K={...v};function _(r){v[r]++,K[r]=Math.max(K[r],v[r]);let s=!1;return()=>{s||(s=!0,v[r]=Math.max(0,v[r]-1))}}function je(r){const s=r.animations[0];if(!s)return null;const d=new Me(r),g=d.clipAction(s).play();return g.paused=!0,d.update(0),d}let Se=0;function ot({assetPath:r,materialPath:s,displayName:d="Object3D preview",active:g=!0,sourceFactory:M,showSkeleton:D=!1,background:z,cameraDirection:j,showGrid:H=!0,useDefaultLighting:L=!0,exposure:T=1,setupPreview:k}){const W=C.useRef(null),[S,q]=C.useState(null),[$,R]=C.useState(!0);return C.useEffect(()=>{if(!g)return;const n=W.current;if(!n)return;const x=new AbortController,N=te({id:`preview-card:${++Se}`,label:`${d} (preview card)`,contentClock:()=>0}),t=new ie({antialias:!0,alpha:!0}),Q=_("webglContext"),X=_("animationFrame"),Y=_("resizeObserver"),a=new we,u=new ge(35,1,.01,1e3),f=new oe(u,t.domElement),I=new Ae;let U=null,w=null,y=null,c,l=null,h=null;const O=[];let m=0,p=!1;if(q(null),R(!0),t.outputColorSpace=he,t.toneMapping=be,t.toneMappingExposure=T,t.shadowMap.enabled=!0,t.setClearColor(z??2106410,1),t.setPixelRatio(Math.min(window.devicePixelRatio,2)),t.domElement.style.width="100%",t.domElement.style.height="100%",t.domElement.style.display="block",n.appendChild(t.domElement),f.enableDamping=!0,f.dampingFactor=.1,L){a.add(new ve(16777215,3489874,1.8));const e=new xe(16777215,2.2);e.position.set(3,5,4),a.add(e)}if(H){const e=new ye(10,20,5333103,3423044);a.add(e),O.push(e)}const V=(e,i)=>{if(!h)return;const o=j?new Ce(...j):void 0,b=le(h,Math.max(e,1)/Math.max(i,1),o);u.copy(b,!1),f.target.copy(h.center),f.update()},G=async e=>{if(p)return;a.add(e);let i=!1;if(e.traverse(o=>{fe(o,"gaussianSplat")&&(i=!0)}),i){const{SparkRenderer:o}=await re(async()=>{const{SparkRenderer:b}=await import("./spark.module-Byplgb8G.js");return{SparkRenderer:b}},__vite__mapDeps([0,1,2,3]));if(p)return;l=new o({renderer:t,enableLod:!1})}if(h=ae(e,"perspective"),V(n.clientWidth,n.clientHeight),U=je(e),D){const o=new Ee(e);o.name="__compact_preview_skeleton",a.add(o),O.push(o)}c=k?.({scene:a,camera:u,renderer:t,model:e}),c?.resize?.(Math.max(n.clientWidth,1),Math.max(n.clientHeight,1),t.getPixelRatio()),R(!1)};(async()=>{try{if(M){y=ne(M),await G(y.root);return}if(!r)throw new Error("Compact Object3D preview has no source.");const e=me(r);if(!e)throw new Error(`No native Three.js loader supports ${r}.`);const i=e==="glb"||e==="gltf"||e==="spz"?await se(r,x.signal):await pe({url:r,format:e,...s?{materialUrl:s}:{}});if(w=de(i),x.signal.aborted||p){J(w),w=null;return}await G(w)}catch(e){!x.signal.aborted&&!p&&(q(e instanceof Error?e.message:String(e)),R(!1))}})();const B=()=>{const e=Math.max(n.clientWidth,1),i=Math.max(n.clientHeight,1);t.setSize(e,i,!1),h&&!c?V(e,i):(u.aspect=e/i,u.updateProjectionMatrix()),c?.resize?.(e,i,t.getPixelRatio())},Z=new ResizeObserver(B);Z.observe(n),B();const P=()=>{if(m=0,p||!F())return;const e=Math.min(I.getDelta(),.1);f.update(),l&&a.add(l);try{c?.render?c.render(e):t.render(a,u)}finally{l?.removeFromParent()}m=requestAnimationFrame(P)},ee=ce(()=>{F()?!p&&m===0&&(I.getDelta(),P()):(cancelAnimationFrame(m),m=0)});return F()&&(m=requestAnimationFrame(P)),()=>{p=!0,ee(),N(),x.abort(new Error("Compact Object3D preview closed.")),cancelAnimationFrame(m),Z.disconnect(),U?.stopAllAction(),c?.dispose(),f.dispose(),l&&(l.removeFromParent(),ue(l),l=null),t.dispose(),t.forceContextLoss();for(const e of O){const i=e;i.geometry?.dispose();const o=i.material;if(Array.isArray(o))for(const b of o)b.dispose();else o?.dispose()}y&&y.dispose(),w&&J(w),n.contains(t.domElement)&&n.removeChild(t.domElement),Y(),X(),Q()}},[g,r,z,j,T,s,k,H,D,M,L]),E.jsxs("div",{ref:W,"data-testid":"object3d-compact-preview",role:"region","aria-label":`Interactive 3D preview: ${d}`,"aria-busy":$,style:{width:"100%",height:"100%",minHeight:220,overflow:"hidden",position:"relative",background:A.surface.inset},children:[$&&!S?E.jsx("span",{style:{position:"absolute",padding:10,color:A.content.muted},children:"Loading…"}):null,g?null:E.jsx("span",{style:{position:"absolute",padding:10,color:A.content.muted},children:"Preview suspended while inactive."}),S?E.jsx("div",{role:"alert",style:{position:"absolute",padding:10,color:A.semantic.danger},children:S}):null]})}export{ot as Object3DPreview};
@@ -0,0 +1 @@
1
+ import{a as t}from"./jsx-runtime-DPjLkJKQ.js";import{bZ as L,bF as U,bK as R,b_ as W,d4 as M,af as i,a1 as b,fu as w,b5 as N,aT as C,dh as _,a0 as J,cT as K,fv as V}from"./index-C5ZAyrKq.js";import{r}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{d as G}from"./asset-editor-persistence-BIbf5u0Q.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";const S=new Map,Z=new Set;function I(){for(const e of Z)e()}function q(e,l){const n=S.get(e);if(n?.status==="running")return n;const f={id:e,label:l,stage:"fetch",loaded:0,total:0,status:"running",controller:new AbortController};return S.set(e,f),I(),f}function y(e,l){const n=S.get(e);n&&(Object.assign(n,l),I())}const Q={width:"100%"};function X(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}function ce({online:e,mode:l="full",showPreview:n=!1,onResolved:f}){const[h,z]=r.useState([]),[o,A]=r.useState(null),[T,v]=r.useState(!0),[B,F]=r.useState(null),[m,D]=r.useState(null),[$,p]=r.useState(!1),[O,x]=r.useState(!1),[j,E]=r.useState(!1),[c,g]=r.useState("idle");r.useEffect(()=>{if(l==="preview"){v(!1);return}let s=!1;return v(!0),F(null),L(e.source,e.id).then(a=>{s||(z(a),a.length>0&&A(a[0]))}).catch(a=>{s||(z([]),F(a instanceof U?R(a.code):a instanceof Error?a.message:"Asset delivery metadata is unavailable while offline."))}).finally(()=>{s||v(!1)}),()=>{s=!0}},[l,e.source,e.id]);const P=e.source==="local"&&(e.type==="model"||e.type==="animation"||e.type==="source");r.useEffect(()=>{if(l==="inspector"&&!n){p(!1);return}let s=!1;if(D(null),x(!1),E(!1),!P){p(!1);return}return p(!0),W(e.source,e.id).then(a=>{s||(D(a),x(!a))}).catch(()=>{s||x(!0)}).finally(()=>{s||p(!1)}),()=>{s=!0}},[l,e.id,e.source,n,P]);const H=r.useCallback(async()=>{if(!o)return;const s=`single:${e.source}:${e.id}`,a=q(s,e.name);y(s,{stage:"fetch",loaded:0,total:o.sizeBytes??0,status:"running"}),g("downloading");try{const d={source:e.source,id:e.id,name:e.name,url:o.url,format:o.format,jobId:s,signal:a.controller.signal};o.includes&&(d.includes=o.includes);const u=await G(d);u.ok&&u.path?(y(s,{stage:"commit",loaded:o.sizeBytes??1,total:o.sizeBytes??1,status:u.alreadyExists?"skipped":"imported",message:u.path}),g("done"),M(`${e.name} added to Content — drag it from there into the viewport to place it.`),f?.(`/${u.path}`)):(y(s,{status:"failed",message:u.error??"The import was rejected."}),g("error"))}catch(d){y(s,{status:a.controller.signal.aborted?"cancelled":"failed",message:d instanceof Error?d.message:String(d)}),g("error")}},[e,o,f]),k=t.jsx("img",{src:j?"/__editor/asset-library/local-placeholder.svg":e.thumbnailUrl,alt:j?`${e.name} preview unavailable`:e.name,onError:()=>E(!0),style:{maxWidth:"100%",maxHeight:"100%",objectFit:"contain"}});return t.jsxs("div",{style:{padding:8,display:"flex",flexDirection:"column",gap:8},children:[l!=="preview"&&t.jsx("div",{style:{fontWeight:600,fontSize:12,color:i.content.primary,wordBreak:"break-all"},children:e.name}),(l!=="inspector"||n)&&t.jsxs(t.Fragment,{children:[t.jsx("div",{style:{width:"100%",height:"100%",minHeight:l==="inspector"?160:240,background:i.surface.shell,borderRadius:i.shape.small,overflow:"hidden",display:"flex",alignItems:"center",justifyContent:"center"},children:$?t.jsxs("div",{style:{color:i.content.muted,fontSize:11},children:[t.jsx(b,{icon:w,spin:!0,style:{marginRight:5}}),"Loading Asset Editor preview…"]}):m?t.jsx(r.Suspense,{fallback:t.jsx("span",{style:{color:i.content.muted},children:"Loading preview…"}),children:t.jsx(N,{route:"model-preview",documentId:"",assetPath:m.path,...m.materialPath?{materialPath:m.materialPath}:{},displayName:e.name,active:!0,whenUnregistered:k})}):k}),j&&t.jsx("div",{role:"status",style:{color:i.content.dim,fontSize:10},children:"The catalog preview could not be loaded; showing the typed fallback."}),O&&t.jsx("div",{style:{color:i.content.dim,fontSize:10},children:"Interactive preview is unavailable for this variant; showing its catalog thumbnail."})]}),l!=="preview"&&t.jsxs(t.Fragment,{children:[t.jsx(C,{label:"Info",children:t.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:4},children:[t.jsxs("div",{children:[t.jsx("div",{style:{fontSize:11,color:i.content.dim,marginBottom:2},children:"Source"}),t.jsx("div",{style:{fontSize:11,color:i.content.primary},children:e.source==="polyhaven"?"Poly Haven":e.source==="ambientcg"?"ambientCG":"Full Catalog"})]}),t.jsxs("div",{children:[t.jsx("div",{style:{fontSize:11,color:i.content.dim,marginBottom:2},children:"Type"}),t.jsx("div",{style:{fontSize:11,color:i.content.primary},children:e.type})]}),e.tags.length>0&&t.jsxs("div",{children:[t.jsx("div",{style:{fontSize:11,color:i.content.dim,marginBottom:2},children:"Tags"}),t.jsx("div",{style:{display:"flex",flexWrap:"wrap",gap:3},children:e.tags.slice(0,12).map(s=>t.jsx("span",{style:{fontSize:10,padding:"1px 5px",background:i.surface.raised,borderRadius:i.shape.small,color:i.content.muted},children:s},s))})]}),e.author&&t.jsxs("div",{children:[t.jsx("div",{style:{fontSize:11,color:i.content.dim,marginBottom:2},children:"Author"}),t.jsx("div",{style:{fontSize:11,color:i.content.primary},children:e.author})]})]})}),t.jsx(C,{label:"Add to Project",children:t.jsx("div",{style:{display:"flex",flexDirection:"column",gap:6},children:T?t.jsxs("div",{style:{fontSize:11,color:i.content.dim},children:[t.jsx(b,{icon:w,spin:!0,style:{marginRight:4}}),"Loading options..."]}):B?t.jsxs("div",{role:"alert",style:{fontSize:11,color:i.content.muted},children:["Delivery unavailable: ",B]}):h.length>0?t.jsxs(t.Fragment,{children:[t.jsx(_,{"aria-label":"Asset delivery",value:o?h.indexOf(o):0,onChange:s=>A(h[Number(s.target.value)]??null),style:Q,children:h.map((s,a)=>t.jsxs("option",{value:a,children:[s.label,s.sizeBytes?` (${X(s.sizeBytes)})`:""]},a))}),t.jsxs(J,{type:"button",variant:c==="done"?"success":"primary",size:"comfortable",onClick:H,disabled:c==="downloading",style:{width:"100%"},children:[t.jsx(b,{icon:c==="done"?K:c==="downloading"?w:V,spin:c==="downloading",style:{fontSize:10}}),c==="done"?"Downloaded":c==="downloading"?"Downloading...":c==="error"?"Retry":"Add to Project"]})]}):t.jsx("div",{role:"status",style:{fontSize:11,color:i.content.dim},children:e.source==="local"?"No healthy SSD or cloud delivery is available for this asset.":"This provider has no compatible remote delivery for the selected asset."})})}),t.jsxs("div",{style:{fontSize:10,color:i.content.dim,padding:"4px 0"},children:["License: ",e.license??"CC0 (Public Domain)"]})]})]})}export{ce as OnlineAssetDetail};
@@ -0,0 +1 @@
1
+ import{a as e}from"./jsx-runtime-DPjLkJKQ.js";import{l as z}from"./configurations-XP9YLkrt.js";import{c as O,P as G,b as _,d as L,s as B,a as $}from"./run-selection-B0jOdyYt.js";import{a0 as A,a1 as g,gE as V,aK as v,eF as Y,cR as S,cS as R,gF as q,gG as H,r as P,cM as w,a2 as p,gH as I,gI as D,aL as N}from"./index-C5ZAyrKq.js";import{r as l}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{i as K,g as U,d as W}from"./active-ingest-0QjJWb7i.js";import"./client-DNXj_opT.js";import"./ingest-source-persistence-6ShMoSCa.js";import"./capability-coverage-ByWftxk4.js";import{w as X,x as C,s as J,y as Q,z as k,f as Z,j as E,e as ee,l as se,p as te}from"./game-network-DW5ARz4R.js";const F="play-control",T=4;function ae(s){return Math.min(T,Math.max(1,Math.floor(s)))-1}function ne(s){return s+1}function M(s){return s===1?"1 instance":`${s} instances`}function re(){const s=l.useSyncExternalStore(X,C,C),[n,a]=l.useState(!1),r=l.useRef(null),o=ne(s);return e.jsxs("div",{className:"volter-playbar-popover-anchor",children:[e.jsxs(A,{ref:r,variant:"ghost",size:"comfortable","aria-haspopup":"menu","aria-expanded":n,"aria-controls":n?"volter-player-count-menu":void 0,onClick:()=>a(i=>!i),title:`${M(o)} — choose how many runtimes Play mounts side by side`,children:[e.jsx(g,{icon:V,size:"md"}),e.jsx(v,{children:"Instances"}),e.jsx(v,{variant:"code",children:o}),e.jsx(Y,{direction:"down"})]}),n&&e.jsx(S,{id:"volter-player-count-menu",anchorRef:r,gap:4,onDismiss:()=>a(!1),children:Array.from({length:T},(i,c)=>c+1).map(i=>e.jsx(R,{role:"menuitemradio","aria-checked":i===o,onSelect:()=>{J(ae(i)),a(!1)},children:M(i)},i))})]})}function oe({regime:s}){if(!s)return null;const n="Play edits are temporary unless explicitly committed to source.";return e.jsx("span",{role:"img","aria-label":n,className:"volter-play-edit-regime","data-testid":"play-edit-regime","data-regime":s,title:n,children:e.jsx(g,{icon:p.status.warning,size:"sm"})})}function m({label:s,icon:n,onClick:a,title:r=s,disabled:o=!1,pressed:i,variant:c="ghost",testId:t}){return e.jsx(N,{"aria-label":s,"aria-pressed":i,"data-testid":t,disabled:o,size:"comfortable",variant:c,onClick:u=>{u.currentTarget.blur(),a()},title:r,children:e.jsx(g,{icon:n,size:"md"})})}function ie({state:s,exporting:n=!1,restartReason:a=null,playEditRegime:r=null,onPlay:o,onPause:i,onStep:c,onRestart:t,onStop:u,instances:b=null,picker:h=null,options:x=null,placement:d="launcher"}){const f=s!=="stopped",j=s==="paused";return d==="runtime"&&!f?null:e.jsxs(w,{role:"toolbar","aria-label":"Game transport",className:"volter-playbar",gap:2,align:"center",children:[d==="launcher"&&e.jsxs(e.Fragment,{children:[h,x,b!==null&&e.jsx(re,{}),e.jsx(m,{label:"Play",title:f?"Exit Play mode":"Play (run game)",icon:p.transport.play,pressed:f,testId:F,onClick:o})]}),d==="runtime"&&e.jsxs(e.Fragment,{children:[e.jsx(m,{label:"Pause",title:j?"Resume":"Pause",icon:p.transport.pause,disabled:!f||n,pressed:j,onClick:i}),e.jsx(m,{label:"Step one frame",icon:p.transport.step,disabled:!j||n,onClick:c}),e.jsx(I,{}),e.jsx(m,{label:"Restart Game",icon:p.transport.restart,disabled:!f||n,variant:a?"primary":"ghost",testId:"restart-game",onClick:t,title:a??"Restart game (dispose and remount every root without reloading the editor)"}),e.jsx(m,{label:"Stop",icon:p.transport.stop,disabled:!f,onClick:u}),f&&e.jsxs(e.Fragment,{children:[e.jsx(I,{}),e.jsx(oe,{regime:r})]})]})]})}function Pe({placement:s="launcher"}){const n=l.useSyncExternalStore(q,H),{session:a}=P();l.useSyncExternalStore(a.subscribe,a.version,a.version);const r=a.playState(),o=l.useSyncExternalStore(Q,k,k),[,i]=l.useState(0),c=ce(),t=K()?U():null;if(t)return e.jsxs(w,{role:"toolbar","aria-label":"Game transport",className:"volter-playbar",gap:2,align:"center",children:[e.jsx(m,{label:s==="runtime"?t.playing?"Pause ingested game":"Resume ingested game":"Run ingested game",title:t.playing?"Pause ingested game":"Run ingested game",icon:t.playing?p.transport.pause:p.transport.play,pressed:t.playing,testId:F,onClick:()=>{t.playing?t.pause():t.play(),i(d=>d+1)}}),s==="runtime"&&W()&&e.jsx(m,{label:"Stop",title:"Stop the game and return to the scene",icon:p.transport.stop,onClick:()=>E()}),s==="runtime"&&t.canStep&&e.jsx(m,{label:"Step ingested game",title:"Advance the ingested game one frame",icon:p.transport.step,onClick:()=>{t.step(),i(d=>d+1)}})]});const u=c.configurations.find(d=>d.id===c.selectedId)??null,b=u?.kind==="compound"?u.instances??null:null,h=async()=>{const d=await $();if(!d.ok){P().notify({tone:"error",title:d.title,detail:d.detail});return}d.started&&c.refresh(),await ee()},x=()=>{E(),B().then(()=>c.refresh())};return e.jsx(ie,{placement:s,exporting:n,state:r,restartReason:o,playEditRegime:a.playEditRegime(),instances:b,options:e.jsx(le,{}),picker:c.configurations.length>1?e.jsx(de,{run:c,disabled:r!=="stopped"}):null,onPlay:()=>{r!=="stopped"?x():h()},onPause:()=>{r==="paused"?se():te()},onStep:()=>Z(),onRestart:()=>void h(),onStop:()=>x()})}function le(){const{settings:s}=P(),n=l.useSyncExternalStore(s.subscribe,()=>s.get("volter.play.keepPanelsVisible")===!0),[a,r]=l.useState(!1),o=l.useRef(null);return e.jsxs(e.Fragment,{children:[e.jsx(N,{ref:o,"aria-label":"Play options",title:"Play options","aria-expanded":a,"aria-haspopup":"menu",onClick:()=>r(!a),children:e.jsx(g,{icon:D})}),a&&e.jsx(S,{anchorRef:o,onDismiss:()=>r(!1),children:e.jsx(R,{role:"menuitemcheckbox","aria-checked":n,onSelect:()=>{s.set("volter.play.keepPanelsVisible",!n),r(!1)},children:"Keep panels visible during Play"})})]})}const y=G;function ce(){const[s,n]=l.useState([]),[a,r]=l.useState(O),o=l.useCallback(async()=>{const u=await z().catch(()=>[]);n(u)},[]);l.useEffect(()=>{o()},[o]);const i=l.useMemo(()=>[{id:y,kind:y,role:"run",describe:"Mount every root in the host",status:"stopped"},...s.filter(u=>u.role==="run")],[s]),c=_(s,a),t=l.useCallback(u=>{r(u),L(u)},[]);return{configurations:i,selectedId:c,select:t,refresh:o}}function de({run:s,disabled:n}){const a=l.useRef(null),[r,o]=l.useState(!1),i=s.configurations.find(t=>t.id===s.selectedId),c=i?.id===y?"Play":i?.id??"Play";return e.jsxs("div",{className:"volter-playbar-popover-anchor",children:[e.jsxs(A,{ref:a,variant:"ghost",size:"compact","aria-haspopup":"menu","aria-expanded":r,"aria-controls":r?"volter-run-configuration-menu":void 0,"data-testid":"run-configuration-picker",disabled:n,onClick:()=>o(t=>!t),title:"Which configuration Play starts (the manifest's run-role configurations)",children:[e.jsx(v,{variant:"code",children:c}),e.jsx(g,{icon:D,size:"sm"})]}),r&&e.jsx(S,{id:"volter-run-configuration-menu",anchorRef:a,align:"start",gap:4,onDismiss:()=>o(!1),children:s.configurations.map(t=>e.jsxs(R,{role:"menuitemradio","aria-checked":t.id===s.selectedId,"data-testid":`run-configuration-${t.id}`,title:t.describe??void 0,onSelect:()=>{s.select(t.id),o(!1)},children:[t.id===y?"Play":`${t.id} · ${t.kind}`,t.status==="running"?" ●":""]},t.id))})]})}export{Pe as P};
@@ -1,2 +1,2 @@
1
- import{a as b}from"./jsx-runtime-DPjLkJKQ.js";import{r as d}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{ad as O}from"./index-BRJMIUK0.js";import{r as L}from"./studio-environment-DRxxq_QX.js";import{Q as x,V as y,d as C,m as j}from"./three.quarks.esm-C_HmSKXo.js";import{p as z}from"./project-provenance-4ldz-EOG.js";import{O as Q}from"./StageHost-B89HKcvd.js";import{a as M}from"./three-contract-Dkt6PmWY.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./user-data-Bpj7diUS.js";import"./workspace-arrangement-BdAlBwvd.js";import"./KTX2Loader-CaqVE6nY.js";import"./three.module-BLhyNg0e.js";import"./three.core-3arARmh6.js";import"./GLTFLoader-KeoruJgS.js";import"./BufferGeometryUtils-B22h7jo4.js";import"./environment-Dg-YaLsA.js";import"./RoomEnvironment-BkknvS_I.js";import"./EXRLoader-CITMBvGd.js";import"./HDRLoader-BTGuGhVo.js";import"./three-state-DwFE3ay2.js";import"./editor-shell-store-ChLcVeNB.js";import"./output-pass-HurwNl0G.js";import"./Pass-D1MRT672.js";import"./editor-layers-BDJnAAzj.js";import"./entity-object-JmYMfLsx.js";import"./standard-viewport-dressing-BCA51Tum.js";import"./content-bounds-BeuIXKYu.js";import"./hierarchy-marks-Cc_3lxw6.js";import"./preview-renderer-BrYNFV1p.js";import"./renderer-ownership-BovSEcLv.js";import"./live-mixers-B-bwLZ7c.js";import"./live-gesture-lock-DJbrjOqf.js";import"./model-inspection-CXHxrafK.js";import"./three-viewport-presentation-B0z_cECu.js";import"./clip-planes-CnAI6DZn.js";import"./three-TCuY32m_.js";import"./component-instance-root-B0C5oNEm.js";import"./viewport-editor-controls-BYaAZ_Ku.js";import"./model-thumbnail-BEKPWg4l.js";import"./OrbitControls-B13MKuwC.js";import"./LineSegments2-DN9pUfWA.js";import"./three-integration-BdN5Nhsg.js";import"./host-hierarchy-objects-BV3WqU2w.js";import"./layered-pick-kiQf53t5.js";import"./root-stacking-BEd9ZvxC.js";import"./object3d-document-session-registry-DJDEDM0p.js";import"./viewport-door-Bj_ZIP85.js";import"./asset-preview-B1tDziF1.js";import"./bitmap-label-Ct4k6ehY.js";import"./scene-framing-BQt72ZCw.js";import"./source-object3d-authoring-adapter-DF679Ncb.js";import"./three-projection-core-CG01r5Ta.js";import"./editor-presentation-activity-C7SNSmTd.js";import"./transport-strip-CUjNltnb.js";import"./viewport-surface-status-cwCiBGa7.js";function $(r){const t=[],e=new Set;return r.traverse(o=>{if(o.type!=="ParticleEmitter")return;const i=o.system;!i||typeof i.getRendererSettings!="function"||e.has(i)||(e.add(i),t.push(i))}),t}const S=new WeakMap;function h(r){return r!==null&&typeof r=="object"&&!Array.isArray(r)}function E(r){return h(r)?r:null}function w(r,t){t(r);for(const e of r.children??[])w(e,t)}function V(r){if(!h(r))return!1;const t=E(r.object);if(!t)return!1;let e=!1;return w(t,o=>{o.type==="ParticleEmitter"&&h(o.ps)&&o.ps.version!==void 0&&(e=!0)}),e}function B(r){const t=new Map,e=E(r.object);return e&&w(e,o=>{typeof o.uuid=="string"&&t.set(o.uuid,o)}),t}function F(r){const t=new x().parse(r.json),e=B(r.json),o=$(t),i=new Map(o.map(n=>[n.emitter,n])),p=new Map;if(t.traverse(n=>{const f=i.get(n);if(!f)return;const s=e.get(n.uuid);if(!s?.ps)throw new Error(`Native Quarks emitter ${n.name||n.uuid} has no matching JSON node.`);p.set(n,{system:f,json:s})}),p.size===0)throw new Error("The Quarks document contains no loadable emitter.");const m={root:t,originalText:r.text,json:r.json,emitters:p,dirty:!1};return S.set(t,m),m}function J(r){const t=S.get(r);if(!t)throw new Error("Object3D is not a native three.quarks JSON document.");return t}function q(r){for(const t of r.emitters.values())t.system.dispose();S.delete(r.root)}function G(r){const t=J(r);return t.dirty?`${JSON.stringify(t.json,null,2)}
1
+ import{a as b}from"./jsx-runtime-DPjLkJKQ.js";import{r as d}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{af as O}from"./index-C5ZAyrKq.js";import{r as L}from"./studio-environment-R9qXUUcC.js";import{Q as x,V as y,d as C,m as j}from"./three.quarks.esm-C_HmSKXo.js";import{p as z}from"./project-provenance-BGnJXJwa.js";import{O as Q}from"./StageHost-DYfGYwvq.js";import{a as M}from"./three-contract-Dkt6PmWY.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./user-data-C84W0V47.js";import"./workspace-arrangement-DqG5sUns.js";import"./KTX2Loader-CaqVE6nY.js";import"./three.module-BLhyNg0e.js";import"./three.core-3arARmh6.js";import"./GLTFLoader-KeoruJgS.js";import"./BufferGeometryUtils-B22h7jo4.js";import"./environment-Dg-YaLsA.js";import"./RoomEnvironment-BkknvS_I.js";import"./EXRLoader-CITMBvGd.js";import"./HDRLoader-BTGuGhVo.js";import"./three-state-BCACvUtm.js";import"./editor-shell-store-DHVWS8cE.js";import"./output-pass-HurwNl0G.js";import"./Pass-D1MRT672.js";import"./editor-layers-D-CTUqco.js";import"./entity-object-MKYemTFM.js";import"./standard-viewport-dressing-BW-dM_1h.js";import"./content-bounds-DROIchTa.js";import"./hierarchy-marks-BuCO8Ke-.js";import"./preview-renderer-BrYNFV1p.js";import"./renderer-ownership-BovSEcLv.js";import"./live-mixers-B-bwLZ7c.js";import"./live-gesture-lock-DJbrjOqf.js";import"./model-inspection-DvspbmJl.js";import"./three-viewport-presentation-CBzvc2v2.js";import"./clip-planes-CnAI6DZn.js";import"./three-DiL6vMXq.js";import"./component-instance-root-DLI40MiB.js";import"./viewport-editor-controls-BYaAZ_Ku.js";import"./model-thumbnail-BmQs-h6t.js";import"./OrbitControls-B13MKuwC.js";import"./LineSegments2-DN9pUfWA.js";import"./three-integration-DXOFI88n.js";import"./host-hierarchy-objects-BV3WqU2w.js";import"./layered-pick-CAVQMPI7.js";import"./root-stacking-BEd9ZvxC.js";import"./object3d-document-session-registry-CMRJdFp6.js";import"./viewport-door-BARIpMu-.js";import"./asset-preview-DxlSdRZn.js";import"./bitmap-label-Ct4k6ehY.js";import"./scene-framing-DkZKDwH3.js";import"./source-object3d-authoring-adapter-CvmFpSUj.js";import"./three-projection-core-B7Lf8tOp.js";import"./editor-presentation-activity-CqJH4G9t.js";import"./transport-strip-xCg94CuI.js";import"./viewport-surface-status-TUfhXKR9.js";function $(r){const t=[],e=new Set;return r.traverse(o=>{if(o.type!=="ParticleEmitter")return;const i=o.system;!i||typeof i.getRendererSettings!="function"||e.has(i)||(e.add(i),t.push(i))}),t}const S=new WeakMap;function h(r){return r!==null&&typeof r=="object"&&!Array.isArray(r)}function E(r){return h(r)?r:null}function w(r,t){t(r);for(const e of r.children??[])w(e,t)}function V(r){if(!h(r))return!1;const t=E(r.object);if(!t)return!1;let e=!1;return w(t,o=>{o.type==="ParticleEmitter"&&h(o.ps)&&o.ps.version!==void 0&&(e=!0)}),e}function B(r){const t=new Map,e=E(r.object);return e&&w(e,o=>{typeof o.uuid=="string"&&t.set(o.uuid,o)}),t}function F(r){const t=new x().parse(r.json),e=B(r.json),o=$(t),i=new Map(o.map(n=>[n.emitter,n])),p=new Map;if(t.traverse(n=>{const f=i.get(n);if(!f)return;const s=e.get(n.uuid);if(!s?.ps)throw new Error(`Native Quarks emitter ${n.name||n.uuid} has no matching JSON node.`);p.set(n,{system:f,json:s})}),p.size===0)throw new Error("The Quarks document contains no loadable emitter.");const m={root:t,originalText:r.text,json:r.json,emitters:p,dirty:!1};return S.set(t,m),m}function J(r){const t=S.get(r);if(!t)throw new Error("Object3D is not a native three.quarks JSON document.");return t}function q(r){for(const t of r.emitters.values())t.system.dispose();S.delete(r.root)}function G(r){const t=J(r);return t.dirty?`${JSON.stringify(t.json,null,2)}
2
2
  `:t.originalText}const U=new Set(["particles.duration","particles.looping","particles.prewarm","particles.worldSpace","particles.startLife","particles.startSpeed","particles.startRotation","particles.startSize","particles.startColor","particles.emissionOverTime","particles.emissionOverDistance"]);function W(){return[{path:"particles.duration",label:"Duration",type:"number",group:"Emission"},{path:"particles.looping",label:"Looping",type:"boolean",group:"Emission"},{path:"particles.prewarm",label:"Prewarm",type:"boolean",group:"Emission"},{path:"particles.emissionOverTime",label:"Rate over time",type:"json",group:"Emission"},{path:"particles.emissionOverDistance",label:"Rate over distance",type:"json",group:"Emission"},{path:"particles.startLife",label:"Lifetime",type:"json",group:"Start"},{path:"particles.startSpeed",label:"Speed",type:"json",group:"Start"},{path:"particles.startRotation",label:"Rotation",type:"json",group:"Start"},{path:"particles.startSize",label:"Size",type:"json",group:"Start"},{path:"particles.startColor",label:"Color",type:"json",group:"Start"},{path:"particles.worldSpace",label:"World space",type:"boolean",group:"Simulation"},{path:"particles.shape",label:"Shape",type:"string",readonly:!0,group:"Shape"},{path:"particles.behaviors",label:"Modules",type:"json",readonly:!0,group:"Behavior"},{path:"particles.renderMode",label:"Native render mode",type:"number",readonly:!0,group:"Renderer"}]}function u(r,t){if(!h(r)||typeof r.type!="string")throw new Error(`${t} must be a native quarks function JSON object with a type.`);return r}function k(r,t){const{system:e}=r;switch(t){case"particles.duration":return e.duration;case"particles.looping":return e.looping;case"particles.prewarm":return e.prewarm;case"particles.worldSpace":return e.worldSpace;case"particles.startLife":return e.startLife.toJSON();case"particles.startSpeed":return e.startSpeed.toJSON();case"particles.startRotation":return e.startRotation.toJSON();case"particles.startSize":return e.startSize.toJSON();case"particles.startColor":return e.startColor.toJSON();case"particles.emissionOverTime":return e.emissionOverTime.toJSON();case"particles.emissionOverDistance":return e.emissionOverDistance.toJSON();case"particles.shape":return e.emitterShape.type;case"particles.behaviors":return e.behaviors.map(o=>o.type);case"particles.renderMode":return e.renderMode;default:return}}function g(r){return r.slice(10)}function N(r,t,e){const{system:o}=r;switch(t){case"particles.duration":{const i=Number(e);if(!Number.isFinite(i)||i<=0)throw new Error("Particle duration must be a positive finite number.");o.duration=i;break}case"particles.looping":o.looping=!!e;break;case"particles.prewarm":o.prewarm=!!e;break;case"particles.worldSpace":o.worldSpace=!!e;break;case"particles.startLife":o.startLife=y(u(e,"Lifetime"));break;case"particles.startSpeed":o.startSpeed=y(u(e,"Speed"));break;case"particles.startRotation":o.startRotation=j(u(e,"Rotation"));break;case"particles.startSize":o.startSize=j(u(e,"Size"));break;case"particles.startColor":o.startColor=C(u(e,"Color"));break;case"particles.emissionOverTime":o.emissionOverTime=y(u(e,"Rate over time"));break;case"particles.emissionOverDistance":o.emissionOverDistance=y(u(e,"Rate over distance"));break;default:throw new Error(`Particle field ${t} is read-only.`)}r.json.ps[g(t)]=e,o.restart()}function H(r,t,e,o){N(r,t,e),r.json.ps[g(t)]=o}function I(r){return r===void 0?void 0:JSON.parse(JSON.stringify(r))}const _=({root:r,defaultAdapter:t,commit:e})=>{const o=J(r),i=new Set,p=()=>{for(const s of i)s()},m=s=>{const a=M(t.hierarchy,s);return a?o.emitters.get(a)??null:null},n={properties:s=>[...t.inspector?.properties(s)??[],...m(s)?W():[]],get:(s,a)=>{const c=m(s);return c&&a.startsWith("particles.")?k(c,a):t.inspector?.get(s,a)},set:async(s,a,c)=>{const l=m(s);if(!l||!U.has(a)){await t.inspector?.set(s,a,c);return}const v=k(l,a),T=g(a),R=I(l.json.ps?.[T]),P=o.dirty;try{N(l,a,c),o.dirty=!0,p(),await e(`Edit ${l.system.emitter.name||"Particle Emitter"}`)}catch(D){throw H(l,a,v,R),o.dirty=P,p(),D}}};return{adapter:{capabilities:{...t.capabilities,inspectorFields:!0,persist:!0},provenance:{source:"document",label:"three.quarks JSON",detail:"The hierarchy and emitter fields are the native three.quarks Object3D JSON document."},hierarchy:t.hierarchy,...t.selection?{selection:t.selection}:{},...t.transforms?{transforms:t.transforms}:{},inspector:n,subscribe:s=>{i.add(s);const a=t.subscribe?.(s)??(()=>{});return()=>{i.delete(s),a()}}},dispose:()=>i.clear()}};async function er(r,t){const e=await fetch(L(r),{cache:"no-store",...t?{signal:t}:{}});if(!e.ok)throw new Error(`Could not load ${r}: HTTP ${e.status}.`);const o=await e.text();let i;try{i=JSON.parse(o)}catch{return null}return V(i)?{text:o,json:i,projectPath:z(r)}:null}function or({documentId:r,assetPath:t,displayName:e,active:o,source:i}){const[p,m]=d.useState(null),[n,f]=d.useState(null);d.useEffect(()=>{if(!o){m(null);return}let c=null;try{c=F(i),m(c),f(null)}catch(l){f(l instanceof Error?l.message:String(l))}return()=>{c&&q(c)}},[o,i]);const s=d.useCallback(()=>{if(!p)throw new Error(`Particle asset ${t} is not loaded.`);return{root:p.root,dispose(){}}},[p,t]),a=d.useMemo(()=>({label:`Edit ${e}`,resources:[{path:i.projectPath,contentType:"application/json",serialize:({root:c})=>G(c)}]}),[e,i.projectPath]);return n?b.jsx("div",{role:"alert",style:{padding:20,color:O.semantic.danger},children:n}):p?b.jsx(Q,{documentId:r,sourcePath:t,displayName:e,build:s,active:o,assetType:"particles",persistence:a,authoring:_,dressing:{grid:!0}}):b.jsxs("div",{style:{padding:20,color:O.content.muted},children:["Loading ",e,"…"]})}export{or as QuarksAssetDocument,V as isNativeQuarksJson,er as loadNativeQuarksJsonSource};
@@ -0,0 +1 @@
1
+ import{a as t}from"./jsx-runtime-DPjLkJKQ.js";import{K as V,da as B,db as F,dc as w,dd as I,cD as W,a0 as R,aL as j,a1 as S,de as D,df as H,dg as T,dh as A,di as P,cR as N,aM as G,dj as M,cS as f}from"./index-C5ZAyrKq.js";import{r as h}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{s as K,g as L,a as X,b as Y,c as _,d as y,f as $,t as q}from"./react-story-board-CCm2Opwn.js";const z={fill:null,desktop:{width:1440,height:900},tablet:{width:768,height:1024},mobile:{width:390,height:844}};function J({boardViewport:e,containerRef:r,selectViewport:n,viewportValue:d}){return t.jsxs(t.Fragment,{children:[t.jsxs(A,{"aria-label":"Responsive viewport",title:e?.locked?"Viewport is locked by this story’s globals.viewport":"Responsive viewport",value:d,disabled:e?.locked===!0,onChange:o=>n(o.target.value),className:"volter-react-viewport-select",children:[t.jsx("option",{value:"fill",children:"Responsive"}),e?e.choices.map(o=>t.jsxs("option",{value:o.id,children:[o.label," · ",o.width,"×",o.height]},o.id)):t.jsxs(t.Fragment,{children:[t.jsx("option",{value:"desktop",children:"Desktop · 1440×900"}),t.jsx("option",{value:"tablet",children:"Tablet · 768×1024"}),t.jsx("option",{value:"mobile",children:"Mobile · 390×844"})]})]}),e&&t.jsx(j,{"aria-label":"Rotate viewport",title:e.locked?"Viewport is locked by this story’s globals.viewport":"Rotate viewport",size:"comfortable",disabled:e.locked,onClick:()=>q(r.current),children:t.jsx(S,{icon:P,size:"md"})})]})}function at({containerRef:e,context:r,boardOnly:n=!1}){const d=V();h.useSyncExternalStore(d.subscribe,d.getSnapshot);const o=h.useSyncExternalStore(B,F),l=h.useSyncExternalStore(K,L),u=h.useSyncExternalStore(X,()=>Y(e.current),()=>null),m=h.useCallback(i=>{const s=e.current;if(!s)return;const a=Math.min(4,Math.max(.1,i)),p=s.clientWidth/2,b=s.clientHeight/2,g=(p-o.x)/o.zoom,Z=(b-o.y)/o.zoom;w(p-g*a,b-Z*a,a)},[e,o]),c=h.useCallback(()=>{const i=e.current,s=[...d.selectedEntityIds].at(-1);if(!i||!s)return;const a=r?.adapter.rects?.rect(s);if(!a||a.width<=0||a.height<=0)return;const p=Math.max(1,i.clientWidth-96),b=Math.max(1,i.clientHeight-96),g=Math.min(4,Math.max(.1,Math.min(p/a.width,b/a.height)));w(i.clientWidth/2-(a.x+a.width/2)*g,i.clientHeight/2-(a.y+a.height/2)*g,g)},[e,r,d]),x=h.useCallback(i=>{const s=e.current;if(u){_(s,i==="fill"?null:i);return}const a=z[i];if(!s||a===null){y(null,null),w(0,0,1);return}y(a.width,a.height);const p=Math.min(1,Math.max(.1,Math.min((s.clientWidth-96)/a.width,(s.clientHeight-96)/a.height)));w((s.clientWidth-a.width*p)/2,(s.clientHeight-a.height*p)/2,p)},[u,e]),k=h.useCallback(()=>{const i=e.current;i&&$(i)},[e]),v=u!==null,C=r?.kind==="dom"&&!!r.adapter.rects;if(n?!v:!C)return null;const E=u?u.selectedViewportId??"fill":Object.entries(z).find(([,i])=>i===null?l.width===null:i.width===l.width&&i.height===l.height)?.[0]??"fill";return t.jsxs(t.Fragment,{children:[!v&&l.width!==null&&l.height!==null&&t.jsx("div",{"data-testid":"react-canvas-device-frame",style:{position:"absolute",left:0,top:0,zIndex:0,width:l.width,height:l.height,transform:I(o),transformOrigin:"0 0",pointerEvents:"none",background:"#fff",boxShadow:"0 0 0 1px #ffffff40, 0 8px 30px #0009"}}),t.jsxs(W,{label:n?"2D component board view":"React canvas view","data-testid":n?"canvas-board-zoom-controls":"react-canvas-zoom-controls",...n?{"data-board-zoom":""}:{},"data-volter-canvas-navigation-ignore":"true",className:"volter-react-canvas-controls",children:[!n&&t.jsx(J,{boardViewport:u,containerRef:e,selectViewport:x,viewportValue:E}),v&&t.jsx(R,{variant:"ghost","aria-label":"Fit story board",title:"Fit all stories",size:"comfortable",onClick:k,children:"Fit board"}),t.jsx(j,{"aria-label":"Zoom out",title:"Zoom out",size:"comfortable",onClick:()=>m(o.zoom/1.2),children:t.jsx(S,{icon:D,size:"md"})}),t.jsx(Q,{zoom:o.zoom,zoomTo:m,...v?{fit:k}:{},...!n&&d.selectedEntityIds.size>0?{toSelection:c}:{}}),t.jsx(j,{"aria-label":"Zoom in",title:"Zoom in",size:"comfortable",onClick:()=>m(o.zoom*1.2),children:t.jsx(S,{icon:H,size:"md"})}),!n&&t.jsx(j,{"aria-label":"Zoom to selection",title:"Zoom to selection",size:"comfortable",onClick:c,children:t.jsx(S,{icon:T,size:"md"})})]})]})}function Q({zoom:e,zoomTo:r,fit:n,toSelection:d}){const[o,l]=h.useState(!1),u=h.useRef(null),m=c=>()=>{c(),l(!1)};return t.jsxs(t.Fragment,{children:[t.jsxs(R,{ref:u,variant:"ghost","aria-label":"Zoom","aria-haspopup":"menu","aria-expanded":o,title:"Zoom",size:"comfortable",onClick:()=>l(!o),children:[Math.round(e*100),"%"]}),o&&t.jsxs(N,{anchorRef:u,align:"end",clamp:!0,"aria-label":"Zoom",onDismiss:()=>l(!1),children:[t.jsx("div",{style:{padding:"4px 8px"},children:t.jsx(G,{"aria-label":"Zoom percentage",defaultValue:String(Math.round(e*100)),onKeyDown:c=>{if(c.key!=="Enter")return;const x=Number.parseFloat(c.currentTarget.value);Number.isFinite(x)&&x>0&&(r(x/100),l(!1))}})}),t.jsx(M,{}),t.jsx(f,{onSelect:m(()=>r(e*1.2)),children:"Zoom in"}),t.jsx(f,{onSelect:m(()=>r(e/1.2)),children:"Zoom out"}),n?t.jsx(f,{onSelect:m(n),children:"Zoom to fit"}):null,d?t.jsx(f,{onSelect:m(d),children:"Zoom to selection"}):null,t.jsx(M,{}),[.5,1,2].map(c=>t.jsx(f,{onSelect:m(()=>r(c)),children:`Zoom to ${c*100}%`},c))]})]})}export{at as R};