@volter/game-editor 0.5.147 → 0.5.148

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 (295) hide show
  1. package/BUNDLED_NOTICES +22 -22
  2. package/catalog/entries/blender.json +2 -2
  3. package/catalog/entries/music.json +2 -2
  4. package/dist/.vite/manifest.json +2118 -2118
  5. package/dist/assets/{AssetBudgetPanel-_9o7NNOc.js → AssetBudgetPanel-DI0g45o6.js} +3 -3
  6. package/dist/assets/{AudioViewer-B_cUBoy_.js → AudioViewer-RQXHtwn_.js} +1 -1
  7. package/dist/assets/{CanvasBoardDocument-C8eTtH_s.js → CanvasBoardDocument-2d_2bByW.js} +1 -1
  8. package/dist/assets/{CanvasSceneViewport-Bs1qn2f4.js → CanvasSceneViewport-Cq9Rne74.js} +1 -1
  9. package/dist/assets/{ColorInput-BPXgNXFu.js → ColorInput-DmVDP2zu.js} +1 -1
  10. package/dist/assets/{ColorPicker-Bbz_9vJC.js → ColorPicker-DjRovCY8.js} +1 -1
  11. package/dist/assets/{EntityModelDocument-QlbOfLaH.js → EntityModelDocument-Cz1B8BAd.js} +1 -1
  12. package/dist/assets/{EnvironmentAssetDocument-utBb74BM.js → EnvironmentAssetDocument-zQ6QiybD.js} +1 -1
  13. package/dist/assets/{GameplaySessionTimeline-V14di22j.js → GameplaySessionTimeline-N0qsMnsB.js} +1 -1
  14. package/dist/assets/{ImageViewer-BkMo0IPP.js → ImageViewer-o3xgwt_C.js} +1 -1
  15. package/dist/assets/InspectorObjectPreview-DCm_fpaX.js +1 -0
  16. package/dist/assets/{JsonAssetDocument-BLuaJWLP.js → JsonAssetDocument-Bi3afahd.js} +1 -1
  17. package/dist/assets/{LiveModuleDocument-puZvN5U7.js → LiveModuleDocument-dskDLSfO.js} +1 -1
  18. package/dist/assets/{LutAssetDocument-UaemlCXE.js → LutAssetDocument-QI6jibvi.js} +1 -1
  19. package/dist/assets/{ModelAssetDocument-Dybr1un_.js → ModelAssetDocument-BIypvyrV.js} +1 -1
  20. package/dist/assets/{NonThreeAuthoringBootstrap-CS8CKOgp.js → NonThreeAuthoringBootstrap-BoD-XNKp.js} +1 -1
  21. package/dist/assets/{Object3DDocumentToolbar-CySnXf5X.js → Object3DDocumentToolbar-BkCx4nnR.js} +1 -1
  22. package/dist/assets/Object3DDocumentViewport-kiWq-HRk.js +2 -0
  23. package/dist/assets/{Object3DPreview-D3U756t8.js → Object3DPreview-Cei8NtWB.js} +1 -1
  24. package/dist/assets/{OnlineAssetDetail-DqBKgHjE.js → OnlineAssetDetail-CFUZ68hN.js} +1 -1
  25. package/dist/assets/{PlayBar-CTGe_1DB.js → PlayBar-DbpfkeYy.js} +1 -1
  26. package/dist/assets/{QuarksAssetDocument-BHkMS-Ga.js → QuarksAssetDocument-DItDx-_4.js} +1 -1
  27. package/dist/assets/{ReactCanvasControls-xRR7oNNu.js → ReactCanvasControls-CB5tWbxO.js} +1 -1
  28. package/dist/assets/{RootSelectionOverlay-CryhPQKQ.js → RootSelectionOverlay-CIgWWLcm.js} +1 -1
  29. package/dist/assets/{ShaderAssetDocument-DZAEoqUe.js → ShaderAssetDocument-CqU-zosC.js} +1 -1
  30. package/dist/assets/{ShadowEditor-Dt02ONTx.js → ShadowEditor-ec-DMJBc.js} +1 -1
  31. package/dist/assets/{SourceAssetViewer-BgdKlPbk.js → SourceAssetViewer-Dp7N463i.js} +1 -1
  32. package/dist/assets/StageHost-CpYvUBek.js +2 -0
  33. package/dist/assets/{StoryPreviewMount-fy1HH3EA.js → StoryPreviewMount-BJOjvIqW.js} +1 -1
  34. package/dist/assets/{ThreeBoardDocument-BThcmBaW.js → ThreeBoardDocument-BxlETxqI.js} +2 -2
  35. package/dist/assets/{ThreeIsolationSceneContent-BqXwlAKo.js → ThreeIsolationSceneContent-QJYF_89J.js} +1 -1
  36. package/dist/assets/{ToolObject3DPreview-BMit2E5q.js → ToolObject3DPreview-DlOwG5Gz.js} +1 -1
  37. package/dist/assets/{Toolbar-CldLgNy0.js → Toolbar-NovaxjZw.js} +1 -1
  38. package/dist/assets/{TransientHint-Dd93nBDB.js → TransientHint-DsEyJ49C.js} +1 -1
  39. package/dist/assets/{VideoViewer-BUWJvD5B.js → VideoViewer-B1RgcW6B.js} +1 -1
  40. package/dist/assets/{ViewportShadingMenu-CA7sjFvW.js → ViewportShadingMenu-_T__Yebl.js} +1 -1
  41. package/dist/assets/{active-ingest-CAtltUt6.js → active-ingest-D4Fgwnr9.js} +2 -2
  42. package/dist/assets/{animation-clock-DuRNpOkY.js → animation-clock-3EbJMdBu.js} +1 -1
  43. package/dist/assets/{animation-mixers.service-LWUg33iB.js → animation-mixers.service-DodRW3sN.js} +1 -1
  44. package/dist/assets/{animation-timeline.utility-Dtqrn8Df.js → animation-timeline.utility-CNYXoYTN.js} +1 -1
  45. package/dist/assets/{asset-budget-asset.menu-DplPgcQF.js → asset-budget-asset.menu-DXavgXAA.js} +1 -1
  46. package/dist/assets/{asset-budget.action-DWQ8Z03a.js → asset-budget.action-DUnVbFZv.js} +1 -1
  47. package/dist/assets/{asset-budget.document-KvHd_B-b.js → asset-budget.document-C0n1_wCE.js} +1 -1
  48. package/dist/assets/{asset-budget.menu-Dq0xjU7T.js → asset-budget.menu-BmMvxCQU.js} +1 -1
  49. package/dist/assets/{asset-editor-persistence-C2FFcf1f.js → asset-editor-persistence-JSjNK70f.js} +1 -1
  50. package/dist/assets/{asset-loaders-D-qAq39L.js → asset-loaders-D3Mpum3d.js} +1 -1
  51. package/dist/assets/{asset-preview-BBNp5wTD.js → asset-preview-Cv10Vw0T.js} +1 -1
  52. package/dist/assets/{audio-unlock.service-5ISKsfGk.js → audio-unlock.service-oQBqcE53.js} +1 -1
  53. package/dist/assets/{audio.utility-CcbZdTbr.js → audio.utility-CsYQln3q.js} +1 -1
  54. package/dist/assets/autoplay.service-eV7kCaZW.js +1 -0
  55. package/dist/assets/{babylon-authoring-adapter-Bi76ymde.js → babylon-authoring-adapter-D_ngPmX4.js} +1 -1
  56. package/dist/assets/{binding-resolver-BT-wlV_S.js → binding-resolver-BFnW68UJ.js} +2 -2
  57. package/dist/assets/{blender-node-editor.document-8KO07qK8.js → blender-node-editor.document-0viWx3Yw.js} +1 -1
  58. package/dist/assets/{blender-properties-tab-BDIFN9Ew.js → blender-properties-tab-xTEDsilA.js} +1 -1
  59. package/dist/assets/{blender-runtime-host-DayNDAb4.js → blender-runtime-host-D0kmlbFS.js} +1 -1
  60. package/dist/assets/{blender-runtime-skin-SYIUtq-g.js → blender-runtime-skin-RjdCYOfv.js} +1 -1
  61. package/dist/assets/{blender-runtime.document-DS9a1xTA.js → blender-runtime.document-WAsxJxSx.js} +1 -1
  62. package/dist/assets/{blender-screenshot.menu-NYHgjiD2.js → blender-screenshot.menu-BWHEGmJ1.js} +1 -1
  63. package/dist/assets/{blender-timeline.document-BecxD07e.js → blender-timeline.document-Dm7M2Jlt.js} +1 -1
  64. package/dist/assets/{blender-uv-editor.document-zlSQPhnI.js → blender-uv-editor.document-BMFU4db1.js} +1 -1
  65. package/dist/assets/{blender-version.status-DV13oTI-.js → blender-version.status-DkUs0qtF.js} +1 -1
  66. package/dist/assets/{blender.command-BxmGWW-J.js → blender.command-BEx6wTpY.js} +1 -1
  67. package/dist/assets/{board-guides-D30dJhS9.js → board-guides-CYtSl4R-.js} +1 -1
  68. package/dist/assets/{bridge.command-DLHZ9N6O.js → bridge.command-CI3YW_W5.js} +3 -3
  69. package/dist/assets/{browserAll-d1LPFZ8a.js → browserAll-6E4xNcD3.js} +1 -1
  70. package/dist/assets/{build-player.document-D9USjzns.js → build-player.document-DxVlQSkX.js} +1 -1
  71. package/dist/assets/{build-profiles.document-Dx_ot-Fc.js → build-profiles.document-BCb18OFY.js} +1 -1
  72. package/dist/assets/{build-progress.status-CpO5yV4P.js → build-progress.status-ZLJtzQti.js} +1 -1
  73. package/dist/assets/{build-session-BUzPoMeJ.js → build-session-CSoKokzk.js} +1 -1
  74. package/dist/assets/{build.action-DDRWxEp_.js → build.action-B-CwCM9M.js} +1 -1
  75. package/dist/assets/{build.command-Sr16CJ5Q.js → build.command-CPkQ9A5y.js} +1 -1
  76. package/dist/assets/{build.header-Dio0dYmL.js → build.header-DHG0KzLB.js} +1 -1
  77. package/dist/assets/{build.menu-B4HojN0K.js → build.menu-CTVByVSF.js} +1 -1
  78. package/dist/assets/{build.service-nJA_hPeY.js → build.service-Dekj4-qW.js} +1 -1
  79. package/dist/assets/{camera-cFM_BzB5.js → camera-Dgx8dHEw.js} +1 -1
  80. package/dist/assets/{camera-runtime.inspector-VTkCXhVn.js → camera-runtime.inspector-Q-lu6y25.js} +1 -1
  81. package/dist/assets/{canvas-design-mount-CwIE6jIe.js → canvas-design-mount-DdyOOQ0N.js} +3 -3
  82. package/dist/assets/{canvas-entry-runtime-BHwunMIZ.js → canvas-entry-runtime-C4C8DEMC.js} +2 -2
  83. package/dist/assets/{canvas-preview-frames-DiR_1Nkl.js → canvas-preview-frames-DZF00OuG.js} +1 -1
  84. package/dist/assets/{canvas-story-capture.service-DFb_9Gj7.js → canvas-story-capture.service-B2VnglBw.js} +2 -2
  85. package/dist/assets/{capability-coverage-DXpPzeSq.js → capability-coverage-DNNkqHqV.js} +1 -1
  86. package/dist/assets/{collaboration-presence-BPXi2uoB.js → collaboration-presence-Cmy5oLLv.js} +1 -1
  87. package/dist/assets/{collider-BDhZ2WGU.js → collider-Q86m-MJ4.js} +1 -1
  88. package/dist/assets/{component-board.service-F9QInLxP.js → component-board.service-67QOm8o8.js} +2 -2
  89. package/dist/assets/{component-board.service-1nXmWiyO.js → component-board.service-Cm1jFfAs.js} +2 -2
  90. package/dist/assets/{component-board.service-oj_l1OCl.js → component-board.service-lk4IDxNR.js} +2 -2
  91. package/dist/assets/{component-contracts.service-7AclY-3L.js → component-contracts.service-CckfOv8i.js} +1 -1
  92. package/dist/assets/{component-instance-root-s2oNaFgM.js → component-instance-root-1flAx5GG.js} +1 -1
  93. package/dist/assets/{component-verbs.command-BedshcPk.js → component-verbs.command-D8_gWXxz.js} +1 -1
  94. package/dist/assets/{component-verbs.service-BUPMTSK7.js → component-verbs.service-CBUHF6yL.js} +1 -1
  95. package/dist/assets/{config-CONJQ1-s.js → config-DPVwrRtK.js} +2 -2
  96. package/dist/assets/{configurations-Qo3roALR.js → configurations-C7EcW8_l.js} +1 -1
  97. package/dist/assets/{connection.status-CwOzBKjh.js → connection.status-BMjHaNI_.js} +1 -1
  98. package/dist/assets/{constraints.inspector-CodiCDyu.js → constraints.inspector-jwr8ukgj.js} +1 -1
  99. package/dist/assets/{content-bounds-CgU8GC_V.js → content-bounds-dSublDNs.js} +1 -1
  100. package/dist/assets/{contract-system-adapters-DQy4r2Sz.js → contract-system-adapters-BQNVqs4f.js} +1 -1
  101. package/dist/assets/{coverage.service-BG-gGB1m.js → coverage.service-BWJD12n1.js} +1 -1
  102. package/dist/assets/{create-runtime-DwJnXcQn.js → create-runtime-oZKoEar8.js} +1 -1
  103. package/dist/assets/{curve--9dHvlxI.js → curve-CsOhAqes.js} +1 -1
  104. package/dist/assets/{data-asset-B63zZ6i5.js → data-asset-BWTGTGff.js} +1 -1
  105. package/dist/assets/{data-ref-Bx2EeAG-.js → data-ref-lyzr3tOh.js} +1 -1
  106. package/dist/assets/{debug-bridge-DSKtmhFu.js → debug-bridge-D5EF7ZfY.js} +1 -1
  107. package/dist/assets/{debug-registry-C_2eNpnk.js → debug-registry-CVH5XeWF.js} +1 -1
  108. package/dist/assets/{deferred-ingest-play-5LkQpgbY.js → deferred-ingest-play-yi5lfNFg.js} +2 -2
  109. package/dist/assets/{design-time-canvas-mount-BkG5N9yg.js → design-time-canvas-mount-DB9SaLud.js} +2 -2
  110. package/dist/assets/{design-time-layers-CfsKfgXx.js → design-time-layers-alMSsUhP.js} +1 -1
  111. package/dist/assets/{design-time-mount.service-CrLbOI5D.js → design-time-mount.service-BQlWAKk7.js} +2 -2
  112. package/dist/assets/{design-time-mount.service-CfROK4Tk.js → design-time-mount.service-BsIda9Cu.js} +2 -2
  113. package/dist/assets/{design-time-react-mount-y3Mxm6MS.js → design-time-react-mount-BoJK6gGv.js} +1 -1
  114. package/dist/assets/{document-preview-three-BtJ5kvQP.js → document-preview-three-BGg5OQE8.js} +1 -1
  115. package/dist/assets/{dom-authoring-adapter-Ii9lsQEC.js → dom-authoring-adapter-CYMAD5rz.js} +1 -1
  116. package/dist/assets/{draco3d-DVpFbiT2.js → draco3d-DXqH43Rn.js} +1 -1
  117. package/dist/assets/{edit-mode-audio.service-DOptSpox.js → edit-mode-audio.service-BgIBi7W4.js} +1 -1
  118. package/dist/assets/{edit-mode-authoring-bbDKsmQY.js → edit-mode-authoring-BArQSLX9.js} +1 -1
  119. package/dist/assets/{edit-mode-networking.service-CQ9EIHxx.js → edit-mode-networking.service-BCwxppAY.js} +1 -1
  120. package/dist/assets/{editor-api-So5QLNrp.js → editor-api-BEr0uD9c.js} +1 -1
  121. package/dist/assets/{editor-layers-DOpEK7EI.js → editor-layers-DLK7x9-2.js} +1 -1
  122. package/dist/assets/{editor-shell-store-B6mGVxE1.js → editor-shell-store-DNj2SAA-.js} +1 -1
  123. package/dist/assets/{entity-object-BP-l2G3P.js → entity-object-DS85fxlv.js} +1 -1
  124. package/dist/assets/{extend-BUAYCcQw.js → extend-mxxRsvt_.js} +1 -1
  125. package/dist/assets/{fork-menu-B5OZsFn3.js → fork-menu-Z_gK0xNf.js} +1 -1
  126. package/dist/assets/{frame-debugger-store-Dcd0xk80.js → frame-debugger-store-B_UYAUu1.js} +1 -1
  127. package/dist/assets/{game-contract-seams-BcyjMWgg.js → game-contract-seams-Dyigsh0u.js} +1 -1
  128. package/dist/assets/{game-css-scope-transform-BMZXZGxa.js → game-css-scope-transform-BHYf-IOI.js} +1 -1
  129. package/dist/assets/{game-document.service-B-XkgDDF.js → game-document.service-BpqMzC3a.js} +1 -1
  130. package/dist/assets/{game-eval.command-CDIobHKk.js → game-eval.command-BeKSHxqt.js} +1 -1
  131. package/dist/assets/{game-module-access-Bco3xfHz.js → game-module-access-CVFSH8-V.js} +1 -1
  132. package/dist/assets/{game-network-D6ys6tk3.js → game-network-DNKxv1nY.js} +3 -3
  133. package/dist/assets/{gameplay-export-Bn1Gry1S.js → gameplay-export-DNJDVsQi.js} +1 -1
  134. package/dist/assets/{gameplay-replay-F6SzY13b.js → gameplay-replay-aiB-Qo8C.js} +1 -1
  135. package/dist/assets/{gameplay.command-B1zu5xn5.js → gameplay.command-BdrC5vVC.js} +1 -1
  136. package/dist/assets/{generation-jobs-DOejKlR8.js → generation-jobs-fNTtBNQc.js} +1 -1
  137. package/dist/assets/{generation.service-Dp-2Bugz.js → generation.service-CXIeZy07.js} +1 -1
  138. package/dist/assets/{generations-Cfg5VeT_.js → generations-CX21I958.js} +1 -1
  139. package/dist/assets/{generations.status-B71qbHkF.js → generations.status-C1Ujk6-o.js} +1 -1
  140. package/dist/assets/{hierarchy-marks-C0IFZJpJ.js → hierarchy-marks-DhX6Vk-i.js} +1 -1
  141. package/dist/assets/{hosted-asset-materialization-C13_NQiy.js → hosted-asset-materialization-t17v0Xkj.js} +1 -1
  142. package/dist/assets/{index-BUhh3Rzd.js → index--8HU1q_5.js} +1 -1
  143. package/dist/assets/{index-B2kLsykv.js → index-BU577fs0.js} +1 -1
  144. package/dist/assets/{index-D8WZNJyr.js → index-Cuhs4tVm.js} +7 -7
  145. package/dist/assets/{index-DY0KD7bP.js → index-CzDvol4B.js} +1 -1
  146. package/dist/assets/{index-Zh2eigf4.js → index-DYrCFrsf.js} +1 -1
  147. package/dist/assets/{index-CBXS7zwS.js → index-DZjiXj41.js} +1 -1
  148. package/dist/assets/{index-DtG2FYKX.js → index-DzDRMJf-.js} +2 -2
  149. package/dist/assets/{index-DaJitWBP.js → index-bS0Kul4Y.js} +1 -1
  150. package/dist/assets/{index-CZN6xSZz.js → index-c6mW8K_6.js} +1 -1
  151. package/dist/assets/{inference-diagnostics-BxYSTviL.js → inference-diagnostics-3xRLuYmi.js} +1 -1
  152. package/dist/assets/{ingest-boot-viewport-CeCgIUN-.js → ingest-boot-viewport-B8rHxLgp.js} +1 -1
  153. package/dist/assets/{ingest-siblings-DYy4cVYn.js → ingest-siblings-DbW7-3Xl.js} +1 -1
  154. package/dist/assets/{ingest-source-persistence-DUR3zkkK.js → ingest-source-persistence-BM-FkIzu.js} +1 -1
  155. package/dist/assets/{ingest.service-Dci3nThx.js → ingest.service-D4H8JPI1.js} +1 -1
  156. package/dist/assets/{inspect-DZZVf2Cd.js → inspect-DeDkLmgU.js} +1 -1
  157. package/dist/assets/instances.command-DEZnsrzo.js +1 -0
  158. package/dist/assets/{json-history-resource-zw9b6Y8f.js → json-history-resource-BAH1mnK3.js} +1 -1
  159. package/dist/assets/{layered-pick-xWoyV-89.js → layered-pick-C8mwQ6Rr.js} +1 -1
  160. package/dist/assets/{light-DIoE0fX1.js → light-EFAzwQ8h.js} +1 -1
  161. package/dist/assets/{live-project-verbs-BXEeauA6.js → live-project-verbs-CJSPaw8A.js} +1 -1
  162. package/dist/assets/{machine.document-Nt7qJJnb.js → machine.document-CYWYYFBQ.js} +1 -1
  163. package/dist/assets/{machines.finder-DSRcplPO.js → machines.finder-ChjFAyM8.js} +1 -1
  164. package/dist/assets/{material-factory-Bd8GPiy9.js → material-factory-C_UXoW29.js} +1 -1
  165. package/dist/assets/{material-xp-yOoDf.js → material-sIRZzUep.js} +1 -1
  166. package/dist/assets/{mesh-CKHHDEgo.js → mesh-Bf1LlFIk.js} +1 -1
  167. package/dist/assets/{model-asset-sections.service-CsGjqQMr.js → model-asset-sections.service-CNksuP_T.js} +1 -1
  168. package/dist/assets/{model-inspection-CxUkvaYy.js → model-inspection-C2o2DbBx.js} +1 -1
  169. package/dist/assets/{model-thumbnail-ji44cazv.js → model-thumbnail-UBVYFQ8_.js} +1 -1
  170. package/dist/assets/{models.finder-7OLFZ3Ua.js → models.finder-OVEwnXbp.js} +1 -1
  171. package/dist/assets/{module-mode-CTX4Zewb.js → module-mode-DAPXEqdN.js} +2 -2
  172. package/dist/assets/{mount-canvas-ingest-root-CfQg5k2s.js → mount-canvas-ingest-root-BcFoZIaF.js} +2 -2
  173. package/dist/assets/{mount-dom-ingest-root-Bk8578fv.js → mount-dom-ingest-root-CiFNje8o.js} +2 -2
  174. package/dist/assets/{mount-ingest-root-BC9Upehz.js → mount-ingest-root-DUD5s5Mo.js} +2 -2
  175. package/dist/assets/{mount-manifest-BtU330Yf.js → mount-manifest-DB6HRT6u.js} +1 -1
  176. package/dist/assets/{mount-three-ingest-root-B9wyh99i.js → mount-three-ingest-root-DNK5YK5q.js} +1 -1
  177. package/dist/assets/{mounted-authoring-rl9CAF3d.js → mounted-authoring-LH8XRyZy.js} +1 -1
  178. package/dist/assets/{mounted-story-viewport-source-Dddc_OIU.js → mounted-story-viewport-source-CsYcppV5.js} +1 -1
  179. package/dist/assets/{native-debug-module-C9N010aq.js → native-debug-module-qQcZUzI3.js} +1 -1
  180. package/dist/assets/{navigation-DHVDGrf7.js → navigation-DsC9GtR6.js} +1 -1
  181. package/dist/assets/{navmesh.menu-NqxU_3q1.js → navmesh.menu-BlFLFx9E.js} +1 -1
  182. package/dist/assets/{navmesh.service-DE2es3jL.js → navmesh.service-DbzAv6fM.js} +1 -1
  183. package/dist/assets/network-observer.service-DN6rLrFY.js +1 -0
  184. package/dist/assets/{network.utility-BIsiGkKi.js → network.utility-Cyjk5hVt.js} +1 -1
  185. package/dist/assets/{object3d-document-session-registry-BXRoVukq.js → object3d-document-session-registry-D-Y_qGrp.js} +2 -2
  186. package/dist/assets/{oid-transform-adTCl2dr.js → oid-transform-DiGTOVDJ.js} +1 -1
  187. package/dist/assets/{particles-Szke9R-F.js → particles-C_QRsNsK.js} +1 -1
  188. package/dist/assets/{pixi-authoring-adapter-BqaHuca7.js → pixi-authoring-adapter-D5Zg92mH.js} +1 -1
  189. package/dist/assets/{pixi-live-write-target-rJAx3eKw.js → pixi-live-write-target-D1qpABAm.js} +1 -1
  190. package/dist/assets/{play.command-DRO03Vwk.js → play.command-C0gXQBk6.js} +2 -2
  191. package/dist/assets/{presentation-CoCMLuUj.js → presentation-BfpAqMcy.js} +1 -1
  192. package/dist/assets/{product-CmoJm1z7.js → product-Dcl1f3TE.js} +1 -1
  193. package/dist/assets/{profiler.action-CFeHo2Me.js → profiler.action-CpoxBmjF.js} +1 -1
  194. package/dist/assets/{profiler.menu-DyE7VCmY.js → profiler.menu-DEkTIEdV.js} +1 -1
  195. package/dist/assets/{profiler.utility-Dv_D8Vw-.js → profiler.utility-kvA4TCHw.js} +1 -1
  196. package/dist/assets/{project-authoring-session-dQcglO8H.js → project-authoring-session-TSNsl35x.js} +2 -2
  197. package/dist/assets/{properties-bone-constraints.inspector-CIzNH3Z_.js → properties-bone-constraints.inspector-BMceYOJI.js} +1 -1
  198. package/dist/assets/{properties-bone.inspector-41qz37vl.js → properties-bone.inspector-B5zGu3cr.js} +1 -1
  199. package/dist/assets/{properties-collection.inspector-DYYFaZoX.js → properties-collection.inspector-BDKUVXZn.js} +1 -1
  200. package/dist/assets/{properties-constraints.inspector-BRBLQA4H.js → properties-constraints.inspector-BMaJzBcB.js} +1 -1
  201. package/dist/assets/{properties-data.inspector-C0R7ekcB.js → properties-data.inspector-BiSkPbDm.js} +1 -1
  202. package/dist/assets/{properties-material.inspector-CNYVjoEc.js → properties-material.inspector-Q_CIeqd-.js} +1 -1
  203. package/dist/assets/{properties-modifiers.inspector-DHZG0Cxa.js → properties-modifiers.inspector-C-oMguHp.js} +1 -1
  204. package/dist/assets/{properties-object.inspector-C_Mgm1nj.js → properties-object.inspector-Boh5aCEv.js} +1 -1
  205. package/dist/assets/{properties-output.inspector-FDfa5xyj.js → properties-output.inspector-DH1o2r0F.js} +1 -1
  206. package/dist/assets/{properties-particles.inspector-B3_TZ-7s.js → properties-particles.inspector-nSQ_Zw-g.js} +1 -1
  207. package/dist/assets/{properties-physics.inspector-CNFMbeUu.js → properties-physics.inspector-DDbmTPBa.js} +1 -1
  208. package/dist/assets/{properties-render.inspector-7hqJQyx_.js → properties-render.inspector-DgOHFe0x.js} +1 -1
  209. package/dist/assets/{properties-scene.inspector-C3Snw81s.js → properties-scene.inspector-C1i7N55Q.js} +1 -1
  210. package/dist/assets/{properties-texture.inspector-CFSO_Dlr.js → properties-texture.inspector-C4Wi55h6.js} +1 -1
  211. package/dist/assets/{properties-view-layer.inspector-BCT_uXoh.js → properties-view-layer.inspector-CBm_vwg3.js} +1 -1
  212. package/dist/assets/{properties-world.inspector-7NucaecX.js → properties-world.inspector-1IFmTYeW.js} +1 -1
  213. package/dist/assets/{r3f-design-session-C9CU7zUY.js → r3f-design-session-Cs5bTAc0.js} +2 -2
  214. package/dist/assets/{r3f-physics-binding-CPwS9PZB.js → r3f-physics-binding-BWMEny-w.js} +1 -1
  215. package/dist/assets/{r3f-source-authoring-adapter-DnPy_oLB.js → r3f-source-authoring-adapter-BeIO54fR.js} +1 -1
  216. package/dist/assets/{react-canvas-navigation-M2ulH8Tv.js → react-canvas-navigation-CLXxFyzC.js} +1 -1
  217. package/dist/assets/{react-inspector.service-Bo91jpvq.js → react-inspector.service-Doau5GA7.js} +1 -1
  218. package/dist/assets/{react-story-board-CgSIwoIi.js → react-story-board-D7HR9cee.js} +1 -1
  219. package/dist/assets/{react-three-rapier.esm-CsZzas77.js → react-three-rapier.esm-Ns6WNIRN.js} +1 -1
  220. package/dist/assets/{react-world-authoring-adapter-pm3Pec2P.js → react-world-authoring-adapter-kH4Q43MF.js} +1 -1
  221. package/dist/assets/{realm-services-CQpdYTrn.js → realm-services-Bw0wimJ0.js} +1 -1
  222. package/dist/assets/{reflection-probe-capture.inspector-BD_3gnLX.js → reflection-probe-capture.inspector-ssbpk4-0.js} +1 -1
  223. package/dist/assets/{registry-CYyxpRNG.js → registry-BVy1UpS9.js} +1 -1
  224. package/dist/assets/{relative-import-specifier-CprW5QX1.js → relative-import-specifier-Ceo42Psh.js} +1 -1
  225. package/dist/assets/{render-env-jkLm7mQ-.js → render-env-BAvVZ2UE.js} +1 -1
  226. package/dist/assets/{render-features-DZj6xJ7A.js → render-features-CmfqFdR5.js} +1 -1
  227. package/dist/assets/{render-settings-y9WwM9f2.js → render-settings-lv2rLtIu.js} +1 -1
  228. package/dist/assets/{resolve-three-BiA6TMOb.js → resolve-three-QvKUBPqz.js} +3 -3
  229. package/dist/assets/{root-seam-contract-BE3UJfPU.js → root-seam-contract-C3kjrbwL.js} +1 -1
  230. package/dist/assets/{run-selection-oyZHUojP.js → run-selection-DbViAIqg.js} +1 -1
  231. package/dist/assets/{scene-capture-DdYt-ezq.js → scene-capture-DwYOEwQO.js} +1 -1
  232. package/dist/assets/{scene-document.service-BJpAFJ9x.js → scene-document.service-B1lFNEAa.js} +2 -2
  233. package/dist/assets/{scene-framing-DaESgxep.js → scene-framing-D6aTn9no.js} +1 -1
  234. package/dist/assets/{seeded-random-CiRcvG_O.js → seeded-random-CVq3LXT7.js} +1 -1
  235. package/dist/assets/{setup-renderer-BPkAv9Fp.js → setup-renderer-Bjj21Ocm.js} +1 -1
  236. package/dist/assets/{source-object3d-authoring-adapter-DyvmyB6t.js → source-object3d-authoring-adapter-CNWX4fuF.js} +1 -1
  237. package/dist/assets/{source-persistence-backend-COR9hjaK.js → source-persistence-backend-DTjdxsQ5.js} +1 -1
  238. package/dist/assets/{stage-keyboard-qLau9UI2.js → stage-keyboard-BAgLlt3s.js} +1 -1
  239. package/dist/assets/{stage-overlay-set-DGeTZI4D.js → stage-overlay-set-CgCBWjDI.js} +1 -1
  240. package/dist/assets/{stage-presence-markers-ChdZ4iEj.js → stage-presence-markers-Bqle6Spz.js} +1 -1
  241. package/dist/assets/{stage-transform-tools-D6z9r5Bu.js → stage-transform-tools-m9QlVZUv.js} +1 -1
  242. package/dist/assets/{standard-viewport-dressing-BTi3EC4-.js → standard-viewport-dressing-3gzQdF2V.js} +1 -1
  243. package/dist/assets/{state-watch.action-BBJuiPxV.js → state-watch.action-DfwfvSC7.js} +1 -1
  244. package/dist/assets/{state-watch.menu-Df03qnWN.js → state-watch.menu-Bs1xJwrj.js} +1 -1
  245. package/dist/assets/{state-watch.utility-BRgr0mlj.js → state-watch.utility-CcVyJFcT.js} +1 -1
  246. package/dist/assets/{story-capture-CPj2On1g.js → story-capture-Cgqana5W.js} +1 -1
  247. package/dist/assets/{story-documents-DB5jz0J4.js → story-documents-BEiCqgFW.js} +1 -1
  248. package/dist/assets/{story-documents.service-DnMSzk6y.js → story-documents.service-J7xLtzjV.js} +1 -1
  249. package/dist/assets/{story-documents.service-Dh_vsIwR.js → story-documents.service-LuiJ_UvL.js} +1 -1
  250. package/dist/assets/{story-media-presence-CmwbMtq5.js → story-media-presence-WMh0saHX.js} +1 -1
  251. package/dist/assets/{story-pixi-preview-ChgLtIMr.js → story-pixi-preview-CU1amyjy.js} +1 -1
  252. package/dist/assets/{story-presentation-D5MyfBZO.js → story-presentation-e74IsiZL.js} +1 -1
  253. package/dist/assets/{story-three-preview-8pZ9VDBK.js → story-three-preview-BteQqbGh.js} +2 -2
  254. package/dist/assets/{studio-environment-BIGsD0w9.js → studio-environment-CM_O7J1d.js} +1 -1
  255. package/dist/assets/{surface-state-CfMKGBS8.js → surface-state-CIaI8YIB.js} +1 -1
  256. package/dist/assets/{syntactic-prop-specs-CsqhjQcU.js → syntactic-prop-specs-CrzSH6_n.js} +1 -1
  257. package/dist/assets/{team-playtest.service-CEPhGU5R.js → team-playtest.service-DbzIOudl.js} +1 -1
  258. package/dist/assets/{three-CJ8rXYAG.js → three-CKBEa1FY.js} +1 -1
  259. package/dist/assets/{three-authoring-adapter-C5bmfaJR.js → three-authoring-adapter-3e00kFda.js} +1 -1
  260. package/dist/assets/three-authoring.service-CFPZdjp5.js +2 -0
  261. package/dist/assets/{three-ingest-runtime-Cd4N9W9s.js → three-ingest-runtime-BzwyNuUu.js} +1 -1
  262. package/dist/assets/{three-integration-C9RCTRFF.js → three-integration-C_ZvfBFO.js} +2 -2
  263. package/dist/assets/three-integration.service-CR4-ExlG.js +1 -0
  264. package/dist/assets/{three-projection-core-Dyl2RKyC.js → three-projection-core-DuLfJ2q-.js} +1 -1
  265. package/dist/assets/{three-state-BBsWckdA.js → three-state-IaI1mcXK.js} +1 -1
  266. package/dist/assets/{three-story-capture.service-BuiJlRNB.js → three-story-capture.service-DskqLyZw.js} +2 -2
  267. package/dist/assets/{three-story-model-WLzZGb08.js → three-story-model-DandFqAC.js} +1 -1
  268. package/dist/assets/{three-viewport-presentation-Dj1rgGCy.js → three-viewport-presentation-Cul9qyGO.js} +1 -1
  269. package/dist/assets/{transform-mode-request-BlDpDb6q.js → transform-mode-request-Bu2tPnSg.js} +1 -1
  270. package/dist/assets/{transport-strip-DXtCpJ9z.js → transport-strip-ynBEeORr.js} +1 -1
  271. package/dist/assets/transport.header-CD6pEqQF.js +1 -0
  272. package/dist/assets/{tuples-a1q2uI-K.js → tuples-DTCAR145.js} +1 -1
  273. package/dist/assets/{ui-board-document-C0-Ka1Pc.js → ui-board-document-CwgVqWU3.js} +2 -2
  274. package/dist/assets/{user-data-BEqwoJ6c.js → user-data-MBp9v5_f.js} +1 -1
  275. package/dist/assets/{utility-view-state-BJFTkWml.js → utility-view-state-UXOaIsrO.js} +1 -1
  276. package/dist/assets/{viewport-door-BJM9e-5e.js → viewport-door-BaS9f0E1.js} +1 -1
  277. package/dist/assets/{viewport-root-presentation-b3HQkQsA.js → viewport-root-presentation-BmwT86Q4.js} +1 -1
  278. package/dist/assets/{viewport-surface-status-CWEsIWP5.js → viewport-surface-status-B6vhJgMI.js} +1 -1
  279. package/dist/assets/{webworkerAll-DkxwDNyb.js → webworkerAll-7la6EHDN.js} +1 -1
  280. package/dist/assets/{workspace-arrangement-DSOBJt3d.js → workspace-arrangement-B9_XkdLK.js} +1 -1
  281. package/dist/assets/{world-documents-CTOlRBai.js → world-documents-BLOt7Deu.js} +1 -1
  282. package/dist/assets/{world-root-stage-binding-CfHqbqWN.js → world-root-stage-binding-Jd8vgtvZ.js} +1 -1
  283. package/dist/assets/{xstate-animation-binding-xlAjIuNr.js → xstate-animation-binding-CTaJbGUJ.js} +1 -1
  284. package/dist/assets/{xstate-animation-meta-CzcepwNz.js → xstate-animation-meta-BxOPB95-.js} +1 -1
  285. package/dist-node/cli.js +16 -16
  286. package/package.json +16 -16
  287. package/dist/assets/InspectorObjectPreview-SFcJJSPG.js +0 -1
  288. package/dist/assets/Object3DDocumentViewport-DQDepqIN.js +0 -2
  289. package/dist/assets/StageHost-DotEJWDn.js +0 -2
  290. package/dist/assets/autoplay.service-D37lzGOy.js +0 -1
  291. package/dist/assets/instances.command-B1xSb5WF.js +0 -1
  292. package/dist/assets/network-observer.service-B2Pn7BYK.js +0 -1
  293. package/dist/assets/three-authoring.service-DaV0hSzN.js +0 -2
  294. package/dist/assets/three-integration.service-D29Q2JPH.js +0 -1
  295. package/dist/assets/transport.header-B5_HK9Km.js +0 -1
