@volter/game-editor 0.5.91 → 0.5.92
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.
- package/BUNDLED_NOTICES +22 -22
- package/catalog/entries/blender.json +2 -2
- package/catalog/entries/music.json +2 -2
- package/dist/.vite/manifest.json +2133 -2133
- package/dist/assets/{AssetBudgetPanel-DoHols3L.js → AssetBudgetPanel-DeJukdzT.js} +3 -3
- package/dist/assets/{AudioViewer-DJpWQMh1.js → AudioViewer-m9jtkgYo.js} +1 -1
- package/dist/assets/{CanvasBoardDocument-DUkSFZ3M.js → CanvasBoardDocument-DooBGHPq.js} +1 -1
- package/dist/assets/{CanvasSceneViewport-lY7d92L2.js → CanvasSceneViewport-CoFzzJfs.js} +1 -1
- package/dist/assets/{ColorInput-7cF4Leq3.js → ColorInput-NuZ1WtIR.js} +1 -1
- package/dist/assets/{ColorPicker-B2gSkOna.js → ColorPicker-DYngmfYK.js} +1 -1
- package/dist/assets/{EntityModelDocument-DFLHmO4x.js → EntityModelDocument-P3FihIlT.js} +1 -1
- package/dist/assets/{EnvironmentAssetDocument-C_10a-a0.js → EnvironmentAssetDocument-UW9Fz8gy.js} +1 -1
- package/dist/assets/{GameplaySessionTimeline-BMz5GHq5.js → GameplaySessionTimeline-CPMUudKc.js} +1 -1
- package/dist/assets/{ImageViewer-CEtC82uC.js → ImageViewer-C2TMh_cS.js} +1 -1
- package/dist/assets/InspectorObjectPreview-K6qqzlCF.js +1 -0
- package/dist/assets/{JsonAssetDocument-BjmItF9c.js → JsonAssetDocument-ChhlRvdh.js} +1 -1
- package/dist/assets/{LiveModuleDocument-DxsfqWPz.js → LiveModuleDocument-BBpws-_t.js} +1 -1
- package/dist/assets/{LutAssetDocument-BWgoofXc.js → LutAssetDocument-DYvPXEBg.js} +1 -1
- package/dist/assets/{ModelAssetDocument-CCOUnfNZ.js → ModelAssetDocument-OhbJGtHY.js} +1 -1
- package/dist/assets/{NonThreeAuthoringBootstrap-U8pDO_5y.js → NonThreeAuthoringBootstrap-DACaW5Vs.js} +1 -1
- package/dist/assets/{Object3DDocumentToolbar-CJE4T3cC.js → Object3DDocumentToolbar-CW5xzjh7.js} +1 -1
- package/dist/assets/Object3DDocumentViewport-C6qwIfnP.js +2 -0
- package/dist/assets/{Object3DPreview-CbcdszHX.js → Object3DPreview-DtiKkA9J.js} +1 -1
- package/dist/assets/{OnlineAssetDetail-BaW-VQoM.js → OnlineAssetDetail-CW7WV3OO.js} +1 -1
- package/dist/assets/{PlayBar-Dt55-XQi.js → PlayBar-B_Lni0-H.js} +1 -1
- package/dist/assets/{QuarksAssetDocument-B6NS06Qk.js → QuarksAssetDocument-CG9QU-_U.js} +1 -1
- package/dist/assets/{ReactCanvasControls-B3DU4o7S.js → ReactCanvasControls-CVmKmPCB.js} +1 -1
- package/dist/assets/{RootSelectionOverlay-DGhqE3ru.js → RootSelectionOverlay-BBPSUpGw.js} +1 -1
- package/dist/assets/{ShaderAssetDocument-C6ew-WgT.js → ShaderAssetDocument-Cf8KU6yA.js} +1 -1
- package/dist/assets/{ShadowEditor-BTWOn0NH.js → ShadowEditor-axHBX3ZT.js} +1 -1
- package/dist/assets/{SourceAssetViewer-BHIPNJyW.js → SourceAssetViewer-mb-qv2H4.js} +1 -1
- package/dist/assets/{StageHost-CgQvlJ6q.js → StageHost-CltfMwcG.js} +2 -2
- package/dist/assets/{StoryPreviewMount-BODkiKx5.js → StoryPreviewMount-CN9Jjj_B.js} +1 -1
- package/dist/assets/{ThreeBoardDocument-2Hape4Gq.js → ThreeBoardDocument-CP2sAfro.js} +2 -2
- package/dist/assets/{ThreeIsolationSceneContent-DmeEOKni.js → ThreeIsolationSceneContent-CHm48Iwq.js} +1 -1
- package/dist/assets/{ToolObject3DPreview-BLUyNI0a.js → ToolObject3DPreview-BMGfohlr.js} +1 -1
- package/dist/assets/{Toolbar-BaTvvAae.js → Toolbar-By5RmjZA.js} +1 -1
- package/dist/assets/{TransientHint-Bf1GHsWL.js → TransientHint-DvlYI-GB.js} +1 -1
- package/dist/assets/{VideoViewer-D_aUwqjA.js → VideoViewer-C_Ypqrhs.js} +1 -1
- package/dist/assets/{ViewportShadingMenu-C3thhpMD.js → ViewportShadingMenu-DnqUmVm4.js} +1 -1
- package/dist/assets/{active-ingest-CPY5d7Ae.js → active-ingest-BEQcTdnB.js} +2 -2
- package/dist/assets/{animation-clock-BUG7-Hj6.js → animation-clock-DdJoDJut.js} +1 -1
- package/dist/assets/{animation-mixers.service-UqRHpBS5.js → animation-mixers.service-Cwwx5Rk1.js} +1 -1
- package/dist/assets/{animation-timeline.utility-vjZNsvAC.js → animation-timeline.utility-COGKHdbx.js} +1 -1
- package/dist/assets/{asset-budget-asset.menu-Btshx1dW.js → asset-budget-asset.menu-Dnh4Og48.js} +1 -1
- package/dist/assets/{asset-budget.action-Jb6hBA39.js → asset-budget.action-CWMJY1nK.js} +1 -1
- package/dist/assets/{asset-budget.document-BFWXwNI0.js → asset-budget.document-D0eHpYEa.js} +1 -1
- package/dist/assets/{asset-budget.menu-BTPSwcMa.js → asset-budget.menu-BEOvkmkJ.js} +1 -1
- package/dist/assets/{asset-editor-persistence-CL-0YalT.js → asset-editor-persistence-Bk2mBIUR.js} +1 -1
- package/dist/assets/{asset-loaders-nDvCLina.js → asset-loaders-CtCb12Wy.js} +1 -1
- package/dist/assets/{asset-preview-BqLvTtnb.js → asset-preview-DLr3X2Ff.js} +1 -1
- package/dist/assets/{audio-unlock.service-DnCb3tjQ.js → audio-unlock.service-g6nZnyKt.js} +1 -1
- package/dist/assets/{audio.utility-DlkiEBfp.js → audio.utility-qHaPxVG5.js} +1 -1
- package/dist/assets/autoplay.service-CQBU7J4-.js +1 -0
- package/dist/assets/{babylon-authoring-adapter-CnxkYjhp.js → babylon-authoring-adapter-Bflf5oll.js} +1 -1
- package/dist/assets/{binding-resolver-cWcQuwXj.js → binding-resolver-Cp64QEEm.js} +2 -2
- package/dist/assets/{blender-node-editor.document-DIAjTz4F.js → blender-node-editor.document-BS6XiYdy.js} +1 -1
- package/dist/assets/{blender-properties-tab-DXuz6Cpg.js → blender-properties-tab-DPGcP6sE.js} +1 -1
- package/dist/assets/{blender-runtime-host-CJwNrADC.js → blender-runtime-host-CbZll4j6.js} +1 -1
- package/dist/assets/{blender-runtime-skin-6IzekhAd.js → blender-runtime-skin-CU4ON8U6.js} +2 -2
- package/dist/assets/{blender-runtime.document-Rf7NwTan.js → blender-runtime.document-DFk6LfKL.js} +2 -2
- package/dist/assets/{blender-screenshot.menu-CZagx_wX.js → blender-screenshot.menu-Zh-gSLyF.js} +1 -1
- package/dist/assets/{blender-timeline.document-DzhgQIDL.js → blender-timeline.document-DNGYxSVR.js} +1 -1
- package/dist/assets/{blender-uv-editor.document-ClearI2D.js → blender-uv-editor.document-DPeAgCdu.js} +1 -1
- package/dist/assets/{blender-version.status-BkFPoDDf.js → blender-version.status-Csf1NdCu.js} +1 -1
- package/dist/assets/{blender.command-BrtEn062.js → blender.command-zra5rClU.js} +1 -1
- package/dist/assets/{board-guides-D-k2cJcJ.js → board-guides-Dr7UmPbr.js} +1 -1
- package/dist/assets/{bridge.command-CgLcpLfB.js → bridge.command-Bx4V0CGQ.js} +3 -3
- package/dist/assets/{browserAll-CGgcubIt.js → browserAll-Dq7w5Sua.js} +1 -1
- package/dist/assets/{build-player.document-DhIDZKN-.js → build-player.document-CNQbxiwV.js} +1 -1
- package/dist/assets/{build-profiles.document-3r5ZhcB2.js → build-profiles.document-BPB32ZWV.js} +1 -1
- package/dist/assets/{build-progress.status-B1PXTSq7.js → build-progress.status-rSsHAPQ2.js} +1 -1
- package/dist/assets/{build-session-ulklRzSk.js → build-session-DNW4mFav.js} +1 -1
- package/dist/assets/{build.action-B5miC2Fi.js → build.action-Dyk6sukW.js} +1 -1
- package/dist/assets/{build.command-Cys5G5ZA.js → build.command-BtNjabOw.js} +1 -1
- package/dist/assets/{build.header-BJLJN9mP.js → build.header-DcJSZtCO.js} +1 -1
- package/dist/assets/{build.menu-bi39YVfp.js → build.menu-NxQtwHgd.js} +1 -1
- package/dist/assets/{build.service-DC4h7GhW.js → build.service-7Up4tNeR.js} +1 -1
- package/dist/assets/{camera-B9Y3RW7X.js → camera-lGstadDR.js} +1 -1
- package/dist/assets/{camera-runtime.inspector-D22mhDzD.js → camera-runtime.inspector-DclViJea.js} +1 -1
- package/dist/assets/{canvas-design-mount-Bp3K3717.js → canvas-design-mount-eCCv2or-.js} +3 -3
- package/dist/assets/{canvas-entry-runtime-BHOqndB_.js → canvas-entry-runtime-BT12lNQT.js} +2 -2
- package/dist/assets/{canvas-preview-frames-2tJZVdS2.js → canvas-preview-frames-CIiSC8-I.js} +1 -1
- package/dist/assets/{canvas-story-capture.service-DANEGQnC.js → canvas-story-capture.service-DmVs5hJt.js} +2 -2
- package/dist/assets/{capability-coverage-BOaPg0KC.js → capability-coverage-D_4ewfIt.js} +1 -1
- package/dist/assets/{collaboration-presence-CaATXsiz.js → collaboration-presence-B6A41ctS.js} +1 -1
- package/dist/assets/{collider-DZkp1rvK.js → collider-UIoHvnAV.js} +1 -1
- package/dist/assets/{component-board.service-Bba7cD7r.js → component-board.service-BY1eTL_6.js} +2 -2
- package/dist/assets/{component-board.service-CwKm1aEc.js → component-board.service-Cqv0Cqk8.js} +2 -2
- package/dist/assets/{component-board.service-CDeqmtPt.js → component-board.service-ymaR5Gc6.js} +2 -2
- package/dist/assets/{component-contracts.service-kh4-IF8j.js → component-contracts.service-BnuCkosG.js} +1 -1
- package/dist/assets/{component-instance-root-JAQpC4Pi.js → component-instance-root-CPMZslj8.js} +1 -1
- package/dist/assets/{component-verbs.command-DNG8KytX.js → component-verbs.command-BE_JeIuS.js} +1 -1
- package/dist/assets/{component-verbs.service-CQCmsdNk.js → component-verbs.service-1VQEboWj.js} +1 -1
- package/dist/assets/{config-D8XyIZPl.js → config-BbIJR-Td.js} +2 -2
- package/dist/assets/{configurations-Bzh9kmrk.js → configurations-CAI-raMi.js} +1 -1
- package/dist/assets/{connection.status-ChQR4f5Y.js → connection.status-MORY2ecq.js} +1 -1
- package/dist/assets/{constraints.inspector-Ddo1UQNJ.js → constraints.inspector-yAWUn_QN.js} +1 -1
- package/dist/assets/{content-bounds-B_xPBrsP.js → content-bounds-DbjVwafW.js} +1 -1
- package/dist/assets/{contract-system-adapters-C1oaetXB.js → contract-system-adapters-B7HjmMU3.js} +1 -1
- package/dist/assets/{coverage.service-DIQXHW6Q.js → coverage.service-BpHkqGqx.js} +1 -1
- package/dist/assets/{create-runtime-BQdKNIfc.js → create-runtime-CMdnacgk.js} +1 -1
- package/dist/assets/{curve-BEKFgt87.js → curve-W-sfW-YV.js} +1 -1
- package/dist/assets/{data-asset-BZA163so.js → data-asset-BwavdNYa.js} +1 -1
- package/dist/assets/{data-ref-BUMaOgK6.js → data-ref-BKAuxnNn.js} +1 -1
- package/dist/assets/{debug-bridge-B8Do4Q6K.js → debug-bridge-Ce2BNh0c.js} +1 -1
- package/dist/assets/{debug-registry-CoiJ_gHM.js → debug-registry-Cs16f-aE.js} +1 -1
- package/dist/assets/{deferred-ingest-play-DJeWQ-He.js → deferred-ingest-play-i3TXIcol.js} +2 -2
- package/dist/assets/{design-time-canvas-mount-B_5sxSjq.js → design-time-canvas-mount-DRuLuHb8.js} +2 -2
- package/dist/assets/{design-time-layers-Bspf2qH5.js → design-time-layers-CIQmpekh.js} +1 -1
- package/dist/assets/{design-time-mount.service-BE5vpW1Y.js → design-time-mount.service-CVTv4ycX.js} +2 -2
- package/dist/assets/{design-time-mount.service-038G1MnB.js → design-time-mount.service-FXHDWVCG.js} +2 -2
- package/dist/assets/{design-time-react-mount--CifCE6t.js → design-time-react-mount-BctXdzCd.js} +1 -1
- package/dist/assets/{document-preview-three-D46Hv_l-.js → document-preview-three-B2MgbkoT.js} +1 -1
- package/dist/assets/{dom-authoring-adapter-CI_qQmaE.js → dom-authoring-adapter-DIVIU5iS.js} +1 -1
- package/dist/assets/{draco3d-FJXe8NCw.js → draco3d-DqB07Xwz.js} +1 -1
- package/dist/assets/{edit-mode-audio.service-qKdc6y7a.js → edit-mode-audio.service-BdMtawvV.js} +1 -1
- package/dist/assets/{edit-mode-authoring-C0sf0ewd.js → edit-mode-authoring-BYKTzHxo.js} +1 -1
- package/dist/assets/{edit-mode-networking.service-D-eLZBVJ.js → edit-mode-networking.service-BMgRT6VZ.js} +1 -1
- package/dist/assets/{editor-api-DeTJ2F2f.js → editor-api-MVTYddFN.js} +1 -1
- package/dist/assets/{editor-layers-B43PZgUF.js → editor-layers-DB2HoNYg.js} +1 -1
- package/dist/assets/{editor-shell-store-CW9Fjab9.js → editor-shell-store-B_3I8rkh.js} +1 -1
- package/dist/assets/{entity-object-C40NpVSX.js → entity-object-Btp4Cm7a.js} +1 -1
- package/dist/assets/{extend-CB1ggOZp.js → extend-BBPSDBSg.js} +1 -1
- package/dist/assets/{fork-menu-ByAv7gfK.js → fork-menu-igGxVTU5.js} +1 -1
- package/dist/assets/{frame-debugger-store-BOL6rL6i.js → frame-debugger-store-CGTQsnpN.js} +1 -1
- package/dist/assets/{game-contract-seams-Dq1YiGya.js → game-contract-seams-CqP5-7QG.js} +1 -1
- package/dist/assets/{game-css-scope-transform-zF8z1rZz.js → game-css-scope-transform-BLyGDsn5.js} +1 -1
- package/dist/assets/{game-document.service-DlSkuYvA.js → game-document.service-BMXhV4k0.js} +1 -1
- package/dist/assets/{game-eval.command-Cnr70bCU.js → game-eval.command-BBdWh7r4.js} +1 -1
- package/dist/assets/{game-module-access-Pz5cgPiz.js → game-module-access-DB-3_dQL.js} +1 -1
- package/dist/assets/{game-network-D8nKKSRC.js → game-network-CjxVSmyx.js} +3 -3
- package/dist/assets/{gameplay-export-FFcX1OzU.js → gameplay-export-CKg7Tr5V.js} +1 -1
- package/dist/assets/{gameplay-replay-CVwLaTax.js → gameplay-replay-BKk0MkWw.js} +1 -1
- package/dist/assets/{gameplay.command-64STQYm4.js → gameplay.command-BzuqC2M4.js} +1 -1
- package/dist/assets/{generation-jobs-BOOUx41p.js → generation-jobs-Bc9aPUjo.js} +1 -1
- package/dist/assets/{generation.service-BJn-hOAW.js → generation.service-Ctq8vDs8.js} +1 -1
- package/dist/assets/{generations-BuBWfmYF.js → generations-v6wlWOxc.js} +1 -1
- package/dist/assets/{generations.status-Cw7FBmHO.js → generations.status-D23nC6DT.js} +1 -1
- package/dist/assets/{hierarchy-marks-r1SCnl92.js → hierarchy-marks-BUq91mYX.js} +1 -1
- package/dist/assets/{hosted-asset-materialization-CCfM8rX8.js → hosted-asset-materialization-B1mfxDMA.js} +1 -1
- package/dist/assets/{index-tsU_SOUL.js → index-BWkADFm_.js} +1 -1
- package/dist/assets/{index-DNuUwvUR.js → index-Bi11wn2O.js} +1 -1
- package/dist/assets/{index-BTlpcjdl.js → index-COGWs_Hz.js} +2 -2
- package/dist/assets/{index-CiKYIRrk.js → index-CPn7DYN1.js} +1 -1
- package/dist/assets/{index-C5X85WM3.js → index-C_Y18gyB.js} +1 -1
- package/dist/assets/{index-DnZE2Fb2.js → index-Cq5IOeJJ.js} +1 -1
- package/dist/assets/{index-CRFTAXpT.js → index-Da25n7KE.js} +1 -1
- package/dist/assets/{index-EO6Vl92s.js → index-DyTgGJaV.js} +265 -265
- package/dist/assets/{index-CDTbPbQM.js → index-YE-BLlXn.js} +1 -1
- package/dist/assets/{inference-diagnostics-18bkEAju.js → inference-diagnostics--P59uVfZ.js} +1 -1
- package/dist/assets/{ingest-boot-viewport-BuSUroou.js → ingest-boot-viewport-CG06rhnI.js} +1 -1
- package/dist/assets/{ingest-siblings-B3ExLPmT.js → ingest-siblings-lud-fBi3.js} +1 -1
- package/dist/assets/{ingest-source-persistence-C2eN6TUG.js → ingest-source-persistence-Dlr1NuFz.js} +1 -1
- package/dist/assets/{ingest.service-DPCT2mkC.js → ingest.service--OsL8JsR.js} +1 -1
- package/dist/assets/{inspect-BqpAh85y.js → inspect-DuE1D5UR.js} +1 -1
- package/dist/assets/instances.command-Dzidr8Yl.js +1 -0
- package/dist/assets/{json-history-resource-BjCvVkMa.js → json-history-resource-IKUe_-vd.js} +1 -1
- package/dist/assets/{layered-pick-Ciu7uLFh.js → layered-pick-BtIxP5aF.js} +1 -1
- package/dist/assets/{light-CXcgEBDG.js → light-CWgqDXEE.js} +1 -1
- package/dist/assets/{live-project-verbs-BBbF8usb.js → live-project-verbs-CHp_aQ8s.js} +1 -1
- package/dist/assets/{machine.document-Bdci5A4S.js → machine.document-DnI8qlb5.js} +1 -1
- package/dist/assets/{machines.finder-CvEKAnGk.js → machines.finder-bsxZB24L.js} +1 -1
- package/dist/assets/{material-factory-Df67vZ1z.js → material-factory-Bl4Vy50a.js} +1 -1
- package/dist/assets/{material-ClpgTT47.js → material-t5AUiIjm.js} +1 -1
- package/dist/assets/{mesh-DkaFE4sY.js → mesh-D0ARI7DT.js} +1 -1
- package/dist/assets/{model-asset-sections.service-CBOHxNFe.js → model-asset-sections.service-BcfL914J.js} +1 -1
- package/dist/assets/{model-inspection-DcL5cH7Y.js → model-inspection-BinpX_8X.js} +1 -1
- package/dist/assets/{model-thumbnail-C6YzkBEi.js → model-thumbnail-D5m5B4yc.js} +1 -1
- package/dist/assets/{models.finder-DfEs64WT.js → models.finder-BbLyybE3.js} +1 -1
- package/dist/assets/{module-mode-f-SD3z04.js → module-mode-CX71o-Qn.js} +2 -2
- package/dist/assets/{mount-canvas-ingest-root-BnxcPl2U.js → mount-canvas-ingest-root-BL4ma7EJ.js} +2 -2
- package/dist/assets/{mount-dom-ingest-root-CfwImvJz.js → mount-dom-ingest-root-BFN7fuIH.js} +2 -2
- package/dist/assets/{mount-ingest-root-Dh6Z1uso.js → mount-ingest-root-CCtls9Pm.js} +2 -2
- package/dist/assets/{mount-manifest-CAxRLPYT.js → mount-manifest-CesgcqbR.js} +1 -1
- package/dist/assets/{mount-three-ingest-root-CoqxTpZB.js → mount-three-ingest-root-CO7xNkMs.js} +1 -1
- package/dist/assets/{mounted-authoring-DfEm9qgt.js → mounted-authoring-D5zJIfVC.js} +1 -1
- package/dist/assets/{mounted-story-viewport-source-WBFaoqod.js → mounted-story-viewport-source-Cacn-FrZ.js} +1 -1
- package/dist/assets/{native-debug-module-piwWLOP6.js → native-debug-module-Cexnkzpz.js} +1 -1
- package/dist/assets/{navigation-DYa_HSby.js → navigation-C04dv_AE.js} +1 -1
- package/dist/assets/{navmesh.menu-B0MJEIPE.js → navmesh.menu-BR3qfEFi.js} +1 -1
- package/dist/assets/{navmesh.service-BpsPIRLZ.js → navmesh.service-cZZp_aWp.js} +1 -1
- package/dist/assets/network-observer.service-DbrkhWzR.js +1 -0
- package/dist/assets/{network.utility-DMr-AxKs.js → network.utility-DUizYX_I.js} +1 -1
- package/dist/assets/{object3d-document-session-registry-3YUZT4RT.js → object3d-document-session-registry-DkPO8z-D.js} +2 -2
- package/dist/assets/{oid-transform-DsAJ1P8o.js → oid-transform-CTTG13hx.js} +1 -1
- package/dist/assets/{particles-vZ9UmSDz.js → particles-Cl0uw7lL.js} +1 -1
- package/dist/assets/{pixi-authoring-adapter-QT0kN-JP.js → pixi-authoring-adapter-Bqfxw_3m.js} +1 -1
- package/dist/assets/{pixi-live-write-target-DM9cdS1_.js → pixi-live-write-target-DBVljmfv.js} +1 -1
- package/dist/assets/{play.command-DH2eNjdZ.js → play.command-BPWKJOEz.js} +2 -2
- package/dist/assets/{presentation-VcgXp-GO.js → presentation-BmRLRj9u.js} +1 -1
- package/dist/assets/{product-x_cfmfQ9.js → product-CkPQ3Ux6.js} +1 -1
- package/dist/assets/{profiler.action-C3xlnyom.js → profiler.action-DJPQHO0O.js} +1 -1
- package/dist/assets/{profiler.menu-DSUi8xT3.js → profiler.menu-DWjSnHVe.js} +1 -1
- package/dist/assets/{profiler.utility-BRSMJoGZ.js → profiler.utility-Y6h6m2t-.js} +1 -1
- package/dist/assets/{project-authoring-session-CwEQV0bP.js → project-authoring-session-DBF7pYCM.js} +2 -2
- package/dist/assets/{properties-bone-constraints.inspector-Ct1jO5Ue.js → properties-bone-constraints.inspector-DEdkTEo5.js} +1 -1
- package/dist/assets/{properties-bone.inspector-DxGQlndA.js → properties-bone.inspector-H-BBVZ8o.js} +1 -1
- package/dist/assets/{properties-collection.inspector-lK30X7Jh.js → properties-collection.inspector-BcsCcAvS.js} +1 -1
- package/dist/assets/{properties-constraints.inspector-Da8piE2V.js → properties-constraints.inspector-CUu-cNQ6.js} +1 -1
- package/dist/assets/{properties-data.inspector-WI4fuv2D.js → properties-data.inspector-BUel_GUU.js} +1 -1
- package/dist/assets/{properties-material.inspector-CQwIjVw1.js → properties-material.inspector-CIDoVmLo.js} +1 -1
- package/dist/assets/{properties-modifiers.inspector-BzQAh_u0.js → properties-modifiers.inspector--4LrHaeK.js} +1 -1
- package/dist/assets/{properties-object.inspector-Du6jNcII.js → properties-object.inspector-B8EgTfAi.js} +1 -1
- package/dist/assets/{properties-output.inspector-BQzIXPdl.js → properties-output.inspector-De86chrb.js} +1 -1
- package/dist/assets/{properties-particles.inspector-C-lSFNSf.js → properties-particles.inspector-Tcr6I9r6.js} +1 -1
- package/dist/assets/{properties-physics.inspector-CwC0aupw.js → properties-physics.inspector-B1e-ODZG.js} +1 -1
- package/dist/assets/{properties-render.inspector-D0P3nYYJ.js → properties-render.inspector-C8UodgyN.js} +1 -1
- package/dist/assets/{properties-scene.inspector-bM362PAU.js → properties-scene.inspector-D51KNWsk.js} +1 -1
- package/dist/assets/{properties-texture.inspector-8ucuWCLj.js → properties-texture.inspector-BclKARti.js} +1 -1
- package/dist/assets/{properties-view-layer.inspector-DWOu3YE3.js → properties-view-layer.inspector-BzRfWdvM.js} +1 -1
- package/dist/assets/{properties-world.inspector-BDTb__xL.js → properties-world.inspector-XxcFLmWg.js} +1 -1
- package/dist/assets/{r3f-design-session-gQuaJFCS.js → r3f-design-session-_2tBNT-r.js} +2 -2
- package/dist/assets/{r3f-physics-binding-CFwn2dZ0.js → r3f-physics-binding-DyvJAWJ4.js} +1 -1
- package/dist/assets/{r3f-source-authoring-adapter-DhFdCSs7.js → r3f-source-authoring-adapter-Ds3u5Oet.js} +1 -1
- package/dist/assets/{react-canvas-navigation-VKHmF9L9.js → react-canvas-navigation-DDNw2mVf.js} +1 -1
- package/dist/assets/{react-inspector.service-DheFnb_w.js → react-inspector.service-BOa9W_rc.js} +1 -1
- package/dist/assets/{react-story-board-BdHhG7gL.js → react-story-board-DnBISTPF.js} +1 -1
- package/dist/assets/{react-three-rapier.esm-W_y4UeT-.js → react-three-rapier.esm-C7mV19Rd.js} +1 -1
- package/dist/assets/{react-world-authoring-adapter-Cey0R-Ml.js → react-world-authoring-adapter-COQGilV0.js} +1 -1
- package/dist/assets/{realm-services-Bw73w74M.js → realm-services-BVbgboYj.js} +1 -1
- package/dist/assets/{reflection-probe-capture.inspector-Dqj4TwMY.js → reflection-probe-capture.inspector-9PURKnEk.js} +1 -1
- package/dist/assets/{registry-DCdpQPdB.js → registry-BKnWLREo.js} +1 -1
- package/dist/assets/{relative-import-specifier-DjG-Lv03.js → relative-import-specifier-DSTZtgN9.js} +1 -1
- package/dist/assets/{render-env-D12b4e03.js → render-env-B-xiPHul.js} +1 -1
- package/dist/assets/{render-features-w9Z-Cv_p.js → render-features-D6cEaZG_.js} +1 -1
- package/dist/assets/{render-settings-CGDwkhhL.js → render-settings-7qvwHFf7.js} +1 -1
- package/dist/assets/{resolve-three-Bl4aEdGL.js → resolve-three-BD3-wAF-.js} +3 -3
- package/dist/assets/{root-seam-contract-Dx597Ute.js → root-seam-contract-Dc0xW5J5.js} +1 -1
- package/dist/assets/{run-selection-D-nxwjch.js → run-selection-_aAcIhA1.js} +1 -1
- package/dist/assets/{scene-capture-BYzNQlcZ.js → scene-capture-dVfR7MjE.js} +1 -1
- package/dist/assets/{scene-document.service-DvdbtjUB.js → scene-document.service-CnUCT9fC.js} +2 -2
- package/dist/assets/{scene-framing-zyo6Dgey.js → scene-framing-C7gr65sn.js} +1 -1
- package/dist/assets/{seeded-random-BcjdE8-O.js → seeded-random-C1JwJC9g.js} +1 -1
- package/dist/assets/{setup-renderer-BoEjWIJ6.js → setup-renderer-CRrjb8S9.js} +1 -1
- package/dist/assets/{source-object3d-authoring-adapter-D-mc1Hsq.js → source-object3d-authoring-adapter-CJ9_kgH4.js} +1 -1
- package/dist/assets/{source-persistence-backend-DPS956_W.js → source-persistence-backend-BdjiG8o9.js} +1 -1
- package/dist/assets/{stage-keyboard-DD-47U0X.js → stage-keyboard-CtMpQmTO.js} +1 -1
- package/dist/assets/{stage-overlay-set-jLin7LCZ.js → stage-overlay-set-CL7TBswp.js} +1 -1
- package/dist/assets/{stage-presence-markers-BzL60lxC.js → stage-presence-markers-Dkrf-OpF.js} +1 -1
- package/dist/assets/{stage-transform-tools-CXEtn6e_.js → stage-transform-tools-IQWWdhuo.js} +1 -1
- package/dist/assets/{standard-viewport-dressing-DzgsLMqH.js → standard-viewport-dressing-TKOcIR28.js} +1 -1
- package/dist/assets/{state-watch.action-C0r205X2.js → state-watch.action-Py4YF3Vd.js} +1 -1
- package/dist/assets/{state-watch.menu-CIOq9XcQ.js → state-watch.menu-D7XAVt6T.js} +1 -1
- package/dist/assets/{state-watch.utility-B5Mps4k8.js → state-watch.utility-CdT0mIIq.js} +1 -1
- package/dist/assets/{story-capture-BL_OEjAJ.js → story-capture-D_XIHNG7.js} +1 -1
- package/dist/assets/{story-documents-uyxMmUzs.js → story-documents-CRrYBLbv.js} +1 -1
- package/dist/assets/{story-documents.service-L9mW5dVf.js → story-documents.service-C-IYLdxc.js} +1 -1
- package/dist/assets/{story-documents.service-Cu17YnfS.js → story-documents.service-CCMjjodb.js} +1 -1
- package/dist/assets/{story-media-presence-CsYCXCgg.js → story-media-presence-Bw1o6E62.js} +1 -1
- package/dist/assets/{story-pixi-preview-BaS3gW36.js → story-pixi-preview-5WqHTgoT.js} +1 -1
- package/dist/assets/{story-presentation-Inb0tF8V.js → story-presentation-B4xwjorS.js} +1 -1
- package/dist/assets/{story-three-preview-N78COIhD.js → story-three-preview-CfJiHAyJ.js} +2 -2
- package/dist/assets/{studio-environment-BRMTYTp1.js → studio-environment-BTgaAUb4.js} +1 -1
- package/dist/assets/{surface-state-l4D0tVlT.js → surface-state-mdcl-Ho-.js} +1 -1
- package/dist/assets/{syntactic-prop-specs-DOQMV1SJ.js → syntactic-prop-specs-BcjoSr_8.js} +1 -1
- package/dist/assets/{team-playtest.service-CHIX8ZaT.js → team-playtest.service-gdwlVptm.js} +1 -1
- package/dist/assets/{three-DItubEyv.js → three-CnFqjv_X.js} +1 -1
- package/dist/assets/{three-authoring-adapter-jGnbMYIc.js → three-authoring-adapter-DwCMnivG.js} +1 -1
- package/dist/assets/three-authoring.service-D6PIh-T5.js +2 -0
- package/dist/assets/{three-ingest-runtime-DlApOywz.js → three-ingest-runtime-2OKIJvOp.js} +1 -1
- package/dist/assets/{three-integration-lFHyckTb.js → three-integration-Bc5bObpY.js} +2 -2
- package/dist/assets/three-integration.service-DKjGhYsk.js +1 -0
- package/dist/assets/{three-projection-core-Bsu421K7.js → three-projection-core-BH7eWjmL.js} +1 -1
- package/dist/assets/{three-state-15gXjQ51.js → three-state-Beoor2qe.js} +1 -1
- package/dist/assets/{three-story-capture.service-B369fV1j.js → three-story-capture.service-D_d_HJUY.js} +2 -2
- package/dist/assets/{three-story-model-D8xXaW4_.js → three-story-model-m26ngwoa.js} +1 -1
- package/dist/assets/{three-viewport-presentation-DlCyoe_E.js → three-viewport-presentation-Dv139ZhF.js} +1 -1
- package/dist/assets/{transform-mode-request-BT4Zmx_G.js → transform-mode-request-DP_ObjSV.js} +1 -1
- package/dist/assets/{transport-strip-DHbAk_5x.js → transport-strip-0nwKohqK.js} +1 -1
- package/dist/assets/transport.header-CbCAtj5s.js +1 -0
- package/dist/assets/{tuples-BcU64Mu6.js → tuples-DhXwxLo-.js} +1 -1
- package/dist/assets/{ui-board-document-CptsO8E6.js → ui-board-document-iOzWO-IY.js} +2 -2
- package/dist/assets/{user-data-DnahhlAD.js → user-data-W4XQSuJh.js} +1 -1
- package/dist/assets/{utility-view-state-GfzV3cfg.js → utility-view-state-VNkuk8W4.js} +1 -1
- package/dist/assets/{viewport-door-Dbl8EH3p.js → viewport-door-BAOv87Fs.js} +1 -1
- package/dist/assets/{viewport-root-presentation-CG43sAj5.js → viewport-root-presentation-Ba-vx6UG.js} +1 -1
- package/dist/assets/{viewport-surface-status-C9vuKKQB.js → viewport-surface-status-qvgNJYzx.js} +1 -1
- package/dist/assets/{webworkerAll-DE92JZIw.js → webworkerAll-CiO0kb-H.js} +1 -1
- package/dist/assets/{workspace-arrangement-COs530TA.js → workspace-arrangement-Dl7Q2V4T.js} +1 -1
- package/dist/assets/{world-documents-80AAIyS9.js → world-documents-DNFr2sNk.js} +1 -1
- package/dist/assets/{world-root-stage-binding-umHFwInD.js → world-root-stage-binding-DMyedsHY.js} +1 -1
- package/dist/assets/{xstate-animation-binding-_aMqz-nR.js → xstate-animation-binding-bEAsNebg.js} +1 -1
- package/dist/assets/{xstate-animation-meta-CzxfXjaY.js → xstate-animation-meta-NEG890lY.js} +1 -1
- package/dist-node/cli.js +16 -16
- package/package.json +16 -16
- package/dist/assets/InspectorObjectPreview-CO8cF8ht.js +0 -1
- package/dist/assets/Object3DDocumentViewport-CmgIuzQv.js +0 -2
- package/dist/assets/autoplay.service-CJv46a1s.js +0 -1
- package/dist/assets/instances.command-BTMfzHFj.js +0 -1
- package/dist/assets/network-observer.service-CBgzPOhw.js +0 -1
- package/dist/assets/three-authoring.service-UK1utJDS.js +0 -2
- package/dist/assets/three-integration.service-CvbLexeR.js +0 -1
- package/dist/assets/transport.header-D6MQXDZh.js +0 -1
|
@@ -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 Uo,b as Wo,L as Ho}from"./LineSegments2-DN9pUfWA.js";import{bh as ot,cl as qo,fo as x,cm as X,N as fn,a$ as bt,em as Jn,b4 as Te,co as Tt,ey as Pe,cp as bn,_ as ht,ej as Mt,fd as $t,er as Ae,M as it,cj as ut,dp as gt,aV as Se,cW as Go,aE as Xo,c7 as ft,j as Ee,f6 as Me,fp as to,au as Pn,dw as An,bi as no,aT as Ne,c1 as Lt,dd as Vn,eC as jn,e7 as gn,aw as nn,da as It,I as yn,as as Re,e8 as Ie,b0 as Yo,K as Fe,B as ze,b9 as De,Y as Zo,cw as ln,ed as Ce,cA as ke,fx as $e,db as Qo,el as Le,R as Ve,e6 as je,c0 as Ko,bX as Be,aI as uo,ao as Ue,eG as We,d3 as He,cs as qe,ex as Ge,b5 as Xe,cY as Ye,eU as Ze,cE as Bn,c5 as Jo,cO as oo,at as Qe,ff as Ke,eW as Je,f7 as ta,F as na,ev as oa,et as ea,dq as aa,fq as ra,n as la,l as ia,cf as sa}from"./three.core-3arARmh6.js";import{u as P,v as F,w as E,c5 as q,c4 as W,c6 as S,e2 as $,_ as fa,mB as te,d_ as jt,x as j,kE as _t,e1 as ne,mC as B,dZ as ca,mD as ua}from"./index-
|
|
2
|
+
import{a as Uo,b as Wo,L as Ho}from"./LineSegments2-DN9pUfWA.js";import{bh as ot,cl as qo,fo as x,cm as X,N as fn,a$ as bt,em as Jn,b4 as Te,co as Tt,ey as Pe,cp as bn,_ as ht,ej as Mt,fd as $t,er as Ae,M as it,cj as ut,dp as gt,aV as Se,cW as Go,aE as Xo,c7 as ft,j as Ee,f6 as Me,fp as to,au as Pn,dw as An,bi as no,aT as Ne,c1 as Lt,dd as Vn,eC as jn,e7 as gn,aw as nn,da as It,I as yn,as as Re,e8 as Ie,b0 as Yo,K as Fe,B as ze,b9 as De,Y as Zo,cw as ln,ed as Ce,cA as ke,fx as $e,db as Qo,el as Le,R as Ve,e6 as je,c0 as Ko,bX as Be,aI as uo,ao as Ue,eG as We,d3 as He,cs as qe,ex as Ge,b5 as Xe,cY as Ye,eU as Ze,cE as Bn,c5 as Jo,cO as oo,at as Qe,ff as Ke,eW as Je,f7 as ta,F as na,ev as oa,et as ea,dq as aa,fq as ra,n as la,l as ia,cf as sa}from"./three.core-3arARmh6.js";import{u as P,v as F,w as E,c5 as q,c4 as W,c6 as S,e2 as $,_ as fa,mB as te,d_ as jt,x as j,kE as _t,e1 as ne,mC as B,dZ as ca,mD as ua}from"./index-DyTgGJaV.js";import{S as Ft}from"./three.module-BLhyNg0e.js";import{t as _a}from"./blender-runtime-host-CbZll4j6.js";const Un=new Set;function vt(){for(const o of[...Un])o()}function ma(o){return Un.add(o),()=>{Un.delete(o)}}function Wn(o){const t=atob(o),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n}const Zt=S().finite(),da=P({name:E(),parent:E().nullable(),connected:q(),hide:q(),length:Zt,matrix:F($([Zt,Zt,Zt,Zt])).length(4),select:q(),active:q(),lockedWeight:q()}).strict(),ha=P({object:E(),displayType:W(["OCTAHEDRAL","STICK","BBONE","ENVELOPE","WIRE"]),showInFront:q(),mode:E(),bones:F(da)}).strict(),xt={solid:11711154,pose:5294335,poseActive:9240575,poseActiveUnsel:794150,wire:0,vertex:0,lockedWeight:16711680,lockedWeightFactor:128/255};function pa(o){return new ht(o.r*o.r*.1,o.g*o.g*.1,o.b*o.b*.1)}const Sn=[[0,0,0],[.1,.1,.1],[.1,.1,-.1],[-.1,.1,-.1],[-.1,.1,.1],[0,1,0]],_o=[[2,1,0],[3,2,0],[4,3,0],[1,4,0],[5,1,2],[5,2,3],[5,3,4],[5,4,1]],Pt=Math.SQRT1_2,va=[[Pt,-Pt,0],[0,-Pt,-Pt],[-Pt,-Pt,0],[0,-Pt,Pt],[.99388373,.11043154,0],[0,.11043154,-.99388373],[-.99388373,.11043154,0],[0,.11043154,.99388373]],ga=[[0,1],[1,5],[5,3],[3,0],[0,4],[4,5],[5,2],[2,0],[1,2],[2,3],[3,4],[4,1]],xa=.05;function mo(o){return o.select||o.active?2:1}const ba=10,ya=4,wa=`
|
|
3
3
|
attribute vec3 aSolid;
|
|
4
4
|
attribute vec3 aHint;
|
|
5
5
|
varying vec3 vColor;
|
|
@@ -7182,4 +7182,4 @@ vec3 volterWorkbenchLighting(vec3 baseColor, vec3 N, vec3 I) {
|
|
|
7182
7182
|
}
|
|
7183
7183
|
`,co=o=>ro.map(t=>{const[n=0,e=0,a=0]=o(t);return new x(n,e,a)}),Nl=co(o=>o.direction).map(o=>o.normalize()),Rl=co(o=>o.diffuse),Il=co(o=>o.specular),Fl=new to(...ro.map(o=>o.smooth));function zl(o,t){const[n,e,a]=o.color,r=new qe({side:t});return r.color.setRGB(n,e,a,ft),r.name="volter:blender-solid",r.onBeforeCompile=l=>{l.uniforms.wbDir={value:Nl},l.uniforms.wbDiffuse={value:Rl},l.uniforms.wbSpecular={value:Il},l.uniforms.wbWrap={value:Fl},l.uniforms.wbRoughness={value:o.roughness},l.uniforms.wbMetallic={value:o.metallic},l.fragmentShader=l.fragmentShader.replace("void main() {",`${Ml}
|
|
7184
7184
|
void main() {`).replace("#include <opaque_fragment>",`outgoingLight = volterWorkbenchLighting(diffuseColor.rgb, normal, isOrthographic ? vec3(0.0, 0.0, 1.0) : normalize(vViewPosition));
|
|
7185
|
-
#include <opaque_fragment>`)},r.customProgramCacheKey=()=>"volter-blender-workbench",r}const I=S().finite(),be=$([I,I,I]),vn=$([S().int().nonnegative(),S().int().nonnegative()]),lt={name:E(),domain:W(["POINT","EDGE","FACE","CORNER"])},Dl=ca("type",[P({...lt,type:j("FLOAT2"),data:F($([I,I]))}).strict(),P({...lt,type:j("FLOAT_VECTOR"),data:F(be)}).strict(),P({...lt,type:j("FLOAT_COLOR"),data:F($([I,I,I,I]))}).strict(),P({...lt,type:j("BYTE_COLOR"),data:F($([I,I,I,I]))}).strict(),P({...lt,type:j("QUATERNION"),data:F($([I,I,I,I]))}).strict(),P({...lt,type:j("FLOAT4"),data:F($([I,I,I,I]))}).strict(),P({...lt,type:j("FLOAT4X4"),data:F(F(I).length(16))}).strict(),P({...lt,type:j("INT16_2D"),data:F($([S().int(),S().int()]))}).strict(),P({...lt,type:j("INT32_2D"),data:F($([S().int(),S().int()]))}).strict(),P({...lt,type:j("FLOAT"),data:F(I)}).strict(),P({...lt,type:j("INT"),data:F(S().int())}).strict(),P({...lt,type:j("INT8"),data:F(S().int())}).strict(),P({...lt,type:j("BOOLEAN"),data:F(q())}).strict(),P({...lt,type:j("STRING"),data:F(E())}).strict()]),Cl=P({positions:B(Float32Array),normals:B(Float32Array).nullable(),uv:B(Float32Array).nullable(),uvLayers:F(P({name:E(),data:B(Float32Array)}).strict()).optional(),attributeLayers:F(P({name:E(),data:B(Float32Array)}).strict()).optional(),orco:B(Float32Array).nullable().optional(),indices:B(Uint32Array),groups:F(P({start:S().int().nonnegative(),count:S().int().nonnegative(),materialIndex:S().int().nonnegative()}).strict()),hash:E()}).strict(),kl=P({v:F(be),f:F(F(S().int().nonnegative())),e:F(vn).optional(),edge_order:F(vn).optional(),m:F(S().int().nonnegative()).optional(),s:F(q()).optional(),sharp:F(vn).optional(),seams:F(vn).optional(),creases:F($([I,I,I])).optional(),attributes:F(Dl).optional(),active_uv:E().nullable().optional(),render_uv:E().nullable().optional()}).strict(),$l=P({store:S().int().optional(),revision:S().int(),unchanged:j(!0)}).strict(),Ll=P({co:B(Float64Array),cornerNormal:B(Float32Array).optional(),orco:B(Float32Array).optional(),faceStart:B(Uint32Array),corner:B(Uint32Array),cornerEdge:B(Int32Array),edge:B(Uint32Array),edgeSharp:B(Uint8Array),edgeSeam:B(Uint8Array),edgeCrease:B(Float32Array),material:B(Uint32Array),smooth:B(Uint8Array),vertSelect:B(Uint8Array),vertHide:B(Uint8Array),edgeSelect:B(Uint8Array),edgeHide:B(Uint8Array),faceSelect:B(Uint8Array),faceHide:B(Uint8Array)}).strict(),Vl=P({name:E(),domain:W(["POINT","EDGE","FACE","CORNER"]),type:E(),data:ua(o=>ArrayBuffer.isView(o))}).strict(),jl=P({columns:Ll,attributes:F(Vl),activeUv:E().nullable(),renderUv:E().nullable(),counts:P({verts:S().int().nonnegative(),edges:S().int().nonnegative(),faces:S().int().nonnegative(),corners:S().int().nonnegative()}).strict(),revision:S().int().nonnegative()}).strict(),Bl=jt([Cl,jl,kl,$l]),jo=new Set;function Ul(o){const t=new Blob([o],{type:"image/png"}),n=new Je;let e=!1;n.addEventListener("dispose",()=>{e=!0,n.image?.close?.()});const a=createImageBitmap(t,{imageOrientation:"flipY",premultiplyAlpha:"none"}).then(r=>{if(e){r.close();return}n.image=r,n.needsUpdate=!0,vt()}).finally(()=>{jo.delete(a)});return jo.add(a),a.catch(()=>{}),{texture:n,ready:a}}function Wl(o,t,n,e){const a=new Pn(o,t,n,An,Ke);return a.flipY=!1,a.colorSpace=e==="data"?oo:Mt,a.needsUpdate=!0,a}function Hl(o,t,n){if(t.length===0)throw new Error(`Runtime image ${o} is tiled with no tiles`);const e=Math.max(...t.map(s=>s.width)),a=Math.max(...t.map(s=>s.height)),r=new Uint8Array(e*a*4*t.length),l=Math.max(...t.map(s=>s.number-1001))+1,c=new Float32Array(l*2*4);for(let s=0;s<l;s++)c[s*4]=-1;t.forEach((s,i)=>{const _=s.rgba??(s.rgbaBase64?Wn(s.rgbaBase64):void 0);if(!_)throw new Error(`Runtime image ${o} tile ${s.number} carries no raster`);for(let h=0;h<s.height;h++)r.set(_.subarray(h*s.width*4,(h+1)*s.width*4),(i*a+h)*e*4);const d=s.number-1001;c[d*4]=i,c.set([0,0,s.width/e,s.height/a],(l+d)*4)});const u=new Qe(r,e,a,t.length);u.colorSpace=n==="data"?oo:Mt,u.magFilter=Lt,u.minFilter=Jo,u.generateMipmaps=!0,u.needsUpdate=!0;const f=new Pn(c,l,2,An,Yo);return f.magFilter=f.minFilter=Bn,f.needsUpdate=!0,{tiles:u,map:f,frame:t}}const ql=P({width:S().int().positive(),height:S().int().positive(),revision:S().int().nonnegative(),rgba:B(Uint8Array).optional(),rgbaBase64:E().optional(),colorspace:W(["sRGB","data"]).optional(),tiles:F(P({number:S().int().min(1001),width:S().int().positive(),height:S().int().positive(),rgba:B(Uint8Array).optional(),rgbaBase64:E().optional()}).strict()).optional()}).strict(),Gl=P({revision:S().int().nonnegative(),png:B(Uint8Array).optional(),pngBase64:E().optional()}).strict(),Xl=jt([ql,Gl]),$n=P({image:P({name:E(),revision:S().int().nonnegative()}).strict(),extension:W(["REPEAT","EXTEND","MIRROR","CLIP"]).default("REPEAT"),uv:E(),tint:$([I,I,I]).optional()}).strict(),Yl=P({name:E(),color:$([I,I,I,I]),roughness:I,metallic:I,transmission:I,ior:I,physical:ol.optional(),normal_texture:$n.optional(),normal_strength:I.default(1),normal_space:W(["TANGENT","OBJECT"]).default("TANGENT"),normal_directx:q().default(!1),texture:$n.optional(),roughness_texture:$n.optional(),emission:P({color:$([I,I,I]),strength:I}).strict().optional(),graph:Nr.optional(),viewport:P({color:$([I,I,I,I]),roughness:I,metallic:I}).strict().optional()}).strict(),Zl=P({session:E(),revision:S().int().nonnegative(),volumes:_t(E(),me).default({}),lights:_t(E(),mr).default({}),world:yr.nullable().default(null),meshes:_t(E(),Bl),materials:_t(E(),Yl),images:_t(E(),Xl).default({}),objects:F(P({id:E(),name:E(),type:W(["MESH","CURVE","SURFACE","FONT","META","ARMATURE","LATTICE","VOLUME","EMPTY","CAMERA","LIGHT","SPEAKER","GREASEPENCIL","POINTCLOUD","LIGHT_PROBE"]),mesh:E().nullable(),volume:E().nullable().optional(),light:E().nullable().optional(),materials:F(E().nullable()),matrix:F($([I,I,I,I])).length(4),visible:q(),render_visible:q().default(!0),selected:q(),parent:E().nullable(),texspace:$([$([I,I,I]),$([I,I,I])]).optional(),default_color:E().optional()}).strict()),active:E().nullable(),mode:E(),cameras:_t(E(),_t(E(),ne())).default({}),warnings:F(E()).default([]),updated:F(E()).default([]),frame:S().int().default(0),armatures:_t(E(),ha).default({}),weights:sl.nullable().default(null),cursor:ml.optional(),camera_view:P({scene_camera:E().nullable(),view_layer_cameras:F(E()),aspect:S().finite().positive()}).optional(),light_distances:_t(E(),$([S().finite(),S().finite()])).default({}),empties:_t(E(),xl).default({}),view:P({location:$([S(),S(),S()]),rotation:$([S(),S(),S(),S()]),distance:S().finite(),perspective:W(["PERSP","ORTHO","CAMERA"]),lens:S().finite().positive().default(50)}).nullable().optional(),subject:P({frame:S().int(),body:E(),markers:F($([S().int(),E()]))}).optional(),units:P({system:W(["NONE","METRIC","IMPERIAL"]),scale_length:S().finite()}).optional()}).strict();function Ql(o,t){for(let n=0,e=o.length-1;n<o.length&&e>=0;n++,e--){if(o[n][0]===t)return o[n][1];if(n===e)break;if(o[e][0]===t)return o[e][1]}return null}const Kl={METRIC:[[1e-6,"Micrometers"],[.001,"Millimeters"],[.01,"Centimeters"],[.1,"10 Centimeters"],[1,"Meters"],[10,"10 Meters"],[100,"100 Meters"],[1e3,"Kilometers"]],IMPERIAL:[[254e-7,"Thou"],[.0254,"Inches"],[.3048,"Feet"],[.9144,"Yards"],[20.1168,"Chains"],[201.168,"Furlongs"],[1609.344,"Miles"]]};class Tn{constructor(){this.root=new ot,this.objects=new Map,this.meshes=new Map,this.volumes=new Map,this.materials=new Map,this.lights=new Map,this.lighting=new br,this.world=new lo,this.armatureOverlay=new Aa,this.weightOverlay=new _l,this.cursorOverlay=new gl,this.extrasOverlay=new wl,this.armatureRoot=new ot,this.weightRoot=new ot,this.cursorRoot=new ot,this.cameraExtrasRoot=new ot,this.lightExtrasRoot=new ot,this.emptyExtrasRoot=new ot,this.rendered=!1,this.heldRendered=null,this.worldApplied=null,this.worldKey="null",this.capturing=!1,this.workbench=!1,this.workbenchMaterials=new Map,this.fallback=new ln({color:12172998,roughness:.72}),this.textures=new Map,this.textureNames=new Map,this.roughnessTextureNames=new Map,this.textureSamplers=new nl,this.graphSamplers=new Map,this.photograph=!1,this.graphs=new Map,this.frame=null,this.retiredSessions=new Set,this.geometryBuilds=0,this.submittedMeshes=new Map,this.submitted=null,this.submittedSession=null,this.photographs=[],this.frameListeners=new Set,this.followers=new Set,this.cameraViewZoom=Pl,this.cameraViewPan=Al,this.mode=null,this.awaitedImages=new Set,this.lookingThrough=null,this.root.name="Model",this.root.matrixAutoUpdate=!1,this.root.matrix.set(1,0,0,0,0,0,1,0,0,-1,0,0,0,0,0,1),this.root.updateMatrixWorld(!0);for(const[t,n]of[[this.armatureRoot,this.armatureOverlay.group],[this.weightRoot,this.weightOverlay.group],[this.cursorRoot,this.cursorOverlay.group],[this.cameraExtrasRoot,this.extrasOverlay.cameras],[this.lightExtrasRoot,this.extrasOverlay.lights],[this.emptyExtrasRoot,this.extrasOverlay.empties]])t.matrixAutoUpdate=!1,t.matrix.copy(this.root.matrix),t.add(n),t.updateMatrixWorld(!0);this.armatureRoot.name="BlenderBones",this.weightRoot.name="BlenderWeights",this.cursorRoot.name="Blender3DCursor",this.cameraExtrasRoot.name="BlenderCameraExtras";for(const t of[this.cameraExtrasRoot,this.lightExtrasRoot,this.emptyExtrasRoot])t.userData.volterPickable=!0;this.lightExtrasRoot.name="BlenderLightExtras",this.emptyExtrasRoot.name="BlenderEmptyExtras"}compiledGraph(t){const n=JSON.stringify(t);let e=this.graphs.get(n);return e||(e=Wr(t),this.graphs.size>256&&this.graphs.clear(),this.graphs.set(n,e)),e}subscribeFrames(t){return this.frameListeners.add(t),()=>{this.frameListeners.delete(t)}}onChange(t){const n=this.subscribeFrames(t),e=ma(t);return()=>{n(),e()}}blenderObjectName(t){for(const[n,e]of this.objects)if(e===t)return this.frame?.objects.find(a=>a.id===n)?.name??null;return null}savedView(){const t=this.frame?.view;if(!t)return null;const[n,e,a,r]=t.rotation,l=new gt(e,a,r,n),c=new x(...t.location).applyMatrix4(this.root.matrix),u=f=>f.applyQuaternion(l).applyMatrix4(this.root.matrix).normalize();return{target:c.toArray(),direction:u(new x(0,0,1)).toArray(),up:u(new x(0,1,0)).toArray(),distance:t.distance,projection:t.perspective==="ORTHO"?"orthographic":"perspective",lens:t.lens}}cameraViewCamera(){const t=this.frame,n=t?.camera_view;return!t||!n?null:n.scene_camera!==null&&t.cameras[n.scene_camera]?n.scene_camera:t.active!==null&&t.cameras[t.active]?t.active:n.view_layer_cameras.find(e=>t.cameras[e])??null}blenderPose(t,n){const e=new X().copy(this.root.matrix).invert(),a=new X().compose(new x(...t),new gt(...n),new x(1,1,1)).premultiply(e),r=new x,l=new gt;return a.decompose(r,l,new x),{location:r.toArray(),rotation:[l.w,l.x,l.y,l.z]}}cameraView(t,n,e,a){const r=this.frame,l=Lo.safeParse(r?.cameras[t]);return!r?.camera_view||!l.success?null:Sl(l.data,this.root.matrix,n,e,a,r.camera_view.aspect)}subjectLine(t){const n=this.frame?.subject;if(n===void 0)return null;const e=t??n.frame,a=Ql(n.markers,e);return`(${e})${n.body}${a===null?"":` <${a}>`}`}gridUnitName(t){const n=this.frame?.units;if(n===void 0||n.system==="NONE")return null;const e=Kl[n.system],a=6*t,r=1/(n.scale_length||1);return(e.find(([c])=>c*r>a)??e[e.length-1])[1]}blenderSelection(){const t=this.frame;return t===null?{selected:[],active:null}:{selected:t.objects.filter(n=>n.selected).map(n=>n.name),active:t.active}}setStageMode(t){this.mode=t}stageMode(){return this.mode}objectForBlenderName(t){const n=this.frame?.objects.find(e=>e.name===t);return n===void 0?null:this.objects.get(n.id)??null}replacePresentedObject(t,n){for(const[e,a]of this.objects)if(a===t){const r=t.parent,l=[...t.children];t.removeFromParent();for(const c of l)n.add(c);r?.add(n),this.objects.set(e,n);return}}studioLights(){return this.lighting.group}overlayGroups(){return[{kind:"skeletons",object:this.armatureRoot},{kind:"weights",object:this.weightRoot},{kind:"cursor",object:this.cursorRoot},{kind:"cameras",object:this.cameraExtrasRoot},{kind:"lights",object:this.lightExtrasRoot},{kind:"empties",object:this.emptyExtrasRoot}]}placeCursor(t,n,e){const a=new Set(this.objects.values()),r=this.cursorOverlay.placementAt(t,n,e,this.root,l=>a.has(l));return r!==null&&(this.cursorOverlay.show(r),vt()),r}holdRendered(t){t!==this.heldRendered&&(this.heldRendered=t,!this.capturing&&this.report(t===null?this.applyRendered(!1):this.applyRendered(!0,t())))}refreshRendered(){if(this.heldRendered===null||this.capturing)return;const t=this.heldRendered();this.worldKeyFor(t)!==this.worldApplied&&this.report(this.applyRendered(!0,t))}worldKeyFor(t){const e=t.isOrthographicCamera?t.getWorldDirection(new x).toArray().map(a=>a.toFixed(1)).join(","):"";return`${t.uuid}:${e}:${this.worldKey}`}report(t){t.then(vt,n=>console.error(`Rendered shading could not be applied: ${n instanceof Error?n.message:String(n)}`))}setWorkbench(t){t!==this.workbench&&(this.workbench=t,this.applyWorkbench(),vt())}applyWorkbench(){const t=this.workbench&&!this.rendered,n=new Set;for(const e of this.frame?.objects??[]){if(e.mesh===null||e.volume)continue;const a=this.objects.get(e.id);if(!a?.isMesh)continue;const l=(e.materials.length?e.materials:[null]).map(c=>{const u=c===null?this.fallback:this.materials.get(c)??this.fallback;return t?this.workbenchFor(c,u.side,n):u});a.material=e.materials.length?l:l[0]}for(const[e,a]of this.workbenchMaterials)n.has(e)||(a.dispose(),this.workbenchMaterials.delete(e))}workbenchFor(t,n,e){const a=(t!==null?this.frame?.materials[t]?.viewport:void 0)??El,r=`${a.color.join(",")}|${a.roughness}|${a.metallic}|${n}`;e.add(r);let l=this.workbenchMaterials.get(r);return l||(l=zl(a,n),this.workbenchMaterials.set(r,l)),l}renderedHeld(){return this.heldRendered!==null}async setRendered(t,n){return this.capturing=t,!t&&this.heldRendered!==null?this.applyRendered(!0,this.heldRendered()):this.applyRendered(t,n)}async applyRendered(t,n){const e=(t?Do(this.frame?.world)?.extinction:null)??new x;for(const r of[...this.materials.values(),this.fallback])al(r,e);this.rendered=t,this.lighting.setRendered(t);const a=t&&n?this.worldKeyFor(n):null;t?(this.capturing||a!==this.worldApplied)&&this.world.apply(this.root,this.frame?.world??null,n):this.world.clear(),this.worldApplied=this.capturing?null:a,this.applyVisibility(),this.applyWorkbench(),this.applyShadows(t,n),t&&(await hr(),await Promise.all([...this.textures.values()].map(r=>r.ready)),await this.world.ready())}applyShadows(t,n){this.root.updateMatrixWorld(!0);const e=[];for(const u of this.objects.values()){const f=u;if(f.isMesh&&(f.castShadow=t,f.receiveShadow=t,t&&f.visible)){const s=new yn().setFromObject(f);s.isEmpty()||e.push(s)}}if(!t||!e.length)return;const r=e.reduce((u,f)=>u.union(f),new yn).getBoundingSphere(new Ge),l=n?new Xe().setFromProjectionMatrix(new X().multiplyMatrices(n.projectionMatrix,n.matrixWorldInverse)):null,c=l?e.flatMap(u=>Tr(u,l)):[];for(const u of this.lights.values())u.isDirectionalLight&&n?Pr(u,c,e):gr(u,r.center,r.radius)}applyOverlays(t){const n=l=>{const c=t.objects.find(u=>u.name===l);return c===void 0?null:new X().set(...c.matrix.flat())},e=[...this.armatureOverlay.apply(t.armatures,n)],a=t.weights?this.objects.get(t.objects.find(l=>l.name===t.weights?.object)?.id??""):void 0,r=this.weightOverlay.apply(t.weights,a??null,t.weights?n(t.weights.object):null);return r!==null&&e.push(r),this.cursorOverlay.apply(t.cursor),this.applyExtras(t),e}setCameraViewShowing(t){this.lookingThrough!==t&&(this.lookingThrough=t,this.frame&&this.applyExtras(this.frame),vt())}applyExtras(t){const n={};for(const[e,a]of Object.entries(t.cameras)){const r=Lo.safeParse(a);r.success&&(n[e]=r.data)}this.extrasOverlay.apply({lookingThrough:this.lookingThrough,lightDistances:t.light_distances,objects:t.objects.filter(e=>e.visible),active:t.active,cameras:n,lights:t.lights,empties:t.empties,sceneCamera:t.camera_view?.scene_camera??null,renderAspect:t.camera_view?.aspect??1,presented:e=>{const a=t.objects.find(r=>r.name===e);return a?this.objects.get(a.id)??null:null},image:e=>{const a=this.textures.get(e);if(!a)return null;const r=a.texture.image,l=a.width||r?.width||0,c=a.height||r?.height||0;return(l===0||c===0)&&a.ready&&!this.awaitedImages.has(e)&&(this.awaitedImages.add(e),a.ready.then(()=>{this.awaitedImages.delete(e),this.frame&&this.applyExtras(this.frame),vt()},()=>this.awaitedImages.delete(e))),{texture:a.texture,width:l,height:c}}})}applyVisibility(){for(const t of this.frame?.objects??[]){const n=this.objects.get(t.id);if(n&&(n.visible=this.rendered?t.render_visible:t.visible),!t.light)continue;const e=this.lights.get(t.light);e&&(e.visible=this.rendered&&t.render_visible)}this.armatureOverlay.group.visible=!this.capturing,this.weightOverlay.group.visible=!this.capturing,this.cursorOverlay.group.visible=!this.capturing;for(const t of[this.extrasOverlay.cameras,this.extrasOverlay.lights,this.extrasOverlay.empties])t.visible=!this.capturing}applyFrame(t){const n=this.frame===null?null:{session:this.frame.session,revision:this.frame.revision},e=Zl.parse(t);if(this.retiredSessions.has(e.session))throw new Error("The runtime session was replaced; its delayed frame cannot overwrite the active model");if(this.frame?.session===e.session&&e.revision<this.frame.revision)throw new Error("The runtime frame is older than the displayed model");const a=new Set(e.objects.map(f=>f.id));if(a.size!==e.objects.length)throw new Error("Runtime object IDs must be unique");const r=new Map(e.objects.map(f=>[f.id,f]));for(const f of e.objects){if(f.mesh!==null&&!e.meshes[f.mesh])throw new Error(`Missing runtime mesh ${f.mesh}`);if(f.volume&&(!e.volumes[f.volume]||f.mesh!==null))throw new Error(`Invalid runtime volume ${f.volume}`);if(f.light&&(!e.lights[f.light]||f.mesh!==null))throw new Error(`Invalid runtime light ${f.light}`);for(const _ of f.materials)if(_!==null&&!e.materials[_])throw new Error(`Missing runtime material ${_}`);const s=new Set([f.id]);let i=f.parent;for(;i!==null;){if(s.has(i))throw new Error("Runtime parent cycle");s.add(i);const _=r.get(i);if(!_)throw new Error(`Missing runtime parent ${i}`);i=_.parent}}const l=new Map,c=new Map;try{for(const[f,s]of Object.entries(e.volumes)){const i=JSON.stringify(s);this.frame?.session===e.session&&this.volumes.get(f)?.signature===i||c.set(f,{signature:i,mesh:Ar(s)})}for(const[f,s]of Object.entries(e.meshes)){if("unchanged"in s){if(this.frame?.session===e.session&&this.meshes.has(f))continue;throw new Error(`${Sa}: the presenter does not hold runtime mesh ${f} (store ${s.store}, revision ${s.revision})`)}const i="hash"in s,_="columns"in s,d=_?`revision:${s.revision}`:i?s.hash:JSON.stringify(s);this.frame?.session===e.session&&this.meshes.get(f)?.signature===d||l.set(f,{signature:d,geometry:_?Hn(La({...s.columns,attributes:s.attributes,activeUv:s.activeUv,renderUv:s.renderUv},d)):i?Hn(s):Va(s)})}}catch(f){for(const s of l.values())s.geometry.dispose();for(const{mesh:s}of c.values())s.geometry.dispose(),s.material.dispose();throw f}this.frame?.session!==e.session&&(this.frame&&this.retiredSessions.add(this.frame.session),this.clear());for(const[f,s]of c){const i=this.volumes.get(f)?.mesh;i&&(i.removeFromParent(),i.geometry.dispose(),i.material.dispose()),this.volumes.set(f,s)}for(const[f,s]of l)this.meshes.get(f)?.geometry.dispose(),this.meshes.set(f,s),this.geometryBuilds++;for(const[f,s]of Object.entries(e.images)){const i=this.textures.get(f);if("width"in s){const m=s.rgba??(s.rgbaBase64?Wn(s.rgbaBase64):void 0);if(!m)throw new Error(`Runtime image ${f} carries no raster`);const p=s.tiles?Hl(f,s.tiles,s.colorspace??"sRGB"):void 0;if(i?.udim&&(i.udim.tiles.dispose(),i.udim.map.dispose(),delete i.udim),i&&i.width===s.width&&i.height===s.height){const v=i.texture.image;if(v.data){v.data.set(m),i.texture.needsUpdate=!0,i.revision=s.revision,p&&(i.udim=p);continue}}i?.texture.dispose(),this.textures.set(f,{texture:Wl(m,s.width,s.height,s.colorspace??"sRGB"),width:s.width,height:s.height,revision:s.revision,...p?{udim:p}:{}});continue}const _=s.png??(s.pngBase64?Wn(s.pngBase64):void 0);if(!_)throw new Error(`Runtime image ${f} carries no bytes`);i?.texture.dispose(),i?.udim?.tiles.dispose(),i?.udim?.map.dispose();const{texture:d,ready:h}=Ul(_);d.colorSpace=Mt,this.textures.set(f,{texture:d,ready:h,width:0,height:0,revision:s.revision,png:_.slice()})}for(const[f,s]of Object.entries(e.materials)){const i=this.materials.get(f)??new ln;i.name=s.name;const _=s.texture?.tint;s.texture!==void 0?i.color.setRGB(_?.[0]??1,_?.[1]??1,_?.[2]??1,ft):i.color.setRGB(s.color[0],s.color[1],s.color[2],ft),i.opacity=s.color[3];const d=i.opacity<1||s.graph!==void 0&&Rr(s.graph);i.transparent!==d&&(i.transparent=d,i.needsUpdate=!0),i.roughness=s.roughness,i.metalness=s.metallic,i.transmission=s.transmission,i.ior=s.ior,so(i,s.physical,{map:s.texture?.extension==="CLIP",roughness:s.roughness_texture?.extension==="CLIP",normal:s.normal_texture?.extension==="CLIP"});const h=s.normal_texture?.image.name;if(h===void 0)i.normalMap&&(this.textureSamplers.delete(`${f}:normal`),i.normalMap=null,i.needsUpdate=!0);else{const b=this.textures.get(h);if(!b)throw new Error(`${Qt}: missing normal image ${h}`);const w=this.textureSamplers.get(`${f}:normal`,b.texture,s.normal_texture.extension,b.ready,s.normal_texture.uv);i.normalMap!==w&&(i.normalMap=w,i.needsUpdate=!0);const R=s.normal_space==="OBJECT"?Ye:Ze;i.normalMapType!==R&&(i.normalMapType=R,i.needsUpdate=!0),i.normalScale.set(s.normal_strength,s.normal_strength*(s.normal_directx?-1:1))}s.emission?(i.emissive.setRGB(s.emission.color[0],s.emission.color[1],s.emission.color[2],ft),i.emissiveIntensity=s.emission.strength):(i.emissive.setRGB(0,0,0),i.emissiveIntensity=1);const m=s.roughness_texture?.image.name??null;if(m===null)this.roughnessTextureNames.has(f)&&(this.textureSamplers.delete(`${f}:roughness`),i.roughnessMap=null,this.roughnessTextureNames.delete(f),i.needsUpdate=!0);else{const b=this.textures.get(m);if(!b)throw new Error(`${Qt}: the presenter does not hold runtime image ${m} (revision ${s.roughness_texture.image.revision})`);const w=this.textureSamplers.get(`${f}:roughness`,b.texture,s.roughness_texture.extension,b.ready,s.roughness_texture.uv);i.roughnessMap!==w&&(i.roughnessMap=w,this.roughnessTextureNames.set(f,m),i.needsUpdate=!0)}const p=s.texture?.image.name??null;if(p===null)this.textureNames.has(f)&&(this.textureSamplers.delete(`${f}:color`),i.map=null,this.textureNames.delete(f),i.needsUpdate=!0);else{const b=this.textures.get(p);if(!b)throw new Error(`${Qt}: the presenter does not hold runtime image ${p} (revision ${s.texture.image.revision})`);const w=this.textureSamplers.get(`${f}:color`,b.texture,s.texture.extension,b.ready,s.texture.uv);i.map!==w&&(i.map=w,this.textureNames.set(f,p),i.needsUpdate=!0)}const v=s.graph?this.compiledGraph(s.graph):null,g=new Set;qr(i,v,b=>{const w=this.textures.get(b.name);if(!w)throw new Error(`${Qt}: the presenter does not hold runtime image ${b.name} (revision ${b.revision})`);if(b.tiled){if(!w.udim)throw new Error(`${Qt}: runtime image ${b.name} arrived without its UDIM tiles`);return w.udim}const R=`${f}:graph:${b.node}`;g.add(R);const T=this.textureSamplers.get(R,w.texture,b.extension,w.ready),A=b.closest?Bn:Lt,O=b.closest?Bn:b.mipmap?Jo:Lt;return(T.magFilter!==A||T.minFilter!==O)&&(T.magFilter=A,T.minFilter=O,T.needsUpdate=!0),T},this.photograph);for(const b of this.graphSamplers.get(f)??[])g.has(b)||this.textureSamplers.delete(b);this.graphSamplers.set(f,g),this.materials.set(f,i)}for(const f of e.objects){let s=this.objects.get(f.id);const i=f.volume?this.volumes.get(f.volume).mesh:null;if((!s||(i?s!==i:!!s.isMesh!=(f.mesh!==null)))&&(s?.removeFromParent(),s=i??(f.mesh!==null?new Tt(this.meshes.get(f.mesh).geometry,this.fallback):new Go),this.objects.set(f.id,s)),s.name=f.name,f.type==="CAMERA"||f.type==="LIGHT"||f.type==="EMPTY"?s.userData.volterOwnOverlay=!0:delete s.userData.volterOwnOverlay,s.matrixAutoUpdate=!1,s.matrix.set(...f.matrix.flat()),f.parent){const _=new X().set(...r.get(f.parent).matrix.flat());s.matrix.premultiply(_.invert())}if(s.matrix.decompose(s.position,s.quaternion,s.scale),f.texspace?s.userData.blenderTexspace=f.texspace:delete s.userData.blenderTexspace,f.default_color!==void 0?s.userData.blenderDefaultColor=f.default_color:delete s.userData.blenderDefaultColor,f.mesh!==null){const _=s;_.geometry=this.meshes.get(f.mesh).geometry,_.material=f.materials.length?f.materials.map(d=>d===null?this.fallback:this.materials.get(d)):this.fallback,Zr(_)}if(f.light){const _=this.lights.get(f.light)??null,d=vr(e.lights[f.light],_);_&&_!==d&&(_.removeFromParent(),_.dispose()),d.parent!==s&&s.add(d),d.userData.volterOwnOverlay=!0,xr(d,s),this.lights.set(f.light,d)}}for(const f of e.objects){const s=this.objects.get(f.id),i=f.parent===null?this.root:this.objects.get(f.parent);s.parent!==i&&i.add(s)}for(const[f,s]of this.objects)a.has(f)||(s.removeFromParent(),this.objects.delete(f));for(const[f,s]of this.volumes)e.volumes[f]||(s.mesh.geometry.dispose(),s.mesh.material.dispose(),this.volumes.delete(f));for(const[f,s]of this.meshes)e.meshes[f]||(s.geometry.dispose(),this.meshes.delete(f));for(const[f,s]of this.materials)if(!e.materials[f]){for(const i of["normal","roughness","color"])this.textureSamplers.delete(`${f}:${i}`);for(const i of this.graphSamplers.get(f)??[])this.textureSamplers.delete(i);this.graphSamplers.delete(f),s.dispose(),this.materials.delete(f)}for(const[f,s]of this.lights)e.lights[f]||(s.removeFromParent(),s.dispose(),this.lights.delete(f));this.root.updateMatrixWorld(!0),this.frame={...e,meshes:{},volumes:{}},this.worldKey=JSON.stringify(e.world??null);const u=this.applyOverlays(e);u.length&&(this.frame={...this.frame,warnings:[...this.frame.warnings,...u]}),this.applyVisibility(),this.applyWorkbench(),this.heldRendered!==null&&!this.capturing&&this.report(this.applyRendered(!0,this.heldRendered()));for(const f of[...this.frameListeners])f();for(const f of this.followers)try{f.applyFrame(t)}catch{f.applyFrame(this.fullFrame())}return{...this.inspect(),held:n}}inspect(){return{session:this.frame?.session,revision:this.frame?.revision,active:this.frame?.active,mode:this.frame?.mode,geometryBuilds:this.geometryBuilds,objects:[...this.objects].map(([t,n])=>({id:t,name:n.name,uuid:n.uuid,geometry:n.geometry?.uuid,visible:n.visible}))}}snapshot(){return this.frame}fullFrame(){const t=this.frame;if(!t)throw new Error("Blender capture requires a presented frame");const n=structuredClone({...t,images:{},armatures:{},weights:null});for(const[a,{signature:r,geometry:l}]of this.meshes){const c=s=>{const i=l.getAttribute(s);if(!i)return null;if(!(i instanceof it))throw new Error(`Blender capture cannot copy interleaved ${s}`);return new Float32Array(i.array)},u=c("position");if(!u)throw new Error(`Blender capture mesh ${a} has no positions`);const f=l.getIndex();n.meshes[a]={hash:r,positions:u,normals:c("normal"),uv:c("uv"),uvLayers:Object.entries(l.userData.blenderUvChannels??{}).map(([s,i])=>{const _=c(`uv${i}`);if(!_)throw new Error(`Blender capture mesh ${a} is missing UV layer ${s}`);return{name:s,data:_}}),orco:l.userData.blenderOrcoFromDoor?c("blenderOrco"):null,attributeLayers:(l.userData.blenderAttributes??[]).map(s=>{const i=c(Vt(s));if(!i)throw new Error(`Blender capture mesh ${a} is missing attribute ${s}`);return{name:s,data:i}}),indices:f?new Uint32Array(f.array):Uint32Array.from({length:u.length/3},(s,i)=>i),groups:l.groups.map(s=>({start:s.start,count:s.count,materialIndex:s.materialIndex??0}))}}for(const[a,{signature:r}]of this.volumes)n.volumes[a]=me.parse(JSON.parse(r));const e=new Set(Object.values(n.materials).flatMap(a=>[a.texture?.image.name,a.roughness_texture?.image.name,a.normal_texture?.image.name,...Object.values(a.graph?.nodes??{}).map(r=>r.props.image?.name)].filter(r=>r!==void 0)));for(const a of e){const r=this.textures.get(a);if(!r)throw new Error(`Blender capture image ${a} is not resident`);if(r.png)n.images[a]={revision:r.revision,png:r.png.slice()};else{const l=r.texture.image?.data;if(!(l instanceof Uint8Array))throw new Error(`Blender capture image ${a} has no resident raster`);n.images[a]={revision:r.revision,width:r.width,height:r.height,rgba:l.slice(),colorspace:r.texture.colorSpace===oo?"data":"sRGB",...r.udim?{tiles:r.udim.frame}:{}}}}return n}follow(){const t=new Tn;this.frame&&t.applyFrame(this.fullFrame()),this.followers.add(t);let n=!1;return{view:t,dispose:()=>{n||(n=!0,this.followers.delete(t),t.dispose(),t.root.removeFromParent())}}}captureSnapshot(){const t=this.fullFrame(),n=this.frame,e=this.createWorldVolumePass(),a=new Tn;a.photograph=!0;let r=!1;const l=()=>{r||(r=!0,e?.dispose(),a.dispose(),a.root.removeFromParent())};try{a.applyFrame(t),this.root.updateWorldMatrix(!0,!1),a.root.matrix.copy(this.root.matrixWorld),a.root.updateMatrixWorld(!0)}catch(c){throw l(),c}return{effect:e,root:a.root,session:n.session,revision:n.revision,prepare:c=>{if(r)throw new Error("Blender capture snapshot is disposed");return a.setRendered(!0,c)},dispose:l}}createWorldVolumePass(){const t=Do(this.frame?.world);return t?new il(t):void 0}recordPresentation(t){if(typeof t!="object"||t===null)return;const n=t,e=n.meshes;if(typeof e!="object"||e===null)return;const a=typeof n.session=="string"?n.session:null;a!==this.submittedSession&&(this.submittedMeshes.clear(),this.photographs.length=0,this.submittedSession=a);const r=e;for(const[l,c]of Object.entries(r))typeof c=="object"&&c!==null&&!("unchanged"in c)&&this.submittedMeshes.set(l,c);for(const l of[...this.submittedMeshes.keys()])l in r||this.submittedMeshes.delete(l);this.submitted={...n,meshes:Object.fromEntries(this.submittedMeshes)}}recordPhotograph(t){this.photographs.push(t)}observations(){return{presentation:this.submitted,photographs:this.photographs}}clear(){for(const t of this.lights.values())t.removeFromParent(),t.dispose();this.lights.clear();for(const t of this.objects.values())t.removeFromParent();for(const t of this.meshes.values())t.geometry.dispose();for(const t of this.materials.values())t.dispose();for(const{mesh:t}of this.volumes.values())t.geometry.dispose(),t.material.dispose();for(const{texture:t,udim:n}of this.textures.values())t.dispose(),n?.tiles.dispose(),n?.map.dispose();this.textures.clear(),this.textureNames.clear(),this.roughnessTextureNames.clear(),this.textureSamplers.clear(),this.volumes.clear(),this.objects.clear(),this.meshes.clear(),this.materials.clear()}dispose(){this.clear(),this.fallback.dispose(),this.lighting.dispose(),this.world.dispose(),this.armatureOverlay.dispose(),this.weightOverlay.dispose(),this.cursorOverlay.dispose(),this.extrasOverlay.dispose();for(const t of this.workbenchMaterials.values())t.dispose();this.workbenchMaterials.clear(),this.frame=null,this.retiredSessions.clear(),this.submittedMeshes.clear(),this.submitted=null,this.submittedSession=null,this.photographs.length=0}}const ii=new Tn;function ye(o){const t=atob(o),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n}function Ln(o){const t=ye(o);return new Float32Array(t.buffer,t.byteOffset,t.byteLength>>2)}function Jl(o){const t=ye(o);return new Uint16Array(t.buffer,t.byteOffset,t.byteLength>>1)}function ti(o){return new X().set(...o.flat())}function Bo(o,t){return[o.object,o.mesh,o.armature,o.vertexCount,o.bones.length,t].join("|")}class ni{#n=new Map;#o=null;#a=null;#t=null;#i=null;#e=null;#l=null;#s=new Set;#u=0;#_=[];#r=0;get version(){return this.#u}get engineCalls(){return this.#r}subscribe(t){return this.#s.add(t),()=>this.#s.delete(t)}#f(){this.#u++;for(const t of[...this.#s])t()}state(){const t=this.#t,n=t?.frameStart??1,e=t?.frameEnd??250,a=t?.fps??24;return{frame:this.frame(),start:n,end:e,fps:a,action:t?.action??null,object:t?.object??null,armature:t?.armature??null,bones:[...this.#n.values()].reduce((r,l)=>r+l.bones.length,0),keyframes:t?.keyframes??[],summary:t?.summary??[],clipStart:t?.clipStart??null,clipEnd:t?.clipEnd??null,tracks:t?.tracks.length??0,bound:[...this.#n.keys()],warnings:this.#_,engineCalls:this.#r,blenderFrame:t?.frameCurrent??null}}playhead(){return this.#t?this.frame():null}frame(){const t=this.#t;return!t||!this.#a||t.clipStart===void 0?t?.frameCurrent??1:this.#i!==null?this.#i:t.clipStart+this.#a.time*t.fps}get playable(){return this.#a!==null}async bind(t,n){this.#r++;const e=await n.rig();if(!e)return;const a=[],r=new Set;let l=!1;for(const i of e.rigs){if(!i.object||!i.armature||!i.skinIndexBase64||!i.skinWeightBase64){i.reason&&a.push(i.reason);continue}r.add(i.object);const _=Bo(i,e.frame);if(this.#n.get(i.object)?.signature===_)continue;const d=this.#d(t,i,e.frame,a);d&&(this.#n.get(i.object)?.skeleton.dispose(),this.#n.set(i.object,d),l=!0)}for(const[i,_]of[...this.#n])r.has(i)||(_.skeleton.dispose(),_.boneRoot.removeFromParent(),this.#n.delete(i),l=!0);this.#r++;const c=await n.clip(),u=this.#t,f=c?.action!==u?.action||c?.tracks.length!==u?.tracks.length||c?.clipStart!==u?.clipStart||c?.clipEnd!==u?.clipEnd;this.#t=c??null,c?.reason&&a.push(c.reason),c&&(f||l)&&this.#h(t,c,a);const s=this.#e?.snapshot().playbackState==="playing";c&&!s&&u?.frameCurrent!==c.frameCurrent&&(this.#c(c.frameCurrent),this.#e&&c.fps>0&&this.#e.seek(c.frameCurrent/c.fps)),this.#_=a,this.#f()}#d(t,n,e,a){const r=t.objectForBlenderName(n.object??""),l=t.objectForBlenderName(n.armature??"");if(!r||!l)return null;const c=r,u=c.geometry;if(!u)return null;const f=u.getAttribute("blenderVertex");if(!f)return a.push(`"${n.object}" cannot be skinned: its presented geometry carries no \`blenderVertex\` attribute, so a per-Blender-vertex weight cannot be expanded onto its drawn vertices.`),null;if(n.vertexCount===0)return null;let s=0;for(let T=0;T<f.count;T++)s=Math.max(s,f.getX(T));if(s>=n.vertexCount)return a.push(`"${n.object}" is not skinned here: its presented geometry references Blender vertex ${s} while the mesh declares ${n.vertexCount}, which is a generative modifier (Subdivision, Mirror, Array…) between the two. Blender's own viewport shows the evaluated result; this presenter shows the exported columns unskinned.`),null;const i=Jl(n.skinIndexBase64??""),_=Ln(n.skinWeightBase64??""),d=f.count,h=new Uint16Array(d*4),m=new Float32Array(d*4);for(let T=0;T<d;T++){const A=f.getX(T);for(let O=0;O<4;O++)h[T*4+O]=i[A*4+O]??0,m[T*4+O]=_[A*4+O]??0}u.setAttribute("skinIndex",new ta(h,4)),u.setAttribute("skinWeight",new bt(m,4));const p=new ot;p.name=`${n.armature}:bones`;const v=[],g=n.bones.map(T=>ti(T.pose)),b=new Map(n.bones.map((T,A)=>[T.name,A]));n.bones.forEach((T,A)=>{const O=new na;O.name=T.name,v.push(O);const M=T.parent===null?void 0:b.get(T.parent);(M===void 0?g[A].clone():g[M].clone().invert().multiply(g[A])).decompose(O.position,O.quaternion,O.scale),(M===void 0?p:v[M]).add(O)}),l.add(p);const w=new oa(u,c.material);w.name=c.name,w.matrixAutoUpdate=!1,w.matrix.copy(c.matrix),w.matrix.decompose(w.position,w.quaternion,w.scale),w.userData=c.userData,w.frustumCulled=!1,t.replacePresentedObject(c,w),t.root.updateMatrixWorld(!0);const R=new ea(v);return w.bind(R,w.matrixWorld.clone()),n.constrainedBones?.length&&a.push(`Bone constraints on ${n.constrainedBones.join(", ")}: the clip is derived from the F-Curves alone, so those bones play their channels rather than Blender's solved pose.`),n.unmappedGroups?.length&&a.push(`${n.object} carries vertex groups no bone is named for (${n.unmappedGroups.join(", ")}); they weight nothing here, exactly as they deform nothing in Blender.`),{object:n.object??"",armature:n.armature??"",mesh:w,boneRoot:p,bones:v,skeleton:R,frame:e,signature:Bo(n,e)}}#h(t,n,e){if(this.#o?.stopAllAction(),this.#o=null,this.#a=null,!n.tracks.length||n.clipStart===void 0||n.clipEnd===void 0)return;const a=n.armature?t.objectForBlenderName(n.armature):null;if(!a)return;const r=new Map;for(const i of this.#n.values())if(i.armature===n.armature)for(const _ of i.bones)r.set(_.name,_);const l=[],c=new Set;for(const i of n.tracks){const _=r.get(i.bone);if(!_){c.add(i.bone);continue}const d=Ln(i.timeBase64),h=Ln(i.valueBase64),m=`${_.uuid}.${i.property}`;l.push(i.property==="quaternion"?new aa(m,Array.from(d),Array.from(h)):new ra(m,Array.from(d),Array.from(h)))}if(c.size&&e.push(`${n.action} animates ${[...c].join(", ")}, which this binding has no bone for.`),!l.length)return;const u=n.duration??(n.clipEnd-n.clipStart)/n.fps,f=new la(a),s=f.clipAction(new ia(n.action??"action",u,l));s.setLoop(sa,Number.POSITIVE_INFINITY),s.play(),this.#o=f,this.#a=s,this.#c(n.frameCurrent),this.#m()}#c(t){const n=this.#t;if(!n||!this.#o||n.clipStart===void 0||n.clipEnd===void 0)return;const e=Math.min(n.clipEnd,Math.max(n.clipStart,t));this.#i=e;const a=(n.clipEnd-n.clipStart)/n.fps;this.#o.setTime(Math.min(a-1e-4,(e-n.clipStart)/n.fps)),this.#m()}#m(){for(const t of this.#n.values())t.boneRoot.updateMatrixWorld(!0),t.skeleton.update()}get scene(){return this.#t?.scene??null}async writeBookmark(){const t=Math.round(this.frame()),n=this.#t;if(!n)return t;const e=n.scene;return!e||n.frameCurrent===t||(this.#r++,await _a(`bpy.data.scenes[${JSON.stringify(e)}]`,"frame_current",t,void 0,!1),this.#t={...n,frameCurrent:t},this.#f()),t}get transport(){return this.#e}attachTo(t){this.#l?.(),this.#e=t;const n=t.attach({id:this.#t?.action??"blender-action",label:this.#t?.action??"Action",range:()=>{const l=this.#t,c=l?.fps||24;return{start:(l?.frameStart??1)/c,end:(l?.frameEnd??250)/c,fps:c}},seek:l=>this.seekSeconds(l)}),e=t.onSettled(()=>{this.writeBookmark()}),a=()=>{e(),n(),this.#e===t&&(this.#e=null),this.#l=null};this.#l=a;const r=this.#t;return r&&r.fps>0&&t.seek(r.frameCurrent/r.fps),a}seekSeconds(t){const n=this.#t?.fps||24;this.#c(Math.round(t*n)),this.#f()}keyframes(){return(this.#t?.keyframes??[]).map(t=>t.frame)}dispose(){this.#l?.(),this.#o?.stopAllAction(),this.#o=null,this.#a=null;for(const t of this.#n.values())t.skeleton.dispose(),t.boneRoot.removeFromParent();this.#n.clear()}}const we=new ni;function si(o){return we.subscribe(o)}function fi(){return we.version}export{we as a,fi as b,ii as c,si as s};
|
|
7185
|
+
#include <opaque_fragment>`)},r.customProgramCacheKey=()=>"volter-blender-workbench",r}const I=S().finite(),be=$([I,I,I]),vn=$([S().int().nonnegative(),S().int().nonnegative()]),lt={name:E(),domain:W(["POINT","EDGE","FACE","CORNER"])},Dl=ca("type",[P({...lt,type:j("FLOAT2"),data:F($([I,I]))}).strict(),P({...lt,type:j("FLOAT_VECTOR"),data:F(be)}).strict(),P({...lt,type:j("FLOAT_COLOR"),data:F($([I,I,I,I]))}).strict(),P({...lt,type:j("BYTE_COLOR"),data:F($([I,I,I,I]))}).strict(),P({...lt,type:j("QUATERNION"),data:F($([I,I,I,I]))}).strict(),P({...lt,type:j("FLOAT4"),data:F($([I,I,I,I]))}).strict(),P({...lt,type:j("FLOAT4X4"),data:F(F(I).length(16))}).strict(),P({...lt,type:j("INT16_2D"),data:F($([S().int(),S().int()]))}).strict(),P({...lt,type:j("INT32_2D"),data:F($([S().int(),S().int()]))}).strict(),P({...lt,type:j("FLOAT"),data:F(I)}).strict(),P({...lt,type:j("INT"),data:F(S().int())}).strict(),P({...lt,type:j("INT8"),data:F(S().int())}).strict(),P({...lt,type:j("BOOLEAN"),data:F(q())}).strict(),P({...lt,type:j("STRING"),data:F(E())}).strict()]),Cl=P({positions:B(Float32Array),normals:B(Float32Array).nullable(),uv:B(Float32Array).nullable(),uvLayers:F(P({name:E(),data:B(Float32Array)}).strict()).optional(),attributeLayers:F(P({name:E(),data:B(Float32Array)}).strict()).optional(),orco:B(Float32Array).nullable().optional(),indices:B(Uint32Array),groups:F(P({start:S().int().nonnegative(),count:S().int().nonnegative(),materialIndex:S().int().nonnegative()}).strict()),hash:E()}).strict(),kl=P({v:F(be),f:F(F(S().int().nonnegative())),e:F(vn).optional(),edge_order:F(vn).optional(),m:F(S().int().nonnegative()).optional(),s:F(q()).optional(),sharp:F(vn).optional(),seams:F(vn).optional(),creases:F($([I,I,I])).optional(),attributes:F(Dl).optional(),active_uv:E().nullable().optional(),render_uv:E().nullable().optional()}).strict(),$l=P({store:S().int().optional(),revision:S().int(),unchanged:j(!0)}).strict(),Ll=P({co:B(Float64Array),cornerNormal:B(Float32Array).optional(),orco:B(Float32Array).optional(),faceStart:B(Uint32Array),corner:B(Uint32Array),cornerEdge:B(Int32Array),edge:B(Uint32Array),edgeSharp:B(Uint8Array),edgeSeam:B(Uint8Array),edgeCrease:B(Float32Array),material:B(Uint32Array),smooth:B(Uint8Array),vertSelect:B(Uint8Array),vertHide:B(Uint8Array),edgeSelect:B(Uint8Array),edgeHide:B(Uint8Array),faceSelect:B(Uint8Array),faceHide:B(Uint8Array)}).strict(),Vl=P({name:E(),domain:W(["POINT","EDGE","FACE","CORNER"]),type:E(),data:ua(o=>ArrayBuffer.isView(o))}).strict(),jl=P({columns:Ll,attributes:F(Vl),activeUv:E().nullable(),renderUv:E().nullable(),counts:P({verts:S().int().nonnegative(),edges:S().int().nonnegative(),faces:S().int().nonnegative(),corners:S().int().nonnegative()}).strict(),revision:S().int().nonnegative()}).strict(),Bl=jt([Cl,jl,kl,$l]),jo=new Set;function Ul(o){const t=new Blob([o],{type:"image/png"}),n=new Je;let e=!1;n.addEventListener("dispose",()=>{e=!0,n.image?.close?.()});const a=createImageBitmap(t,{imageOrientation:"flipY",premultiplyAlpha:"none"}).then(r=>{if(e){r.close();return}n.image=r,n.needsUpdate=!0,vt()}).finally(()=>{jo.delete(a)});return jo.add(a),a.catch(()=>{}),{texture:n,ready:a}}function Wl(o,t,n,e){const a=new Pn(o,t,n,An,Ke);return a.flipY=!1,a.colorSpace=e==="data"?oo:Mt,a.needsUpdate=!0,a}function Hl(o,t,n){if(t.length===0)throw new Error(`Runtime image ${o} is tiled with no tiles`);const e=Math.max(...t.map(s=>s.width)),a=Math.max(...t.map(s=>s.height)),r=new Uint8Array(e*a*4*t.length),l=Math.max(...t.map(s=>s.number-1001))+1,c=new Float32Array(l*2*4);for(let s=0;s<l;s++)c[s*4]=-1;t.forEach((s,i)=>{const _=s.rgba??(s.rgbaBase64?Wn(s.rgbaBase64):void 0);if(!_)throw new Error(`Runtime image ${o} tile ${s.number} carries no raster`);for(let h=0;h<s.height;h++)r.set(_.subarray(h*s.width*4,(h+1)*s.width*4),(i*a+h)*e*4);const d=s.number-1001;c[d*4]=i,c.set([0,0,s.width/e,s.height/a],(l+d)*4)});const u=new Qe(r,e,a,t.length);u.colorSpace=n==="data"?oo:Mt,u.magFilter=Lt,u.minFilter=Jo,u.generateMipmaps=!0,u.needsUpdate=!0;const f=new Pn(c,l,2,An,Yo);return f.magFilter=f.minFilter=Bn,f.needsUpdate=!0,{tiles:u,map:f,frame:t}}const ql=P({width:S().int().positive(),height:S().int().positive(),revision:S().int().nonnegative(),rgba:B(Uint8Array).optional(),rgbaBase64:E().optional(),colorspace:W(["sRGB","data"]).optional(),tiles:F(P({number:S().int().min(1001),width:S().int().positive(),height:S().int().positive(),rgba:B(Uint8Array).optional(),rgbaBase64:E().optional()}).strict()).optional()}).strict(),Gl=P({revision:S().int().nonnegative(),png:B(Uint8Array).optional(),pngBase64:E().optional()}).strict(),Xl=jt([ql,Gl]),$n=P({image:P({name:E(),revision:S().int().nonnegative()}).strict(),extension:W(["REPEAT","EXTEND","MIRROR","CLIP"]).default("REPEAT"),uv:E(),tint:$([I,I,I]).optional()}).strict(),Yl=P({name:E(),color:$([I,I,I,I]),roughness:I,metallic:I,transmission:I,ior:I,physical:ol.optional(),normal_texture:$n.optional(),normal_strength:I.default(1),normal_space:W(["TANGENT","OBJECT"]).default("TANGENT"),normal_directx:q().default(!1),texture:$n.optional(),roughness_texture:$n.optional(),emission:P({color:$([I,I,I]),strength:I}).strict().optional(),graph:Nr.optional(),viewport:P({color:$([I,I,I,I]),roughness:I,metallic:I}).strict().optional()}).strict(),Zl=P({session:E(),revision:S().int().nonnegative(),volumes:_t(E(),me).default({}),lights:_t(E(),mr).default({}),world:yr.nullable().default(null),meshes:_t(E(),Bl),materials:_t(E(),Yl),images:_t(E(),Xl).default({}),objects:F(P({id:E(),name:E(),type:W(["MESH","CURVE","SURFACE","FONT","META","ARMATURE","LATTICE","VOLUME","EMPTY","CAMERA","LIGHT","SPEAKER","GREASEPENCIL","POINTCLOUD","LIGHT_PROBE"]),mesh:E().nullable(),volume:E().nullable().optional(),light:E().nullable().optional(),materials:F(E().nullable()),matrix:F($([I,I,I,I])).length(4),visible:q(),render_visible:q().default(!0),selected:q(),parent:E().nullable(),texspace:$([$([I,I,I]),$([I,I,I])]).optional(),default_color:E().optional()}).strict()),active:E().nullable(),mode:E(),cameras:_t(E(),_t(E(),ne())).default({}),warnings:F(E()).default([]),updated:F(E()).default([]),frame:S().int().default(0),armatures:_t(E(),ha).default({}),weights:sl.nullable().default(null),cursor:ml.optional(),camera_view:P({scene_camera:E().nullable(),view_layer_cameras:F(E()),aspect:S().finite().positive()}).optional(),light_distances:_t(E(),$([S().finite(),S().finite()])).default({}),empties:_t(E(),xl).default({}),view:P({location:$([S(),S(),S()]),rotation:$([S(),S(),S(),S()]),distance:S().finite(),perspective:W(["PERSP","ORTHO","CAMERA"]),lens:S().finite().positive().default(50)}).nullable().optional(),subject:P({frame:S().int(),body:E(),markers:F($([S().int(),E()]))}).optional(),units:P({system:W(["NONE","METRIC","IMPERIAL"]),scale_length:S().finite()}).optional()}).strict();function Ql(o,t){for(let n=0,e=o.length-1;n<o.length&&e>=0;n++,e--){if(o[n][0]===t)return o[n][1];if(n===e)break;if(o[e][0]===t)return o[e][1]}return null}const Kl={METRIC:[[1e-6,"Micrometers"],[.001,"Millimeters"],[.01,"Centimeters"],[.1,"10 Centimeters"],[1,"Meters"],[10,"10 Meters"],[100,"100 Meters"],[1e3,"Kilometers"]],IMPERIAL:[[254e-7,"Thou"],[.0254,"Inches"],[.3048,"Feet"],[.9144,"Yards"],[20.1168,"Chains"],[201.168,"Furlongs"],[1609.344,"Miles"]]};class Tn{constructor(){this.root=new ot,this.objects=new Map,this.meshes=new Map,this.volumes=new Map,this.materials=new Map,this.lights=new Map,this.lighting=new br,this.world=new lo,this.armatureOverlay=new Aa,this.weightOverlay=new _l,this.cursorOverlay=new gl,this.extrasOverlay=new wl,this.armatureRoot=new ot,this.weightRoot=new ot,this.cursorRoot=new ot,this.cameraExtrasRoot=new ot,this.lightExtrasRoot=new ot,this.emptyExtrasRoot=new ot,this.rendered=!1,this.heldRendered=null,this.worldApplied=null,this.worldKey="null",this.capturing=!1,this.workbench=!1,this.workbenchMaterials=new Map,this.fallback=new ln({color:12172998,roughness:.72}),this.textures=new Map,this.textureNames=new Map,this.roughnessTextureNames=new Map,this.textureSamplers=new nl,this.graphSamplers=new Map,this.photograph=!1,this.graphs=new Map,this.frame=null,this.retiredSessions=new Set,this.geometryBuilds=0,this.submittedMeshes=new Map,this.submitted=null,this.submittedSession=null,this.photographs=[],this.frameListeners=new Set,this.followers=new Set,this.leader=null,this.cameraViewZoom=Pl,this.cameraViewPan=Al,this.mode=null,this.awaitedImages=new Set,this.lookingThrough=null,this.root.name="Model",this.root.matrixAutoUpdate=!1,this.root.matrix.set(1,0,0,0,0,0,1,0,0,-1,0,0,0,0,0,1),this.root.updateMatrixWorld(!0);for(const[t,n]of[[this.armatureRoot,this.armatureOverlay.group],[this.weightRoot,this.weightOverlay.group],[this.cursorRoot,this.cursorOverlay.group],[this.cameraExtrasRoot,this.extrasOverlay.cameras],[this.lightExtrasRoot,this.extrasOverlay.lights],[this.emptyExtrasRoot,this.extrasOverlay.empties]])t.matrixAutoUpdate=!1,t.matrix.copy(this.root.matrix),t.add(n),t.updateMatrixWorld(!0);this.armatureRoot.name="BlenderBones",this.weightRoot.name="BlenderWeights",this.cursorRoot.name="Blender3DCursor",this.cameraExtrasRoot.name="BlenderCameraExtras";for(const t of[this.cameraExtrasRoot,this.lightExtrasRoot,this.emptyExtrasRoot])t.userData.volterPickable=!0;this.lightExtrasRoot.name="BlenderLightExtras",this.emptyExtrasRoot.name="BlenderEmptyExtras"}compiledGraph(t){const n=JSON.stringify(t);let e=this.graphs.get(n);return e||(e=Wr(t),this.graphs.size>256&&this.graphs.clear(),this.graphs.set(n,e)),e}mirrorPose(t){let n=null;for(const[r,l]of this.objects)if(l===t){n=r;break}if(n===null)return;const e=this.leader?[this.leader,...this.leader.followers]:[...this.followers];let a=!1;for(const r of e){if(r===this)continue;const l=r.objects.get(n);l!==void 0&&(l.matrix.copy(t.matrix),l.matrix.decompose(l.position,l.quaternion,l.scale),l.updateMatrixWorld(!0),a=!0)}a&&vt()}subscribeFrames(t){return this.frameListeners.add(t),()=>{this.frameListeners.delete(t)}}onChange(t){const n=this.subscribeFrames(t),e=ma(t);return()=>{n(),e()}}blenderObjectName(t){for(const[n,e]of this.objects)if(e===t)return this.frame?.objects.find(a=>a.id===n)?.name??null;return null}savedView(){const t=this.frame?.view;if(!t)return null;const[n,e,a,r]=t.rotation,l=new gt(e,a,r,n),c=new x(...t.location).applyMatrix4(this.root.matrix),u=f=>f.applyQuaternion(l).applyMatrix4(this.root.matrix).normalize();return{target:c.toArray(),direction:u(new x(0,0,1)).toArray(),up:u(new x(0,1,0)).toArray(),distance:t.distance,projection:t.perspective==="ORTHO"?"orthographic":"perspective",lens:t.lens}}cameraViewCamera(){const t=this.frame,n=t?.camera_view;return!t||!n?null:n.scene_camera!==null&&t.cameras[n.scene_camera]?n.scene_camera:t.active!==null&&t.cameras[t.active]?t.active:n.view_layer_cameras.find(e=>t.cameras[e])??null}blenderPose(t,n){const e=new X().copy(this.root.matrix).invert(),a=new X().compose(new x(...t),new gt(...n),new x(1,1,1)).premultiply(e),r=new x,l=new gt;return a.decompose(r,l,new x),{location:r.toArray(),rotation:[l.w,l.x,l.y,l.z]}}cameraView(t,n,e,a){const r=this.frame,l=Lo.safeParse(r?.cameras[t]);return!r?.camera_view||!l.success?null:Sl(l.data,this.root.matrix,n,e,a,r.camera_view.aspect)}subjectLine(t){const n=this.frame?.subject;if(n===void 0)return null;const e=t??n.frame,a=Ql(n.markers,e);return`(${e})${n.body}${a===null?"":` <${a}>`}`}gridUnitName(t){const n=this.frame?.units;if(n===void 0||n.system==="NONE")return null;const e=Kl[n.system],a=6*t,r=1/(n.scale_length||1);return(e.find(([c])=>c*r>a)??e[e.length-1])[1]}blenderSelection(){const t=this.frame;return t===null?{selected:[],active:null}:{selected:t.objects.filter(n=>n.selected).map(n=>n.name),active:t.active}}setStageMode(t){this.mode=t}stageMode(){return this.mode}objectForBlenderName(t){const n=this.frame?.objects.find(e=>e.name===t);return n===void 0?null:this.objects.get(n.id)??null}replacePresentedObject(t,n){for(const[e,a]of this.objects)if(a===t){const r=t.parent,l=[...t.children];t.removeFromParent();for(const c of l)n.add(c);r?.add(n),this.objects.set(e,n);return}}studioLights(){return this.lighting.group}overlayGroups(){return[{kind:"skeletons",object:this.armatureRoot},{kind:"weights",object:this.weightRoot},{kind:"cursor",object:this.cursorRoot},{kind:"cameras",object:this.cameraExtrasRoot},{kind:"lights",object:this.lightExtrasRoot},{kind:"empties",object:this.emptyExtrasRoot}]}placeCursor(t,n,e){const a=new Set(this.objects.values()),r=this.cursorOverlay.placementAt(t,n,e,this.root,l=>a.has(l));return r!==null&&(this.cursorOverlay.show(r),vt()),r}holdRendered(t){t!==this.heldRendered&&(this.heldRendered=t,!this.capturing&&this.report(t===null?this.applyRendered(!1):this.applyRendered(!0,t())))}refreshRendered(){if(this.heldRendered===null||this.capturing)return;const t=this.heldRendered();this.worldKeyFor(t)!==this.worldApplied&&this.report(this.applyRendered(!0,t))}worldKeyFor(t){const e=t.isOrthographicCamera?t.getWorldDirection(new x).toArray().map(a=>a.toFixed(1)).join(","):"";return`${t.uuid}:${e}:${this.worldKey}`}report(t){t.then(vt,n=>console.error(`Rendered shading could not be applied: ${n instanceof Error?n.message:String(n)}`))}setWorkbench(t){t!==this.workbench&&(this.workbench=t,this.applyWorkbench(),vt())}applyWorkbench(){const t=this.workbench&&!this.rendered,n=new Set;for(const e of this.frame?.objects??[]){if(e.mesh===null||e.volume)continue;const a=this.objects.get(e.id);if(!a?.isMesh)continue;const l=(e.materials.length?e.materials:[null]).map(c=>{const u=c===null?this.fallback:this.materials.get(c)??this.fallback;return t?this.workbenchFor(c,u.side,n):u});a.material=e.materials.length?l:l[0]}for(const[e,a]of this.workbenchMaterials)n.has(e)||(a.dispose(),this.workbenchMaterials.delete(e))}workbenchFor(t,n,e){const a=(t!==null?this.frame?.materials[t]?.viewport:void 0)??El,r=`${a.color.join(",")}|${a.roughness}|${a.metallic}|${n}`;e.add(r);let l=this.workbenchMaterials.get(r);return l||(l=zl(a,n),this.workbenchMaterials.set(r,l)),l}renderedHeld(){return this.heldRendered!==null}async setRendered(t,n){return this.capturing=t,!t&&this.heldRendered!==null?this.applyRendered(!0,this.heldRendered()):this.applyRendered(t,n)}async applyRendered(t,n){const e=(t?Do(this.frame?.world)?.extinction:null)??new x;for(const r of[...this.materials.values(),this.fallback])al(r,e);this.rendered=t,this.lighting.setRendered(t);const a=t&&n?this.worldKeyFor(n):null;t?(this.capturing||a!==this.worldApplied)&&this.world.apply(this.root,this.frame?.world??null,n):this.world.clear(),this.worldApplied=this.capturing?null:a,this.applyVisibility(),this.applyWorkbench(),this.applyShadows(t,n),t&&(await hr(),await Promise.all([...this.textures.values()].map(r=>r.ready)),await this.world.ready())}applyShadows(t,n){this.root.updateMatrixWorld(!0);const e=[];for(const u of this.objects.values()){const f=u;if(f.isMesh&&(f.castShadow=t,f.receiveShadow=t,t&&f.visible)){const s=new yn().setFromObject(f);s.isEmpty()||e.push(s)}}if(!t||!e.length)return;const r=e.reduce((u,f)=>u.union(f),new yn).getBoundingSphere(new Ge),l=n?new Xe().setFromProjectionMatrix(new X().multiplyMatrices(n.projectionMatrix,n.matrixWorldInverse)):null,c=l?e.flatMap(u=>Tr(u,l)):[];for(const u of this.lights.values())u.isDirectionalLight&&n?Pr(u,c,e):gr(u,r.center,r.radius)}applyOverlays(t){const n=l=>{const c=t.objects.find(u=>u.name===l);return c===void 0?null:new X().set(...c.matrix.flat())},e=[...this.armatureOverlay.apply(t.armatures,n)],a=t.weights?this.objects.get(t.objects.find(l=>l.name===t.weights?.object)?.id??""):void 0,r=this.weightOverlay.apply(t.weights,a??null,t.weights?n(t.weights.object):null);return r!==null&&e.push(r),this.cursorOverlay.apply(t.cursor),this.applyExtras(t),e}setCameraViewShowing(t){this.lookingThrough!==t&&(this.lookingThrough=t,this.frame&&this.applyExtras(this.frame),vt())}applyExtras(t){const n={};for(const[e,a]of Object.entries(t.cameras)){const r=Lo.safeParse(a);r.success&&(n[e]=r.data)}this.extrasOverlay.apply({lookingThrough:this.lookingThrough,lightDistances:t.light_distances,objects:t.objects.filter(e=>e.visible),active:t.active,cameras:n,lights:t.lights,empties:t.empties,sceneCamera:t.camera_view?.scene_camera??null,renderAspect:t.camera_view?.aspect??1,presented:e=>{const a=t.objects.find(r=>r.name===e);return a?this.objects.get(a.id)??null:null},image:e=>{const a=this.textures.get(e);if(!a)return null;const r=a.texture.image,l=a.width||r?.width||0,c=a.height||r?.height||0;return(l===0||c===0)&&a.ready&&!this.awaitedImages.has(e)&&(this.awaitedImages.add(e),a.ready.then(()=>{this.awaitedImages.delete(e),this.frame&&this.applyExtras(this.frame),vt()},()=>this.awaitedImages.delete(e))),{texture:a.texture,width:l,height:c}}})}applyVisibility(){for(const t of this.frame?.objects??[]){const n=this.objects.get(t.id);if(n&&(n.visible=this.rendered?t.render_visible:t.visible),!t.light)continue;const e=this.lights.get(t.light);e&&(e.visible=this.rendered&&t.render_visible)}this.armatureOverlay.group.visible=!this.capturing,this.weightOverlay.group.visible=!this.capturing,this.cursorOverlay.group.visible=!this.capturing;for(const t of[this.extrasOverlay.cameras,this.extrasOverlay.lights,this.extrasOverlay.empties])t.visible=!this.capturing}applyFrame(t){const n=this.frame===null?null:{session:this.frame.session,revision:this.frame.revision},e=Zl.parse(t);if(this.retiredSessions.has(e.session))throw new Error("The runtime session was replaced; its delayed frame cannot overwrite the active model");if(this.frame?.session===e.session&&e.revision<this.frame.revision)throw new Error("The runtime frame is older than the displayed model");const a=new Set(e.objects.map(f=>f.id));if(a.size!==e.objects.length)throw new Error("Runtime object IDs must be unique");const r=new Map(e.objects.map(f=>[f.id,f]));for(const f of e.objects){if(f.mesh!==null&&!e.meshes[f.mesh])throw new Error(`Missing runtime mesh ${f.mesh}`);if(f.volume&&(!e.volumes[f.volume]||f.mesh!==null))throw new Error(`Invalid runtime volume ${f.volume}`);if(f.light&&(!e.lights[f.light]||f.mesh!==null))throw new Error(`Invalid runtime light ${f.light}`);for(const _ of f.materials)if(_!==null&&!e.materials[_])throw new Error(`Missing runtime material ${_}`);const s=new Set([f.id]);let i=f.parent;for(;i!==null;){if(s.has(i))throw new Error("Runtime parent cycle");s.add(i);const _=r.get(i);if(!_)throw new Error(`Missing runtime parent ${i}`);i=_.parent}}const l=new Map,c=new Map;try{for(const[f,s]of Object.entries(e.volumes)){const i=JSON.stringify(s);this.frame?.session===e.session&&this.volumes.get(f)?.signature===i||c.set(f,{signature:i,mesh:Ar(s)})}for(const[f,s]of Object.entries(e.meshes)){if("unchanged"in s){if(this.frame?.session===e.session&&this.meshes.has(f))continue;throw new Error(`${Sa}: the presenter does not hold runtime mesh ${f} (store ${s.store}, revision ${s.revision})`)}const i="hash"in s,_="columns"in s,d=_?`revision:${s.revision}`:i?s.hash:JSON.stringify(s);this.frame?.session===e.session&&this.meshes.get(f)?.signature===d||l.set(f,{signature:d,geometry:_?Hn(La({...s.columns,attributes:s.attributes,activeUv:s.activeUv,renderUv:s.renderUv},d)):i?Hn(s):Va(s)})}}catch(f){for(const s of l.values())s.geometry.dispose();for(const{mesh:s}of c.values())s.geometry.dispose(),s.material.dispose();throw f}this.frame?.session!==e.session&&(this.frame&&this.retiredSessions.add(this.frame.session),this.clear());for(const[f,s]of c){const i=this.volumes.get(f)?.mesh;i&&(i.removeFromParent(),i.geometry.dispose(),i.material.dispose()),this.volumes.set(f,s)}for(const[f,s]of l)this.meshes.get(f)?.geometry.dispose(),this.meshes.set(f,s),this.geometryBuilds++;for(const[f,s]of Object.entries(e.images)){const i=this.textures.get(f);if("width"in s){const m=s.rgba??(s.rgbaBase64?Wn(s.rgbaBase64):void 0);if(!m)throw new Error(`Runtime image ${f} carries no raster`);const p=s.tiles?Hl(f,s.tiles,s.colorspace??"sRGB"):void 0;if(i?.udim&&(i.udim.tiles.dispose(),i.udim.map.dispose(),delete i.udim),i&&i.width===s.width&&i.height===s.height){const v=i.texture.image;if(v.data){v.data.set(m),i.texture.needsUpdate=!0,i.revision=s.revision,p&&(i.udim=p);continue}}i?.texture.dispose(),this.textures.set(f,{texture:Wl(m,s.width,s.height,s.colorspace??"sRGB"),width:s.width,height:s.height,revision:s.revision,...p?{udim:p}:{}});continue}const _=s.png??(s.pngBase64?Wn(s.pngBase64):void 0);if(!_)throw new Error(`Runtime image ${f} carries no bytes`);i?.texture.dispose(),i?.udim?.tiles.dispose(),i?.udim?.map.dispose();const{texture:d,ready:h}=Ul(_);d.colorSpace=Mt,this.textures.set(f,{texture:d,ready:h,width:0,height:0,revision:s.revision,png:_.slice()})}for(const[f,s]of Object.entries(e.materials)){const i=this.materials.get(f)??new ln;i.name=s.name;const _=s.texture?.tint;s.texture!==void 0?i.color.setRGB(_?.[0]??1,_?.[1]??1,_?.[2]??1,ft):i.color.setRGB(s.color[0],s.color[1],s.color[2],ft),i.opacity=s.color[3];const d=i.opacity<1||s.graph!==void 0&&Rr(s.graph);i.transparent!==d&&(i.transparent=d,i.needsUpdate=!0),i.roughness=s.roughness,i.metalness=s.metallic,i.transmission=s.transmission,i.ior=s.ior,so(i,s.physical,{map:s.texture?.extension==="CLIP",roughness:s.roughness_texture?.extension==="CLIP",normal:s.normal_texture?.extension==="CLIP"});const h=s.normal_texture?.image.name;if(h===void 0)i.normalMap&&(this.textureSamplers.delete(`${f}:normal`),i.normalMap=null,i.needsUpdate=!0);else{const b=this.textures.get(h);if(!b)throw new Error(`${Qt}: missing normal image ${h}`);const w=this.textureSamplers.get(`${f}:normal`,b.texture,s.normal_texture.extension,b.ready,s.normal_texture.uv);i.normalMap!==w&&(i.normalMap=w,i.needsUpdate=!0);const R=s.normal_space==="OBJECT"?Ye:Ze;i.normalMapType!==R&&(i.normalMapType=R,i.needsUpdate=!0),i.normalScale.set(s.normal_strength,s.normal_strength*(s.normal_directx?-1:1))}s.emission?(i.emissive.setRGB(s.emission.color[0],s.emission.color[1],s.emission.color[2],ft),i.emissiveIntensity=s.emission.strength):(i.emissive.setRGB(0,0,0),i.emissiveIntensity=1);const m=s.roughness_texture?.image.name??null;if(m===null)this.roughnessTextureNames.has(f)&&(this.textureSamplers.delete(`${f}:roughness`),i.roughnessMap=null,this.roughnessTextureNames.delete(f),i.needsUpdate=!0);else{const b=this.textures.get(m);if(!b)throw new Error(`${Qt}: the presenter does not hold runtime image ${m} (revision ${s.roughness_texture.image.revision})`);const w=this.textureSamplers.get(`${f}:roughness`,b.texture,s.roughness_texture.extension,b.ready,s.roughness_texture.uv);i.roughnessMap!==w&&(i.roughnessMap=w,this.roughnessTextureNames.set(f,m),i.needsUpdate=!0)}const p=s.texture?.image.name??null;if(p===null)this.textureNames.has(f)&&(this.textureSamplers.delete(`${f}:color`),i.map=null,this.textureNames.delete(f),i.needsUpdate=!0);else{const b=this.textures.get(p);if(!b)throw new Error(`${Qt}: the presenter does not hold runtime image ${p} (revision ${s.texture.image.revision})`);const w=this.textureSamplers.get(`${f}:color`,b.texture,s.texture.extension,b.ready,s.texture.uv);i.map!==w&&(i.map=w,this.textureNames.set(f,p),i.needsUpdate=!0)}const v=s.graph?this.compiledGraph(s.graph):null,g=new Set;qr(i,v,b=>{const w=this.textures.get(b.name);if(!w)throw new Error(`${Qt}: the presenter does not hold runtime image ${b.name} (revision ${b.revision})`);if(b.tiled){if(!w.udim)throw new Error(`${Qt}: runtime image ${b.name} arrived without its UDIM tiles`);return w.udim}const R=`${f}:graph:${b.node}`;g.add(R);const T=this.textureSamplers.get(R,w.texture,b.extension,w.ready),A=b.closest?Bn:Lt,O=b.closest?Bn:b.mipmap?Jo:Lt;return(T.magFilter!==A||T.minFilter!==O)&&(T.magFilter=A,T.minFilter=O,T.needsUpdate=!0),T},this.photograph);for(const b of this.graphSamplers.get(f)??[])g.has(b)||this.textureSamplers.delete(b);this.graphSamplers.set(f,g),this.materials.set(f,i)}for(const f of e.objects){let s=this.objects.get(f.id);const i=f.volume?this.volumes.get(f.volume).mesh:null;if((!s||(i?s!==i:!!s.isMesh!=(f.mesh!==null)))&&(s?.removeFromParent(),s=i??(f.mesh!==null?new Tt(this.meshes.get(f.mesh).geometry,this.fallback):new Go),this.objects.set(f.id,s)),s.name=f.name,f.type==="CAMERA"||f.type==="LIGHT"||f.type==="EMPTY"?s.userData.volterOwnOverlay=!0:delete s.userData.volterOwnOverlay,s.matrixAutoUpdate=!1,s.matrix.set(...f.matrix.flat()),f.parent){const _=new X().set(...r.get(f.parent).matrix.flat());s.matrix.premultiply(_.invert())}if(s.matrix.decompose(s.position,s.quaternion,s.scale),f.texspace?s.userData.blenderTexspace=f.texspace:delete s.userData.blenderTexspace,f.default_color!==void 0?s.userData.blenderDefaultColor=f.default_color:delete s.userData.blenderDefaultColor,f.mesh!==null){const _=s;_.geometry=this.meshes.get(f.mesh).geometry,_.material=f.materials.length?f.materials.map(d=>d===null?this.fallback:this.materials.get(d)):this.fallback,Zr(_)}if(f.light){const _=this.lights.get(f.light)??null,d=vr(e.lights[f.light],_);_&&_!==d&&(_.removeFromParent(),_.dispose()),d.parent!==s&&s.add(d),d.userData.volterOwnOverlay=!0,xr(d,s),this.lights.set(f.light,d)}}for(const f of e.objects){const s=this.objects.get(f.id),i=f.parent===null?this.root:this.objects.get(f.parent);s.parent!==i&&i.add(s)}for(const[f,s]of this.objects)a.has(f)||(s.removeFromParent(),this.objects.delete(f));for(const[f,s]of this.volumes)e.volumes[f]||(s.mesh.geometry.dispose(),s.mesh.material.dispose(),this.volumes.delete(f));for(const[f,s]of this.meshes)e.meshes[f]||(s.geometry.dispose(),this.meshes.delete(f));for(const[f,s]of this.materials)if(!e.materials[f]){for(const i of["normal","roughness","color"])this.textureSamplers.delete(`${f}:${i}`);for(const i of this.graphSamplers.get(f)??[])this.textureSamplers.delete(i);this.graphSamplers.delete(f),s.dispose(),this.materials.delete(f)}for(const[f,s]of this.lights)e.lights[f]||(s.removeFromParent(),s.dispose(),this.lights.delete(f));this.root.updateMatrixWorld(!0),this.frame={...e,meshes:{},volumes:{}},this.worldKey=JSON.stringify(e.world??null);const u=this.applyOverlays(e);u.length&&(this.frame={...this.frame,warnings:[...this.frame.warnings,...u]}),this.applyVisibility(),this.applyWorkbench(),this.heldRendered!==null&&!this.capturing&&this.report(this.applyRendered(!0,this.heldRendered()));for(const f of[...this.frameListeners])f();for(const f of this.followers)try{f.applyFrame(t)}catch{f.applyFrame(this.fullFrame())}return{...this.inspect(),held:n}}inspect(){return{session:this.frame?.session,revision:this.frame?.revision,active:this.frame?.active,mode:this.frame?.mode,geometryBuilds:this.geometryBuilds,objects:[...this.objects].map(([t,n])=>({id:t,name:n.name,uuid:n.uuid,geometry:n.geometry?.uuid,visible:n.visible}))}}snapshot(){return this.frame}fullFrame(){const t=this.frame;if(!t)throw new Error("Blender capture requires a presented frame");const n=structuredClone({...t,images:{},armatures:{},weights:null});for(const[a,{signature:r,geometry:l}]of this.meshes){const c=s=>{const i=l.getAttribute(s);if(!i)return null;if(!(i instanceof it))throw new Error(`Blender capture cannot copy interleaved ${s}`);return new Float32Array(i.array)},u=c("position");if(!u)throw new Error(`Blender capture mesh ${a} has no positions`);const f=l.getIndex();n.meshes[a]={hash:r,positions:u,normals:c("normal"),uv:c("uv"),uvLayers:Object.entries(l.userData.blenderUvChannels??{}).map(([s,i])=>{const _=c(`uv${i}`);if(!_)throw new Error(`Blender capture mesh ${a} is missing UV layer ${s}`);return{name:s,data:_}}),orco:l.userData.blenderOrcoFromDoor?c("blenderOrco"):null,attributeLayers:(l.userData.blenderAttributes??[]).map(s=>{const i=c(Vt(s));if(!i)throw new Error(`Blender capture mesh ${a} is missing attribute ${s}`);return{name:s,data:i}}),indices:f?new Uint32Array(f.array):Uint32Array.from({length:u.length/3},(s,i)=>i),groups:l.groups.map(s=>({start:s.start,count:s.count,materialIndex:s.materialIndex??0}))}}for(const[a,{signature:r}]of this.volumes)n.volumes[a]=me.parse(JSON.parse(r));const e=new Set(Object.values(n.materials).flatMap(a=>[a.texture?.image.name,a.roughness_texture?.image.name,a.normal_texture?.image.name,...Object.values(a.graph?.nodes??{}).map(r=>r.props.image?.name)].filter(r=>r!==void 0)));for(const a of e){const r=this.textures.get(a);if(!r)throw new Error(`Blender capture image ${a} is not resident`);if(r.png)n.images[a]={revision:r.revision,png:r.png.slice()};else{const l=r.texture.image?.data;if(!(l instanceof Uint8Array))throw new Error(`Blender capture image ${a} has no resident raster`);n.images[a]={revision:r.revision,width:r.width,height:r.height,rgba:l.slice(),colorspace:r.texture.colorSpace===oo?"data":"sRGB",...r.udim?{tiles:r.udim.frame}:{}}}}return n}follow(){const t=new Tn;this.frame&&t.applyFrame(this.fullFrame()),this.followers.add(t),t.leader=this;let n=!1;return{view:t,dispose:()=>{n||(n=!0,this.followers.delete(t),t.leader=null,t.dispose(),t.root.removeFromParent())}}}captureSnapshot(){const t=this.fullFrame(),n=this.frame,e=this.createWorldVolumePass(),a=new Tn;a.photograph=!0;let r=!1;const l=()=>{r||(r=!0,e?.dispose(),a.dispose(),a.root.removeFromParent())};try{a.applyFrame(t),this.root.updateWorldMatrix(!0,!1),a.root.matrix.copy(this.root.matrixWorld),a.root.updateMatrixWorld(!0)}catch(c){throw l(),c}return{effect:e,root:a.root,session:n.session,revision:n.revision,prepare:c=>{if(r)throw new Error("Blender capture snapshot is disposed");return a.setRendered(!0,c)},dispose:l}}createWorldVolumePass(){const t=Do(this.frame?.world);return t?new il(t):void 0}recordPresentation(t){if(typeof t!="object"||t===null)return;const n=t,e=n.meshes;if(typeof e!="object"||e===null)return;const a=typeof n.session=="string"?n.session:null;a!==this.submittedSession&&(this.submittedMeshes.clear(),this.photographs.length=0,this.submittedSession=a);const r=e;for(const[l,c]of Object.entries(r))typeof c=="object"&&c!==null&&!("unchanged"in c)&&this.submittedMeshes.set(l,c);for(const l of[...this.submittedMeshes.keys()])l in r||this.submittedMeshes.delete(l);this.submitted={...n,meshes:Object.fromEntries(this.submittedMeshes)}}recordPhotograph(t){this.photographs.push(t)}observations(){return{presentation:this.submitted,photographs:this.photographs}}clear(){for(const t of this.lights.values())t.removeFromParent(),t.dispose();this.lights.clear();for(const t of this.objects.values())t.removeFromParent();for(const t of this.meshes.values())t.geometry.dispose();for(const t of this.materials.values())t.dispose();for(const{mesh:t}of this.volumes.values())t.geometry.dispose(),t.material.dispose();for(const{texture:t,udim:n}of this.textures.values())t.dispose(),n?.tiles.dispose(),n?.map.dispose();this.textures.clear(),this.textureNames.clear(),this.roughnessTextureNames.clear(),this.textureSamplers.clear(),this.volumes.clear(),this.objects.clear(),this.meshes.clear(),this.materials.clear()}dispose(){this.clear(),this.fallback.dispose(),this.lighting.dispose(),this.world.dispose(),this.armatureOverlay.dispose(),this.weightOverlay.dispose(),this.cursorOverlay.dispose(),this.extrasOverlay.dispose();for(const t of this.workbenchMaterials.values())t.dispose();this.workbenchMaterials.clear(),this.frame=null,this.retiredSessions.clear(),this.submittedMeshes.clear(),this.submitted=null,this.submittedSession=null,this.photographs.length=0}}const ii=new Tn;function ye(o){const t=atob(o),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n}function Ln(o){const t=ye(o);return new Float32Array(t.buffer,t.byteOffset,t.byteLength>>2)}function Jl(o){const t=ye(o);return new Uint16Array(t.buffer,t.byteOffset,t.byteLength>>1)}function ti(o){return new X().set(...o.flat())}function Bo(o,t){return[o.object,o.mesh,o.armature,o.vertexCount,o.bones.length,t].join("|")}class ni{#n=new Map;#o=null;#a=null;#t=null;#i=null;#e=null;#l=null;#s=new Set;#u=0;#_=[];#r=0;get version(){return this.#u}get engineCalls(){return this.#r}subscribe(t){return this.#s.add(t),()=>this.#s.delete(t)}#f(){this.#u++;for(const t of[...this.#s])t()}state(){const t=this.#t,n=t?.frameStart??1,e=t?.frameEnd??250,a=t?.fps??24;return{frame:this.frame(),start:n,end:e,fps:a,action:t?.action??null,object:t?.object??null,armature:t?.armature??null,bones:[...this.#n.values()].reduce((r,l)=>r+l.bones.length,0),keyframes:t?.keyframes??[],summary:t?.summary??[],clipStart:t?.clipStart??null,clipEnd:t?.clipEnd??null,tracks:t?.tracks.length??0,bound:[...this.#n.keys()],warnings:this.#_,engineCalls:this.#r,blenderFrame:t?.frameCurrent??null}}playhead(){return this.#t?this.frame():null}frame(){const t=this.#t;return!t||!this.#a||t.clipStart===void 0?t?.frameCurrent??1:this.#i!==null?this.#i:t.clipStart+this.#a.time*t.fps}get playable(){return this.#a!==null}async bind(t,n){this.#r++;const e=await n.rig();if(!e)return;const a=[],r=new Set;let l=!1;for(const i of e.rigs){if(!i.object||!i.armature||!i.skinIndexBase64||!i.skinWeightBase64){i.reason&&a.push(i.reason);continue}r.add(i.object);const _=Bo(i,e.frame);if(this.#n.get(i.object)?.signature===_)continue;const d=this.#d(t,i,e.frame,a);d&&(this.#n.get(i.object)?.skeleton.dispose(),this.#n.set(i.object,d),l=!0)}for(const[i,_]of[...this.#n])r.has(i)||(_.skeleton.dispose(),_.boneRoot.removeFromParent(),this.#n.delete(i),l=!0);this.#r++;const c=await n.clip(),u=this.#t,f=c?.action!==u?.action||c?.tracks.length!==u?.tracks.length||c?.clipStart!==u?.clipStart||c?.clipEnd!==u?.clipEnd;this.#t=c??null,c?.reason&&a.push(c.reason),c&&(f||l)&&this.#h(t,c,a);const s=this.#e?.snapshot().playbackState==="playing";c&&!s&&u?.frameCurrent!==c.frameCurrent&&(this.#c(c.frameCurrent),this.#e&&c.fps>0&&this.#e.seek(c.frameCurrent/c.fps)),this.#_=a,this.#f()}#d(t,n,e,a){const r=t.objectForBlenderName(n.object??""),l=t.objectForBlenderName(n.armature??"");if(!r||!l)return null;const c=r,u=c.geometry;if(!u)return null;const f=u.getAttribute("blenderVertex");if(!f)return a.push(`"${n.object}" cannot be skinned: its presented geometry carries no \`blenderVertex\` attribute, so a per-Blender-vertex weight cannot be expanded onto its drawn vertices.`),null;if(n.vertexCount===0)return null;let s=0;for(let T=0;T<f.count;T++)s=Math.max(s,f.getX(T));if(s>=n.vertexCount)return a.push(`"${n.object}" is not skinned here: its presented geometry references Blender vertex ${s} while the mesh declares ${n.vertexCount}, which is a generative modifier (Subdivision, Mirror, Array…) between the two. Blender's own viewport shows the evaluated result; this presenter shows the exported columns unskinned.`),null;const i=Jl(n.skinIndexBase64??""),_=Ln(n.skinWeightBase64??""),d=f.count,h=new Uint16Array(d*4),m=new Float32Array(d*4);for(let T=0;T<d;T++){const A=f.getX(T);for(let O=0;O<4;O++)h[T*4+O]=i[A*4+O]??0,m[T*4+O]=_[A*4+O]??0}u.setAttribute("skinIndex",new ta(h,4)),u.setAttribute("skinWeight",new bt(m,4));const p=new ot;p.name=`${n.armature}:bones`;const v=[],g=n.bones.map(T=>ti(T.pose)),b=new Map(n.bones.map((T,A)=>[T.name,A]));n.bones.forEach((T,A)=>{const O=new na;O.name=T.name,v.push(O);const M=T.parent===null?void 0:b.get(T.parent);(M===void 0?g[A].clone():g[M].clone().invert().multiply(g[A])).decompose(O.position,O.quaternion,O.scale),(M===void 0?p:v[M]).add(O)}),l.add(p);const w=new oa(u,c.material);w.name=c.name,w.matrixAutoUpdate=!1,w.matrix.copy(c.matrix),w.matrix.decompose(w.position,w.quaternion,w.scale),w.userData=c.userData,w.frustumCulled=!1,t.replacePresentedObject(c,w),t.root.updateMatrixWorld(!0);const R=new ea(v);return w.bind(R,w.matrixWorld.clone()),n.constrainedBones?.length&&a.push(`Bone constraints on ${n.constrainedBones.join(", ")}: the clip is derived from the F-Curves alone, so those bones play their channels rather than Blender's solved pose.`),n.unmappedGroups?.length&&a.push(`${n.object} carries vertex groups no bone is named for (${n.unmappedGroups.join(", ")}); they weight nothing here, exactly as they deform nothing in Blender.`),{object:n.object??"",armature:n.armature??"",mesh:w,boneRoot:p,bones:v,skeleton:R,frame:e,signature:Bo(n,e)}}#h(t,n,e){if(this.#o?.stopAllAction(),this.#o=null,this.#a=null,!n.tracks.length||n.clipStart===void 0||n.clipEnd===void 0)return;const a=n.armature?t.objectForBlenderName(n.armature):null;if(!a)return;const r=new Map;for(const i of this.#n.values())if(i.armature===n.armature)for(const _ of i.bones)r.set(_.name,_);const l=[],c=new Set;for(const i of n.tracks){const _=r.get(i.bone);if(!_){c.add(i.bone);continue}const d=Ln(i.timeBase64),h=Ln(i.valueBase64),m=`${_.uuid}.${i.property}`;l.push(i.property==="quaternion"?new aa(m,Array.from(d),Array.from(h)):new ra(m,Array.from(d),Array.from(h)))}if(c.size&&e.push(`${n.action} animates ${[...c].join(", ")}, which this binding has no bone for.`),!l.length)return;const u=n.duration??(n.clipEnd-n.clipStart)/n.fps,f=new la(a),s=f.clipAction(new ia(n.action??"action",u,l));s.setLoop(sa,Number.POSITIVE_INFINITY),s.play(),this.#o=f,this.#a=s,this.#c(n.frameCurrent),this.#m()}#c(t){const n=this.#t;if(!n||!this.#o||n.clipStart===void 0||n.clipEnd===void 0)return;const e=Math.min(n.clipEnd,Math.max(n.clipStart,t));this.#i=e;const a=(n.clipEnd-n.clipStart)/n.fps;this.#o.setTime(Math.min(a-1e-4,(e-n.clipStart)/n.fps)),this.#m()}#m(){for(const t of this.#n.values())t.boneRoot.updateMatrixWorld(!0),t.skeleton.update()}get scene(){return this.#t?.scene??null}async writeBookmark(){const t=Math.round(this.frame()),n=this.#t;if(!n)return t;const e=n.scene;return!e||n.frameCurrent===t||(this.#r++,await _a(`bpy.data.scenes[${JSON.stringify(e)}]`,"frame_current",t,void 0,!1),this.#t={...n,frameCurrent:t},this.#f()),t}get transport(){return this.#e}attachTo(t){this.#l?.(),this.#e=t;const n=t.attach({id:this.#t?.action??"blender-action",label:this.#t?.action??"Action",range:()=>{const l=this.#t,c=l?.fps||24;return{start:(l?.frameStart??1)/c,end:(l?.frameEnd??250)/c,fps:c}},seek:l=>this.seekSeconds(l)}),e=t.onSettled(()=>{this.writeBookmark()}),a=()=>{e(),n(),this.#e===t&&(this.#e=null),this.#l=null};this.#l=a;const r=this.#t;return r&&r.fps>0&&t.seek(r.frameCurrent/r.fps),a}seekSeconds(t){const n=this.#t?.fps||24;this.#c(Math.round(t*n)),this.#f()}keyframes(){return(this.#t?.keyframes??[]).map(t=>t.frame)}dispose(){this.#l?.(),this.#o?.stopAllAction(),this.#o=null,this.#a=null;for(const t of this.#n.values())t.skeleton.dispose(),t.boneRoot.removeFromParent();this.#n.clear()}}const we=new ni;function si(o){return we.subscribe(o)}function fi(){return we.version}export{we as a,fi as b,ii as c,si as s};
|
package/dist/assets/{blender-runtime.document-Rf7NwTan.js → blender-runtime.document-DFk6LfKL.js}
RENAMED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import{a as d}from"./jsx-runtime-DPjLkJKQ.js";import{j3 as Le,bt as xe,r as D,bv as Me,fN as W,bB as R,bC as z,hR as Ie,bA as Te,j4 as Pe,bK as Be,bn as $e,bq as De,j5 as Ve,j6 as be,j7 as Ge,j8 as We,j9 as He,ja as pe,bp as Ue,bs as ze}from"./index-EO6Vl92s.js";import{c as Ke,a as Y}from"./blender-runtime-skin-6IzekhAd.js";import{r as h}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 fe,z as Je,A as Xe,B as me,C as Qe,D as te,E as Ze,F as et,G as tt}from"./blender-runtime-host-CJwNrADC.js";import{r as rt}from"./index-CtzuWnCS.js";import{a as nt}from"./three-contract-Dkt6PmWY.js";import{b as H,o as re}from"./viewport-door-Dbl8EH3p.js";import{s as ot,a as at}from"./object3d-document-session-registry-3YUZT4RT.js";import{d9 as lt}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-B_xPBrsP.js";import"./hierarchy-marks-r1SCnl92.js";import"./workspace-arrangement-COs530TA.js";function Ce(e){const a=Number.isFinite(e)&&e>0?e:50;return{degrees:2*Math.atan(72/(2*a))*180/Math.PI,axis:"larger"}}Le("model",{camera:{fov:Ce(50),opening:[.8187,.4458,.3617]},interaction:{bootTool:"select",boxSelect:"touch"},all:{lighting:{source:"studio",studioPreset:xe.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 st(e){return`blender-${e.toLowerCase().replace(/_/g,"-")}`}function B(e){return e?.type==="TSE_SOME_ID"&&e.struct==="Object"&&e.object!==void 0}function he(e){if(e.struct)return e.struct}function ge(e,a){return{id:e.id,label:e.name,role:"entity",kind:st(e.icon),...he(e)?{typeLabel:he(e)}:{},parentId:a,childIds:e.children.map(o=>o.id),defaultExpanded:e.expanded}}const it={transform:!0,inspectorFields:!1,persist:!0},ee=new Set;let Ee=0;const ae=new Set;function _e(){queueMicrotask(()=>{Ee++;for(const e of ae)e()})}function ct(e){return ae.add(e),()=>{ae.delete(e)}}function je(){return Ee}function dt(e){for(const a of ee)if(a.documentId===e||a.documentId===`object3d-document:${e}`)return a;return ee.values().next().value??null}const ut=()=>({position:[0,0,0],rotation:[0,0,0,1],scale:[1,1,1]});function ye(e,a){e.updateWorldMatrix(!0,!1);const o=a.matrixWorld.clone().invert().multiply(e.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(e,a){return`${e} 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 bt=[{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'"}],pt="collection-instance:";function ft(){const e=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[")||e.has(a.name)||e.set(a.name,{kind:`${pt}${a.name}`,label:a.name,group:"Collection Instance",call:`object.collection_instance_add, collection=${V(a.name)}`})}return[...e.values()]}function Z(){return[...bt,...ft()]}function mt(e){const[a,...o]=e.call.split(", ");return`bpy.ops.${a}(${o.join(", ")})`}function V(e){return JSON.stringify(e)}const ht={"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 gt(e){const a=/bpy\.ops\.([a-z_]+\.[a-z0-9_]+)\(/.exec(e)?.[1];return a===void 0?void 0:ht[a]}async function U(e,a){const o=["before = {o.name for o in bpy.data.objects}",e,"made = [o.name for o in bpy.data.objects if o.name not in before]",'print("\\n".join(made))'].join(`
|
|
1
|
+
import{a as d}from"./jsx-runtime-DPjLkJKQ.js";import{j3 as Le,bt as xe,r as D,bv as Me,fN as W,bB as R,bC as z,hR as Ie,bA as Te,j4 as Pe,bK as Be,bn as $e,bq as De,j5 as Ve,j6 as be,j7 as Ge,j8 as We,j9 as He,ja as pe,bp as Ue,bs as ze}from"./index-DyTgGJaV.js";import{c as Ke,a as Y}from"./blender-runtime-skin-CU4ON8U6.js";import{r as h}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 fe,z as Je,A as Xe,B as me,C as Qe,D as te,E as Ze,F as et,G as tt}from"./blender-runtime-host-CbZll4j6.js";import{r as rt}from"./index-CtzuWnCS.js";import{a as nt}from"./three-contract-Dkt6PmWY.js";import{b as H,o as re}from"./viewport-door-BAOv87Fs.js";import{s as ot,a as at}from"./object3d-document-session-registry-DkPO8z-D.js";import{d9 as lt}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-DbjVwafW.js";import"./hierarchy-marks-BUq91mYX.js";import"./workspace-arrangement-Dl7Q2V4T.js";function Ce(e){const a=Number.isFinite(e)&&e>0?e:50;return{degrees:2*Math.atan(72/(2*a))*180/Math.PI,axis:"larger"}}Le("model",{camera:{fov:Ce(50),opening:[.8187,.4458,.3617]},interaction:{bootTool:"select",boxSelect:"touch"},all:{lighting:{source:"studio",studioPreset:xe.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 st(e){return`blender-${e.toLowerCase().replace(/_/g,"-")}`}function B(e){return e?.type==="TSE_SOME_ID"&&e.struct==="Object"&&e.object!==void 0}function he(e){if(e.struct)return e.struct}function ge(e,a){return{id:e.id,label:e.name,role:"entity",kind:st(e.icon),...he(e)?{typeLabel:he(e)}:{},parentId:a,childIds:e.children.map(o=>o.id),defaultExpanded:e.expanded}}const it={transform:!0,inspectorFields:!1,persist:!0},ee=new Set;let Ee=0;const ae=new Set;function _e(){queueMicrotask(()=>{Ee++;for(const e of ae)e()})}function ct(e){return ae.add(e),()=>{ae.delete(e)}}function je(){return Ee}function dt(e){for(const a of ee)if(a.documentId===e||a.documentId===`object3d-document:${e}`)return a;return ee.values().next().value??null}const ut=()=>({position:[0,0,0],rotation:[0,0,0,1],scale:[1,1,1]});function ye(e,a){e.updateWorldMatrix(!0,!1);const o=a.matrixWorld.clone().invert().multiply(e.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(e,a){return`${e} 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 bt=[{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'"}],pt="collection-instance:";function ft(){const e=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[")||e.has(a.name)||e.set(a.name,{kind:`${pt}${a.name}`,label:a.name,group:"Collection Instance",call:`object.collection_instance_add, collection=${V(a.name)}`})}return[...e.values()]}function Z(){return[...bt,...ft()]}function mt(e){const[a,...o]=e.call.split(", ");return`bpy.ops.${a}(${o.join(", ")})`}function V(e){return JSON.stringify(e)}const ht={"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 gt(e){const a=/bpy\.ops\.([a-z_]+\.[a-z0-9_]+)\(/.exec(e)?.[1];return a===void 0?void 0:ht[a]}async function U(e,a){const o=["before = {o.name for o in bpy.data.objects}",e,"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??gt(e));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 _t(e,a){const o=[`_sel = {${e.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&&D().console.error(`Blender refused the selection write: ${i.error}`,"blender-outliner")}async function ne(e,a){if(e.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 [${e.map(V).join(", ")}]]`,"with bpy.context.temp_override(selected_objects=targets, selected_editable_objects=targets, active_object=targets[0], object=targets[0]):",` ${a}`].join(`
|
|
5
|
-
`),{error:i}=await U(o);return i!==null?{destination:i,persisted:!1}:(await Q(e),{destination:`Blender — ${a}; the session saves the .blend`,persisted:!0})}const jt={source:"document",label:"blender",detail:"These rows are Blender's own View Layer tree, read from the engine through RNA. Editing the model is a bpy call; the eye and render columns write the engine directly."},yt="This collection is excluded from the view layer (LayerCollection.exclude), so its viewport visibility is not what is hiding it. Clear the Exclude checkbox on this row first.";function Oe(e){return({defaultAdapter:a})=>{const o=new Set;let i=[],u=null;const p=new Map,j=new Map,k=()=>{for(const n of[...o])n()},b=()=>X().byId,C=n=>{const t=b().get(n),l=e();return t===void 0||l===null?null:t.type==="TSE_VIEW_COLLECTION_BASE"?l.root:t.object===void 0?null:l.objectForBlenderName(t.object)},E=n=>{const t=e();if(t===null)return null;for(const l of b().values())if(B(l)&&t.objectForBlenderName(l.object)===n)return l.id;return null},v=n=>{for(const t of b().values())if(B(t)&&t.object===n)return t.id;return null},g=n=>{if(b().has(n))return n;const t=nt(a.hierarchy,n);return t===null?null:E(t)},x=n=>{const t=g(n);return t===null?null:C(t)},O=n=>{const t=x(n);return t===null?null:a.hierarchy.idForObject3D?.(t)??null},I={roots:()=>(Qe(F()),(X().tree?.rows??[]).map(t=>ge(t,null))),node:n=>{const t=X(),l=t.byId.has(n)?n:g(n),c=l===null?void 0:t.byId.get(l);return c===void 0?null:ge(c,t.parentOf.get(c.id)??null)},object3D:n=>x(n),idForObject3D:n=>E(n)};function F(){const n=b(),t=new Set;for(const l of i){const c=n.get(l)?.object;c!==void 0&&t.add(c)}return[...t]}const L=()=>{const n=[];for(const t of i){const l=x(t),c=l===null?null:a.hierarchy.idForObject3D?.(l);c&&n.push(c)}a.selection?.set(n,{intent:"exact"}),k()},M=()=>{const n=Ye(),t=`${oe()}\0${n.active??""}\0${[...n.selected].sort().join("")}`;if(t===u)return;u=t;const l=n.selected.filter(m=>m!==n.active);n.active!==null&&l.push(n.active);const c=l.map(v).filter(m=>m!==null);c.length===i.length&&c.every((m,w)=>m===i[w])||(i=c,L())},r={get:()=>[...i],set:n=>{i=n.map(g).filter(m=>m!==null),L();const t=b(),l=[],c=[];for(const m of i){const w=t.get(m),N=w?.object;N===void 0?c.push(w?.name??m):l.includes(N)||l.push(N)}c.length>0&&D().console.warn(`${c.join(", ")} ${c.length===1?"is":"are"} not an object, so Blender's object selection does not carry ${c.length===1?"it":"them"}. Selecting a collection sets the ACTIVE COLLECTION in Blender, which is its own gesture and not in this editor yet.`,"blender-outliner"),_t(l,l.length===0?null:l[l.length-1])}},s=n=>b().get(n)?.restrict,f={properties:n=>{const t=s(n);if(t===void 0)return[];const l=b().get(n),c=[{path:"name",label:"Name",type:"string",readonly:!B(l)}];return t.hide!==void 0&&c.push({path:"visible",label:"Show in Viewport",type:"boolean"}),t.render!==void 0&&c.push({path:"renderVisible",label:"Show in Renders",type:"boolean"}),t.exclude!==void 0&&c.push({path:"exclude",label:"Exclude from View Layer",type:"boolean"}),c},get:(n,t)=>{const l=b().get(n);if(l!==void 0){if(t==="name")return l.name;if(t==="visible")return l.restrict?.hide===void 0?void 0:!l.restrict.hide;if(t==="renderVisible")return l.restrict?.render===void 0?void 0:!l.restrict.render;if(t==="exclude")return l.restrict?.exclude}},editability:(n,t)=>{const l=b().get(n);return l===void 0?{writable:!1}:t==="name"?B(l)?{writable:!0}:{writable:!1,reason:`Renaming a ${l.struct??l.type} is not in this Outliner yet — only an object row renames here. Rename it with bpy.`}:l.notInCollection?{writable:!1,reason:"This row is a child drawn under its parent although it is not in that collection, and Blender's Outliner draws it no restriction columns."}:t==="visible"&&l.restrict?.exclude===!0?{writable:!1,reason:yt}:{writable:!0}},set:async(n,t,l)=>{const c=b().get(n);if(c===void 0)return;if(t==="name"){if(!B(c))return;const w=String(l);if(w===c.name||w.length===0)return;await fe(`bpy.data.objects[${V(c.object)}]`,"name",w),await Q([w]);const N=v(w);N!==null&&r.set([N]);return}if(t==="exclude"){await me(c.path,"exclude",l===!0);return}const m=t==="visible"?"hide":t==="renderVisible"?"render":null;m!==null&&await me(c.path,m,l===!1)}},S={get:n=>{const t=O(n);return(t===null?void 0:a.transforms?.get(t))??ut()},editability:n=>{const t=g(n),l=t===null?void 0:b().get(t);return B(l)&&C(l.id)!==null?{writable:!0}:{writable:!1,reason:`Only an object has a transform; this row is a ${l?.struct??l?.type??"row"}.`}},beginEdit:n=>{const t=x(n);t!==null&&!p.has(t)&&(p.set(t,t.matrixWorld.clone()),j.set(n,t),Xe())},apply:(n,t)=>{const l=x(n);l!==null&&(l.position.fromArray(t.position),l.quaternion.fromArray(t.rotation),l.scale.fromArray(t.scale),l.updateMatrix(),l.updateMatrixWorld(!0))},endEdit:async n=>{const t=j.get(n)??x(n);j.delete(n);const l=e();if(t===null)return;const c=p.get(t);p.delete(t);try{if(l===null||(t.updateWorldMatrix(!0,!1),c?.equals(t.matrixWorld)===!0))return;const m=l.blenderObjectName(t);if(m===null)return;const w=`bpy.data.objects[${JSON.stringify(m)}]`;try{return await fe(w,"matrix_world",ye(t,l.root)),{destination:`Blender — ${w}.matrix_world; the session saves the .blend`,persisted:!0}}catch(N){return{destination:N instanceof Error?N.message:String(N),persisted:!1}}}finally{c&&await Je()}}},_=n=>{const t=g(n),l=t===null?void 0:b().get(t);return B(l)?l.object:null},y=n=>({destination:n,persisted:!1}),T=async n=>{await Q(n);const t=n.map(v).filter(l=>l!==null);return t.length>0&&r.set(t),t[0]??""},G=()=>{const n=a.documentId?.replace(/^object3d-document:/,""),t=H().find(m=>m.documentId===n)?.rig().drawCamera()??null,l=e(),c=["bpy.ops.object.camera_add()","added = bpy.context.view_layer.objects.active"];return t!==null&&l!==null&&c.push("kept = added.location.copy()",`added.matrix_world = ${JSON.stringify(ye(t,l.root))}`,"added.location = kept"),c.push("if bpy.context.scene.camera is None:"," bpy.context.scene.camera = added"),c.join(`
|
|
5
|
+
`),{error:i}=await U(o);return i!==null?{destination:i,persisted:!1}:(await Q(e),{destination:`Blender — ${a}; the session saves the .blend`,persisted:!0})}const jt={source:"document",label:"blender",detail:"These rows are Blender's own View Layer tree, read from the engine through RNA. Editing the model is a bpy call; the eye and render columns write the engine directly."},yt="This collection is excluded from the view layer (LayerCollection.exclude), so its viewport visibility is not what is hiding it. Clear the Exclude checkbox on this row first.";function Oe(e){return({defaultAdapter:a})=>{const o=new Set;let i=[],u=null;const p=new Map,j=new Map,k=()=>{for(const n of[...o])n()},b=()=>X().byId,C=n=>{const t=b().get(n),l=e();return t===void 0||l===null?null:t.type==="TSE_VIEW_COLLECTION_BASE"?l.root:t.object===void 0?null:l.objectForBlenderName(t.object)},E=n=>{const t=e();if(t===null)return null;for(const l of b().values())if(B(l)&&t.objectForBlenderName(l.object)===n)return l.id;return null},v=n=>{for(const t of b().values())if(B(t)&&t.object===n)return t.id;return null},g=n=>{if(b().has(n))return n;const t=nt(a.hierarchy,n);return t===null?null:E(t)},x=n=>{const t=g(n);return t===null?null:C(t)},O=n=>{const t=x(n);return t===null?null:a.hierarchy.idForObject3D?.(t)??null},I={roots:()=>(Qe(F()),(X().tree?.rows??[]).map(t=>ge(t,null))),node:n=>{const t=X(),l=t.byId.has(n)?n:g(n),c=l===null?void 0:t.byId.get(l);return c===void 0?null:ge(c,t.parentOf.get(c.id)??null)},object3D:n=>x(n),idForObject3D:n=>E(n)};function F(){const n=b(),t=new Set;for(const l of i){const c=n.get(l)?.object;c!==void 0&&t.add(c)}return[...t]}const L=()=>{const n=[];for(const t of i){const l=x(t),c=l===null?null:a.hierarchy.idForObject3D?.(l);c&&n.push(c)}a.selection?.set(n,{intent:"exact"}),k()},M=()=>{const n=Ye(),t=`${oe()}\0${n.active??""}\0${[...n.selected].sort().join("")}`;if(t===u)return;u=t;const l=n.selected.filter(m=>m!==n.active);n.active!==null&&l.push(n.active);const c=l.map(v).filter(m=>m!==null);c.length===i.length&&c.every((m,w)=>m===i[w])||(i=c,L())},r={get:()=>[...i],set:n=>{i=n.map(g).filter(m=>m!==null),L();const t=b(),l=[],c=[];for(const m of i){const w=t.get(m),N=w?.object;N===void 0?c.push(w?.name??m):l.includes(N)||l.push(N)}c.length>0&&D().console.warn(`${c.join(", ")} ${c.length===1?"is":"are"} not an object, so Blender's object selection does not carry ${c.length===1?"it":"them"}. Selecting a collection sets the ACTIVE COLLECTION in Blender, which is its own gesture and not in this editor yet.`,"blender-outliner"),_t(l,l.length===0?null:l[l.length-1])}},s=n=>b().get(n)?.restrict,f={properties:n=>{const t=s(n);if(t===void 0)return[];const l=b().get(n),c=[{path:"name",label:"Name",type:"string",readonly:!B(l)}];return t.hide!==void 0&&c.push({path:"visible",label:"Show in Viewport",type:"boolean"}),t.render!==void 0&&c.push({path:"renderVisible",label:"Show in Renders",type:"boolean"}),t.exclude!==void 0&&c.push({path:"exclude",label:"Exclude from View Layer",type:"boolean"}),c},get:(n,t)=>{const l=b().get(n);if(l!==void 0){if(t==="name")return l.name;if(t==="visible")return l.restrict?.hide===void 0?void 0:!l.restrict.hide;if(t==="renderVisible")return l.restrict?.render===void 0?void 0:!l.restrict.render;if(t==="exclude")return l.restrict?.exclude}},editability:(n,t)=>{const l=b().get(n);return l===void 0?{writable:!1}:t==="name"?B(l)?{writable:!0}:{writable:!1,reason:`Renaming a ${l.struct??l.type} is not in this Outliner yet — only an object row renames here. Rename it with bpy.`}:l.notInCollection?{writable:!1,reason:"This row is a child drawn under its parent although it is not in that collection, and Blender's Outliner draws it no restriction columns."}:t==="visible"&&l.restrict?.exclude===!0?{writable:!1,reason:yt}:{writable:!0}},set:async(n,t,l)=>{const c=b().get(n);if(c===void 0)return;if(t==="name"){if(!B(c))return;const w=String(l);if(w===c.name||w.length===0)return;await fe(`bpy.data.objects[${V(c.object)}]`,"name",w),await Q([w]);const N=v(w);N!==null&&r.set([N]);return}if(t==="exclude"){await me(c.path,"exclude",l===!0);return}const m=t==="visible"?"hide":t==="renderVisible"?"render":null;m!==null&&await me(c.path,m,l===!1)}},S={get:n=>{const t=O(n);return(t===null?void 0:a.transforms?.get(t))??ut()},editability:n=>{const t=g(n),l=t===null?void 0:b().get(t);return B(l)&&C(l.id)!==null?{writable:!0}:{writable:!1,reason:`Only an object has a transform; this row is a ${l?.struct??l?.type??"row"}.`}},beginEdit:n=>{const t=x(n);t!==null&&!p.has(t)&&(p.set(t,t.matrixWorld.clone()),j.set(n,t),Xe())},apply:(n,t)=>{const l=x(n);l!==null&&(l.position.fromArray(t.position),l.quaternion.fromArray(t.rotation),l.scale.fromArray(t.scale),l.updateMatrix(),l.updateMatrixWorld(!0),e()?.mirrorPose?.(l))},endEdit:async n=>{const t=j.get(n)??x(n);j.delete(n);const l=e();if(t===null)return;const c=p.get(t);p.delete(t);try{if(l===null||(t.updateWorldMatrix(!0,!1),c?.equals(t.matrixWorld)===!0))return;const m=l.blenderObjectName(t);if(m===null)return;const w=`bpy.data.objects[${JSON.stringify(m)}]`;try{return await fe(w,"matrix_world",ye(t,l.root)),{destination:`Blender — ${w}.matrix_world; the session saves the .blend`,persisted:!0}}catch(N){return{destination:N instanceof Error?N.message:String(N),persisted:!1}}}finally{c&&await Je()}}},_=n=>{const t=g(n),l=t===null?void 0:b().get(t);return B(l)?l.object:null},y=n=>({destination:n,persisted:!1}),T=async n=>{await Q(n);const t=n.map(v).filter(l=>l!==null);return t.length>0&&r.set(t),t[0]??""},G=()=>{const n=a.documentId?.replace(/^object3d-document:/,""),t=H().find(m=>m.documentId===n)?.rig().drawCamera()??null,l=e(),c=["bpy.ops.object.camera_add()","added = bpy.context.view_layer.objects.active"];return t!==null&&l!==null&&c.push("kept = added.location.copy()",`added.matrix_world = ${JSON.stringify(ye(t,l.root))}`,"added.location = kept"),c.push("if bpy.context.scene.camera is None:"," bpy.context.scene.camera = added"),c.join(`
|
|
6
6
|
`)},A={creatableKinds:()=>Z().map(({kind:n,label:t})=>({kind:n,label:t})),create:n=>{const t=Z().find(c=>c.kind===n);if(t===void 0)return{id:"",ack:y(`${n} is not a row of Blender's Add menu that this editor adds. Its rows are: ${Z().map(c=>c.label).join(", ")}.`)};if(t.refusal!==void 0)return{id:"",ack:y(t.refusal)};const l=t.call==="object.camera_add"?G():mt(t);return{id:"",ack:(async()=>{const{made:c,error:m}=await U(l);return m!==null?y(m):c.length===0?y(`Blender ran ${l} and created nothing. The operator reported no error, so it cancelled — most often because it wanted a file browser or a context this headless engine has no window for.`):(await T(c),{destination:`Blender — ${l}; the session saves the .blend`,persisted:!0})})()}},remove:n=>A.removeMany?.([n])??void 0,removeMany:async n=>{const t=[];for(const w of n){const N=_(w);if(N===null){const ue=g(w)===null?void 0:b().get(g(w));return y(`Only an object can be deleted here; this row is a ${ue?.struct??ue?.type??"row"}. Deleting a collection, a modifier or a vertex group is that datablock’s own bpy call.`)}t.push(N)}if(t.length===0)return y("Nothing selected to delete.");const c=[`targets = ${`[bpy.data.objects[n] for n in [${t.map(V).join(", ")}]]`}`,"with bpy.context.temp_override(selected_objects=targets, active_object=targets[0]):"," result = bpy.ops.object.delete(use_global=False)",'if "FINISHED" not in result: raise RuntimeError("Blender cancelled deleting the selected objects")'].join(`
|
|
7
7
|
`),{error:m}=await U(c,"Delete Objects");return m!==null?y(m):(r.set([]),await Q([]),{destination:"Blender — bpy.ops.object.delete(use_global=False); the session saves the .blend",persisted:!0})},duplicate:n=>{const t=_(n);if(t===null)return{id:n,ack:y("Only an object can be duplicated here. Duplicating a collection is `bpy.ops.object.collection_instance_add`, its own gesture.")};const l=[`source = bpy.data.objects[${V(t)}]`,"with bpy.context.temp_override(selected_objects=[source], active_object=source):"," result = bpy.ops.object.duplicate(linked=False)",'if "FINISHED" not in result: raise RuntimeError("Blender cancelled duplicating the selected object")'].join(`
|
|
8
8
|
`);return{id:n,ack:(async()=>{const{made:c,error:m}=await U(l,"Duplicate Object");return m!==null?y(m):(await T(c),{destination:`Blender — bpy.ops.object.duplicate(linked=False) on ${t}; the session saves the .blend`,persisted:!0})})()}},duplicateMany:async n=>{const t=[...new Set(n.map(_))];if(t.length===0||t.some(w=>w===null))return y("Select objects to duplicate; collections and data rows cannot be duplicated here.");const l=[`sources = [bpy.data.objects[name] for name in ${JSON.stringify(t)}]`,"with bpy.context.temp_override(selected_objects=sources, active_object=sources[0]):"," result = bpy.ops.object.duplicate(linked=False)",'if "FINISHED" not in result: raise RuntimeError("Blender cancelled duplicating the selected objects")'].join(`
|
package/dist/assets/{blender-screenshot.menu-CZagx_wX.js → blender-screenshot.menu-Zh-gSLyF.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as s,t as n}from"./index-
|
|
1
|
+
import{r as s,t as n}from"./index-DyTgGJaV.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};
|
package/dist/assets/{blender-timeline.document-DzhgQIDL.js → blender-timeline.document-DNGYxSVR.js}
RENAMED
|
@@ -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-6IzekhAd.js";import{go as pe}from"./index-EO6Vl92s.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-CJwNrADC.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-B_xPBrsP.js";import"./hierarchy-marks-r1SCnl92.js";import"./workspace-arrangement-COs530TA.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 ve=20,T=23,ee=26,Te=16,Me=2,ke=T+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:ve,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="Nothing here is playable: no object in the scene carries an action this view could bind a mixer to.";function h(){return p.transport}function V(){return h()?.snapshot().playbackState==="playing"}function $(e){return G(e),v()}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 v(){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),v()):$("No stage transport is attached yet; open the model document first.")}pe({view:"timeline",title:Re,verbs:[{id:"state",run:()=>v()},{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(),v()}},{id:"pause",title:"Timeline: Pause",run:()=>{const e=h();return e?(e.pause(),v()):$("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?v():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?v():O(s)}},{id:"view-all",title:"Timeline: View All",run:()=>(le(),v())},{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}}),v()}},{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}}),v()}},...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=T,j=ke+Te/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:T,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:T,width:g.stalkWidth,height:Math.max(0,n.h-T),fill:x.playhead}),a.jsx("rect",{x:A-X/2,y:g.margin,width:X,height:T-2*g.margin,rx:g.radius,fill:x.playhead}),a.jsx("polygon",{points:`${A-g.tipHalfWidth},${T-g.margin} ${A+g.tipHalfWidth},${T-g.margin} ${A},${T-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-CU4ON8U6.js";import{go as pe}from"./index-DyTgGJaV.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-CbZll4j6.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-DbjVwafW.js";import"./hierarchy-marks-BUq91mYX.js";import"./workspace-arrangement-Dl7Q2V4T.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 ve=20,T=23,ee=26,Te=16,Me=2,ke=T+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:ve,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="Nothing here is playable: no object in the scene carries an action this view could bind a mixer to.";function h(){return p.transport}function V(){return h()?.snapshot().playbackState==="playing"}function $(e){return G(e),v()}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 v(){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),v()):$("No stage transport is attached yet; open the model document first.")}pe({view:"timeline",title:Re,verbs:[{id:"state",run:()=>v()},{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(),v()}},{id:"pause",title:"Timeline: Pause",run:()=>{const e=h();return e?(e.pause(),v()):$("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?v():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?v():O(s)}},{id:"view-all",title:"Timeline: View All",run:()=>(le(),v())},{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}}),v()}},{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}}),v()}},...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=T,j=ke+Te/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:T,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:T,width:g.stalkWidth,height:Math.max(0,n.h-T),fill:x.playhead}),a.jsx("rect",{x:A-X/2,y:g.margin,width:X,height:T-2*g.margin,rx:g.radius,fill:x.playhead}),a.jsx("polygon",{points:`${A-g.tipHalfWidth},${T-g.margin} ${A+g.tipHalfWidth},${T-g.margin} ${A},${T-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-
|
|
1
|
+
import{a as u}from"./jsx-runtime-DPjLkJKQ.js";import{go as le}from"./index-DyTgGJaV.js";import{r as c}from"./index-nmcBqr7Y.js";import{s as ue,b as X,j as de}from"./blender-runtime-host-CbZll4j6.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-DbjVwafW.js";import"./hierarchy-marks-BUq91mYX.js";import"./workspace-arrangement-Dl7Q2V4T.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};
|
package/dist/assets/{blender-version.status-BkFPoDDf.js → blender-version.status-Csf1NdCu.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as e}from"./jsx-runtime-DPjLkJKQ.js";import{r as o}from"./index-
|
|
1
|
+
import{a as e}from"./jsx-runtime-DPjLkJKQ.js";import{r as o}from"./index-DyTgGJaV.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-
|
|
1
|
+
import{h as t}from"./blender-runtime-host-CbZll4j6.js";import"./index-DyTgGJaV.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-DbjVwafW.js";import"./hierarchy-marks-BUq91mYX.js";import"./workspace-arrangement-Dl7Q2V4T.js";const D="workspace.command",e=(o,n)=>({...n===void 0?{}:{timeoutMs:n},derivedRefresh:o,handle:r=>t(r)}),E={"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-
|
|
1
|
+
import{aC as _}from"./index-DyTgGJaV.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};
|