@volter/cyclotron 0.0.0-stage → 0.5.191
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 +6877 -0
- package/LICENSE +670 -0
- package/LICENSE-BLENDER +1409 -0
- package/LICENSE-MCP +21 -0
- package/NOTICE +20 -0
- package/README.md +91 -2
- package/dist/.vite/manifest.json +5432 -0
- package/dist/assets/BVHLoader-Dxn1IBPh.js +1 -0
- package/dist/assets/ColladaLoader-FWjhft-R.js +3 -0
- package/dist/assets/EntityModelDocument-H5MGTLgY.js +1 -0
- package/dist/assets/EnvironmentAssetDocument-DscnToFv.js +1 -0
- package/dist/assets/FBXLoader-B6D0-2sM.js +1 -0
- package/dist/assets/InspectorObjectPreview-DmgzscPS.js +1 -0
- package/dist/assets/LineSegments2-D1_2s-N-.js +370 -0
- package/dist/assets/LiveModuleDocument-DAYkZerk.js +2 -0
- package/dist/assets/LutAssetDocument-B7CFf1iQ.js +1 -0
- package/dist/assets/MTLLoader-BwtVpZY2.js +2 -0
- package/dist/assets/ModelAssetDocument-C3AYQW5D.js +1 -0
- package/dist/assets/NonThreeAuthoringBootstrap-BnkHNgwT.js +1 -0
- package/dist/assets/OBJLoader-Cwe-BN99.js +5 -0
- package/dist/assets/Object3DDocumentToolbar-6iKyx5P7.js +1 -0
- package/dist/assets/Object3DPreview-CVsX3Ez6.js +2 -0
- package/dist/assets/OrbitControls-Cn2q_IQK.js +1 -0
- package/dist/assets/PLYLoader-DOl6qb2a.js +2 -0
- package/dist/assets/QuarksAssetDocument-BrUx0sFF.js +2 -0
- package/dist/assets/RectAreaLightUniformsLib-CobhIWNK.js +1 -0
- package/dist/assets/STLLoader-B5YpfCGT.js +1 -0
- package/dist/assets/ShaderAssetDocument-8fZCtoKv.js +1 -0
- package/dist/assets/StageHost-CM6pXufo.js +1179 -0
- package/dist/assets/TDSLoader-BdQ2M2WU.js +1 -0
- package/dist/assets/ToolObject3DPreview-BY-w2JDK.js +1 -0
- package/dist/assets/ViewportShadingMenu-BcSW0SdM.js +1 -0
- package/dist/assets/animation-mixers.service-Dh2f8bk9.js +1 -0
- package/dist/assets/animation-timeline.utility-DTZfezuF.js +1 -0
- package/dist/assets/anthropic-DwpKRVGM.svg +1 -0
- package/dist/assets/asset-preview-BCSH6zvx.js +4 -0
- package/dist/assets/blender-display-shaders-BpnqnkG8.lut +0 -0
- package/dist/assets/blender-emscripten-engine-DEk9HdR1.js +2 -0
- package/dist/assets/blender-motion-worker-CtT2cV3V.js +1 -0
- package/dist/assets/blender-node-editor.document-sTxATkra.js +1 -0
- package/dist/assets/blender-properties-model-DG3h6RbJ.js +1 -0
- package/dist/assets/blender-properties-tab-kS_hNbKV.js +3 -0
- package/dist/assets/blender-runtime-host-CJ3l04y8.js +17 -0
- package/dist/assets/blender-runtime.document-CIJypNav.js +13 -0
- package/dist/assets/blender-screenshot.menu-B0WniIkP.js +1 -0
- package/dist/assets/blender-timeline.document-CCIcBTnZ.js +1 -0
- package/dist/assets/blender-uv-editor.document-CENezQQk.js +1 -0
- package/dist/assets/blender-version.status-aS3tabn9.js +1 -0
- package/dist/assets/blender-wali-engine-D2ymLooc.js +2 -0
- package/dist/assets/blender.command-Cl2XnwrS.js +1 -0
- package/dist/assets/blender.environment-CG-pC7sk.js +1 -0
- package/dist/assets/blender.keymap-BmOBRY7p.js +1 -0
- package/dist/assets/blender.status-BgdpgL9J.js +1 -0
- package/dist/assets/blender.style-DaIh9SiA.js +1 -0
- package/dist/assets/city-EkhAOo5s.exr +0 -0
- package/dist/assets/clip-planes-CmZu3QTO.js +8 -0
- package/dist/assets/content-bounds-Dg9hT5Gp.js +85 -0
- package/dist/assets/courtyard-DqlebbpC.exr +0 -0
- package/dist/assets/forest-P_CQY3b_.exr +0 -0
- package/dist/assets/icon-BkiLD9ed.png +0 -0
- package/dist/assets/index-7vd2obXq.js +3 -0
- package/dist/assets/index-BP6wv2A0.js +5 -0
- package/dist/assets/index-BRLA7zdc.js +7 -0
- package/dist/assets/index-BxW3iIJI.js +952 -0
- package/dist/assets/index-CnvSS9lU.js +2 -0
- package/dist/assets/index-DYNMP0kE.js +1 -0
- package/dist/assets/index-Dz8qGBZc.js +13 -0
- package/dist/assets/index-Fv4R0cYr.js +1 -0
- package/dist/assets/index-f-MQ14bP.js +1 -0
- package/dist/assets/index-ux8XhRyW.js +1 -0
- package/dist/assets/interior-Bo_lba15.exr +0 -0
- package/dist/assets/live-mixers-B-bwLZ7c.js +1 -0
- package/dist/assets/model-inspection-D_Z7lPhp.js +1 -0
- package/dist/assets/model.layout-BpZE1W9V.js +1 -0
- package/dist/assets/models.finder-n0qYfNhP.js +1 -0
- package/dist/assets/night-CvV4Gybt.exr +0 -0
- package/dist/assets/object3d-document-session-registry-Dso-3DdQ.js +2 -0
- package/dist/assets/openai-DHNKzFtc.svg +1 -0
- package/dist/assets/play-mode-CB-BAREv.js +7208 -0
- package/dist/assets/png-encode.worker-E8zk28Vl.js +1 -0
- package/dist/assets/product-2FMfCeKv.js +14 -0
- package/dist/assets/product-BxXXdFxI.css +1 -0
- package/dist/assets/properties-bone-constraints.inspector-DPD94zpc.js +1 -0
- package/dist/assets/properties-bone.inspector-CDYgJFMb.js +1 -0
- package/dist/assets/properties-collection.inspector-Bc7-DzEi.js +1 -0
- package/dist/assets/properties-constraints.inspector-CnyXcr_p.js +1 -0
- package/dist/assets/properties-data.inspector-Y9trp74x.js +1 -0
- package/dist/assets/properties-material.inspector-DKW8fWHF.js +1 -0
- package/dist/assets/properties-modifiers.inspector-CCxaKRAi.js +1 -0
- package/dist/assets/properties-object.inspector-DHCzFViD.js +1 -0
- package/dist/assets/properties-output.inspector-Jcvyw8r-.js +1 -0
- package/dist/assets/properties-particles.inspector-DHrpt9YM.js +1 -0
- package/dist/assets/properties-physics.inspector-BdCSY9ed.js +1 -0
- package/dist/assets/properties-render.inspector-DPNhVHyH.js +1 -0
- package/dist/assets/properties-scene.inspector-BEyWMESu.js +1 -0
- package/dist/assets/properties-texture.inspector-BDAHphbo.js +1 -0
- package/dist/assets/properties-view-layer.inspector-Dd1R2c8y.js +1 -0
- package/dist/assets/properties-world.inspector-GA10_Q2q.js +1 -0
- package/dist/assets/react-18-DLRa6EBJ.js +1 -0
- package/dist/assets/regions-DWeEBnE2.js +1 -0
- package/dist/assets/sculpt.layout-D-K5cLw6.js +1 -0
- package/dist/assets/session-C0OdhDD8.js +5393 -0
- package/dist/assets/shading.layout-CZZHKBer.js +1 -0
- package/dist/assets/sky-precompute-worker-CPGW9t_C.js +1 -0
- package/dist/assets/spark.module-GpLuSFtI.js +12120 -0
- package/dist/assets/stage-keyboard-DQMRbQSk.js +1 -0
- package/dist/assets/stage-overlay-set-BjkX6NS2.js +1 -0
- package/dist/assets/stage-presence-markers-BLzWksKB.js +1 -0
- package/dist/assets/stage-transform-tools-CmCouHjc.js +1 -0
- package/dist/assets/standard-viewport-dressing-tRKYG-Oe.js +24 -0
- package/dist/assets/studio-CysTBGIb.exr +0 -0
- package/dist/assets/sunrise-Dj0psFrf.exr +0 -0
- package/dist/assets/sunset-Bw3x2Bot.exr +0 -0
- package/dist/assets/texture.layout-DASpHVht.js +1 -0
- package/dist/assets/three-integration.service-CZBtvpOJ.js +2 -0
- package/dist/assets/three.module-dk_BdrjN.js +3840 -0
- package/dist/assets/uv-editing.layout-A8RA-cbM.js +1 -0
- package/dist/assets/volter-sdk-CTPCkGXt.js +2358 -0
- package/dist/assets/volter-sdk-account-C7TbJeFz.js +1 -0
- package/dist/assets/volter-sdk-client-DTdXvoMD.js +1 -0
- package/dist/assets/volter-sdk-contributions-eo4CPh2p.js +1 -0
- package/dist/assets/volter-sdk-css-numeric-style-Ttf_8Kmw.js +1 -0
- package/dist/assets/volter-sdk-document-probe-uMZJqaXu.js +1 -0
- package/dist/assets/volter-sdk-editor-view-CRZQicqm.js +1 -0
- package/dist/assets/volter-sdk-host-B-zxfcPu.js +1 -0
- package/dist/assets/volter-sdk-http-transport.browser-DPW20rVu.js +1 -0
- package/dist/assets/volter-sdk-index-Cb7Yywg-.js +1 -0
- package/dist/assets/volter-sdk-kit-CapabilityCoverageSection-D0IDzMdi.js +1 -0
- package/dist/assets/volter-sdk-kit-account-client-BcyEmaPH.js +1 -0
- package/dist/assets/volter-sdk-kit-action-registry-DriAF6Sc.js +1 -0
- package/dist/assets/volter-sdk-kit-active-product-r7jCIax2.js +1 -0
- package/dist/assets/volter-sdk-kit-active-project-Cjf4pJ6J.js +1 -0
- package/dist/assets/volter-sdk-kit-adapter-editor-config-BaNyB8ig.js +1 -0
- package/dist/assets/volter-sdk-kit-adapter-observation-V71hItcC.js +1 -0
- package/dist/assets/volter-sdk-kit-animation-animation-clock-DmeLqo0W.js +1 -0
- package/dist/assets/volter-sdk-kit-animation-stage-transport-BaD_Lz7M.js +1 -0
- package/dist/assets/volter-sdk-kit-api-assets-D9KgHTyt.js +1 -0
- package/dist/assets/volter-sdk-kit-api-base-DH9EkQUe.js +1 -0
- package/dist/assets/volter-sdk-kit-api-build-DHp-caUc.js +1 -0
- package/dist/assets/volter-sdk-kit-api-logs-DLGBnX6D.js +1 -0
- package/dist/assets/volter-sdk-kit-api-project-identity-Ce2bcNI8.js +1 -0
- package/dist/assets/volter-sdk-kit-api-project-open-BUoW4R4G.js +1 -0
- package/dist/assets/volter-sdk-kit-api-project-source-D_ZKYf7K.js +1 -0
- package/dist/assets/volter-sdk-kit-api-project-state-fp96KH-b.js +1 -0
- package/dist/assets/volter-sdk-kit-api-relay-Da3eSdYq.js +1 -0
- package/dist/assets/volter-sdk-kit-api-settings-7nqXhmRG.js +1 -0
- package/dist/assets/volter-sdk-kit-api-themes-CcJT4tNc.js +1 -0
- package/dist/assets/volter-sdk-kit-api-worktrees-BPery5as.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-capabilities-B0ay5F3v.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-compare-core-BRjsa1JH.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-editor-context-QSJFkrTF.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-events-DhC-oWIc.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-inspector-actions-DOGzxnKO.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-selection-D3iKMZhc.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-selection-viewer-registry-iSjetPTF.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-thumbnails-B-rnrR4e.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-viewers-DW_B6mUz.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-workflow-asset-import-jobs-zpDDAGhi.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-workflow-asset-ledger-BLvGK5K9.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-workflow-asset-ledger-backend-R_sMRJxQ.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-workflow-asset-materialization-report-Cu8PzcuH.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-workflow-asset-pack-manifest-CykYNw93.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-workflow-audio-preview-player-DisMJvNX.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-workflow-audio-waveform-DaE4b6q5.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-workflow-cloud-asset-client-BA2DspQh.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-workflow-hosted-asset-materialization-CAs2DnB-.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-workflow-image-view-scale-CKGz1teu.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-workflow-ledger-write-lock-CUSx23CF.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-workflow-pixi-spritesheet-20DVa19-.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-workflow-preview-resource-lifetime-9aCVJ5ZD.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-workflow-project-asset-commands-D9rsm7id.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-workflow-project-content-MiELo_O1.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-workflow-thumbnail-system-C2_qZtHy.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-active-adapter-CF9u3FRf.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-active-systems-BHJmeKT1.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-adapter-key-Crk3ASvv.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-authoring-asset-url-DG5Fxmhm.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-bootstrap-state-B0nbQdGo.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-boundary-authoring-adapter-CeQy5qiB.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-canvas-scene-guides-1JIcdD37.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-composite-authoring-adapter-B92Z3v81.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-consumer-actions-VKZPMDF4.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-design-time-layers-CjdjzFCK.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-design-time-mount-registry-Dj9yuM04.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-edit-mode-authoring-7WjAL2FS.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-empty-project-authoring-Cl7rnMX7.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-instance-source-menu-D3W4NqNC.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-layered-pick-BdohFxNz.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-mounted-root-subjects-Djn9pHUW.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-no-authoring-adapter-B7eiKgrk.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-object3d-document-persistence-DLcEQvHq.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-panel-authoring-gK-CPiH6.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-project-authoring-session-uHS0CYvK.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-provenance-D-BET8RO.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-react-canvas-navigation-B60IffcY.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-react-design-canvas-style-ks9HoOST.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-react-story-board-C_LkOQ31.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-seam-evidence-Cs2OD8Mp.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-selection-scope-BBRJ_LYX.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-shell-document-ops-BgFY_dTi.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-story-board-chrome-fit-DBmpy3fX.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-three-root-DcfxyBfe.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-viewport-tool-context-iBDEmcv0.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-viewport-tool-owner-B_6F6Tjj.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-world-session-state-D5dzuuRn.js +1 -0
- package/dist/assets/volter-sdk-kit-availability-tick-CY8If63r.js +1 -0
- package/dist/assets/volter-sdk-kit-bitmap-label-Beh0HDVB.js +1 -0
- package/dist/assets/volter-sdk-kit-boot-routing-BJca1uda.js +1 -0
- package/dist/assets/volter-sdk-kit-breakpoint-state-CNWGaLfG.js +1 -0
- package/dist/assets/volter-sdk-kit-build-identity-BBdzUzJV.js +1 -0
- package/dist/assets/volter-sdk-kit-bytes-codec-DLFzHQUN.js +1 -0
- package/dist/assets/volter-sdk-kit-cancellation-reason-BH7-0ZVf.js +1 -0
- package/dist/assets/volter-sdk-kit-canvas-frames-BieYMTcU.js +1 -0
- package/dist/assets/volter-sdk-kit-capture-camera-pose-CHUoNB6d.js +1 -0
- package/dist/assets/volter-sdk-kit-capture-size-CAnl2oe2.js +1 -0
- package/dist/assets/volter-sdk-kit-chrome-registry-MC5H7QaT.js +1 -0
- package/dist/assets/volter-sdk-kit-chrome-slot-registry-0ZLiAfjQ.js +1 -0
- package/dist/assets/volter-sdk-kit-collaboration-client-BuG6oS42.js +1 -0
- package/dist/assets/volter-sdk-kit-collaboration-presence-De8jBlkX.js +1 -0
- package/dist/assets/volter-sdk-kit-command-dispatch-k9Qre0zs.js +1 -0
- package/dist/assets/volter-sdk-kit-command-listener-BCAbvhi5.js +1 -0
- package/dist/assets/volter-sdk-kit-command-registry-DhoVVzF5.js +1 -0
- package/dist/assets/volter-sdk-kit-component-board-registry-BeICFKFG.js +1 -0
- package/dist/assets/volter-sdk-kit-component-states-registry-QdCQHRDN.js +1 -0
- package/dist/assets/volter-sdk-kit-components-AlignToolbar-UuSLtczL.js +1 -0
- package/dist/assets/volter-sdk-kit-components-ApplicationMenus-DRnMid6h.js +1 -0
- package/dist/assets/volter-sdk-kit-components-AssetEditorShell-k_gEaNs8.js +1 -0
- package/dist/assets/volter-sdk-kit-components-AssetInspectorToolSection-CgmL27Qf.js +1 -0
- package/dist/assets/volter-sdk-kit-components-BoardRulers-DaINv5KN.js +1 -0
- package/dist/assets/volter-sdk-kit-components-CanvasAddNodeDialogs-D33j4CtY.js +1 -0
- package/dist/assets/volter-sdk-kit-components-CanvasSceneViewport-U0vUe3Gh.js +1 -0
- package/dist/assets/volter-sdk-kit-components-ChromeSlot-Di70MjzD.js +1 -0
- package/dist/assets/volter-sdk-kit-components-CodeView-Dw9qSGfW.js +1 -0
- package/dist/assets/volter-sdk-kit-components-CompactInspectorShell-BSaITVHL.js +1 -0
- package/dist/assets/volter-sdk-kit-components-ConsolePanel-CBX_j1sn.js +1 -0
- package/dist/assets/volter-sdk-kit-components-GameplaySessionTimeline-D_SOr8n1.js +1 -0
- package/dist/assets/volter-sdk-kit-components-InspectionProjection-BjmRH40i.js +1 -0
- package/dist/assets/volter-sdk-kit-components-Inspector-Bo9BYgAQ.js +1 -0
- package/dist/assets/volter-sdk-kit-components-InspectorCanvasPreview-C2U561Ms.js +1 -0
- package/dist/assets/volter-sdk-kit-components-InspectorFieldsSection-CKikcRO-.js +1 -0
- package/dist/assets/volter-sdk-kit-components-InspectorStoriesSection-CamEatgb.js +1 -0
- package/dist/assets/volter-sdk-kit-components-InspectorToolSection-qZTCY7B0.js +1 -0
- package/dist/assets/volter-sdk-kit-components-InspectorTransformSection-C1QrGase.js +1 -0
- package/dist/assets/volter-sdk-kit-components-LightExplorerPanel-D0XCAqj9.js +1 -0
- package/dist/assets/volter-sdk-kit-components-MediaProperties-CdL2K3l0.js +1 -0
- package/dist/assets/volter-sdk-kit-components-ProjectHeader-Ds2BEQBR.js +1 -0
- package/dist/assets/volter-sdk-kit-components-ReactCanvasControls-B-lQR6dk.js +1 -0
- package/dist/assets/volter-sdk-kit-components-RootSelectionOverlay-DL06pAbx.js +1 -0
- package/dist/assets/volter-sdk-kit-components-RootTextEditor-NXARIgKP.js +1 -0
- package/dist/assets/volter-sdk-kit-components-SaveStatus-D9k5E7Hu.js +1 -0
- package/dist/assets/volter-sdk-kit-components-SurfaceStateOverlay-B1204CGs.js +1 -0
- package/dist/assets/volter-sdk-kit-components-ToolContributionSurfaces-Dg-KoCOj.js +1 -0
- package/dist/assets/volter-sdk-kit-components-ToolHost-CQQFzB8P.js +1 -0
- package/dist/assets/volter-sdk-kit-components-Toolbar-B84RxD-H.js +1 -0
- package/dist/assets/volter-sdk-kit-components-TransientHint-Dm4X7E6D.js +1 -0
- package/dist/assets/volter-sdk-kit-components-VersionControlSection-fex1-uEJ.js +1 -0
- package/dist/assets/volter-sdk-kit-components-ViewportOverlaysMenu-BMtIjudq.js +1 -0
- package/dist/assets/volter-sdk-kit-components-VolterLogo-CtJX1fLJ.js +1 -0
- package/dist/assets/volter-sdk-kit-components-WorktreeSwitcher-I5L1eMS3.js +1 -0
- package/dist/assets/volter-sdk-kit-components-account-documents-Dlh8Fj4d.js +1 -0
- package/dist/assets/volter-sdk-kit-components-asset-documents-BGNKcXN5.js +1 -0
- package/dist/assets/volter-sdk-kit-components-asset-editor-persistence-DYf1sB59.js +1 -0
- package/dist/assets/volter-sdk-kit-components-asset-selection-section-DTX5bWfY.js +1 -0
- package/dist/assets/volter-sdk-kit-components-asset-thumbnails-CMcb7LxE.js +1 -0
- package/dist/assets/volter-sdk-kit-components-asset-viewers-AudioViewer-hYej0it1.js +1 -0
- package/dist/assets/volter-sdk-kit-components-asset-viewers-GenericJsonViewer-C29xbyEa.js +1 -0
- package/dist/assets/volter-sdk-kit-components-asset-viewers-ImageViewer-DKm5c9pQ.js +1 -0
- package/dist/assets/volter-sdk-kit-components-asset-viewers-JsonAssetDocument-DlKL0CIE.js +1 -0
- package/dist/assets/volter-sdk-kit-components-asset-viewers-OnlineAssetDetail-C4m5ChIc.js +1 -0
- package/dist/assets/volter-sdk-kit-components-asset-viewers-SourceAssetViewer-C14y3ihh.js +1 -0
- package/dist/assets/volter-sdk-kit-components-asset-viewers-SpritesheetSpriteView-CKB0yNjt.js +1 -0
- package/dist/assets/volter-sdk-kit-components-asset-viewers-VideoViewer-BDVR2s-T.js +1 -0
- package/dist/assets/volter-sdk-kit-components-asset-viewers-shader-source-DQ40_HIV.js +1 -0
- package/dist/assets/volter-sdk-kit-components-board-guides-vzj1_mB_.js +1 -0
- package/dist/assets/volter-sdk-kit-components-canvas-scene-hotkeys-BfUtoRtR.js +1 -0
- package/dist/assets/volter-sdk-kit-components-canvas-temporary-pivot-BOXeKsL_.js +1 -0
- package/dist/assets/volter-sdk-kit-components-core-utilities-2xqqv2Xj.js +1 -0
- package/dist/assets/volter-sdk-kit-components-inspector-preview-section-CIf6SZcH.js +1 -0
- package/dist/assets/volter-sdk-kit-components-inspector-revert-label-CB8zytBo.js +1 -0
- package/dist/assets/volter-sdk-kit-components-inspector-selection-B7qYFl9c.js +1 -0
- package/dist/assets/volter-sdk-kit-components-inspector-stories-gating-BBT6jLKq.js +1 -0
- package/dist/assets/volter-sdk-kit-components-inspector-transform-DfBSTsjH.js +1 -0
- package/dist/assets/volter-sdk-kit-components-inspector-transform-subject-BNvFtyig.js +1 -0
- package/dist/assets/volter-sdk-kit-components-kind-documents-Cz1AqKrb.js +1 -0
- package/dist/assets/volter-sdk-kit-components-primitives-DraftColorInput-2RRfpNhD.js +1 -0
- package/dist/assets/volter-sdk-kit-components-project-tool-documents-Baw6UVeU.js +1 -0
- package/dist/assets/volter-sdk-kit-components-scene-documents-Dp2nxLO5.js +1 -0
- package/dist/assets/volter-sdk-kit-components-status-contributions-0AL287G7.js +1 -0
- package/dist/assets/volter-sdk-kit-components-tool-documents-SxZNqv0G.js +1 -0
- package/dist/assets/volter-sdk-kit-components-tool-schema-form-CBlMD0L5.js +1 -0
- package/dist/assets/volter-sdk-kit-components-use-after-paint-HjJYZ8Gz.js +1 -0
- package/dist/assets/volter-sdk-kit-components-use-project-image-assets-BGRscgk_.js +1 -0
- package/dist/assets/volter-sdk-kit-components-workspace-history-BdMvmkrA.js +1 -0
- package/dist/assets/volter-sdk-kit-components-world-documents-BuIe0TVS.js +1 -0
- package/dist/assets/volter-sdk-kit-components-world-overlay-gestures-BKlVnBSH.js +1 -0
- package/dist/assets/volter-sdk-kit-composite-screenshot-ClRYm_mt.js +1 -0
- package/dist/assets/volter-sdk-kit-content-entry-source-registry-BTxRwbHZ.js +1 -0
- package/dist/assets/volter-sdk-kit-contribution-surfaces-BBsj68Wz.js +1 -0
- package/dist/assets/volter-sdk-kit-coverage-canvas-reveal-CPo5_e0H.js +1 -0
- package/dist/assets/volter-sdk-kit-coverage-design-time-surfaces-CZyb5EH5.js +1 -0
- package/dist/assets/volter-sdk-kit-coverage-ontology-invariants-Blt31TSP.js +1 -0
- package/dist/assets/volter-sdk-kit-coverage-session-vitals-Da5QSNR9.js +1 -0
- package/dist/assets/volter-sdk-kit-creation-site-registry-wwmnNA8H.js +1 -0
- package/dist/assets/volter-sdk-kit-delegate-harness-registry-DZhtG99C.js +1 -0
- package/dist/assets/volter-sdk-kit-document-areas-D660d1pQ.js +1 -0
- package/dist/assets/volter-sdk-kit-document-context-registry-C7A14BNb.js +1 -0
- package/dist/assets/volter-sdk-kit-document-open-registry-o7VHt0RE.js +1 -0
- package/dist/assets/volter-sdk-kit-document-play-extension-DnympyQy.js +1 -0
- package/dist/assets/volter-sdk-kit-document-preview-source-BIfEWYvh.js +1 -0
- package/dist/assets/volter-sdk-kit-document-renderer-session-BAoAh3oc.js +1 -0
- package/dist/assets/volter-sdk-kit-document-stage-sessions-rp-lUOf7.js +1 -0
- package/dist/assets/volter-sdk-kit-document-viewports-nfnBmvxp.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-api-B4otzopy.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-chrome-capture-CWmg17HP.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-commands-cJDgiqAt.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-console-DPkmRwd6.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-current-view-DxGCw3Wd.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-document-probe-CN2yr1kY.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-git-client-B46cp3L1.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-hotkeys-Dce3EYk2.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-lease-BN3_7vDZ.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-lease-view-C8WlPz7s.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-mode-B5EZmrCR.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-notifications-sTGM7WtH.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-presence-BHriH9Fy.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-presentation-activity-CmD9eBZ_.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-presentation-notice-Decyhm66.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-runtime-DHQJcaKd.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-server-response-BkWelHzj.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-session-attribution-BR9UWdR6.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-session-mode-hqIWdf2B.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-state-facets-bvq2P7SA.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-view-presentation-DLOWDzzy.js +1 -0
- package/dist/assets/volter-sdk-kit-environment-images-oMeHjbDw.js +1 -0
- package/dist/assets/volter-sdk-kit-eyedropper-session-DWAa-Biy.js +1 -0
- package/dist/assets/volter-sdk-kit-files-file-provider-U0Hd4ukx.js +1 -0
- package/dist/assets/volter-sdk-kit-files-project-files-4-kjPKJS.js +1 -0
- package/dist/assets/volter-sdk-kit-finders-index-CII4_28l.js +1 -0
- package/dist/assets/volter-sdk-kit-finders-scenes-from-entrypoint-selection-B8hycBye.js +1 -0
- package/dist/assets/volter-sdk-kit-frame-frame-parts-D-8Ffbnn.js +1 -0
- package/dist/assets/volter-sdk-kit-framed-document-capture-xuaTlR2W.js +1 -0
- package/dist/assets/volter-sdk-kit-game-surface-defaults-DMPYj1cL.js +1 -0
- package/dist/assets/volter-sdk-kit-gameplay-export-state-DwPVbG_z.js +1 -0
- package/dist/assets/volter-sdk-kit-gameplay-replay-YQ9HaJ4D.js +1 -0
- package/dist/assets/volter-sdk-kit-gameplay-session-time-CHjy5x0w.js +1 -0
- package/dist/assets/volter-sdk-kit-gameplay-sessions-DVNFi3db.js +1 -0
- package/dist/assets/volter-sdk-kit-hierarchy-component-marks-BO6QFbcg.js +1 -0
- package/dist/assets/volter-sdk-kit-hierarchy-internals-DHl0iE2O.js +1 -0
- package/dist/assets/volter-sdk-kit-hierarchy-kind-icon-CsQB7hVX.js +1 -0
- package/dist/assets/volter-sdk-kit-hierarchy-menu-registry-BqwYB4wh.js +1 -0
- package/dist/assets/volter-sdk-kit-hierarchy-node-rows-SGt4wx3-.js +1 -0
- package/dist/assets/volter-sdk-kit-hierarchy-panel-view-j1CZFQrR.js +1 -0
- package/dist/assets/volter-sdk-kit-hierarchy-projection-DlD5Ge3J.js +1 -0
- package/dist/assets/volter-sdk-kit-hierarchy-row-media-C8NlC6Zs.js +1 -0
- package/dist/assets/volter-sdk-kit-hierarchy-row-model-CsxqvCkr.js +1 -0
- package/dist/assets/volter-sdk-kit-hierarchy-rows-B6vFr7fv.js +1 -0
- package/dist/assets/volter-sdk-kit-hierarchy-walk-BSorleKV.js +1 -0
- package/dist/assets/volter-sdk-kit-history-editor-session-Ch7Rju03.js +1 -0
- package/dist/assets/volter-sdk-kit-history-history-commands-DHfC2eEE.js +1 -0
- package/dist/assets/volter-sdk-kit-history-history-delegate-d1VrRfJ_.js +1 -0
- package/dist/assets/volter-sdk-kit-history-history-limit-notices-Cz_aUVbj.js +1 -0
- package/dist/assets/volter-sdk-kit-history-history-service-DQuzGZjj.js +1 -0
- package/dist/assets/volter-sdk-kit-history-persistence-coordinator-B_IHVPkm.js +1 -0
- package/dist/assets/volter-sdk-kit-history-project-file-history-Carvs4Xw.js +1 -0
- package/dist/assets/volter-sdk-kit-history-project-root-history-backends-BLD_AY74.js +1 -0
- package/dist/assets/volter-sdk-kit-history-resource-registry-CNjNiuSL.js +1 -0
- package/dist/assets/volter-sdk-kit-history-snapshot-store-CJSmgzLO.js +1 -0
- package/dist/assets/volter-sdk-kit-history-source-history-backend-Dl_iBeRi.js +1 -0
- package/dist/assets/volter-sdk-kit-hmr-registration-group-CXyUJGHt.js +1 -0
- package/dist/assets/volter-sdk-kit-hmr-stable-react-context-CcADd8vA.js +1 -0
- package/dist/assets/volter-sdk-kit-hotkeys-B5mfvdNj.js +1 -0
- package/dist/assets/volter-sdk-kit-inference-diagnostics-CKudL-Hd.js +1 -0
- package/dist/assets/volter-sdk-kit-initial-project-DxdY28Kn.js +1 -0
- package/dist/assets/volter-sdk-kit-inspection-active-subject-ayxYCqDa.js +1 -0
- package/dist/assets/volter-sdk-kit-inspection-active-surface-BU9dpZgu.js +1 -0
- package/dist/assets/volter-sdk-kit-inspection-compose-subject-qD3qBc4d.js +1 -0
- package/dist/assets/volter-sdk-kit-inspection-display-C5PF41kk.js +1 -0
- package/dist/assets/volter-sdk-kit-inspection-document-subject-C7wKxaTC.js +1 -0
- package/dist/assets/volter-sdk-kit-inspection-game-subject-DbMHqpER.js +1 -0
- package/dist/assets/volter-sdk-kit-inspection-model-7J8bEzro.js +1 -0
- package/dist/assets/volter-sdk-kit-inspection-node-media-CsqEbnmq.js +1 -0
- package/dist/assets/volter-sdk-kit-inspection-null-subject-DZbH2nfV.js +1 -0
- package/dist/assets/volter-sdk-kit-inspection-serialize-BRjHRzyv.js +1 -0
- package/dist/assets/volter-sdk-kit-inspection-use-active-inspection-BwlJ4cum.js +1 -0
- package/dist/assets/volter-sdk-kit-inspector-presentation-BAs9sxmj.js +1 -0
- package/dist/assets/volter-sdk-kit-inspector-property-grouping-BMPF_r1R.js +1 -0
- package/dist/assets/volter-sdk-kit-inspector-section-registry-sIu0cDZ3.js +1 -0
- package/dist/assets/volter-sdk-kit-instance-source-actions-CuCpNP44.js +1 -0
- package/dist/assets/volter-sdk-kit-js-heap-33ODHy-d.js +1 -0
- package/dist/assets/volter-sdk-kit-key-actions-CsRondgE.js +1 -0
- package/dist/assets/volter-sdk-kit-keymap-presets-AscUFBGG.js +1 -0
- package/dist/assets/volter-sdk-kit-layout-policy-CWNvk4YG.js +1 -0
- package/dist/assets/volter-sdk-kit-light-explorer-model-DtNXjPVL.js +1 -0
- package/dist/assets/volter-sdk-kit-live-canvas-frame-BjCbO1ip.js +1 -0
- package/dist/assets/volter-sdk-kit-live-document-DcKqP5Vm.js +1 -0
- package/dist/assets/volter-sdk-kit-live-gesture-lock-D8Xw-crH.js +1 -0
- package/dist/assets/volter-sdk-kit-live-seam-evidence-BFvKDVcA.js +1 -0
- package/dist/assets/volter-sdk-kit-live-session-registry-DH6Gw6mD.js +1 -0
- package/dist/assets/volter-sdk-kit-live-transition-BqyCVB6M.js +1 -0
- package/dist/assets/volter-sdk-kit-manifest-project-DB9obnxF.js +1 -0
- package/dist/assets/volter-sdk-kit-module-fetch-diagnosis-UWhRbWd2.js +1 -0
- package/dist/assets/volter-sdk-kit-mount-failure-report-CUeYgCgW.js +1 -0
- package/dist/assets/volter-sdk-kit-native-selection-style-Cn13Teb3.js +1 -0
- package/dist/assets/volter-sdk-kit-object3d-document-write-policy-CAuCUEuz.js +1 -0
- package/dist/assets/volter-sdk-kit-packaged-runtime-CfWW26Lw.js +1 -0
- package/dist/assets/volter-sdk-kit-performance-profiler-Drw2xyyh.js +1 -0
- package/dist/assets/volter-sdk-kit-performance-sources-C5_qaCKL.js +1 -0
- package/dist/assets/volter-sdk-kit-photograph-notice-BorTV754.js +1 -0
- package/dist/assets/volter-sdk-kit-play-boot-phase-DRILY5HB.js +1 -0
- package/dist/assets/volter-sdk-kit-play-camera-flight-xWnFHyCJ.js +1 -0
- package/dist/assets/volter-sdk-kit-presentation-surface-BVjhfPW_.js +1 -0
- package/dist/assets/volter-sdk-kit-product-command-Z3FUyOZH.js +1 -0
- package/dist/assets/volter-sdk-kit-project-adapter-DYLGSL7n.js +1 -0
- package/dist/assets/volter-sdk-kit-project-asset-refresh-BQRieOTY.js +1 -0
- package/dist/assets/volter-sdk-kit-project-asset-roots-BzvdTX0f.js +1 -0
- package/dist/assets/volter-sdk-kit-project-local-state-C3v2aoZe.js +1 -0
- package/dist/assets/volter-sdk-kit-project-manager-BhNOa6yj.js +1 -0
- package/dist/assets/volter-sdk-kit-project-module-changes-D6xXn9e0.js +1 -0
- package/dist/assets/volter-sdk-kit-project-module-split-hrsUcLWw.js +1 -0
- package/dist/assets/volter-sdk-kit-project-provenance-Ch-TcC33.js +1 -0
- package/dist/assets/volter-sdk-kit-project-ready-DIs3PAtE.js +1 -0
- package/dist/assets/volter-sdk-kit-project-shape-cp-U044u.js +1 -0
- package/dist/assets/volter-sdk-kit-project-tools-Dsz8XxT2.js +1 -0
- package/dist/assets/volter-sdk-kit-readiness-DGy_iPng.js +1 -0
- package/dist/assets/volter-sdk-kit-renderer-resource-counts-CSFdq6cn.js +1 -0
- package/dist/assets/volter-sdk-kit-reported-play-state-Bbfug76r.js +1 -0
- package/dist/assets/volter-sdk-kit-resolve-contributed-command-BbMh2utc.js +1 -0
- package/dist/assets/volter-sdk-kit-resolve-relative-specifier-BuivsBeF.js +1 -0
- package/dist/assets/volter-sdk-kit-retained-document-states-CxqjPi-M.js +1 -0
- package/dist/assets/volter-sdk-kit-scene-document-plan-Pq2qwZBi.js +1 -0
- package/dist/assets/volter-sdk-kit-scene-live-open-u4QDXpQ0.js +1 -0
- package/dist/assets/volter-sdk-kit-scoped-game-css-tb7gOlcn.js +1 -0
- package/dist/assets/volter-sdk-kit-served-url-DtZEq2OD.js +1 -0
- package/dist/assets/volter-sdk-kit-session-close-BE3nJmiM.js +1 -0
- package/dist/assets/volter-sdk-kit-session-tombstone-B9q2Gxk2.js +1 -0
- package/dist/assets/volter-sdk-kit-settings-settings-provider-Bo5k3qZx.js +1 -0
- package/dist/assets/volter-sdk-kit-settings-store-BJ_3jPnk.js +1 -0
- package/dist/assets/volter-sdk-kit-shell-store-CA_p9YRS.js +1 -0
- package/dist/assets/volter-sdk-kit-shell-store-door-DrDJAdEA.js +1 -0
- package/dist/assets/volter-sdk-kit-source-conflict-BskWTHl1.js +1 -0
- package/dist/assets/volter-sdk-kit-stage-context-d2MOE3m1.js +1 -0
- package/dist/assets/volter-sdk-kit-stage-invalidation-CaUfxL_V.js +1 -0
- package/dist/assets/volter-sdk-kit-stage-store-registry-CsPquPQN.js +1 -0
- package/dist/assets/volter-sdk-kit-startup-failure-Bf4E0YMD.js +1 -0
- package/dist/assets/volter-sdk-kit-state-report-deferral-CKxDlryl.js +1 -0
- package/dist/assets/volter-sdk-kit-storage-host-files-storage-DpV1XxZk.js +1 -0
- package/dist/assets/volter-sdk-kit-storage-http-storage-Bu87cOj_.js +1 -0
- package/dist/assets/volter-sdk-kit-storage-index-j54mTIme.js +1 -0
- package/dist/assets/volter-sdk-kit-storage-mem-storage-CtFx_JD9.js +1 -0
- package/dist/assets/volter-sdk-kit-storage-path-lock-CzDbr7Zo.js +1 -0
- package/dist/assets/volter-sdk-kit-storage-paths-C-fXy9NI.js +1 -0
- package/dist/assets/volter-sdk-kit-stories-StoryPreviewMount-X17hefjP.js +1 -0
- package/dist/assets/volter-sdk-kit-stories-compose-project-stories-Dm6PyZ2j.js +1 -0
- package/dist/assets/volter-sdk-kit-stories-prefabs-finder-Ch6FzvvU.js +1 -0
- package/dist/assets/volter-sdk-kit-stories-prefabs-from-stories-vm7c5Dez.js +1 -0
- package/dist/assets/volter-sdk-kit-stories-project-story-regions-0zBaevxR.js +1 -0
- package/dist/assets/volter-sdk-kit-stories-scope-CQF_Wn9H.js +1 -0
- package/dist/assets/volter-sdk-kit-stories-story-capture-CuSMTSru.js +1 -0
- package/dist/assets/volter-sdk-kit-stories-story-declared-medium-D5fxOuPe.js +1 -0
- package/dist/assets/volter-sdk-kit-stories-story-discovery-CARKaW03.js +1 -0
- package/dist/assets/volter-sdk-kit-stories-story-dom-runtime-SNxzbxPZ.js +1 -0
- package/dist/assets/volter-sdk-kit-stories-story-grouping-DyuyTFov.js +1 -0
- package/dist/assets/volter-sdk-kit-stories-story-presentation-DB5Pqlf7.js +1 -0
- package/dist/assets/volter-sdk-kit-stories-story-registry-C4PxIVxf.js +1 -0
- package/dist/assets/volter-sdk-kit-story-document-openers-BLRErv4h.js +1 -0
- package/dist/assets/volter-sdk-kit-story-thumbnails-nRyLNJxw.js +1 -0
- package/dist/assets/volter-sdk-kit-surface-keyboard-C5VehlZB.js +1 -0
- package/dist/assets/volter-sdk-kit-surface-state-D2RWtgU_.js +1 -0
- package/dist/assets/volter-sdk-kit-system-seam-evidence-DBmKEA5N.js +1 -0
- package/dist/assets/volter-sdk-kit-tab-census-DCYP_c6M.js +1 -0
- package/dist/assets/volter-sdk-kit-tab-lifecycle-client-B2dkacMA.js +1 -0
- package/dist/assets/volter-sdk-kit-theme-library-D2z9TIt_.js +1 -0
- package/dist/assets/volter-sdk-kit-theme-preference-CQYPOsMY.js +1 -0
- package/dist/assets/volter-sdk-kit-three-viewport-presentation-DjqLHzpC.js +1 -0
- package/dist/assets/volter-sdk-kit-tool-contribution-play-BJf9frMP.js +1 -0
- package/dist/assets/volter-sdk-kit-tool-loader-BJSPdpDJ.js +1 -0
- package/dist/assets/volter-sdk-kit-transform-mode-request-BysdaJxj.js +1 -0
- package/dist/assets/volter-sdk-kit-transient-hint-BCAURwwB.js +1 -0
- package/dist/assets/volter-sdk-kit-transport-strip-Dh_gh_Ar.js +1 -0
- package/dist/assets/volter-sdk-kit-ui-source-file-region-resolver-3PTxxNEF.js +1 -0
- package/dist/assets/volter-sdk-kit-ui-source-inspect-htLRFbbl.js +1 -0
- package/dist/assets/volter-sdk-kit-ui-source-source-write-backend--mXzGN0l.js +1 -0
- package/dist/assets/volter-sdk-kit-ui-source-tier-source-write-backend-BLldmdDB.js +1 -0
- package/dist/assets/volter-sdk-kit-user-local-state-BG9yY7wu.js +1 -0
- package/dist/assets/volter-sdk-kit-viewport-activation-timings-DI9VeZ8I.js +1 -0
- package/dist/assets/volter-sdk-kit-viewport-editor-controls-yx73yxqB.js +1 -0
- package/dist/assets/volter-sdk-kit-viewport-presentation-BiXyPx_l.js +1 -0
- package/dist/assets/volter-sdk-kit-viewport-surface-status-DhOHcCGA.js +1 -0
- package/dist/assets/volter-sdk-kit-wait-until-BxjkicFp.js +1 -0
- package/dist/assets/volter-sdk-kit-worker-call-metrics-CxIIhpb2.js +1 -0
- package/dist/assets/volter-sdk-kit-workspace-areas-CnNrdXA2.js +1 -0
- package/dist/assets/volter-sdk-kit-workspace-aux-commands-3Si9v39s.js +1 -0
- package/dist/assets/volter-sdk-kit-workspace-available-documents-DiQ-lLLQ.js +1 -0
- package/dist/assets/volter-sdk-kit-workspace-core-utilities-Htvt6dsG.js +1 -0
- package/dist/assets/volter-sdk-kit-workspace-document-ids-CaVQDIFY.js +1 -0
- package/dist/assets/volter-sdk-kit-workspace-document-registry-C-JtMmAl.js +1 -0
- package/dist/assets/volter-sdk-kit-workspace-document-restore-BMR96t8y.js +1 -0
- package/dist/assets/volter-sdk-kit-workspace-host-commands-lzroQNX_.js +1 -0
- package/dist/assets/volter-sdk-kit-workspace-persistence-gate-DuvwxRnn.js +1 -0
- package/dist/assets/volter-sdk-kit-workspace-play-utilities-C98Lvagt.js +1 -0
- package/dist/assets/volter-sdk-kit-workspace-presets-D-_A7JDE.js +1 -0
- package/dist/assets/volter-sdk-kit-workspace-regions-CjlUpZr0.js +1 -0
- package/dist/assets/volter-sdk-kit-workspace-static-panels-CMqSE6J4.js +1 -0
- package/dist/assets/volter-sdk-kit-workspace-status-registry-7kSA_sJg.js +1 -0
- package/dist/assets/volter-sdk-kit-workspace-storage-Dg-zwxJa.js +1 -0
- package/dist/assets/volter-sdk-kit-workspace-style-DOuNQjxD.js +1 -0
- package/dist/assets/volter-sdk-kit-workspace-utility-commands-Cb2B-wJ4.js +1 -0
- package/dist/assets/volter-sdk-kit-workspace-utility-registry-Bm-lvH6A.js +1 -0
- package/dist/assets/volter-sdk-kit-world-adoption-ndmh4Nmf.js +1 -0
- package/dist/assets/volter-sdk-kit-world-canvas-viewport-state-EnXhxxxs.js +1 -0
- package/dist/assets/volter-sdk-kit-world-document-routing-DBACuFYQ.js +1 -0
- package/dist/assets/volter-sdk-kit-world-pan-state-BGY2sBjP.js +1 -0
- package/dist/assets/volter-sdk-kit-write-pipe-D-TR3xVs.js +1 -0
- package/dist/assets/volter-sdk-layout-arrangements-DUPpMeSr.js +1 -0
- package/dist/assets/volter-sdk-layouts-CGyUD29k.js +1 -0
- package/dist/assets/volter-sdk-selection-tCvpnXRn.js +1 -0
- package/dist/assets/volter-sdk-session-command-table-BxONBy05.js +1 -0
- package/dist/assets/volter-sdk-session-editor-brand-BG0ODZ-8.js +1 -0
- package/dist/assets/volter-sdk-session-editor-compatibility-BHTMjwNA.js +1 -0
- package/dist/assets/volter-sdk-session-editor-control-protocol-CN7sZXZb.js +1 -0
- package/dist/assets/volter-sdk-session-entrypoint-selection-readers-9vLAGmig.js +1 -0
- package/dist/assets/volter-sdk-session-game-css-scope-BM1eAf3p.js +1 -0
- package/dist/assets/volter-sdk-session-project-module-url-CYuYhJk6.js +1 -0
- package/dist/assets/volter-sdk-session-relative-path-guard-BIEldh0Z.js +1 -0
- package/dist/assets/volter-sdk-session-tool-contribution-convention-DvN_LWlB.js +1 -0
- package/dist/assets/volter-sdk-types-BvyVPR_Q.js +1 -0
- package/dist/assets/volter-sdk-views-BDaWlMYB.js +1 -0
- package/dist/assets/volter-sdk-widgets-design-system-QBgXzl9_.js +1 -0
- package/dist/assets/volter-sdk-widgets-editor-appearance-BrIPELML.js +1 -0
- package/dist/assets/volter-sdk-widgets-editor-material-B_fvft70.js +1 -0
- package/dist/assets/volter-sdk-widgets-icon-set-registry-T4Dmzqt7.js +1 -0
- package/dist/assets/volter-sdk-widgets-index-B3HpUbVG.js +1 -0
- package/dist/assets/volter-sdk-widgets-inspector-widgets-AlignmentGrid-CDr_zdnY.js +1 -0
- package/dist/assets/volter-sdk-widgets-inspector-widgets-AssetSlotPicker-BWxes3gA.js +1 -0
- package/dist/assets/volter-sdk-widgets-inspector-widgets-BorderEditor-etYg4PmT.js +1 -0
- package/dist/assets/volter-sdk-widgets-inspector-widgets-ColorPicker-DetQDh_f.js +1 -0
- package/dist/assets/volter-sdk-widgets-inspector-widgets-CurveEditor-BfTn_BsC.js +1 -0
- package/dist/assets/volter-sdk-widgets-inspector-widgets-FilterEditor-saO-J7Oq.js +1 -0
- package/dist/assets/volter-sdk-widgets-inspector-widgets-FontPicker-CZ7FmWxG.js +1 -0
- package/dist/assets/volter-sdk-widgets-inspector-widgets-GradientEditor-ChiCM1d4.js +1 -0
- package/dist/assets/volter-sdk-widgets-inspector-widgets-ScrubbableInput-Dz-bVsZ8.js +1 -0
- package/dist/assets/volter-sdk-widgets-inspector-widgets-ShadowEditor-BAugA19h.js +1 -0
- package/dist/assets/volter-sdk-widgets-inspector-widgets-color-utils-DxraCOXQ.js +1 -0
- package/dist/assets/volter-sdk-widgets-inspector-widgets-curve-utils-kkJukQ0s.js +1 -0
- package/dist/assets/volter-sdk-widgets-inspector-widgets-index-B3vyn0Ai.js +1 -0
- package/dist/assets/volter-sdk-widgets-inspector-widgets-shared-CPkFF1JF.js +1 -0
- package/dist/assets/volter-sdk-widgets-interactive-edit-scope-D4_tVXsa.js +1 -0
- package/dist/assets/volter-sdk-widgets-patterns-Dialog-CkPDHAWE.js +1 -0
- package/dist/assets/volter-sdk-widgets-patterns-Fields-BJShETId.js +1 -0
- package/dist/assets/volter-sdk-widgets-patterns-List-BgG2_2xL.js +1 -0
- package/dist/assets/volter-sdk-widgets-patterns-StateSurface-G2He1eZg.js +1 -0
- package/dist/assets/volter-sdk-widgets-patterns-Surfaces-N-ry8Gth.js +1 -0
- package/dist/assets/volter-sdk-widgets-patterns-Tabs-gSMJ3Pp_.js +1 -0
- package/dist/assets/volter-sdk-widgets-patterns-Toolbar-BVbWQJC-.js +1 -0
- package/dist/assets/volter-sdk-widgets-patterns-Tree-BsJEhxbv.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-AnchoredMenu-CaiLdn6d.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-Button-C0ugJ_I6.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-ColorInput-CJcVDa_m.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-DraftTextInput-B-I_hC_P.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-EditorIcon-BUbAPjrv.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-FormControls-9Ke8qtZ8.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-HoverPreview-IgTEdXXe.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-JsonInput-Dj0j9sft.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-Layout-BfWHHWVT.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-Menu-hgt5A7Kd.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-NumberInput-B_EwFkyN.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-Panel-Bv-Dt2pg.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-SectionHeader-CtGyBmQ7.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-Text-CROeI4AB.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-ThemeRootPortal-Bp6LhOHs.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-Tooltip-CKGQWC6W.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-Vec3Input-DKN5rnzb.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-banner-tones-2b5QAcYe.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-clamp-to-viewport-D94XgQyr.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-editor-icons-D9930eKI.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-panel-header-styles-DmH6-h4B.js +1 -0
- package/dist/assets/volter-sdk-widgets-theme-ah2w0Fkn.js +1 -0
- package/dist/assets/volter-sdk-widgets-z-index-BTO2KQ8P.js +1 -0
- package/dist/assets/volter-shared-fontawesome-BjL6w6Cn.js +1 -0
- package/dist/assets/volter-shared-jsx-dev-runtime-Bz1gHaPC.js +1 -0
- package/dist/assets/volter-shared-jsx-runtime-DZaM4mR0.js +1 -0
- package/dist/assets/volter-shared-react-71UsCCPo.js +1 -0
- package/dist/assets/volter-shared-react-dom-BJsW7Z0N.js +1 -0
- package/dist/assets/volter-shared-react-dom-client-Yf5gYUSE.js +1 -0
- package/dist/assets/volter-shared-three-wYzUWvH9.js +1 -0
- package/dist/assets/worker-D1j8wqVo.js +4 -0
- package/dist/volter-shared-react.json +10 -0
- package/dist/volter-shared-sdk.json +462 -0
- package/dist/volter-shared-three.json +3 -0
- package/dist-node/cli.js +21181 -0
- package/dist-node/create.js +14272 -0
- package/package.json +84 -4
- package/presets.mjs +2 -0
- package/src/contributions.d.ts +4 -0
- package/src/index.ts +10 -0
- package/starter/AGENTS.md +400 -0
- package/starter/CLAUDE.md +1 -0
- package/starter/cube.blend +0 -0
- package/starter/cube.py +82 -0
- package/starter/package.json +9 -0
- package/starter/race-state.ts +22 -0
- package/starter/track.blend +0 -0
- package/starter/track.play.ts +343 -0
- package/starter/track.py +324 -0
- package/starter/ui/game.stories.tsx +12 -0
- package/starter/ui/game.tsx +10 -0
- package/starter/ui/race-hud.tsx +29 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import{h1 as W,x as jt,ig as _t,ih as st,n as u,j as c,du as vt,ii as ae,dM as K,ij as ie,ik as wt,il as St,t as G,im as xt,cq as J,eu as kt,B as Be,dX as Ce,io as Et,aw as it,ax as he,bB as Ct,aE as re,gE as Ot,ip as we,aJ as Se,h_ as Q,iq as Ie,b$ as At,c2 as Rt,gu as Ve,ir as Mt,aA as Pt,is as Ft,it as Ge,aN as $t,iu as Tt,iv as We,iw as Lt}from"./volter-sdk-CTPCkGXt.js";import{o as Nt,k as pe,l as se,m as be,p as Dt,q as Oe,i as ze,t as Bt,u as It,w as qe,v as Vt,x as _e,y as Gt,z as Wt,A as He,s as zt,B as qt,C as Ht,D as Ut,E as Ue,F as Kt,G as Jt}from"./blender-runtime-host-CJ3l04y8.js";import{t as Xt,v as ee,o as ge,s as ct,a as ce}from"./object3d-document-session-registry-Dso-3DdQ.js";import{r as Ke,b as Yt,a as Qt,w as Zt}from"./blender-properties-model-DG3h6RbJ.js";import{g as er,n as tr,b as fe,o as rr}from"./play-mode-CB-BAREv.js";import{l as nr}from"./three.module-dk_BdrjN.js";import"./content-bounds-Dg9hT5Gp.js";import"./clip-planes-CmZu3QTO.js";import"./LineSegments2-D1_2s-N-.js";function dt(e){return`blender-${e.toLowerCase().replace(/_/g,"-")}`}function Z(e){return e?.type==="TSE_SOME_ID"&&e.struct==="Object"&&e.object!==void 0}function Je(e){if(e.struct)return e.struct}function Xe(e,t){return{id:e.id,label:e.name,role:"entity",kind:dt(e.icon),...Je(e)?{typeLabel:Je(e)}:{},parentId:t,childIds:e.children.map(o=>o.id),defaultExpanded:e.expanded}}const or={transform:!0,inspectorFields:!1,persist:!0},ye=new Set;let ut=0;const Ae=new Set;function Ye(){queueMicrotask(()=>{ut++;for(const e of Ae)e()})}function ar(e){return Ae.add(e),()=>{Ae.delete(e)}}function Qe(){return ut}function lr(e){for(const t of ye)if(t.documentId===e||t.documentId===`object3d-document:${e}`)return t;return ye.values().next().value??null}const sr=()=>({position:[0,0,0],rotation:[0,0,0,1],scale:[1,1,1]});function Ze(e,t){e.updateWorldMatrix(!0,!1);const o=t.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 de(e,t){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 "${t}".`}const ir=[{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:`${de("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:de("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:de("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:de("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'"}],cr="collection-instance:";function dr(){const e=new Map;for(const t of se().byId.values()){if(t.type!=="TSE_LAYER_COLLECTION")continue;const o=t.data;o===void 0||!o.startsWith("bpy.data.collections[")||e.has(t.name)||e.set(t.name,{kind:`${cr}${t.name}`,label:t.name,group:"Collection Instance",call:`object.collection_instance_add, collection=${ne(t.name)}`})}return[...e.values()]}function me(){return[...ir,...dr()]}function ur(e){const[t,...o]=e.call.split(", ");return`bpy.ops.${t}(${o.join(", ")})`}function ne(e){return JSON.stringify(e)}const pr={"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 br(e){const t=/bpy\.ops\.([a-z_]+\.[a-z0-9_]+)\(/.exec(e)?.[1];return t===void 0?void 0:pr[t]}async function le(e,t){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
|
+
`),s=await _e(o,!0,t??br(e));return s.error!==null?{made:[],error:s.error}:{made:s.result.split(`
|
|
3
|
+
`).map(b=>b.trim()).filter(b=>b.length>0),error:null}}async function fr(e,t){const o=[`_sel = {${e.map(ne).join(", ")}}`,"_vl = bpy.context.view_layer","for _o in _vl.objects:"," _o.select_set(_o.name in _sel)",...t===null?[]:[`_vl.objects.active = bpy.data.objects.get(${ne(t)})`]].join(`
|
|
4
|
+
`),s=await _e(o,!1);s.error!==null&&W().console.error(`Blender refused the selection write: ${s.error}`,"blender-outliner")}async function xe(e,t){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(ne).join(", ")}]]`,"with bpy.context.temp_override(selected_objects=targets, selected_editable_objects=targets, active_object=targets[0], object=targets[0]):",` ${t}`].join(`
|
|
5
|
+
`),{error:s}=await le(o);return s!==null?{destination:s,persisted:!1}:(await be(e),{destination:`Blender — ${t}; the session saves the .blend`,persisted:!0})}const mr={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."},hr="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 pt(e){return({defaultAdapter:t})=>{const o=new Set;let s=[],O=null,b=null;const m=new Map,h=new Map,w=()=>{for(const n of[...o])n()},j=()=>se().byId,P=n=>{const r=j().get(n),a=e();return r===void 0||a===null?null:r.type==="TSE_VIEW_COLLECTION_BASE"?a.root:r.object===void 0?null:a.objectForBlenderName(r.object)},T=n=>{const r=e();if(r===null)return null;for(const a of j().values())if(Z(a)&&r.objectForBlenderName(a.object)===n)return a.id;return null},A=n=>{for(const r of j().values())if(Z(r)&&r.object===n)return r.id;return null},B=n=>{if(j().has(n))return n;const r=Xt(t.hierarchy,n);return r===null?null:T(r)},D=n=>{const r=B(n);return r===null?null:P(r)},V=n=>{const r=D(n);return r===null?null:t.hierarchy.idForObject3D?.(r)??null},L={roots:()=>(Vt(q()),(se().tree?.rows??[]).map(r=>Xe(r,null))),node:n=>{const r=se(),a=r.byId.has(n)?n:B(n),d=a===null?void 0:r.byId.get(a);return d===void 0?null:Xe(d,r.parentOf.get(d.id)??null)},object3D:n=>D(n),idForObject3D:n=>T(n)};function q(){const n=j(),r=new Set;for(const a of s){const d=n.get(a)?.object;d!==void 0&&r.add(d)}return[...r]}const z=()=>{const n=[];for(const r of s){const a=D(r),d=a===null?null:t.hierarchy.idForObject3D?.(a);d&&n.push(d)}t.selection?.set(n,{intent:"exact"}),w()},i=()=>{if(g||b!==null)return;const n=Dt(),r=`${Oe()}\0${n.active??""}\0${[...n.selected].sort().join("")}`;if(r===O)return;O=r;const a=n.selected.filter(y=>y!==n.active);n.active!==null&&n.selected.includes(n.active)&&a.push(n.active);const d=a.map(A).filter(y=>y!==null);d.length===s.length&&d.every((y,x)=>y===s[x])||(s=d,z())},f={get:()=>[...s],set:n=>{if(g)return;const r=Symbol("Blender selection");b=r,s=n.map(B).filter(x=>x!==null),z();const a=j(),d=[],y=[];for(const x of s){const S=a.get(x),k=S?.object;k===void 0?y.push(S?.name??x):d.includes(k)||d.push(k)}y.length>0&&W().console.warn(`${y.join(", ")} ${y.length===1?"is":"are"} not an object, so Blender's object selection does not carry ${y.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"),fr(d,d.length===0?null:d[d.length-1]).catch(x=>W().console.error(`Blender refused the selection write: ${String(x)}`,"blender-outliner")).finally(()=>{g||b!==r||(b=null,O=null,i())})}},C=n=>j().get(n)?.restrict,R={properties:n=>{const r=C(n);if(r===void 0)return[];const a=j().get(n),d=[{path:"name",label:"Name",type:"string",readonly:!Z(a)}];return r.hide!==void 0&&d.push({path:"visible",label:"Show in Viewport",type:"boolean"}),r.render!==void 0&&d.push({path:"renderVisible",label:"Show in Renders",type:"boolean"}),r.exclude!==void 0&&d.push({path:"exclude",label:"Exclude from View Layer",type:"boolean"}),d},get:(n,r)=>{const a=j().get(n);if(a!==void 0){if(r==="name")return a.name;if(r==="visible")return a.restrict?.hide===void 0?void 0:!a.restrict.hide;if(r==="renderVisible")return a.restrict?.render===void 0?void 0:!a.restrict.render;if(r==="exclude")return a.restrict?.exclude}},editability:(n,r)=>{const a=j().get(n);return a===void 0?{writable:!1}:r==="name"?Z(a)?{writable:!0}:{writable:!1,reason:`Renaming a ${a.struct??a.type} is not in this Outliner yet — only an object row renames here. Rename it with bpy.`}:a.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."}:r==="visible"&&a.restrict?.exclude===!0?{writable:!1,reason:hr}:{writable:!0}},set:async(n,r,a)=>{const d=j().get(n);if(d===void 0)return;if(r==="name"){if(!Z(d))return;const x=String(a);if(x===d.name||x.length===0)return;await ze(`bpy.data.objects[${ne(d.object)}]`,"name",x),await be([x]);const S=A(x);S!==null&&f.set([S]);return}if(r==="exclude"){await qe(d.path,"exclude",a===!0);return}const y=r==="visible"?"hide":r==="renderVisible"?"render":null;y!==null&&await qe(d.path,y,a===!1)}},$={get:n=>{const r=V(n);return(r===null?void 0:t.transforms?.get(r))??sr()},editability:n=>{const r=B(n),a=r===null?void 0:j().get(r);return Z(a)&&P(a.id)!==null?{writable:!0}:{writable:!1,reason:`Only an object has a transform; this row is a ${a?.struct??a?.type??"row"}.`}},beginEdit:n=>{const r=D(n);r!==null&&!m.has(r)&&(m.set(r,r.matrixWorld.clone()),h.set(n,r),It())},apply:(n,r)=>{const a=D(n);a!==null&&(a.position.fromArray(r.position),a.quaternion.fromArray(r.rotation),a.scale.fromArray(r.scale),a.updateMatrix(),a.updateMatrixWorld(!0),e()?.mirrorPose?.(a))},endEdit:async n=>{const r=h.get(n)??D(n);h.delete(n);const a=e();if(r===null)return;const d=m.get(r);m.delete(r);try{if(a===null||(r.updateWorldMatrix(!0,!1),d?.equals(r.matrixWorld)===!0))return;const y=a.blenderObjectName(r);if(y===null)return;const x=`bpy.data.objects[${JSON.stringify(y)}]`;try{return await ze(x,"matrix_world",Ze(r,a.root)),{destination:`Blender — ${x}.matrix_world; the session saves the .blend`,persisted:!0}}catch(S){return{destination:S instanceof Error?S.message:String(S),persisted:!1}}}finally{d&&await Bt()}}},H=n=>{const r=B(n),a=r===null?void 0:j().get(r);return Z(a)?a.object:null},M=n=>({destination:n,persisted:!1}),N=async n=>{await be(n);const r=n.map(A).filter(a=>a!==null);return r.length>0&&f.set(r),r[0]??""},I=()=>{const n=t.documentId?.replace(/^object3d-document:/,""),r=ee().find(y=>y.documentId===n)?.rig().drawCamera()??null,a=e(),d=["bpy.ops.object.camera_add()","added = bpy.context.view_layer.objects.active"];return r!==null&&a!==null&&d.push("kept = added.location.copy()",`added.matrix_world = ${JSON.stringify(Ze(r,a.root))}`,"added.location = kept"),d.push("if bpy.context.scene.camera is None:"," bpy.context.scene.camera = added"),d.join(`
|
|
6
|
+
`)},_={creatableKinds:()=>me().map(({kind:n,label:r})=>({kind:n,label:r})),create:n=>{const r=me().find(d=>d.kind===n);if(r===void 0)return{id:"",ack:M(`${n} is not a row of Blender's Add menu that this editor adds. Its rows are: ${me().map(d=>d.label).join(", ")}.`)};if(r.refusal!==void 0)return{id:"",ack:M(r.refusal)};const a=r.call==="object.camera_add"?I():ur(r);return{id:"",ack:(async()=>{const{made:d,error:y}=await le(a);return y!==null?M(y):d.length===0?M(`Blender ran ${a} 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 N(d),{destination:`Blender — ${a}; the session saves the .blend`,persisted:!0})})()}},remove:n=>_.removeMany?.([n])??void 0,removeMany:async n=>{const r=[];for(const x of n){const S=H(x);if(S===null){const k=B(x)===null?void 0:j().get(B(x));return M(`Only an object can be deleted here; this row is a ${k?.struct??k?.type??"row"}. Deleting a collection, a modifier or a vertex group is that datablock’s own bpy call.`)}r.push(S)}if(r.length===0)return M("Nothing selected to delete.");const d=[`targets = ${`[bpy.data.objects[n] for n in [${r.map(ne).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
|
+
`),{error:y}=await le(d,"Delete Objects");return y!==null?M(y):(f.set([]),await be([]),{destination:"Blender — bpy.ops.object.delete(use_global=False); the session saves the .blend",persisted:!0})},duplicate:n=>{const r=H(n);if(r===null)return{id:n,ack:M("Only an object can be duplicated here. Duplicating a collection is `bpy.ops.object.collection_instance_add`, its own gesture.")};const a=[`source = bpy.data.objects[${ne(r)}]`,"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
|
+
`);return{id:n,ack:(async()=>{const{made:d,error:y}=await le(a,"Duplicate Object");return y!==null?M(y):(await N(d),{destination:`Blender — bpy.ops.object.duplicate(linked=False) on ${r}; the session saves the .blend`,persisted:!0})})()}},duplicateMany:async n=>{const r=[...new Set(n.map(H))];if(r.length===0||r.some(x=>x===null))return M("Select objects to duplicate; collections and data rows cannot be duplicated here.");const a=[`sources = [bpy.data.objects[name] for name in ${JSON.stringify(r)}]`,"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(`
|
|
9
|
+
`),{made:d,error:y}=await le(a,"Duplicate Objects");return y!==null?M(y):(await N(d),{destination:"Blender — duplicate selected objects as one native operation; the session saves the .blend",persisted:!0})},reparent:()=>M("Reparenting is Blender's `bpy.ops.object.parent_set`, which needs a parent TYPE (Object, Object Keep Transform, Armature Deform, …) that a drag does not say. Set the parent on the object’s Relations panel, or with bpy.")},l={get documentId(){return t.documentId},get documentRootObject(){return t.documentRootObject},capabilities:or,provenance:mr,hierarchy:L,selection:f,inspector:R,transforms:$,structure:_,subscribe:n=>{o.add(n);const r=pe(n),a=t.subscribe?.(n)??(()=>{});return()=>{o.delete(n),r(),a()}}},p={get documentId(){return l.documentId},selectedObjectNames:()=>q(),allObjectNames:()=>{const n=[];for(const r of j().values())Z(r)&&n.push(r.object);return n},selectObjects:n=>{const r=n.map(A).filter(a=>a!==null);f.set(r)},rowIdForObject:n=>A(n),structure:_,subscribe:n=>{o.add(n);const r=pe(n);return()=>{o.delete(n),r()}}};ye.add(p);let g=!1;const v=setTimeout(()=>{g||(Ye(),i())},0),E=Nt(i),F=pe(i);return{adapter:l,dispose:()=>{g=!0,clearTimeout(v),E(),F(),ye.delete(p),Ye(),o.clear()}}}}const gr=pt(Gt);jt({match:({adapter:e})=>Ke(null,e)!==null,describe:({adapter:e})=>{const t=Ke(null,e);if(t===null)return null;const o=t.kind==="object"?[...se().byId.values()].find(m=>m.struct==="Object"&&m.object===t.name):void 0,s=Yt().context?.scene,O=s?Qt(s):void 0,b=t.kind==="object"?t.name:(O?.kind==="struct"?O.name:null)??"Scene";return{id:`blender-properties:${JSON.stringify(t)}`,title:b,identity:{kindLabel:t.kind==="object"?"Object":"Scene",kind:dt(o?.icon??"SCENE_DATA"),rename:{readOnly:t.kind!=="object",set:async m=>{t.kind==="object"&&m.length>0&&await Zt(`bpy.data.objects[${JSON.stringify(t.name)}]`,"name",m)}}},sections:[]}}});function bt(e){const t=Number.isFinite(e)&&e>0?e:50;return{degrees:2*Math.atan(72/(2*t))*180/Math.PI,axis:"larger"}}_t("model",{camera:{fov:bt(50),opening:[.8187,.4458,.3617]},interaction:{bootTool:"select",boxSelect:"touch"},all:{lighting:{source:"studio",studioPreset:st.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"}});const Re="volter.blender.area-split:",Me=new Set,Pe=new Map;function yr(e){try{return globalThis.localStorage?.getItem(Re+e)==="1"}catch{return!1}}function $e(e){let t=Pe.get(e);return t===void 0&&(t=yr(e),Pe.set(e,t)),t}function et(e,t){if($e(e)!==t){Pe.set(e,t);try{t?globalThis.localStorage?.setItem(Re+e,"1"):globalThis.localStorage?.removeItem(Re+e)}catch{}for(const o of[...Me])o()}}function ft(e){return Me.add(e),()=>{Me.delete(e)}}const jr=[{label:"Location",call:"location=True, rotation=False, scale=False"},{label:"Rotation",call:"location=False, rotation=True, scale=False"},{label:"Scale",call:"location=False, rotation=False, scale=True"},{label:"All Transforms",call:"location=True, rotation=True, scale=True"}],_r=[{label:"Location",call:"bpy.ops.object.location_clear(clear_delta=False)"},{label:"Rotation",call:"bpy.ops.object.rotation_clear(clear_delta=False)"},{label:"Scale",call:"bpy.ops.object.scale_clear(clear_delta=False)"}],vr=[{label:"Geometry to Origin",type:"GEOMETRY_ORIGIN"},{label:"Origin to Geometry",type:"ORIGIN_GEOMETRY"},{label:"Origin to 3D Cursor",type:"ORIGIN_CURSOR"}],wr=[{submenu:"Mesh",at:"2699"},{submenu:"Curve",at:"2702"},{submenu:"Surface",at:"2704"},{submenu:"Metaball",at:"2705"},{kind:"text",at:"2706"},{kind:"point-cloud",at:"2707"},{submenu:"Volume",at:"2708"},{submenu:"Grease Pencil",at:"2709"},{separatorAt:"2711"},{kind:"armature",at:"2716"},{submenu:"Lattice",at:"2718"},{separatorAt:"2720"},{submenu:"Empty",at:"2722"},{submenu:"Image",at:"2723"},{separatorAt:"2725"},{submenu:"Light",at:"2727"},{submenu:"Light Probe",at:"2728"},{separatorAt:"2730"},{kind:"camera",at:"2735"},{separatorAt:"2737"},{kind:"speaker",at:"2739"},{separatorAt:"2741"},{submenu:"Force Field",at:"2743"},{separatorAt:"2745"},{submenu:"Collection Instance",at:"2759"}],Sr="No Collections to Instance";function ue({id:e,open:t,setOpen:o,anchorRef:s,children:O}){return c.jsxs("div",{ref:s,style:{position:"relative"},children:[c.jsx(wt,{"data-testid":`blender-menu-${e}`,"aria-expanded":t===e,onClick:()=>o(t===e?null:e),onPointerEnter:()=>{t&&o(e)},style:{textTransform:"capitalize"},children:e}),t===e&&c.jsx(St,{anchorRef:s,dismissBoundaryRef:s,align:"start",gap:0,clamp:!0,"aria-label":e,onDismiss:()=>o(null),children:O})]})}function xr(e,t,o){(async()=>{const s=await o;s===void 0||typeof s.destination!="string"||s.persisted!==!0&&e?.({tone:"error",title:`${t} was refused`,detail:s.destination})})()}function mt({documentId:e,notify:t}){u.useSyncExternalStore(pe,Oe,Oe),u.useSyncExternalStore(ar,Qe,Qe);const[o,s]=u.useState(null),O=u.useRef(null),b=u.useRef(null),m=u.useRef(null),h=u.useRef(null),w=u.useRef(null),j=u.useSyncExternalStore(ft,()=>e===void 0?!1:$e(e),()=>!1),P=lr(e);if(P===null)return null;const T=(i,f)=>()=>{s(null),xr(t,i,f(P))},A=P.selectedObjectNames(),B=P.allObjectNames(),D=A.length===0?"Nothing is selected.":void 0,V=me(),L=i=>c.jsx(K,{"data-testid":`blender-add-${i.kind}`,disabled:i.refusal!==void 0,title:i.refusal,onSelect:T(`Add ${i.label}`,f=>f.structure.create(i.kind).ack),children:i.label},i.kind),q=i=>V.filter(f=>f.group===i).flatMap(f=>f.separatorBefore===!0?[c.jsx(ie,{},`${f.kind}-separator`),L(f)]:[L(f)]),z=i=>{if("separatorAt"in i)return c.jsx(ie,{},`separator-${i.separatorAt}`);if("kind"in i){const C=V.find(R=>R.kind===i.kind);return C===void 0?null:L(C)}const f=q(i.submenu);return f.length===0?c.jsx(K,{"data-testid":"blender-add-collection-instance",disabled:!0,children:Sr},i.submenu):c.jsx(ae,{label:i.submenu,"data-testid":`blender-add-${i.submenu.toLowerCase().replaceAll(" ","-")}`,children:f},i.submenu)};return c.jsxs(vt,{compact:!0,label:"Blender Object Mode menus","data-testid":"blender-object-mode-menus",ref:O,children:[c.jsx(ue,{id:"view",open:o,setOpen:s,anchorRef:b,children:c.jsxs(ae,{label:"Area","data-testid":"blender-view-area",children:[c.jsx(K,{"data-testid":"blender-area-vertical-split",disabled:j||e===void 0,title:j?"This area is already split.":void 0,onSelect:()=>{s(null),e!==void 0&&et(e,!0)},children:"Vertical Split"}),c.jsx(ie,{}),c.jsx(K,{"data-testid":"blender-area-close",disabled:!j,title:j?void 0:"There is no second area to close.",onSelect:()=>{s(null),e!==void 0&&et(e,!1)},children:"Close Area"})]})}),c.jsxs(ue,{id:"select",open:o,setOpen:s,anchorRef:m,children:[c.jsx(K,{"data-testid":"blender-select-all",onSelect:T("Select All",i=>i.selectObjects(B)),children:"All"}),c.jsx(K,{"data-testid":"blender-select-none",onSelect:T("Select None",i=>i.selectObjects([])),children:"None"}),c.jsx(K,{"data-testid":"blender-select-invert",onSelect:T("Select Invert",i=>i.selectObjects(B.filter(f=>!A.includes(f)))),children:"Invert"})]}),c.jsx(ue,{id:"add",open:o,setOpen:s,anchorRef:h,children:wr.map(i=>z(i))}),c.jsxs(ue,{id:"object",open:o,setOpen:s,anchorRef:w,children:[c.jsx(ae,{label:"Set Origin","data-testid":"blender-object-origin",children:vr.map(i=>c.jsx(K,{"data-testid":`blender-origin-${i.type}`,disabled:i.refusal!==void 0||A.length===0,title:i.refusal??D,onSelect:T(`Set Origin ▸ ${i.label}`,f=>xe(f.selectedObjectNames(),`bpy.ops.object.origin_set(type='${i.type}')`)),children:i.label},i.type))}),c.jsx(ae,{label:"Clear","data-testid":"blender-object-clear",children:_r.map(i=>c.jsx(K,{"data-testid":`blender-clear-${i.label.toLowerCase()}`,disabled:A.length===0,title:D,onSelect:T(`Clear ▸ ${i.label}`,f=>xe(f.selectedObjectNames(),i.call)),children:i.label},i.label))}),c.jsx(ae,{label:"Apply","data-testid":"blender-object-apply",children:jr.map(i=>c.jsx(K,{"data-testid":`blender-apply-${i.label.toLowerCase().replace(/ /g,"-")}`,disabled:A.length===0,title:D,onSelect:T(`Apply ▸ ${i.label}`,f=>xe(f.selectedObjectNames(),`bpy.ops.object.transform_apply(${i.call})`)),children:i.label},i.label))}),c.jsx(ie,{}),c.jsx(K,{"data-testid":"blender-object-duplicate",disabled:A.length===0,title:D,onSelect:T("Duplicate Objects",async i=>{const f=i.selectedObjectNames().map(C=>i.rowIdForObject(C)).filter(C=>C!==null);return i.structure.duplicateMany?.(f)}),children:"Duplicate Objects"}),c.jsx(K,{"data-testid":"blender-object-delete",disabled:A.length===0,title:D,onSelect:T("Delete",i=>{const f=i.selectedObjectNames().map(C=>i.rowIdForObject(C)).filter(C=>C!==null);return i.structure.removeMany?.(f)}),children:"Delete"})]})]})}function je(e){return/file format is not supported|not a blend file/i.test(e)?"This file is not a supported Blender model. Choose a valid .blend file or return to the previous model.":/EACCES|permission denied|read-only file system/i.test(e)?"Blender could not access the model file. Check its file permissions, then try again.":/ENOENT|no such file|file not found/i.test(e)?"The model file could not be found. Check that it still exists, or return to the previous model.":/failed to fetch|networkerror|network error/i.test(e)?"Blender could not finish loading. Check your connection, then try again.":"Blender could not open this model. Try again, or return to the previous model. Details are available in the console."}function tt({documentId:e,path:t,error:o,preview:s,retry:O,returnToPreview:b,preparingView:m=!1,note:h=null}){const w=o?"Could not open model":m?"Preparing model view":"Opening model",j=u.useMemo(()=>{const P={id:`opening:${e}`,label:w,secondaryLabel:t,role:"boundary",kind:"object",parentId:null,childIds:[]};return{capabilities:{transform:!1,inspectorFields:!1,persist:!1},hierarchy:{roots:()=>[P],node:T=>T===P.id?P:null},subscribe:()=>()=>{}}},[e,t,w]);return c.jsxs("div",{"data-testid":"blender-model-opening","aria-busy":!o,style:{position:"absolute",inset:0,overflow:"auto",background:G.surface.panel,color:G.content.primary},children:[!m&&c.jsx(xt,{documentId:e,type:"Model",title:t,status:o?je(o):w,selection:()=>({adapter:j,nodeId:null})},w),s&&c.jsx("img",{src:s.image,alt:`Last view of ${s.path}`,draggable:!1,style:{position:"absolute",inset:0,width:"100%",height:"100%",objectFit:"contain",pointerEvents:"none"}}),c.jsxs("div",{style:{position:"relative",minHeight:"100%",display:"flex",flexDirection:"column",justifyContent:s?"flex-end":"center",alignItems:s?"flex-start":"center",boxSizing:"border-box",padding:J[8],gap:J[4]},children:[s&&c.jsxs("div",{style:{padding:`${J[2]} ${J[4]}`,background:G.surface.chrome,border:`1px solid ${G.boundary.default}`,borderRadius:G.shape.small,maxWidth:"100%",overflowWrap:"anywhere"},children:["Previous model: ",s.path," · Preview only"]}),c.jsx(kt,{tone:o?"error":"loading",style:{width:"min(100%, 32rem)",background:G.surface.chrome,border:`1px solid ${G.boundary.default}`,borderRadius:G.shape.small,overflowWrap:"anywhere"},title:c.jsx("span",{style:{fontSize:Ce.lg},children:w}),description:c.jsxs(c.Fragment,{children:[c.jsx("div",{style:{color:G.content.primary,marginBottom:J[3]},children:t}),o?je(o):m?"The file is open. Preparing its viewport.":s?"The previous model stays visible while this file opens.":"Preparing Blender and opening this file. The model will appear here when it is ready.",!o&&h&&c.jsx("div",{"data-testid":"blender-model-opening-note",style:{marginTop:J[3],color:G.content.muted,userSelect:"text"},children:h}),o&&c.jsx("div",{"data-testid":"blender-model-opening-detail",style:{marginTop:J[3],fontFamily:Et,fontSize:Ce.sm,color:G.content.muted,whiteSpace:"pre-wrap",userSelect:"text",textAlign:"left"},children:o})]}),action:o?c.jsxs("div",{style:{display:"flex",flexWrap:"wrap",justifyContent:"center",gap:J[3]},children:[s&&c.jsx(Be,{onClick:b,children:"Return to previous model"}),c.jsx(Be,{variant:"secondary",onClick:O,children:"Retry opening"})]}):c.jsx("progress",{"aria-label":`Opening ${t}`,style:{width:"min(100%, 18rem)",accentColor:G.accent.default}})})]})]})}let te=null;const Fe=new Set;let ke=!1;function ht(){ke||(ke=!0,queueMicrotask(()=>{ke=!1;for(const e of[...Fe])e()}))}function rt(e){te?.project===e.project&&te.capturedAt>e.capturedAt||te!==e&&(te=e,ht())}function kr(){te&&(te=null,ht())}function Er(e){return te?.project===e?te:null}function Cr(e){return Fe.add(e),()=>{Fe.delete(e)}}const nt="blender-model-open",Or=3e4,ot=new WeakMap;let Ar=0;function Rr(e){let t=ot.get(e);return t===void 0&&(t=++Ar,ot.set(e,t)),t}const at=new WeakSet,qr="workspace.document",Hr="Blender Model",Ur=({documentId:e,notify:t})=>c.jsx(mt,{documentId:e,notify:t}),Mr="model",Kr="owned",Jr=[],X=er,Pr={wireframe:"WIREFRAME",solid:"SOLID",preview:"MATERIAL",rendered:"RENDERED"},lt=new WeakMap;function Fr(e){let t=lt.get(e);return t||(t={subject:()=>{const o=fe.playhead();return e.subjectLine(o===null?null:Math.floor(o))},gridScale:o=>e.gridUnitName(o),cameraView:{camera:()=>e.cameraViewCamera(),zoom:e.cameraViewZoom,pan:e.cameraViewPan,showing:o=>e.setCameraViewShowing(o),setPose:(o,s,O,b)=>{const{location:m,rotation:h}=e.blenderPose(s,O);return _e(`from mathutils import Matrix, Quaternion, Vector
|
|
10
|
+
import bpy
|
|
11
|
+
object = bpy.data.objects[${JSON.stringify(o)}]
|
|
12
|
+
object.matrix_world = Matrix.LocRotScale(Vector((${m.join(", ")})), Quaternion((${h.join(", ")})), object.matrix_world.to_scale())`,b,"Lock Camera to View").then(w=>{w.error!==null&&W().console.error(`Blender refused the camera's pose: ${w.error}`,"blender-camera")},w=>W().console.error(`The camera's pose was not written to Blender: ${String(w)}`,"blender-camera"))},view:(o,s,O,b)=>e.cameraView(o,s,O,b)}},lt.set(e,t),t)}function Xr(e){const{active:t,document:o,documentId:s,notify:O,publishContext:b}=e,m=o?.source?.path,h=o?.id,w=JSON.stringify([s,h,m]),[j,P]=u.useState(null),[T,A]=u.useState(null),[B,D]=u.useState(0),V=W().projectLocalState.projectRootPath(),L=u.useSyncExternalStore(Cr,()=>Er(V),()=>null),q=u.useSyncExternalStore(it,he,he),z=u.useRef(null),i=u.useRef({notify:O,publishContext:b});return i.current={notify:O,publishContext:b},u.useEffect(()=>W().session.onEnded(kr),[]),u.useEffect(()=>{if(t===!1||!s||!h||!V||j?.key!==w||j.error)return;const f=ge(s);if(!f)return;let C=!1,R;const $=async()=>{try{const H=X.snapshot(),M=re(s);if(!M||f.root!==X.root||!He(s,h,m,H))return;const N=await f.requestPresentedFrame();if(C||X.snapshot()!==H||ge(s)!==f||f.root!==X.root||re(s)!==M||!He(s,h,m,H))return;if(N&&N.width>0&&N.height>0){const I=window.document.createElement("canvas");I.width=Math.min(N.width,1024),I.height=Math.max(1,Math.round(I.width*N.height/N.width));const _=I.getContext("2d");_&&(_.drawImage(N,0,0,I.width,I.height),z.current={project:V,entryId:h,path:m??"Model",image:I.toDataURL("image/png"),capturedAt:performance.now()},rt(z.current))}}catch{}finally{C||(R=setTimeout(()=>{$()},1e3))}};return $(),()=>{C=!0,clearTimeout(R)}},[t,m,s,h,V,w,j,q]),u.useLayoutEffect(()=>{if(!(t===!1||!s||!h||!V||j?.key!==w||j.error))return()=>{if(!W().session.open())return;const f=z.current;f?.project===V&&f.entryId===h&&rt(f)}},[t,m,s,h,V,w,j]),u.useEffect(()=>{if(t===!1||!s)return;let f=!1,C;const R=m===void 0?null:{documentId:s,entryId:h,blend:m},$=Wt(R),H=()=>{C=i.current.publishContext?.(X)};P(null),A(null);const M=W().documents;let N=!1,I=!1,_=!1;const l=m??"the model",p=async()=>{if(!(f||N||I)){if(R&&!qt(R)){_=!0;return}N=!0,_=!1;try{if(R){if(!await Ht(R,H)){_=!0;return}}else H();f||(I=!0,At(nt),P({key:w,error:null}))}catch(n){if(f)return;I=!0,C?.(),C=void 0;const r=n instanceof Error?n.message:String(n);P({key:w,error:r}),W().console.error(r,"blender-open"),i.current.notify?.({tone:"error",title:`Blender could not open ${l}`,detail:je(r)}),Rt(nt,{message:`Blender could not open ${l}: ${r}`,guidance:`${je(r)} Dismiss this to reach the model's Retry.`,command:null})}finally{N=!1}}},g=setInterval(()=>{f||I||A(_?`Still waiting: Blender is holding another model, and opens ${l} when it is free.`:`Still opening ${l}: Blender is working (a large file, or a cold start). ${Ct("status")} shows what it is busy with.`)},Or);let v=!1;const E=()=>{f||v||(v=!0,setTimeout(()=>{v=!1,p()},0))},F=M.subscribe(E);return E(),()=>{f=!0,clearInterval(g),F(),C?.(),$()}},[t,m,s,h,w,B]),t===!1||!s?null:j?.key!==w||j.error?c.jsx(tt,{documentId:s,path:m??"Model",error:j?.key===w?j.error:null,preview:L,note:T,retry:()=>{P(null),D(f=>f+1)},returnToPreview:()=>{L&&W().workspace.open({kind:"document",id:L.entryId}).then(f=>{if(!f)throw new Error("The previous model is no longer available in this project.")}).catch(f=>i.current.notify?.({tone:"error",title:"Could not return to the previous model",detail:String(f)}))}}):c.jsxs(c.Fragment,{children:[c.jsx($r,{...e}),!re(s)&&c.jsx(tt,{documentId:s,path:m??"Model",error:null,preparingView:!0,preview:L,retry:()=>{},returnToPreview:()=>{}})]})}function $r(e){const{documentId:t}=e,o=e.document?.source?.path;u.useEffect(()=>t?tr(t,o):void 0,[t,o]),u.useEffect(()=>{if(!t)return;let _=!1,l=0,p=null;const g=[t,`${t}#area-2`,`${t}#play`],v=()=>{for(const a of g)ge(a)?.setDisplayTransform(p?.transform??null)},E=async()=>{const a=++l,d=await Ut();if(!d)return;const[y,x]=await Promise.all([Ue(`${d.scene}.view_settings`),Ue(`${d.scene}.display_settings`)]);if(_||a!==l||y?.kind!=="struct"||y.type!=="ColorManagedViewSettings")return;if(x?.kind==="struct"){const U=x.groups.flatMap(ve=>ve.rows).find(ve=>ve.identifier==="display_device")?.value;if(typeof U=="string"&&U!=="sRGB")throw new Error(`Blender display device ${U} has no browser display processor yet`)}const S=y.groups.flatMap(U=>U.rows),k=S.find(U=>U.identifier==="view_transform")?.value,Y=S.find(U=>U.identifier==="exposure")?.value,oe=S.find(U=>U.identifier==="look")?.value,Te=S.find(U=>U.identifier==="gamma")?.value,gt=typeof Y=="number"?2**Y:1,Le={transform:typeof k=="string"?k:"AgX",look:typeof oe=="string"?oe:"None",exposure:gt,gamma:typeof Te=="number"?Te:1},Ne=JSON.stringify(Le);if(p?.key===Ne)return;const De=await Kt(Le);if(_||a!==l){De.dispose();return}const yt=p;p={key:Ne,transform:De},v(),yt?.transform.dispose();for(const U of g)we(U,{modes:{rendered:{lighting:{tone:{mapper:"none",exposure:1}}},preview:{lighting:{tone:{mapper:"none",exposure:1}}}}})},F=()=>{E().catch(a=>W().console.error(String(a),"blender-colour"))},n=zt(F),r=ct(v);return F(),()=>{_=!0,n(),r();const a=p;p=null,v(),a?.transform.dispose()}},[t]);const s=u.useSyncExternalStore(ft,()=>t?$e(t):!1,()=>!1),[O,b]=u.useState(null);u.useEffect(()=>{if(!s||!t)return;const _=`${t}#area-2`;Ot(_).drawMode===void 0&&we(_,{drawMode:"rendered"});const l=X.follow();return b(l),()=>{b(null),l.dispose()}},[s,t]);const m=u.useSyncExternalStore(Se,()=>t?Q("model")?.playing(t)??!1:!1,()=>!1),[h,w]=u.useState(null),j=u.useSyncExternalStore(Se,()=>t?Q("model")?.aspectRatio?.(t)??null:null,()=>null),[P,T]=u.useState(!1),A=u.useSyncExternalStore(Se,()=>t?Q("model")?.transport?.generation(t)??0:0,()=>0),[B,D]=u.useState(A),[V,L]=u.useState(null),q=u.useRef(!1),z=u.useRef(!1);u.useLayoutEffect(()=>{if(A!==B){if(m&&t){if(q.current=!0,!z.current){let _=null;try{_=re(`${t}#play`)?.capture?.()??null}catch{}L(_)}z.current=!0}D(A)}},[A,B,m,t]);const i=Q("model")?.transport,f=u.useCallback(_=>i?.subscribeClock(_)??(()=>{}),[i]),C=u.useSyncExternalStore(f,()=>t&&i?i.clock(t).failure??null:null,()=>null);u.useEffect(()=>{C!==null&&(z.current=!1,L(null))},[C]);const R=u.useRef([]);u.useEffect(()=>{if(!m||!t){q.current=!1;return}const _=`${t}#play`;we(_,{drawMode:"rendered"});const l=X.detach(),p=q.current;return q.current=!1,p||T(!1),w(l),p||(X.setPlaying(!0),Ie(t)),()=>{if(q.current&&Q("model")?.playing(t)){R.current.push(l);return}l.dispose();for(const g of R.current.splice(0))g.dispose();z.current=!1,w(null),L(null),X.setPlaying(!1),Ie(t)}},[m,t,B]),u.useEffect(()=>{for(const _ of R.current.filter(l=>l!==h))_.dispose();R.current=R.current.filter(_=>_===h)},[h]),u.useEffect(()=>()=>{for(const _ of R.current.splice(0))_.dispose()},[]),u.useEffect(()=>{if(t)return()=>Q("model")?.setPlaying(t,!1)},[t]);const $=m?h:null,H=j===null?{position:"absolute",inset:0}:{position:"absolute",left:"50%",top:"50%",transform:"translate(-50%, -50%)",width:`min(100cqw, calc(100cqh * ${j}))`,height:`min(100cqh, calc(100cqw / ${j}))`};if(u.useEffect(()=>{if(!$||!t)return;const _=re(t);if(!_)return;const l=_.capture,p=g=>re(`${t}#play`)?.capture?.(g)??null;return _.capture=p,()=>{_.capture===p&&(l?_.capture=l:delete _.capture)}},[$,t]),!t)return null;const M=s?O:null,N={position:"relative",flex:"1 1 0",minWidth:0,margin:12},I=$!==null&&P;return c.jsxs("div",{style:$||M?{position:"absolute",inset:-12,display:"flex",gap:2}:{display:"contents"},children:[c.jsx("div",{inert:I||void 0,style:$?{position:"absolute",inset:12,zIndex:2,opacity:P?0:1,pointerEvents:P?"none":"auto",transition:"opacity 160ms ease-out"}:M?N:{display:"contents"},children:c.jsx(Ee,{...e,view:X,main:!0})},"model"),$&&c.jsx("div",{style:{position:"absolute",inset:12,containerType:"size"},"data-testid":"blender-play-area",children:c.jsx("div",{"data-volter-play-frame":!0,style:H,children:c.jsx(Ee,{...e,documentId:`${t}#play`,view:$.view,main:!1,playing:!0,onPlayReady:()=>{z.current=!1,T(!0),L(null)},onPlayReturn:()=>T(!1)})})},`play-${Rr($)}`),$&&C!==null&&c.jsxs("div",{role:"alert","data-testid":"blender-play-failure",style:{position:"absolute",left:24,right:24,top:24,zIndex:4,padding:`${J[2]} ${J[3]}`,background:G.surface.chrome,border:`1px solid ${G.semantic.danger}`,borderRadius:G.shape.small,color:G.content.primary,fontSize:Ce.sm,whiteSpace:"pre-wrap",overflowWrap:"anywhere",userSelect:"text"},children:[c.jsx("strong",{style:{color:G.semantic.danger},children:"Play is not running."})," ",C," Restart (or save the script) to try again, or Stop."]},"play-failure"),$&&V!==null&&c.jsx("div",{style:{position:"absolute",inset:12,containerType:"size",zIndex:3,pointerEvents:"none"},"data-testid":"blender-play-restart-still",children:c.jsx("img",{alt:"",src:V,style:{...H,display:"block",objectFit:"fill"}})},"restart-still"),M&&c.jsxs("div",{style:{...N,visibility:$?"hidden":void 0},"aria-hidden":$?!0:void 0,"data-testid":"blender-second-area",children:[c.jsx(Ee,{...e,documentId:`${t}#area-2`,view:M.view,main:!1}),!$&&c.jsx(Tr,{documentId:t,areaId:`${t}#area-2`,notify:e.notify})]},"second")]})}function Tr({documentId:e,areaId:t,notify:o}){u.useSyncExternalStore(it,he,he);const s=u.useSyncExternalStore(Pt,()=>Ft(e)),O=re(t)?.HeaderControls,b=u.useRef(null);return u.useEffect(()=>{const m=b.current,h=m?.parentElement;if(!h)return;const w=()=>Ge(e,{headerWidth:h.getBoundingClientRect().width+12,shelf:m});w();const j=new ResizeObserver(w);return j.observe(h),()=>{j.disconnect(),Ge(e,null)}},[e]),c.jsxs(c.Fragment,{children:[c.jsx("div",{ref:b,className:"volter-dock-document-shelf",role:"toolbar","aria-orientation":"vertical","aria-label":"Document tools"}),s&&$t.createPortal(c.jsxs("div",{className:"volter-dock-document-toolbar-own","data-testid":`document-header:${t}`,style:{display:"flex",alignItems:"center"},children:[c.jsx(mt,{documentId:e,notify:o}),O&&c.jsx(u.Suspense,{fallback:null,children:c.jsx(O,{documentId:t})})]}),s)]})}function Ee({active:e,document:t,documentId:o,notify:s,surfaces:O,view:b,main:m,playing:h=!1,onPlayReady:w,onPlayReturn:j}){const P=Fr(b),T=u.useCallback(()=>({root:b.root,prepareDraw:(l,p)=>b.prepareDraw(l,p),...h?{}:{onChange(l){const p=b.onChange(l),g=fe.subscribe(l);return()=>{p(),g()}}},dispose(){}}),[b,h]),A=t?.source?.path,B=u.useCallback(l=>{const p=b.onChange(l),g=fe.subscribe(l);let v=null;const E=()=>{v?.(),v=ee().find(n=>n.documentId===o)?.onFrame(l)??null};E();const F=ce(E);return()=>{p(),g(),F(),v?.()}},[o,b]),D=u.useSyncExternalStore(B,P.subject),V=u.useMemo(()=>m?gr:pt(()=>b),[m,b]);u.useEffect(()=>{if(m||h||!o)return;let l=!1;const p=()=>{if(l)return;const E=ge(o);E===null||b.cameraViewCamera()===null||(l=E.toggleCameraView())};p();const g=ct(p),v=b.subscribeFrames(p);return()=>{g(),v()}},[m,h,o,b]);const L=u.useRef(s),q=u.useRef(null),[z,i]=u.useState(!1);L.current=s;const f=u.useRef(w);f.current=w;const C=u.useRef(j);C.current=j,u.useEffect(()=>{if(!h||!o)return;if(A===void 0){L.current?.({tone:"error",title:"This model has no play script",detail:"A play script stands beside a model's .blend file, and this model has no file of its own."});return}const l=o.replace(/#play$/,""),p=window.document.createElement("div");Object.assign(p.style,{position:"absolute",inset:"0",pointerEvents:"none"}),p.dataset.testid="model-play-roots",q.current?.appendChild(p),i(!1);let g=!1,v=!1,E=null,F=null;const n=()=>{if(E||v||g)return;const S=ee().find(k=>k.documentId===o);!S||!b.root.parent||(v=!0,F=S.rig().orbit,F.enabled=!1,b.prepareRendered(S.rig().drawCamera(),"render").then(()=>{g||(E=Q("model")?.run({documentId:l,container:p,ready:()=>{g||(i(!0),f.current?.())},returning:()=>{g||C.current?.()},sourcePath:A,root:b.root,camera:()=>S.rig().drawCamera(),editingCamera:()=>ee().find(k=>k.documentId===l)?.rig().drawCamera()??S.rig().drawCamera(),onFrame:k=>S.onFrame(k),ownMaterial:k=>rr(k),report:(k,Y)=>{W().console.error(`${k}: ${Y}`,"blender-play"),L.current?.({tone:"error",title:k,detail:Y})}})??null)},k=>{if(g)return;const Y=`The game's stage could not be prepared for a rendered draw: ${k instanceof Error?k.message:String(k)}`;W().console.error(Y,"model-play");const oe=Q("model");oe?.transport?.fail?oe.transport.fail(l,A,Y):(L.current?.({tone:"error",title:"Play could not start",detail:Y}),oe?.setPlaying(l,!1))}))};n();let r,a;const d=()=>{const S=ee().find(k=>k.documentId===o);S!==r&&(a?.(),r=S,a=S?.onFrame(n),n())};d();const y=ce(d),x=S=>{if(S.key==="Escape"&&Tt(S)){const k=Q("model");k?.escape?k.escape(l):k?.setPlaying(l,!1)}};return window.addEventListener("keydown",x,!0),()=>{g=!0,y(),a?.(),window.removeEventListener("keydown",x,!0),E?.(),p.remove(),F&&(F.enabled=!0)}},[h,o,A,b]),u.useEffect(()=>!m||!o?void 0:Ve(()=>{const p=b.savedView(),g=We(o).drawMode,v=Pr[g];!p||v===void 0||p.drawMode===g||(b.noteSavedShading(v),Jt(v))}),[m,o,b]),u.useEffect(()=>{if(m||!o)return;const l=()=>{const p=Lt(o);p===null||at.has(p)||(at.add(p),p.showHelpers&&p.toggleHelpers(),p.showGizmos&&p.toggleGizmos())};return l(),Mt(l)},[m,o]),u.useEffect(()=>{if(!o)return;const l=b.overlayGroups(),p=()=>{const v=ee().find(E=>E.documentId===o);if(v)for(const{kind:E,object:F}of l)v.setHelper(E,F)};p();const g=ce(p);return()=>{g();const v=ee().find(E=>E.documentId===o);for(const{kind:E}of l)v?.setHelper(E,null)}},[o,b]),u.useEffect(()=>{if(!o||!m)return;const{transport:l}=W();let p=null,g=!1,v=!1;const E=()=>{if(g||p)return;const r=l.for(o);r&&(p=fe.attachTo(r))},F=()=>{g||v||(v=!0,queueMicrotask(()=>{v=!1,E()}))};F();const n=l.subscribe(F);return()=>{g=!0,n();const r=p;p=null,r&&queueMicrotask(r)}},[o,m]),u.useEffect(()=>{if(!o)return;const l=()=>ee().find(a=>a.documentId===o);let p,g=null;const v=new nr,E=()=>l()?.rig().drawCamera()??v,F=()=>{const a=l();a!==p&&(g?.(),g=a?a.onFrame(()=>b.refreshRendered()):null,p=a);const{lighting:d,drawMode:y}=We(o),x=y==="preview",S=x?{world:d.source==="scene",lights:d.preview.sceneLights}:void 0,k=d.source==="scene"||x&&d.preview.sceneLights;b.holdRendered(k&&a?E:null,S,h?"render":"viewport"),b.setWorkbench(d.source==="studio"&&d.studioPreset===st.id)};F();const n=Ve(F),r=ce(F);return()=>{n(),r(),g?.(),b.holdRendered(null),b.setWorkbench(!1)}},[o,b,h]);const R=u.useRef(null),$=l=>!h&&l.button===2&&l.shiftKey&&l.target instanceof HTMLCanvasElement,H=l=>{if(!$(l)){R.current=null;return}l.preventDefault(),l.stopPropagation(),R.current={id:l.pointerId,x:l.clientX,y:l.clientY},l.isTrusted&&l.target.setPointerCapture(l.pointerId)},M=()=>{R.current=null},N=l=>{const p=R.current;if(p===null||l.pointerId!==p.id||l.button!==2||(R.current=null,l.preventDefault(),l.stopPropagation(),Math.hypot(l.clientX-p.x,l.clientY-p.y)>3))return;const g=b.placeCursor(l.clientX,l.clientY,l.target);if(g===null)return;const[v,E,F]=g.location,[n,r,a,d]=g.rotation;_e(`from mathutils import Matrix, Quaternion, Vector
|
|
13
|
+
bpy.context.scene.cursor.matrix = Matrix.LocRotScale(Vector((${v}, ${E}, ${F})), Quaternion((${n}, ${r}, ${a}, ${d})), None)`,!1,"Set 3D Cursor").then(y=>{y.error!==null&&W().console.error(`Blender refused the 3D cursor: ${y.error}`,"blender-cursor")},y=>W().console.error(`The 3D cursor was not written to Blender: ${String(y)}`,"blender-cursor"))},I=l=>{$(l)&&l.preventDefault()};if(!o)return null;const _=O.Object3DAuthoring;return c.jsx("div",{ref:q,"data-play-ready":h?z:void 0,style:h?{position:"absolute",inset:0}:{display:"contents"},onPointerDownCapture:H,onPointerUpCapture:N,onPointerCancelCapture:M,onLostPointerCaptureCapture:M,onContextMenuCapture:I,children:c.jsx(_,{active:e??!0,fillContainer:h,documentId:o,sourcePath:A??"blender:runtime",displayName:t?.label??"Model",...D===null?{}:{subject:D},gridScale:P.gridScale,cameraView:P.cameraView,build:T,audit:!1,...h?{}:{authoring:V},cameraDirection:[.8187,.4458,.3617],openingFit:3,openingView:b.savedView(),presentation:(()=>{const l=b.savedView();if(!l)return null;const p={fov:bt(l.lens)};return m&&l.drawMode?{camera:p,drawMode:l.drawMode,modes:{preview:{lighting:{source:l.sceneWorld?"scene":"preview",preview:{sceneLights:l.sceneLights}},backdrop:{source:l.sceneWorld?"scene":"fill"}}}}:{camera:p}})(),stageKind:Mr,dressing:{environment:!1,keyLight:!1,viewLocked:b.studioLights()}})})}export{Ur as Toolbar,Xr as default,Mr as documentKind,Jr as inspectorBuiltins,Kr as inspectorRail,qr as point,Hr as title};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{h1 as n,iC as r}from"./volter-sdk-CTPCkGXt.js";const c="workspace.menu",i={menu:"window",items:[{id:"blender-save-screenshot-editor",label:"Save Screenshot (Editor)…",testId:"menu-save-screenshot-editor",execute:async()=>{const e=n(),t=await e.documents.captureActive();r(t.base64);const o=`screenshots/screenshot-${new Date().toISOString().replace(/[:.]/g,"-")}.png`;await e.files.write(o,Uint8Array.from(atob(t.base64),s=>s.charCodeAt(0))),e.console.log(`Saved the screenshot to ${o}.`,"blender-screenshot")}}]};export{i as menu,c as point};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{n as p,aJ as Me,j as i,h_ as ze,hZ as je,h$ as ye}from"./volter-sdk-CTPCkGXt.js";import{s as oe,p as H,m as W,a as te,b as x,c as Ge,d as Pe,e as Ae,f as J,g as Be}from"./play-mode-CB-BAREv.js";import{s as We,b as ge,g as Ve,h as Ke}from"./blender-runtime-host-CJ3l04y8.js";import"./LineSegments2-D1_2s-N-.js";import"./three.module-dk_BdrjN.js";import"./content-bounds-Dg9hT5Gp.js";import"./clip-planes-CmZu3QTO.js";const Je={transform:{startFrame:-5,pixelsPerFrame:8},refusal:null,size:{w:0,h:0},framedAt:0,drawn:null,onlySelected:!0};let Y=Je,le=0;const U=new Set;let Ne=0;function N(){return Y}function D(){return le}function de(e){return U.add(e),()=>{U.delete(e)}}function $(e){Y={...Y,...e},le+=1;for(const t of[...U])t()}function Ye(e){Y.onlySelected!==e&&$({onlySelected:e})}function $e(){Ne+=1,le+=1;for(const e of[...U])e()}function Ue(){return Ne}function ce(e){$({refusal:e})}const qe=20,P=23,q=26,Xe=16,Ze=2,Qe=P+Ze,xe=35,et=6;function Ie(e){const t=[2,3,5],n=[];for(let r=0;r<t.length;r++){const a=t[r],s=Math.trunc(e/a),c=s*a===e;if(c&&s===2)return a;n[r]=c}for(let r=0;r<t.length;r++)if(n[r])return t[r];return e}function tt(e,t,n,r){if(n===0)return 1;const a=t/n;let s=Math.max(e,1);if(a*s>r)for(;s>1;){const c=Ie(s),l=Math.trunc(s/c);if(a*l<r)break;s=l}else for(;a*s<r&&s<1<<30;)s*=2;return s}function nt(e){return e<=1?null:e/Ie(Math.round(e))}const g={back:"#303030",header:"#303030",grid:"#161616",gridMinor:"#262626",scrubBack:"#1d1d1d",scrubText:"#808080",playhead:"#4772b3",playheadText:"#ffffff",keyBorder:"#000000"},we={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"}},rt={KEYFRAME:1,EXTREME:1.2,MOVING_HOLD:.925,BREAKDOWN:.85,JITTER:.8,GENERATED:.75},be=5.06,st=2.12,it=15,E={minPillWidth:24,textPadding:4,margin:2,radius:4,tipHalfWidth:6,tipHeight:6,stalkWidth:3},ve="#212121",d={text:"#a6a6a6",rule:"#161616",widget:"#545454",widgetText:"#e6e6e6",widgetOutline:"#3d3d3d",widgetRadius:4,unit:qe,refusal:"#ffaf23",headerPadding:"0 8px",headerGap:8,statusPadding:"2px 8px"},at=.2,X={time:0,tick:0,paused:!1,speed:1},V={on:!1,available:!1,by:null};function I(){return ze("model")}function C(e,t){t==="movie"&&I()?.playing(e)&&I()?.setPlaying(e,!1),t==="game"&&x.transport?.snapshot().playbackState==="playing"&&x.transport.pause(),Ge(e,t)}function S(e){const t=e?.document;if(typeof t=="string"&&t!=="")return t;const n=te();if(n===null)throw new Error("No model document is open; open one, or name it with `document`.");return n}function A(){const e=I();if(e===null)throw new Error("This project has no Play tool: `cyclotron add-play` adds @volter/editor-model-play.");if(e.transport===void 0)throw new Error("The installed Play tool has no pause, step, speed or restart; update @volter/editor-model-play.");return e}function k(e){const t=I(),n=Pe(e);return{document:e,mode:W(e),playing:t?.playing(e)??!1,script:n===void 0||t?.scriptPath===void 0?null:{path:t.scriptPath(n),exists:t.hasScript?.(n)??null},clock:t?.transport?.clock(e)??X,speeds:t?.transport?.speeds??[],autoplay:ot(e)}}function ot(e){const t=I(),n=t?.transport?.autoplay?.(e)??V,r=t?.playing(e)??!1,a=Re(r,t?.transport?.clock(e)??X,n);return{...n,driver:r?n.on?"bot":"person":null,why:a}}function Fe(e,t,n){return n.available?null:e&&(t.running??!t.failure)?"no-bot":"not-running"}function Re(e,t,n){switch(Fe(e,t,n)){case null:return null;case"no-bot":return"No autoplay — this game doesn’t provide a bot: its play script registers none with play.autoplay(controller).";case"not-running":return e?`Autoplay is available once the game is running, and it is not running yet${t.failure?`: ${t.failure}`:"."}`:"Autoplay is available once the game is running, and nothing is playing; `play` starts it."}}function re(e,t){if(!A().playing(e))throw new Error(`Nothing is playing in ${e}, so there is nothing to ${t}; \`play\` starts it.`)}je({view:"model-play",title:"Game",verbs:[{id:"state",run:e=>k(S(e))},{id:"mode",run:e=>{const t=S(e),n=e?.mode??e?.to;if(n!==void 0){if(n!=="game"&&n!=="movie")throw new Error(`mode is \`game\` or \`movie\`; got ${String(n)}.`);C(t,n)}return k(t)}},{id:"game-mode",title:"Game: Switch to Game Mode",run:e=>{const t=S(e);return C(t,"game"),k(t)}},{id:"movie-mode",title:"Game: Switch to Movie Mode",run:e=>{const t=S(e);return C(t,"movie"),k(t)}},{id:"play",title:"Game: Play",run:e=>{const t=S(e),n=A();return W(t)!=="game"&&C(t,"game"),n.playing(t)||n.setPlaying(t,!0),k(t)}},{id:"stop",title:"Game: Stop",run:e=>{const t=S(e);return A().setPlaying(t,!1),k(t)}},{id:"pause",title:"Game: Pause",run:e=>{const t=S(e);return re(t,"pause"),A().transport.setPaused(t,!0),k(t)}},{id:"resume",title:"Game: Resume",run:e=>{const t=S(e);return re(t,"resume"),A().transport.setPaused(t,!1),k(t)}},{id:"step",title:"Game: Step One Tick",run:e=>{const t=S(e);re(t,"step");const{transport:n}=A();if(!n.clock(t).paused)throw new Error("step runs one tick of a PAUSED game; `pause` first.");const r=e?.count,a=r===void 0?1:typeof r=="string"&&r.trim()!==""?Number(r):typeof r=="number"?r:Number.NaN;if(!Number.isInteger(a)||a<1||a>600)throw new Error(`step's \`count\` is a whole number from 1 to 600; got ${JSON.stringify(r)}.`);for(let s=0;s<a;s++)n.step(t);return k(t)}},{id:"speed",run:e=>{const t=S(e),{transport:n}=A(),r=e?.speed??e?.to,a=Number(typeof r=="string"?r.replace(/x$/i,""):r);if(!n.speeds.includes(a))throw new Error(`speed is one of ${n.speeds.join(", ")} (simulation seconds per real second); got ${JSON.stringify(r)}.`);return n.setSpeed(t,a),k(t)}},{id:"autoplay",run:e=>{const t=S(e),n=e?.on,r=n===!0||n==="on"||n==="true"?!0:n===!1||n==="off"||n==="false"?!1:void 0;if(r===void 0)throw new Error(`autoplay's \`on\` is true or false (\`play autoplay on|off\`); got ${String(n)}.`);const a=A(),{transport:s}=a;if(s.setAutoplay===void 0)throw new Error("The installed Play tool has no autoplay; update @volter/editor-model-play.");const c=r?Re(a.playing(t),s.clock(t),s.autoplay?.(t)??V):null;if(c!==null)throw new Error(c);return s.setAutoplay(t,r,"cli"),k(t)}},{id:"restart",title:"Game: Restart",run:e=>{const t=S(e),n=A();return W(t)!=="game"&&C(t,"game"),n.transport.restart(t),k(t)}}]});const lt=e=>e.preventDefault();function K(e){return i.jsx("svg",{width:12,height:12,viewBox:"0 0 12 12","aria-hidden":"true",children:i.jsx("path",{d:e,fill:d.widgetText})})}const L={play:"M3 2l7 4-7 4z",stop:"M2.5 2.5h7v7h-7z",pause:"M3 2h2v8H3zM7 2h2v8H7z",step:"M10 2H8.5v8H10zM2.5 2v8L7.5 6z",restart:"M6 1.5V0l3 2.25-3 2.25V3a3 3 0 1 0 3 3h1.5A4.5 4.5 0 1 1 6 1.5z"};function R({label:e,testId:t,disabled:n,pressed:r,wide:a,onClick:s,children:c}){const l=d.unit;return i.jsx("button",{type:"button","data-testid":t,title:e,"aria-label":e,"aria-pressed":r,disabled:n,onMouseDown:lt,onClick:s,style:{minWidth:l,height:l,padding:a?"0 6px":0,border:`1px solid ${d.widgetOutline}`,background:r?g.playhead:d.widget,color:d.widgetText,font:"inherit",display:"inline-flex",alignItems:"center",justifyContent:"center",gap:4,cursor:n?"not-allowed":"pointer",opacity:n?.4:1},children:c})}function Oe({title:e}){p.useSyncExternalStore(oe,H,H);const t=p.useSyncExternalStore(Me,I,()=>null),n=te();if(t===null||n===null)return i.jsx("span",{style:{color:d.text},children:e});const r=W(n),a=(s,c,l)=>i.jsx(R,{testId:`model-play-mode-${s}`,label:l,pressed:r===s,wide:!0,onClick:()=>C(n,s),children:c});return i.jsxs("div",{role:"group","aria-label":"Game or Movie mode","data-testid":"model-play-mode",style:{display:"flex"},children:[a("game","Game","Game mode: this area is the Game panel, with Play, pause, step, speed, restart and autoplay"),a("movie","Movie","Movie mode: this area is the Timeline, playing the file’s animation")]})}function _e(e){const t=Math.floor(e/60),n=(e-t*60).toFixed(2).padStart(5,"0");return t<60?`${t}:${n}`:`${Math.floor(t/60)}:${String(t%60).padStart(2,"0")}:${n}`}function Ee(e){return`${e}×`}function dt(){p.useSyncExternalStore(oe,H,H);const e=te(),t=p.useSyncExternalStore(Me,I,()=>null),n=t?.transport,r=e!==null&&(t?.playing(e)??!1),a=p.useCallback(m=>n?.subscribeClock(m)??(()=>{}),[n]),s=p.useSyncExternalStore(a,()=>e!==null&&n?n.clock(e):X,()=>X),c=p.useSyncExternalStore(a,()=>e!==null&&n?.autoplay?n.autoplay(e):V,()=>V),l=e===null?void 0:Pe(e),y=l===void 0?null:t?.scriptPath?.(l)??null,u=l===void 0?null:t?.hasScript?.(l)??null,b=e!==null&&t!==null,j=e===null?"No model document is open.":u===!1&&y!==null?`No play script yet — Play runs ${y}. \`cyclotron add-play\` adds an example.`:r&&s.failure?`Not running — ${s.failure.replace(/\.$/,"")}. Restart (or save the script) to retry, or Stop.`:r?`${s.paused?"Paused":"Playing"} ${y??""}`.trim():y===null?"Stopped.":`Stopped · Play runs ${y}`;return i.jsxs("div",{"data-testid":"blender-game-panel","data-playing":r||void 0,"data-paused":r&&s.paused||void 0,"data-failed":r&&!!s.failure||void 0,style:{position:"absolute",inset:0,display:"flex",flexDirection:"column",overflow:"hidden",background:g.back,color:d.text,font:"11px Inter, system-ui, sans-serif"},children:[i.jsxs("div",{style:{height:q,flex:`0 0 ${q}px`,display:"flex",alignItems:"center",gap:d.headerGap,padding:d.headerPadding,background:g.header,borderBottom:`1px solid ${d.rule}`},children:[i.jsx(Oe,{title:"Game"}),i.jsx("div",{style:{flex:1}}),i.jsxs("div",{style:{display:"flex"},role:"group","aria-label":"Game transport",children:[i.jsxs(R,{testId:"model-play-button",label:r?"Stop playing (Escape)":"Play this model’s script",pressed:r,wide:!0,disabled:!b,onClick:()=>{e!==null&&t&&t.setPlaying(e,!t.playing(e))},children:[K(r?L.stop:L.play),r?"Stop":"Play"]}),n&&i.jsxs(i.Fragment,{children:[i.jsx(R,{testId:"model-play-pause",label:s.paused?"Resume":"Pause",pressed:r&&s.paused,disabled:!r,onClick:()=>{e!==null&&n.setPaused(e,!n.clock(e).paused)},children:K(s.paused?L.play:L.pause)}),i.jsx(R,{testId:"model-play-step",label:"Step one tick (while paused)",disabled:!r||!s.paused,onClick:()=>{e!==null&&n.step(e)},children:K(L.step)}),i.jsx(R,{testId:"model-play-restart",label:"Restart on a fresh copy of the model",disabled:!r,onClick:()=>{e!==null&&n.restart(e)},children:K(L.restart)})]})]}),n&&i.jsx("div",{style:{display:"flex"},role:"group","aria-label":"Game speed",children:n.speeds.map(m=>i.jsx(R,{testId:`model-play-speed-${m}`,label:`Speed ${Ee(m)}`,pressed:s.speed===m,wide:!0,disabled:e===null,onClick:()=>{e!==null&&n.setSpeed(e,m)},children:Ee(m)},m))}),i.jsx("div",{style:{flex:1}}),i.jsxs("span",{"data-testid":"model-play-clock",style:{color:d.widgetText,fontVariantNumeric:"tabular-nums",whiteSpace:"nowrap"},children:[_e(s.time)," · tick ",s.tick]})]}),i.jsxs("div",{style:{flex:1,minHeight:0,display:"flex",alignItems:"stretch",gap:d.headerGap,padding:d.statusPadding,overflow:"hidden"},children:[i.jsxs("div",{style:{flex:"0 1 260px",minWidth:0,display:"flex",flexDirection:"column",gap:6},children:[i.jsx("span",{"data-testid":"model-play-status",title:j,style:{whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:j}),n?.autoplay&&e!==null&&i.jsx(ct,{documentId:e,playing:r,clock:s,autoplay:c,transport:n})]}),t?.log&&e!==null&&i.jsx(ut,{documentId:e,log:t.log})]})]})}function ct({documentId:e,playing:t,clock:n,autoplay:r,transport:a}){const s=Fe(t,n,r),c=r.armed===!0,l=!t&&a.armAutoplay!==void 0,y=s==="no-bot"?"This game provides no bot: its play script registers none with play.autoplay(controller)":s==="not-running"?l?c?"Autoplay is armed for the next Play; press to disarm":"Turn autoplay on as soon as the game is running (if it offers a bot)":"Autoplay is available once the game is running":r.on?"Stop autoplay and drive yourself":"Let the game’s bot drive (any key or click in the game takes over)",u=s==="no-bot"?"No autoplay — this game doesn’t provide a bot":s==="not-running"?c?"Armed — turns on once the game is running":"Available once the game is running":null;return i.jsxs("div",{style:{display:"flex",alignItems:"center",gap:d.headerGap,minWidth:0},children:[i.jsx("span",{title:y,style:{display:"inline-flex"},children:i.jsx(R,{testId:"model-play-autoplay",label:y,pressed:r.on||c,wide:!0,disabled:l?!1:!t||!r.available||a.setAutoplay===void 0,onClick:()=>{const b=a.autoplay?.(e)??V;I()?.playing(e)??!1?a.setAutoplay?.(e,!b.on,"panel"):a.armAutoplay?.(e,!b.armed)},children:"Autoplay"})}),u!==null?i.jsx("span",{"data-testid":"model-play-autoplay-note","data-reason":s??void 0,style:{color:d.widgetText,minWidth:0},children:u}):t&&i.jsx("span",{"data-testid":"model-play-driver","data-driver":r.on?"bot":"person",style:{color:r.on?g.playhead:d.widgetText,whiteSpace:"nowrap"},children:r.on?"Bot driving":"You’re driving"})]})}const se=200;function Se(e){if(e===void 0)return"";try{return JSON.stringify(e)}catch{return""}}function ut({documentId:e,log:t}){const[n,r]=p.useState(""),[,a]=p.useReducer(u=>u+1,0);p.useEffect(()=>{let u=0;const b=t.subscribe(()=>{u===0&&(u=requestAnimationFrame(()=>{u=0,a()}))});return()=>{b(),cancelAnimationFrame(u)}},[t]);const s=t.tail(e,se,n===""?void 0:n),c=p.useRef(null),l=p.useRef(!0);p.useLayoutEffect(()=>{const u=c.current;u&&l.current&&(u.scrollTop=u.scrollHeight)});const y=s.entries.at(-1)?.seq;return i.jsxs("div",{"data-testid":"model-play-log",style:{flex:1,minWidth:0,display:"flex",flexDirection:"column",gap:4},children:[i.jsxs("div",{style:{display:"flex",alignItems:"center",gap:d.headerGap},children:[i.jsx("span",{children:"Play log"}),i.jsxs("select",{"data-testid":"model-play-log-kind","aria-label":"Show entries of kind",value:n,onChange:u=>{r(u.target.value),u.target.blur()},style:{height:d.unit,background:d.widget,color:d.widgetText,border:`1px solid ${d.widgetOutline}`,font:"inherit"},children:[i.jsx("option",{value:"",children:"All kinds"}),[...new Set([...s.kinds,...n===""?[]:[n]])].map(u=>i.jsx("option",{value:u,children:u},u))]}),i.jsx("span",{style:{color:d.widgetText},children:s.total===0?"Nothing logged yet":`${s.total} written${s.total>se?` · newest ${se} shown`:""}`})]}),i.jsx("div",{ref:c,"data-testid":"model-play-log-entries","data-newest":y,onScroll:u=>{const b=u.currentTarget;l.current=b.scrollTop+b.clientHeight>=b.scrollHeight-4},style:{flex:1,minHeight:0,overflowY:"auto",font:"12px/1.45 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace",background:g.header,border:`1px solid ${d.rule}`,padding:"2px 6px"},children:s.entries.map(u=>i.jsxs("div",{"data-kind":u.kind,style:{display:"flex",gap:10,whiteSpace:"nowrap",color:u.source==="play"?d.widgetText:d.text},children:[i.jsx("span",{style:{flex:"0 0 auto",fontVariantNumeric:"tabular-nums"},children:_e(u.simT)}),i.jsx("span",{style:{flex:"0 0 auto"},children:u.kind}),i.jsx("span",{style:{minWidth:0,overflow:"hidden",textOverflow:"ellipsis"},title:Se(u.facts),children:Se(u.facts)})]},u.seq))})]})}const kt="workspace.document",pt="Timeline",Le=.25,Ce=200,ie={"set-range":"Setting the frame range writes `scene.frame_start`/`frame_end`, which the document would save. This is Blender's Timeline as an INSPECTION surface: the range is drawn, never set. Change it in bpy and the Timeline re-reads it.","insert-key":"Inserting a keyframe writes the action. Editing parity is not the program — key it in bpy (`pose_bone.keyframe_insert`) and the Timeline re-reads the action on the next present.","move-key":"Moving a keyframe writes the F-Curve's control points. The summary row draws the keys the action HAS; the Dope Sheet that would move them is the Animation workspace's, and it is not built.","delete-key":"Deleting a keyframe writes the action. Editing parity is not the program.","set-interpolation":"Setting a key's interpolation writes the F-Curve. Note also that this view PLAYS a per-frame bake (`rna_action_clip`), so interpolation is not a thing it reads back.","select-key":"Selecting a keyframe writes `Keyframe.select_control_point`. The view draws the flags the data carries — a selected key takes `.common.anim.keyframe_selected` — and changes none of them."},Z="No scene transport is attached yet; open the model document first.";function w(){return x.transport}function ae(){return w()?.snapshot().playbackState==="playing"}function Q(e){return ce(e),M()}const ke={JITTER:1,GENERATED:2,MOVING_HOLD:3,BREAKDOWN:4,KEYFRAME:5,EXTREME:6};function He(e,t){const n=[],r=new Map;for(const a of e)if(!(t&&!a.selected)){n.push(a.object);for(const s of a.keyframes){const c=r.get(s.frame);if(!c){r.set(s.frame,{...s});continue}c.select=c.select||s.select,(ke[s.type]??0)>(ke[c.type]??0)&&(c.type=s.type)}}return{columns:[...r.values()].sort((a,s)=>a.frame-s.frame),objects:n}}function ee(){return He(x.state().summary,N().onlySelected).columns.map(e=>e.frame)}function M(){const e=N();return{...x.state(),transform:e.transform,size:e.size,refusal:e.refusal,drawn:e.drawn}}function B(e){if(!x.playable)return Q(Z);const t=w();return t?(t.seekFrame(e),M()):Q("No stage transport is attached yet; open the model document first.")}je({view:"timeline",title:pt,verbs:[{id:"state",run:()=>M()},{id:"frame",title:"Timeline: Set Frame",run:e=>{const t=Number(e?.frame??e?.to);if(!Number.isFinite(t))throw new Error("frame needs a numeric `frame` — a Blender frame number.");return B(t)}},{id:"play",title:"Timeline: Play",run:()=>{if(!x.playable)throw new Error(Z);const e=w();if(!e)throw new Error("No stage transport is attached yet; open the model document first.");return e.play(),M()}},{id:"pause",title:"Timeline: Pause",run:()=>{const e=w();return e?(e.pause(),M()):Q("No stage transport is attached yet.")}},{id:"jump-start",title:"Timeline: Jump to Start",run:()=>B(x.state().start)},{id:"jump-end",title:"Timeline: Jump to End",run:()=>B(x.state().end)},{id:"next-keyframe",title:"Timeline: Next Keyframe",run:()=>{const e=x.frame(),t=ee().find(n=>n>e+1e-4);return t===void 0?M():B(t)}},{id:"prev-keyframe",title:"Timeline: Previous Keyframe",run:()=>{const e=x.frame(),t=ee().reverse().find(n=>n<e-1e-4);return t===void 0?M():B(t)}},{id:"view-all",title:"Timeline: View All",run:()=>($e(),M())},{id:"zoom",title:"Timeline: Zoom",run:e=>{const t=Number(e?.to??e?.zoom);if(!Number.isFinite(t))throw new Error("zoom needs a numeric `to` — CSS pixels per frame, 0.25 … 200.");const{transform:n,size:r}=N(),a=n.startFrame+r.w/2/n.pixelsPerFrame,s=Math.min(Ce,Math.max(Le,t));return $({transform:{pixelsPerFrame:s,startFrame:a-r.w/2/s}}),M()}},{id:"pan",title:"Timeline: Pan",run:e=>{const t=Number(e?.frames??0);if(!Number.isFinite(t))throw new Error("pan needs a numeric `frames`.");const{transform:n}=N();return $({transform:{...n,startFrame:n.startFrame+t}}),M()}},...Object.keys(ie).map(e=>({id:e,run:()=>Q(ie[e])}))]});const Te="timeline";function Tt(){p.useSyncExternalStore(oe,H,H);const e=te(),t=e!==null&&W(e)==="game";return p.useEffect(()=>ye(Te,t?at:null),[t]),p.useEffect(()=>()=>ye(Te,null),[]),t?i.jsx(dt,{}):i.jsx(mt,{})}function mt(){const e=p.useSyncExternalStore(We,ge,ge);p.useSyncExternalStore(Ae,J,J),p.useSyncExternalStore(de,D,D);const t=p.useRef(null),n=p.useRef(-1),{transform:r,size:a,refusal:s,onlySelected:c}=N(),l=x.state();p.useEffect(()=>{let o=!0;return x.bind(Be,{rig:()=>Ke(),clip:()=>Ve()}).catch(f=>{o&&ce(`The Timeline could not read this file's rig: ${f instanceof Error?f.message:String(f)}`)}),()=>{o=!1}},[e]),p.useEffect(()=>{const o=t.current;if(!o)return;const f=new ResizeObserver(()=>{const h={w:o.clientWidth,h:o.clientHeight},v=N().size;(v.w!==h.w||v.h!==h.h)&&$({size:h})});return f.observe(o),$({size:{w:o.clientWidth,h:o.clientHeight}}),()=>f.disconnect()},[]);const y=Ue();p.useEffect(()=>{if(y===n.current)return;n.current=y;const{w:o}=N().size;if(o===0)return;const f=Math.max(1,l.end-l.start),h=Math.min(Ce,Math.max(Le,o*.9/f));$({transform:{pixelsPerFrame:h,startFrame:l.start-o*.05/h},framedAt:Date.now()})},[y,l.start,l.end]);const u=p.useCallback(o=>(o-r.startFrame)*r.pixelsPerFrame,[r]),b=p.useCallback(o=>r.startFrame+o/r.pixelsPerFrame,[r]),j=p.useMemo(()=>He(l.summary,c),[l.summary,c]),m=p.useMemo(()=>{if(a.w===0)return null;const o=a.w/r.pixelsPerFrame,f=Math.max(`${Math.round(r.startFrame)}`.length,`${Math.round(r.startFrame+o)}`.length),h=Math.max(xe,f*6+et),v=tt(Math.round(l.fps),a.w+1,o,h),T=nt(v),De=Math.ceil(r.startFrame/v)*v,fe=[];for(let z=De;z<=r.startFrame+o;z+=v)fe.push(z);const he=[];if(T!==null&&T*r.pixelsPerFrame>=xe/5){const z=Math.ceil(r.startFrame/T)*T;for(let G=z;G<=r.startFrame+o;G+=T)Math.abs(G/v-Math.round(G/v))>1e-6&&he.push(G)}return{major:v,minor:T,majors:fe,minors:he}},[a.w,r,l.fps]),O=P,F=Qe+Xe/2;p.useEffect(()=>{if(!m)return;const o=[...l.warnings];l.action||o.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."),o.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."),o.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&&j.objects.length===0&&l.summary.length>0&&o.push(`The summary row is empty because nothing animated is SELECTED, which is Blender's own answer with this filter on. ${l.summary.map(h=>h.object).join(", ")} carr${l.summary.length===1?"ies":"y"} an action; select it, or turn the filter off.`),o.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 f={drawn:{action:l.action,object:l.object,armature:l.armature,frame:l.frame,start:l.start,end:l.end,fps:l.fps,playing:ae(),keyframes:j.columns.map(h=>h.frame),onlySelected:c,summaryObjects:j.objects,majorStep:m.major,minorStep:m.minor,majorLines:m.majors.length,minorLines:m.minors.length,labels:m.majors.length,diamonds:j.columns.length,diamondRadius:be,diamondSprite:it,bones:l.bones,tracks:l.tracks,engineCalls:l.engineCalls,warnings:o}};JSON.stringify(f.drawn)!==JSON.stringify(N().drawn)&&$(f)},[m,l,j,c]);const ne=p.useRef(!1),ue=p.useCallback(o=>{const f=t.current;if(!f)return;const h=f.getBoundingClientRect();w()?.seekFrame(Math.round(b(o-h.left)))},[b]),pe=`${Math.round(l.frame)}`,me=Math.max(E.minPillWidth,pe.length*6+2*E.textPadding),_=u(l.frame);return i.jsxs("div",{"data-testid":"blender-timeline",style:{position:"absolute",inset:0,display:"flex",flexDirection:"column",overflow:"hidden",background:g.back,color:d.text,font:"11px Inter, system-ui, sans-serif"},children:[i.jsx(ht,{}),i.jsx("div",{ref:t,style:{flex:1,minHeight:0,position:"relative"},children:i.jsxs("svg",{width:a.w,height:a.h,style:{display:"block",cursor:"ew-resize"},"aria-label":"Timeline",onPointerDown:o=>{ne.current=!0,o.currentTarget.setPointerCapture(o.pointerId),ue(o.clientX)},onPointerMove:o=>{ne.current&&ue(o.clientX)},onPointerUp:o=>{ne.current=!1,o.currentTarget.releasePointerCapture(o.pointerId)},children:[i.jsx("title",{children:"Timeline"}),i.jsx("rect",{x:0,y:0,width:a.w,height:a.h,fill:g.back}),i.jsx("rect",{x:0,y:O,width:Math.max(0,u(l.start)),height:Math.max(0,a.h-O),fill:ve}),i.jsx("rect",{x:u(l.end),y:O,width:Math.max(0,a.w-u(l.end)),height:Math.max(0,a.h-O),fill:ve}),m?.minors.map(o=>i.jsx("line",{x1:u(o),y1:O,x2:u(o),y2:a.h,stroke:g.gridMinor,strokeWidth:1},`n${o}`)),m?.majors.map(o=>i.jsx("line",{x1:u(o),y1:O,x2:u(o),y2:a.h,stroke:g.grid,strokeWidth:1},`m${o}`)),i.jsx("rect",{x:0,y:0,width:a.w,height:P,fill:g.scrubBack}),m?.majors.map(o=>i.jsx("text",{x:u(o),y:15.5,textAnchor:"middle",fill:g.scrubText,fontSize:11,children:Math.round(o)},`t${o}`)),i.jsx("path",{d:`M3,${F-3.5} L6.5,${F} L3,${F+3.5} Z`,fill:g.scrubText}),j.columns.map(o=>{const f=rt[o.type]??1,h=be*f,v=we[o.type]??we.KEYFRAME,T=u(o.frame);return i.jsx("polygon",{points:`${T},${F-h} ${T+h},${F} ${T},${F+h} ${T-h},${F}`,fill:o.select?v.selected:v.fill,stroke:g.keyBorder,strokeWidth:st*f},`k${o.frame}`)}),i.jsx("rect",{x:_-E.stalkWidth/2,y:P,width:E.stalkWidth,height:Math.max(0,a.h-P),fill:g.playhead}),i.jsx("rect",{x:_-me/2,y:E.margin,width:me,height:P-2*E.margin,rx:E.radius,fill:g.playhead}),i.jsx("polygon",{points:`${_-E.tipHalfWidth},${P-E.margin} ${_+E.tipHalfWidth},${P-E.margin} ${_},${P-E.margin+E.tipHeight}`,fill:g.playhead}),i.jsx("text",{x:_,y:15.5,textAnchor:"middle",fill:g.playheadText,fontSize:11,children:pe})]})}),s?i.jsx("div",{style:{borderTop:`1px solid ${d.rule}`,padding:d.statusPadding,color:d.refusal},children:s}):null]})}function ft(){p.useSyncExternalStore(de,D,D);const{onlySelected:e}=N(),[t,n]=p.useState(!1),r=(a,s,c)=>i.jsxs("button",{type:"button",onClick:()=>{c(),n(!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:[i.jsx("span",{style:{width:12,display:"inline-block"},children:s===null?"":s?"✓":""}),a]});return i.jsxs("span",{style:{position:"relative"},children:[i.jsx("button",{type:"button","aria-haspopup":"menu","aria-expanded":t,onClick:()=>n(a=>!a),style:{border:"none",background:"transparent",color:d.text,font:"inherit",padding:"0 var(--volter-space-2)",cursor:"pointer"},children:"View"}),t?i.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,()=>Ye(!e)),r("Frame All",null,()=>$e())]}):null]})}function ht(){p.useSyncExternalStore(Ae,J,J),p.useSyncExternalStore(de,D,D);const e=x.state(),t=d.unit,n=x.playable,r=(s,c,l,y)=>i.jsx("button",{type:"button",title:n?y:`${y} — ${Z}`,"aria-label":y,disabled:!n,onClick:l,style:{width:t,height:t,padding:0,border:`1px solid ${d.widgetOutline}`,background:d.widget,color:d.widgetText,display:"grid",placeItems:"center",cursor:n?"pointer":"not-allowed",opacity:n?1:.4},children:c},s),a=s=>i.jsx("svg",{width:12,height:12,viewBox:"0 0 12 12","aria-hidden":"true",children:i.jsx("path",{d:s,fill:d.widgetText})});return i.jsxs("div",{style:{height:q,flex:`0 0 ${q}px`,display:"flex",alignItems:"center",gap:d.headerGap,padding:d.headerPadding,background:g.header,borderBottom:`1px solid ${d.rule}`},children:[i.jsx(Oe,{title:"Timeline"}),i.jsx(ft,{}),i.jsx("div",{style:{flex:1}}),i.jsxs("div",{style:{display:"flex"},children:[r("jump-start",a("M2 2h1.5v8H2zM10 2v8L4.5 6z"),()=>w()?.seekFrame(e.start),"Jump to Start"),r("prev-key",a("M5 2.5v7L1.5 6zM8.5 3.2L11 6L8.5 8.8L6 6z"),()=>{const s=ee().reverse().find(c=>c<x.frame()-1e-4);s!==void 0&&w()?.seekFrame(s)},"Jump to Previous Keyframe"),n&&ae()?r("pause-rev",a("M3 2h2v8H3zM7 2h2v8H7z"),()=>w()?.pause(),"Pause"):r("play-reverse",a("M9 2L2 6l7 4z"),()=>w()?.play("reverse"),"Play Reverse"),n&&ae()?r("pause",a("M3 2h2v8H3zM7 2h2v8H7z"),()=>w()?.pause(),"Pause"):r("play",a("M3 2l7 4-7 4z"),()=>w()?.play(),"Play"),r("next-key",a("M7 2.5v7L10.5 6zM3.5 3.2L6 6L3.5 8.8L1 6z"),()=>{const s=ee().find(c=>c>x.frame()+1e-4);s!==void 0&&w()?.seekFrame(s)},"Jump to Next Keyframe"),r("jump-end",a("M10 2H8.5v8H10zM2 2v8L7.5 6z"),()=>w()?.seekFrame(e.end),"Jump to End")]}),i.jsxs("div",{style:{display:"flex"},children:[r("step-back",a("M2 2h1.5v8H2zM9.5 2v8L4.5 6z"),()=>w()?.seekFrame(Math.round(e.frame)-1),"Step Back One Frame"),r("step-forward",a("M10 2H8.5v8H10zM2.5 2v8L7.5 6z"),()=>w()?.seekFrame(Math.round(e.frame)+1),"Step Forward One Frame")]}),i.jsx("div",{style:{flex:1}}),i.jsx("input",{type:"number",value:Math.round(e.frame),onChange:s=>{const c=Number(s.target.value);Number.isFinite(c)&&w()?.seekFrame(c)},"aria-label":"Current frame",disabled:!n,title:n?void 0:Z,style:{width:75,height:t,textAlign:"center",border:`1px solid ${d.widgetOutline}`,borderRadius:d.widgetRadius,background:d.widget,color:d.widgetText,font:"inherit",cursor:n?"text":"not-allowed",opacity:n?1:.4}}),i.jsxs("span",{onClick:()=>ce(ie["set-range"]),onKeyDown:()=>{},style:{color:d.text,cursor:"not-allowed"},children:["Start ",e.start," · End ",e.end]})]})}export{Tt as default,kt as point,pt as title};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{n as c,j as u,hZ as le}from"./volter-sdk-CTPCkGXt.js";import{s as ue,b as X,j as de}from"./blender-runtime-host-CJ3l04y8.js";import"./content-bounds-Dg9hT5Gp.js";import"./three.module-dk_BdrjN.js";import"./clip-planes-CmZu3QTO.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},Te="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,Z=0;for(let A=0;A<I;A++){const G=ce+A,q=e[G*2],Y=e[G*2+1];H+=q,Z+=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(Z/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,Te as point,_e as title};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{h1 as s,n as r,j as n}from"./volter-sdk-CTPCkGXt.js";const i="workspace.status",a="Version",l="right",c=998;function u(){const{project:t}=s(),e=r.useSyncExternalStore(t.subscribe,t.engineVersion,t.engineVersion);return e===null?null:n.jsxs("span",{className:"volter-status-copy","data-testid":"status-blender-version","data-engine-version":e,style:{display:"inline-flex",alignItems:"center",gap:"var(--volter-space-2)",fontSize:"var(--volter-font-md)"},title:`This project is built against engine ${e}`,children:[n.jsx("span",{"aria-hidden":"true",style:{width:"var(--volter-stroke-resting)",height:"var(--volter-icon-md)",background:"currentColor"}}),e]})}export{l as align,u as default,c as order,i as point,a as title};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as f,S as k,P as v,b as x,s as F,A as $,c as D,o as N}from"./worker-D1j8wqVo.js";import{s as W}from"./session-C0OdhDD8.js";const u="/bw",B=`${k}/frame.bin`,A=new Set(["scripts/startup/vgai_three.py","scripts/startup/volter_three.py"]);async function T(e){const a=f(`wali/${e}`);try{return await import(a)}catch(l){throw new Error(`The substrate skew needs ${e}, which this editor serves from the WALI pack directory beside blender.wasm (${a}): ${l instanceof Error?l.message:String(l)}`)}}async function z(e,a){const l=performance.now(),r=await fetch(f("runtime.idx"));if(!r.ok)throw new Error(`${$}/runtime.idx answered ${r.status}`);const o=await r.json(),s=await fetch(f("runtime.bin"));if(!s.ok)throw new Error(`${$}/runtime.bin answered ${s.status}`);const i=new Uint8Array(await s.arrayBuffer());let d=0;for(const t of o.files){if(d+t.size>i.byteLength)throw new Error(`Blender runtime ${t.path}: bytes ${d}..${d+t.size} lie outside the ${i.byteLength}-byte runtime blob`);if(A.has(t.path)){d+=t.size;continue}const c=`${u}/${t.path}`;e.mkdirSync(c.slice(0,c.lastIndexOf("/")),{recursive:!0}),e.writeFileSync(c,i.subarray(d,d+t.size)),d+=t.size}if(d!==i.byteLength)throw new Error(`Blender runtime index accounts for ${d} of the ${i.byteLength} bytes served`);const h=Math.round(performance.now()-l);return a("log",`blender: staged Blender's ${o.files.length}-file runtime tree in ${h} ms`),{files:o.files.length,bytes:i.byteLength,ms:h}}async function C(e,a){const l=performance.now(),r=await fetch(f("runtime.idx"));if(!r.ok)throw new Error(`${$}/runtime.idx answered ${r.status}`);const o=await r.json(),s=o.files.reduce((b,n)=>b+n.size,0),i=await fetch(f("runtime.bin"));if(!i.ok||!i.body)throw new Error(`${$}/runtime.bin answered ${i.status}`);const d=new SharedArrayBuffer(s),h=new Uint8Array(d);let t=0;const c=i.body.getReader();for(;;){const{done:b,value:n}=await c.read();if(b)break;if(t+n.byteLength>s)throw new Error(`Blender runtime blob is longer than the ${s} bytes its index accounts for`);h.set(n,t),t+=n.byteLength}if(t!==s)throw new Error(`Blender runtime index accounts for ${s} bytes; the blob served ${t}`);const y=e(u,o.files,d,{mtimeMs:Date.now(),include:b=>!A.has(b)});return a("log",`blender: shared Blender's ${o.files.length}-file runtime tree in ${Math.round(performance.now()-l)} ms`),y}async function H(e,a,l){const r=performance.now(),o=await fetch(f("runtime.idx"));if(!o.ok)throw new Error(`${$}/runtime.idx answered ${o.status}`);const s=await o.text(),i=JSON.parse(s),h=[...new Uint8Array(await crypto.subtle.digest("SHA-256",new TextEncoder().encode(s))).slice(0,12)].map(n=>n.toString(16).padStart(2,"0")).join(""),t=`${_}${h}`;if(a)try{await a(t)}catch(n){l("log",`blender: the runtime tree stays in memory: it cannot be held in use (${n instanceof Error?n.message:String(n)})`);return}let c;try{c=new Worker(f("wali/browser-wali/tree-store-worker.js"),{type:"module"})}catch(n){l("log",`blender: the runtime tree stays in memory: no installer worker (${n instanceof Error?n.message:String(n)})`);return}const y=await new Promise(n=>{let g=!1;const S=w=>{g||(g=!0,n(w))};let E=setTimeout(()=>S({ok:!1,error:`no progress in ${R/1e3} s`}),R);c.onmessage=w=>{if(clearTimeout(E),typeof w.data?.progress=="number"){g||(E=setTimeout(()=>S({ok:!1,error:`no progress in ${R/1e3} s`}),R));return}c.terminate(),S(w.data)},c.onerror=w=>{clearTimeout(E),c.terminate(),S({ok:!1,error:w.message||"the installer worker failed to start"})},c.postMessage({projectId:t,family:_,root:u,files:i.files,blobUrl:new URL(f("runtime.bin"),location.href).href,mtimeMs:Date.now()})});if(!y.ok){l("log",`blender: the runtime tree stays in memory: it could not be installed (${y.error})`);return}const b=e(u,i.files,t,{mtimeMs:Date.now(),include:n=>!A.has(n)});return l("log",`blender: Blender's ${i.files.length}-file runtime tree is on disk (${y.installed?`installed, ${Math.round((y.bytes??0)/1e6)} MB`:"installed before"}) in ${Math.round(performance.now()-r)} ms`),b}const _="host-tree.blender-runtime-",R=2e4;function U(e){const a=new Set,l=()=>{for(const r of[...a])r()};return e.on?.("change",l),e.on?.("delete",l),{...e.on?{changed:r=>new Promise(o=>{const s=()=>{clearTimeout(i),a.delete(s),o()},i=setTimeout(s,r);a.add(s)})}:{},readFile:r=>e.readFile(r),writeFile:(r,o)=>(e.writeFileSync(r,o),Promise.resolve()),mkdirTree:async r=>e.mkdirSync(r,{recursive:!0}),readdir:async r=>e.readdirSync(r),stat:async r=>{if(!e.existsSync(r))return null;const o=e.statSync(r);return{size:o.size,mode:o.mode&4095|(o.isDirectory()?16384:32768),mtimeMs:o.mtimeMs}},unlink:async r=>e.unlinkSync(r)}}async function V(e,a){const l=performance.now(),[r,o,s]=await Promise.all([T("browser-wali/worker-program.js"),T("browser-runtime/browser-memory-filesystem.js"),T("browser-wali/shared-file-layer.js").catch(()=>({}))]),i=r.BrowserWaliWorkerProgram,d=o.BrowserMemoryFileSystem;if(!i||!d)throw new Error("The substrate modules this editor served do not export BrowserWaliWorkerProgram and BrowserMemoryFileSystem; the WALI pack directory holds a browser-substrate this engine does not know.");const h=r.preloadWaliModule;h&&a.integrity&&h(f("blender.wasm"),a.integrity).catch(()=>{});const t=new d;for(const m of["/tmp","/root","/work",k,...v,e.project])t.mkdirSync(m,{recursive:!0});const c=s.sharedFileLayerFromIndex,y=s.storeFileLayerFromIndex,b=s.holdTreeStore,n=(y?await H(y,b,e.log):void 0)??(c?await C(c,e.log):void 0);n||await z(t,e.log),t.writeFileSync(x,W);const g=a.workers??{pool:16,blender:4},S=new i(t,{url:f("blender.wasm"),...a.integrity?{integrity:a.integrity}:{},cwd:"/work",env:{HOME:"/root",TMPDIR:"/tmp",PATH:"/usr/bin:/bin",BLENDER_SYSTEM_RESOURCES:u,BLENDER_SYSTEM_SCRIPTS:`${u}/scripts`,BLENDER_SYSTEM_DATAFILES:`${u}/datafiles`,BLENDER_SYSTEM_PYTHON:`${u}/python`,PYTHONPATH:`${u}/python/lib/numpy313.zip:${u}/python/lib/wheels313.zip`,VOLTER_SESSION_ROOT:k,VOLTER_EXPORT_BUFFER_PATH:B,OPENIMAGEIO_THREADS:"1"},...n?{layers:[n]}:{},privateRoots:["/tmp"],threadPoolSize:g.pool,network:{allowedHosts:[],maxConnections:0,maxBytes:0}});let E=null,w=null;const L=m=>{for(const p of m.split(`
|
|
2
|
+
`))p!==""&&(p.startsWith("@@VOLTER-READY ")&&(E=p.slice(15)),e.log(D(p),p))};for(S.run(["/blender","-b","--factory-startup","-noaudio","--python-use-system-env","-t",String(g.blender),"--python",x],{onStdout:L,onStderr:L,onDiagnostic:m=>e.log("error",`@@VOLTER-ERROR ${m}`)}).then(m=>{w=`Blender exited ${m.exitCode}`},m=>{w=m instanceof Error?m.message:String(m)}).finally(()=>{w!==null&&e.log("error",`@@VOLTER-ERROR the Blender program ended: ${w}`)});E===null;){if(w!==null)throw new Error(`Blender never reached its session: ${w}`);await F(5)}const M=performance.now()-l,I=JSON.parse(E);e.log("log",`blender: the substrate skew is up (${g.blender} Blender threads in a pool of ${g.pool}; Blender is SERIAL without -t N and says so)`);const O=U(t),{request:P}=N(O,e,()=>w);return{skew:"wali",banner:I,files:O,request:P,readArena:()=>t.readFile(B),bootMs:M,memoryBytes:()=>null,releasedPayloadBytes:null}}export{V as startWaliBlenderEngine};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{K as l}from"./blender-runtime-host-CJ3l04y8.js";import"./content-bounds-Dg9hT5Gp.js";import"./three.module-dk_BdrjN.js";import"./volter-sdk-CTPCkGXt.js";import"./clip-planes-CmZu3QTO.js";const s="workspace.command",e=(o,n)=>({...n===void 0?{}:{timeoutMs:n},derivedRefresh:o,handle:r=>l(r)}),c={"blender-draw-batching":e("none"),"blender-start":e("none",12e4),"blender-stop":e("none",30*6e4),"blender-execute":e("always",30*6e4),"blender-scene-info":e("none",6e4),"blender-object-info":e("none",6e4),"blender-screenshot-view":e("always",6e4),"blender-read-file":e("none",6e4),"blender-write-file":e("none",6e4),"blender-list-files":e("none",6e4),"blender-rna":e("none",6e4),"blender-rna-context":e("none",6e4),"blender-rna-set":e("always",6e4),"blender-outliner":e("none",6e4),"blender-node-tree":e("none",6e4),"blender-uv-layout":e("none",6e4),"blender-rig":e("none",6e4),"blender-action-clip":e("none",12e4),"blender-node-view":e("none"),"blender-outliner-set":e("always",6e4),"blender-status":e("none")};export{c as commands,s as point};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const t="/assets/city-EkhAOo5s.exr",e="/assets/courtyard-DqlebbpC.exr",r="/assets/forest-P_CQY3b_.exr",s="/assets/interior-Bo_lba15.exr",i="/assets/night-CvV4Gybt.exr",o="/assets/studio-CysTBGIb.exr",n="/assets/sunrise-Dj0psFrf.exr",l="/assets/sunset-Bw3x2Bot.exr",d="workspace.environment",u={id:"blender-studiolights-world",source:"Blender's world studio lights, CC0 (Poly Haven); studiolights/world/license.txt",images:[{id:"blender:forest",title:"Forest",url:r,format:"exr"},{id:"blender:city",title:"City",url:t,format:"exr"},{id:"blender:courtyard",title:"Courtyard",url:e,format:"exr"},{id:"blender:interior",title:"Interior",url:s,format:"exr"},{id:"blender:night",title:"Night",url:i,format:"exr"},{id:"blender:studio",title:"Studio",url:o,format:"exr"},{id:"blender:sunrise",title:"Sunrise",url:n,format:"exr"},{id:"blender:sunset",title:"Sunset",url:l,format:"exr"}]};export{u as environment,d as point};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e="workspace.keymap",t={id:"blender",title:"Blender",description:"Blender bindings: W select, G/R/S gizmo modes, X delete, Shift+D duplicate, A select all, Alt+A deselect, . frames.",bindings:{"transform.select":[{key:"w"}],"transform.translate":[{key:"g"}],"transform.rotate":[{key:"r"}],"transform.scale":[{key:"s"}],"edit.delete":[{key:"x"}],"edit.duplicate":[{key:"d",shift:!0}],"edit.selectAll":[{key:"a"},{key:"a",mod:!0}],"edit.deselectAll":[{key:"a",alt:!0}],"viewport.frameSelection":[{key:"."},{key:"",code:"NumpadDecimal"}],"viewport.cyclePivot":[{key:","}],"canvas.panMode":[],"canvas.rulerMode":[],"canvas.toggleGrid":[],"view.perspective":[],"view.projection":[{key:"",code:"Numpad5"}],"view.back":[{key:"",code:"Numpad1",ctrl:!0}],"view.left":[{key:"",code:"Numpad3",ctrl:!0}],"view.bottom":[{key:"",code:"Numpad7",ctrl:!0}],"view.orbitLeft":[{key:"",code:"Numpad4"}],"view.orbitRight":[{key:"",code:"Numpad6"}],"view.orbitUp":[{key:"",code:"Numpad8"}],"view.orbitDown":[{key:"",code:"Numpad2"}],"view.opposite":[{key:"",code:"Numpad9"}],"view.rollLeft":[{key:"",code:"Numpad4",shift:!0}],"view.rollRight":[{key:"",code:"Numpad6",shift:!0}],"view.all":[{key:"",code:"Home"}],"view.zoomIn":[{key:"",code:"NumpadAdd"},{key:"",code:"Equal",ctrl:!0}],"view.zoomOut":[{key:"",code:"NumpadSubtract"},{key:"",code:"Minus",ctrl:!0}]},navigation:{orbit:"middle",turntable:{degreesPerPixel:.4},autoPerspective:!0,zoom:{step:1.2,drag:"dolly"}}};export{t as keymap,e as point};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{j as e}from"./volter-sdk-CTPCkGXt.js";const w="workspace.status",m="Mouse hints",j="left",b=0,u=[{button:"left",label:"Select"},{button:"middle",label:"Pan View"},{button:"right",label:"Orbit View"}],l=1,h=8,a=5,x=1,r=6.25,g=3.6,i={width:12,height:16};function p({button:t}){const s=`volter-mouse-${t}`,c=i.width-a,d=t==="right"?c:0,o=l/2,n=g;return e.jsxs("svg",{viewBox:`0 0 ${i.width} ${i.height}`,role:"presentation","aria-hidden":"true",focusable:"false",style:{height:"var(--volter-icon-lg)",width:"auto",display:"block",flex:"0 0 auto"},children:[e.jsxs("title",{children:[t," mouse button"]}),e.jsx("clipPath",{id:`${s}-outer`,children:e.jsx("rect",{x:"0",y:"0",width:i.width,height:i.height,rx:n})}),e.jsxs("mask",{id:`${s}-shell`,children:[e.jsx("rect",{x:"0",y:"0",width:i.width,height:i.height,fill:"white"}),t!=="middle"&&e.jsx("rect",{x:t==="right"?r:-1,y:-1,width:t==="right"?i.width-r+1:r+1,height:h+x+1,fill:"black"})]}),e.jsx("rect",{x:o,y:o,width:i.width-l,height:i.height-l,rx:n-o,fill:"none",stroke:"currentColor",strokeWidth:l,mask:`url(#${s}-shell)`}),t!=="middle"&&e.jsx("rect",{x:d,y:"0",width:a,height:h,fill:"currentColor",clipPath:`url(#${s}-outer)`}),t==="middle"&&e.jsx("rect",{x:"4",y:"2",width:"4",height:"7",rx:"1.25",fill:"currentColor"})]})}function y(){return e.jsx("span",{className:"volter-status-copy","data-testid":"status-blender-mouse-hints",style:{display:"inline-flex",alignItems:"center",gap:"var(--volter-space-5)"},children:u.map(t=>e.jsxs("span",{"data-mouse-button":t.button,style:{display:"inline-flex",alignItems:"center",gap:"var(--volter-space-1)",fontSize:"var(--volter-font-md)"},title:`${t.label} — the ${t.button} mouse button in the viewport`,children:[e.jsx(p,{button:t.button}),t.label]},t.button))})}export{j as align,y as default,b as order,w as point,m as title};
|