@@ -1,4 +1,4 @@
1
- import{r as M,ls as bt}from"./index-D8WZNJyr.js";import{a as Mt}from"./preview-renderer-BrYNFV1p.js";import{v as vt}from"./output-pass-HurwNl0G.js";import{_ as xt,fx as De,bi as Ue,aC as Et,d7 as kt,ej as St,cP as be,el as Bt,cm as Ct,cl as Ve,fo as ue,ex as At,d5 as It,d9 as jt,cJ as Tt,e as We}from"./three.core-3arARmh6.js";import{f as Lt}from"./clip-planes-CnAI6DZn.js";import{a as Ft}from"./content-bounds-CgU8GC_V.js";const _t=1024*1024,Ge={Uint8Array,Int8Array,Uint16Array,Int16Array,Uint32Array,Int32Array,Float32Array,Float64Array},$t=async t=>Array.from(new Uint8Array(await crypto.subtle.digest("SHA-256",t)),e=>e.toString(16).padStart(2,"0")).join("");class Rt{constructor(){this.buffers=null,this.offsets=[]}reset(){this.buffers=null,this.offsets=[]}async accept(e){try{if(e.kind==="begin"){if(this.buffers)throw new Error("A frame value is already arriving");if(!e.lengths.length||e.lengths.length>4096||e.lengths.reduce((s,o)=>s+o,0)>2*1024**3||e.lengths.some(s=>!Number.isSafeInteger(s)||s<0||s>1024**3))throw new Error("Invalid frame buffer lengths");this.buffers=e.lengths.map(s=>new Uint8Array(s)),this.offsets=e.lengths.map(()=>0);return}if(!this.buffers)throw new Error("Frame chunk arrived without its manifest");if(e.kind==="bytes"){const s=this.buffers[e.slot];if(!s||!Number.isSafeInteger(e.offset)||e.offset!==this.offsets[e.slot]||e.bytes.byteLength>_t||!e.bytes.byteLength||e.offset+e.bytes.byteLength>s.byteLength)throw new Error("Frame chunk is out of order or exceeds its bound");if(await $t(e.bytes)!==e.sha256)throw new Error("Frame chunk digest mismatch");s.set(e.bytes,e.offset),this.offsets[e.slot]=e.offset+e.bytes.byteLength;return}if(e.kind!=="end")throw new Error("Unknown frame chunk");const n=this.buffers;if(n.some((s,o)=>s.length!==this.offsets[o]))throw new Error("Frame value is incomplete");const r=JSON.parse(new TextDecoder("utf-8",{fatal:!0}).decode(n[0]),(s,o)=>{if(!o||typeof o!="object"||!("$frameColumn"in o))return o;const a=n[o.$frameColumn],i=Ge[o.type];if(!Number.isSafeInteger(o.$frameColumn)||o.$frameColumn<1||!a||!Object.hasOwn(Ge,o.type)||!i||a.byteLength%i.BYTES_PER_ELEMENT)throw new Error("Invalid frame column descriptor");return new i(a.buffer)});return this.reset(),{value:r}}catch(n){throw this.reset(),n}}}const ze=4096;class Ot{#r;#o;#a=[];#n=new Map;#$=0;#h=null;#i=null;#l=!1;#k=!1;#S=e=>{!this.#k&&this.#y===0||(e.preventDefault(),e.returnValue="")};#f=new Map;#p=new Map;#w="engine-start";#B=null;#v=new Set;#g=null;#x=0;#C=0;#A=0;#c=null;#I=null;#u=null;constructor(e){this.#o=e,this.#r=new Worker(new URL("/assets/worker-CdXe6YZE.js",import.meta.url),{type:"module",name:"blender"}),globalThis.addEventListener?.("beforeunload",this.#S),this.#r.onmessage=n=>void this.#_(n.data),this.#r.onerror=n=>{const r=n.error,s=n.filename?` at ${n.filename}:${n.lineno}:${n.colno}`:"",o=r?.stack??r?.message??n.message,a=this.#a.length>0?`
1
+ import{r as M,ls as bt}from"./index-Cuhs4tVm.js";import{a as Mt}from"./preview-renderer-BrYNFV1p.js";import{v as vt}from"./output-pass-HurwNl0G.js";import{_ as xt,fx as De,bi as Ue,aC as Et,d7 as kt,ej as St,cP as be,el as Bt,cm as Ct,cl as Ve,fo as ue,ex as At,d5 as It,d9 as jt,cJ as Tt,e as We}from"./three.core-3arARmh6.js";import{f as Lt}from"./clip-planes-CnAI6DZn.js";import{a as Ft}from"./content-bounds-dSublDNs.js";const _t=1024*1024,Ge={Uint8Array,Int8Array,Uint16Array,Int16Array,Uint32Array,Int32Array,Float32Array,Float64Array},$t=async t=>Array.from(new Uint8Array(await crypto.subtle.digest("SHA-256",t)),e=>e.toString(16).padStart(2,"0")).join("");class Rt{constructor(){this.buffers=null,this.offsets=[]}reset(){this.buffers=null,this.offsets=[]}async accept(e){try{if(e.kind==="begin"){if(this.buffers)throw new Error("A frame value is already arriving");if(!e.lengths.length||e.lengths.length>4096||e.lengths.reduce((s,o)=>s+o,0)>2*1024**3||e.lengths.some(s=>!Number.isSafeInteger(s)||s<0||s>1024**3))throw new Error("Invalid frame buffer lengths");this.buffers=e.lengths.map(s=>new Uint8Array(s)),this.offsets=e.lengths.map(()=>0);return}if(!this.buffers)throw new Error("Frame chunk arrived without its manifest");if(e.kind==="bytes"){const s=this.buffers[e.slot];if(!s||!Number.isSafeInteger(e.offset)||e.offset!==this.offsets[e.slot]||e.bytes.byteLength>_t||!e.bytes.byteLength||e.offset+e.bytes.byteLength>s.byteLength)throw new Error("Frame chunk is out of order or exceeds its bound");if(await $t(e.bytes)!==e.sha256)throw new Error("Frame chunk digest mismatch");s.set(e.bytes,e.offset),this.offsets[e.slot]=e.offset+e.bytes.byteLength;return}if(e.kind!=="end")throw new Error("Unknown frame chunk");const n=this.buffers;if(n.some((s,o)=>s.length!==this.offsets[o]))throw new Error("Frame value is incomplete");const r=JSON.parse(new TextDecoder("utf-8",{fatal:!0}).decode(n[0]),(s,o)=>{if(!o||typeof o!="object"||!("$frameColumn"in o))return o;const a=n[o.$frameColumn],i=Ge[o.type];if(!Number.isSafeInteger(o.$frameColumn)||o.$frameColumn<1||!a||!Object.hasOwn(Ge,o.type)||!i||a.byteLength%i.BYTES_PER_ELEMENT)throw new Error("Invalid frame column descriptor");return new i(a.buffer)});return this.reset(),{value:r}}catch(n){throw this.reset(),n}}}const ze=4096;class Ot{#r;#o;#a=[];#n=new Map;#$=0;#h=null;#i=null;#l=!1;#k=!1;#S=e=>{!this.#k&&this.#y===0||(e.preventDefault(),e.returnValue="")};#f=new Map;#p=new Map;#w="engine-start";#B=null;#v=new Set;#g=null;#x=0;#C=0;#A=0;#c=null;#I=null;#u=null;constructor(e){this.#o=e,this.#r=new Worker(new URL("/assets/worker-CdXe6YZE.js",import.meta.url),{type:"module",name:"blender"}),globalThis.addEventListener?.("beforeunload",this.#S),this.#r.onmessage=n=>void this.#_(n.data),this.#r.onerror=n=>{const r=n.error,s=n.filename?` at ${n.filename}:${n.lineno}:${n.colno}`:"",o=r?.stack??r?.message??n.message,a=this.#a.length>0?`
2
2
  Blender's last output:
3
3
  ${this.#a.join(`
4
4
  `)}`:"",i=this.#u===null?null:Math.round(this.#u/1048576),c=i!==null&&i>=ze-16?`Blender ran out of memory: its heap reached ${i} MB of the in-tab engine's ${ze} MB, and this scene needs more. `:"",u=new Error(`${c}Blender worker failed: ${o||"the worker script did not load"}${s}${a}`);console.error(u.message);for(const l of[...this.#n.keys()])this.#m(l);for(const l of this.#n.values())l.reject(u);this.#n.clear(),this.terminate()}}#s=null;#d=null;get project(){return this.#s}get document(){return this.#d}get lastOutput(){return[...this.#a]}start(e,n){return this.#s!==null&&this.#s!==e?Promise.reject(new Error(`The Blender session is bound to ${this.#s}, not ${e}`)):n!==void 0&&this.#d!==null&&this.#d!==n?Promise.reject(new Error(`Blender resource conflict: the session holds ${this.#d}; cannot open ${n}`)):(this.#s=e,this.#d??=n??"models/model.blend",this.#h??=this.#e({op:"start",project:e,...n===void 0?{}:{document:n}}),this.#h)}#t(){return this.#s===null?Promise.reject(new Error("The Blender session has not been started with a project (blender-start)")):this.start(this.#s)}async execute(e,n=!0,r="Blender Python"){return await this.#t(),await this.#e({op:"execute",code:e,history:n,label:r})}async historyGesture(e){await this.#t(),await this.#e({op:e})}async historyStep(e,n){return await this.#t(),(await this.#e({op:"history-step",token:e,direction:n})).moved}async sceneInfo(){return await this.#t(),await this.#e({op:"scene-info"})}async objectInfo(e){return await this.#t(),await this.#e({op:"object-info",name:e})}async rna(e,n){return await this.#t(),await this.#e({op:"rna",path:e,...n===void 0?{}:{names:n}})}async rnaContext(e,n){return await this.#t(),await this.#e({op:"rna-context",...e===void 0?{}:{object:e},...n===void 0?{}:{collection:n}})}async rnaSet(e,n,r,s,o=!0){return await this.#t(),await this.#e({op:"rna-set",history:o,path:e,property:n,value:r,...s===void 0?{}:{index:s}})}async viewShading(e){await this.#t(),await this.#e({op:"view-shading",shading:e})}async outliner(e){return await this.#t(),await this.#e({op:"outliner",...e===void 0?{}:{selected:e}})}async nodeTree(e){return await this.#t(),await this.#e({op:"node-tree",...e?.path===void 0?{}:{path:e.path},...e?.material===void 0?{}:{material:e.material}})}async uvLayout(e){return await this.#t(),await this.#e({op:"uv-layout",...e?.object===void 0?{}:{object:e.object},...e?.uvLayer===void 0?{}:{uvLayer:e.uvLayer}})}async rig(e){return await this.#t(),await this.#e({op:"rig",...e?.object===void 0?{}:{object:e.object}})}async actionClip(e){return await this.#t(),await this.#e({op:"action-clip",...e?.object===void 0?{}:{object:e.object},...e?.bake===void 0?{}:{bake:e.bake}})}async outlinerSet(e,n,r){return await this.#t(),await this.#e({op:"outliner-set",path:e,column:n,value:r})}async present(){await this.#t(),await this.#e({op:"present"})}async screenshotView(e){return await this.#t(),await this.#e({op:"screenshot-view",maxSize:e})}async readFile(e){return await this.#t(),await this.#e({op:"read-file",path:e})}async writeFile(e,n){await this.#t(),await this.#e({op:"write-file",path:e,bytes:n})}async listFiles(e){return await this.#t(),await this.#e({op:"list-files",path:e})}get presented(){return this.#I}stop(){return this.#l?Promise.resolve():this.#i?this.#i:(this.#i=(async()=>{(this.#h?await this.#h.then(()=>!0,()=>!1):!1)&&await this.#e({op:"flush-document"},!0),this.terminate()})().catch(e=>{throw this.#i=null,e}),this.#i)}terminate(){if(this.#M(),this.#l)return;this.#l=!0,globalThis.removeEventListener?.("beforeunload",this.#S);const e=this.#E("terminating worker");try{this.#r.terminate()}finally{e()}const n=new Error("The Blender session was terminated");for(const r of[...this.#n.keys()])this.#m(r);for(const r of this.#n.values())r.reject(n);this.#n.clear();for(const r of this.#v)r()}metrics(e=performance.now()){let n=null,r=this.#x,s=this.#B,o=this.#C,a=this.#A;for(const[i,c]of this.#f){const u=e-c;(n===null||u>n)&&(n=u),u>r&&(r=u,s=this.#p.get(i)??null),u>=5e3&&(o+=1),u>=3e4&&(a+=1)}return{inFlightMs:n===null?null:Math.round(n),lastCallMs:this.#g===null?null:Math.round(this.#g),maxCallMs:this.#g===null&&n===null?null:Math.round(r),maxCallLabel:s,currentPhase:this.#y?this.#w:null,completedCalls:this.#j,callsOver5s:o,callsOver30s:a,lastCallWindow:this.#c,wasmMemoryMB:this.#u===null?null:Math.round(this.#u/1048576)}}#m(e){const n=this.#f.get(e);if(n===void 0)return;this.#f.delete(e);const r=this.#p.get(e)??null;this.#p.delete(e),this.#j++;const s=performance.now()-n;this.#g=s,s>this.#x&&(this.#x=s,this.#B=r),s>=5e3&&(this.#C+=1),s>=3e4&&(this.#A+=1),this.#c!==null&&this.#c.start===n&&(this.#c={start:n,end:n+s})}#j=0;#y=0;#T=Promise.resolve();#e(e,n=!1){if(this.#l||this.#i&&!n)return Promise.reject(new Error("The Blender session is stopping or terminated"));const r=performance.now();let s=()=>{};this.#y++;const o=this.#T.then(async()=>{const a=this.#E(`running worker ${e.op}`);s=()=>{this.#v.delete(s)&&a()},this.#v.add(s),this.#w=e.op;let i=await this.#L(e);for(;i?.load==="continue";)this.#w=i.phase,i=await this.#L({op:"load-next",token:i.token});return i?.load==="done"?i.value:i}).finally(()=>{this.#y--,s();const a=Math.round(performance.now()-r);try{a>=1e3&&this.#o.log?.("log",`@@VOLTER-WORK op=${e.op} totalMs=${a}`)}catch{}});return this.#T=o.then(()=>{},()=>{}),o}#L(e){if(this.#l)return Promise.reject(new Error("The Blender session is terminated"));const n=++this.#$;return new Promise((r,s)=>{this.#n.set(n,{resolve:r,reject:s});const o=performance.now();this.#f.set(n,o),this.#p.set(n,e.op==="load-next"?`load-next after ${this.#w}`:e.op),this.#c={start:o,end:null};try{this.#r.postMessage({...e,id:n})}catch(a){this.#n.delete(n),this.#m(n),s(a instanceof Error?a:new Error(String(a)))}})}#E(e){try{const n=this.#o.work?.(e);return()=>{try{n?.()}catch{}}}catch{return()=>{}}}#F=new Rt;#b=null;#M(){this.#F.reset();const e=this.#b;if(this.#b=null,e)try{Promise.resolve(this.#o.stage?.({...e,abort:!0})).catch(()=>{})}catch{}}async#_(e){if("op"in e){if(e.op==="frame-stream"){try{const o=await this.#F.accept(e.chunk);if(o){const a=o.value;if(a.op==="present"){await this.#_({...a,id:e.id});return}if(a.op!=="stage"||!this.#o.stage)throw new Error("The presenter does not support staged Blender frames");this.#b={session:a.session,revision:a.revision},await this.#o.stage(a)}this.#r.postMessage({op:"present-result",id:e.id})}catch(o){this.#M(),this.#r.postMessage({op:"present-result",id:e.id,error:o instanceof Error?o.message:String(o)})}return}if(e.op==="document-dirty"){this.#k=e.dirty;return}if(e.op==="history"){this.#o.history?.(e.entries);return}if(e.op==="log"){this.#a.push(e.text),this.#a.length>12&&this.#a.shift(),this.#o.log?.(e.level,e.text);return}if(e.op==="memory"){this.#u=e.bytes;return}const r=e.frame;typeof r?.session=="string"&&typeof r.revision=="number"&&(this.#I={session:r.session,revision:r.revision});const s=this.#E("presenting worker frame");try{const o=await this.#o.present(e.frame,e.description,e.capture);this.#b=null,this.#r.postMessage({op:"present-result",id:e.id,...o?.capture===void 0?{}:{capture:o.capture},...o!=null&&"held"in o?{held:o.held}:{}})}catch(o){this.#M(),this.#r.postMessage({op:"present-result",id:e.id,error:o instanceof Error?o.message:String(o)})}finally{s()}return}"error"in e&&this.#M();const n=this.#n.get(e.id);n&&(this.#n.delete(e.id),this.#m(e.id),"error"in e?n.reject(new Error(e.error)):n.resolve(e.result))}}const Nt="/assets/agx-base-srgb-BjWZJgrZ.lut",Pt="/assets/agx-look-medium-high-contrast-D5F_ob1L.lut",Dt="/assets/agx-look-punchy-dxsnycNs.lut",Ut="/assets/filmic-srgb-Ct35FIH6.lut",L=new Float64Array(12),qe=[0,0,0],O=new Float64Array(3),X=new Float64Array(3),F=new Int8Array([1,0,0,1,1,0,0,1,2,1,0,0,1,0,1,0,2,1,0,0,1,1,0,1,2,0,1,0,0,1,0,1,1,2,1,0,0,1,0,0,1,1,1,2,0,0,1,0,1,1,0,1,0,2]);function Vt(t,e,n){return t>e?e>n?0:t>n?1:2:n>e?3:n>t?4:5}function Je(t,e,n,r,s){const o=e*e,a=Math.min(1,Math.max(0,n))*(e-1),i=Math.min(1,Math.max(0,r))*(e-1),c=Math.min(1,Math.max(0,s))*(e-1),u=Math.min(Math.floor(a),e-2),l=Math.min(Math.floor(i),e-2),d=Math.min(Math.floor(c),e-2),k=a-u,m=i-l,S=c-d,b=(h,g,T,I)=>{const w=(u+g+(l+T)*e+(d+I)*o)*3;L[h]=t[w]/65535,L[h+1]=t[w+1]/65535,L[h+2]=t[w+2]/65535};b(0,0,0,0),b(9,1,1,1),O[0]=k,O[1]=m,O[2]=S;const p=Vt(k,m,S)*9;b(3,F[p],F[p+1],F[p+2]),b(6,F[p+3],F[p+4],F[p+5]);const A=O[F[p+6]],x=O[F[p+7]],f=O[F[p+8]];for(let h=0;h<3;h++){const g=L[h];qe[h]=g+A*(L[3+h]-g)+x*(L[6+h]-L[3+h])+f*(L[9+h]-L[6+h])}return qe}function Y(t){const e=t&32768?-1:1,n=t>>10&31,r=t&1023;return n===0?e*2**-24*r:n===31?r?Number.NaN:e*Number.POSITIVE_INFINITY:e*2**(n-15)*(1+r/1024)}function je(t,e,n,r){const s=new Uint8ClampedArray(e*4);for(let o=0;o<e;o++){const a=o*4,i=Y(t[a+3]),c=i===0?n:n/i;X[0]=Y(t[a])*c,X[1]=Y(t[a+1])*c,X[2]=Y(t[a+2])*c;const u=r(X);s[a]=Math.round(u[0]*255),s[a+1]=Math.round(u[1]*255),s[a+2]=Math.round(u[2]*255),s[a+3]=Math.round(Math.min(1,Math.max(0,i))*255)}return s}function Wt(t){return new URL(Object.assign({"./agx-base-srgb.lut":Nt,"./agx-look-medium-high-contrast.lut":Pt,"./agx-look-punchy.lut":Dt,"./filmic-srgb.lut":Ut})[`./${t.replace(/\.lut$/,"")}.lut`],import.meta.url)}const Gt=57,_=-12.47393,Qe=12.5260688117,zt=[[.4123908,.3575843,.1804808],[.212639,.7151687,.0721923],[.0193308,.1191948,.9505322]],qt=[[1.5250528,-.3159135,-.1226583],[-.5091526,1.3333274,.1382844],[.0957153,.0508974,.7879558]];function He(t,e,n){const r=e[0],s=e[1],o=e[2];n[0]=t[0][0]*r+t[0][1]*s+t[0][2]*o,n[1]=t[1][0]*r+t[1][1]*s+t[1][2]*o,n[2]=t[2][0]*r+t[2][1]*s+t[2][2]*o}const Z=new Float64Array(3),Xe=new Float64Array(3),K=[0,0,0];function de(t){const e=Math.min(1,Math.max(0,t));return e<=.0031308?12.92*e:1.055*e**(1/2.4)-.055}function et(t,e,n,r){return Je(t,Gt,e,n,r)}function Ht(t,e){He(zt,e,Xe),He(qt,Xe,Z);const n=Qe-_,r=et(t,(Math.log2(Math.max(Z[0],1e-10))-_)/n,(Math.log2(Math.max(Z[1],1e-10))-_)/n,(Math.log2(Math.max(Z[2],1e-10))-_)/n);return K[0]=de(Math.max(0,r[0])**2.4),K[1]=de(Math.max(0,r[1])**2.4),K[2]=de(Math.max(0,r[2])**2.4),K}const Xt={"AgX - Medium High Contrast":"agx-look-medium-high-contrast.lut","AgX - Punchy":"agx-look-punchy.lut"};function Yt(t,e){const n=Qe-_;return et(t,(Math.log2(Math.max(e[0],1e-10))-_)/n,(Math.log2(Math.max(e[1],1e-10))-_)/n,(Math.log2(Math.max(e[2],1e-10))-_)/n)}function Zt(t,e,n,r={}){const s=r.exposure??1,o=r.composedLook===!0?Yt:Ht;return je(e,n,s,a=>o(t,a))}const tt=33,Me=tt**3*3,ve=4096,he=-12.473931188,fe=25;function pe(t,e){const n=Math.min(1,Math.max(0,e))*(ve-1),r=Math.min(Math.floor(n),ve-2),s=n-r;return((1-s)*t[Me+r]+s*t[Me+r+1])/65535}const J=[0,0,0];function Kt(t,e){const n=Je(t,tt,(Math.log2(Math.max(e[0],1e-10))-he)/fe,(Math.log2(Math.max(e[1],1e-10))-he)/fe,(Math.log2(Math.max(e[2],1e-10))-he)/fe);return J[0]=pe(t,n[0]/.66),J[1]=pe(t,n[1]/.66),J[2]=pe(t,n[2]/.66),J}function Jt(t,e,n,r){if(t.length!==Me+ve)throw new Error("Invalid Blender Filmic display table");return je(e,n,r,s=>Kt(t,s))}const W=2.4,$=.055,nt=$/(W-1),Qt=1/(W/(1+$)*((nt+$)/(1+$))**(W-1)),en=((nt+$)/(1+$))**W;function we(t){return t>0?t<en?t*Qt:(1+$)*t**(1/W)-$:0}const Q=[0,0,0];function tn(t){return Q[0]=we(t[0]),Q[1]=we(t[1]),Q[2]=we(t[2]),Q}function nn(t,e,n){return je(t,e,n,tn)}function rt(t,e,n,r){if(!Number.isFinite(n.width)||!Number.isFinite(n.height)||n.width<1||n.height<1)throw new Error("Scene capture requires finite positive dimensions");const s=Math.min(2048,Math.round(n.width)),o=Math.min(2048,Math.round(n.height)),a=r?1:2,i=s*a,c=o*a,u=Mt(),l=u.renderer,d={target:l.getRenderTarget(),toneMapping:l.toneMapping,exposure:l.toneMappingExposure,colorSpace:l.outputColorSpace,shadows:l.shadowMap.enabled,shadowType:l.shadowMap.type,clearColor:l.getClearColor(new xt),clearAlpha:l.getClearAlpha(),background:t.background};let k,m,S=!1;try{k=new De(i,c,{type:Ue}),n.effect&&(k.depthTexture=new Et(i,c)),l.shadowMap.enabled=!0,l.shadowMap.type=kt,l.outputColorSpace=St,l.toneMapping=n.toneMapping??be,l.toneMappingExposure=n.exposure??1,l.setClearColor(0,n.transparent?0:1),n.transparent&&(t.background=null),l.setRenderTarget(k),l.clear(),l.render(t,e);const b=n.effect?.render(l,k,t,e)??k;if(b.texture.type!==Ue||b.width!==i||b.height!==c)throw new Error("Scene capture effect must return a same-size half-float target");if(r){const w=new Uint16Array(i*c*4);return l.readRenderTargetPixels(b,0,0,i,c,w),S=!0,{pixels:w,width:s,height:o}}m=new De(i,c),vt(n.transparent===!0).render(l,m,b,0,!1);const p=new Uint8Array(i*c*4);l.readRenderTargetPixels(m,0,0,i,c,p);const A=document.createElement("canvas");A.width=i,A.height=c;const x=A.getContext("2d");if(!x)throw new Error("Scene capture could not create an image canvas");const f=x.createImageData(i,c),h=i*4;for(let w=0;w<c;w++)f.data.set(p.subarray((c-1-w)*h,(c-w)*h),w*h);x.putImageData(f,0,0);const g=document.createElement("canvas");g.width=s,g.height=o;const T=g.getContext("2d");if(!T)throw new Error("Scene capture could not create an output canvas");T.drawImage(A,0,0,s,o);const I=g.toDataURL("image/png");return S=!0,I}finally{t.background=d.background,l.setRenderTarget(d.target),l.toneMapping=d.toneMapping,l.toneMappingExposure=d.exposure,l.outputColorSpace=d.colorSpace,l.shadowMap.enabled=d.shadows,l.shadowMap.type=d.shadowType,l.setClearColor(d.clearColor,d.clearAlpha),m?.dispose(),k?.dispose(),u.release({discard:!S})}}function rn(t,e,n){return rt(t,e,n,!0)}function on(t,e,n){return rt(t,e,n,!1)}const sn=t=>typeof t=="object"&&t!==null&&typeof t.subscribeFrames=="function"&&typeof t.objectForBlenderName=="function"&&typeof t.blenderObjectName=="function"&&typeof t.blenderSelection=="function"&&typeof t.setStageMode=="function";function Te(){const t=M().documents.context(ut());return sn(t)?t:null}function an(){return Te()?.blenderSelection()??{selected:[],active:null}}const ln={tree:null,byId:new Map,parentOf:new Map,error:null,loading:!1};let xe=ln,ot=0;const Ee=new Set;let D=null,ae=null,Le="",U=null;function cn(t){const e=new Map,n=new Map,r=(s,o)=>{e.set(s.id,s),n.set(s.id,o);for(const a of s.children)r(a,s.id)};for(const s of t?.rows??[])r(s,null);return{byId:e,parentOf:n}}function te(t){xe={...xe,...t},ot+=1;for(const e of[...Ee])e()}function Fn(t){return Ee.add(t),()=>{Ee.delete(t)}}function _n(){return ot}function $n(){return xe}function Fe(t){U!==t&&(U=t,setTimeout(()=>{U===t&&(U=null,st(t===""?[]:t.split("\0")))},0))}let ge=0,ke=Promise.resolve();function st(t){const e=un(t);return ke=e,e}async function un(t){const e=t.join("\0"),n=++ge;ae=e,Le=e,te({loading:!0});try{const r=await vn(t);if(n!==ge)return;Te()?.setStageMode(r?.mode??null),te({tree:r,...cn(r),loading:!1,error:null})}catch(r){if(n!==ge)return;te({loading:!1,error:at(r)})}}function dn(){ae=null,Fe(Le);for(const t of[...Se])t()}const Se=new Set;function Rn(t){return _e(),Se.add(t),()=>{Se.delete(t)}}let ee=!1,me=null;function _e(){const t=Te();if(D!==null&&me===t)return;D!==null&&(D(),D=null,me=null);const e=t;if(e!==null){D=e.subscribeFrames(dn),me=e;return}ee||(ee=!0,M().documents.waitForContext(ut()).then(()=>{ee=!1,_e()}).catch(()=>{ee=!1}))}function On(t){if(!C())return;_e();const e=[...t].sort().join("\0");ae!==e&&Fe(e)}async function hn(t){if(!C())return;U=null;let e=st([...t].sort());for(;;){if(await e,ke===e)return;e=ke}}async function Nn(t,e,n){try{return await ht(t,e,n),ae=null,Fe(Le),!0}catch(r){return te({error:at(r)}),!1}}function at(t){return t instanceof Error?t.message:String(t)}const fn={transform:{cx:0,cy:0,zoom:1},looked:null,refusal:null,size:{w:0,h:0},framedAt:0,drawn:[]};let Be=fn,$e=0;const se=new Set;let it=0;function ye(){return Be}function Pn(){return $e}function Dn(t){return se.add(t),()=>{se.delete(t)}}function V(t){Be={...Be,...t},$e+=1;for(const e of[...se])e()}function pn(){it+=1,$e+=1;for(const t of[...se])t()}function Un(){return it}function N(t){V({refusal:t})}const Ye=new Map;function wn(t){let e=Ye.get(t);return e||(e=fetch(Wt(t)).then(async n=>{if(!n.ok)throw new Error(`Blender display table ${t}: ${n.status} ${n.statusText}`);return new Uint16Array(await n.arrayBuffer())}),Ye.set(t,e)),e}function gn(t){const e=atob(t),n=new Uint8Array(e.length);for(let r=0;r<e.length;r++)n[r]=e.charCodeAt(r);return new Uint16Array(n.buffer,n.byteOffset,n.byteLength>>1)}async function lt(t,e){const n=e.look??"None",r=e.toneMapping==="filmic",s=e.toneMapping==="none";if(!s&&e.toneMapping!=="agx"&&!r)throw new Error("Blender's Khronos PBR Neutral view transform has no scene-linear implementation in the browser, so it cannot resolve a composited or scene-referred frame (implemented: Standard, AgX, Filmic)");const o=s?null:r?"filmic-srgb.lut":n==="None"?"agx-base-srgb.lut":Xt[n];if(o===void 0)throw new Error(`Blender display transform has no table for look ${n}`);const a=o?await wn(o):null,i=e.linearInput,c=i?{pixels:gn(i.base64),width:i.width,height:i.height}:t;if(!c)throw new Error("Blender display transform requires a linear capture");const{pixels:u,width:l,height:d}=c,k=s?nn(u,l*d,e.exposure):r?Jt(a,u,l*d,e.exposure):Zt(a,u,l*d,{exposure:e.exposure,composedLook:n!=="None"}),m=document.createElement("canvas");m.width=l,m.height=d;const S=m.getContext("2d");if(!S)throw new Error("Blender display transform could not create its image canvas");const b=S.createImageData(l,d),p=l*4;for(let f=0;f<d;f++){const h=(d-1-f)*p;b.data.set(k.subarray(h,h+p),f*p)}S.putImageData(b,0,0);const A=m.toDataURL("image/png"),x={base64:A.slice(A.indexOf(",")+1),mimeType:"image/png"};if(e.linear===!0){const f=new Uint8Array(u.buffer,u.byteOffset,u.byteLength);let h="";for(let g=0;g<f.length;g+=32768)h+=String.fromCharCode(...f.subarray(g,g+32768));x.linearBase64=btoa(h),x.linearWidth=l,x.linearHeight=d}return x}async function mn(t,e,n,r,s=()=>{}){const o={none:be,agx:We,neutral:Tt,filmic:be};await n.prepare(e),s();const a={effect:n.effect,width:r.width,height:r.height,transparent:r.transparent===!0,toneMapping:o[r.toneMapping]??We,exposure:r.exposure},i=r.toneMapping==="agx"||r.toneMapping==="filmic"||r.linear===!0?await lt(rn(t,e,a),r):null;if(s(),i)return i;const c=on(t,e,a);if(!c)throw new Error("Blender render could not capture its image");return{base64:c.slice(c.indexOf(",")+1),mimeType:"image/png"}}const ct="document:blender:runtime";let E=null,Ze=0;function Vn(t){const e=++Ze;return E=t,P(),()=>{Ze===e&&(E=null,P())}}function ne(){const t=y?.document,e=M().documents.activeId(),n=e?.startsWith("document:model:")?e.slice(15):E?.blend;return!n||!t||n===t?null:`Blender is editing ${t}; ${n} is not open. Return to ${t} before editing.`}function j(){return E?.documentId??ct}function ut(){return j()}function yn(t){if(E!==t)return!1;const e=M().documents.activeId();return!(e?.startsWith("document:model:")||e===ct)||e===t.documentId}async function Wn(t,e){const n=M();if(!n.session.open())throw new Error("Opening a model requires an open project session.");const r=n.projectLocalState.projectRootPath();if(r===null)throw new Error("Opening a model requires a project path.");if(!yn(t))return!1;const s=v(),o=s.start(r,t.blend);if(e(),await o,E!==t)return!1;const a=(await G()).snapshot();if(E!==t)return!1;const i=s.presented;return(!a||!i||a.session!==i.session||a.revision!==i.revision)&&await s.present(),E===t}function C(){return y?.project!=null&&ne()===null}let dt=0;const Ce=new Set;function Gn(){return dt}function zn(t){return Ce.add(t),()=>{Ce.delete(t)}}function P(){dt+=1;for(const t of[...Ce])t()}async function qn(t,e){return C()?v().rna(t,e):null}async function Hn(t,e){return C()?v().rnaContext(t,e):null}async function bn(t,e,n,r,s=!0){if(!C())return null;const o=await v().rnaSet(t,e,n,r,s);return P(),o}async function Xn(t){C()&&await v().viewShading(t)}async function Mn(t,e=!0,n="Blender Python"){const r=await v().execute(t,e,n);P();const s=/^Error executing code:/.exec(r);return{text:r,executed:s===null,result:s===null?r.replace(/^Code executed successfully: ?/,""):"",error:s===null?null:r.replace(/^Error executing code: ?/,"")}}function Yn(){v().historyGesture("history-begin").catch(t=>M().console.error(`Could not begin Blender undo gesture: ${String(t)}`,"blender-history"))}async function Zn(){await v().historyGesture("history-end")}async function vn(t){return C()?v().outliner(t):null}async function Kn(t){return C()?v().nodeTree(t):null}async function Jn(t){return C()?v().uvLayout(t):null}async function Qn(t){return C()?v().rig(t):null}async function er(t){return C()?v().actionClip(t):null}async function ht(t,e,n){if(!C())return null;const r=await v().outlinerSet(t,e,n);return P(),r}const xn={view:"blender-node-view",title:"Node Editor",verbs:[["state",void 0],["look",void 0],["view-all","Node Editor: Frame All"],["zoom",void 0],["pan",void 0],["move",void 0],["link",void 0],["set-value",void 0],["use-nodes",void 0],["collapse-panel",void 0]].map(([t,e])=>({id:t,...e?{title:e}:{},run:n=>ft({...n,action:t})}))};function ft(t){const e=typeof t.action=="string"?t.action:"state";switch(e){case"state":break;case"look":V({looked:typeof t.node=="string"?t.node:null,refusal:null});break;case"view-all":pn(),V({refusal:null});break;case"zoom":{const n=typeof t.zoom=="number"?t.zoom:1;V({transform:{...ye().transform,zoom:n},refusal:null});break}case"pan":{const n=ye().transform;V({transform:{...n,cx:typeof t.cx=="number"?t.cx:n.cx,cy:typeof t.cy=="number"?t.cy:n.cy},refusal:null});break}case"move":N(`Moving "${String(t.node??"a node")}" writes Node.location — editing parity is not the program.`);break;case"link":N("Dragging between sockets would make a link — editing parity is not the program.");break;case"set-value":N(`Changing "${String(t.socket??"a socket")}" writes the socket's default_value — editing parity is not the program.`);break;case"use-nodes":N("Use Nodes writes Material.use_nodes — editing parity is not the program.");break;case"collapse-panel":N(`Collapsing "${String(t.panel??"a panel")}" writes the panel's is_collapsed — editing parity is not the program.`);break;default:N(`blender-node-view: no action "${e}" — state, look, view-all, zoom, pan, and the refusals move, link, set-value, use-nodes, collapse-panel.`)}return ye()}let y=null;const re=new Set;function pt(){re.size&&M().history.invalidate([...re]),re.clear()}let Ae=null,Ke=!1;function oe(t){try{const e=M().session.beginWork(`Blender: ${t}`);return()=>{try{e()}catch{}}}catch{return()=>{}}}function Ie(){const t=oe("invalidating history and releasing runtime");try{pt(),Ae?.abort(),Ae=null,y?.terminate(),y=null,wt=null}finally{t()}}function En(){Ke||(Ke=!0,M().session.onBeforeClose(async()=>{await y?.stop(),Ie()}),M().session.onEnded(Ie))}let wt=null;const kn=t=>typeof t=="object"&&t!==null&&typeof t.applyFrame=="function"&&typeof t.stageFrame=="function"&&typeof t.snapshot=="function"&&typeof t.captureSnapshot=="function"&&typeof t.recordPresentation=="function"&&typeof t.recordPhotograph=="function";async function G(){const{documents:t}=M(),e=Date.now()+15e3;let n=j();for(;;){n=j();const r=await t.waitForContext(n,Math.max(0,Math.min(250,e-Date.now())));if(kn(r))return r;if(Date.now()>=e)break}throw new Error(`The Blender Model document is not open, or the open one is not a Model this engine can present to (it must answer stageFrame, applyFrame, captureSnapshot, recordPresentation and recordPhotograph): nothing published a presentable view as ${n} within 15 s (bound model: ${E?.documentId??"none"}). Open the Model document first (\`volter blender-mcp\` opens it before its first call).`)}function v(){const t=ne();if(t)throw new Error(t);if(y!==null)return y;En();const e=new AbortController;Ae=e;let n=!1,r=null;y=new Ot({work:oe,history:o=>{const a=y;if(!a)throw new Error("Blender history arrived before its runtime");for(const i of o){if("reset"in i){pt();continue}if(!i.resource)throw new Error("A Blender edit has no document resource");re.add(i.resource);const c=async u=>{if(y!==a)throw new Error("This Blender history belongs to a closed worker");const l=await a.historyStep(i.id,u);return P(),await hn(an().selected),l};M().history.record({id:i.id,label:i.label,resources:[i.resource],document:j(),undo:()=>c("undo"),redo:()=>c("redo")})}},stage:async o=>{if(o.abort){r?.stageFrame(o),r=null;return}const a=ne();if(a)throw new Error(a);if(E===null)return;const i=j(),c=await G();if(e.signal.throwIfAborted(),j()!==i)throw new Error("Blender document changed during frame transfer");r=c,c.stageFrame(o)},present:async(o,a,i)=>{const c=ne();if(c)throw new Error(c);if(E===null){if(i?.render)throw new Error("Rendering a Blender frame needs the Model document open; nothing is presenting.");return{}}const u=j(),l=oe("waiting for Model presenter");let d;try{d=await G()}finally{l()}if(e.signal.throwIfAborted(),j()!==u)throw new Error("Blender document changed before its frame could be presented");const k=oe("applying frame to Model"),m=(()=>{try{return d.applyFrame(o)}finally{k()}})(),S=typeof m=="object"&&m!==null&&"held"in m,b=S?m.held:null,p=w=>({...w===void 0?{}:{capture:w},...S?{held:b}:{}});if(d.recordPresentation(a),!i||(wt=i,!i.render))return p(void 0);const A=d.snapshot(),x=()=>{if(e.signal.throwIfAborted(),j()!==u||d.snapshot()!==A)throw new Error("Blender capture document or source revision changed before completion")};if(i.render.linearInput){const w=await lt(null,i.render);return x(),p(w)}const{render:f,position:h,target:g,up:T}=i;if(!h||!g||!T)throw new Error("A Blender render capture must carry the scene camera position, target and up");if(n)throw new Error("A Blender render capture is already in progress");const I=d.captureSnapshot();n=!0,e.signal.addEventListener("abort",I.dispose,{once:!0});try{x();const w=new Bt;w.add(I.root),w.updateMatrixWorld(!0);const z=I.root.matrixWorld,ie=new Ct().copy(z).invert(),gt=new Ve().setFromMatrix4(z),mt=new Ve().setFromMatrix4(ie),le=new ue(h[0],h[1],h[2]).applyMatrix4(z),Re=new ue(g[0],g[1],g[2]).applyMatrix4(z),Oe=new ue(T[0],T[1],T[2]).applyMatrix3(gt),ce=Math.min(2048,Math.round(f.width))/Math.min(2048,Math.round(f.height)),Ne=Ft(I.root).getBoundingSphere(new At),q=Lt(le.distanceTo(Ne.center),Ne.radius);let R;if(f.orthographic){const H=f.fov/2;R=new It(-H*ce,H*ce,H,-H,q.near,q.far)}else R=new jt(f.fov,ce,q.near,q.far);R.up.copy(Oe),R.position.copy(le),R.lookAt(Re),R.updateMatrixWorld(!0);const Pe={position:le.clone().applyMatrix4(ie).toArray(),target:Re.clone().applyMatrix4(ie).toArray(),up:Oe.clone().applyMatrix3(mt).toArray()};d.recordPhotograph({sent:{position:h,target:g,up:T},photographed:Pe,render:{width:f.width,height:f.height,fov:f.fov,orthographic:f.orthographic}});const yt=await mn(w,R,I,f,x);return p({...yt,camera:Pe})}finally{n=!1,e.signal.removeEventListener("abort",I.dispose),I.dispose()}},log:(o,a)=>console[o](`[blender] ${a}`)});const s=y;return M().session.reportWorkerCallMeter("Blender",()=>s.metrics()),y}const Sn="models/model.blend",B=(t,e)=>{const n=t[e];if(typeof n!="string")throw new Error(`${String(t.type)} requires a string "${e}"`);return n};async function Bn(t){const e=M().projectLocalState.projectRootPath();if(e===null)return{};let n;try{n=await t.execute(`import bpy
@@ -1,5 +1,5 @@
1
1
  const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/RectAreaLightUniformsLib-DpPyArRG.js","assets/three.module-BLhyNg0e.js","assets/three.core-3arARmh6.js"])))=>i.map(i=>d[i]);
2
- import{a as Oo,b as Ao,L as Mo}from"./LineSegments2-DN9pUfWA.js";import{bh as ct,cl as To,fo as y,cm as q,N as oe,a$ as Nt,em as Tn,b4 as ia,co as Ft,ey as la,cp as $e,_ as Mt,ej as Ut,fd as te,er as fa,M as ft,cj as wt,dp as St,aV as ca,cW as Le,aE as So,c7 as bt,j as ua,f6 as da,fp as He,au as Ge,dw as Xe,bi as Sn,aT as ma,c1 as ee,dd as dn,eC as mn,e7 as Ce,aw as ge,da as Xt,I as ue,as as _a,e8 as ha,b0 as Po,K as pa,B as ga,b9 as va,Y as Eo,cw as ne,ed as xa,cA as ba,ch as ya,fx as wa,db as No,el as Oa,R as Aa,e6 as Ma,c0 as Ro,bX as Ta,aI as je,ao as Sa,eG as Pa,d3 as Ea,cs as Na,b5 as Ye,bu as Io,aM as Do,a_ as Ra,E as we,ex as Pn,cO as Ve,cY as Ia,eU as Da,cE as _n,c5 as zo,at as za,ff as Ca,eW as Fa,f7 as ka,F as $a,ev as La,et as ja,dq as Va,fq as Ba,n as Ua,l as Wa,cf as qa}from"./three.core-3arARmh6.js";import{u as R,v as L,w as D,c5 as at,c4 as Y,c6 as I,e2 as W,_ as Ha,mB as Co,d_ as Wt,x as X,kE as Ot,e1 as Fo,mC as G,dZ as Ga,mD as Xa}from"./index-D8WZNJyr.js";import{S as Yt}from"./three.module-BLhyNg0e.js";import{t as Ya}from"./blender-runtime-host-DayNDAb4.js";const hn=new Set;function ht(){for(const n of[...hn])n()}function Za(n){return hn.add(n),()=>{hn.delete(n)}}function pn(n){const t=atob(n),e=new Uint8Array(t.length);for(let o=0;o<t.length;o++)e[o]=t.charCodeAt(o);return e}const de=I().finite(),Ka=R({name:D(),parent:D().nullable(),connected:at(),hide:at(),length:de,matrix:L(W([de,de,de,de])).length(4),select:at(),active:at(),lockedWeight:at()}).strict(),Qa=R({object:D(),displayType:Y(["OCTAHEDRAL","STICK","BBONE","ENVELOPE","WIRE"]),showInFront:at(),mode:D(),bones:L(Ka)}).strict(),Et={solid:11711154,pose:5294335,poseActive:9240575,poseActiveUnsel:794150,wire:0,vertex:0,lockedWeight:16711680,lockedWeightFactor:128/255};function Ja(n){return new Mt(n.r*n.r*.1,n.g*n.g*.1,n.b*n.b*.1)}const Ze=[[0,0,0],[.1,.1,.1],[.1,.1,-.1],[-.1,.1,-.1],[-.1,.1,.1],[0,1,0]],Ln=[[2,1,0],[3,2,0],[4,3,0],[1,4,0],[5,1,2],[5,2,3],[5,3,4],[5,4,1]],$t=Math.SQRT1_2,tr=[[$t,-$t,0],[0,-$t,-$t],[-$t,-$t,0],[0,-$t,$t],[.99388373,.11043154,0],[0,.11043154,-.99388373],[-.99388373,.11043154,0],[0,.11043154,.99388373]],er=[[0,1],[1,5],[5,3],[3,0],[0,4],[4,5],[5,2],[2,0],[1,2],[2,3],[3,4],[4,1]],nr=.05;function jn(n){return n.select||n.active?2:1}const or=10,ar=4,rr=`
2
+ import{a as Oo,b as Ao,L as Mo}from"./LineSegments2-DN9pUfWA.js";import{bh as ct,cl as To,fo as y,cm as q,N as oe,a$ as Nt,em as Tn,b4 as ia,co as Ft,ey as la,cp as $e,_ as Mt,ej as Ut,fd as te,er as fa,M as ft,cj as wt,dp as St,aV as ca,cW as Le,aE as So,c7 as bt,j as ua,f6 as da,fp as He,au as Ge,dw as Xe,bi as Sn,aT as ma,c1 as ee,dd as dn,eC as mn,e7 as Ce,aw as ge,da as Xt,I as ue,as as _a,e8 as ha,b0 as Po,K as pa,B as ga,b9 as va,Y as Eo,cw as ne,ed as xa,cA as ba,ch as ya,fx as wa,db as No,el as Oa,R as Aa,e6 as Ma,c0 as Ro,bX as Ta,aI as je,ao as Sa,eG as Pa,d3 as Ea,cs as Na,b5 as Ye,bu as Io,aM as Do,a_ as Ra,E as we,ex as Pn,cO as Ve,cY as Ia,eU as Da,cE as _n,c5 as zo,at as za,ff as Ca,eW as Fa,f7 as ka,F as $a,ev as La,et as ja,dq as Va,fq as Ba,n as Ua,l as Wa,cf as qa}from"./three.core-3arARmh6.js";import{u as R,v as L,w as D,c5 as at,c4 as Y,c6 as I,e2 as W,_ as Ha,mB as Co,d_ as Wt,x as X,kE as Ot,e1 as Fo,mC as G,dZ as Ga,mD as Xa}from"./index-Cuhs4tVm.js";import{S as Yt}from"./three.module-BLhyNg0e.js";import{t as Ya}from"./blender-runtime-host-D0kmlbFS.js";const hn=new Set;function ht(){for(const n of[...hn])n()}function Za(n){return hn.add(n),()=>{hn.delete(n)}}function pn(n){const t=atob(n),e=new Uint8Array(t.length);for(let o=0;o<t.length;o++)e[o]=t.charCodeAt(o);return e}const de=I().finite(),Ka=R({name:D(),parent:D().nullable(),connected:at(),hide:at(),length:de,matrix:L(W([de,de,de,de])).length(4),select:at(),active:at(),lockedWeight:at()}).strict(),Qa=R({object:D(),displayType:Y(["OCTAHEDRAL","STICK","BBONE","ENVELOPE","WIRE"]),showInFront:at(),mode:D(),bones:L(Ka)}).strict(),Et={solid:11711154,pose:5294335,poseActive:9240575,poseActiveUnsel:794150,wire:0,vertex:0,lockedWeight:16711680,lockedWeightFactor:128/255};function Ja(n){return new Mt(n.r*n.r*.1,n.g*n.g*.1,n.b*n.b*.1)}const Ze=[[0,0,0],[.1,.1,.1],[.1,.1,-.1],[-.1,.1,-.1],[-.1,.1,.1],[0,1,0]],Ln=[[2,1,0],[3,2,0],[4,3,0],[1,4,0],[5,1,2],[5,2,3],[5,3,4],[5,4,1]],$t=Math.SQRT1_2,tr=[[$t,-$t,0],[0,-$t,-$t],[-$t,-$t,0],[0,-$t,$t],[.99388373,.11043154,0],[0,.11043154,-.99388373],[-.99388373,.11043154,0],[0,.11043154,.99388373]],er=[[0,1],[1,5],[5,3],[3,0],[0,4],[4,5],[5,2],[2,0],[1,2],[2,3],[3,4],[4,1]],nr=.05;function jn(n){return n.select||n.active?2:1}const or=10,ar=4,rr=`
3
3
  attribute vec3 aSolid;
4
4
  attribute vec3 aHint;
5
5
  varying vec3 vColor;
@@ -1,4 +1,4 @@
1
- import{a as u}from"./jsx-runtime-DPjLkJKQ.js";import{j3 as Ie,bt as Ce,r as B,bv as Te,fN as H,bB as F,bC as U,hR as De,bA as Pe,j4 as Be,bK as $e,bq as be,bn as Ve,j5 as Ge,j6 as pe,j7 as He,j8 as We,j9 as ze,ja as fe,bs as me,bp as Ue}from"./index-D8WZNJyr.js";import{c as Ke,a as Y}from"./blender-runtime-skin-SYIUtq-g.js";import{r as m}from"./index-nmcBqr7Y.js";import{u as qe,v as J,k as X,w as Q,x as Ye,y as oe,t as he,z as Je,A as Xe,B as ge,C as Qe,D as te,E as Ze,F as et,G as tt,H as rt,I as nt}from"./blender-runtime-host-DayNDAb4.js";import{r as ot}from"./index-CtzuWnCS.js";import{a as at}from"./three-contract-Dkt6PmWY.js";import{b as W,o as re}from"./viewport-door-BJM9e-5e.js";import{s as lt,a as st}from"./object3d-document-session-registry-BXRoVukq.js";import{d9 as it}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"./LineSegments2-DN9pUfWA.js";import"./three.module-BLhyNg0e.js";import"./preview-renderer-BrYNFV1p.js";import"./environment-Dg-YaLsA.js";import"./RoomEnvironment-BkknvS_I.js";import"./EXRLoader-CITMBvGd.js";import"./HDRLoader-BTGuGhVo.js";import"./renderer-ownership-BovSEcLv.js";import"./output-pass-HurwNl0G.js";import"./Pass-D1MRT672.js";import"./clip-planes-CnAI6DZn.js";import"./content-bounds-CgU8GC_V.js";import"./hierarchy-marks-C0IFZJpJ.js";import"./workspace-arrangement-DSOBJt3d.js";function Oe(t){const a=Number.isFinite(t)&&t>0?t:50;return{degrees:2*Math.atan(72/(2*a))*180/Math.PI,axis:"larger"}}Ie("model",{camera:{fov:Oe(50),opening:[.8187,.4458,.3617]},interaction:{bootTool:"select",boxSelect:"touch"},all:{lighting:{source:"studio",studioPreset:Ce.id,auto:null,tone:{mapper:"none",exposure:1}},xray:{enabled:!1,alpha:.5}},modes:{wireframe:{xray:{enabled:!0,alpha:0}},preview:{lighting:{source:"preview",auto:null,preview:{sceneLights:!1,sun:{enabled:!1},environment:{enabled:!0,image:"blender:forest",energy:1,rotation:0}},tone:{mapper:"agx",exposure:1}},backdrop:{source:"fill"}},rendered:{lighting:{source:"scene",auto:null,tone:{mapper:"agx",exposure:1}},backdrop:{source:"scene"}}},overlays:{selection:{origins:!0}},world:{upAxis:"z"}});function ct(t){return`blender-${t.toLowerCase().replace(/_/g,"-")}`}function P(t){return t?.type==="TSE_SOME_ID"&&t.struct==="Object"&&t.object!==void 0}function _e(t){if(t.struct)return t.struct}function je(t,a){return{id:t.id,label:t.name,role:"entity",kind:ct(t.icon),..._e(t)?{typeLabel:_e(t)}:{},parentId:a,childIds:t.children.map(o=>o.id),defaultExpanded:t.expanded}}const dt={transform:!0,inspectorFields:!1,persist:!0},ee=new Set;let Ae=0;const ae=new Set;function ye(){queueMicrotask(()=>{Ae++;for(const t of ae)t()})}function ut(t){return ae.add(t),()=>{ae.delete(t)}}function ve(){return Ae}function bt(t){for(const a of ee)if(a.documentId===t||a.documentId===`object3d-document:${t}`)return a;return ee.values().next().value??null}const pt=()=>({position:[0,0,0],rotation:[0,0,0,1],scale:[1,1,1]});function Se(t,a){t.updateWorldMatrix(!0,!1);const o=a.matrixWorld.clone().invert().multiply(t.matrixWorld).elements;return[[o[0],o[1],o[2],o[3]],[o[4],o[5],o[6],o[7]],[o[8],o[9],o[10],o[11]],[o[12],o[13],o[14],o[15]]]}function K(t,a){return`${t} needs a file, and this editor has no door to ask for one: the host's file door (\`EditorHost.files\`, \`@volter/editor-sdk/host\`) reads and writes project-relative paths and has no file-picker member, so there is nothing to open the workbench's own dialog through. Blender's row opens a file browser; run without one, the engine answers "${a}".`}const ft=[{kind:"mesh.plane",label:"Plane",group:"Mesh",call:"mesh.primitive_plane_add"},{kind:"mesh.cube",label:"Cube",group:"Mesh",call:"mesh.primitive_cube_add"},{kind:"mesh.circle",label:"Circle",group:"Mesh",call:"mesh.primitive_circle_add"},{kind:"mesh.uv-sphere",label:"UV Sphere",group:"Mesh",call:"mesh.primitive_uv_sphere_add"},{kind:"mesh.ico-sphere",label:"Ico Sphere",group:"Mesh",call:"mesh.primitive_ico_sphere_add"},{kind:"mesh.cylinder",label:"Cylinder",group:"Mesh",call:"mesh.primitive_cylinder_add"},{kind:"mesh.cone",label:"Cone",group:"Mesh",call:"mesh.primitive_cone_add"},{kind:"mesh.torus",label:"Torus",group:"Mesh",call:"mesh.primitive_torus_add"},{kind:"mesh.grid",label:"Grid",group:"Mesh",call:"mesh.primitive_grid_add",separatorBefore:!0},{kind:"mesh.monkey",label:"Monkey",group:"Mesh",call:"mesh.primitive_monkey_add"},{kind:"curve.bezier",label:"Bézier",group:"Curve",call:"curve.primitive_bezier_curve_add"},{kind:"curve.bezier-circle",label:"Circle",group:"Curve",call:"curve.primitive_bezier_circle_add"},{kind:"curve.nurbs-curve",label:"Nurbs Curve",group:"Curve",call:"curve.primitive_nurbs_curve_add",separatorBefore:!0},{kind:"curve.nurbs-circle",label:"Nurbs Circle",group:"Curve",call:"curve.primitive_nurbs_circle_add"},{kind:"curve.path",label:"Path",group:"Curve",call:"curve.primitive_nurbs_path_add"},{kind:"curve.empty-hair",label:"Empty Hair",group:"Curve",call:"object.curves_empty_hair_add",separatorBefore:!0},{kind:"curve.fur",label:"Fur",group:"Curve",call:"object.quick_fur"},{kind:"surface.nurbs-curve",label:"Nurbs Curve",group:"Surface",call:"surface.primitive_nurbs_surface_curve_add"},{kind:"surface.nurbs-circle",label:"Nurbs Circle",group:"Surface",call:"surface.primitive_nurbs_surface_circle_add"},{kind:"surface.nurbs-surface",label:"Nurbs Surface",group:"Surface",call:"surface.primitive_nurbs_surface_surface_add"},{kind:"surface.nurbs-cylinder",label:"Nurbs Cylinder",group:"Surface",call:"surface.primitive_nurbs_surface_cylinder_add"},{kind:"surface.nurbs-sphere",label:"Nurbs Sphere",group:"Surface",call:"surface.primitive_nurbs_surface_sphere_add"},{kind:"surface.nurbs-torus",label:"Nurbs Torus",group:"Surface",call:"surface.primitive_nurbs_surface_torus_add"},{kind:"metaball.ball",label:"Ball",group:"Metaball",call:"object.metaball_add, type='BALL'"},{kind:"metaball.capsule",label:"Capsule",group:"Metaball",call:"object.metaball_add, type='CAPSULE'"},{kind:"metaball.plane",label:"Plane",group:"Metaball",call:"object.metaball_add, type='PLANE'"},{kind:"metaball.ellipsoid",label:"Ellipsoid",group:"Metaball",call:"object.metaball_add, type='ELLIPSOID'"},{kind:"metaball.cube",label:"Cube",group:"Metaball",call:"object.metaball_add, type='CUBE'"},{kind:"text",label:"Text",group:null,call:"object.text_add"},{kind:"point-cloud",label:"Point Cloud",group:null,call:"object.pointcloud_random_add"},{kind:"volume.import",label:"Import OpenVDB...",group:"Volume",call:"object.volume_import",refusal:`${K("Importing an OpenVDB volume","CANCELLED, with nothing created")} This build also has no OpenVDB at all (\`bpy.app.build_options.openvdb\` is False), so a file would not be read even with a picker.`},{kind:"volume.empty",label:"Empty",group:"Volume",call:"object.volume_add"},{kind:"grease-pencil.blank",label:"Blank",group:"Grease Pencil",call:"object.grease_pencil_add, type='EMPTY'"},{kind:"grease-pencil.stroke",label:"Stroke",group:"Grease Pencil",call:"object.grease_pencil_add, type='STROKE'"},{kind:"grease-pencil.monkey",label:"Monkey",group:"Grease Pencil",call:"object.grease_pencil_add, type='MONKEY'"},{kind:"grease-pencil.lineart-scene",label:"Scene Line Art",group:"Grease Pencil",call:"object.grease_pencil_add, type='LINEART_SCENE'",separatorBefore:!0},{kind:"grease-pencil.lineart-collection",label:"Collection Line Art",group:"Grease Pencil",call:"object.grease_pencil_add, type='LINEART_COLLECTION'"},{kind:"grease-pencil.lineart-object",label:"Object Line Art",group:"Grease Pencil",call:"object.grease_pencil_add, type='LINEART_OBJECT'"},{kind:"armature",label:"Armature",group:null,call:"object.armature_add"},{kind:"lattice.lattice",label:"Lattice",group:"Lattice",call:"object.add, type='LATTICE'"},{kind:"lattice.deform-selected",label:"Lattice Deform Selected",group:"Lattice",call:"object.lattice_add_to_selected"},{kind:"empty.plain-axes",label:"Plain Axes",group:"Empty",call:"object.empty_add, type='PLAIN_AXES'"},{kind:"empty.arrows",label:"Arrows",group:"Empty",call:"object.empty_add, type='ARROWS'"},{kind:"empty.single-arrow",label:"Single Arrow",group:"Empty",call:"object.empty_add, type='SINGLE_ARROW'"},{kind:"empty.circle",label:"Circle",group:"Empty",call:"object.empty_add, type='CIRCLE'"},{kind:"empty.cube",label:"Cube",group:"Empty",call:"object.empty_add, type='CUBE'"},{kind:"empty.sphere",label:"Sphere",group:"Empty",call:"object.empty_add, type='SPHERE'"},{kind:"empty.cone",label:"Cone",group:"Empty",call:"object.empty_add, type='CONE'"},{kind:"image.reference",label:"Reference...",group:"Image",call:"object.empty_image_add, background=False",refusal:K("A reference image","poll() failed, context is incorrect / Please select at least one image")},{kind:"image.background",label:"Background...",group:"Image",call:"object.empty_image_add, background=True",refusal:K("A background image","poll() failed, context is incorrect / Please select at least one image")},{kind:"image.mesh-plane",label:"Mesh Plane...",group:"Image",call:"image.import_as_mesh_planes",refusal:K("An image as a mesh plane","CANCELLED, with nothing created")},{kind:"image.empty-image",label:"Empty Image",group:"Image",call:"object.empty_add, type='IMAGE'"},{kind:"light.point",label:"Point",group:"Light",call:"object.light_add, type='POINT'"},{kind:"light.sun",label:"Sun",group:"Light",call:"object.light_add, type='SUN'"},{kind:"light.spot",label:"Spot",group:"Light",call:"object.light_add, type='SPOT'"},{kind:"light.area",label:"Area",group:"Light",call:"object.light_add, type='AREA'"},{kind:"light-probe.sphere",label:"Sphere",group:"Light Probe",call:"object.lightprobe_add, type='SPHERE'"},{kind:"light-probe.plane",label:"Plane",group:"Light Probe",call:"object.lightprobe_add, type='PLANE'"},{kind:"light-probe.volume",label:"Volume",group:"Light Probe",call:"object.lightprobe_add, type='VOLUME'"},{kind:"camera",label:"Camera",group:null,call:"object.camera_add"},{kind:"speaker",label:"Speaker",group:null,call:"object.speaker_add"},{kind:"force-field.force",label:"Force",group:"Force Field",call:"object.effector_add, type='FORCE'"},{kind:"force-field.wind",label:"Wind",group:"Force Field",call:"object.effector_add, type='WIND'"},{kind:"force-field.vortex",label:"Vortex",group:"Force Field",call:"object.effector_add, type='VORTEX'"},{kind:"force-field.magnetic",label:"Magnetic",group:"Force Field",call:"object.effector_add, type='MAGNET'"},{kind:"force-field.harmonic",label:"Harmonic",group:"Force Field",call:"object.effector_add, type='HARMONIC'"},{kind:"force-field.charge",label:"Charge",group:"Force Field",call:"object.effector_add, type='CHARGE'"},{kind:"force-field.lennard-jones",label:"Lennard-Jones",group:"Force Field",call:"object.effector_add, type='LENNARDJ'"},{kind:"force-field.texture",label:"Texture",group:"Force Field",call:"object.effector_add, type='TEXTURE'"},{kind:"force-field.curve-guide",label:"Curve Guide",group:"Force Field",call:"object.effector_add, type='GUIDE'"},{kind:"force-field.boid",label:"Boid",group:"Force Field",call:"object.effector_add, type='BOID'"},{kind:"force-field.turbulence",label:"Turbulence",group:"Force Field",call:"object.effector_add, type='TURBULENCE'"},{kind:"force-field.drag",label:"Drag",group:"Force Field",call:"object.effector_add, type='DRAG'"},{kind:"force-field.fluid-flow",label:"Fluid Flow",group:"Force Field",call:"object.effector_add, type='FLUID'"}],mt="collection-instance:";function ht(){const t=new Map;for(const a of X().byId.values()){if(a.type!=="TSE_LAYER_COLLECTION")continue;const o=a.data;o===void 0||!o.startsWith("bpy.data.collections[")||t.has(a.name)||t.set(a.name,{kind:`${mt}${a.name}`,label:a.name,group:"Collection Instance",call:`object.collection_instance_add, collection=${V(a.name)}`})}return[...t.values()]}function Z(){return[...ft,...ht()]}function gt(t){const[a,...o]=t.call.split(", ");return`bpy.ops.${a}(${o.join(", ")})`}function V(t){return JSON.stringify(t)}const _t={"curve.primitive_bezier_circle_add":"Add Bézier Circle","curve.primitive_bezier_curve_add":"Add Bézier","curve.primitive_nurbs_circle_add":"Add Nurbs Circle","curve.primitive_nurbs_curve_add":"Add Nurbs Curve","curve.primitive_nurbs_path_add":"Add Path","image.import_as_mesh_planes":"Import Images as Planes","mesh.primitive_circle_add":"Add Circle","mesh.primitive_cone_add":"Add Cone","mesh.primitive_cube_add":"Add Cube","mesh.primitive_cylinder_add":"Add Cylinder","mesh.primitive_grid_add":"Add Grid","mesh.primitive_ico_sphere_add":"Add Ico Sphere","mesh.primitive_monkey_add":"Add Monkey","mesh.primitive_plane_add":"Add Plane","mesh.primitive_torus_add":"Add Torus","mesh.primitive_uv_sphere_add":"Add UV Sphere","object.armature_add":"Add Armature","object.camera_add":"Add Camera","object.collection_add":"Add to Collection","object.collection_instance_add":"Add Collection Instance","object.constraint_add":"Add Constraint","object.curves_empty_hair_add":"Add Empty Curves","object.curves_random_add":"Add Random Curves","object.data_instance_add":"Add Object Data Instance","object.delete":"Delete","object.duplicate":"Duplicate Objects","object.effector_add":"Add Effector","object.empty_add":"Add Empty","object.empty_image_add":"Add Empty Image/Drop Image to Empty","object.grease_pencil_add":"Add Grease Pencil","object.grease_pencil_dash_modifier_segment_add":"Add Segment","object.grease_pencil_time_modifier_segment_add":"Add Segment","object.lattice_add_to_selected":"Add Lattice Deformer","object.light_add":"Add Light","object.lightprobe_add":"Add Light Probe","object.location_clear":"Clear Location","object.material_slot_add":"Add Material Slot","object.metaball_add":"Add Metaball","object.modifier_add":"Add Modifier","object.origin_set":"Set Origin","object.particle_system_add":"Add Particle System Slot","object.pointcloud_random_add":"Add Point Cloud","object.quick_fur":"Quick Fur","object.rotation_clear":"Clear Rotation","object.scale_clear":"Clear Scale","object.shaderfx_add":"Add Effect","object.shape_key_add":"Add Shape Key","object.speaker_add":"Add Speaker","object.text_add":"Add Text","object.transform_apply":"Apply Object Transform","object.vertex_group_add":"Add Vertex Group","object.volume_add":"Add Volume","object.volume_import":"Import OpenVDB Volume","surface.primitive_nurbs_surface_circle_add":"Add Surface Circle","surface.primitive_nurbs_surface_curve_add":"Add Surface Curve","surface.primitive_nurbs_surface_cylinder_add":"Add Surface Cylinder","surface.primitive_nurbs_surface_sphere_add":"Add Surface Sphere","surface.primitive_nurbs_surface_surface_add":"Add Surface Patch","surface.primitive_nurbs_surface_torus_add":"Add Surface Torus"};function jt(t){const a=/bpy\.ops\.([a-z_]+\.[a-z0-9_]+)\(/.exec(t)?.[1];return a===void 0?void 0:_t[a]}async function z(t,a){const o=["before = {o.name for o in bpy.data.objects}",t,"made = [o.name for o in bpy.data.objects if o.name not in before]",'print("\\n".join(made))'].join(`
1
+ import{a as u}from"./jsx-runtime-DPjLkJKQ.js";import{j3 as Ie,bt as Ce,r as B,bv as Te,fN as H,bB as F,bC as U,hR as De,bA as Pe,j4 as Be,bK as $e,bq as be,bn as Ve,j5 as Ge,j6 as pe,j7 as He,j8 as We,j9 as ze,ja as fe,bs as me,bp as Ue}from"./index-Cuhs4tVm.js";import{c as Ke,a as Y}from"./blender-runtime-skin-RjdCYOfv.js";import{r as m}from"./index-nmcBqr7Y.js";import{u as qe,v as J,k as X,w as Q,x as Ye,y as oe,t as he,z as Je,A as Xe,B as ge,C as Qe,D as te,E as Ze,F as et,G as tt,H as rt,I as nt}from"./blender-runtime-host-D0kmlbFS.js";import{r as ot}from"./index-CtzuWnCS.js";import{a as at}from"./three-contract-Dkt6PmWY.js";import{b as W,o as re}from"./viewport-door-BaS9f0E1.js";import{s as lt,a as st}from"./object3d-document-session-registry-D-Y_qGrp.js";import{d9 as it}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"./LineSegments2-DN9pUfWA.js";import"./three.module-BLhyNg0e.js";import"./preview-renderer-BrYNFV1p.js";import"./environment-Dg-YaLsA.js";import"./RoomEnvironment-BkknvS_I.js";import"./EXRLoader-CITMBvGd.js";import"./HDRLoader-BTGuGhVo.js";import"./renderer-ownership-BovSEcLv.js";import"./output-pass-HurwNl0G.js";import"./Pass-D1MRT672.js";import"./clip-planes-CnAI6DZn.js";import"./content-bounds-dSublDNs.js";import"./hierarchy-marks-DhX6Vk-i.js";import"./workspace-arrangement-B9_XkdLK.js";function Oe(t){const a=Number.isFinite(t)&&t>0?t:50;return{degrees:2*Math.atan(72/(2*a))*180/Math.PI,axis:"larger"}}Ie("model",{camera:{fov:Oe(50),opening:[.8187,.4458,.3617]},interaction:{bootTool:"select",boxSelect:"touch"},all:{lighting:{source:"studio",studioPreset:Ce.id,auto:null,tone:{mapper:"none",exposure:1}},xray:{enabled:!1,alpha:.5}},modes:{wireframe:{xray:{enabled:!0,alpha:0}},preview:{lighting:{source:"preview",auto:null,preview:{sceneLights:!1,sun:{enabled:!1},environment:{enabled:!0,image:"blender:forest",energy:1,rotation:0}},tone:{mapper:"agx",exposure:1}},backdrop:{source:"fill"}},rendered:{lighting:{source:"scene",auto:null,tone:{mapper:"agx",exposure:1}},backdrop:{source:"scene"}}},overlays:{selection:{origins:!0}},world:{upAxis:"z"}});function ct(t){return`blender-${t.toLowerCase().replace(/_/g,"-")}`}function P(t){return t?.type==="TSE_SOME_ID"&&t.struct==="Object"&&t.object!==void 0}function _e(t){if(t.struct)return t.struct}function je(t,a){return{id:t.id,label:t.name,role:"entity",kind:ct(t.icon),..._e(t)?{typeLabel:_e(t)}:{},parentId:a,childIds:t.children.map(o=>o.id),defaultExpanded:t.expanded}}const dt={transform:!0,inspectorFields:!1,persist:!0},ee=new Set;let Ae=0;const ae=new Set;function ye(){queueMicrotask(()=>{Ae++;for(const t of ae)t()})}function ut(t){return ae.add(t),()=>{ae.delete(t)}}function ve(){return Ae}function bt(t){for(const a of ee)if(a.documentId===t||a.documentId===`object3d-document:${t}`)return a;return ee.values().next().value??null}const pt=()=>({position:[0,0,0],rotation:[0,0,0,1],scale:[1,1,1]});function Se(t,a){t.updateWorldMatrix(!0,!1);const o=a.matrixWorld.clone().invert().multiply(t.matrixWorld).elements;return[[o[0],o[1],o[2],o[3]],[o[4],o[5],o[6],o[7]],[o[8],o[9],o[10],o[11]],[o[12],o[13],o[14],o[15]]]}function K(t,a){return`${t} needs a file, and this editor has no door to ask for one: the host's file door (\`EditorHost.files\`, \`@volter/editor-sdk/host\`) reads and writes project-relative paths and has no file-picker member, so there is nothing to open the workbench's own dialog through. Blender's row opens a file browser; run without one, the engine answers "${a}".`}const ft=[{kind:"mesh.plane",label:"Plane",group:"Mesh",call:"mesh.primitive_plane_add"},{kind:"mesh.cube",label:"Cube",group:"Mesh",call:"mesh.primitive_cube_add"},{kind:"mesh.circle",label:"Circle",group:"Mesh",call:"mesh.primitive_circle_add"},{kind:"mesh.uv-sphere",label:"UV Sphere",group:"Mesh",call:"mesh.primitive_uv_sphere_add"},{kind:"mesh.ico-sphere",label:"Ico Sphere",group:"Mesh",call:"mesh.primitive_ico_sphere_add"},{kind:"mesh.cylinder",label:"Cylinder",group:"Mesh",call:"mesh.primitive_cylinder_add"},{kind:"mesh.cone",label:"Cone",group:"Mesh",call:"mesh.primitive_cone_add"},{kind:"mesh.torus",label:"Torus",group:"Mesh",call:"mesh.primitive_torus_add"},{kind:"mesh.grid",label:"Grid",group:"Mesh",call:"mesh.primitive_grid_add",separatorBefore:!0},{kind:"mesh.monkey",label:"Monkey",group:"Mesh",call:"mesh.primitive_monkey_add"},{kind:"curve.bezier",label:"Bézier",group:"Curve",call:"curve.primitive_bezier_curve_add"},{kind:"curve.bezier-circle",label:"Circle",group:"Curve",call:"curve.primitive_bezier_circle_add"},{kind:"curve.nurbs-curve",label:"Nurbs Curve",group:"Curve",call:"curve.primitive_nurbs_curve_add",separatorBefore:!0},{kind:"curve.nurbs-circle",label:"Nurbs Circle",group:"Curve",call:"curve.primitive_nurbs_circle_add"},{kind:"curve.path",label:"Path",group:"Curve",call:"curve.primitive_nurbs_path_add"},{kind:"curve.empty-hair",label:"Empty Hair",group:"Curve",call:"object.curves_empty_hair_add",separatorBefore:!0},{kind:"curve.fur",label:"Fur",group:"Curve",call:"object.quick_fur"},{kind:"surface.nurbs-curve",label:"Nurbs Curve",group:"Surface",call:"surface.primitive_nurbs_surface_curve_add"},{kind:"surface.nurbs-circle",label:"Nurbs Circle",group:"Surface",call:"surface.primitive_nurbs_surface_circle_add"},{kind:"surface.nurbs-surface",label:"Nurbs Surface",group:"Surface",call:"surface.primitive_nurbs_surface_surface_add"},{kind:"surface.nurbs-cylinder",label:"Nurbs Cylinder",group:"Surface",call:"surface.primitive_nurbs_surface_cylinder_add"},{kind:"surface.nurbs-sphere",label:"Nurbs Sphere",group:"Surface",call:"surface.primitive_nurbs_surface_sphere_add"},{kind:"surface.nurbs-torus",label:"Nurbs Torus",group:"Surface",call:"surface.primitive_nurbs_surface_torus_add"},{kind:"metaball.ball",label:"Ball",group:"Metaball",call:"object.metaball_add, type='BALL'"},{kind:"metaball.capsule",label:"Capsule",group:"Metaball",call:"object.metaball_add, type='CAPSULE'"},{kind:"metaball.plane",label:"Plane",group:"Metaball",call:"object.metaball_add, type='PLANE'"},{kind:"metaball.ellipsoid",label:"Ellipsoid",group:"Metaball",call:"object.metaball_add, type='ELLIPSOID'"},{kind:"metaball.cube",label:"Cube",group:"Metaball",call:"object.metaball_add, type='CUBE'"},{kind:"text",label:"Text",group:null,call:"object.text_add"},{kind:"point-cloud",label:"Point Cloud",group:null,call:"object.pointcloud_random_add"},{kind:"volume.import",label:"Import OpenVDB...",group:"Volume",call:"object.volume_import",refusal:`${K("Importing an OpenVDB volume","CANCELLED, with nothing created")} This build also has no OpenVDB at all (\`bpy.app.build_options.openvdb\` is False), so a file would not be read even with a picker.`},{kind:"volume.empty",label:"Empty",group:"Volume",call:"object.volume_add"},{kind:"grease-pencil.blank",label:"Blank",group:"Grease Pencil",call:"object.grease_pencil_add, type='EMPTY'"},{kind:"grease-pencil.stroke",label:"Stroke",group:"Grease Pencil",call:"object.grease_pencil_add, type='STROKE'"},{kind:"grease-pencil.monkey",label:"Monkey",group:"Grease Pencil",call:"object.grease_pencil_add, type='MONKEY'"},{kind:"grease-pencil.lineart-scene",label:"Scene Line Art",group:"Grease Pencil",call:"object.grease_pencil_add, type='LINEART_SCENE'",separatorBefore:!0},{kind:"grease-pencil.lineart-collection",label:"Collection Line Art",group:"Grease Pencil",call:"object.grease_pencil_add, type='LINEART_COLLECTION'"},{kind:"grease-pencil.lineart-object",label:"Object Line Art",group:"Grease Pencil",call:"object.grease_pencil_add, type='LINEART_OBJECT'"},{kind:"armature",label:"Armature",group:null,call:"object.armature_add"},{kind:"lattice.lattice",label:"Lattice",group:"Lattice",call:"object.add, type='LATTICE'"},{kind:"lattice.deform-selected",label:"Lattice Deform Selected",group:"Lattice",call:"object.lattice_add_to_selected"},{kind:"empty.plain-axes",label:"Plain Axes",group:"Empty",call:"object.empty_add, type='PLAIN_AXES'"},{kind:"empty.arrows",label:"Arrows",group:"Empty",call:"object.empty_add, type='ARROWS'"},{kind:"empty.single-arrow",label:"Single Arrow",group:"Empty",call:"object.empty_add, type='SINGLE_ARROW'"},{kind:"empty.circle",label:"Circle",group:"Empty",call:"object.empty_add, type='CIRCLE'"},{kind:"empty.cube",label:"Cube",group:"Empty",call:"object.empty_add, type='CUBE'"},{kind:"empty.sphere",label:"Sphere",group:"Empty",call:"object.empty_add, type='SPHERE'"},{kind:"empty.cone",label:"Cone",group:"Empty",call:"object.empty_add, type='CONE'"},{kind:"image.reference",label:"Reference...",group:"Image",call:"object.empty_image_add, background=False",refusal:K("A reference image","poll() failed, context is incorrect / Please select at least one image")},{kind:"image.background",label:"Background...",group:"Image",call:"object.empty_image_add, background=True",refusal:K("A background image","poll() failed, context is incorrect / Please select at least one image")},{kind:"image.mesh-plane",label:"Mesh Plane...",group:"Image",call:"image.import_as_mesh_planes",refusal:K("An image as a mesh plane","CANCELLED, with nothing created")},{kind:"image.empty-image",label:"Empty Image",group:"Image",call:"object.empty_add, type='IMAGE'"},{kind:"light.point",label:"Point",group:"Light",call:"object.light_add, type='POINT'"},{kind:"light.sun",label:"Sun",group:"Light",call:"object.light_add, type='SUN'"},{kind:"light.spot",label:"Spot",group:"Light",call:"object.light_add, type='SPOT'"},{kind:"light.area",label:"Area",group:"Light",call:"object.light_add, type='AREA'"},{kind:"light-probe.sphere",label:"Sphere",group:"Light Probe",call:"object.lightprobe_add, type='SPHERE'"},{kind:"light-probe.plane",label:"Plane",group:"Light Probe",call:"object.lightprobe_add, type='PLANE'"},{kind:"light-probe.volume",label:"Volume",group:"Light Probe",call:"object.lightprobe_add, type='VOLUME'"},{kind:"camera",label:"Camera",group:null,call:"object.camera_add"},{kind:"speaker",label:"Speaker",group:null,call:"object.speaker_add"},{kind:"force-field.force",label:"Force",group:"Force Field",call:"object.effector_add, type='FORCE'"},{kind:"force-field.wind",label:"Wind",group:"Force Field",call:"object.effector_add, type='WIND'"},{kind:"force-field.vortex",label:"Vortex",group:"Force Field",call:"object.effector_add, type='VORTEX'"},{kind:"force-field.magnetic",label:"Magnetic",group:"Force Field",call:"object.effector_add, type='MAGNET'"},{kind:"force-field.harmonic",label:"Harmonic",group:"Force Field",call:"object.effector_add, type='HARMONIC'"},{kind:"force-field.charge",label:"Charge",group:"Force Field",call:"object.effector_add, type='CHARGE'"},{kind:"force-field.lennard-jones",label:"Lennard-Jones",group:"Force Field",call:"object.effector_add, type='LENNARDJ'"},{kind:"force-field.texture",label:"Texture",group:"Force Field",call:"object.effector_add, type='TEXTURE'"},{kind:"force-field.curve-guide",label:"Curve Guide",group:"Force Field",call:"object.effector_add, type='GUIDE'"},{kind:"force-field.boid",label:"Boid",group:"Force Field",call:"object.effector_add, type='BOID'"},{kind:"force-field.turbulence",label:"Turbulence",group:"Force Field",call:"object.effector_add, type='TURBULENCE'"},{kind:"force-field.drag",label:"Drag",group:"Force Field",call:"object.effector_add, type='DRAG'"},{kind:"force-field.fluid-flow",label:"Fluid Flow",group:"Force Field",call:"object.effector_add, type='FLUID'"}],mt="collection-instance:";function ht(){const t=new Map;for(const a of X().byId.values()){if(a.type!=="TSE_LAYER_COLLECTION")continue;const o=a.data;o===void 0||!o.startsWith("bpy.data.collections[")||t.has(a.name)||t.set(a.name,{kind:`${mt}${a.name}`,label:a.name,group:"Collection Instance",call:`object.collection_instance_add, collection=${V(a.name)}`})}return[...t.values()]}function Z(){return[...ft,...ht()]}function gt(t){const[a,...o]=t.call.split(", ");return`bpy.ops.${a}(${o.join(", ")})`}function V(t){return JSON.stringify(t)}const _t={"curve.primitive_bezier_circle_add":"Add Bézier Circle","curve.primitive_bezier_curve_add":"Add Bézier","curve.primitive_nurbs_circle_add":"Add Nurbs Circle","curve.primitive_nurbs_curve_add":"Add Nurbs Curve","curve.primitive_nurbs_path_add":"Add Path","image.import_as_mesh_planes":"Import Images as Planes","mesh.primitive_circle_add":"Add Circle","mesh.primitive_cone_add":"Add Cone","mesh.primitive_cube_add":"Add Cube","mesh.primitive_cylinder_add":"Add Cylinder","mesh.primitive_grid_add":"Add Grid","mesh.primitive_ico_sphere_add":"Add Ico Sphere","mesh.primitive_monkey_add":"Add Monkey","mesh.primitive_plane_add":"Add Plane","mesh.primitive_torus_add":"Add Torus","mesh.primitive_uv_sphere_add":"Add UV Sphere","object.armature_add":"Add Armature","object.camera_add":"Add Camera","object.collection_add":"Add to Collection","object.collection_instance_add":"Add Collection Instance","object.constraint_add":"Add Constraint","object.curves_empty_hair_add":"Add Empty Curves","object.curves_random_add":"Add Random Curves","object.data_instance_add":"Add Object Data Instance","object.delete":"Delete","object.duplicate":"Duplicate Objects","object.effector_add":"Add Effector","object.empty_add":"Add Empty","object.empty_image_add":"Add Empty Image/Drop Image to Empty","object.grease_pencil_add":"Add Grease Pencil","object.grease_pencil_dash_modifier_segment_add":"Add Segment","object.grease_pencil_time_modifier_segment_add":"Add Segment","object.lattice_add_to_selected":"Add Lattice Deformer","object.light_add":"Add Light","object.lightprobe_add":"Add Light Probe","object.location_clear":"Clear Location","object.material_slot_add":"Add Material Slot","object.metaball_add":"Add Metaball","object.modifier_add":"Add Modifier","object.origin_set":"Set Origin","object.particle_system_add":"Add Particle System Slot","object.pointcloud_random_add":"Add Point Cloud","object.quick_fur":"Quick Fur","object.rotation_clear":"Clear Rotation","object.scale_clear":"Clear Scale","object.shaderfx_add":"Add Effect","object.shape_key_add":"Add Shape Key","object.speaker_add":"Add Speaker","object.text_add":"Add Text","object.transform_apply":"Apply Object Transform","object.vertex_group_add":"Add Vertex Group","object.volume_add":"Add Volume","object.volume_import":"Import OpenVDB Volume","surface.primitive_nurbs_surface_circle_add":"Add Surface Circle","surface.primitive_nurbs_surface_curve_add":"Add Surface Curve","surface.primitive_nurbs_surface_cylinder_add":"Add Surface Cylinder","surface.primitive_nurbs_surface_sphere_add":"Add Surface Sphere","surface.primitive_nurbs_surface_surface_add":"Add Surface Patch","surface.primitive_nurbs_surface_torus_add":"Add Surface Torus"};function jt(t){const a=/bpy\.ops\.([a-z_]+\.[a-z0-9_]+)\(/.exec(t)?.[1];return a===void 0?void 0:_t[a]}async function z(t,a){const o=["before = {o.name for o in bpy.data.objects}",t,"made = [o.name for o in bpy.data.objects if o.name not in before]",'print("\\n".join(made))'].join(`
2
2
  `),i=await te(o,!0,a??jt(t));return i.error!==null?{made:[],error:i.error}:{made:i.result.split(`
3
3
  `).map(p=>p.trim()).filter(p=>p.length>0),error:null}}async function yt(t,a){const o=[`_sel = {${t.map(V).join(", ")}}`,"_vl = bpy.context.view_layer","for _o in _vl.objects:"," _o.select_set(_o.name in _sel)",a===null?"_vl.objects.active = None":`_vl.objects.active = bpy.data.objects.get(${V(a)})`].join(`
4
4
  `),i=await te(o,!1);i.error!==null&&B().console.error(`Blender refused the selection write: ${i.error}`,"blender-outliner")}async function ne(t,a){if(t.length===0)return{destination:"Nothing is selected, so there was nothing to run it on.",persisted:!1};const o=[`targets = [bpy.data.objects[n] for n in [${t.map(V).join(", ")}]]`,"with bpy.context.temp_override(selected_objects=targets, selected_editable_objects=targets, active_object=targets[0], object=targets[0]):",` ${a}`].join(`
@@ -1 +1 @@
1
- import{r as s,t as n}from"./index-D8WZNJyr.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";const w="workspace.menu",b={menu:"window",items:[{id:"blender-save-screenshot-editor",label:"Save Screenshot (Editor)…",testId:"menu-save-screenshot-editor",execute:async()=>{const e=s(),t=await e.documents.captureActive();n(t.base64);const o=`screenshots/screenshot-${new Date().toISOString().replace(/[:.]/g,"-")}.png`;await e.files.write(o,Uint8Array.from(atob(t.base64),r=>r.charCodeAt(0))),e.console.log(`Saved the screenshot to ${o}.`,"blender-screenshot")}}]};export{b as menu,w as point};
1
+ import{r as s,t as n}from"./index-Cuhs4tVm.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";const w="workspace.menu",b={menu:"window",items:[{id:"blender-save-screenshot-editor",label:"Save Screenshot (Editor)…",testId:"menu-save-screenshot-editor",execute:async()=>{const e=s(),t=await e.documents.captureActive();n(t.base64);const o=`screenshots/screenshot-${new Date().toISOString().replace(/[:.]/g,"-")}.png`;await e.files.write(o,Uint8Array.from(atob(t.base64),r=>r.charCodeAt(0))),e.console.log(`Saved the screenshot to ${o}.`,"blender-screenshot")}}]};export{b as menu,w as point};
@@ -1 +1 @@
1
- import{a}from"./jsx-runtime-DPjLkJKQ.js";import{s as ae,b as L,a as p,c as he}from"./blender-runtime-skin-SYIUtq-g.js";import{go as pe}from"./index-D8WZNJyr.js";import{r as f}from"./index-nmcBqr7Y.js";import{s as ye,b as Q,g as ge,i as xe}from"./blender-runtime-host-DayNDAb4.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./LineSegments2-DN9pUfWA.js";import"./three.module-BLhyNg0e.js";import"./three.core-3arARmh6.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-D_NuPfjr.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./preview-renderer-BrYNFV1p.js";import"./environment-Dg-YaLsA.js";import"./RoomEnvironment-BkknvS_I.js";import"./EXRLoader-CITMBvGd.js";import"./HDRLoader-BTGuGhVo.js";import"./renderer-ownership-BovSEcLv.js";import"./output-pass-HurwNl0G.js";import"./Pass-D1MRT672.js";import"./clip-planes-CnAI6DZn.js";import"./content-bounds-CgU8GC_V.js";import"./hierarchy-marks-C0IFZJpJ.js";import"./workspace-arrangement-DSOBJt3d.js";const we={transform:{startFrame:-5,pixelsPerFrame:8},refusal:null,size:{w:0,h:0},framedAt:0,drawn:null,onlySelected:!0};let P=we,W=0;const H=new Set;let oe=0;function M(){return P}function _(){return W}function K(e){return H.add(e),()=>{H.delete(e)}}function k(e){P={...P,...e},W+=1;for(const s of[...H])s()}function be(e){P.onlySelected!==e&&k({onlySelected:e})}function le(){oe+=1,W+=1;for(const e of[...H])e()}function Ee(){return oe}function G(e){k({refusal:e})}const Te=20,v=23,ee=26,ve=16,Me=2,ke=v+Me,te=35,Se=6;function ce(e){const s=[2,3,5],o=[];for(let r=0;r<s.length;r++){const n=s[r],i=Math.trunc(e/n),c=i*n===e;if(c&&i===2)return n;o[r]=c}for(let r=0;r<s.length;r++)if(o[r])return s[r];return e}function je(e,s,o,r){if(o===0)return 1;const n=s/o;let i=Math.max(e,1);if(n*i>r)for(;i>1;){const c=ce(i),l=Math.trunc(i/c);if(n*l<r)break;i=l}else for(;n*i<r&&i<1<<30;)i*=2;return i}function Fe(e){return e<=1?null:e/ce(Math.round(e))}const x={back:"#303030",header:"#303030",grid:"#161616",gridMinor:"#262626",scrubBack:"#1d1d1d",scrubText:"#808080",playhead:"#4772b3",playheadText:"#ffffff",keyBorder:"#000000"},re={KEYFRAME:{fill:"#bfbfbf",selected:"#ffbe33"},EXTREME:{fill:"#e8b3cc",selected:"#f28080"},BREAKDOWN:{fill:"#b3dbe8",selected:"#54bfed"},JITTER:{fill:"#94e575",selected:"#61c042"},MOVING_HOLD:{fill:"#808080",selected:"#ffaf23"},GENERATED:{fill:"#585858",selected:"#a28962"}},Ne={KEYFRAME:1,EXTREME:1.2,MOVING_HOLD:.925,BREAKDOWN:.85,JITTER:.8,GENERATED:.75},ne=5.06,Ae=2.12,_e=15,g={minPillWidth:24,textPadding:4,margin:2,radius:4,tipHalfWidth:6,tipHeight:6,stalkWidth:3},ie="#212121",d={text:"#a6a6a6",rule:"#161616",widget:"#545454",widgetText:"#e6e6e6",widgetOutline:"#3d3d3d",widgetRadius:4,unit:Te,refusal:"#ffaf23",headerPadding:"0 8px",headerGap:8,statusPadding:"2px 8px"},lt="workspace.document",Re="Timeline",de=.25,me=200,B={"set-range":"Setting the frame range writes `scene.frame_start`/`frame_end`, which the document would save. This is Blender's Timeline as an INSPECTION surface: the range is drawn, never set. Change it in bpy and the Timeline re-reads it.","insert-key":"Inserting a keyframe writes the action. Editing parity is not the program — key it in bpy (`pose_bone.keyframe_insert`) and the Timeline re-reads the action on the next present.","move-key":"Moving a keyframe writes the F-Curve's control points. The summary row draws the keys the action HAS; the Dope Sheet that would move them is the Animation workspace's, and it is not built.","delete-key":"Deleting a keyframe writes the action. Editing parity is not the program.","set-interpolation":"Setting a key's interpolation writes the F-Curve. Note also that this view PLAYS a per-frame bake (`rna_action_clip`), so interpolation is not a thing it reads back.","select-key":"Selecting a keyframe writes `Keyframe.select_control_point`. The view draws the flags the data carries — a selected key takes `.common.anim.keyframe_selected` — and changes none of them."},z="No scene transport is attached yet; open the model document first.";function h(){return p.transport}function V(){return h()?.snapshot().playbackState==="playing"}function $(e){return G(e),T()}const se={JITTER:1,GENERATED:2,MOVING_HOLD:3,BREAKDOWN:4,KEYFRAME:5,EXTREME:6};function ue(e,s){const o=[],r=new Map;for(const n of e)if(!(s&&!n.selected)){o.push(n.object);for(const i of n.keyframes){const c=r.get(i.frame);if(!c){r.set(i.frame,{...i});continue}c.select=c.select||i.select,(se[i.type]??0)>(se[c.type]??0)&&(c.type=i.type)}}return{columns:[...r.values()].sort((n,i)=>n.frame-i.frame),objects:o}}function D(){return ue(p.state().summary,M().onlySelected).columns.map(e=>e.frame)}function T(){const e=M();return{...p.state(),transform:e.transform,size:e.size,refusal:e.refusal,drawn:e.drawn}}function O(e){if(!p.playable)return $(z);const s=h();return s?(s.seekFrame(e),T()):$("No stage transport is attached yet; open the model document first.")}pe({view:"timeline",title:Re,verbs:[{id:"state",run:()=>T()},{id:"frame",title:"Timeline: Set Frame",run:e=>{const s=Number(e?.frame??e?.to);if(!Number.isFinite(s))throw new Error("frame needs a numeric `frame` — a Blender frame number.");return O(s)}},{id:"play",title:"Timeline: Play",run:()=>{if(!p.playable)throw new Error(z);const e=h();if(!e)throw new Error("No stage transport is attached yet; open the model document first.");return e.play(),T()}},{id:"pause",title:"Timeline: Pause",run:()=>{const e=h();return e?(e.pause(),T()):$("No stage transport is attached yet.")}},{id:"jump-start",title:"Timeline: Jump to Start",run:()=>O(p.state().start)},{id:"jump-end",title:"Timeline: Jump to End",run:()=>O(p.state().end)},{id:"next-keyframe",title:"Timeline: Next Keyframe",run:()=>{const e=p.frame(),s=D().find(o=>o>e+1e-4);return s===void 0?T():O(s)}},{id:"prev-keyframe",title:"Timeline: Previous Keyframe",run:()=>{const e=p.frame(),s=D().reverse().find(o=>o<e-1e-4);return s===void 0?T():O(s)}},{id:"view-all",title:"Timeline: View All",run:()=>(le(),T())},{id:"zoom",title:"Timeline: Zoom",run:e=>{const s=Number(e?.to??e?.zoom);if(!Number.isFinite(s))throw new Error("zoom needs a numeric `to` — CSS pixels per frame, 0.25 … 200.");const{transform:o,size:r}=M(),n=o.startFrame+r.w/2/o.pixelsPerFrame,i=Math.min(me,Math.max(de,s));return k({transform:{pixelsPerFrame:i,startFrame:n-r.w/2/i}}),T()}},{id:"pan",title:"Timeline: Pan",run:e=>{const s=Number(e?.frames??0);if(!Number.isFinite(s))throw new Error("pan needs a numeric `frames`.");const{transform:o}=M();return k({transform:{...o,startFrame:o.startFrame+s}}),T()}},...Object.keys(B).map(e=>({id:e,run:()=>$(B[e])}))]});function ct(){const e=f.useSyncExternalStore(ye,Q,Q);f.useSyncExternalStore(ae,L,L),f.useSyncExternalStore(K,_,_);const s=f.useRef(null),o=f.useRef(-1),{transform:r,size:n,refusal:i,onlySelected:c}=M(),l=p.state();f.useEffect(()=>{let t=!0;return p.bind(he,{rig:()=>xe(),clip:()=>ge()}).catch(m=>{t&&G(`The Timeline could not read this file's rig: ${m instanceof Error?m.message:String(m)}`)}),()=>{t=!1}},[e]),f.useEffect(()=>{const t=s.current;if(!t)return;const m=new ResizeObserver(()=>{const u={w:t.clientWidth,h:t.clientHeight},y=M().size;(y.w!==u.w||y.h!==u.h)&&k({size:u})});return m.observe(t),k({size:{w:t.clientWidth,h:t.clientHeight}}),()=>m.disconnect()},[]);const S=Ee();f.useEffect(()=>{if(S===o.current)return;o.current=S;const{w:t}=M().size;if(t===0)return;const m=Math.max(1,l.end-l.start),u=Math.min(me,Math.max(de,t*.9/m));k({transform:{pixelsPerFrame:u,startFrame:l.start-t*.05/u},framedAt:Date.now()})},[S,l.start,l.end]);const b=f.useCallback(t=>(t-r.startFrame)*r.pixelsPerFrame,[r]),Y=f.useCallback(t=>r.startFrame+t/r.pixelsPerFrame,[r]),F=f.useMemo(()=>ue(l.summary,c),[l.summary,c]),E=f.useMemo(()=>{if(n.w===0)return null;const t=n.w/r.pixelsPerFrame,m=Math.max(`${Math.round(r.startFrame)}`.length,`${Math.round(r.startFrame+t)}`.length),u=Math.max(te,m*6+Se),y=je(Math.round(l.fps),n.w+1,t,u),w=Fe(y),fe=Math.ceil(r.startFrame/y)*y,Z=[];for(let R=fe;R<=r.startFrame+t;R+=y)Z.push(R);const q=[];if(w!==null&&w*r.pixelsPerFrame>=te/5){const R=Math.ceil(r.startFrame/w)*w;for(let I=R;I<=r.startFrame+t;I+=w)Math.abs(I/y-Math.round(I/y))>1e-6&&q.push(I)}return{major:y,minor:w,majors:Z,minors:q}},[n.w,r,l.fps]),N=v,j=ke+ve/2;f.useEffect(()=>{if(!E)return;const t=[...l.warnings];l.action||t.push("Nothing in this file carries an action, so the summary row is empty — which is Blender's own empty state for a Timeline over a still file."),t.push("While a clip plays, the picture is three.js evaluating the skin over the mesh columns Blender exported at the BIND frame. Anything else Blender would re-evaluate per frame — shape keys, a Displace or Cloth modifier reading the frame, a geometry driver — does not follow the playhead."),t.push("Blender puts this view's ONLY-SHOW-SELECTED toggle in the Timeline header's View MENU (`TIME_MT_view`'s `layout.prop(scene, \"show_keys_from_selected_only\")`, `space_time.py`); this header has no menu region, so the same toggle is drawn as a header button at the leading edge, where that menu sits. The filter itself is Blender's — `ADS_FILTER_ONLYSEL`, `anim_filter.cc:254-270`, tested per object at `:2307`."),c&&F.objects.length===0&&l.summary.length>0&&t.push(`The summary row is empty because nothing animated is SELECTED, which is Blender's own answer with this filter on. ${l.summary.map(u=>u.object).join(", ")} carr${l.summary.length===1?"ies":"y"} an action; select it, or turn the filter off.`),t.push("Markers, the cache bar and the preview range are drawn by Blender's Timeline and not here; the door carries none of them.");const m={drawn:{action:l.action,object:l.object,armature:l.armature,frame:l.frame,start:l.start,end:l.end,fps:l.fps,playing:V(),keyframes:F.columns.map(u=>u.frame),onlySelected:c,summaryObjects:F.objects,majorStep:E.major,minorStep:E.minor,majorLines:E.majors.length,minorLines:E.minors.length,labels:E.majors.length,diamonds:F.columns.length,diamondRadius:ne,diamondSprite:_e,bones:l.bones,tracks:l.tracks,engineCalls:l.engineCalls,warnings:t}};JSON.stringify(m.drawn)!==JSON.stringify(M().drawn)&&k(m)},[E,l,F,c]);const C=f.useRef(!1),J=f.useCallback(t=>{const m=s.current;if(!m)return;const u=m.getBoundingClientRect();h()?.seekFrame(Math.round(Y(t-u.left)))},[Y]),U=`${Math.round(l.frame)}`,X=Math.max(g.minPillWidth,U.length*6+2*g.textPadding),A=b(l.frame);return a.jsxs("div",{"data-testid":"blender-timeline",style:{position:"absolute",inset:0,display:"flex",flexDirection:"column",overflow:"hidden",background:x.back,color:d.text,font:"11px Inter, system-ui, sans-serif"},children:[a.jsx(Oe,{}),a.jsx("div",{ref:s,style:{flex:1,minHeight:0,position:"relative"},children:a.jsxs("svg",{width:n.w,height:n.h,style:{display:"block",cursor:"ew-resize"},"aria-label":"Timeline",onPointerDown:t=>{C.current=!0,t.currentTarget.setPointerCapture(t.pointerId),J(t.clientX)},onPointerMove:t=>{C.current&&J(t.clientX)},onPointerUp:t=>{C.current=!1,t.currentTarget.releasePointerCapture(t.pointerId)},children:[a.jsx("title",{children:"Timeline"}),a.jsx("rect",{x:0,y:0,width:n.w,height:n.h,fill:x.back}),a.jsx("rect",{x:0,y:N,width:Math.max(0,b(l.start)),height:Math.max(0,n.h-N),fill:ie}),a.jsx("rect",{x:b(l.end),y:N,width:Math.max(0,n.w-b(l.end)),height:Math.max(0,n.h-N),fill:ie}),E?.minors.map(t=>a.jsx("line",{x1:b(t),y1:N,x2:b(t),y2:n.h,stroke:x.gridMinor,strokeWidth:1},`n${t}`)),E?.majors.map(t=>a.jsx("line",{x1:b(t),y1:N,x2:b(t),y2:n.h,stroke:x.grid,strokeWidth:1},`m${t}`)),a.jsx("rect",{x:0,y:0,width:n.w,height:v,fill:x.scrubBack}),E?.majors.map(t=>a.jsx("text",{x:b(t),y:15.5,textAnchor:"middle",fill:x.scrubText,fontSize:11,children:Math.round(t)},`t${t}`)),a.jsx("path",{d:`M3,${j-3.5} L6.5,${j} L3,${j+3.5} Z`,fill:x.scrubText}),F.columns.map(t=>{const m=Ne[t.type]??1,u=ne*m,y=re[t.type]??re.KEYFRAME,w=b(t.frame);return a.jsx("polygon",{points:`${w},${j-u} ${w+u},${j} ${w},${j+u} ${w-u},${j}`,fill:t.select?y.selected:y.fill,stroke:x.keyBorder,strokeWidth:Ae*m},`k${t.frame}`)}),a.jsx("rect",{x:A-g.stalkWidth/2,y:v,width:g.stalkWidth,height:Math.max(0,n.h-v),fill:x.playhead}),a.jsx("rect",{x:A-X/2,y:g.margin,width:X,height:v-2*g.margin,rx:g.radius,fill:x.playhead}),a.jsx("polygon",{points:`${A-g.tipHalfWidth},${v-g.margin} ${A+g.tipHalfWidth},${v-g.margin} ${A},${v-g.margin+g.tipHeight}`,fill:x.playhead}),a.jsx("text",{x:A,y:15.5,textAnchor:"middle",fill:x.playheadText,fontSize:11,children:U})]})}),i?a.jsx("div",{style:{borderTop:`1px solid ${d.rule}`,padding:d.statusPadding,color:d.refusal},children:i}):null]})}function Ie(){f.useSyncExternalStore(K,_,_);const{onlySelected:e}=M(),[s,o]=f.useState(!1),r=(n,i,c)=>a.jsxs("button",{type:"button",onClick:()=>{c(),o(!1)},style:{display:"flex",alignItems:"center",gap:"var(--volter-space-2)",width:"100%",padding:"var(--volter-space-1) var(--volter-space-3)",border:"none",background:"transparent",color:d.widgetText,font:"inherit",textAlign:"left",cursor:"pointer"},children:[a.jsx("span",{style:{width:12,display:"inline-block"},children:i===null?"":i?"✓":""}),n]});return a.jsxs("span",{style:{position:"relative"},children:[a.jsx("button",{type:"button","aria-haspopup":"menu","aria-expanded":s,onClick:()=>o(n=>!n),style:{border:"none",background:"transparent",color:d.text,font:"inherit",padding:"0 var(--volter-space-2)",cursor:"pointer"},children:"View"}),s?a.jsxs("span",{role:"menu",style:{position:"absolute",top:"100%",left:0,zIndex:20,minWidth:210,display:"flex",flexDirection:"column",background:d.widget,border:`1px solid ${d.widgetOutline}`,boxShadow:"0 6px 18px rgba(0,0,0,0.45)"},children:[r("Only Show Selected",e,()=>be(!e)),r("Frame All",null,()=>le())]}):null]})}function Oe(){f.useSyncExternalStore(ae,L,L),f.useSyncExternalStore(K,_,_);const e=p.state(),s=d.unit,o=p.playable,r=(i,c,l,S)=>a.jsx("button",{type:"button",title:o?S:`${S} — ${z}`,"aria-label":S,disabled:!o,onClick:l,style:{width:s,height:s,padding:0,border:`1px solid ${d.widgetOutline}`,background:d.widget,color:d.widgetText,display:"grid",placeItems:"center",cursor:o?"pointer":"not-allowed",opacity:o?1:.4},children:c},i),n=i=>a.jsx("svg",{width:12,height:12,viewBox:"0 0 12 12","aria-hidden":"true",children:a.jsx("path",{d:i,fill:d.widgetText})});return a.jsxs("div",{style:{height:ee,flex:`0 0 ${ee}px`,display:"flex",alignItems:"center",gap:d.headerGap,padding:d.headerPadding,background:x.header,borderBottom:`1px solid ${d.rule}`},children:[a.jsx("span",{style:{color:d.text},children:"Timeline"}),a.jsx(Ie,{}),a.jsx("div",{style:{flex:1}}),a.jsxs("div",{style:{display:"flex"},children:[r("jump-start",n("M2 2h1.5v8H2zM10 2v8L4.5 6z"),()=>h()?.seekFrame(e.start),"Jump to Start"),r("prev-key",n("M5 2.5v7L1.5 6zM8.5 3.2L11 6L8.5 8.8L6 6z"),()=>{const i=D().reverse().find(c=>c<p.frame()-1e-4);i!==void 0&&h()?.seekFrame(i)},"Jump to Previous Keyframe"),o&&V()?r("pause-rev",n("M3 2h2v8H3zM7 2h2v8H7z"),()=>h()?.pause(),"Pause"):r("play-reverse",n("M9 2L2 6l7 4z"),()=>h()?.play("reverse"),"Play Reverse"),o&&V()?r("pause",n("M3 2h2v8H3zM7 2h2v8H7z"),()=>h()?.pause(),"Pause"):r("play",n("M3 2l7 4-7 4z"),()=>h()?.play(),"Play"),r("next-key",n("M7 2.5v7L10.5 6zM3.5 3.2L6 6L3.5 8.8L1 6z"),()=>{const i=D().find(c=>c>p.frame()+1e-4);i!==void 0&&h()?.seekFrame(i)},"Jump to Next Keyframe"),r("jump-end",n("M10 2H8.5v8H10zM2 2v8L7.5 6z"),()=>h()?.seekFrame(e.end),"Jump to End")]}),a.jsxs("div",{style:{display:"flex"},children:[r("step-back",n("M2 2h1.5v8H2zM9.5 2v8L4.5 6z"),()=>h()?.seekFrame(Math.round(e.frame)-1),"Step Back One Frame"),r("step-forward",n("M10 2H8.5v8H10zM2.5 2v8L7.5 6z"),()=>h()?.seekFrame(Math.round(e.frame)+1),"Step Forward One Frame")]}),a.jsx("div",{style:{flex:1}}),a.jsx("input",{type:"number",value:Math.round(e.frame),onChange:i=>{const c=Number(i.target.value);Number.isFinite(c)&&h()?.seekFrame(c)},"aria-label":"Current frame",disabled:!o,title:o?void 0:z,style:{width:75,height:s,textAlign:"center",border:`1px solid ${d.widgetOutline}`,borderRadius:d.widgetRadius,background:d.widget,color:d.widgetText,font:"inherit",cursor:o?"text":"not-allowed",opacity:o?1:.4}}),a.jsxs("span",{onClick:()=>G(B["set-range"]),onKeyDown:()=>{},style:{color:d.text,cursor:"not-allowed"},children:["Start ",e.start," · End ",e.end]})]})}export{ct as default,lt as point,Re as title};
1
+ import{a}from"./jsx-runtime-DPjLkJKQ.js";import{s as ae,b as L,a as p,c as he}from"./blender-runtime-skin-RjdCYOfv.js";import{go as pe}from"./index-Cuhs4tVm.js";import{r as f}from"./index-nmcBqr7Y.js";import{s as ye,b as Q,g as ge,i as xe}from"./blender-runtime-host-D0kmlbFS.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./LineSegments2-DN9pUfWA.js";import"./three.module-BLhyNg0e.js";import"./three.core-3arARmh6.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-D_NuPfjr.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./preview-renderer-BrYNFV1p.js";import"./environment-Dg-YaLsA.js";import"./RoomEnvironment-BkknvS_I.js";import"./EXRLoader-CITMBvGd.js";import"./HDRLoader-BTGuGhVo.js";import"./renderer-ownership-BovSEcLv.js";import"./output-pass-HurwNl0G.js";import"./Pass-D1MRT672.js";import"./clip-planes-CnAI6DZn.js";import"./content-bounds-dSublDNs.js";import"./hierarchy-marks-DhX6Vk-i.js";import"./workspace-arrangement-B9_XkdLK.js";const we={transform:{startFrame:-5,pixelsPerFrame:8},refusal:null,size:{w:0,h:0},framedAt:0,drawn:null,onlySelected:!0};let P=we,W=0;const H=new Set;let oe=0;function M(){return P}function _(){return W}function K(e){return H.add(e),()=>{H.delete(e)}}function k(e){P={...P,...e},W+=1;for(const s of[...H])s()}function be(e){P.onlySelected!==e&&k({onlySelected:e})}function le(){oe+=1,W+=1;for(const e of[...H])e()}function Ee(){return oe}function G(e){k({refusal:e})}const Te=20,v=23,ee=26,ve=16,Me=2,ke=v+Me,te=35,Se=6;function ce(e){const s=[2,3,5],o=[];for(let r=0;r<s.length;r++){const n=s[r],i=Math.trunc(e/n),c=i*n===e;if(c&&i===2)return n;o[r]=c}for(let r=0;r<s.length;r++)if(o[r])return s[r];return e}function je(e,s,o,r){if(o===0)return 1;const n=s/o;let i=Math.max(e,1);if(n*i>r)for(;i>1;){const c=ce(i),l=Math.trunc(i/c);if(n*l<r)break;i=l}else for(;n*i<r&&i<1<<30;)i*=2;return i}function Fe(e){return e<=1?null:e/ce(Math.round(e))}const x={back:"#303030",header:"#303030",grid:"#161616",gridMinor:"#262626",scrubBack:"#1d1d1d",scrubText:"#808080",playhead:"#4772b3",playheadText:"#ffffff",keyBorder:"#000000"},re={KEYFRAME:{fill:"#bfbfbf",selected:"#ffbe33"},EXTREME:{fill:"#e8b3cc",selected:"#f28080"},BREAKDOWN:{fill:"#b3dbe8",selected:"#54bfed"},JITTER:{fill:"#94e575",selected:"#61c042"},MOVING_HOLD:{fill:"#808080",selected:"#ffaf23"},GENERATED:{fill:"#585858",selected:"#a28962"}},Ne={KEYFRAME:1,EXTREME:1.2,MOVING_HOLD:.925,BREAKDOWN:.85,JITTER:.8,GENERATED:.75},ne=5.06,Ae=2.12,_e=15,g={minPillWidth:24,textPadding:4,margin:2,radius:4,tipHalfWidth:6,tipHeight:6,stalkWidth:3},ie="#212121",d={text:"#a6a6a6",rule:"#161616",widget:"#545454",widgetText:"#e6e6e6",widgetOutline:"#3d3d3d",widgetRadius:4,unit:Te,refusal:"#ffaf23",headerPadding:"0 8px",headerGap:8,statusPadding:"2px 8px"},lt="workspace.document",Re="Timeline",de=.25,me=200,B={"set-range":"Setting the frame range writes `scene.frame_start`/`frame_end`, which the document would save. This is Blender's Timeline as an INSPECTION surface: the range is drawn, never set. Change it in bpy and the Timeline re-reads it.","insert-key":"Inserting a keyframe writes the action. Editing parity is not the program — key it in bpy (`pose_bone.keyframe_insert`) and the Timeline re-reads the action on the next present.","move-key":"Moving a keyframe writes the F-Curve's control points. The summary row draws the keys the action HAS; the Dope Sheet that would move them is the Animation workspace's, and it is not built.","delete-key":"Deleting a keyframe writes the action. Editing parity is not the program.","set-interpolation":"Setting a key's interpolation writes the F-Curve. Note also that this view PLAYS a per-frame bake (`rna_action_clip`), so interpolation is not a thing it reads back.","select-key":"Selecting a keyframe writes `Keyframe.select_control_point`. The view draws the flags the data carries — a selected key takes `.common.anim.keyframe_selected` — and changes none of them."},z="No scene transport is attached yet; open the model document first.";function h(){return p.transport}function V(){return h()?.snapshot().playbackState==="playing"}function $(e){return G(e),T()}const se={JITTER:1,GENERATED:2,MOVING_HOLD:3,BREAKDOWN:4,KEYFRAME:5,EXTREME:6};function ue(e,s){const o=[],r=new Map;for(const n of e)if(!(s&&!n.selected)){o.push(n.object);for(const i of n.keyframes){const c=r.get(i.frame);if(!c){r.set(i.frame,{...i});continue}c.select=c.select||i.select,(se[i.type]??0)>(se[c.type]??0)&&(c.type=i.type)}}return{columns:[...r.values()].sort((n,i)=>n.frame-i.frame),objects:o}}function D(){return ue(p.state().summary,M().onlySelected).columns.map(e=>e.frame)}function T(){const e=M();return{...p.state(),transform:e.transform,size:e.size,refusal:e.refusal,drawn:e.drawn}}function O(e){if(!p.playable)return $(z);const s=h();return s?(s.seekFrame(e),T()):$("No stage transport is attached yet; open the model document first.")}pe({view:"timeline",title:Re,verbs:[{id:"state",run:()=>T()},{id:"frame",title:"Timeline: Set Frame",run:e=>{const s=Number(e?.frame??e?.to);if(!Number.isFinite(s))throw new Error("frame needs a numeric `frame` — a Blender frame number.");return O(s)}},{id:"play",title:"Timeline: Play",run:()=>{if(!p.playable)throw new Error(z);const e=h();if(!e)throw new Error("No stage transport is attached yet; open the model document first.");return e.play(),T()}},{id:"pause",title:"Timeline: Pause",run:()=>{const e=h();return e?(e.pause(),T()):$("No stage transport is attached yet.")}},{id:"jump-start",title:"Timeline: Jump to Start",run:()=>O(p.state().start)},{id:"jump-end",title:"Timeline: Jump to End",run:()=>O(p.state().end)},{id:"next-keyframe",title:"Timeline: Next Keyframe",run:()=>{const e=p.frame(),s=D().find(o=>o>e+1e-4);return s===void 0?T():O(s)}},{id:"prev-keyframe",title:"Timeline: Previous Keyframe",run:()=>{const e=p.frame(),s=D().reverse().find(o=>o<e-1e-4);return s===void 0?T():O(s)}},{id:"view-all",title:"Timeline: View All",run:()=>(le(),T())},{id:"zoom",title:"Timeline: Zoom",run:e=>{const s=Number(e?.to??e?.zoom);if(!Number.isFinite(s))throw new Error("zoom needs a numeric `to` — CSS pixels per frame, 0.25 … 200.");const{transform:o,size:r}=M(),n=o.startFrame+r.w/2/o.pixelsPerFrame,i=Math.min(me,Math.max(de,s));return k({transform:{pixelsPerFrame:i,startFrame:n-r.w/2/i}}),T()}},{id:"pan",title:"Timeline: Pan",run:e=>{const s=Number(e?.frames??0);if(!Number.isFinite(s))throw new Error("pan needs a numeric `frames`.");const{transform:o}=M();return k({transform:{...o,startFrame:o.startFrame+s}}),T()}},...Object.keys(B).map(e=>({id:e,run:()=>$(B[e])}))]});function ct(){const e=f.useSyncExternalStore(ye,Q,Q);f.useSyncExternalStore(ae,L,L),f.useSyncExternalStore(K,_,_);const s=f.useRef(null),o=f.useRef(-1),{transform:r,size:n,refusal:i,onlySelected:c}=M(),l=p.state();f.useEffect(()=>{let t=!0;return p.bind(he,{rig:()=>xe(),clip:()=>ge()}).catch(m=>{t&&G(`The Timeline could not read this file's rig: ${m instanceof Error?m.message:String(m)}`)}),()=>{t=!1}},[e]),f.useEffect(()=>{const t=s.current;if(!t)return;const m=new ResizeObserver(()=>{const u={w:t.clientWidth,h:t.clientHeight},y=M().size;(y.w!==u.w||y.h!==u.h)&&k({size:u})});return m.observe(t),k({size:{w:t.clientWidth,h:t.clientHeight}}),()=>m.disconnect()},[]);const S=Ee();f.useEffect(()=>{if(S===o.current)return;o.current=S;const{w:t}=M().size;if(t===0)return;const m=Math.max(1,l.end-l.start),u=Math.min(me,Math.max(de,t*.9/m));k({transform:{pixelsPerFrame:u,startFrame:l.start-t*.05/u},framedAt:Date.now()})},[S,l.start,l.end]);const b=f.useCallback(t=>(t-r.startFrame)*r.pixelsPerFrame,[r]),Y=f.useCallback(t=>r.startFrame+t/r.pixelsPerFrame,[r]),F=f.useMemo(()=>ue(l.summary,c),[l.summary,c]),E=f.useMemo(()=>{if(n.w===0)return null;const t=n.w/r.pixelsPerFrame,m=Math.max(`${Math.round(r.startFrame)}`.length,`${Math.round(r.startFrame+t)}`.length),u=Math.max(te,m*6+Se),y=je(Math.round(l.fps),n.w+1,t,u),w=Fe(y),fe=Math.ceil(r.startFrame/y)*y,Z=[];for(let R=fe;R<=r.startFrame+t;R+=y)Z.push(R);const q=[];if(w!==null&&w*r.pixelsPerFrame>=te/5){const R=Math.ceil(r.startFrame/w)*w;for(let I=R;I<=r.startFrame+t;I+=w)Math.abs(I/y-Math.round(I/y))>1e-6&&q.push(I)}return{major:y,minor:w,majors:Z,minors:q}},[n.w,r,l.fps]),N=v,j=ke+ve/2;f.useEffect(()=>{if(!E)return;const t=[...l.warnings];l.action||t.push("Nothing in this file carries an action, so the summary row is empty — which is Blender's own empty state for a Timeline over a still file."),t.push("While a clip plays, the picture is three.js evaluating the skin over the mesh columns Blender exported at the BIND frame. Anything else Blender would re-evaluate per frame — shape keys, a Displace or Cloth modifier reading the frame, a geometry driver — does not follow the playhead."),t.push("Blender puts this view's ONLY-SHOW-SELECTED toggle in the Timeline header's View MENU (`TIME_MT_view`'s `layout.prop(scene, \"show_keys_from_selected_only\")`, `space_time.py`); this header has no menu region, so the same toggle is drawn as a header button at the leading edge, where that menu sits. The filter itself is Blender's — `ADS_FILTER_ONLYSEL`, `anim_filter.cc:254-270`, tested per object at `:2307`."),c&&F.objects.length===0&&l.summary.length>0&&t.push(`The summary row is empty because nothing animated is SELECTED, which is Blender's own answer with this filter on. ${l.summary.map(u=>u.object).join(", ")} carr${l.summary.length===1?"ies":"y"} an action; select it, or turn the filter off.`),t.push("Markers, the cache bar and the preview range are drawn by Blender's Timeline and not here; the door carries none of them.");const m={drawn:{action:l.action,object:l.object,armature:l.armature,frame:l.frame,start:l.start,end:l.end,fps:l.fps,playing:V(),keyframes:F.columns.map(u=>u.frame),onlySelected:c,summaryObjects:F.objects,majorStep:E.major,minorStep:E.minor,majorLines:E.majors.length,minorLines:E.minors.length,labels:E.majors.length,diamonds:F.columns.length,diamondRadius:ne,diamondSprite:_e,bones:l.bones,tracks:l.tracks,engineCalls:l.engineCalls,warnings:t}};JSON.stringify(m.drawn)!==JSON.stringify(M().drawn)&&k(m)},[E,l,F,c]);const C=f.useRef(!1),J=f.useCallback(t=>{const m=s.current;if(!m)return;const u=m.getBoundingClientRect();h()?.seekFrame(Math.round(Y(t-u.left)))},[Y]),U=`${Math.round(l.frame)}`,X=Math.max(g.minPillWidth,U.length*6+2*g.textPadding),A=b(l.frame);return a.jsxs("div",{"data-testid":"blender-timeline",style:{position:"absolute",inset:0,display:"flex",flexDirection:"column",overflow:"hidden",background:x.back,color:d.text,font:"11px Inter, system-ui, sans-serif"},children:[a.jsx(Oe,{}),a.jsx("div",{ref:s,style:{flex:1,minHeight:0,position:"relative"},children:a.jsxs("svg",{width:n.w,height:n.h,style:{display:"block",cursor:"ew-resize"},"aria-label":"Timeline",onPointerDown:t=>{C.current=!0,t.currentTarget.setPointerCapture(t.pointerId),J(t.clientX)},onPointerMove:t=>{C.current&&J(t.clientX)},onPointerUp:t=>{C.current=!1,t.currentTarget.releasePointerCapture(t.pointerId)},children:[a.jsx("title",{children:"Timeline"}),a.jsx("rect",{x:0,y:0,width:n.w,height:n.h,fill:x.back}),a.jsx("rect",{x:0,y:N,width:Math.max(0,b(l.start)),height:Math.max(0,n.h-N),fill:ie}),a.jsx("rect",{x:b(l.end),y:N,width:Math.max(0,n.w-b(l.end)),height:Math.max(0,n.h-N),fill:ie}),E?.minors.map(t=>a.jsx("line",{x1:b(t),y1:N,x2:b(t),y2:n.h,stroke:x.gridMinor,strokeWidth:1},`n${t}`)),E?.majors.map(t=>a.jsx("line",{x1:b(t),y1:N,x2:b(t),y2:n.h,stroke:x.grid,strokeWidth:1},`m${t}`)),a.jsx("rect",{x:0,y:0,width:n.w,height:v,fill:x.scrubBack}),E?.majors.map(t=>a.jsx("text",{x:b(t),y:15.5,textAnchor:"middle",fill:x.scrubText,fontSize:11,children:Math.round(t)},`t${t}`)),a.jsx("path",{d:`M3,${j-3.5} L6.5,${j} L3,${j+3.5} Z`,fill:x.scrubText}),F.columns.map(t=>{const m=Ne[t.type]??1,u=ne*m,y=re[t.type]??re.KEYFRAME,w=b(t.frame);return a.jsx("polygon",{points:`${w},${j-u} ${w+u},${j} ${w},${j+u} ${w-u},${j}`,fill:t.select?y.selected:y.fill,stroke:x.keyBorder,strokeWidth:Ae*m},`k${t.frame}`)}),a.jsx("rect",{x:A-g.stalkWidth/2,y:v,width:g.stalkWidth,height:Math.max(0,n.h-v),fill:x.playhead}),a.jsx("rect",{x:A-X/2,y:g.margin,width:X,height:v-2*g.margin,rx:g.radius,fill:x.playhead}),a.jsx("polygon",{points:`${A-g.tipHalfWidth},${v-g.margin} ${A+g.tipHalfWidth},${v-g.margin} ${A},${v-g.margin+g.tipHeight}`,fill:x.playhead}),a.jsx("text",{x:A,y:15.5,textAnchor:"middle",fill:x.playheadText,fontSize:11,children:U})]})}),i?a.jsx("div",{style:{borderTop:`1px solid ${d.rule}`,padding:d.statusPadding,color:d.refusal},children:i}):null]})}function Ie(){f.useSyncExternalStore(K,_,_);const{onlySelected:e}=M(),[s,o]=f.useState(!1),r=(n,i,c)=>a.jsxs("button",{type:"button",onClick:()=>{c(),o(!1)},style:{display:"flex",alignItems:"center",gap:"var(--volter-space-2)",width:"100%",padding:"var(--volter-space-1) var(--volter-space-3)",border:"none",background:"transparent",color:d.widgetText,font:"inherit",textAlign:"left",cursor:"pointer"},children:[a.jsx("span",{style:{width:12,display:"inline-block"},children:i===null?"":i?"✓":""}),n]});return a.jsxs("span",{style:{position:"relative"},children:[a.jsx("button",{type:"button","aria-haspopup":"menu","aria-expanded":s,onClick:()=>o(n=>!n),style:{border:"none",background:"transparent",color:d.text,font:"inherit",padding:"0 var(--volter-space-2)",cursor:"pointer"},children:"View"}),s?a.jsxs("span",{role:"menu",style:{position:"absolute",top:"100%",left:0,zIndex:20,minWidth:210,display:"flex",flexDirection:"column",background:d.widget,border:`1px solid ${d.widgetOutline}`,boxShadow:"0 6px 18px rgba(0,0,0,0.45)"},children:[r("Only Show Selected",e,()=>be(!e)),r("Frame All",null,()=>le())]}):null]})}function Oe(){f.useSyncExternalStore(ae,L,L),f.useSyncExternalStore(K,_,_);const e=p.state(),s=d.unit,o=p.playable,r=(i,c,l,S)=>a.jsx("button",{type:"button",title:o?S:`${S} — ${z}`,"aria-label":S,disabled:!o,onClick:l,style:{width:s,height:s,padding:0,border:`1px solid ${d.widgetOutline}`,background:d.widget,color:d.widgetText,display:"grid",placeItems:"center",cursor:o?"pointer":"not-allowed",opacity:o?1:.4},children:c},i),n=i=>a.jsx("svg",{width:12,height:12,viewBox:"0 0 12 12","aria-hidden":"true",children:a.jsx("path",{d:i,fill:d.widgetText})});return a.jsxs("div",{style:{height:ee,flex:`0 0 ${ee}px`,display:"flex",alignItems:"center",gap:d.headerGap,padding:d.headerPadding,background:x.header,borderBottom:`1px solid ${d.rule}`},children:[a.jsx("span",{style:{color:d.text},children:"Timeline"}),a.jsx(Ie,{}),a.jsx("div",{style:{flex:1}}),a.jsxs("div",{style:{display:"flex"},children:[r("jump-start",n("M2 2h1.5v8H2zM10 2v8L4.5 6z"),()=>h()?.seekFrame(e.start),"Jump to Start"),r("prev-key",n("M5 2.5v7L1.5 6zM8.5 3.2L11 6L8.5 8.8L6 6z"),()=>{const i=D().reverse().find(c=>c<p.frame()-1e-4);i!==void 0&&h()?.seekFrame(i)},"Jump to Previous Keyframe"),o&&V()?r("pause-rev",n("M3 2h2v8H3zM7 2h2v8H7z"),()=>h()?.pause(),"Pause"):r("play-reverse",n("M9 2L2 6l7 4z"),()=>h()?.play("reverse"),"Play Reverse"),o&&V()?r("pause",n("M3 2h2v8H3zM7 2h2v8H7z"),()=>h()?.pause(),"Pause"):r("play",n("M3 2l7 4-7 4z"),()=>h()?.play(),"Play"),r("next-key",n("M7 2.5v7L10.5 6zM3.5 3.2L6 6L3.5 8.8L1 6z"),()=>{const i=D().find(c=>c>p.frame()+1e-4);i!==void 0&&h()?.seekFrame(i)},"Jump to Next Keyframe"),r("jump-end",n("M10 2H8.5v8H10zM2 2v8L7.5 6z"),()=>h()?.seekFrame(e.end),"Jump to End")]}),a.jsxs("div",{style:{display:"flex"},children:[r("step-back",n("M2 2h1.5v8H2zM9.5 2v8L4.5 6z"),()=>h()?.seekFrame(Math.round(e.frame)-1),"Step Back One Frame"),r("step-forward",n("M10 2H8.5v8H10zM2.5 2v8L7.5 6z"),()=>h()?.seekFrame(Math.round(e.frame)+1),"Step Forward One Frame")]}),a.jsx("div",{style:{flex:1}}),a.jsx("input",{type:"number",value:Math.round(e.frame),onChange:i=>{const c=Number(i.target.value);Number.isFinite(c)&&h()?.seekFrame(c)},"aria-label":"Current frame",disabled:!o,title:o?void 0:z,style:{width:75,height:s,textAlign:"center",border:`1px solid ${d.widgetOutline}`,borderRadius:d.widgetRadius,background:d.widget,color:d.widgetText,font:"inherit",cursor:o?"text":"not-allowed",opacity:o?1:.4}}),a.jsxs("span",{onClick:()=>G(B["set-range"]),onKeyDown:()=>{},style:{color:d.text,cursor:"not-allowed"},children:["Start ",e.start," · End ",e.end]})]})}export{ct as default,lt as point,Re as title};
@@ -1 +1 @@
1
- import{a as u}from"./jsx-runtime-DPjLkJKQ.js";import{go as le}from"./index-D8WZNJyr.js";import{r as c}from"./index-nmcBqr7Y.js";import{s as ue,b as X,j as de}from"./blender-runtime-host-DayNDAb4.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-D_NuPfjr.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./preview-renderer-BrYNFV1p.js";import"./three.module-BLhyNg0e.js";import"./three.core-3arARmh6.js";import"./environment-Dg-YaLsA.js";import"./RoomEnvironment-BkknvS_I.js";import"./EXRLoader-CITMBvGd.js";import"./HDRLoader-BTGuGhVo.js";import"./renderer-ownership-BovSEcLv.js";import"./output-pass-HurwNl0G.js";import"./Pass-D1MRT672.js";import"./clip-planes-CnAI6DZn.js";import"./content-bounds-CgU8GC_V.js";import"./hierarchy-marks-C0IFZJpJ.js";import"./workspace-arrangement-DSOBJt3d.js";const he={transform:{cx:.5,cy:.5,zoom:512},refusal:null,size:{w:0,h:0},framedAt:0,drawn:null};let L=he,N=0;const T=new Set;let te=0;function m(){return L}function Q(){return N}function fe(t){return T.add(t),()=>{T.delete(t)}}function v(t){L={...L,...t},N+=1;for(const r of[...T])r()}function pe(){te+=1,N+=1;for(const t of[...T])t()}function me(){return te}function ne(t){v({refusal:t})}const x={back:"#303030",grid:"#303030",face:"#ffffff",faceAlpha:10/255,uvShadow:"#707070",vertex:"#000000",faceDot:"#000000"},B={vertexSize:3,edgeWidth:1,facedotSize:3},se=1,ge=(B.vertexSize*se+1.5)*Math.SQRT2,ve=.75,we=B.facedotSize*se,ye=1,J=[1,1],K=[10,10],xe="Blender's `.space_image.grid` is #303030 at full alpha (userdef_default_theme.c:586) and this view's surface is #303030, so the tile grid draws at the theme's colour and is invisible against it. The image region's own clear is the overlay engine's (DRW_draw_view, space_image.cc:758), which is not in the source checkout — the sighted read settles the contrast.",be={shadow:{inner:x.uvShadow}},Ue=Math.max(B.edgeWidth,1),ee="#ff0000";function W(t){const r=atob(t),a=new Uint8Array(r.length);for(let d=0;d<r.length;d++)a[d]=r.charCodeAt(d);return a}function Ve(t){const r=W(t);return new Float32Array(r.buffer,r.byteOffset,r.byteLength>>2)}function z(t){const r=W(t);return new Uint32Array(r.buffer,r.byteOffset,r.byteLength>>2)}function Ee(t,r){const a=Number.parseInt(t.slice(1),16);return`rgba(${a>>16&255}, ${a>>8&255}, ${a&255}, ${Math.round(r*1e3)/1e3})`}const E={text:"#e6e6e6",refusal:"#ed5700",rule:"#232323",statusPadding:"3px 8px",statusGap:12},Qe="workspace.document",_e="UV Editor",D=8e3,re=16,oe=8192,_={move:t=>`Dragging a UV in "${t}" writes the mesh's UV attribute, which the document would save. This is Blender's UV editor as an INSPECTION surface: editing parity is not the program.`,select:"Selecting a UV writes the mesh's selection state. This view draws what the DATA carries — and at this pin a mesh outside edit mode carries no UV selection at all (MeshUVLoopLayer declares uv, pin, name, active, active_render, active_clone and nothing else), so everything draws unselected. Editing parity is not the program.",pin:"Pinning a UV writes `MeshUVLoopLayer.pin`, which the document would save. Existing pins ARE drawn, in Blender's own hard red. Editing parity is not the program.",unwrap:"Unwrapping runs `bpy.ops.uv.unwrap`, which rewrites every UV on the mesh. Editing parity is not the program."};le({view:"blender-uv-view",title:_e,verbs:[{id:"state",run:()=>m()},{id:"view-all",title:"UV Editor: View All",run:()=>(pe(),m())},{id:"zoom",title:"UV Editor: Zoom",run:t=>{const r=Number(t?.to??t?.zoom);if(!Number.isFinite(r))throw new Error("zoom needs a numeric `to` — CSS pixels per UV unit, 16 … 8192.");const{transform:a}=m();return v({transform:{...a,zoom:Math.min(oe,Math.max(re,r))}}),m()}},{id:"pan",title:"UV Editor: Pan",run:t=>{const r=Number(t?.u??0),a=Number(t?.v??0);if(!Number.isFinite(r)||!Number.isFinite(a))throw new Error("pan needs numeric `u` and `v`, in UV units.");const{transform:d}=m();return v({transform:{...d,cx:d.cx+r,cy:d.cy+a}}),m()}},{id:"move-uv",run:()=>R(_.move("the active UV map"))},{id:"select",run:()=>R(_.select)},{id:"pin",run:()=>R(_.pin)},{id:"unwrap",run:()=>R(_.unwrap)}]});function R(t){return ne(t),m()}function Se(t){return!t?.uvBase64||!t.triangleBase64?null:{uv:Ve(t.uvBase64),tris:z(t.triangleBase64),starts:z(t.loopStartBase64??""),totals:z(t.loopTotalBase64??""),pins:t.pinBase64?W(t.pinBase64):null}}function Je(){const t=c.useSyncExternalStore(ue,X,X);c.useSyncExternalStore(fe,Q,Q);const r=c.useRef(0),a=c.useRef(null),d=c.useRef(null),j=c.useRef(null),{transform:b,refusal:C,size:U}=m(),[,F]=[0,c.useCallback(()=>v({}),[])];c.useEffect(()=>{let e=!0;return(async()=>{try{const s=await de();if(!e)return;d.current=s,j.current=null}catch(s){if(!e)return;j.current=s instanceof Error?s.message:String(s)}F()})(),()=>{e=!1}},[t,F]),c.useEffect(()=>{const e=a.current;if(!e)return;const s=new ResizeObserver(()=>{const l={w:e.clientWidth,h:e.clientHeight},h=m().size;(h.w!==l.w||h.h!==l.h)&&v({size:l})});return s.observe(e),v({size:{w:e.clientWidth,h:e.clientHeight}}),()=>s.disconnect()},[]);const n=d.current,M=c.useMemo(()=>Se(n),[n]),O=me();c.useEffect(()=>{if(O===r.current)return;r.current=O;const e=n?.bounds??[0,0,1,1],{w:s,h:l}=m().size;if(s===0||l===0)return;const[h,g,o,f]=e,V=Math.max(o-h,.001),S=Math.max(f-g,.001),k=Math.min(oe,Math.max(re,Math.min(s/V,l/S)*.9));v({transform:{cx:(h+o)/2,cy:(g+f)/2,zoom:k},framedAt:Date.now()})},[O,n]);const w=e=>(e-b.cx)*b.zoom+U.w/2,y=e=>U.h/2-(e-b.cy)*b.zoom,i=c.useMemo(()=>{if(!n||!M)return null;const{uv:e,tris:s,starts:l,totals:h,pins:g}=M,o=[],f=[],V=[],S=[],k=l.length;for(let p=0;p<k;p++){const ce=l[p],I=h[p];if(I<3)continue;let $="",H=0,G=0;for(let A=0;A<I;A++){const Z=ce+A,q=e[Z*2],Y=e[Z*2+1];H+=q,G+=Y,$+=`${A===0?"M":"L"}${w(q).toFixed(2)} ${y(Y).toFixed(2)}`}$+="Z",o.push($),f.push($),S.push({x:w(H/I),y:y(G/I)})}const P=e.length>>1;for(let p=0;p<P&&V.length<D;p++)V.push({x:w(e[p*2]),y:y(e[p*2+1]),pinned:g?g[p]!==0:!1});return{faces:o,outlines:f,dots:V,faceDots:S,corners:P,triangles:s.length/3}},[n,M,b,U]);c.useEffect(()=>{if(!n)return;const e=[];n.layers.length===0&&n.object&&e.push(`"${n.object}" has no UV map — Blender's UV editor draws an empty tile.`),i&&i.corners>D&&e.push(`${i.corners} UV corners exceed this view's ${D}-dot budget; ${i.corners-D} corner marks are not drawn. The islands, their edges and the face dots are all drawn.`),n.image||e.push("No image behind the tile: the active material's node tree has no image texture with an image, so there is nothing for Blender's backdrop to show."),e.push(xe),e.push("The line style is SHADOW (#707070), not Blender's stock OUTLINE: `edit_uv_line_style_from_space_image` returns OUTLINE only when `SpaceImage.mode == SI_MODE_UV`, and there is no SpaceImage here."),v({drawn:{object:n.object,mesh:n.mesh,layer:n.active,layers:n.layers,mode:n.mode,loops:n.loops,polygons:n.polygons,triangles:i?.triangles??0,faces:i?.faces.length??0,edges:i?.outlines.length??0,verts:i?.dots.length??0,faceDots:i?.faceDots.length??0,pinned:i?.dots.filter(s=>s.pinned).length??0,bounds:n.bounds??null,tiles:J,subdiv:K,image:n.image?.name??null,warnings:e}})},[n,i]);const ie=c.useMemo(()=>{const e=[],[s,l]=J,[h,g]=K;for(let o=0;o<=s*h;o++){const f=o/h;e.push({key:`u${o}`,x1:w(f),y1:y(0),x2:w(f),y2:y(l),major:o%h===0})}for(let o=0;o<=l*g;o++){const f=o/g;e.push({key:`v${o}`,x1:w(0),y1:y(f),x2:w(s),y2:y(f),major:o%g===0})}return e},[b,U]),ae=n?n.active?`UV Editor · ${n.object} · ${n.active} · ${n.polygons} faces, ${n.loops} corners · ${n.mode}`:`UV Editor · ${n.object??"no mesh selected"} · no UV map · ${n.mode}`:j.current??"UV Editor · reading…";return u.jsxs("div",{"data-testid":"blender-uv-editor",style:{display:"flex",flexDirection:"column",position:"absolute",inset:0,overflow:"hidden",background:x.back,color:E.text,font:"11px Inter, system-ui, sans-serif"},children:[u.jsx("div",{ref:a,style:{flex:1,minHeight:0,position:"relative"},children:u.jsxs("svg",{width:U.w,height:U.h,style:{display:"block"},onPointerDown:()=>ne(_.select),"aria-label":"UV layout",children:[u.jsx("title",{children:"UV layout"}),ie.map(e=>u.jsx("line",{x1:e.x1,y1:e.y1,x2:e.x2,y2:e.y2,stroke:x.grid,strokeWidth:e.major?2:1},e.key)),i?.faces.map((e,s)=>u.jsx("path",{d:e,fill:Ee(x.face,x.faceAlpha*ye)},`f${s}`)),i?.outlines.map((e,s)=>u.jsx("path",{d:e,fill:"none",stroke:be.shadow.inner,strokeWidth:Ue},`e${s}`)),i?.faceDots.map((e,s)=>u.jsx("circle",{cx:e.x,cy:e.y,r:we/2,fill:x.faceDot},`fd${s}`)),i?.dots.map((e,s)=>u.jsx("circle",{cx:e.x,cy:e.y,r:ge/2,fill:e.pinned?ee:x.vertex,stroke:e.pinned?ee:"none",strokeWidth:e.pinned?ve:0},`v${s}`))]})}),u.jsxs("div",{style:{borderTop:`1px solid ${E.rule}`,padding:E.statusPadding,display:"flex",gap:E.statusGap,alignItems:"center"},children:[u.jsx("span",{children:ae}),C?u.jsx("span",{style:{color:E.refusal},children:C}):null]})]})}export{Je as default,Qe as point,_e as title};
1
+ import{a as u}from"./jsx-runtime-DPjLkJKQ.js";import{go as le}from"./index-Cuhs4tVm.js";import{r as c}from"./index-nmcBqr7Y.js";import{s as ue,b as X,j as de}from"./blender-runtime-host-D0kmlbFS.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-D_NuPfjr.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./preview-renderer-BrYNFV1p.js";import"./three.module-BLhyNg0e.js";import"./three.core-3arARmh6.js";import"./environment-Dg-YaLsA.js";import"./RoomEnvironment-BkknvS_I.js";import"./EXRLoader-CITMBvGd.js";import"./HDRLoader-BTGuGhVo.js";import"./renderer-ownership-BovSEcLv.js";import"./output-pass-HurwNl0G.js";import"./Pass-D1MRT672.js";import"./clip-planes-CnAI6DZn.js";import"./content-bounds-dSublDNs.js";import"./hierarchy-marks-DhX6Vk-i.js";import"./workspace-arrangement-B9_XkdLK.js";const he={transform:{cx:.5,cy:.5,zoom:512},refusal:null,size:{w:0,h:0},framedAt:0,drawn:null};let L=he,N=0;const T=new Set;let te=0;function m(){return L}function Q(){return N}function fe(t){return T.add(t),()=>{T.delete(t)}}function v(t){L={...L,...t},N+=1;for(const r of[...T])r()}function pe(){te+=1,N+=1;for(const t of[...T])t()}function me(){return te}function ne(t){v({refusal:t})}const x={back:"#303030",grid:"#303030",face:"#ffffff",faceAlpha:10/255,uvShadow:"#707070",vertex:"#000000",faceDot:"#000000"},B={vertexSize:3,edgeWidth:1,facedotSize:3},se=1,ge=(B.vertexSize*se+1.5)*Math.SQRT2,ve=.75,we=B.facedotSize*se,ye=1,J=[1,1],K=[10,10],xe="Blender's `.space_image.grid` is #303030 at full alpha (userdef_default_theme.c:586) and this view's surface is #303030, so the tile grid draws at the theme's colour and is invisible against it. The image region's own clear is the overlay engine's (DRW_draw_view, space_image.cc:758), which is not in the source checkout — the sighted read settles the contrast.",be={shadow:{inner:x.uvShadow}},Ue=Math.max(B.edgeWidth,1),ee="#ff0000";function W(t){const r=atob(t),a=new Uint8Array(r.length);for(let d=0;d<r.length;d++)a[d]=r.charCodeAt(d);return a}function Ve(t){const r=W(t);return new Float32Array(r.buffer,r.byteOffset,r.byteLength>>2)}function z(t){const r=W(t);return new Uint32Array(r.buffer,r.byteOffset,r.byteLength>>2)}function Ee(t,r){const a=Number.parseInt(t.slice(1),16);return`rgba(${a>>16&255}, ${a>>8&255}, ${a&255}, ${Math.round(r*1e3)/1e3})`}const E={text:"#e6e6e6",refusal:"#ed5700",rule:"#232323",statusPadding:"3px 8px",statusGap:12},Qe="workspace.document",_e="UV Editor",D=8e3,re=16,oe=8192,_={move:t=>`Dragging a UV in "${t}" writes the mesh's UV attribute, which the document would save. This is Blender's UV editor as an INSPECTION surface: editing parity is not the program.`,select:"Selecting a UV writes the mesh's selection state. This view draws what the DATA carries — and at this pin a mesh outside edit mode carries no UV selection at all (MeshUVLoopLayer declares uv, pin, name, active, active_render, active_clone and nothing else), so everything draws unselected. Editing parity is not the program.",pin:"Pinning a UV writes `MeshUVLoopLayer.pin`, which the document would save. Existing pins ARE drawn, in Blender's own hard red. Editing parity is not the program.",unwrap:"Unwrapping runs `bpy.ops.uv.unwrap`, which rewrites every UV on the mesh. Editing parity is not the program."};le({view:"blender-uv-view",title:_e,verbs:[{id:"state",run:()=>m()},{id:"view-all",title:"UV Editor: View All",run:()=>(pe(),m())},{id:"zoom",title:"UV Editor: Zoom",run:t=>{const r=Number(t?.to??t?.zoom);if(!Number.isFinite(r))throw new Error("zoom needs a numeric `to` — CSS pixels per UV unit, 16 … 8192.");const{transform:a}=m();return v({transform:{...a,zoom:Math.min(oe,Math.max(re,r))}}),m()}},{id:"pan",title:"UV Editor: Pan",run:t=>{const r=Number(t?.u??0),a=Number(t?.v??0);if(!Number.isFinite(r)||!Number.isFinite(a))throw new Error("pan needs numeric `u` and `v`, in UV units.");const{transform:d}=m();return v({transform:{...d,cx:d.cx+r,cy:d.cy+a}}),m()}},{id:"move-uv",run:()=>R(_.move("the active UV map"))},{id:"select",run:()=>R(_.select)},{id:"pin",run:()=>R(_.pin)},{id:"unwrap",run:()=>R(_.unwrap)}]});function R(t){return ne(t),m()}function Se(t){return!t?.uvBase64||!t.triangleBase64?null:{uv:Ve(t.uvBase64),tris:z(t.triangleBase64),starts:z(t.loopStartBase64??""),totals:z(t.loopTotalBase64??""),pins:t.pinBase64?W(t.pinBase64):null}}function Je(){const t=c.useSyncExternalStore(ue,X,X);c.useSyncExternalStore(fe,Q,Q);const r=c.useRef(0),a=c.useRef(null),d=c.useRef(null),j=c.useRef(null),{transform:b,refusal:C,size:U}=m(),[,F]=[0,c.useCallback(()=>v({}),[])];c.useEffect(()=>{let e=!0;return(async()=>{try{const s=await de();if(!e)return;d.current=s,j.current=null}catch(s){if(!e)return;j.current=s instanceof Error?s.message:String(s)}F()})(),()=>{e=!1}},[t,F]),c.useEffect(()=>{const e=a.current;if(!e)return;const s=new ResizeObserver(()=>{const l={w:e.clientWidth,h:e.clientHeight},h=m().size;(h.w!==l.w||h.h!==l.h)&&v({size:l})});return s.observe(e),v({size:{w:e.clientWidth,h:e.clientHeight}}),()=>s.disconnect()},[]);const n=d.current,M=c.useMemo(()=>Se(n),[n]),O=me();c.useEffect(()=>{if(O===r.current)return;r.current=O;const e=n?.bounds??[0,0,1,1],{w:s,h:l}=m().size;if(s===0||l===0)return;const[h,g,o,f]=e,V=Math.max(o-h,.001),S=Math.max(f-g,.001),k=Math.min(oe,Math.max(re,Math.min(s/V,l/S)*.9));v({transform:{cx:(h+o)/2,cy:(g+f)/2,zoom:k},framedAt:Date.now()})},[O,n]);const w=e=>(e-b.cx)*b.zoom+U.w/2,y=e=>U.h/2-(e-b.cy)*b.zoom,i=c.useMemo(()=>{if(!n||!M)return null;const{uv:e,tris:s,starts:l,totals:h,pins:g}=M,o=[],f=[],V=[],S=[],k=l.length;for(let p=0;p<k;p++){const ce=l[p],I=h[p];if(I<3)continue;let $="",H=0,G=0;for(let A=0;A<I;A++){const Z=ce+A,q=e[Z*2],Y=e[Z*2+1];H+=q,G+=Y,$+=`${A===0?"M":"L"}${w(q).toFixed(2)} ${y(Y).toFixed(2)}`}$+="Z",o.push($),f.push($),S.push({x:w(H/I),y:y(G/I)})}const P=e.length>>1;for(let p=0;p<P&&V.length<D;p++)V.push({x:w(e[p*2]),y:y(e[p*2+1]),pinned:g?g[p]!==0:!1});return{faces:o,outlines:f,dots:V,faceDots:S,corners:P,triangles:s.length/3}},[n,M,b,U]);c.useEffect(()=>{if(!n)return;const e=[];n.layers.length===0&&n.object&&e.push(`"${n.object}" has no UV map — Blender's UV editor draws an empty tile.`),i&&i.corners>D&&e.push(`${i.corners} UV corners exceed this view's ${D}-dot budget; ${i.corners-D} corner marks are not drawn. The islands, their edges and the face dots are all drawn.`),n.image||e.push("No image behind the tile: the active material's node tree has no image texture with an image, so there is nothing for Blender's backdrop to show."),e.push(xe),e.push("The line style is SHADOW (#707070), not Blender's stock OUTLINE: `edit_uv_line_style_from_space_image` returns OUTLINE only when `SpaceImage.mode == SI_MODE_UV`, and there is no SpaceImage here."),v({drawn:{object:n.object,mesh:n.mesh,layer:n.active,layers:n.layers,mode:n.mode,loops:n.loops,polygons:n.polygons,triangles:i?.triangles??0,faces:i?.faces.length??0,edges:i?.outlines.length??0,verts:i?.dots.length??0,faceDots:i?.faceDots.length??0,pinned:i?.dots.filter(s=>s.pinned).length??0,bounds:n.bounds??null,tiles:J,subdiv:K,image:n.image?.name??null,warnings:e}})},[n,i]);const ie=c.useMemo(()=>{const e=[],[s,l]=J,[h,g]=K;for(let o=0;o<=s*h;o++){const f=o/h;e.push({key:`u${o}`,x1:w(f),y1:y(0),x2:w(f),y2:y(l),major:o%h===0})}for(let o=0;o<=l*g;o++){const f=o/g;e.push({key:`v${o}`,x1:w(0),y1:y(f),x2:w(s),y2:y(f),major:o%g===0})}return e},[b,U]),ae=n?n.active?`UV Editor · ${n.object} · ${n.active} · ${n.polygons} faces, ${n.loops} corners · ${n.mode}`:`UV Editor · ${n.object??"no mesh selected"} · no UV map · ${n.mode}`:j.current??"UV Editor · reading…";return u.jsxs("div",{"data-testid":"blender-uv-editor",style:{display:"flex",flexDirection:"column",position:"absolute",inset:0,overflow:"hidden",background:x.back,color:E.text,font:"11px Inter, system-ui, sans-serif"},children:[u.jsx("div",{ref:a,style:{flex:1,minHeight:0,position:"relative"},children:u.jsxs("svg",{width:U.w,height:U.h,style:{display:"block"},onPointerDown:()=>ne(_.select),"aria-label":"UV layout",children:[u.jsx("title",{children:"UV layout"}),ie.map(e=>u.jsx("line",{x1:e.x1,y1:e.y1,x2:e.x2,y2:e.y2,stroke:x.grid,strokeWidth:e.major?2:1},e.key)),i?.faces.map((e,s)=>u.jsx("path",{d:e,fill:Ee(x.face,x.faceAlpha*ye)},`f${s}`)),i?.outlines.map((e,s)=>u.jsx("path",{d:e,fill:"none",stroke:be.shadow.inner,strokeWidth:Ue},`e${s}`)),i?.faceDots.map((e,s)=>u.jsx("circle",{cx:e.x,cy:e.y,r:we/2,fill:x.faceDot},`fd${s}`)),i?.dots.map((e,s)=>u.jsx("circle",{cx:e.x,cy:e.y,r:ge/2,fill:e.pinned?ee:x.vertex,stroke:e.pinned?ee:"none",strokeWidth:e.pinned?ve:0},`v${s}`))]})}),u.jsxs("div",{style:{borderTop:`1px solid ${E.rule}`,padding:E.statusPadding,display:"flex",gap:E.statusGap,alignItems:"center"},children:[u.jsx("span",{children:ae}),C?u.jsx("span",{style:{color:E.refusal},children:C}):null]})]})}export{Je as default,Qe as point,_e as title};
@@ -1 +1 @@
1
- import{a as e}from"./jsx-runtime-DPjLkJKQ.js";import{r as o}from"./index-D8WZNJyr.js";import{r as s}from"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-D_NuPfjr.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";const g="workspace.status",v="Version",f="right",x=998;function h(){const{project:r}=o(),t=s.useSyncExternalStore(r.subscribe,r.engineVersion,r.engineVersion);return t===null?null:e.jsxs("span",{className:"volter-status-copy","data-testid":"status-blender-version","data-engine-version":t,style:{display:"inline-flex",alignItems:"center",gap:"var(--volter-space-2)",fontSize:"var(--volter-font-md)"},title:`This project is built against engine ${t}`,children:[e.jsx("span",{"aria-hidden":"true",style:{width:"var(--volter-stroke-resting)",height:"var(--volter-icon-md)",background:"currentColor"}}),t]})}export{f as align,h as default,x as order,g as point,v as title};
1
+ import{a as e}from"./jsx-runtime-DPjLkJKQ.js";import{r as o}from"./index-Cuhs4tVm.js";import{r as s}from"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-D_NuPfjr.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";const g="workspace.status",v="Version",f="right",x=998;function h(){const{project:r}=o(),t=s.useSyncExternalStore(r.subscribe,r.engineVersion,r.engineVersion);return t===null?null:e.jsxs("span",{className:"volter-status-copy","data-testid":"status-blender-version","data-engine-version":t,style:{display:"inline-flex",alignItems:"center",gap:"var(--volter-space-2)",fontSize:"var(--volter-font-md)"},title:`This project is built against engine ${t}`,children:[e.jsx("span",{"aria-hidden":"true",style:{width:"var(--volter-stroke-resting)",height:"var(--volter-icon-md)",background:"currentColor"}}),t]})}export{f as align,h as default,x as order,g as point,v as title};
@@ -1 +1 @@
1
- import{h as t}from"./blender-runtime-host-DayNDAb4.js";import"./index-D8WZNJyr.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./preview-renderer-BrYNFV1p.js";import"./three.module-BLhyNg0e.js";import"./three.core-3arARmh6.js";import"./environment-Dg-YaLsA.js";import"./RoomEnvironment-BkknvS_I.js";import"./EXRLoader-CITMBvGd.js";import"./HDRLoader-BTGuGhVo.js";import"./renderer-ownership-BovSEcLv.js";import"./output-pass-HurwNl0G.js";import"./Pass-D1MRT672.js";import"./clip-planes-CnAI6DZn.js";import"./content-bounds-CgU8GC_V.js";import"./hierarchy-marks-C0IFZJpJ.js";import"./workspace-arrangement-DSOBJt3d.js";const D="workspace.command",e=(o,n)=>({...n===void 0?{}:{timeoutMs:n},derivedRefresh:o,handle:r=>t(r)}),E={"blender-draw-batching":e("none"),"blender-start":e("none",12e4),"blender-stop":e("none",30*6e4),"blender-execute":e("always",30*6e4),"blender-scene-info":e("none",6e4),"blender-object-info":e("none",6e4),"blender-screenshot-view":e("always",6e4),"blender-read-file":e("none",6e4),"blender-write-file":e("none",6e4),"blender-list-files":e("none",6e4),"blender-rna":e("none",6e4),"blender-rna-context":e("none",6e4),"blender-rna-set":e("always",6e4),"blender-outliner":e("none",6e4),"blender-node-tree":e("none",6e4),"blender-uv-layout":e("none",6e4),"blender-rig":e("none",6e4),"blender-action-clip":e("none",12e4),"blender-node-view":e("none"),"blender-outliner-set":e("always",6e4),"blender-status":e("none")};export{E as commands,D as point};
1
+ import{h as t}from"./blender-runtime-host-D0kmlbFS.js";import"./index-Cuhs4tVm.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./preview-renderer-BrYNFV1p.js";import"./three.module-BLhyNg0e.js";import"./three.core-3arARmh6.js";import"./environment-Dg-YaLsA.js";import"./RoomEnvironment-BkknvS_I.js";import"./EXRLoader-CITMBvGd.js";import"./HDRLoader-BTGuGhVo.js";import"./renderer-ownership-BovSEcLv.js";import"./output-pass-HurwNl0G.js";import"./Pass-D1MRT672.js";import"./clip-planes-CnAI6DZn.js";import"./content-bounds-dSublDNs.js";import"./hierarchy-marks-DhX6Vk-i.js";import"./workspace-arrangement-B9_XkdLK.js";const D="workspace.command",e=(o,n)=>({...n===void 0?{}:{timeoutMs:n},derivedRefresh:o,handle:r=>t(r)}),E={"blender-draw-batching":e("none"),"blender-start":e("none",12e4),"blender-stop":e("none",30*6e4),"blender-execute":e("always",30*6e4),"blender-scene-info":e("none",6e4),"blender-object-info":e("none",6e4),"blender-screenshot-view":e("always",6e4),"blender-read-file":e("none",6e4),"blender-write-file":e("none",6e4),"blender-list-files":e("none",6e4),"blender-rna":e("none",6e4),"blender-rna-context":e("none",6e4),"blender-rna-set":e("always",6e4),"blender-outliner":e("none",6e4),"blender-node-tree":e("none",6e4),"blender-uv-layout":e("none",6e4),"blender-rig":e("none",6e4),"blender-action-clip":e("none",12e4),"blender-node-view":e("none"),"blender-outliner-set":e("always",6e4),"blender-status":e("none")};export{E as commands,D as point};
@@ -1 +1 @@
1
- import{aC as _}from"./index-D8WZNJyr.js";const i=globalThis;function c(){return i.__volterBreakpointListeners??=new Set,i.__volterBreakpointListeners}function y(){return i.__volterActiveBreakpoint??null}function G(e){i.__volterActiveBreakpoint=e;for(const t of c())t()}function k(e){return c().add(e),()=>c().delete(e)}const v="volter:board-guides:v1";function g(){return typeof window>"u"?null:window.localStorage}function m(){try{return _()?.rootPath??"(no-project)"}catch{return"(no-project)"}}function B(){try{return JSON.parse(g()?.getItem(v)??"{}")}catch{return{}}}function b(e){try{g()?.setItem(v,JSON.stringify(e))}catch{}}const l=new Set;let a=null,p=Date.now()%1e6;function o(){return a||(a=B()[m()]??{}),a}function d(){const e=B();e[m()]=o(),b(e);for(const t of l)t()}const h=[];function s(e){return o()[e]??h}function S(e){return l.add(e),()=>l.delete(e)}function x(e,t,r){p+=1;const n=`guide-${p}`;return o()[e]=[...s(e),{id:n,axis:t,value:r}],d(),n}function A(e,t,r){o()[e]=s(e).map(n=>n.id===t?{...n,value:r}:n),d()}function E(e,t){o()[e]=s(e).filter(r=>r.id!==t),d()}let f=null;function T(e,t){f=t?{docId:e,transform:t}:null}function j(){if(!f)return{x:[],y:[]};const{docId:e,transform:t}=f,r=[],n=[];for(const u of s(e))u.axis==="x"?r.push(t.originX+t.panX+u.value*t.zoom):n.push(t.originY+t.panY+u.value*t.zoom);return{x:r,y:n}}export{y as a,k as b,S as c,s as d,E as e,x as f,j as g,A as m,T as r,G as s};
1
+ import{aC as _}from"./index-Cuhs4tVm.js";const i=globalThis;function c(){return i.__volterBreakpointListeners??=new Set,i.__volterBreakpointListeners}function y(){return i.__volterActiveBreakpoint??null}function G(e){i.__volterActiveBreakpoint=e;for(const t of c())t()}function k(e){return c().add(e),()=>c().delete(e)}const v="volter:board-guides:v1";function g(){return typeof window>"u"?null:window.localStorage}function m(){try{return _()?.rootPath??"(no-project)"}catch{return"(no-project)"}}function B(){try{return JSON.parse(g()?.getItem(v)??"{}")}catch{return{}}}function b(e){try{g()?.setItem(v,JSON.stringify(e))}catch{}}const l=new Set;let a=null,p=Date.now()%1e6;function o(){return a||(a=B()[m()]??{}),a}function d(){const e=B();e[m()]=o(),b(e);for(const t of l)t()}const h=[];function s(e){return o()[e]??h}function S(e){return l.add(e),()=>l.delete(e)}function x(e,t,r){p+=1;const n=`guide-${p}`;return o()[e]=[...s(e),{id:n,axis:t,value:r}],d(),n}function A(e,t,r){o()[e]=s(e).map(n=>n.id===t?{...n,value:r}:n),d()}function E(e,t){o()[e]=s(e).filter(r=>r.id!==t),d()}let f=null;function T(e,t){f=t?{docId:e,transform:t}:null}function j(){if(!f)return{x:[],y:[]};const{docId:e,transform:t}=f,r=[],n=[];for(const u of s(e))u.axis==="x"?r.push(t.originX+t.panX+u.value*t.zoom):n.push(t.originY+t.panY+u.value*t.zoom);return{x:r,y:n}}export{y as a,k as b,S as c,s as d,E as e,x as f,j as g,A as m,T as r,G as s};
@@ -1,3 +1,3 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-D8WZNJyr.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/editor-api-So5QLNrp.js","assets/game-network-D6ys6tk3.js","assets/index-OZVqp6xS.js","assets/index-Da9JhEvW.js","assets/native-debug-module-C9N010aq.js","assets/native-entry-surface-BE8LJNdu.js","assets/debug-registry-C_2eNpnk.js","assets/contract-system-adapters-DQy4r2Sz.js","assets/game-contract-seams-BcyjMWgg.js","assets/seeded-random-CiRcvG_O.js","assets/game-audio-BeCyd0Ha.js","assets/rapier-physics-adapter-CaZqWLu0.js","assets/events-156d8d12.esm-DmeaOP4r.js","assets/three.module-BLhyNg0e.js","assets/three.core-3arARmh6.js","assets/index-DzuOGwVB.js","assets/live-project-verbs-BXEeauA6.js","assets/capability-coverage-DXpPzeSq.js","assets/edit-mode-authoring-bbDKsmQY.js","assets/json-history-resource-zw9b6Y8f.js","assets/binding-resolver-BT-wlV_S.js","assets/adapter-surface-Y37Nzcyw.js","assets/structural-signature-Dc7skRiy.js","assets/webgl-frame-capture-DdJkM2mi.js","assets/realm-services-CQpdYTrn.js","assets/canvas-entry-runtime-BHwunMIZ.js","assets/three-ingest-runtime-Cd4N9W9s.js","assets/EffectComposer-BEAt0PtQ.js","assets/CopyShader-BzTUYzf6.js","assets/ShaderPass-DTnDQXm0.js","assets/Pass-D1MRT672.js","assets/CSS3DRenderer-BsAqfavI.js","assets/relative-path-guard-GiM7Lsz8.js","assets/react-root-BHA-cdrW.js","assets/editor-presentation-activity-CqJH4G9t.js","assets/active-ingest-CAtltUt6.js","assets/ingest-source-persistence-DUR3zkkK.js","assets/pixi-story-model-DNkfnWUV.js","assets/surface-content-Dg9Kkazf.js","assets/viewport-root-presentation-b3HQkQsA.js","assets/mounted-authoring-rl9CAF3d.js","assets/entity-object-BP-l2G3P.js","assets/user-data-BEqwoJ6c.js","assets/workspace-arrangement-DSOBJt3d.js","assets/three-contract-Dkt6PmWY.js","assets/three-CJ8rXYAG.js","assets/editor-layers-DOpEK7EI.js","assets/component-instance-root-s2oNaFgM.js","assets/viewport-editor-controls-BYaAZ_Ku.js","assets/three-authoring-adapter-C5bmfaJR.js","assets/source-persistence-backend-COR9hjaK.js","assets/three-projection-core-Dyl2RKyC.js","assets/body-marks-C1LxJtQb.js","assets/user-data-CODoGZqA.js","assets/object-marks-BnvSuCTt.js","assets/structural-ids-BOo2BRoY.js","assets/object3d-authoring-subject-XccsO0xG.js","assets/r3f-physics-binding-CPwS9PZB.js","assets/deferred-ingest-play-5LkQpgbY.js","assets/rrweb-Cd2ifIRP.js","assets/react-world-authoring-adapter-pm3Pec2P.js","assets/board-guides-D30dJhS9.js","assets/relative-import-specifier-CprW5QX1.js","assets/story-arg-descriptors-Ek86ExX7.js","assets/inspect-DZZVf2Cd.js","assets/inference-diagnostics-BxYSTviL.js","assets/writer-tw6EcuVO.js","assets/three-state-BBsWckdA.js","assets/editor-shell-store-B6mGVxE1.js","assets/output-pass-HurwNl0G.js","assets/viewport-door-BJM9e-5e.js","assets/game-surface-defaults-D8S4cRxi.js"])))=>i.map(i=>d[i]);
2
- import{ab as _,je as $,jf as N,jg as f,jh as g,ji as V,_ as R,jj as C,a0 as U,aC as M,jk as j,Z as B,jl as G,K as E}from"./index-D8WZNJyr.js";import{g as l,a as b,A as D,B as F,C as O,d as x,D as q,E as H}from"./game-network-D6ys6tk3.js";import{e as z,c as K}from"./gameplay-replay-F6SzY13b.js";import{n as A,s as h}from"./command-results-CUQD49AB.js";import{z as W,i as y}from"./active-ingest-CAtltUt6.js";import{g as X}from"./capability-coverage-DXpPzeSq.js";import{w as Z,H as J}from"./debug-bridge-DSKtmhFu.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./index-OZVqp6xS.js";import"./index-Da9JhEvW.js";import"./native-debug-module-C9N010aq.js";import"./native-entry-surface-BE8LJNdu.js";import"./debug-registry-C_2eNpnk.js";import"./contract-system-adapters-DQy4r2Sz.js";import"./game-contract-seams-BcyjMWgg.js";import"./seeded-random-CiRcvG_O.js";import"./game-audio-BeCyd0Ha.js";import"./rapier-physics-adapter-CaZqWLu0.js";import"./events-156d8d12.esm-DmeaOP4r.js";import"./three.module-BLhyNg0e.js";import"./three.core-3arARmh6.js";import"./index-DzuOGwVB.js";import"./live-project-verbs-BXEeauA6.js";import"./edit-mode-authoring-bbDKsmQY.js";import"./json-history-resource-zw9b6Y8f.js";import"./binding-resolver-BT-wlV_S.js";import"./adapter-surface-Y37Nzcyw.js";import"./structural-signature-Dc7skRiy.js";import"./webgl-frame-capture-DdJkM2mi.js";import"./realm-services-CQpdYTrn.js";import"./canvas-entry-runtime-BHwunMIZ.js";import"./three-ingest-runtime-Cd4N9W9s.js";import"./EffectComposer-BEAt0PtQ.js";import"./CopyShader-BzTUYzf6.js";import"./ShaderPass-DTnDQXm0.js";import"./Pass-D1MRT672.js";import"./CSS3DRenderer-BsAqfavI.js";import"./relative-path-guard-GiM7Lsz8.js";import"./react-root-BHA-cdrW.js";import"./editor-presentation-activity-CqJH4G9t.js";import"./pixi-story-model-DNkfnWUV.js";import"./surface-content-Dg9Kkazf.js";import"./viewport-root-presentation-b3HQkQsA.js";import"./mounted-authoring-rl9CAF3d.js";import"./entity-object-BP-l2G3P.js";import"./user-data-BEqwoJ6c.js";import"./workspace-arrangement-DSOBJt3d.js";import"./three-contract-Dkt6PmWY.js";import"./three-CJ8rXYAG.js";import"./editor-layers-DOpEK7EI.js";import"./component-instance-root-s2oNaFgM.js";import"./viewport-editor-controls-BYaAZ_Ku.js";import"./three-authoring-adapter-C5bmfaJR.js";import"./source-persistence-backend-COR9hjaK.js";import"./ingest-source-persistence-DUR3zkkK.js";import"./three-projection-core-Dyl2RKyC.js";import"./body-marks-C1LxJtQb.js";import"./user-data-CODoGZqA.js";import"./object-marks-BnvSuCTt.js";import"./structural-ids-BOo2BRoY.js";import"./object3d-authoring-subject-XccsO0xG.js";import"./r3f-physics-binding-CPwS9PZB.js";import"./deferred-ingest-play-5LkQpgbY.js";import"./rrweb-Cd2ifIRP.js";import"./react-world-authoring-adapter-pm3Pec2P.js";import"./board-guides-D30dJhS9.js";import"./relative-import-specifier-CprW5QX1.js";import"./story-arg-descriptors-Ek86ExX7.js";import"./inspect-DZZVf2Cd.js";import"./inference-diagnostics-BxYSTviL.js";import"./writer-tw6EcuVO.js";import"./three-state-BBsWckdA.js";import"./editor-shell-store-B6mGVxE1.js";import"./output-pass-HurwNl0G.js";import"./viewport-door-BJM9e-5e.js";import"./game-surface-defaults-D8S4cRxi.js";import"./output-DK8waum9.js";const k=()=>_().debug!=null;function d(e,t,s){const a=new Error(t);return a.code=e,s&&(a.data=s),a}function S(e){return Array.isArray(e)?new Set(e.filter(t=>!!(t&&typeof t=="object"&&typeof t.name=="string")).map(t=>t.name)):new Set}function Q(e,t,s,a,i){if(e==="commands"){const c=S(t);return Array.isArray(t)&&[...a].every(o=>c.has(o))}if(e==="providers"){const c=S(t);return Array.isArray(t)&&[...i].every(o=>c.has(o))}return s?e==="state"?i.has(s):e==="invoke"?a.has(s):!1:!1}function T(e,t,s){const a=W(),i=a?.systems;if(!a||!i)return;const c=new Set((i.commands??[]).map(n=>n.name)),o=new Set((i.state??[]).map(n=>n.name));Q(e,t,s,c,o)&&f({seam:"contract.systems",subject:"game",epoch:X(a),stage:"operation",outcome:"pass",source:"consumer",detail:`the session wire consumed contract systems through debug.${e}`})}async function Y(e,t,s){let a;try{a=$(s).debug}catch(o){throw o instanceof N?d("INSTANCE_UNRESOLVED",`session wire: "${e}" — ${o.message}`,{instances:o.instances}):o}const i=()=>{if(!a)throw d("DEBUG_ADAPTER_UNAVAILABLE",`session wire: "${e}" — this game exposes no debug adapter`);return a},c=(o,n,r)=>{const u=i(),m=g(u);try{const p=r();return f({seam:`system.debug.${o}`,subject:"game",epoch:m,stage:n,outcome:"pass",source:"consumer",detail:`the session wire called debug.${o} and received its result`}),f({seam:"system.debug",subject:"game",epoch:m,stage:"operation",outcome:"pass",source:"consumer",detail:"the session wire consumed the mounted debug adapter"}),T(o,p,t[0]),p}catch(p){throw f({seam:`system.debug.${o}`,subject:"game",epoch:m,stage:n,outcome:"fail",source:"consumer",detail:`the session wire called debug.${o} and it failed: ${p instanceof Error?p.message:String(p)}`}),p}};switch(e){case"state":return c("state","operation",()=>i().state(t[0]));case"stateAll":return c("stateAll","operation",()=>i().stateAll());case"providers":return c("providers","operation",()=>i().providers());case"commands":return c("commands","operation",()=>i().commands());case"events":return c("events","operation",()=>i().events(t[0]));case"snapshot":{const o=i();return{time:c("state","operation",()=>o.state("time")),state:c("stateAll","operation",()=>o.stateAll()),events:c("events","operation",()=>o.events(t[0])),pageErrors:V()}}case"invoke":{const o=t[0],n=t[1]??[];try{const r=await i().invoke(o,n),u=i();return f({seam:"system.debug.invoke",subject:"game",epoch:g(u),stage:"effect",outcome:"pass",source:"consumer",detail:`the session wire invoked debug command "${o}" and received its result`}),f({seam:"system.debug",subject:"game",epoch:g(u),stage:"operation",outcome:"pass",source:"consumer",detail:"the session wire consumed the mounted debug adapter"}),T("invoke",r,o),r}catch(r){const u=i();throw f({seam:"system.debug.invoke",subject:"game",epoch:g(u),stage:"effect",outcome:"fail",source:"consumer",detail:`the session wire invoked debug command "${o}" and it failed: ${r instanceof Error?r.message:String(r)}`}),r}}case"runTicks":{const o=l();if(!o?.runTicks)throw d("RUN_TICKS_UNAVAILABLE","this play session has no first-party Game to run ticks on");const n=t[0],r=t[1];o.runTicks(n,r);return}case"runTicksSettled":{const o=l();if(!o?.runTicksSettled)throw d("RUN_TICKS_UNAVAILABLE","this play session has no first-party Game to run ticks on");const n=t[0],r=t[1];await o.runTicksSettled(n,r);return}case"input.setVirtualAction":case"input.tapVirtualAction":case"input.clearVirtualActions":case"input.startRecording":case"input.stopRecording":case"input.isRecording":{const o=l(),n=e==="input.setVirtualAction"?t[2]:e==="input.tapVirtualAction"?t[1]:t[0],r=o?o.getInputTarget(n):null;if(!r)throw d("DEBUG_INPUT_UNAVAILABLE",`session wire: ${e}() has no virtual-input target wired — no root entry exports \`debug.input\` (the game's own input door), or none has mounted yet`);if(e==="input.setVirtualAction")return r.setVirtualAction(t[0],t[1]);if(e==="input.tapVirtualAction")return r.tapVirtualAction(t[0]);if(e==="input.clearVirtualActions"){r.clearVirtualActions();return}if(e==="input.startRecording"){r.startInputRecording();return}if(e==="input.stopRecording"){r.stopInputRecording();return}return r.isInputRecording()}case"input.scheduleActionAtTick":{const o=l(),n=t[0],r=t[1],u=t[2],m=t[3],p=o?o.getInputTarget(m):null;if(!p)throw d("DEBUG_INPUT_UNAVAILABLE","session wire: input.scheduleActionAtTick() has no virtual-input target wired — no root entry exports `debug.input` (the game's own input door), or none has mounted yet");return p.scheduleActionAtTick(n,r,u)}case"input.injectPointerDelta":case"input.injectPointerPosition":{const o=l(),n=t[0],r=t[1],u=t[2],m=o?o.getInputTarget(u):null;if(!m)throw d("DEBUG_INPUT_UNAVAILABLE",`session wire: ${e}() has no virtual-input target wired — no root entry exports \`debug.input\` (the game's own input door), or none has mounted yet`);e==="input.injectPointerDelta"?m.injectPointerDelta(n,r):m.injectPointerPosition(n,r);return}case"holdFor":{const o=l(),n=t[2],r=o?o.getInputTarget(n):null;if(!r)throw d("DEBUG_INPUT_UNAVAILABLE","session wire: holdFor() has no virtual-input target wired — no root entry exports `debug.input` (the game's own input door), or none has mounted yet");const u=t[0],m=t[1],p=r.setVirtualAction(u,!0);if(!p.delivered)return r.clearVirtualActions(),{delivered:!1,reason:p.reason};const{stalled:v,starvedWithoutDriver:w}=await Z(i(),m,o?.runTicks?L=>o.runTicks?.(L,{render:"last"}):void 0);return r.clearVirtualActions(),v?{delivered:!1,reason:w?J:"play stopped during hold"}:{delivered:!0}}default:throw d("UNKNOWN_BRIDGE_METHOD",`session wire: unknown bridge method "${e}"`)}}async function ee(e){if(!b()&&!k())return y()?{ok:!1,error:"this ingest mount is live, but it publishes no debug plane — the mount installs no SystemAdapters.debug, so there is nothing to enumerate, read or drive through the game seam. Starting play will not change that; the game itself must declare the volter game contract (or carry a contract shim beside it) for these calls to have an answer."}:A();const t=e.method,s=e.callArgs??[];try{const a=e.instance;return{ok:!0,data:{result:await Y(t,s,a)}}}catch(a){return h(a)}}async function P(e){const{liveCanvasFrame:t}=await R(async()=>{const{liveCanvasFrame:s}=await import("./index-D8WZNJyr.js").then(a=>a.u4);return{liveCanvasFrame:s}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9]));return t(e)}function te(){const e=l();e?.loop.liveness==="loop-starved"&&e.runTicks?.(1,{render:"last"})}function I(e,t){const s=re();return{ok:!0,data:{base64:e,mimeType:"image/png",composite:t.composite,...t.layers?{layers:t.layers}:{},...t.flatness?{flatness:t.flatness}:{},...t.loopRecoveryFrame?{loopRecoveryFrame:!0}:{},...s?{recording:s}:{}}}}function re(){const e=O();return e?{path:e.path,startedAt:e.startedAt,notice:[`This run is being RECORDED — the still above is one frame of ${e.path}.`,"A still cannot answer a question about a moving game (did the jump land, did the shot","register). If that is the question, read the clip:","",` recording: ${e.path}${e.rotates?` (the next ${E("play")} replaces this file)`:" (named — never rotated)"}`,...e.format==="canvas-dom"?[` HUD replay: ${e.replayPath}`," The raw WebM contains the canvas only. Reconstruct HUD stills with"," editor.recording.captureReplay, or export a full video with editor.recording.exportReplay."]:[],` startedAt: ${e.startedAt} (clip offset 0)`,` play log: ${e.logFile===null?"(none — nothing is logging this run)":`logs/${e.logFile}`} (event timestamps → clip offsets)`,"","THE BAR for a temporal question: examine AT LEAST 10 frames spanning no more than 5","seconds around the moment. One frame, or ten frames spread across the run, is the same","guess a single screenshot was.","",`The clip is finalized and readable when play stops — ${E("stop")}, or the idle`,`auto-stop after ${Math.round(e.idleAutoStopMs/1e3)}s with no session command and no player input.`].join(`
3
- `)}:null}async function oe(e){if(!b()&&!k()&&!y())return A();const t=e.instance,s=D(t),a=F(t),i=C(s).medium,c=l();let o=!1,n=null;if(a&&c?.loop.liveness==="loop-starved")if(e.refreshStarvedFrame===!0&&c.runTicks)try{c.runTicks(1,{render:"last"}),o=!0}catch(r){return h(r)}else return{ok:!1,error:"cannot capture a fresh game frame while the host loop reports 'loop-starved' — inspect the separate visibility readings, let presentation resume, or request a deterministic loop-recovery frame",data:{code:"BRIDGE_SCREENSHOT_STALE"}};if(s&&typeof Image<"u"&&typeof XMLSerializer<"u"&&typeof s.getBoundingClientRect=="function")try{const r=await U(s,{canvasFrame:P,projectRoot:M()?.rootPath,...i==="unknown"?{}:{presentsOnCanvas:i==="canvas"}});if(r.layers.canvases===0&&r.layers.domOverlays===0)throw new j(i==="dom"?"dom-overlay":"composite-output","no game layers were mounted");return I(r.base64,{composite:!0,layers:r.layers,flatness:r.flatness,loopRecoveryFrame:o})}catch(r){n=r,B.warn(`Full-stack screenshot failed; returning the canvas-only fallback — ${r instanceof Error?r.message:String(r)}`,"screenshot")}if(!a){const r=n instanceof Error?n.message:String(n);return{ok:!1,error:n!==null?`full game-stack capture failed — ${r}; no canvas layer is available as a fallback`:y()?"the ingest mount is live but no DOM overlay or canvas layer is mounted for capture":"no play-mode DOM overlay or canvas layer is mounted yet",data:{code:"BRIDGE_SCREENSHOT_UNAVAILABLE"}}}try{const r=await R(()=>import("./index-D8WZNJyr.js").then(w=>w.u4),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9])),u=r.readablePngSource(await r.liveCanvasFrame(a))??a,m=u.toDataURL("image/png"),p=m.indexOf(","),v=p>=0?m.slice(p+1):m;return I(v,{composite:!1,flatness:G(u,a.ownerDocument),loopRecoveryFrame:o})}catch(r){return{ok:!1,error:`bridge-screenshot: canvas layer capture failed — ${r instanceof Error?r.message:String(r)}`+(n===null?"":`; full game-stack capture also failed — ${n instanceof Error?n.message:String(n)}`),data:{code:"BRIDGE_SCREENSHOT_UNAVAILABLE"}}}}const Vt="workspace.command",Ct={"bridge-call":{timeoutMs:6e4,derivedRefresh:"always",handle:ee},"bridge-screenshot":{timeoutMs:15e3,derivedRefresh:"if-content-changed",handle:oe},"bridge-recording-start":{timeoutMs:15e3,derivedRefresh:"none",handle:async e=>{if(!b()&&!k()&&!y())return A();const t=D();if(!t)return{ok:!1,error:"no play-mode game surface is mounted yet"};const s=_().audio?.acquireRecordingStream?.()??null;try{return{ok:!0,data:{...await q(t,{fps:typeof e.fps=="number"?e.fps:void 0,format:e.format==="canvas-dom"||e.format==="composite-webm"?e.format:void 0,name:typeof e.name=="string"||e.name===null?e.name:void 0,canvasFrame:P,refreshFrame:te,audio:s})}}}catch(a){return h(a)}}},"bridge-recording-stop":{timeoutMs:6e4,derivedRefresh:"none",handle:async()=>{try{return{ok:!0,data:{...await x()}}}catch(e){return h(e)}}},"bridge-recording-timeline":{derivedRefresh:"none",handle:()=>{const e=H();return e===null?{ok:!1,error:"no gameplay recording is active"}:{ok:!0,data:{...e}}}},"bridge-recording-replay-capture":{timeoutMs:6e4,derivedRefresh:"none",handle:async e=>{try{return typeof e.replayPath!="string"?{ok:!1,error:"replayPath is required"}:typeof e.positionMs!="number"||!Number.isFinite(e.positionMs)?{ok:!1,error:"finite positionMs is required"}:{ok:!0,data:{...await K(e.replayPath,e.positionMs)}}}catch(t){return h(t)}}},"bridge-recording-replay-export":{timeoutMs:6e5,derivedRefresh:"none",handle:async e=>{try{if(typeof e.replayPath!="string")return{ok:!1,error:"replayPath is required"};const{blob:t,...s}=await z({replayPath:e.replayPath,...typeof e.fps=="number"?{fps:e.fps}:{},...typeof e.startMs=="number"?{startMs:e.startMs}:{},...typeof e.endMs=="number"?{endMs:e.endMs}:{}}),{beginGameplayRecordingSink:a,appendGameplayRecordingChunk:i,finishGameplayRecordingSink:c,abortGameplayRecordingSink:o}=await R(async()=>{const{beginGameplayRecordingSink:r,appendGameplayRecordingChunk:u,finishGameplayRecordingSink:m,abortGameplayRecordingSink:p}=await import("./editor-api-So5QLNrp.js");return{beginGameplayRecordingSink:r,appendGameplayRecordingChunk:u,finishGameplayRecordingSink:m,abortGameplayRecordingSink:p}},__vite__mapDeps([10,0,1,2,3,4,5,6,7,8,9,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,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81])),n=await a({startedAt:new Date().toISOString(),mimeType:"video/webm",purpose:"export",name:typeof e.name=="string"?e.name:`replay-export-${Date.now()}`});try{for(let r=0,u=0;r<t.size;r+=4*1024*1024,u++)await i(n,u,t.slice(r,r+4*1024*1024));await c(n,"post-processed canvas and DOM recording")}catch(r){throw await o(n),r}return{ok:!0,data:{...s,path:n.path}}}catch(t){return h(t)}}}};export{Ct as commands,Vt as point};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-Cuhs4tVm.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/editor-api-BEr0uD9c.js","assets/game-network-DNKxv1nY.js","assets/index-OZVqp6xS.js","assets/index-Da9JhEvW.js","assets/native-debug-module-qQcZUzI3.js","assets/native-entry-surface-BE8LJNdu.js","assets/debug-registry-CVH5XeWF.js","assets/contract-system-adapters-BQNVqs4f.js","assets/game-contract-seams-Dyigsh0u.js","assets/seeded-random-CVq3LXT7.js","assets/game-audio-BeCyd0Ha.js","assets/rapier-physics-adapter-CaZqWLu0.js","assets/events-156d8d12.esm-DmeaOP4r.js","assets/three.module-BLhyNg0e.js","assets/three.core-3arARmh6.js","assets/index-DzuOGwVB.js","assets/live-project-verbs-CJSPaw8A.js","assets/capability-coverage-DNNkqHqV.js","assets/edit-mode-authoring-BArQSLX9.js","assets/json-history-resource-BAH1mnK3.js","assets/binding-resolver-BFnW68UJ.js","assets/adapter-surface-Y37Nzcyw.js","assets/structural-signature-Dc7skRiy.js","assets/webgl-frame-capture-DdJkM2mi.js","assets/realm-services-Bw0wimJ0.js","assets/canvas-entry-runtime-C4C8DEMC.js","assets/three-ingest-runtime-BzwyNuUu.js","assets/EffectComposer-BEAt0PtQ.js","assets/CopyShader-BzTUYzf6.js","assets/ShaderPass-DTnDQXm0.js","assets/Pass-D1MRT672.js","assets/CSS3DRenderer-BsAqfavI.js","assets/relative-path-guard-GiM7Lsz8.js","assets/react-root-BHA-cdrW.js","assets/editor-presentation-activity-CqJH4G9t.js","assets/active-ingest-D4Fgwnr9.js","assets/ingest-source-persistence-BM-FkIzu.js","assets/pixi-story-model-DNkfnWUV.js","assets/surface-content-Dg9Kkazf.js","assets/viewport-root-presentation-BmwT86Q4.js","assets/mounted-authoring-LH8XRyZy.js","assets/entity-object-DS85fxlv.js","assets/user-data-MBp9v5_f.js","assets/workspace-arrangement-B9_XkdLK.js","assets/three-contract-Dkt6PmWY.js","assets/three-CKBEa1FY.js","assets/editor-layers-DLK7x9-2.js","assets/component-instance-root-1flAx5GG.js","assets/viewport-editor-controls-BYaAZ_Ku.js","assets/three-authoring-adapter-3e00kFda.js","assets/source-persistence-backend-DTjdxsQ5.js","assets/three-projection-core-DuLfJ2q-.js","assets/body-marks-C1LxJtQb.js","assets/user-data-CODoGZqA.js","assets/object-marks-BnvSuCTt.js","assets/structural-ids-BOo2BRoY.js","assets/object3d-authoring-subject-XccsO0xG.js","assets/r3f-physics-binding-BWMEny-w.js","assets/deferred-ingest-play-yi5lfNFg.js","assets/rrweb-Cd2ifIRP.js","assets/react-world-authoring-adapter-kH4Q43MF.js","assets/board-guides-CYtSl4R-.js","assets/relative-import-specifier-Ceo42Psh.js","assets/story-arg-descriptors-Ek86ExX7.js","assets/inspect-DeDkLmgU.js","assets/inference-diagnostics-3xRLuYmi.js","assets/writer-tw6EcuVO.js","assets/three-state-IaI1mcXK.js","assets/editor-shell-store-DNj2SAA-.js","assets/output-pass-HurwNl0G.js","assets/viewport-door-BaS9f0E1.js","assets/game-surface-defaults-D8S4cRxi.js"])))=>i.map(i=>d[i]);
2
+ import{ab as _,je as $,jf as N,jg as f,jh as g,ji as V,_ as R,jj as C,a0 as U,aC as M,jk as j,Z as B,jl as G,K as E}from"./index-Cuhs4tVm.js";import{g as l,a as b,A as D,B as F,C as O,d as x,D as q,E as H}from"./game-network-DNKxv1nY.js";import{e as z,c as K}from"./gameplay-replay-aiB-Qo8C.js";import{n as A,s as h}from"./command-results-CUQD49AB.js";import{z as W,i as y}from"./active-ingest-D4Fgwnr9.js";import{g as X}from"./capability-coverage-DNNkqHqV.js";import{w as Z,H as J}from"./debug-bridge-D5EF7ZfY.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./index-OZVqp6xS.js";import"./index-Da9JhEvW.js";import"./native-debug-module-qQcZUzI3.js";import"./native-entry-surface-BE8LJNdu.js";import"./debug-registry-CVH5XeWF.js";import"./contract-system-adapters-BQNVqs4f.js";import"./game-contract-seams-Dyigsh0u.js";import"./seeded-random-CVq3LXT7.js";import"./game-audio-BeCyd0Ha.js";import"./rapier-physics-adapter-CaZqWLu0.js";import"./events-156d8d12.esm-DmeaOP4r.js";import"./three.module-BLhyNg0e.js";import"./three.core-3arARmh6.js";import"./index-DzuOGwVB.js";import"./live-project-verbs-CJSPaw8A.js";import"./edit-mode-authoring-BArQSLX9.js";import"./json-history-resource-BAH1mnK3.js";import"./binding-resolver-BFnW68UJ.js";import"./adapter-surface-Y37Nzcyw.js";import"./structural-signature-Dc7skRiy.js";import"./webgl-frame-capture-DdJkM2mi.js";import"./realm-services-Bw0wimJ0.js";import"./canvas-entry-runtime-C4C8DEMC.js";import"./three-ingest-runtime-BzwyNuUu.js";import"./EffectComposer-BEAt0PtQ.js";import"./CopyShader-BzTUYzf6.js";import"./ShaderPass-DTnDQXm0.js";import"./Pass-D1MRT672.js";import"./CSS3DRenderer-BsAqfavI.js";import"./relative-path-guard-GiM7Lsz8.js";import"./react-root-BHA-cdrW.js";import"./editor-presentation-activity-CqJH4G9t.js";import"./pixi-story-model-DNkfnWUV.js";import"./surface-content-Dg9Kkazf.js";import"./viewport-root-presentation-BmwT86Q4.js";import"./mounted-authoring-LH8XRyZy.js";import"./entity-object-DS85fxlv.js";import"./user-data-MBp9v5_f.js";import"./workspace-arrangement-B9_XkdLK.js";import"./three-contract-Dkt6PmWY.js";import"./three-CKBEa1FY.js";import"./editor-layers-DLK7x9-2.js";import"./component-instance-root-1flAx5GG.js";import"./viewport-editor-controls-BYaAZ_Ku.js";import"./three-authoring-adapter-3e00kFda.js";import"./source-persistence-backend-DTjdxsQ5.js";import"./ingest-source-persistence-BM-FkIzu.js";import"./three-projection-core-DuLfJ2q-.js";import"./body-marks-C1LxJtQb.js";import"./user-data-CODoGZqA.js";import"./object-marks-BnvSuCTt.js";import"./structural-ids-BOo2BRoY.js";import"./object3d-authoring-subject-XccsO0xG.js";import"./r3f-physics-binding-BWMEny-w.js";import"./deferred-ingest-play-yi5lfNFg.js";import"./rrweb-Cd2ifIRP.js";import"./react-world-authoring-adapter-kH4Q43MF.js";import"./board-guides-CYtSl4R-.js";import"./relative-import-specifier-Ceo42Psh.js";import"./story-arg-descriptors-Ek86ExX7.js";import"./inspect-DeDkLmgU.js";import"./inference-diagnostics-3xRLuYmi.js";import"./writer-tw6EcuVO.js";import"./three-state-IaI1mcXK.js";import"./editor-shell-store-DNj2SAA-.js";import"./output-pass-HurwNl0G.js";import"./viewport-door-BaS9f0E1.js";import"./game-surface-defaults-D8S4cRxi.js";import"./output-DK8waum9.js";const k=()=>_().debug!=null;function d(e,t,s){const a=new Error(t);return a.code=e,s&&(a.data=s),a}function S(e){return Array.isArray(e)?new Set(e.filter(t=>!!(t&&typeof t=="object"&&typeof t.name=="string")).map(t=>t.name)):new Set}function Q(e,t,s,a,i){if(e==="commands"){const c=S(t);return Array.isArray(t)&&[...a].every(o=>c.has(o))}if(e==="providers"){const c=S(t);return Array.isArray(t)&&[...i].every(o=>c.has(o))}return s?e==="state"?i.has(s):e==="invoke"?a.has(s):!1:!1}function T(e,t,s){const a=W(),i=a?.systems;if(!a||!i)return;const c=new Set((i.commands??[]).map(n=>n.name)),o=new Set((i.state??[]).map(n=>n.name));Q(e,t,s,c,o)&&f({seam:"contract.systems",subject:"game",epoch:X(a),stage:"operation",outcome:"pass",source:"consumer",detail:`the session wire consumed contract systems through debug.${e}`})}async function Y(e,t,s){let a;try{a=$(s).debug}catch(o){throw o instanceof N?d("INSTANCE_UNRESOLVED",`session wire: "${e}" — ${o.message}`,{instances:o.instances}):o}const i=()=>{if(!a)throw d("DEBUG_ADAPTER_UNAVAILABLE",`session wire: "${e}" — this game exposes no debug adapter`);return a},c=(o,n,r)=>{const u=i(),m=g(u);try{const p=r();return f({seam:`system.debug.${o}`,subject:"game",epoch:m,stage:n,outcome:"pass",source:"consumer",detail:`the session wire called debug.${o} and received its result`}),f({seam:"system.debug",subject:"game",epoch:m,stage:"operation",outcome:"pass",source:"consumer",detail:"the session wire consumed the mounted debug adapter"}),T(o,p,t[0]),p}catch(p){throw f({seam:`system.debug.${o}`,subject:"game",epoch:m,stage:n,outcome:"fail",source:"consumer",detail:`the session wire called debug.${o} and it failed: ${p instanceof Error?p.message:String(p)}`}),p}};switch(e){case"state":return c("state","operation",()=>i().state(t[0]));case"stateAll":return c("stateAll","operation",()=>i().stateAll());case"providers":return c("providers","operation",()=>i().providers());case"commands":return c("commands","operation",()=>i().commands());case"events":return c("events","operation",()=>i().events(t[0]));case"snapshot":{const o=i();return{time:c("state","operation",()=>o.state("time")),state:c("stateAll","operation",()=>o.stateAll()),events:c("events","operation",()=>o.events(t[0])),pageErrors:V()}}case"invoke":{const o=t[0],n=t[1]??[];try{const r=await i().invoke(o,n),u=i();return f({seam:"system.debug.invoke",subject:"game",epoch:g(u),stage:"effect",outcome:"pass",source:"consumer",detail:`the session wire invoked debug command "${o}" and received its result`}),f({seam:"system.debug",subject:"game",epoch:g(u),stage:"operation",outcome:"pass",source:"consumer",detail:"the session wire consumed the mounted debug adapter"}),T("invoke",r,o),r}catch(r){const u=i();throw f({seam:"system.debug.invoke",subject:"game",epoch:g(u),stage:"effect",outcome:"fail",source:"consumer",detail:`the session wire invoked debug command "${o}" and it failed: ${r instanceof Error?r.message:String(r)}`}),r}}case"runTicks":{const o=l();if(!o?.runTicks)throw d("RUN_TICKS_UNAVAILABLE","this play session has no first-party Game to run ticks on");const n=t[0],r=t[1];o.runTicks(n,r);return}case"runTicksSettled":{const o=l();if(!o?.runTicksSettled)throw d("RUN_TICKS_UNAVAILABLE","this play session has no first-party Game to run ticks on");const n=t[0],r=t[1];await o.runTicksSettled(n,r);return}case"input.setVirtualAction":case"input.tapVirtualAction":case"input.clearVirtualActions":case"input.startRecording":case"input.stopRecording":case"input.isRecording":{const o=l(),n=e==="input.setVirtualAction"?t[2]:e==="input.tapVirtualAction"?t[1]:t[0],r=o?o.getInputTarget(n):null;if(!r)throw d("DEBUG_INPUT_UNAVAILABLE",`session wire: ${e}() has no virtual-input target wired — no root entry exports \`debug.input\` (the game's own input door), or none has mounted yet`);if(e==="input.setVirtualAction")return r.setVirtualAction(t[0],t[1]);if(e==="input.tapVirtualAction")return r.tapVirtualAction(t[0]);if(e==="input.clearVirtualActions"){r.clearVirtualActions();return}if(e==="input.startRecording"){r.startInputRecording();return}if(e==="input.stopRecording"){r.stopInputRecording();return}return r.isInputRecording()}case"input.scheduleActionAtTick":{const o=l(),n=t[0],r=t[1],u=t[2],m=t[3],p=o?o.getInputTarget(m):null;if(!p)throw d("DEBUG_INPUT_UNAVAILABLE","session wire: input.scheduleActionAtTick() has no virtual-input target wired — no root entry exports `debug.input` (the game's own input door), or none has mounted yet");return p.scheduleActionAtTick(n,r,u)}case"input.injectPointerDelta":case"input.injectPointerPosition":{const o=l(),n=t[0],r=t[1],u=t[2],m=o?o.getInputTarget(u):null;if(!m)throw d("DEBUG_INPUT_UNAVAILABLE",`session wire: ${e}() has no virtual-input target wired — no root entry exports \`debug.input\` (the game's own input door), or none has mounted yet`);e==="input.injectPointerDelta"?m.injectPointerDelta(n,r):m.injectPointerPosition(n,r);return}case"holdFor":{const o=l(),n=t[2],r=o?o.getInputTarget(n):null;if(!r)throw d("DEBUG_INPUT_UNAVAILABLE","session wire: holdFor() has no virtual-input target wired — no root entry exports `debug.input` (the game's own input door), or none has mounted yet");const u=t[0],m=t[1],p=r.setVirtualAction(u,!0);if(!p.delivered)return r.clearVirtualActions(),{delivered:!1,reason:p.reason};const{stalled:v,starvedWithoutDriver:w}=await Z(i(),m,o?.runTicks?L=>o.runTicks?.(L,{render:"last"}):void 0);return r.clearVirtualActions(),v?{delivered:!1,reason:w?J:"play stopped during hold"}:{delivered:!0}}default:throw d("UNKNOWN_BRIDGE_METHOD",`session wire: unknown bridge method "${e}"`)}}async function ee(e){if(!b()&&!k())return y()?{ok:!1,error:"this ingest mount is live, but it publishes no debug plane — the mount installs no SystemAdapters.debug, so there is nothing to enumerate, read or drive through the game seam. Starting play will not change that; the game itself must declare the volter game contract (or carry a contract shim beside it) for these calls to have an answer."}:A();const t=e.method,s=e.callArgs??[];try{const a=e.instance;return{ok:!0,data:{result:await Y(t,s,a)}}}catch(a){return h(a)}}async function P(e){const{liveCanvasFrame:t}=await R(async()=>{const{liveCanvasFrame:s}=await import("./index-Cuhs4tVm.js").then(a=>a.u4);return{liveCanvasFrame:s}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9]));return t(e)}function te(){const e=l();e?.loop.liveness==="loop-starved"&&e.runTicks?.(1,{render:"last"})}function I(e,t){const s=re();return{ok:!0,data:{base64:e,mimeType:"image/png",composite:t.composite,...t.layers?{layers:t.layers}:{},...t.flatness?{flatness:t.flatness}:{},...t.loopRecoveryFrame?{loopRecoveryFrame:!0}:{},...s?{recording:s}:{}}}}function re(){const e=O();return e?{path:e.path,startedAt:e.startedAt,notice:[`This run is being RECORDED — the still above is one frame of ${e.path}.`,"A still cannot answer a question about a moving game (did the jump land, did the shot","register). If that is the question, read the clip:","",` recording: ${e.path}${e.rotates?` (the next ${E("play")} replaces this file)`:" (named — never rotated)"}`,...e.format==="canvas-dom"?[` HUD replay: ${e.replayPath}`," The raw WebM contains the canvas only. Reconstruct HUD stills with"," editor.recording.captureReplay, or export a full video with editor.recording.exportReplay."]:[],` startedAt: ${e.startedAt} (clip offset 0)`,` play log: ${e.logFile===null?"(none — nothing is logging this run)":`logs/${e.logFile}`} (event timestamps → clip offsets)`,"","THE BAR for a temporal question: examine AT LEAST 10 frames spanning no more than 5","seconds around the moment. One frame, or ten frames spread across the run, is the same","guess a single screenshot was.","",`The clip is finalized and readable when play stops — ${E("stop")}, or the idle`,`auto-stop after ${Math.round(e.idleAutoStopMs/1e3)}s with no session command and no player input.`].join(`
3
+ `)}:null}async function oe(e){if(!b()&&!k()&&!y())return A();const t=e.instance,s=D(t),a=F(t),i=C(s).medium,c=l();let o=!1,n=null;if(a&&c?.loop.liveness==="loop-starved")if(e.refreshStarvedFrame===!0&&c.runTicks)try{c.runTicks(1,{render:"last"}),o=!0}catch(r){return h(r)}else return{ok:!1,error:"cannot capture a fresh game frame while the host loop reports 'loop-starved' — inspect the separate visibility readings, let presentation resume, or request a deterministic loop-recovery frame",data:{code:"BRIDGE_SCREENSHOT_STALE"}};if(s&&typeof Image<"u"&&typeof XMLSerializer<"u"&&typeof s.getBoundingClientRect=="function")try{const r=await U(s,{canvasFrame:P,projectRoot:M()?.rootPath,...i==="unknown"?{}:{presentsOnCanvas:i==="canvas"}});if(r.layers.canvases===0&&r.layers.domOverlays===0)throw new j(i==="dom"?"dom-overlay":"composite-output","no game layers were mounted");return I(r.base64,{composite:!0,layers:r.layers,flatness:r.flatness,loopRecoveryFrame:o})}catch(r){n=r,B.warn(`Full-stack screenshot failed; returning the canvas-only fallback — ${r instanceof Error?r.message:String(r)}`,"screenshot")}if(!a){const r=n instanceof Error?n.message:String(n);return{ok:!1,error:n!==null?`full game-stack capture failed — ${r}; no canvas layer is available as a fallback`:y()?"the ingest mount is live but no DOM overlay or canvas layer is mounted for capture":"no play-mode DOM overlay or canvas layer is mounted yet",data:{code:"BRIDGE_SCREENSHOT_UNAVAILABLE"}}}try{const r=await R(()=>import("./index-Cuhs4tVm.js").then(w=>w.u4),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9])),u=r.readablePngSource(await r.liveCanvasFrame(a))??a,m=u.toDataURL("image/png"),p=m.indexOf(","),v=p>=0?m.slice(p+1):m;return I(v,{composite:!1,flatness:G(u,a.ownerDocument),loopRecoveryFrame:o})}catch(r){return{ok:!1,error:`bridge-screenshot: canvas layer capture failed — ${r instanceof Error?r.message:String(r)}`+(n===null?"":`; full game-stack capture also failed — ${n instanceof Error?n.message:String(n)}`),data:{code:"BRIDGE_SCREENSHOT_UNAVAILABLE"}}}}const Vt="workspace.command",Ct={"bridge-call":{timeoutMs:6e4,derivedRefresh:"always",handle:ee},"bridge-screenshot":{timeoutMs:15e3,derivedRefresh:"if-content-changed",handle:oe},"bridge-recording-start":{timeoutMs:15e3,derivedRefresh:"none",handle:async e=>{if(!b()&&!k()&&!y())return A();const t=D();if(!t)return{ok:!1,error:"no play-mode game surface is mounted yet"};const s=_().audio?.acquireRecordingStream?.()??null;try{return{ok:!0,data:{...await q(t,{fps:typeof e.fps=="number"?e.fps:void 0,format:e.format==="canvas-dom"||e.format==="composite-webm"?e.format:void 0,name:typeof e.name=="string"||e.name===null?e.name:void 0,canvasFrame:P,refreshFrame:te,audio:s})}}}catch(a){return h(a)}}},"bridge-recording-stop":{timeoutMs:6e4,derivedRefresh:"none",handle:async()=>{try{return{ok:!0,data:{...await x()}}}catch(e){return h(e)}}},"bridge-recording-timeline":{derivedRefresh:"none",handle:()=>{const e=H();return e===null?{ok:!1,error:"no gameplay recording is active"}:{ok:!0,data:{...e}}}},"bridge-recording-replay-capture":{timeoutMs:6e4,derivedRefresh:"none",handle:async e=>{try{return typeof e.replayPath!="string"?{ok:!1,error:"replayPath is required"}:typeof e.positionMs!="number"||!Number.isFinite(e.positionMs)?{ok:!1,error:"finite positionMs is required"}:{ok:!0,data:{...await K(e.replayPath,e.positionMs)}}}catch(t){return h(t)}}},"bridge-recording-replay-export":{timeoutMs:6e5,derivedRefresh:"none",handle:async e=>{try{if(typeof e.replayPath!="string")return{ok:!1,error:"replayPath is required"};const{blob:t,...s}=await z({replayPath:e.replayPath,...typeof e.fps=="number"?{fps:e.fps}:{},...typeof e.startMs=="number"?{startMs:e.startMs}:{},...typeof e.endMs=="number"?{endMs:e.endMs}:{}}),{beginGameplayRecordingSink:a,appendGameplayRecordingChunk:i,finishGameplayRecordingSink:c,abortGameplayRecordingSink:o}=await R(async()=>{const{beginGameplayRecordingSink:r,appendGameplayRecordingChunk:u,finishGameplayRecordingSink:m,abortGameplayRecordingSink:p}=await import("./editor-api-BEr0uD9c.js");return{beginGameplayRecordingSink:r,appendGameplayRecordingChunk:u,finishGameplayRecordingSink:m,abortGameplayRecordingSink:p}},__vite__mapDeps([10,0,1,2,3,4,5,6,7,8,9,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,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81])),n=await a({startedAt:new Date().toISOString(),mimeType:"video/webm",purpose:"export",name:typeof e.name=="string"?e.name:`replay-export-${Date.now()}`});try{for(let r=0,u=0;r<t.size;r+=4*1024*1024,u++)await i(n,u,t.slice(r,r+4*1024*1024));await c(n,"post-processed canvas and DOM recording")}catch(r){throw await o(n),r}return{ok:!0,data:{...s,path:n.path}}}catch(t){return h(t)}}}};export{Ct as commands,Vt as point};
@@ -1 +1 @@
1
- import{e as i,a,C as t,b as m,D as r,E as e,F as o}from"./index-DtG2FYKX.js";import"./webworkerAll-DkxwDNyb.js";import"./index-D8WZNJyr.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";i.add(a);i.mixin(t,m);i.add(r);i.add(e);i.mixin(t,o);
1
+ import{e as i,a,C as t,b as m,D as r,E as e,F as o}from"./index-DzDRMJf-.js";import"./webworkerAll-7la6EHDN.js";import"./index-Cuhs4tVm.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";i.add(a);i.mixin(t,m);i.add(r);i.add(e);i.mixin(t,o);
@@ -1 +1 @@
1
- import{a as u}from"./jsx-runtime-DPjLkJKQ.js";import{a5 as a}from"./index-D8WZNJyr.js";import{r as s}from"./index-nmcBqr7Y.js";import{s as d,b as l,B as i}from"./build-session-BUzPoMeJ.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-D_NuPfjr.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./configurations-Qo3roALR.js";const F="workspace.document",U="Build Player",m=["log","info","warn","error"],c=Symbol("build-player-output");function p(e){if(!e)return;const t=()=>{if(!e.isConnected)return;const o=e.contentWindow;o?.location.pathname===new URL(i,location.href).pathname&&(o[c]||(h(o),a(e,{container:()=>o.document.getElementById("game-canvas")??o.document.body,canvasFrame:n=>f(o,n)})),o.document.readyState==="complete")||setTimeout(t,0)};t()}function f(e,t){return new Promise(o=>{e.requestAnimationFrame(()=>{const n=e.document.createElement("canvas");n.width=t.width,n.height=t.height;const r=n.getContext("2d");if(!r)return o(null);r.drawImage(t,0,0),o(n)})})}function h(e){e[c]=!0;for(const t of m){const o=e.console[t].bind(e.console);e.console[t]=(...n)=>{o(...n),console[t]("[Build Player]",...n)}}e.addEventListener("error",t=>{console.error("[Build Player] Uncaught",t.error??t.message)}),e.addEventListener("unhandledrejection",t=>{console.error("[Build Player] Unhandled rejection",t.reason)}),console.info(`[Build Player] Running ${e.document.title||"the build"}`)}function j(e){const t=s.useSyncExternalStore(d,l);return u.jsx("iframe",{title:"Build Player","data-build-player":t,src:`${i}?run=${t}`,ref:p,style:{width:"100%",height:"100%",border:0,display:"block",background:"#000"}},t)}export{j as default,F as point,U as title};
1
+ import{a as u}from"./jsx-runtime-DPjLkJKQ.js";import{a5 as a}from"./index-Cuhs4tVm.js";import{r as s}from"./index-nmcBqr7Y.js";import{s as d,b as l,B as i}from"./build-session-CSoKokzk.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-D_NuPfjr.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./configurations-C7EcW8_l.js";const F="workspace.document",U="Build Player",m=["log","info","warn","error"],c=Symbol("build-player-output");function p(e){if(!e)return;const t=()=>{if(!e.isConnected)return;const o=e.contentWindow;o?.location.pathname===new URL(i,location.href).pathname&&(o[c]||(h(o),a(e,{container:()=>o.document.getElementById("game-canvas")??o.document.body,canvasFrame:n=>f(o,n)})),o.document.readyState==="complete")||setTimeout(t,0)};t()}function f(e,t){return new Promise(o=>{e.requestAnimationFrame(()=>{const n=e.document.createElement("canvas");n.width=t.width,n.height=t.height;const r=n.getContext("2d");if(!r)return o(null);r.drawImage(t,0,0),o(n)})})}function h(e){e[c]=!0;for(const t of m){const o=e.console[t].bind(e.console);e.console[t]=(...n)=>{o(...n),console[t]("[Build Player]",...n)}}e.addEventListener("error",t=>{console.error("[Build Player] Uncaught",t.error??t.message)}),e.addEventListener("unhandledrejection",t=>{console.error("[Build Player] Unhandled rejection",t.reason)}),console.info(`[Build Player] Running ${e.document.title||"the build"}`)}function j(e){const t=s.useSyncExternalStore(d,l);return u.jsx("iframe",{title:"Build Player","data-build-player":t,src:`${i}?run=${t}`,ref:p,style:{width:"100%",height:"100%",border:0,display:"block",background:"#000"}},t)}export{j as default,F as point,U as title};
@@ -1,2 +1,2 @@
1
- import{a as e}from"./jsx-runtime-DPjLkJKQ.js";import{b4 as D,cP as F,c_ as H,eo as O,ep as I,eq as M,er as i,a7 as L,es as R,aZ as o,et as n,dh as G,aN as j,a6 as k,b1 as _,eu as J,ev as V,cp as U,ew as q,ex as Y}from"./index-D8WZNJyr.js";import{r}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{a as Z,c as A,u as K,e as Q,f as X,g as ee,h as te,r as P,i as C}from"./build-session-BUzPoMeJ.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"./configurations-Qo3roALR.js";const f="volter.project.json",S={name:"My Game",resolution:{width:1280,height:720},appId:"com.example.mygame"};function ie(){r.useSyncExternalStore(Z,A,A);const s=ee(),p=_(),a=p?D(p):null,[y,T]=r.useState(S),m=K(),[d,N]=r.useState("");r.useEffect(()=>{!d&&m.length>0&&N(m[0]?.id??"")},[m,d]);const x=r.useRef(null),h=r.useCallback(async()=>{const t=await F(f),l=t?JSON.parse(t):S;T({...S,...l,resolution:{...S.resolution,...l.resolution}})},[]);r.useEffect(()=>(h().catch(()=>{}),a?.subscribeAll(t=>{t===f&&h().catch(()=>{})})??(()=>{})),[a,h]),r.useEffect(()=>()=>{x.current&&clearTimeout(x.current)},[]);const v=r.useCallback(t=>{x.current&&clearTimeout(x.current),x.current=setTimeout(async()=>{const l=await F(f);if(!l)throw new Error(`Cannot edit build settings: ${f} is missing`);const u=JSON.parse(l),g=`${JSON.stringify({...u,name:t.name,resolution:t.resolution,appId:t.appId},null,2)}
1
+ import{a as e}from"./jsx-runtime-DPjLkJKQ.js";import{b4 as D,cP as F,c_ as H,eo as O,ep as I,eq as M,er as i,a7 as L,es as R,aZ as o,et as n,dh as G,aN as j,a6 as k,b1 as _,eu as J,ev as V,cp as U,ew as q,ex as Y}from"./index-Cuhs4tVm.js";import{r}from"./index-nmcBqr7Y.js";import"./index-CtzuWnCS.js";import{a as Z,c as A,u as K,e as Q,f as X,g as ee,h as te,r as P,i as C}from"./build-session-CSoKokzk.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"./configurations-C7EcW8_l.js";const f="volter.project.json",S={name:"My Game",resolution:{width:1280,height:720},appId:"com.example.mygame"};function ie(){r.useSyncExternalStore(Z,A,A);const s=ee(),p=_(),a=p?D(p):null,[y,T]=r.useState(S),m=K(),[d,N]=r.useState("");r.useEffect(()=>{!d&&m.length>0&&N(m[0]?.id??"")},[m,d]);const x=r.useRef(null),h=r.useCallback(async()=>{const t=await F(f),l=t?JSON.parse(t):S;T({...S,...l,resolution:{...S.resolution,...l.resolution}})},[]);r.useEffect(()=>(h().catch(()=>{}),a?.subscribeAll(t=>{t===f&&h().catch(()=>{})})??(()=>{})),[a,h]),r.useEffect(()=>()=>{x.current&&clearTimeout(x.current)},[]);const v=r.useCallback(t=>{x.current&&clearTimeout(x.current),x.current=setTimeout(async()=>{const l=await F(f);if(!l)throw new Error(`Cannot edit build settings: ${f} is missing`);const u=JSON.parse(l),g=`${JSON.stringify({...u,name:t.name,resolution:t.resolution,appId:t.appId},null,2)}
2
2
  `;if(!a){await H(f,g);return}await a.write(f,g,{label:"Edit Build Settings",kind:"settings",contentType:"application/json"}).catch(()=>void h().catch(()=>{}))},500)},[a,h]),$=r.useCallback(t=>{T(l=>{const u={...l,...t};return v(u),u})},[v]),E=r.useCallback((t,l)=>{T(u=>{const g={...u,resolution:{...u.resolution,[t]:Math.round(l)}};return v(g),g})},[v]),c=s.phase,b=s.result?.report?.artifact??null;return e.jsxs("div",{"data-testid":"build-profiles-document",style:{display:"flex",flex:1,minHeight:0,background:O[1],pointerEvents:"auto"},children:[e.jsx("div",{style:le,children:m.map(t=>e.jsx(M,{selected:d===t.id,disabled:c==="building",onClick:()=>{c!=="building"&&N(t.id)},style:{padding:`${i[4]} ${i[6]}`,opacity:c==="building"&&d!==t.id?.4:1},children:e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:i[4]},children:[e.jsx(L,{icon:G,style:{fontSize:n.lg,color:d===t.id?R:o[2]}}),e.jsxs("div",{children:[e.jsx("div",{style:{fontSize:n.md,fontWeight:600,color:d===t.id?o[1]:o[2]},children:t.label}),e.jsx("div",{style:{fontSize:n.sm,color:o[3],marginTop:1},children:t.subtitle})]})]})},t.id))}),e.jsxs("div",{style:{flex:1,display:"flex",flexDirection:"column",minWidth:0,padding:`${i[5]} ${i[8]}`,maxWidth:560},children:[e.jsx("div",{style:W,children:"Project"}),e.jsxs("div",{style:w,children:[e.jsx("label",{style:B,children:"Name"}),e.jsx(j,{className:"volter-input",style:{flex:1},value:y.name,onChange:t=>$({name:t.target.value})})]}),e.jsxs("div",{style:w,children:[e.jsx("label",{style:B,children:"Resolution"}),e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:i[2],flex:1},children:[e.jsx(j,{type:"number",className:"volter-input",style:{width:0,flex:1},value:y.resolution.width,onChange:t=>{const l=Number.parseInt(t.target.value,10);Number.isFinite(l)&&l>0&&E("width",l)}}),e.jsx("span",{style:{fontSize:n.sm,color:o[3]},children:"×"}),e.jsx(j,{type:"number",className:"volter-input",style:{width:0,flex:1},value:y.resolution.height,onChange:t=>{const l=Number.parseInt(t.target.value,10);Number.isFinite(l)&&l>0&&E("height",l)}})]})]}),e.jsxs("div",{style:w,children:[e.jsx("label",{style:B,children:"App ID"}),e.jsx(j,{className:"volter-input",style:{flex:1},value:y.appId,onChange:t=>$({appId:t.target.value})})]}),e.jsxs("div",{style:{...w,marginTop:i[2]},children:[e.jsx("label",{style:B,children:"Output"}),e.jsx("span",{style:{fontSize:n.md,color:o[2]},children:b??"Artifact appears here after a build"})]}),e.jsx("div",{style:{marginTop:i[6],display:"flex",alignItems:"center",gap:i[4],paddingTop:i[4],borderTop:`1px solid ${I[1]}`},children:c==="building"?e.jsxs(e.Fragment,{children:[e.jsxs("span",{style:{fontSize:n.md,fontWeight:600,color:R},children:["Building for ",m.find(t=>t.id===s.target)?.label??s.target,"… (log in Build Output below)"]}),e.jsx(k,{size:"compact",onClick:te,children:"Cancel"})]}):e.jsxs(e.Fragment,{children:[c==="done"&&s.result&&e.jsx("span",{"data-testid":"build-profiles-result",style:{fontSize:n.md,fontWeight:600,color:s.result.ok?J:V},children:s.result.ok?"✓ Build complete":`✗ Build failed (exit ${s.result.code??"unknown"})`}),c==="done"&&s.result?.ok&&b&&e.jsx("a",{href:U(b),download:b,className:"volter-btn","data-variant":"secondary","data-size":"default",style:{textDecoration:"none",display:"inline-flex"},children:"Download"}),e.jsx(k,{variant:"primary","data-testid":"build-profiles-build",onClick:()=>{d&&(c==="done"&&P(),Q(d))},style:{marginLeft:"auto"},children:c==="done"?"Build Again":"Build"}),e.jsx(k,{"data-testid":"build-profiles-build-and-run",onClick:()=>{d&&(c==="done"&&P(),X(d))},children:"Build And Run"})]})}),c==="done"&&s.result?.report&&e.jsx(se,{report:s.result.report})]})]})}function se({report:s}){const p=s.largestFiles[0]?.bytes??1;return e.jsxs("section",{"data-testid":"build-report",style:{marginTop:i[6],paddingTop:i[5],borderTop:`1px solid ${I[1]}`},children:[e.jsx("div",{style:W,children:"Build report"}),e.jsxs("div",{style:{display:"flex",gap:i[4],marginBottom:i[5]},children:[e.jsx(z,{label:"Package",value:C(s.artifactBytes)}),e.jsx(z,{label:"Output",value:C(s.outputBytes)}),e.jsx(z,{label:"Files",value:String(s.fileCount)})]}),e.jsx("div",{style:{fontSize:n.sm,color:o[3],marginBottom:i[2]},children:"Largest output files"}),e.jsx("div",{style:{display:"grid",gap:3},children:s.largestFiles.slice(0,8).map(a=>e.jsxs("div",{style:{display:"grid",gridTemplateColumns:"minmax(0, 1fr) max-content",gap:i[3]},children:[e.jsxs("div",{title:a.path,style:{position:"relative",minWidth:0,overflow:"hidden",borderRadius:2},children:[e.jsx("div",{"aria-hidden":"true",style:{position:"absolute",inset:0,width:`${Math.max(2,a.bytes/p*100)}%`,background:"color-mix(in srgb, var(--volter-accent) 16%, transparent)"}}),e.jsx("div",{style:{position:"relative",padding:`${i[1]} ${i[2]}`,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",fontFamily:q,fontSize:n.sm,color:o[2]},children:a.path})]}),e.jsx("div",{style:{textAlign:"right",padding:`${i[1]} 0`,fontSize:n.sm,color:o[2]},children:C(a.bytes)})]},a.path))})]})}function z({label:s,value:p}){return e.jsxs("div",{style:{flex:1,padding:`${i[3]} ${i[4]}`,background:O[2],borderRadius:Y.sm},children:[e.jsx("div",{style:{fontSize:n.sm,color:o[3]},children:s}),e.jsx("div",{style:{marginTop:i[1],fontSize:n.lg,fontWeight:650,color:o[1]},children:p})]})}const le={width:160,flexShrink:0,borderRight:`1px solid ${I[1]}`,overflowY:"auto"},W={fontSize:n.sm,fontWeight:700,textTransform:"uppercase",color:o[3],letterSpacing:"0.05em",marginBottom:i[3]},w={display:"flex",alignItems:"center",gap:i[3],marginBottom:i[2]},B={width:65,fontSize:n.base,color:o[2],flexShrink:0},he="workspace.document",ge="Build Profiles";function ye(s){return e.jsx(ie,{})}export{ye as default,he as point,ge as title};
@@ -1 +1 @@
1
- import{a as t}from"./jsx-runtime-DPjLkJKQ.js";import{r}from"./index-nmcBqr7Y.js";import{a,c as e,g as i}from"./build-session-BUzPoMeJ.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./configurations-Qo3roALR.js";import"./index-D8WZNJyr.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";const x="workspace.status",B="Build Progress",h="left",S=30;function k(){r.useSyncExternalStore(a,e,e);const s=i();return s.phase==="idle"?null:s.phase==="building"?t.jsxs("span",{className:"volter-status-copy","data-testid":"status-build-progress","data-build-phase":"building","data-status-tone":"accent",children:["Building ",s.target,"…"]}):t.jsx("span",{className:"volter-status-copy","data-testid":"status-build-progress","data-build-phase":s.result?.ok?"complete":"failed","data-status-tone":s.result?.ok?"success":"danger",children:s.result?.ok?"Build complete":"Build failed"})}export{h as align,k as default,S as order,x as point,B as title};
1
+ import{a as t}from"./jsx-runtime-DPjLkJKQ.js";import{r}from"./index-nmcBqr7Y.js";import{a,c as e,g as i}from"./build-session-CSoKokzk.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./configurations-C7EcW8_l.js";import"./index-Cuhs4tVm.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";const x="workspace.status",B="Build Progress",h="left",S=30;function k(){r.useSyncExternalStore(a,e,e);const s=i();return s.phase==="idle"?null:s.phase==="building"?t.jsxs("span",{className:"volter-status-copy","data-testid":"status-build-progress","data-build-phase":"building","data-status-tone":"accent",children:["Building ",s.target,"…"]}):t.jsx("span",{className:"volter-status-copy","data-testid":"status-build-progress","data-build-phase":s.result?.ok?"complete":"failed","data-status-tone":s.result?.ok?"success":"danger",children:s.result?.ok?"Build complete":"Build failed"})}export{h as align,k as default,S as order,x as point,B as title};