@volter/cyclotron 0.5.201 → 0.5.203
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 +956 -924
- package/LICENSE-BLENDER +11 -0
- package/README.md +16 -10
- package/dist/.vite/manifest.json +2316 -2307
- package/dist/assets/EntityModelDocument-CTq_jwpe.js +1 -0
- package/dist/assets/EnvironmentAssetDocument-CaSQc1HY.js +1 -0
- package/dist/assets/InspectorObjectPreview-P6pJxnGB.js +1 -0
- package/dist/assets/LiveModuleDocument-B6Iw2YIE.js +2 -0
- package/dist/assets/LutAssetDocument-C7Tc5hRu.js +1 -0
- package/dist/assets/ModelAssetDocument-BUOK0YzX.js +1 -0
- package/dist/assets/NonThreeAuthoringBootstrap-Bbtz8I0R.js +1 -0
- package/dist/assets/Object3DDocumentToolbar-GjvQOSkS.js +1 -0
- package/dist/assets/Object3DPreview-BUogCxPt.js +2 -0
- package/dist/assets/QuarksAssetDocument-Cxg3fT6D.js +2 -0
- package/dist/assets/ShaderAssetDocument-BbXBHSY3.js +1 -0
- package/dist/assets/StageHost-BtQd8CQk.js +1179 -0
- package/dist/assets/ToolObject3DPreview-imwBjs0O.js +1 -0
- package/dist/assets/ViewportShadingMenu-Dx1gY8Op.js +1 -0
- package/dist/assets/animation-mixers.service-fNXcr-Vc.js +1 -0
- package/dist/assets/animation-timeline.utility-Dzab5JgT.js +1 -0
- package/dist/assets/asset-preview-BEzZu4j-.js +4 -0
- package/dist/assets/blender-emscripten-engine-BFUuajuh.js +2 -0
- package/dist/assets/blender-node-editor.document-Cu3LXipe.js +1 -0
- package/dist/assets/blender-properties-model-BrD2rboW.js +1 -0
- package/dist/assets/blender-properties-tab-CkbWamuD.js +3 -0
- package/dist/assets/blender-runtime-host-7Wv16WQe.js +7221 -0
- package/dist/assets/blender-runtime.document-CSHvDIaD.js +13 -0
- package/dist/assets/blender-screenshot.menu-CELFKP08.js +1 -0
- package/dist/assets/blender-timeline.document-BvHkPBTZ.js +1 -0
- package/dist/assets/blender-uv-editor.document-DVsbsG0P.js +1 -0
- package/dist/assets/blender-version.status-D_YQqOVz.js +1 -0
- package/dist/assets/blender-wali-engine-C6WYYJ9a.js +2 -0
- package/dist/assets/blender.command-M9NTZ04b.js +1 -0
- package/dist/assets/blender.status-H7PL8qIV.js +1 -0
- package/dist/assets/model-inspection-DAugZuDb.js +1 -0
- package/dist/assets/models.finder-C37d1CqG.js +1 -0
- package/dist/assets/object3d-document-session-registry-Nly7qqyW.js +2 -0
- package/dist/assets/play-live-nju-LbTd.js +1 -0
- package/dist/assets/product-B76VmSfR.js +14 -0
- package/dist/assets/properties-bone-constraints.inspector-CICws11L.js +1 -0
- package/dist/assets/properties-bone.inspector-BTh8HMja.js +1 -0
- package/dist/assets/properties-collection.inspector-CdxnUdEY.js +1 -0
- package/dist/assets/properties-constraints.inspector-CgLm__aq.js +1 -0
- package/dist/assets/properties-data.inspector-CPGohY4g.js +1 -0
- package/dist/assets/properties-material.inspector-BBmS0pWg.js +1 -0
- package/dist/assets/properties-modifiers.inspector-DmwrZuck.js +1 -0
- package/dist/assets/properties-object.inspector-CcLxRnp2.js +1 -0
- package/dist/assets/properties-output.inspector-B21rsdeE.js +1 -0
- package/dist/assets/properties-particles.inspector-3oYMCgFh.js +1 -0
- package/dist/assets/properties-physics.inspector-CXHZdBQv.js +1 -0
- package/dist/assets/properties-render.inspector-BgQVOySW.js +1 -0
- package/dist/assets/properties-scene.inspector-BvJsraNi.js +1 -0
- package/dist/assets/properties-texture.inspector-DPHw4ryw.js +1 -0
- package/dist/assets/properties-view-layer.inspector-MBifnnqO.js +1 -0
- package/dist/assets/properties-world.inspector-DOOIqcDX.js +1 -0
- package/dist/assets/react-18-Ceee8kSy.js +1 -0
- package/dist/assets/session-B_EkWp0b.js +6047 -0
- package/dist/assets/stage-keyboard-CfcRPwij.js +1 -0
- package/dist/assets/stage-overlay-set-B8PO_8GO.js +1 -0
- package/dist/assets/stage-presence-markers-CheQj0g2.js +1 -0
- package/dist/assets/stage-transform-tools-B3kiH81y.js +1 -0
- package/dist/assets/standard-viewport-dressing-4szt4iVE.js +24 -0
- package/dist/assets/three-integration.service-BRF8px1l.js +2 -0
- package/dist/assets/volter-sdk-BKodmrby.js +2363 -0
- package/dist/assets/volter-sdk-account-LQPzi3UZ.js +1 -0
- package/dist/assets/volter-sdk-client-DgRgxfuo.js +1 -0
- package/dist/assets/volter-sdk-contributions-Di1uSPw_.js +1 -0
- package/dist/assets/volter-sdk-css-numeric-style-Gy-GyM9Y.js +1 -0
- package/dist/assets/volter-sdk-document-probe-kPNnaNGr.js +1 -0
- package/dist/assets/volter-sdk-editor-view-g0uNyGJC.js +1 -0
- package/dist/assets/volter-sdk-host-CXSewq8M.js +1 -0
- package/dist/assets/volter-sdk-http-transport.browser-B3TdfhI7.js +1 -0
- package/dist/assets/volter-sdk-index-4Kp3lnTd.js +1 -0
- package/dist/assets/volter-sdk-kit-CapabilityCoverageSection-CjXSPJIo.js +1 -0
- package/dist/assets/volter-sdk-kit-account-client-ByTVy6-o.js +1 -0
- package/dist/assets/volter-sdk-kit-action-registry-D1kqJ80f.js +1 -0
- package/dist/assets/volter-sdk-kit-active-product-CEEc_Nk5.js +1 -0
- package/dist/assets/volter-sdk-kit-active-project-BrcrV5ab.js +1 -0
- package/dist/assets/volter-sdk-kit-adapter-editor-config-DqJAYMZM.js +1 -0
- package/dist/assets/volter-sdk-kit-adapter-module-Cm1FKR3D.js +1 -0
- package/dist/assets/volter-sdk-kit-adapter-observation-DNCkd2d_.js +1 -0
- package/dist/assets/volter-sdk-kit-animation-animation-clock-0FXkaCv-.js +1 -0
- package/dist/assets/volter-sdk-kit-animation-stage-transport-C7MuqkhX.js +1 -0
- package/dist/assets/volter-sdk-kit-api-assets-DC5mYDg9.js +1 -0
- package/dist/assets/volter-sdk-kit-api-base-Jd4izSaw.js +1 -0
- package/dist/assets/volter-sdk-kit-api-build-CXv7iVa0.js +1 -0
- package/dist/assets/volter-sdk-kit-api-logs-BJS5qQS0.js +1 -0
- package/dist/assets/volter-sdk-kit-api-project-identity-BTbrDP21.js +1 -0
- package/dist/assets/volter-sdk-kit-api-project-open-B2xmn-LQ.js +1 -0
- package/dist/assets/volter-sdk-kit-api-project-source-B8I05SPp.js +1 -0
- package/dist/assets/volter-sdk-kit-api-project-state-b7drJlZm.js +1 -0
- package/dist/assets/volter-sdk-kit-api-relay-CXoYAGag.js +1 -0
- package/dist/assets/volter-sdk-kit-api-settings-Ooohukfm.js +1 -0
- package/dist/assets/volter-sdk-kit-api-themes-DWL43Vk4.js +1 -0
- package/dist/assets/volter-sdk-kit-api-worktrees-36I3L3ep.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-capabilities-B_JHyPEo.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-compare-core-k1g4sfK4.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-editor-context-BtXkPrch.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-events-DNL9sOD1.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-inspector-actions-CIyFU73p.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-selection-YBxUZh2F.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-selection-viewer-registry-BP6LhiLy.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-thumbnails-cVPLoYS6.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-viewers-D4Nn4_BR.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-workflow-asset-import-jobs-BSMDOcaj.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-workflow-asset-ledger-Ce2VXJ2Z.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-workflow-asset-ledger-backend-BUyAOAr6.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-workflow-asset-materialization-report-BItOpEbd.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-workflow-asset-pack-manifest-BBeCjirT.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-workflow-audio-preview-player-UfPQty9g.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-workflow-audio-waveform-DDRruLeu.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-workflow-cloud-asset-client-T_DLL58P.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-workflow-hosted-asset-materialization-BjuMcGvJ.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-workflow-image-view-scale-Ciewiory.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-workflow-ledger-write-lock-DNMc3Uhr.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-workflow-pixi-spritesheet-BTZveIZ2.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-workflow-preview-resource-lifetime-CGdTixEp.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-workflow-project-asset-commands-0cIEsyFV.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-workflow-project-content-B883NWEX.js +1 -0
- package/dist/assets/volter-sdk-kit-asset-workflow-thumbnail-system-udhK_bK8.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-active-adapter-CaV79Zym.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-active-systems-D-sRD1JD.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-adapter-key-4m95v2b2.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-authoring-asset-url-CHBNmukT.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-bootstrap-state-Dz5hKatn.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-boundary-authoring-adapter-BHValVeR.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-canvas-scene-guides-RexSF-J2.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-composite-authoring-adapter-CbcNeoQ9.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-consumer-actions-CnMS-_cD.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-design-time-layers-Zg9zdDef.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-design-time-mount-registry-DKLgadwc.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-edit-mode-authoring-M81xEMIH.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-empty-project-authoring-DIwvGeWZ.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-instance-source-menu-EmOGzQA_.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-layered-pick-DmtPQOEU.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-mounted-root-subjects-CEz93V3J.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-no-authoring-adapter-mfK9FD-y.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-object3d-document-persistence-R2pfEtvy.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-panel-authoring-VEFAXYyu.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-project-authoring-session-B2qmlVET.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-provenance-CWNbjFfV.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-react-canvas-navigation-BkL1OUf3.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-react-design-canvas-style-DSJif289.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-react-story-board-DEtWuCdl.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-seam-evidence-yrcHmQZ9.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-selection-scope-DVHy1MNQ.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-shell-document-ops-CrTR4pdw.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-story-board-chrome-fit-CzDJyhVH.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-three-root-DGX0pTp1.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-viewport-tool-context-c-RZK1GX.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-viewport-tool-owner-Cea2wigf.js +1 -0
- package/dist/assets/volter-sdk-kit-authoring-world-session-state-N1az4tj8.js +1 -0
- package/dist/assets/volter-sdk-kit-availability-tick-B-AloCSv.js +1 -0
- package/dist/assets/volter-sdk-kit-bitmap-label-D5-Z31T5.js +1 -0
- package/dist/assets/volter-sdk-kit-boot-routing-XVOVyUc_.js +1 -0
- package/dist/assets/volter-sdk-kit-breakpoint-state-D-KEzzvG.js +1 -0
- package/dist/assets/volter-sdk-kit-build-identity-D-zdIjo6.js +1 -0
- package/dist/assets/volter-sdk-kit-bytes-codec-DVfFaFPs.js +1 -0
- package/dist/assets/volter-sdk-kit-cancellation-reason-DnCUNdRD.js +1 -0
- package/dist/assets/volter-sdk-kit-canvas-frames-BGh2p4Ce.js +1 -0
- package/dist/assets/volter-sdk-kit-capture-camera-pose-WspKGBnF.js +1 -0
- package/dist/assets/volter-sdk-kit-capture-size-DSdRe3ay.js +1 -0
- package/dist/assets/volter-sdk-kit-chrome-registry-D4L_4xEJ.js +1 -0
- package/dist/assets/volter-sdk-kit-chrome-slot-registry-Ce1SavKJ.js +1 -0
- package/dist/assets/volter-sdk-kit-collaboration-client-BklHxwDT.js +1 -0
- package/dist/assets/volter-sdk-kit-collaboration-presence-Cbx-Ojaw.js +1 -0
- package/dist/assets/volter-sdk-kit-command-dispatch-Dyhs6OSN.js +1 -0
- package/dist/assets/volter-sdk-kit-command-listener-CHEIOy3c.js +1 -0
- package/dist/assets/volter-sdk-kit-command-registry-CUKeDb9O.js +1 -0
- package/dist/assets/volter-sdk-kit-component-board-registry-BF8BzQDh.js +1 -0
- package/dist/assets/volter-sdk-kit-component-states-registry-RkljZ-Lm.js +1 -0
- package/dist/assets/volter-sdk-kit-components-AlignToolbar-L-1f9zZf.js +1 -0
- package/dist/assets/volter-sdk-kit-components-ApplicationMenus-BKxEMCFq.js +1 -0
- package/dist/assets/volter-sdk-kit-components-AssetEditorShell-ByYpeg3g.js +1 -0
- package/dist/assets/volter-sdk-kit-components-AssetInspectorToolSection-AzQ_b4hk.js +1 -0
- package/dist/assets/volter-sdk-kit-components-BoardRulers-Cjeqdfie.js +1 -0
- package/dist/assets/volter-sdk-kit-components-CanvasAddNodeDialogs-BOfMdh1M.js +1 -0
- package/dist/assets/volter-sdk-kit-components-CanvasSceneViewport-rZGGuOwh.js +1 -0
- package/dist/assets/volter-sdk-kit-components-ChromeSlot-CYRqS-XZ.js +1 -0
- package/dist/assets/volter-sdk-kit-components-CodeView-CZ4K-R4r.js +1 -0
- package/dist/assets/volter-sdk-kit-components-CompactInspectorShell-C0Jzb6sx.js +1 -0
- package/dist/assets/volter-sdk-kit-components-ConsolePanel-vTD-MnSe.js +1 -0
- package/dist/assets/volter-sdk-kit-components-GameplaySessionTimeline-fQY5p6rX.js +1 -0
- package/dist/assets/volter-sdk-kit-components-InspectionProjection-Dn7ly9U9.js +1 -0
- package/dist/assets/volter-sdk-kit-components-Inspector-DlXSsDRU.js +1 -0
- package/dist/assets/volter-sdk-kit-components-InspectorCanvasPreview-D2fHAo8Q.js +1 -0
- package/dist/assets/volter-sdk-kit-components-InspectorFieldsSection-BACKigHR.js +1 -0
- package/dist/assets/volter-sdk-kit-components-InspectorStoriesSection-C2tFcY5Z.js +1 -0
- package/dist/assets/volter-sdk-kit-components-InspectorToolSection-CKxWWFgq.js +1 -0
- package/dist/assets/volter-sdk-kit-components-InspectorTransformSection-BscOuHaz.js +1 -0
- package/dist/assets/volter-sdk-kit-components-LightExplorerPanel-Czgrsno8.js +1 -0
- package/dist/assets/volter-sdk-kit-components-MediaProperties-4JJy007U.js +1 -0
- package/dist/assets/volter-sdk-kit-components-ProjectHeader-CHXnXf4V.js +1 -0
- package/dist/assets/volter-sdk-kit-components-ReactCanvasControls-CjQh_ckk.js +1 -0
- package/dist/assets/volter-sdk-kit-components-RootSelectionOverlay-CIhN8hQt.js +1 -0
- package/dist/assets/volter-sdk-kit-components-RootTextEditor-Bh2YKApp.js +1 -0
- package/dist/assets/volter-sdk-kit-components-SaveStatus-BD-zOD-c.js +1 -0
- package/dist/assets/volter-sdk-kit-components-SurfaceCrashBoundary-BH1PNp8a.js +1 -0
- package/dist/assets/volter-sdk-kit-components-SurfaceStateOverlay-C4IvdpGQ.js +1 -0
- package/dist/assets/volter-sdk-kit-components-ToolContributionSurfaces-CtiZX-C_.js +1 -0
- package/dist/assets/volter-sdk-kit-components-ToolHost-DLj25ucp.js +1 -0
- package/dist/assets/volter-sdk-kit-components-Toolbar-DOHf2NES.js +1 -0
- package/dist/assets/volter-sdk-kit-components-TransientHint-zFA_MLx1.js +1 -0
- package/dist/assets/volter-sdk-kit-components-VersionControlSection-C9By_77E.js +1 -0
- package/dist/assets/volter-sdk-kit-components-ViewportOverlaysMenu-vr4do7lA.js +1 -0
- package/dist/assets/volter-sdk-kit-components-VolterLogo-DS8HqAPp.js +1 -0
- package/dist/assets/volter-sdk-kit-components-WorktreeSwitcher-DIEnM6m4.js +1 -0
- package/dist/assets/volter-sdk-kit-components-account-documents-C-kuLuRW.js +1 -0
- package/dist/assets/volter-sdk-kit-components-asset-documents-wvxuPzJN.js +1 -0
- package/dist/assets/volter-sdk-kit-components-asset-editor-persistence-DRbF9-yC.js +1 -0
- package/dist/assets/volter-sdk-kit-components-asset-selection-section-D-iE-RCy.js +1 -0
- package/dist/assets/volter-sdk-kit-components-asset-thumbnails-D3TyvHrp.js +1 -0
- package/dist/assets/volter-sdk-kit-components-asset-viewers-AudioViewer-Dk2jKOhT.js +1 -0
- package/dist/assets/volter-sdk-kit-components-asset-viewers-GenericJsonViewer-_nthvrZy.js +1 -0
- package/dist/assets/volter-sdk-kit-components-asset-viewers-ImageViewer-i-UhuMgF.js +1 -0
- package/dist/assets/volter-sdk-kit-components-asset-viewers-JsonAssetDocument-CzBAEr0C.js +1 -0
- package/dist/assets/volter-sdk-kit-components-asset-viewers-OnlineAssetDetail-CyV7UI3C.js +1 -0
- package/dist/assets/volter-sdk-kit-components-asset-viewers-SourceAssetViewer-Bd3a2_oA.js +1 -0
- package/dist/assets/volter-sdk-kit-components-asset-viewers-SpritesheetSpriteView-B0oBgcRW.js +1 -0
- package/dist/assets/volter-sdk-kit-components-asset-viewers-VideoViewer-Ad0PtQNX.js +1 -0
- package/dist/assets/volter-sdk-kit-components-asset-viewers-shader-source-BcRGAaa4.js +1 -0
- package/dist/assets/volter-sdk-kit-components-board-guides-DlFbMQZl.js +1 -0
- package/dist/assets/volter-sdk-kit-components-canvas-scene-hotkeys-C-WHgNDO.js +1 -0
- package/dist/assets/volter-sdk-kit-components-canvas-temporary-pivot-CqErnLHB.js +1 -0
- package/dist/assets/volter-sdk-kit-components-core-utilities-B339nXVW.js +1 -0
- package/dist/assets/volter-sdk-kit-components-inspector-preview-section-fv1kHl0P.js +1 -0
- package/dist/assets/volter-sdk-kit-components-inspector-revert-label-CGouljBF.js +1 -0
- package/dist/assets/volter-sdk-kit-components-inspector-selection-svwL5thP.js +1 -0
- package/dist/assets/volter-sdk-kit-components-inspector-stories-gating-CXI8Z8PL.js +1 -0
- package/dist/assets/volter-sdk-kit-components-inspector-transform-B6n6Cdof.js +1 -0
- package/dist/assets/volter-sdk-kit-components-inspector-transform-subject-C3qg6v_f.js +1 -0
- package/dist/assets/volter-sdk-kit-components-kind-documents-W8USaiPh.js +1 -0
- package/dist/assets/volter-sdk-kit-components-primitives-DraftColorInput-Dd4u-Wtm.js +1 -0
- package/dist/assets/volter-sdk-kit-components-project-tool-documents-DFq82d8o.js +1 -0
- package/dist/assets/volter-sdk-kit-components-scene-documents-B73lYyVv.js +1 -0
- package/dist/assets/volter-sdk-kit-components-status-contributions-FTso27Xh.js +1 -0
- package/dist/assets/volter-sdk-kit-components-tool-documents-BbGwfFpc.js +1 -0
- package/dist/assets/volter-sdk-kit-components-tool-schema-form-BIF8LmJV.js +1 -0
- package/dist/assets/volter-sdk-kit-components-use-after-paint-CtKNo2UU.js +1 -0
- package/dist/assets/volter-sdk-kit-components-use-project-image-assets-G7f6izdS.js +1 -0
- package/dist/assets/volter-sdk-kit-components-workspace-history-B2vo6Xx_.js +1 -0
- package/dist/assets/volter-sdk-kit-components-world-documents-B5tULKmS.js +1 -0
- package/dist/assets/volter-sdk-kit-components-world-overlay-gestures-DDEiWrz7.js +1 -0
- package/dist/assets/volter-sdk-kit-composite-screenshot-BMOK3iYM.js +1 -0
- package/dist/assets/volter-sdk-kit-content-entry-source-registry-B9eUIMgv.js +1 -0
- package/dist/assets/volter-sdk-kit-contribution-surfaces-DC-uHDQg.js +1 -0
- package/dist/assets/volter-sdk-kit-coverage-canvas-reveal-DiRNBVRN.js +1 -0
- package/dist/assets/volter-sdk-kit-coverage-design-time-surfaces-Csc86Z_f.js +1 -0
- package/dist/assets/volter-sdk-kit-coverage-ontology-invariants-Brd3w7kt.js +1 -0
- package/dist/assets/volter-sdk-kit-coverage-session-vitals-BoNy6hEZ.js +1 -0
- package/dist/assets/volter-sdk-kit-creation-site-registry-CdhSUaPD.js +1 -0
- package/dist/assets/volter-sdk-kit-delegate-harness-registry-CHNkXHhB.js +1 -0
- package/dist/assets/volter-sdk-kit-document-areas-7iD_pTF6.js +1 -0
- package/dist/assets/volter-sdk-kit-document-context-registry-6DcBS8uQ.js +1 -0
- package/dist/assets/volter-sdk-kit-document-open-registry-CS2V2rTe.js +1 -0
- package/dist/assets/volter-sdk-kit-document-play-extension-DyULINB5.js +1 -0
- package/dist/assets/volter-sdk-kit-document-preview-source-YxLsIauQ.js +1 -0
- package/dist/assets/volter-sdk-kit-document-renderer-session-IoKOp6Se.js +1 -0
- package/dist/assets/volter-sdk-kit-document-stage-sessions-DSmPpree.js +1 -0
- package/dist/assets/volter-sdk-kit-document-viewports-CvdifVJF.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-api-CB1FgcVg.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-chrome-capture-B-e-WKT4.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-commands-BYWHMTwS.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-console-jCw-ErXD.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-current-view-CbBqd-eR.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-document-probe-BC-zqNPD.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-git-client-BQQFtPz9.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-hotkeys-BzoxjaxK.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-lease-B_3921d6.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-lease-view-Dwm149iL.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-mode-DOBZoYnf.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-notifications-BfExd624.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-presence-DNnOAqPS.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-presentation-activity-CFp63FEl.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-presentation-notice-Df1-39oQ.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-runtime-CCziNuJh.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-server-response-DJiPWdEl.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-session-attribution-qdIqiRBe.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-session-mode-r0EdgfW4.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-state-facets-ChaCu38O.js +1 -0
- package/dist/assets/volter-sdk-kit-editor-view-presentation-Dp6RpQY2.js +1 -0
- package/dist/assets/volter-sdk-kit-environment-images-BUDsa8Yi.js +1 -0
- package/dist/assets/volter-sdk-kit-eyedropper-session-CuB0NOuY.js +1 -0
- package/dist/assets/volter-sdk-kit-files-file-provider-DIDQ2_uI.js +1 -0
- package/dist/assets/volter-sdk-kit-files-project-files-CQvJk0Gq.js +1 -0
- package/dist/assets/volter-sdk-kit-finders-index-DKfmE3QQ.js +1 -0
- package/dist/assets/volter-sdk-kit-finders-scenes-from-entrypoint-selection-CmiBcR6h.js +1 -0
- package/dist/assets/volter-sdk-kit-frame-frame-parts-Dva44YHz.js +1 -0
- package/dist/assets/volter-sdk-kit-framed-document-capture-DB3Ncfrz.js +1 -0
- package/dist/assets/volter-sdk-kit-game-surface-defaults-Cj-0v8BH.js +1 -0
- package/dist/assets/volter-sdk-kit-gameplay-export-state-Xf39gCAN.js +1 -0
- package/dist/assets/volter-sdk-kit-gameplay-replay-F8jJrsPf.js +1 -0
- package/dist/assets/volter-sdk-kit-gameplay-session-time-DTTj1olA.js +1 -0
- package/dist/assets/volter-sdk-kit-gameplay-sessions-CxKyk9Md.js +1 -0
- package/dist/assets/volter-sdk-kit-hierarchy-component-marks-BabNBUji.js +1 -0
- package/dist/assets/volter-sdk-kit-hierarchy-internals-CoK3Z_Xh.js +1 -0
- package/dist/assets/volter-sdk-kit-hierarchy-kind-icon-Cm6Wsuhy.js +1 -0
- package/dist/assets/volter-sdk-kit-hierarchy-menu-registry-DaGff9wa.js +1 -0
- package/dist/assets/volter-sdk-kit-hierarchy-node-rows-BcRUZUvZ.js +1 -0
- package/dist/assets/volter-sdk-kit-hierarchy-panel-view-BZoc7eJQ.js +1 -0
- package/dist/assets/volter-sdk-kit-hierarchy-projection-CHs2jgL8.js +1 -0
- package/dist/assets/volter-sdk-kit-hierarchy-row-media-PFIeRJqY.js +1 -0
- package/dist/assets/volter-sdk-kit-hierarchy-row-model-Cw1It5is.js +1 -0
- package/dist/assets/volter-sdk-kit-hierarchy-rows-Dssu1BMj.js +1 -0
- package/dist/assets/volter-sdk-kit-hierarchy-walk-B1L9eTXm.js +1 -0
- package/dist/assets/volter-sdk-kit-history-editor-session-BtVV5q7v.js +1 -0
- package/dist/assets/volter-sdk-kit-history-history-commands-TABAJNSR.js +1 -0
- package/dist/assets/volter-sdk-kit-history-history-delegate-DeK2Tm-B.js +1 -0
- package/dist/assets/volter-sdk-kit-history-history-limit-notices-BVoYaGBF.js +1 -0
- package/dist/assets/volter-sdk-kit-history-history-service-BHBRoss1.js +1 -0
- package/dist/assets/volter-sdk-kit-history-persistence-coordinator-n84--IYf.js +1 -0
- package/dist/assets/volter-sdk-kit-history-project-file-history-CcXjOv2P.js +1 -0
- package/dist/assets/volter-sdk-kit-history-project-root-history-backends-DTX8q5fG.js +1 -0
- package/dist/assets/volter-sdk-kit-history-resource-registry-CLkqOjdr.js +1 -0
- package/dist/assets/volter-sdk-kit-history-snapshot-store-DycW6GLB.js +1 -0
- package/dist/assets/volter-sdk-kit-history-source-history-backend-9xMoYlbd.js +1 -0
- package/dist/assets/volter-sdk-kit-hmr-registration-group-DmMHpNnB.js +1 -0
- package/dist/assets/volter-sdk-kit-hmr-stable-react-context-D-TLq4Hc.js +1 -0
- package/dist/assets/volter-sdk-kit-hotkeys-XirVHMg5.js +1 -0
- package/dist/assets/volter-sdk-kit-inference-diagnostics-CXk1gv7L.js +1 -0
- package/dist/assets/volter-sdk-kit-initial-project-Cbnj6h8K.js +1 -0
- package/dist/assets/volter-sdk-kit-inspection-active-subject-CZRJ1Iol.js +1 -0
- package/dist/assets/volter-sdk-kit-inspection-active-surface-gAahXjP2.js +1 -0
- package/dist/assets/volter-sdk-kit-inspection-compose-subject-BBlLRs6P.js +1 -0
- package/dist/assets/volter-sdk-kit-inspection-display-D546j-bp.js +1 -0
- package/dist/assets/volter-sdk-kit-inspection-document-subject-DDqyp_xw.js +1 -0
- package/dist/assets/volter-sdk-kit-inspection-game-subject-sQwCYXs1.js +1 -0
- package/dist/assets/volter-sdk-kit-inspection-model-DC9Hl3cj.js +1 -0
- package/dist/assets/volter-sdk-kit-inspection-node-media-DjPyEqvx.js +1 -0
- package/dist/assets/volter-sdk-kit-inspection-null-subject-Ct7EGK3P.js +1 -0
- package/dist/assets/volter-sdk-kit-inspection-serialize-Bq6tap3p.js +1 -0
- package/dist/assets/volter-sdk-kit-inspection-use-active-inspection-C_yp3gfW.js +1 -0
- package/dist/assets/volter-sdk-kit-inspector-presentation-Di1bDrzW.js +1 -0
- package/dist/assets/volter-sdk-kit-inspector-property-grouping-Hrg_OJm5.js +1 -0
- package/dist/assets/volter-sdk-kit-inspector-section-registry-CvrpGvES.js +1 -0
- package/dist/assets/volter-sdk-kit-instance-source-actions-BCuKBxGf.js +1 -0
- package/dist/assets/volter-sdk-kit-js-heap-KxSszS6k.js +1 -0
- package/dist/assets/volter-sdk-kit-key-actions-Wz9BljgB.js +1 -0
- package/dist/assets/volter-sdk-kit-keymap-presets-GXj7fO30.js +1 -0
- package/dist/assets/volter-sdk-kit-layout-policy-cFlperJi.js +1 -0
- package/dist/assets/volter-sdk-kit-light-explorer-model-CkrLkUUZ.js +1 -0
- package/dist/assets/volter-sdk-kit-live-canvas-frame-CIEkO3Ed.js +1 -0
- package/dist/assets/volter-sdk-kit-live-document-DhUo-Edg.js +1 -0
- package/dist/assets/volter-sdk-kit-live-gesture-lock-CMfHfSyJ.js +1 -0
- package/dist/assets/volter-sdk-kit-live-seam-evidence-BwAIj8fP.js +1 -0
- package/dist/assets/volter-sdk-kit-live-session-registry-DLpuZ5fm.js +1 -0
- package/dist/assets/volter-sdk-kit-live-transition-CzY_KNsh.js +1 -0
- package/dist/assets/volter-sdk-kit-manifest-project-D966gGPJ.js +1 -0
- package/dist/assets/volter-sdk-kit-module-fetch-diagnosis-BhBAOyzv.js +1 -0
- package/dist/assets/volter-sdk-kit-mount-failure-report-uZuQLIak.js +1 -0
- package/dist/assets/volter-sdk-kit-native-selection-style-DWR8dlSz.js +1 -0
- package/dist/assets/volter-sdk-kit-object3d-document-write-policy-Bj_jp-7_.js +1 -0
- package/dist/assets/volter-sdk-kit-packaged-runtime-iG7YMb12.js +1 -0
- package/dist/assets/volter-sdk-kit-performance-profiler-CNmFMe3k.js +1 -0
- package/dist/assets/volter-sdk-kit-performance-sources-Dn00aXW5.js +1 -0
- package/dist/assets/volter-sdk-kit-photograph-notice-Dfg0UxVZ.js +1 -0
- package/dist/assets/volter-sdk-kit-play-boot-phase-CXNgzv-J.js +1 -0
- package/dist/assets/volter-sdk-kit-play-camera-flight-DLwGfpJp.js +1 -0
- package/dist/assets/volter-sdk-kit-presentation-surface-cMmRpkGJ.js +1 -0
- package/dist/assets/volter-sdk-kit-product-command-Bu6DLKpE.js +1 -0
- package/dist/assets/volter-sdk-kit-project-adapter-BuzQScGI.js +1 -0
- package/dist/assets/volter-sdk-kit-project-asset-refresh-Bap7mqgb.js +1 -0
- package/dist/assets/volter-sdk-kit-project-asset-roots-By8xlXHl.js +1 -0
- package/dist/assets/volter-sdk-kit-project-local-state-ChdRwLow.js +1 -0
- package/dist/assets/volter-sdk-kit-project-manager-CLiEnNgu.js +1 -0
- package/dist/assets/volter-sdk-kit-project-module-changes-BDpD6OsB.js +1 -0
- package/dist/assets/volter-sdk-kit-project-module-split-CVNdzh8m.js +1 -0
- package/dist/assets/volter-sdk-kit-project-provenance-cp2gtKVj.js +1 -0
- package/dist/assets/volter-sdk-kit-project-ready-D8V6Kzge.js +1 -0
- package/dist/assets/volter-sdk-kit-project-shape-CClCrXxY.js +1 -0
- package/dist/assets/volter-sdk-kit-project-tools-CtP3bOpD.js +1 -0
- package/dist/assets/volter-sdk-kit-readiness-D0ouQROM.js +1 -0
- package/dist/assets/volter-sdk-kit-renderer-resource-counts-aXKN0rxR.js +1 -0
- package/dist/assets/volter-sdk-kit-reported-play-state-C-Mib-ba.js +1 -0
- package/dist/assets/volter-sdk-kit-resolve-contributed-command-BM8YcJz7.js +1 -0
- package/dist/assets/volter-sdk-kit-resolve-relative-specifier-CSTX2j7-.js +1 -0
- package/dist/assets/volter-sdk-kit-retained-document-states-QrHnyn4V.js +1 -0
- package/dist/assets/volter-sdk-kit-scene-document-plan-C9wHG6B7.js +1 -0
- package/dist/assets/volter-sdk-kit-scene-live-open-CXb4AskH.js +1 -0
- package/dist/assets/volter-sdk-kit-scoped-game-css-FdsRmDqV.js +1 -0
- package/dist/assets/volter-sdk-kit-served-url-DIf-qLum.js +1 -0
- package/dist/assets/volter-sdk-kit-session-close-COfy5ras.js +1 -0
- package/dist/assets/volter-sdk-kit-session-tombstone-BitY9Sdx.js +1 -0
- package/dist/assets/volter-sdk-kit-settings-settings-provider-BPuTDIxn.js +1 -0
- package/dist/assets/volter-sdk-kit-settings-store-BPOsFHZe.js +1 -0
- package/dist/assets/volter-sdk-kit-shell-store-DwHeZ5nQ.js +1 -0
- package/dist/assets/volter-sdk-kit-shell-store-door-BWHcu98B.js +1 -0
- package/dist/assets/volter-sdk-kit-source-conflict-CkxYCMk1.js +1 -0
- package/dist/assets/volter-sdk-kit-stage-context-CP-upNgr.js +1 -0
- package/dist/assets/volter-sdk-kit-stage-invalidation-CeDdEl0b.js +1 -0
- package/dist/assets/volter-sdk-kit-stage-store-registry-B2jyIREA.js +1 -0
- package/dist/assets/volter-sdk-kit-startup-failure-DWjZgwSJ.js +1 -0
- package/dist/assets/volter-sdk-kit-state-report-deferral-Dzam5Bu-.js +1 -0
- package/dist/assets/volter-sdk-kit-storage-host-files-storage-BxTEyrKN.js +1 -0
- package/dist/assets/volter-sdk-kit-storage-http-storage-T4fMC6Ww.js +1 -0
- package/dist/assets/volter-sdk-kit-storage-index-C2Gf9k45.js +1 -0
- package/dist/assets/volter-sdk-kit-storage-mem-storage-CcdOLba9.js +1 -0
- package/dist/assets/volter-sdk-kit-storage-path-lock-r7SjMxYI.js +1 -0
- package/dist/assets/volter-sdk-kit-storage-paths-BWI0b699.js +1 -0
- package/dist/assets/volter-sdk-kit-stories-StoryPreviewMount-DPyefE_s.js +1 -0
- package/dist/assets/volter-sdk-kit-stories-compose-project-stories-Dz_zorT8.js +1 -0
- package/dist/assets/volter-sdk-kit-stories-prefabs-finder-VOD4Fih8.js +1 -0
- package/dist/assets/volter-sdk-kit-stories-prefabs-from-stories-BbJ4drXs.js +1 -0
- package/dist/assets/volter-sdk-kit-stories-project-story-regions-CPPt7sAc.js +1 -0
- package/dist/assets/volter-sdk-kit-stories-scope-CIIL7T3O.js +1 -0
- package/dist/assets/volter-sdk-kit-stories-story-capture-DMWk2KXY.js +1 -0
- package/dist/assets/volter-sdk-kit-stories-story-declared-medium-Bx-ygbVe.js +1 -0
- package/dist/assets/volter-sdk-kit-stories-story-discovery-CafUDauh.js +1 -0
- package/dist/assets/volter-sdk-kit-stories-story-dom-runtime-CiCD8tr1.js +1 -0
- package/dist/assets/volter-sdk-kit-stories-story-grouping-BRGub3eG.js +1 -0
- package/dist/assets/volter-sdk-kit-stories-story-presentation-Bt3rB_N9.js +1 -0
- package/dist/assets/volter-sdk-kit-stories-story-registry-bF3ym9Kn.js +1 -0
- package/dist/assets/volter-sdk-kit-story-document-openers-R2-yxXGg.js +1 -0
- package/dist/assets/volter-sdk-kit-story-thumbnails-CI-p0jom.js +1 -0
- package/dist/assets/volter-sdk-kit-surface-keyboard-Bclcg_ZX.js +1 -0
- package/dist/assets/volter-sdk-kit-surface-state-OwSMnQPF.js +1 -0
- package/dist/assets/volter-sdk-kit-system-seam-evidence-mhKxMLF-.js +1 -0
- package/dist/assets/volter-sdk-kit-tab-census-BkucfkR2.js +1 -0
- package/dist/assets/volter-sdk-kit-tab-lifecycle-client-xPlJR_Is.js +1 -0
- package/dist/assets/volter-sdk-kit-theme-library-BmQiddws.js +1 -0
- package/dist/assets/volter-sdk-kit-theme-preference-CY62ohS6.js +1 -0
- package/dist/assets/volter-sdk-kit-three-viewport-presentation-C4zfYkP5.js +1 -0
- package/dist/assets/volter-sdk-kit-tool-contribution-play-D-X4TndA.js +1 -0
- package/dist/assets/volter-sdk-kit-tool-loader-Bppn2i0e.js +1 -0
- package/dist/assets/volter-sdk-kit-transform-mode-request-DVP6KCfG.js +1 -0
- package/dist/assets/volter-sdk-kit-transient-hint-znMlkMOz.js +1 -0
- package/dist/assets/volter-sdk-kit-transport-strip-dGQ-YoNm.js +1 -0
- package/dist/assets/volter-sdk-kit-ui-source-file-region-resolver-bA1RQVjN.js +1 -0
- package/dist/assets/volter-sdk-kit-ui-source-inspect-vbzR9DTw.js +1 -0
- package/dist/assets/volter-sdk-kit-ui-source-source-write-backend-jvrPvSXj.js +1 -0
- package/dist/assets/volter-sdk-kit-ui-source-tier-source-write-backend-_aDOX96f.js +1 -0
- package/dist/assets/volter-sdk-kit-user-local-state-C9PMe7ZC.js +1 -0
- package/dist/assets/volter-sdk-kit-viewport-activation-timings-Bl8_neTA.js +1 -0
- package/dist/assets/volter-sdk-kit-viewport-editor-controls-aUeFDe8t.js +1 -0
- package/dist/assets/volter-sdk-kit-viewport-presentation-IbDRhAjA.js +1 -0
- package/dist/assets/volter-sdk-kit-viewport-surface-status-B0m0crzV.js +1 -0
- package/dist/assets/volter-sdk-kit-wait-until-Bby0hAXq.js +1 -0
- package/dist/assets/volter-sdk-kit-worker-call-metrics-JG55IFWY.js +1 -0
- package/dist/assets/volter-sdk-kit-workspace-areas-D-wnNrv1.js +1 -0
- package/dist/assets/volter-sdk-kit-workspace-aux-commands-iFWD7R5b.js +1 -0
- package/dist/assets/volter-sdk-kit-workspace-available-documents-DEOtsr7U.js +1 -0
- package/dist/assets/volter-sdk-kit-workspace-core-utilities-Do_ivM3K.js +1 -0
- package/dist/assets/volter-sdk-kit-workspace-document-ids-CekfZZKH.js +1 -0
- package/dist/assets/volter-sdk-kit-workspace-document-registry-CtvIBYpT.js +1 -0
- package/dist/assets/volter-sdk-kit-workspace-document-restore-VAID48D1.js +1 -0
- package/dist/assets/volter-sdk-kit-workspace-host-commands-Ddx5Tgyl.js +1 -0
- package/dist/assets/volter-sdk-kit-workspace-persistence-gate-CXlifVZM.js +1 -0
- package/dist/assets/volter-sdk-kit-workspace-play-utilities-ByGVJzRW.js +1 -0
- package/dist/assets/volter-sdk-kit-workspace-presets-CjP5LvcE.js +1 -0
- package/dist/assets/volter-sdk-kit-workspace-regions-iau7y1g3.js +1 -0
- package/dist/assets/volter-sdk-kit-workspace-static-panels-B6jKhrp4.js +1 -0
- package/dist/assets/volter-sdk-kit-workspace-status-registry-g8wytHL5.js +1 -0
- package/dist/assets/volter-sdk-kit-workspace-storage-B5hTXq0f.js +1 -0
- package/dist/assets/volter-sdk-kit-workspace-style-LV2J3BUW.js +1 -0
- package/dist/assets/volter-sdk-kit-workspace-utility-commands-Ci_KJODl.js +1 -0
- package/dist/assets/volter-sdk-kit-workspace-utility-registry-BbjESGwy.js +1 -0
- package/dist/assets/volter-sdk-kit-world-adoption-DQ4KT5o5.js +1 -0
- package/dist/assets/volter-sdk-kit-world-canvas-viewport-state-r5rqWOVZ.js +1 -0
- package/dist/assets/volter-sdk-kit-world-document-routing-D-fYy4j5.js +1 -0
- package/dist/assets/volter-sdk-kit-world-pan-state-CMG7tsSx.js +1 -0
- package/dist/assets/volter-sdk-kit-write-pipe-DNEDBnz-.js +1 -0
- package/dist/assets/volter-sdk-layout-arrangements-CHD3ZMFe.js +1 -0
- package/dist/assets/volter-sdk-layouts-CCA7FuOC.js +1 -0
- package/dist/assets/volter-sdk-selection-D0kL_iDi.js +1 -0
- package/dist/assets/volter-sdk-session-command-table-DA_l3-71.js +1 -0
- package/dist/assets/volter-sdk-session-editor-brand-BF7c04d1.js +1 -0
- package/dist/assets/volter-sdk-session-editor-compatibility-DTohfZFv.js +1 -0
- package/dist/assets/volter-sdk-session-editor-control-protocol-BldcSvMF.js +1 -0
- package/dist/assets/volter-sdk-session-entrypoint-selection-readers-C5lBU-ru.js +1 -0
- package/dist/assets/volter-sdk-session-game-css-scope-BU2odzp5.js +1 -0
- package/dist/assets/volter-sdk-session-project-module-url-BXpMu1Rd.js +1 -0
- package/dist/assets/volter-sdk-session-relative-path-guard-QB40XSDf.js +1 -0
- package/dist/assets/volter-sdk-session-tool-contribution-convention-B_nVNyey.js +1 -0
- package/dist/assets/volter-sdk-types-CpvyGiQa.js +1 -0
- package/dist/assets/volter-sdk-views-DJ_MnaUh.js +1 -0
- package/dist/assets/volter-sdk-widgets-design-system-D7xN8pRO.js +1 -0
- package/dist/assets/volter-sdk-widgets-editor-appearance-Crp-pBLJ.js +1 -0
- package/dist/assets/volter-sdk-widgets-editor-material-MHO-HL-5.js +1 -0
- package/dist/assets/volter-sdk-widgets-icon-set-registry-BV2KyS5k.js +1 -0
- package/dist/assets/volter-sdk-widgets-index-Pv9HbBUF.js +1 -0
- package/dist/assets/volter-sdk-widgets-inspector-widgets-AlignmentGrid-vPIEJ2AQ.js +1 -0
- package/dist/assets/volter-sdk-widgets-inspector-widgets-AssetSlotPicker-0kpmltFh.js +1 -0
- package/dist/assets/volter-sdk-widgets-inspector-widgets-BorderEditor-C1igd7oH.js +1 -0
- package/dist/assets/volter-sdk-widgets-inspector-widgets-ColorPicker-B2hEex_l.js +1 -0
- package/dist/assets/volter-sdk-widgets-inspector-widgets-CurveEditor-cyhMzK5L.js +1 -0
- package/dist/assets/volter-sdk-widgets-inspector-widgets-FilterEditor-DcQAkx63.js +1 -0
- package/dist/assets/volter-sdk-widgets-inspector-widgets-FontPicker--uOgL4qW.js +1 -0
- package/dist/assets/volter-sdk-widgets-inspector-widgets-GradientEditor-DTAtC77d.js +1 -0
- package/dist/assets/volter-sdk-widgets-inspector-widgets-ScrubbableInput-khJ7avew.js +1 -0
- package/dist/assets/volter-sdk-widgets-inspector-widgets-ShadowEditor-eiGFiwHP.js +1 -0
- package/dist/assets/volter-sdk-widgets-inspector-widgets-color-utils-Cd-F281s.js +1 -0
- package/dist/assets/volter-sdk-widgets-inspector-widgets-curve-utils-C7uJEWC0.js +1 -0
- package/dist/assets/volter-sdk-widgets-inspector-widgets-index-B5TWzor-.js +1 -0
- package/dist/assets/volter-sdk-widgets-inspector-widgets-shared-DEQKguQB.js +1 -0
- package/dist/assets/volter-sdk-widgets-interactive-edit-scope-Bl0RzyJQ.js +1 -0
- package/dist/assets/volter-sdk-widgets-patterns-Dialog-UyDjvCxC.js +1 -0
- package/dist/assets/volter-sdk-widgets-patterns-Fields-nF0yD3V1.js +1 -0
- package/dist/assets/volter-sdk-widgets-patterns-List-D34mrQDy.js +1 -0
- package/dist/assets/volter-sdk-widgets-patterns-StateSurface-CLSEwJ2u.js +1 -0
- package/dist/assets/volter-sdk-widgets-patterns-Surfaces-Bnz6CGdv.js +1 -0
- package/dist/assets/volter-sdk-widgets-patterns-Tabs-BGh2nrPU.js +1 -0
- package/dist/assets/volter-sdk-widgets-patterns-Toolbar-DD17mnjd.js +1 -0
- package/dist/assets/volter-sdk-widgets-patterns-Tree-CCzpKURV.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-AnchoredMenu-rAsZA766.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-Button-B1Ppeaoa.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-ColorInput-CHAXdol_.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-DraftTextInput-CnNtxQXT.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-EditorIcon-Cimr9Mco.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-FormControls-CT_S601l.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-HoverPreview-B8HUvMqd.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-JsonInput-B4XDeGeD.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-Layout-Bi7EShmW.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-Menu-CKIw0gyB.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-NumberInput-Cm3QFgJj.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-Panel-Bydp9OuQ.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-SectionHeader-CCux7aOb.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-Text-CX8Zqrmp.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-ThemeRootPortal-9ZuvJNaQ.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-Tooltip-DQ24NxRN.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-Vec3Input-B8ydBBhm.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-banner-tones-DJXfSNS6.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-clamp-to-viewport-BzMgToKr.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-editor-icons-RjhVjrNt.js +1 -0
- package/dist/assets/volter-sdk-widgets-primitives-panel-header-styles-CaqZYWvq.js +1 -0
- package/dist/assets/volter-sdk-widgets-theme-GZiAnowy.js +1 -0
- package/dist/assets/volter-sdk-widgets-z-index-CvywNZqF.js +1 -0
- package/dist/assets/volter-shared-fontawesome-D0om5i4C.js +1 -0
- package/dist/assets/volter-shared-jsx-dev-runtime-Nf2pZiIO.js +1 -0
- package/dist/assets/volter-shared-jsx-runtime-mOtwwECE.js +1 -0
- package/dist/assets/volter-shared-react-D-xjcqWm.js +1 -0
- package/dist/assets/volter-shared-react-dom-DdRTSMx8.js +1 -0
- package/dist/assets/volter-shared-react-dom-client-WSvYqY8Z.js +1 -0
- package/dist/assets/worker-CxcSX7C7.js +8 -0
- package/dist/volter-shared-react.json +6 -6
- package/dist/volter-shared-sdk.json +462 -461
- package/dist-node/cli.js +16100 -2176
- package/dist-node/create.js +42 -36
- package/package.json +11 -9
- package/starter/AGENTS.md +30 -7
- package/starter/add-play/game-state.ts +25 -0
- package/starter/add-play/game.tsx +16 -0
- package/starter/add-play/model.play.ts +77 -0
- package/starter/package.json +5 -0
- package/starter/playable/src/models/canyon.blend +0 -0
- package/starter/playable/src/models/canyon.play.ts +107 -0
- package/starter/playable/src/models/canyon.py +55 -0
- package/starter/playable/src/models/circuit.py +131 -0
- package/starter/playable/src/models/complete_environment.py +35 -0
- package/starter/playable/src/models/course.ts +12 -0
- package/starter/playable/src/models/detail.py +44 -0
- package/starter/playable/src/models/driver_details.py +25 -0
- package/starter/playable/src/models/environment.py +87 -0
- package/starter/playable/src/models/finish_scene.py +13 -0
- package/starter/playable/src/models/kart_finish.py +31 -0
- package/starter/playable/src/models/polish.py +75 -0
- package/starter/playable/src/models/race-state.ts +15 -0
- package/starter/playable/src/models/refine.py +69 -0
- package/starter/playable/src/models/scene_helpers.py +54 -0
- package/starter/playable/src/models/scenery_ao.py +114 -0
- package/starter/playable/src/textures/asphalt.png +0 -0
- package/starter/playable/src/textures/generate.py +16 -0
- package/starter/playable/src/textures/sandstone.png +0 -0
- package/starter/playable/src/ui/game.stories.tsx +16 -0
- package/starter/playable/src/ui/game.tsx +6 -0
- package/starter/playable/src/ui/race-hud.tsx +29 -0
- package/starter/playable/src/ui/race-widgets.tsx +29 -0
- package/dist/assets/EntityModelDocument-SFx7GJi9.js +0 -1
- package/dist/assets/EnvironmentAssetDocument-CpQnoQK7.js +0 -1
- package/dist/assets/InspectorObjectPreview-DhOKGE_h.js +0 -1
- package/dist/assets/LiveModuleDocument-eahaoeUi.js +0 -2
- package/dist/assets/LutAssetDocument-CTFpkbXP.js +0 -1
- package/dist/assets/ModelAssetDocument-qpaA8PMi.js +0 -1
- package/dist/assets/NonThreeAuthoringBootstrap-Cxat6HDi.js +0 -1
- package/dist/assets/Object3DDocumentToolbar-DAGo1TZr.js +0 -1
- package/dist/assets/Object3DPreview-f5xt7xae.js +0 -2
- package/dist/assets/QuarksAssetDocument-B4GuWtSi.js +0 -2
- package/dist/assets/ShaderAssetDocument-D6UrvTPz.js +0 -1
- package/dist/assets/StageHost-CCbIVhfB.js +0 -1179
- package/dist/assets/ToolObject3DPreview-nevU8Vmi.js +0 -1
- package/dist/assets/ViewportShadingMenu-rbW6zaze.js +0 -1
- package/dist/assets/animation-mixers.service-qLmPXMph.js +0 -1
- package/dist/assets/animation-timeline.utility-Cepgwl9G.js +0 -1
- package/dist/assets/asset-preview-C3dOTcRY.js +0 -4
- package/dist/assets/blender-emscripten-engine-DnJ85_-l.js +0 -2
- package/dist/assets/blender-node-editor.document-BjpzVLc9.js +0 -1
- package/dist/assets/blender-properties-model-BNV7uq3w.js +0 -1
- package/dist/assets/blender-properties-tab-BoiBE9VB.js +0 -3
- package/dist/assets/blender-runtime-host-DKW0D0Bb.js +0 -7221
- package/dist/assets/blender-runtime.document-xKuVNUX7.js +0 -13
- package/dist/assets/blender-screenshot.menu-c6UvFn7v.js +0 -1
- package/dist/assets/blender-timeline.document-_vgbH_K5.js +0 -1
- package/dist/assets/blender-uv-editor.document-CjOx4LD3.js +0 -1
- package/dist/assets/blender-version.status-GBqitUon.js +0 -1
- package/dist/assets/blender-wali-engine-x-OfFUGX.js +0 -2
- package/dist/assets/blender.command-CYOL3BTf.js +0 -1
- package/dist/assets/blender.status-BYUrfsCR.js +0 -1
- package/dist/assets/model-inspection-DGW_rNdi.js +0 -1
- package/dist/assets/models.finder-C2OdvWDn.js +0 -1
- package/dist/assets/object3d-document-session-registry-BkSfsQD9.js +0 -2
- package/dist/assets/play-mode-Bfa-EEKv.js +0 -1
- package/dist/assets/product-4XoIi8-H.js +0 -14
- package/dist/assets/properties-bone-constraints.inspector-De28M-3w.js +0 -1
- package/dist/assets/properties-bone.inspector-Dwl_8RHa.js +0 -1
- package/dist/assets/properties-collection.inspector-zgL35H1s.js +0 -1
- package/dist/assets/properties-constraints.inspector-C4HmYG4b.js +0 -1
- package/dist/assets/properties-data.inspector-C84mWYEx.js +0 -1
- package/dist/assets/properties-material.inspector-EXqO4JLk.js +0 -1
- package/dist/assets/properties-modifiers.inspector-B5-5UoW_.js +0 -1
- package/dist/assets/properties-object.inspector-CacLETan.js +0 -1
- package/dist/assets/properties-output.inspector-DpGmXWef.js +0 -1
- package/dist/assets/properties-particles.inspector-XTVoWTZq.js +0 -1
- package/dist/assets/properties-physics.inspector-DlhF0h-n.js +0 -1
- package/dist/assets/properties-render.inspector-Dpnfz8vA.js +0 -1
- package/dist/assets/properties-scene.inspector-DqOfknkg.js +0 -1
- package/dist/assets/properties-texture.inspector-WD0VfQaG.js +0 -1
- package/dist/assets/properties-view-layer.inspector-DWFckdDj.js +0 -1
- package/dist/assets/properties-world.inspector-DcqJkcHc.js +0 -1
- package/dist/assets/react-18-AEAPuaAj.js +0 -1
- package/dist/assets/session-rpZf0raD.js +0 -5972
- package/dist/assets/stage-keyboard-ChQ8dJ_y.js +0 -1
- package/dist/assets/stage-overlay-set-PfEXKWA6.js +0 -1
- package/dist/assets/stage-presence-markers-Dnxnhx_2.js +0 -1
- package/dist/assets/stage-transform-tools-mFUKm77V.js +0 -1
- package/dist/assets/standard-viewport-dressing-DChZYVlW.js +0 -24
- package/dist/assets/three-integration.service-C6HNczqS.js +0 -2
- package/dist/assets/volter-sdk-CjkJnQ6d.js +0 -2363
- package/dist/assets/volter-sdk-account-DZEQFuaU.js +0 -1
- package/dist/assets/volter-sdk-client-D6tlzH-t.js +0 -1
- package/dist/assets/volter-sdk-contributions-Cl4ThyFT.js +0 -1
- package/dist/assets/volter-sdk-css-numeric-style-BSayA78S.js +0 -1
- package/dist/assets/volter-sdk-document-probe-rU9NBzUS.js +0 -1
- package/dist/assets/volter-sdk-editor-view-DfxbbN7q.js +0 -1
- package/dist/assets/volter-sdk-host-Dy6XofbJ.js +0 -1
- package/dist/assets/volter-sdk-http-transport.browser-Co0YCwat.js +0 -1
- package/dist/assets/volter-sdk-index-B2ws1and.js +0 -1
- package/dist/assets/volter-sdk-kit-CapabilityCoverageSection-CBEHQx0y.js +0 -1
- package/dist/assets/volter-sdk-kit-account-client-CLa-z4XH.js +0 -1
- package/dist/assets/volter-sdk-kit-action-registry-ifQNLVPb.js +0 -1
- package/dist/assets/volter-sdk-kit-active-product-v7CkKfFz.js +0 -1
- package/dist/assets/volter-sdk-kit-active-project-Di0hQPIg.js +0 -1
- package/dist/assets/volter-sdk-kit-adapter-editor-config-fdw01apb.js +0 -1
- package/dist/assets/volter-sdk-kit-adapter-observation-CW92skZV.js +0 -1
- package/dist/assets/volter-sdk-kit-animation-animation-clock-B3sM2uit.js +0 -1
- package/dist/assets/volter-sdk-kit-animation-stage-transport-JvYidVYX.js +0 -1
- package/dist/assets/volter-sdk-kit-api-assets-D7VbukcI.js +0 -1
- package/dist/assets/volter-sdk-kit-api-base-DerHHtTE.js +0 -1
- package/dist/assets/volter-sdk-kit-api-build-CeuJY-Zz.js +0 -1
- package/dist/assets/volter-sdk-kit-api-logs-1pMi7TTm.js +0 -1
- package/dist/assets/volter-sdk-kit-api-project-identity-CBU8Hed0.js +0 -1
- package/dist/assets/volter-sdk-kit-api-project-open-D067PXCw.js +0 -1
- package/dist/assets/volter-sdk-kit-api-project-source-Bho3j6pZ.js +0 -1
- package/dist/assets/volter-sdk-kit-api-project-state-BKh_xLbJ.js +0 -1
- package/dist/assets/volter-sdk-kit-api-relay-CC-iWi7D.js +0 -1
- package/dist/assets/volter-sdk-kit-api-settings-sot6qLo3.js +0 -1
- package/dist/assets/volter-sdk-kit-api-themes-Cc-af_-d.js +0 -1
- package/dist/assets/volter-sdk-kit-api-worktrees-D1GTPFtv.js +0 -1
- package/dist/assets/volter-sdk-kit-asset-capabilities-CNOHj_kb.js +0 -1
- package/dist/assets/volter-sdk-kit-asset-compare-core-CXAda1bF.js +0 -1
- package/dist/assets/volter-sdk-kit-asset-editor-context-DsUk8Th6.js +0 -1
- package/dist/assets/volter-sdk-kit-asset-events-BL8DRoc8.js +0 -1
- package/dist/assets/volter-sdk-kit-asset-inspector-actions-0o9QNJKn.js +0 -1
- package/dist/assets/volter-sdk-kit-asset-selection-B3xjSJGy.js +0 -1
- package/dist/assets/volter-sdk-kit-asset-selection-viewer-registry-SEv2CkwZ.js +0 -1
- package/dist/assets/volter-sdk-kit-asset-thumbnails-Dljbgkxh.js +0 -1
- package/dist/assets/volter-sdk-kit-asset-viewers-CxZRO5JV.js +0 -1
- package/dist/assets/volter-sdk-kit-asset-workflow-asset-import-jobs-DqIPpnfC.js +0 -1
- package/dist/assets/volter-sdk-kit-asset-workflow-asset-ledger-D1KEb0Ey.js +0 -1
- package/dist/assets/volter-sdk-kit-asset-workflow-asset-ledger-backend-D6HUnLJm.js +0 -1
- package/dist/assets/volter-sdk-kit-asset-workflow-asset-materialization-report-By1Yv3wm.js +0 -1
- package/dist/assets/volter-sdk-kit-asset-workflow-asset-pack-manifest-DisvezHH.js +0 -1
- package/dist/assets/volter-sdk-kit-asset-workflow-audio-preview-player-BwwiLB40.js +0 -1
- package/dist/assets/volter-sdk-kit-asset-workflow-audio-waveform-FrA-pulC.js +0 -1
- package/dist/assets/volter-sdk-kit-asset-workflow-cloud-asset-client-DDI1Kwjv.js +0 -1
- package/dist/assets/volter-sdk-kit-asset-workflow-hosted-asset-materialization-CzPpDfqY.js +0 -1
- package/dist/assets/volter-sdk-kit-asset-workflow-image-view-scale-DdWpOH6e.js +0 -1
- package/dist/assets/volter-sdk-kit-asset-workflow-ledger-write-lock-Cqtyka10.js +0 -1
- package/dist/assets/volter-sdk-kit-asset-workflow-pixi-spritesheet-BUxJUIx-.js +0 -1
- package/dist/assets/volter-sdk-kit-asset-workflow-preview-resource-lifetime-Dpvl0ufz.js +0 -1
- package/dist/assets/volter-sdk-kit-asset-workflow-project-asset-commands-Clt-ftCc.js +0 -1
- package/dist/assets/volter-sdk-kit-asset-workflow-project-content-BO7LgDmE.js +0 -1
- package/dist/assets/volter-sdk-kit-asset-workflow-thumbnail-system-CCoxMBjk.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-active-adapter-Po4bB0Uj.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-active-systems-B1Bx10Aq.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-adapter-key-BlWE7I0N.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-authoring-asset-url-SOwAcp48.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-bootstrap-state-DnBU8nzt.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-boundary-authoring-adapter-BFAbj3pB.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-canvas-scene-guides-DOJYMXPn.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-composite-authoring-adapter-BoBcdwww.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-consumer-actions-DeU9WESz.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-design-time-layers-ZcfipFHX.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-design-time-mount-registry-4mdJO8W-.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-edit-mode-authoring-Bymo2_8C.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-empty-project-authoring-BeRaeFRT.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-instance-source-menu-De7LQ6t6.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-layered-pick-DMVOLo1B.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-mounted-root-subjects-CXLwIbEX.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-no-authoring-adapter-D_y8WcS6.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-object3d-document-persistence-B8wcp7IQ.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-panel-authoring-sbvO6626.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-project-authoring-session-Cykydx2J.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-provenance-D0b1PE71.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-react-canvas-navigation-CSwEgzI6.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-react-design-canvas-style-Cl2M3OV0.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-react-story-board-bTjtW2CO.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-seam-evidence-pkdnkJtV.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-selection-scope-DVgEaPQM.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-shell-document-ops-BbuK7pxG.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-story-board-chrome-fit-OFpXQxIF.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-three-root-BkH3AlEt.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-viewport-tool-context-Cr0fa0Hl.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-viewport-tool-owner-DTnGce_x.js +0 -1
- package/dist/assets/volter-sdk-kit-authoring-world-session-state-D5Aqfbm8.js +0 -1
- package/dist/assets/volter-sdk-kit-availability-tick-h3DHQ7AK.js +0 -1
- package/dist/assets/volter-sdk-kit-bitmap-label-nN7zK7TR.js +0 -1
- package/dist/assets/volter-sdk-kit-boot-routing-mm6XL4_m.js +0 -1
- package/dist/assets/volter-sdk-kit-breakpoint-state-BhIvquyw.js +0 -1
- package/dist/assets/volter-sdk-kit-build-identity-BUHMFgej.js +0 -1
- package/dist/assets/volter-sdk-kit-bytes-codec-j4IdoVn0.js +0 -1
- package/dist/assets/volter-sdk-kit-cancellation-reason-D-nMBP2I.js +0 -1
- package/dist/assets/volter-sdk-kit-canvas-frames-DEW6SW_n.js +0 -1
- package/dist/assets/volter-sdk-kit-capture-camera-pose-lHuE4-F1.js +0 -1
- package/dist/assets/volter-sdk-kit-capture-size-CfI__WD3.js +0 -1
- package/dist/assets/volter-sdk-kit-chrome-registry-DQC9TBMd.js +0 -1
- package/dist/assets/volter-sdk-kit-chrome-slot-registry-BaA2m-hW.js +0 -1
- package/dist/assets/volter-sdk-kit-collaboration-client-BgCs9YmN.js +0 -1
- package/dist/assets/volter-sdk-kit-collaboration-presence-zP8Qm_Wp.js +0 -1
- package/dist/assets/volter-sdk-kit-command-dispatch-DMN1cHQ0.js +0 -1
- package/dist/assets/volter-sdk-kit-command-listener-Bi6V9vZY.js +0 -1
- package/dist/assets/volter-sdk-kit-command-registry-CbwwOUlX.js +0 -1
- package/dist/assets/volter-sdk-kit-component-board-registry-DuKMXXDn.js +0 -1
- package/dist/assets/volter-sdk-kit-component-states-registry-C8fPwGac.js +0 -1
- package/dist/assets/volter-sdk-kit-components-AlignToolbar-DI9H0cLf.js +0 -1
- package/dist/assets/volter-sdk-kit-components-ApplicationMenus-0EFLpJl3.js +0 -1
- package/dist/assets/volter-sdk-kit-components-AssetEditorShell-W9E9Idk3.js +0 -1
- package/dist/assets/volter-sdk-kit-components-AssetInspectorToolSection-B9C8g1u8.js +0 -1
- package/dist/assets/volter-sdk-kit-components-BoardRulers-TvtGoLvw.js +0 -1
- package/dist/assets/volter-sdk-kit-components-CanvasAddNodeDialogs-BbT71ZLs.js +0 -1
- package/dist/assets/volter-sdk-kit-components-CanvasSceneViewport-DMlRqvRX.js +0 -1
- package/dist/assets/volter-sdk-kit-components-ChromeSlot-CBMhERxH.js +0 -1
- package/dist/assets/volter-sdk-kit-components-CodeView-DaFrODJ5.js +0 -1
- package/dist/assets/volter-sdk-kit-components-CompactInspectorShell-DAU9Rz8t.js +0 -1
- package/dist/assets/volter-sdk-kit-components-ConsolePanel-DL9PRS8g.js +0 -1
- package/dist/assets/volter-sdk-kit-components-GameplaySessionTimeline-BQM829E_.js +0 -1
- package/dist/assets/volter-sdk-kit-components-InspectionProjection-ct5F1-5f.js +0 -1
- package/dist/assets/volter-sdk-kit-components-Inspector-D_LqAGkl.js +0 -1
- package/dist/assets/volter-sdk-kit-components-InspectorCanvasPreview-BE7YIVKr.js +0 -1
- package/dist/assets/volter-sdk-kit-components-InspectorFieldsSection-m9xPIIHr.js +0 -1
- package/dist/assets/volter-sdk-kit-components-InspectorStoriesSection-ZlS3c7i5.js +0 -1
- package/dist/assets/volter-sdk-kit-components-InspectorToolSection-B0nuZPLk.js +0 -1
- package/dist/assets/volter-sdk-kit-components-InspectorTransformSection-nkjme0st.js +0 -1
- package/dist/assets/volter-sdk-kit-components-LightExplorerPanel-BWEMMDqF.js +0 -1
- package/dist/assets/volter-sdk-kit-components-MediaProperties-D7iIz70v.js +0 -1
- package/dist/assets/volter-sdk-kit-components-ProjectHeader-BGak497E.js +0 -1
- package/dist/assets/volter-sdk-kit-components-ReactCanvasControls-DC8ly4DP.js +0 -1
- package/dist/assets/volter-sdk-kit-components-RootSelectionOverlay-BgFEsPuR.js +0 -1
- package/dist/assets/volter-sdk-kit-components-RootTextEditor-D5kNPJPO.js +0 -1
- package/dist/assets/volter-sdk-kit-components-SaveStatus-DUcBxh5_.js +0 -1
- package/dist/assets/volter-sdk-kit-components-SurfaceCrashBoundary-DS5fFxXL.js +0 -1
- package/dist/assets/volter-sdk-kit-components-SurfaceStateOverlay-LQ6wer_f.js +0 -1
- package/dist/assets/volter-sdk-kit-components-ToolContributionSurfaces-CsA2zXqR.js +0 -1
- package/dist/assets/volter-sdk-kit-components-ToolHost-CCgNWoYQ.js +0 -1
- package/dist/assets/volter-sdk-kit-components-Toolbar-BcFqLTKO.js +0 -1
- package/dist/assets/volter-sdk-kit-components-TransientHint-BJ8PYeZC.js +0 -1
- package/dist/assets/volter-sdk-kit-components-VersionControlSection-DmfeMks1.js +0 -1
- package/dist/assets/volter-sdk-kit-components-ViewportOverlaysMenu-CgfsJe_1.js +0 -1
- package/dist/assets/volter-sdk-kit-components-VolterLogo-Bsb05O0W.js +0 -1
- package/dist/assets/volter-sdk-kit-components-WorktreeSwitcher-DHIF6Kg1.js +0 -1
- package/dist/assets/volter-sdk-kit-components-account-documents-CwYhcEZA.js +0 -1
- package/dist/assets/volter-sdk-kit-components-asset-documents-DyPZbhVR.js +0 -1
- package/dist/assets/volter-sdk-kit-components-asset-editor-persistence-DFyUUrtF.js +0 -1
- package/dist/assets/volter-sdk-kit-components-asset-selection-section-CcmRV0Bv.js +0 -1
- package/dist/assets/volter-sdk-kit-components-asset-thumbnails-CVmK39Vm.js +0 -1
- package/dist/assets/volter-sdk-kit-components-asset-viewers-AudioViewer-C7t9xXsJ.js +0 -1
- package/dist/assets/volter-sdk-kit-components-asset-viewers-GenericJsonViewer-DyOUPMrf.js +0 -1
- package/dist/assets/volter-sdk-kit-components-asset-viewers-ImageViewer-BZVLIpzi.js +0 -1
- package/dist/assets/volter-sdk-kit-components-asset-viewers-JsonAssetDocument-MFzv1JKl.js +0 -1
- package/dist/assets/volter-sdk-kit-components-asset-viewers-OnlineAssetDetail-C1I6t0XF.js +0 -1
- package/dist/assets/volter-sdk-kit-components-asset-viewers-SourceAssetViewer-TSnI0wjc.js +0 -1
- package/dist/assets/volter-sdk-kit-components-asset-viewers-SpritesheetSpriteView-DisNEKau.js +0 -1
- package/dist/assets/volter-sdk-kit-components-asset-viewers-VideoViewer-CT1gLpCM.js +0 -1
- package/dist/assets/volter-sdk-kit-components-asset-viewers-shader-source-D-ByF1Z9.js +0 -1
- package/dist/assets/volter-sdk-kit-components-board-guides-C3ZEj1WY.js +0 -1
- package/dist/assets/volter-sdk-kit-components-canvas-scene-hotkeys-BQ9gavD1.js +0 -1
- package/dist/assets/volter-sdk-kit-components-canvas-temporary-pivot-DVB2TYkq.js +0 -1
- package/dist/assets/volter-sdk-kit-components-core-utilities-inT-Nle5.js +0 -1
- package/dist/assets/volter-sdk-kit-components-inspector-preview-section-vfZoaY5P.js +0 -1
- package/dist/assets/volter-sdk-kit-components-inspector-revert-label-DRRZSGIK.js +0 -1
- package/dist/assets/volter-sdk-kit-components-inspector-selection-Bv1ikayS.js +0 -1
- package/dist/assets/volter-sdk-kit-components-inspector-stories-gating-BpG3_W7U.js +0 -1
- package/dist/assets/volter-sdk-kit-components-inspector-transform-CP6nVKqd.js +0 -1
- package/dist/assets/volter-sdk-kit-components-inspector-transform-subject-Du0gXiav.js +0 -1
- package/dist/assets/volter-sdk-kit-components-kind-documents-B_HiV65O.js +0 -1
- package/dist/assets/volter-sdk-kit-components-primitives-DraftColorInput-7rauPX0T.js +0 -1
- package/dist/assets/volter-sdk-kit-components-project-tool-documents-3di65yH2.js +0 -1
- package/dist/assets/volter-sdk-kit-components-scene-documents-Bl1zTaDc.js +0 -1
- package/dist/assets/volter-sdk-kit-components-status-contributions-B8H0B8ft.js +0 -1
- package/dist/assets/volter-sdk-kit-components-tool-documents-C2PpEqP0.js +0 -1
- package/dist/assets/volter-sdk-kit-components-tool-schema-form-72_NOun0.js +0 -1
- package/dist/assets/volter-sdk-kit-components-use-after-paint-DrYvNkkp.js +0 -1
- package/dist/assets/volter-sdk-kit-components-use-project-image-assets-BqKEbF2g.js +0 -1
- package/dist/assets/volter-sdk-kit-components-workspace-history-xnZKFOcO.js +0 -1
- package/dist/assets/volter-sdk-kit-components-world-documents-B_l8OVFP.js +0 -1
- package/dist/assets/volter-sdk-kit-components-world-overlay-gestures-C0aE-brt.js +0 -1
- package/dist/assets/volter-sdk-kit-composite-screenshot-BcGNs7-k.js +0 -1
- package/dist/assets/volter-sdk-kit-content-entry-source-registry-CSDvBeHp.js +0 -1
- package/dist/assets/volter-sdk-kit-contribution-surfaces-CQ2rcWky.js +0 -1
- package/dist/assets/volter-sdk-kit-coverage-canvas-reveal-CaBb6Hfn.js +0 -1
- package/dist/assets/volter-sdk-kit-coverage-design-time-surfaces-BZvDlBew.js +0 -1
- package/dist/assets/volter-sdk-kit-coverage-ontology-invariants-CyWzK029.js +0 -1
- package/dist/assets/volter-sdk-kit-coverage-session-vitals-BSV6PDul.js +0 -1
- package/dist/assets/volter-sdk-kit-creation-site-registry-fCJv-VnD.js +0 -1
- package/dist/assets/volter-sdk-kit-delegate-harness-registry-0s32Ke4a.js +0 -1
- package/dist/assets/volter-sdk-kit-document-areas-d6o-fnVq.js +0 -1
- package/dist/assets/volter-sdk-kit-document-context-registry-C-rdTIZz.js +0 -1
- package/dist/assets/volter-sdk-kit-document-open-registry-VuPIF1dw.js +0 -1
- package/dist/assets/volter-sdk-kit-document-play-extension-CnbtQG5g.js +0 -1
- package/dist/assets/volter-sdk-kit-document-preview-source-BOuN3JP9.js +0 -1
- package/dist/assets/volter-sdk-kit-document-renderer-session-C4Y-LjCl.js +0 -1
- package/dist/assets/volter-sdk-kit-document-stage-sessions-DFQXt_Kt.js +0 -1
- package/dist/assets/volter-sdk-kit-document-viewports-Caa-nlVQ.js +0 -1
- package/dist/assets/volter-sdk-kit-editor-api-C1nO5qN_.js +0 -1
- package/dist/assets/volter-sdk-kit-editor-chrome-capture-Cyo9MOWB.js +0 -1
- package/dist/assets/volter-sdk-kit-editor-commands-DgSsLdds.js +0 -1
- package/dist/assets/volter-sdk-kit-editor-console-D1PH1xFg.js +0 -1
- package/dist/assets/volter-sdk-kit-editor-current-view-Bset7Nwl.js +0 -1
- package/dist/assets/volter-sdk-kit-editor-document-probe-Czf1syZL.js +0 -1
- package/dist/assets/volter-sdk-kit-editor-git-client-CMFbof3B.js +0 -1
- package/dist/assets/volter-sdk-kit-editor-hotkeys-_jIQrvhL.js +0 -1
- package/dist/assets/volter-sdk-kit-editor-lease-CqLtzZdx.js +0 -1
- package/dist/assets/volter-sdk-kit-editor-lease-view-B38iYVxe.js +0 -1
- package/dist/assets/volter-sdk-kit-editor-mode-DhgTI0qH.js +0 -1
- package/dist/assets/volter-sdk-kit-editor-notifications-Yta6jrTE.js +0 -1
- package/dist/assets/volter-sdk-kit-editor-presence-CmU0c8nu.js +0 -1
- package/dist/assets/volter-sdk-kit-editor-presentation-activity-Chb0_n3L.js +0 -1
- package/dist/assets/volter-sdk-kit-editor-presentation-notice-CJJau7kX.js +0 -1
- package/dist/assets/volter-sdk-kit-editor-runtime-C_0J-89o.js +0 -1
- package/dist/assets/volter-sdk-kit-editor-server-response-AowGGRsX.js +0 -1
- package/dist/assets/volter-sdk-kit-editor-session-attribution-CE3iHsa9.js +0 -1
- package/dist/assets/volter-sdk-kit-editor-session-mode-DxwZ4UOE.js +0 -1
- package/dist/assets/volter-sdk-kit-editor-state-facets-CrumZoYh.js +0 -1
- package/dist/assets/volter-sdk-kit-editor-view-presentation-C-p2mMYG.js +0 -1
- package/dist/assets/volter-sdk-kit-environment-images-bVl6oO0J.js +0 -1
- package/dist/assets/volter-sdk-kit-eyedropper-session-xsFx5slJ.js +0 -1
- package/dist/assets/volter-sdk-kit-files-file-provider-BZr0PG4o.js +0 -1
- package/dist/assets/volter-sdk-kit-files-project-files-DlEfa4r5.js +0 -1
- package/dist/assets/volter-sdk-kit-finders-index-1Yh1UrN5.js +0 -1
- package/dist/assets/volter-sdk-kit-finders-scenes-from-entrypoint-selection-BdkJ-g9C.js +0 -1
- package/dist/assets/volter-sdk-kit-frame-frame-parts-DvbxUeaX.js +0 -1
- package/dist/assets/volter-sdk-kit-framed-document-capture-Doq07qaD.js +0 -1
- package/dist/assets/volter-sdk-kit-game-surface-defaults-Cco9xAIy.js +0 -1
- package/dist/assets/volter-sdk-kit-gameplay-export-state-Bh35kQUs.js +0 -1
- package/dist/assets/volter-sdk-kit-gameplay-replay-CJUXUO5Z.js +0 -1
- package/dist/assets/volter-sdk-kit-gameplay-session-time-xKMm2Bmw.js +0 -1
- package/dist/assets/volter-sdk-kit-gameplay-sessions-BtyPVYt1.js +0 -1
- package/dist/assets/volter-sdk-kit-hierarchy-component-marks-CMA_1E0Z.js +0 -1
- package/dist/assets/volter-sdk-kit-hierarchy-internals-C2mw6TEb.js +0 -1
- package/dist/assets/volter-sdk-kit-hierarchy-kind-icon-Uq5N3cYQ.js +0 -1
- package/dist/assets/volter-sdk-kit-hierarchy-menu-registry-BuUQH5-1.js +0 -1
- package/dist/assets/volter-sdk-kit-hierarchy-node-rows-DoIy_rr4.js +0 -1
- package/dist/assets/volter-sdk-kit-hierarchy-panel-view-C28YFK-D.js +0 -1
- package/dist/assets/volter-sdk-kit-hierarchy-projection-BlTrqGJP.js +0 -1
- package/dist/assets/volter-sdk-kit-hierarchy-row-media-Bi4TlkKq.js +0 -1
- package/dist/assets/volter-sdk-kit-hierarchy-row-model-B6Umqjy9.js +0 -1
- package/dist/assets/volter-sdk-kit-hierarchy-rows-LJpacUWB.js +0 -1
- package/dist/assets/volter-sdk-kit-hierarchy-walk-CUME5S0j.js +0 -1
- package/dist/assets/volter-sdk-kit-history-editor-session-vyoZV4Se.js +0 -1
- package/dist/assets/volter-sdk-kit-history-history-commands-BvP_RqsP.js +0 -1
- package/dist/assets/volter-sdk-kit-history-history-delegate-DilFGldE.js +0 -1
- package/dist/assets/volter-sdk-kit-history-history-limit-notices-Bl7qNsVW.js +0 -1
- package/dist/assets/volter-sdk-kit-history-history-service-CUwc9Oh1.js +0 -1
- package/dist/assets/volter-sdk-kit-history-persistence-coordinator-By_l7An0.js +0 -1
- package/dist/assets/volter-sdk-kit-history-project-file-history-stqJ4Wa9.js +0 -1
- package/dist/assets/volter-sdk-kit-history-project-root-history-backends-Dhihw3lO.js +0 -1
- package/dist/assets/volter-sdk-kit-history-resource-registry-BmWUO5On.js +0 -1
- package/dist/assets/volter-sdk-kit-history-snapshot-store-DpGm1CKT.js +0 -1
- package/dist/assets/volter-sdk-kit-history-source-history-backend-CWkNA5B8.js +0 -1
- package/dist/assets/volter-sdk-kit-hmr-registration-group-DXxPfV1d.js +0 -1
- package/dist/assets/volter-sdk-kit-hmr-stable-react-context-DTKg0yz7.js +0 -1
- package/dist/assets/volter-sdk-kit-hotkeys-B-DB4WDn.js +0 -1
- package/dist/assets/volter-sdk-kit-inference-diagnostics-Bg2RC291.js +0 -1
- package/dist/assets/volter-sdk-kit-initial-project-DcV4d4vU.js +0 -1
- package/dist/assets/volter-sdk-kit-inspection-active-subject-Dpg7lLaz.js +0 -1
- package/dist/assets/volter-sdk-kit-inspection-active-surface-CtXLz-UE.js +0 -1
- package/dist/assets/volter-sdk-kit-inspection-compose-subject-DPCLcleB.js +0 -1
- package/dist/assets/volter-sdk-kit-inspection-display-WcRFy6fP.js +0 -1
- package/dist/assets/volter-sdk-kit-inspection-document-subject-Dg6DIr4J.js +0 -1
- package/dist/assets/volter-sdk-kit-inspection-game-subject-CCU0bOnL.js +0 -1
- package/dist/assets/volter-sdk-kit-inspection-model-BHHq-F57.js +0 -1
- package/dist/assets/volter-sdk-kit-inspection-node-media-D3HHlQ-1.js +0 -1
- package/dist/assets/volter-sdk-kit-inspection-null-subject-CojoXu4j.js +0 -1
- package/dist/assets/volter-sdk-kit-inspection-serialize-BXTD5f5F.js +0 -1
- package/dist/assets/volter-sdk-kit-inspection-use-active-inspection-D0tMZbA8.js +0 -1
- package/dist/assets/volter-sdk-kit-inspector-presentation-DDTS4NPQ.js +0 -1
- package/dist/assets/volter-sdk-kit-inspector-property-grouping-C8gM67Ji.js +0 -1
- package/dist/assets/volter-sdk-kit-inspector-section-registry-C0bhf71P.js +0 -1
- package/dist/assets/volter-sdk-kit-instance-source-actions-DxsyQJOt.js +0 -1
- package/dist/assets/volter-sdk-kit-js-heap-COa0ZQO1.js +0 -1
- package/dist/assets/volter-sdk-kit-key-actions-DUdVok9i.js +0 -1
- package/dist/assets/volter-sdk-kit-keymap-presets-CtsgCBMq.js +0 -1
- package/dist/assets/volter-sdk-kit-layout-policy-B1UriNWB.js +0 -1
- package/dist/assets/volter-sdk-kit-light-explorer-model-DDrGjN_l.js +0 -1
- package/dist/assets/volter-sdk-kit-live-canvas-frame-Bx3mSipB.js +0 -1
- package/dist/assets/volter-sdk-kit-live-document-CPBTdxo0.js +0 -1
- package/dist/assets/volter-sdk-kit-live-gesture-lock-B4b9BM5c.js +0 -1
- package/dist/assets/volter-sdk-kit-live-seam-evidence-ByZ2Gf3m.js +0 -1
- package/dist/assets/volter-sdk-kit-live-session-registry-mxT-37yH.js +0 -1
- package/dist/assets/volter-sdk-kit-live-transition-CrRFP373.js +0 -1
- package/dist/assets/volter-sdk-kit-manifest-project-BCBSW7yn.js +0 -1
- package/dist/assets/volter-sdk-kit-module-fetch-diagnosis-ENr7r-oj.js +0 -1
- package/dist/assets/volter-sdk-kit-mount-failure-report-Diw3prSP.js +0 -1
- package/dist/assets/volter-sdk-kit-native-selection-style-D_oHLKGc.js +0 -1
- package/dist/assets/volter-sdk-kit-object3d-document-write-policy-Dq8rnb-h.js +0 -1
- package/dist/assets/volter-sdk-kit-packaged-runtime-2ZtSBw9e.js +0 -1
- package/dist/assets/volter-sdk-kit-performance-profiler-J1GcKurL.js +0 -1
- package/dist/assets/volter-sdk-kit-performance-sources-Dk3RIhPs.js +0 -1
- package/dist/assets/volter-sdk-kit-photograph-notice-CEVpX_yj.js +0 -1
- package/dist/assets/volter-sdk-kit-play-boot-phase-D22MvZjX.js +0 -1
- package/dist/assets/volter-sdk-kit-play-camera-flight-Dh3-SiG2.js +0 -1
- package/dist/assets/volter-sdk-kit-presentation-surface-DtvQ6uwm.js +0 -1
- package/dist/assets/volter-sdk-kit-product-command-DhQ2vGY7.js +0 -1
- package/dist/assets/volter-sdk-kit-project-adapter-lJsp7vSt.js +0 -1
- package/dist/assets/volter-sdk-kit-project-asset-refresh-D94Pa8-n.js +0 -1
- package/dist/assets/volter-sdk-kit-project-asset-roots-DkjE-H4P.js +0 -1
- package/dist/assets/volter-sdk-kit-project-local-state-C3dueXjj.js +0 -1
- package/dist/assets/volter-sdk-kit-project-manager-D8pSoBk5.js +0 -1
- package/dist/assets/volter-sdk-kit-project-module-changes-CmswawEd.js +0 -1
- package/dist/assets/volter-sdk-kit-project-module-split-BWSP4PC6.js +0 -1
- package/dist/assets/volter-sdk-kit-project-provenance-y2LiaenC.js +0 -1
- package/dist/assets/volter-sdk-kit-project-ready-5KOkgAie.js +0 -1
- package/dist/assets/volter-sdk-kit-project-shape-CRi6VMwW.js +0 -1
- package/dist/assets/volter-sdk-kit-project-tools-DefLgVW-.js +0 -1
- package/dist/assets/volter-sdk-kit-readiness-CFiVXonW.js +0 -1
- package/dist/assets/volter-sdk-kit-renderer-resource-counts-yv0wDv9Z.js +0 -1
- package/dist/assets/volter-sdk-kit-reported-play-state-CdBN7lgt.js +0 -1
- package/dist/assets/volter-sdk-kit-resolve-contributed-command-C-UnZAy2.js +0 -1
- package/dist/assets/volter-sdk-kit-resolve-relative-specifier-B0fBf47E.js +0 -1
- package/dist/assets/volter-sdk-kit-retained-document-states-BaHAJmNJ.js +0 -1
- package/dist/assets/volter-sdk-kit-scene-document-plan-ByPu78Ca.js +0 -1
- package/dist/assets/volter-sdk-kit-scene-live-open-WieSHU0m.js +0 -1
- package/dist/assets/volter-sdk-kit-scoped-game-css-Cl-iGkav.js +0 -1
- package/dist/assets/volter-sdk-kit-served-url-CvjRxXVY.js +0 -1
- package/dist/assets/volter-sdk-kit-session-close-Bj5v_SbU.js +0 -1
- package/dist/assets/volter-sdk-kit-session-tombstone-D1LTs2G4.js +0 -1
- package/dist/assets/volter-sdk-kit-settings-settings-provider-CdD8uh79.js +0 -1
- package/dist/assets/volter-sdk-kit-settings-store-CdCWpZpX.js +0 -1
- package/dist/assets/volter-sdk-kit-shell-store-BPMrMgto.js +0 -1
- package/dist/assets/volter-sdk-kit-shell-store-door-D5csR7L7.js +0 -1
- package/dist/assets/volter-sdk-kit-source-conflict-C1LAtXzO.js +0 -1
- package/dist/assets/volter-sdk-kit-stage-context-B5Ashsvr.js +0 -1
- package/dist/assets/volter-sdk-kit-stage-invalidation-DrB2GJkV.js +0 -1
- package/dist/assets/volter-sdk-kit-stage-store-registry-BBmIUDrH.js +0 -1
- package/dist/assets/volter-sdk-kit-startup-failure-B_1Us5LR.js +0 -1
- package/dist/assets/volter-sdk-kit-state-report-deferral-CadDAzqC.js +0 -1
- package/dist/assets/volter-sdk-kit-storage-host-files-storage-DlAZpF8O.js +0 -1
- package/dist/assets/volter-sdk-kit-storage-http-storage-BGzRT9Yh.js +0 -1
- package/dist/assets/volter-sdk-kit-storage-index-BRza5xQo.js +0 -1
- package/dist/assets/volter-sdk-kit-storage-mem-storage--iLg4qqC.js +0 -1
- package/dist/assets/volter-sdk-kit-storage-path-lock-DIiF0WD6.js +0 -1
- package/dist/assets/volter-sdk-kit-storage-paths-RUYTo3ty.js +0 -1
- package/dist/assets/volter-sdk-kit-stories-StoryPreviewMount-CIWFkcHG.js +0 -1
- package/dist/assets/volter-sdk-kit-stories-compose-project-stories-DwoDwmJU.js +0 -1
- package/dist/assets/volter-sdk-kit-stories-prefabs-finder-1J_oByWW.js +0 -1
- package/dist/assets/volter-sdk-kit-stories-prefabs-from-stories-BWzNS_pC.js +0 -1
- package/dist/assets/volter-sdk-kit-stories-project-story-regions-Cmj0gYSU.js +0 -1
- package/dist/assets/volter-sdk-kit-stories-scope-dbPpXRCQ.js +0 -1
- package/dist/assets/volter-sdk-kit-stories-story-capture-3Y8Mr8qy.js +0 -1
- package/dist/assets/volter-sdk-kit-stories-story-declared-medium-D3PDNDCy.js +0 -1
- package/dist/assets/volter-sdk-kit-stories-story-discovery-lsLHfYGO.js +0 -1
- package/dist/assets/volter-sdk-kit-stories-story-dom-runtime-Bcuc8WAV.js +0 -1
- package/dist/assets/volter-sdk-kit-stories-story-grouping-iqNIaFLi.js +0 -1
- package/dist/assets/volter-sdk-kit-stories-story-presentation-CK7iy9Ei.js +0 -1
- package/dist/assets/volter-sdk-kit-stories-story-registry-BgeJ9s08.js +0 -1
- package/dist/assets/volter-sdk-kit-story-document-openers-cYEL6Hy6.js +0 -1
- package/dist/assets/volter-sdk-kit-story-thumbnails-CM9Z-bvM.js +0 -1
- package/dist/assets/volter-sdk-kit-surface-keyboard-DBn-R4RW.js +0 -1
- package/dist/assets/volter-sdk-kit-surface-state-lyZ-F89S.js +0 -1
- package/dist/assets/volter-sdk-kit-system-seam-evidence-M2PpGJaD.js +0 -1
- package/dist/assets/volter-sdk-kit-tab-census-D-cKQr53.js +0 -1
- package/dist/assets/volter-sdk-kit-tab-lifecycle-client-C9bdy1EQ.js +0 -1
- package/dist/assets/volter-sdk-kit-theme-library-C1SMcZX-.js +0 -1
- package/dist/assets/volter-sdk-kit-theme-preference-D7fq5Aos.js +0 -1
- package/dist/assets/volter-sdk-kit-three-viewport-presentation-C3jDpb-D.js +0 -1
- package/dist/assets/volter-sdk-kit-tool-contribution-play-BOVfgHO-.js +0 -1
- package/dist/assets/volter-sdk-kit-tool-loader-cdxKzGe5.js +0 -1
- package/dist/assets/volter-sdk-kit-transform-mode-request-BPBs33SD.js +0 -1
- package/dist/assets/volter-sdk-kit-transient-hint-DvRRSOfn.js +0 -1
- package/dist/assets/volter-sdk-kit-transport-strip-Dd6GTpZe.js +0 -1
- package/dist/assets/volter-sdk-kit-ui-source-file-region-resolver-BPLcvfGC.js +0 -1
- package/dist/assets/volter-sdk-kit-ui-source-inspect-Ckv_4nvy.js +0 -1
- package/dist/assets/volter-sdk-kit-ui-source-source-write-backend-CiReq_FI.js +0 -1
- package/dist/assets/volter-sdk-kit-ui-source-tier-source-write-backend-DZJqZvWO.js +0 -1
- package/dist/assets/volter-sdk-kit-user-local-state-9E2MdgX4.js +0 -1
- package/dist/assets/volter-sdk-kit-viewport-activation-timings-C7D8UOhh.js +0 -1
- package/dist/assets/volter-sdk-kit-viewport-editor-controls-D88BRUuu.js +0 -1
- package/dist/assets/volter-sdk-kit-viewport-presentation-Zb13u02P.js +0 -1
- package/dist/assets/volter-sdk-kit-viewport-surface-status-Ca85AZuU.js +0 -1
- package/dist/assets/volter-sdk-kit-wait-until-pqtZlaLI.js +0 -1
- package/dist/assets/volter-sdk-kit-worker-call-metrics-Cbz-2gPO.js +0 -1
- package/dist/assets/volter-sdk-kit-workspace-areas-B_i10_dm.js +0 -1
- package/dist/assets/volter-sdk-kit-workspace-aux-commands-DtGEjh20.js +0 -1
- package/dist/assets/volter-sdk-kit-workspace-available-documents-C8VSQ_mD.js +0 -1
- package/dist/assets/volter-sdk-kit-workspace-core-utilities-BiDneGhJ.js +0 -1
- package/dist/assets/volter-sdk-kit-workspace-document-ids-BWk99i3Z.js +0 -1
- package/dist/assets/volter-sdk-kit-workspace-document-registry-DS1fKB9K.js +0 -1
- package/dist/assets/volter-sdk-kit-workspace-document-restore-ZPSOlafH.js +0 -1
- package/dist/assets/volter-sdk-kit-workspace-host-commands-BLPz-3R_.js +0 -1
- package/dist/assets/volter-sdk-kit-workspace-persistence-gate-DaFEto7Y.js +0 -1
- package/dist/assets/volter-sdk-kit-workspace-play-utilities-DOoHAHVj.js +0 -1
- package/dist/assets/volter-sdk-kit-workspace-presets-DOs3QGh-.js +0 -1
- package/dist/assets/volter-sdk-kit-workspace-regions-wBvCVXKS.js +0 -1
- package/dist/assets/volter-sdk-kit-workspace-static-panels-ByMR68k-.js +0 -1
- package/dist/assets/volter-sdk-kit-workspace-status-registry-HAD_cNR4.js +0 -1
- package/dist/assets/volter-sdk-kit-workspace-storage-CqQ3PjCZ.js +0 -1
- package/dist/assets/volter-sdk-kit-workspace-style-BQcwaxYJ.js +0 -1
- package/dist/assets/volter-sdk-kit-workspace-utility-commands-et9TkyCh.js +0 -1
- package/dist/assets/volter-sdk-kit-workspace-utility-registry-rYY77c5M.js +0 -1
- package/dist/assets/volter-sdk-kit-world-adoption-Cdr7X1RK.js +0 -1
- package/dist/assets/volter-sdk-kit-world-canvas-viewport-state-CIToIMqL.js +0 -1
- package/dist/assets/volter-sdk-kit-world-document-routing-BZEtZVgX.js +0 -1
- package/dist/assets/volter-sdk-kit-world-pan-state-gNJklP8p.js +0 -1
- package/dist/assets/volter-sdk-kit-write-pipe-BADasoOU.js +0 -1
- package/dist/assets/volter-sdk-layout-arrangements-C2GnUWEf.js +0 -1
- package/dist/assets/volter-sdk-layouts-ai4Mr9iJ.js +0 -1
- package/dist/assets/volter-sdk-selection--L_yVThI.js +0 -1
- package/dist/assets/volter-sdk-session-command-table-HzFjzv-r.js +0 -1
- package/dist/assets/volter-sdk-session-editor-brand-DZQ6PWq1.js +0 -1
- package/dist/assets/volter-sdk-session-editor-compatibility-Dqc8l3ef.js +0 -1
- package/dist/assets/volter-sdk-session-editor-control-protocol-C9Ru_wUN.js +0 -1
- package/dist/assets/volter-sdk-session-entrypoint-selection-readers-zxVRreaL.js +0 -1
- package/dist/assets/volter-sdk-session-game-css-scope-Dqlihty_.js +0 -1
- package/dist/assets/volter-sdk-session-project-module-url-D83kzz0q.js +0 -1
- package/dist/assets/volter-sdk-session-relative-path-guard-CuR0WI9k.js +0 -1
- package/dist/assets/volter-sdk-session-tool-contribution-convention-BCFbkxzk.js +0 -1
- package/dist/assets/volter-sdk-types-CEnscS2I.js +0 -1
- package/dist/assets/volter-sdk-views-C5SjARB1.js +0 -1
- package/dist/assets/volter-sdk-widgets-design-system-CvoouaNJ.js +0 -1
- package/dist/assets/volter-sdk-widgets-editor-appearance-C7o2ovx9.js +0 -1
- package/dist/assets/volter-sdk-widgets-editor-material-DexUBcgV.js +0 -1
- package/dist/assets/volter-sdk-widgets-icon-set-registry-DlFlaNAF.js +0 -1
- package/dist/assets/volter-sdk-widgets-index-yq00_bNp.js +0 -1
- package/dist/assets/volter-sdk-widgets-inspector-widgets-AlignmentGrid-BTgcU6jh.js +0 -1
- package/dist/assets/volter-sdk-widgets-inspector-widgets-AssetSlotPicker-C2o3TwgU.js +0 -1
- package/dist/assets/volter-sdk-widgets-inspector-widgets-BorderEditor-FDtHP3jG.js +0 -1
- package/dist/assets/volter-sdk-widgets-inspector-widgets-ColorPicker-BuPI_wXu.js +0 -1
- package/dist/assets/volter-sdk-widgets-inspector-widgets-CurveEditor-DgzQ9479.js +0 -1
- package/dist/assets/volter-sdk-widgets-inspector-widgets-FilterEditor-DAvp2mOL.js +0 -1
- package/dist/assets/volter-sdk-widgets-inspector-widgets-FontPicker-D0qkPeCp.js +0 -1
- package/dist/assets/volter-sdk-widgets-inspector-widgets-GradientEditor-CCsSB7GO.js +0 -1
- package/dist/assets/volter-sdk-widgets-inspector-widgets-ScrubbableInput-HX8HYQyz.js +0 -1
- package/dist/assets/volter-sdk-widgets-inspector-widgets-ShadowEditor-W6DD40ZY.js +0 -1
- package/dist/assets/volter-sdk-widgets-inspector-widgets-color-utils-Da1Qassw.js +0 -1
- package/dist/assets/volter-sdk-widgets-inspector-widgets-curve-utils-CubhrOnj.js +0 -1
- package/dist/assets/volter-sdk-widgets-inspector-widgets-index-BfEw1ffU.js +0 -1
- package/dist/assets/volter-sdk-widgets-inspector-widgets-shared-BHXdKcVo.js +0 -1
- package/dist/assets/volter-sdk-widgets-interactive-edit-scope-BN0E0Doa.js +0 -1
- package/dist/assets/volter-sdk-widgets-patterns-Dialog-BRrjlh-m.js +0 -1
- package/dist/assets/volter-sdk-widgets-patterns-Fields-DZH1odj7.js +0 -1
- package/dist/assets/volter-sdk-widgets-patterns-List-C6d9TZjZ.js +0 -1
- package/dist/assets/volter-sdk-widgets-patterns-StateSurface-Drk0tBrv.js +0 -1
- package/dist/assets/volter-sdk-widgets-patterns-Surfaces-DDRN7QIn.js +0 -1
- package/dist/assets/volter-sdk-widgets-patterns-Tabs-EjlJmcJW.js +0 -1
- package/dist/assets/volter-sdk-widgets-patterns-Toolbar-CFvWB8mN.js +0 -1
- package/dist/assets/volter-sdk-widgets-patterns-Tree-BuqeZDz5.js +0 -1
- package/dist/assets/volter-sdk-widgets-primitives-AnchoredMenu-CTTEOeVU.js +0 -1
- package/dist/assets/volter-sdk-widgets-primitives-Button-C_0ZSSpT.js +0 -1
- package/dist/assets/volter-sdk-widgets-primitives-ColorInput-CDSl_uTD.js +0 -1
- package/dist/assets/volter-sdk-widgets-primitives-DraftTextInput-DkmxJEkt.js +0 -1
- package/dist/assets/volter-sdk-widgets-primitives-EditorIcon-BBWNM0Qo.js +0 -1
- package/dist/assets/volter-sdk-widgets-primitives-FormControls-BWxUJrgm.js +0 -1
- package/dist/assets/volter-sdk-widgets-primitives-HoverPreview-DWhR7NPO.js +0 -1
- package/dist/assets/volter-sdk-widgets-primitives-JsonInput-DT-JU62m.js +0 -1
- package/dist/assets/volter-sdk-widgets-primitives-Layout-DdGxhqhS.js +0 -1
- package/dist/assets/volter-sdk-widgets-primitives-Menu-DZZRIImg.js +0 -1
- package/dist/assets/volter-sdk-widgets-primitives-NumberInput-BhCoXeub.js +0 -1
- package/dist/assets/volter-sdk-widgets-primitives-Panel-CBt-GWg4.js +0 -1
- package/dist/assets/volter-sdk-widgets-primitives-SectionHeader-zNqJ43pZ.js +0 -1
- package/dist/assets/volter-sdk-widgets-primitives-Text-D5kMrfFl.js +0 -1
- package/dist/assets/volter-sdk-widgets-primitives-ThemeRootPortal-C3qNx2NP.js +0 -1
- package/dist/assets/volter-sdk-widgets-primitives-Tooltip-BZa_2pgU.js +0 -1
- package/dist/assets/volter-sdk-widgets-primitives-Vec3Input-DHMZkNZm.js +0 -1
- package/dist/assets/volter-sdk-widgets-primitives-banner-tones-B0Vu5nrN.js +0 -1
- package/dist/assets/volter-sdk-widgets-primitives-clamp-to-viewport-gPoKdjpr.js +0 -1
- package/dist/assets/volter-sdk-widgets-primitives-editor-icons-CzOo1YYK.js +0 -1
- package/dist/assets/volter-sdk-widgets-primitives-panel-header-styles-L08FUXCP.js +0 -1
- package/dist/assets/volter-sdk-widgets-theme-3FhMTQQW.js +0 -1
- package/dist/assets/volter-sdk-widgets-z-index-BY332K7Z.js +0 -1
- package/dist/assets/volter-shared-fontawesome-DpCdukGW.js +0 -1
- package/dist/assets/volter-shared-jsx-dev-runtime-Dzhuy0jr.js +0 -1
- package/dist/assets/volter-shared-jsx-runtime-CZf-NxSP.js +0 -1
- package/dist/assets/volter-shared-react-B8I974G-.js +0 -1
- package/dist/assets/volter-shared-react-dom-BSKZma7T.js +0 -1
- package/dist/assets/volter-shared-react-dom-client-aO0ss-5e.js +0 -1
- package/dist/assets/worker-C7WcdPfy.js +0 -8
- package/starter/race-state.ts +0 -22
- package/starter/track.blend +0 -0
- package/starter/track.play.ts +0 -343
- package/starter/track.py +0 -324
- package/starter/ui/game.stories.tsx +0 -12
- package/starter/ui/game.tsx +0 -10
- package/starter/ui/race-hud.tsx +0 -29
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import{h2 as H,x as Et,ih as Ct,ii as bt,n as m,j as b,dv as Ot,ij as ue,dN as X,ik as me,il as At,im as Rt,t as U,io as $t,cr as Q,ev as Mt,B as We,dY as Le,ip as Pt,aw as mt,ax as we,bC as Ft,aE as se,gF as Lt,iq as Oe,aJ as Ae,ie as ee,ir as ze,c0 as Tt,c3 as Nt,gv as He,is as Bt,aA as Dt,it as It,iu as qe,aO as Vt,iv as Gt,iw as Ue,ix as Wt}from"./volter-sdk-CjkJnQ6d.js";import{o as zt,i as je,j as be,k as _e,l as Ht,m as Te,g as Ke,p as qt,q as Ut,w as Je,t as Kt,u as Ee,v as Jt,x as Yt,y as Xt,z as Ye,s as ht,A as Qt,B as Zt,b as Xe,C as Re,D as er,E as Qe,F as tr,G as rr,H as nr}from"./blender-runtime-host-DKW0D0Bb.js";import{t as Ze,v as oe,o as Se,s as gt,a as he}from"./object3d-document-session-registry-BkSfsQD9.js";import{r as et,b as or,a as ar,w as sr}from"./blender-properties-model-BNV7uq3w.js";import{A as lr,r as tt,n as ir,g as cr,h as dr,b as pe}from"./play-mode-Bfa-EEKv.js";import{ay as ur}from"./three.module-CtVjCPcj.js";import"./output-pass-j4dAGrPY.js";import"./linear-resolve-Cuka7Ypb.js";function yt(e){return`blender-${e.toLowerCase().replace(/_/g,"-")}`}function re(e){return e?.type==="TSE_SOME_ID"&&e.struct==="Object"&&e.object!==void 0}function rt(e){if(e.struct)return e.struct}function nt(e,t){return{id:e.id,label:e.name,role:"entity",kind:yt(e.icon),...rt(e)?{typeLabel:rt(e)}:{},parentId:t,childIds:e.children.map(o=>o.id),defaultExpanded:e.expanded}}const pr={transform:!0,inspectorFields:!1,persist:!0},ke=new Set;let jt=0;const Ne=new Set;function ot(){queueMicrotask(()=>{jt++;for(const e of Ne)e()})}function fr(e){return Ne.add(e),()=>{Ne.delete(e)}}function at(){return jt}function br(e){for(const t of ke)if(t.documentId===e||t.documentId===`object3d-document:${e}`)return t;return ke.values().next().value??null}const mr=()=>({position:[0,0,0],rotation:[0,0,0,1],scale:[1,1,1]});function st(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 ge(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 hr=[{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:`${ge("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:ge("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:ge("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:ge("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'"}],gr="collection-instance:";function yr(){const e=new Map;for(const t of be().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:`${gr}${t.name}`,label:t.name,group:"Collection Instance",call:`object.collection_instance_add, collection=${le(t.name)}`})}return[...e.values()]}function ve(){return[...hr,...yr()]}function jr(e){const[t,...o]=e.call.split(", ");return`bpy.ops.${t}(${o.join(", ")})`}function le(e){return JSON.stringify(e)}const _r={"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 vr(e){const t=/bpy\.ops\.([a-z_]+\.[a-z0-9_]+)\(/.exec(e)?.[1];return t===void 0?void 0:_r[t]}async function fe(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
|
-
`),d=await Ee(o,!0,t??vr(e));return d.error!==null?{made:[],error:d.error}:{made:d.result.split(`
|
|
3
|
-
`).map(g=>g.trim()).filter(g=>g.length>0),error:null}}async function wr(e,t){const o=[`_sel = {${e.map(le).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(${le(t)})`]].join(`
|
|
4
|
-
`),d=await Ee(o,!1);d.error!==null&&H().console.error(`Blender refused the selection write: ${d.error}`,"blender-outliner")}async function $e(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(le).join(", ")}]]`,"with bpy.context.temp_override(selected_objects=targets, selected_editable_objects=targets, active_object=targets[0], object=targets[0]):",` ${t}`].join(`
|
|
5
|
-
`),{error:d}=await fe(o);return d!==null?{destination:d,persisted:!1}:(await _e(e),{destination:`Blender — ${t}; the session saves the .blend`,persisted:!0})}const Sr={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."},kr="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 _t(e){return({defaultAdapter:t})=>{const o=new Set;let d=[],P=null,g=null;const v=new Map,x=new Map,O=()=>{for(const n of[...o])n()},S=()=>be().byId,F=n=>{const r=S().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)},N=n=>{const r=e();if(r===null)return null;for(const a of S().values())if(re(a)&&r.objectForBlenderName(a.object)===n)return a.id;return null},M=n=>{for(const r of S().values())if(re(r)&&r.object===n)return r.id;return null},V=n=>{if(S().has(n))return n;const r=Ze(t.hierarchy,n);return r===null?null:N(r)},G=n=>{const r=V(n);return r===null?null:F(r)},W=n=>{const r=G(n);return r===null?null:t.hierarchy.idForObject3D?.(r)??null},L={roots:()=>(Kt(q()),(be().tree?.rows??[]).map(r=>nt(r,null))),node:n=>{const r=be(),a=r.byId.has(n)?n:V(n),j=a===null?void 0:r.byId.get(a);return j===void 0?null:nt(j,r.parentOf.get(j.id)??null)},object3D:n=>G(n),idForObject3D:n=>N(n)};function q(){const n=S(),r=new Set;for(const a of d){const j=n.get(a)?.object;j!==void 0&&r.add(j)}return[...r]}const z=()=>{const n=[];for(const r of d){const a=G(r),j=a===null?null:t.hierarchy.idForObject3D?.(a);j&&n.push(j)}t.selection?.set(n,{intent:"exact"}),O()},p=()=>{if(f||g!==null)return;const n=Ht(),r=`${Te()}\0${n.active??""}\0${[...n.selected].sort().join("")}`;if(r===P)return;P=r;const a=n.selected.filter(C=>C!==n.active);n.active!==null&&n.selected.includes(n.active)&&a.push(n.active);const j=a.map(M).filter(C=>C!==null);j.length===d.length&&j.every((C,R)=>C===d[R])||(d=j,z())},_={get:()=>[...d],set:n=>{if(f)return;const r=Symbol("Blender selection");g=r;const a=n.map(V);d=a.filter(I=>I!==null),z();const j=S(),C=e(),R=[],D=[],K=[];n.forEach((I,T)=>{const J=a[T];if(J!==null){const de=j.get(J),ce=de?.object;ce===void 0?D.push(de?.name??J):R.includes(ce)||R.push(ce);return}const te=Ze(t.hierarchy,I),ie=te===null?null:C?.blenderObjectName(te)??null;ie===null?K.push(I):R.includes(ie)||R.push(ie)}),K.length>0&&H().console.warn(`No Blender object answers to ${K.join(", ")}, so Blender's selection leaves ${K.length===1?"it":"them"} out.`,"blender-outliner"),D.length>0&&H().console.warn(`${D.join(", ")} ${D.length===1?"is":"are"} not an object, so Blender's object selection does not carry ${D.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"),wr(R,R.length===0?null:R[R.length-1]).catch(I=>H().console.error(`Blender refused the selection write: ${String(I)}`,"blender-outliner")).finally(()=>{f||g!==r||(g=null,P=null,p())})}},$=n=>S().get(n)?.restrict,B={properties:n=>{const r=$(n);if(r===void 0)return[];const a=S().get(n),j=[{path:"name",label:"Name",type:"string",readonly:!re(a)}];return r.hide!==void 0&&j.push({path:"visible",label:"Show in Viewport",type:"boolean"}),r.render!==void 0&&j.push({path:"renderVisible",label:"Show in Renders",type:"boolean"}),r.exclude!==void 0&&j.push({path:"exclude",label:"Exclude from View Layer",type:"boolean"}),j},get:(n,r)=>{const a=S().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=S().get(n);return a===void 0?{writable:!1}:r==="name"?re(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:kr}:{writable:!0}},set:async(n,r,a)=>{const j=S().get(n);if(j===void 0)return;if(r==="name"){if(!re(j))return;const R=String(a);if(R===j.name||R.length===0)return;await Ke(`bpy.data.objects[${le(j.object)}]`,"name",R),await _e([R]);const D=M(R);D!==null&&_.set([D]);return}if(r==="exclude"){await Je(j.path,"exclude",a===!0);return}const C=r==="visible"?"hide":r==="renderVisible"?"render":null;C!==null&&await Je(j.path,C,a===!1)}},l={get:n=>{const r=W(n);return(r===null?void 0:t.transforms?.get(r))??mr()},editability:n=>{const r=V(n),a=r===null?void 0:S().get(r);return re(a)&&F(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=G(n);r!==null&&!v.has(r)&&(v.set(r,r.matrixWorld.clone()),x.set(n,r),Ut())},apply:(n,r)=>{const a=G(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=x.get(n)??G(n);x.delete(n);const a=e();if(r===null)return;const j=v.get(r);v.delete(r);try{if(a===null||(r.updateWorldMatrix(!0,!1),j?.equals(r.matrixWorld)===!0))return;const C=a.blenderObjectName(r);if(C===null)return;const R=`bpy.data.objects[${JSON.stringify(C)}]`;try{return await Ke(R,"matrix_world",st(r,a.root)),{destination:`Blender — ${R}.matrix_world; the session saves the .blend`,persisted:!0}}catch(D){return{destination:D instanceof Error?D.message:String(D),persisted:!1}}}finally{j&&await qt()}}},i=n=>{const r=V(n),a=r===null?void 0:S().get(r);return re(a)?a.object:null},c=n=>({destination:n,persisted:!1}),h=async n=>{await _e(n);const r=n.map(M).filter(a=>a!==null);return r.length>0&&_.set(r),r[0]??""},y=()=>{const n=t.documentId?.replace(/^object3d-document:/,""),r=oe().find(C=>C.documentId===n)?.rig().drawCamera()??null,a=e(),j=["bpy.ops.object.camera_add()","added = bpy.context.view_layer.objects.active"];return r!==null&&a!==null&&j.push("kept = added.location.copy()",`added.matrix_world = ${JSON.stringify(st(r,a.root))}`,"added.location = kept"),j.push("if bpy.context.scene.camera is None:"," bpy.context.scene.camera = added"),j.join(`
|
|
6
|
-
`)},u={creatableKinds:()=>ve().map(({kind:n,label:r})=>({kind:n,label:r})),create:n=>{const r=ve().find(j=>j.kind===n);if(r===void 0)return{id:"",ack:c(`${n} is not a row of Blender's Add menu that this editor adds. Its rows are: ${ve().map(j=>j.label).join(", ")}.`)};if(r.refusal!==void 0)return{id:"",ack:c(r.refusal)};const a=r.call==="object.camera_add"?y():jr(r);return{id:"",ack:(async()=>{const{made:j,error:C}=await fe(a);return C!==null?c(C):j.length===0?c(`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 h(j),{destination:`Blender — ${a}; the session saves the .blend`,persisted:!0})})()}},remove:n=>u.removeMany?.([n])??void 0,removeMany:async n=>{const r=[];for(const R of n){const D=i(R);if(D===null){const K=V(R)===null?void 0:S().get(V(R));return c(`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(D)}if(r.length===0)return c("Nothing selected to delete.");const j=[`targets = ${`[bpy.data.objects[n] for n in [${r.map(le).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:C}=await fe(j,"Delete Objects");return C!==null?c(C):(_.set([]),await _e([]),{destination:"Blender — bpy.ops.object.delete(use_global=False); the session saves the .blend",persisted:!0})},duplicate:n=>{const r=i(n);if(r===null)return{id:n,ack:c("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[${le(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:j,error:C}=await fe(a,"Duplicate Object");return C!==null?c(C):(await h(j),{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(i))];if(r.length===0||r.some(R=>R===null))return c("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:j,error:C}=await fe(a,"Duplicate Objects");return C!==null?c(C):(await h(j),{destination:"Blender — duplicate selected objects as one native operation; the session saves the .blend",persisted:!0})},reparent:()=>c("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.")},k={get documentId(){return t.documentId},get documentRootObject(){return t.documentRootObject},capabilities:pr,provenance:Sr,hierarchy:L,selection:_,inspector:B,transforms:l,structure:u,subscribe:n=>{o.add(n);const r=je(n),a=t.subscribe?.(n)??(()=>{});return()=>{o.delete(n),r(),a()}}},s={get documentId(){return k.documentId},selectedObjectNames:()=>q(),allObjectNames:()=>{const n=[];for(const r of S().values())re(r)&&n.push(r.object);return n},selectObjects:n=>{const r=n.map(M).filter(a=>a!==null);_.set(r)},rowIdForObject:n=>M(n),structure:u,subscribe:n=>{o.add(n);const r=je(n);return()=>{o.delete(n),r()}}};ke.add(s);let f=!1;const E=setTimeout(()=>{f||(ot(),p())},0),w=zt(p),A=je(p);return{adapter:k,dispose:()=>{f=!0,clearTimeout(E),w(),A(),ke.delete(s),ot(),o.clear()}}}}const xr=_t(Jt);Et({match:({adapter:e})=>et(null,e)!==null,describe:({adapter:e})=>{const t=et(null,e);if(t===null)return null;const o=t.kind==="object"?[...be().byId.values()].find(v=>v.struct==="Object"&&v.object===t.name):void 0,d=or().context?.scene,P=d?ar(d):void 0,g=t.kind==="object"?t.name:(P?.kind==="struct"?P.name:null)??"Scene";return{id:`blender-properties:${JSON.stringify(t)}`,title:g,identity:{kindLabel:t.kind==="object"?"Object":"Scene",kind:yt(o?.icon??"SCENE_DATA"),rename:{readOnly:t.kind!=="object",set:async v=>{t.kind==="object"&&v.length>0&&await sr(`bpy.data.objects[${JSON.stringify(t.name)}]`,"name",v)}}},sections:[]}}});function vt(e){const t=Number.isFinite(e)&&e>0?e:50;return{degrees:2*Math.atan(72/(2*t))*180/Math.PI,axis:"larger"}}Ct("model",{camera:{fov:vt(50),opening:[.8187,.4458,.3617]},interaction:{bootTool:"select",boxSelect:"touch"},all:{lighting:{source:"studio",studioPreset:bt.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 Be="volter.blender.area-split:",De=new Set,Ie=new Map;function Er(e){try{return globalThis.localStorage?.getItem(Be+e)==="1"}catch{return!1}}function Ge(e){let t=Ie.get(e);return t===void 0&&(t=Er(e),Ie.set(e,t)),t}function lt(e,t){if(Ge(e)!==t){Ie.set(e,t);try{t?globalThis.localStorage?.setItem(Be+e,"1"):globalThis.localStorage?.removeItem(Be+e)}catch{}for(const o of[...De])o()}}function wt(e){return De.add(e),()=>{De.delete(e)}}const Cr=[{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"}],Or=[{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)"}],Ar=[{label:"Geometry to Origin",type:"GEOMETRY_ORIGIN"},{label:"Origin to Geometry",type:"ORIGIN_GEOMETRY"},{label:"Origin to 3D Cursor",type:"ORIGIN_CURSOR"}],Rr=[{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"}],$r="No Collections to Instance";function ye({id:e,open:t,setOpen:o,anchorRef:d,children:P}){return b.jsxs("div",{ref:d,style:{position:"relative"},children:[b.jsx(At,{"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&&b.jsx(Rt,{anchorRef:d,dismissBoundaryRef:d,align:"start",gap:0,clamp:!0,"aria-label":e,onDismiss:()=>o(null),children:P})]})}function Mr(e,t,o){(async()=>{const d=await o;d===void 0||typeof d.destination!="string"||d.persisted!==!0&&e?.({tone:"error",title:`${t} was refused`,detail:d.destination})})()}function St({documentId:e,notify:t}){m.useSyncExternalStore(je,Te,Te),m.useSyncExternalStore(fr,at,at);const[o,d]=m.useState(null),P=m.useRef(null),g=m.useRef(null),v=m.useRef(null),x=m.useRef(null),O=m.useRef(null),S=m.useSyncExternalStore(wt,()=>e===void 0?!1:Ge(e),()=>!1),F=br(e);if(F===null)return null;const N=(p,_)=>()=>{d(null),Mr(t,p,_(F))},M=F.selectedObjectNames(),V=F.allObjectNames(),G=M.length===0?"Nothing is selected.":void 0,W=ve(),L=p=>b.jsx(X,{"data-testid":`blender-add-${p.kind}`,disabled:p.refusal!==void 0,title:p.refusal,onSelect:N(`Add ${p.label}`,_=>_.structure.create(p.kind).ack),children:p.label},p.kind),q=p=>W.filter(_=>_.group===p).flatMap(_=>_.separatorBefore===!0?[b.jsx(me,{},`${_.kind}-separator`),L(_)]:[L(_)]),z=p=>{if("separatorAt"in p)return b.jsx(me,{},`separator-${p.separatorAt}`);if("kind"in p){const $=W.find(B=>B.kind===p.kind);return $===void 0?null:L($)}const _=q(p.submenu);return _.length===0?b.jsx(X,{"data-testid":"blender-add-collection-instance",disabled:!0,children:$r},p.submenu):b.jsx(ue,{label:p.submenu,"data-testid":`blender-add-${p.submenu.toLowerCase().replaceAll(" ","-")}`,children:_},p.submenu)};return b.jsxs(Ot,{compact:!0,label:"Blender Object Mode menus","data-testid":"blender-object-mode-menus",ref:P,children:[b.jsx(ye,{id:"view",open:o,setOpen:d,anchorRef:g,children:b.jsxs(ue,{label:"Area","data-testid":"blender-view-area",children:[b.jsx(X,{"data-testid":"blender-area-vertical-split",disabled:S||e===void 0,title:S?"This area is already split.":void 0,onSelect:()=>{d(null),e!==void 0&<(e,!0)},children:"Vertical Split"}),b.jsx(me,{}),b.jsx(X,{"data-testid":"blender-area-close",disabled:!S,title:S?void 0:"There is no second area to close.",onSelect:()=>{d(null),e!==void 0&<(e,!1)},children:"Close Area"})]})}),b.jsxs(ye,{id:"select",open:o,setOpen:d,anchorRef:v,children:[b.jsx(X,{"data-testid":"blender-select-all",onSelect:N("Select All",p=>p.selectObjects(V)),children:"All"}),b.jsx(X,{"data-testid":"blender-select-none",onSelect:N("Select None",p=>p.selectObjects([])),children:"None"}),b.jsx(X,{"data-testid":"blender-select-invert",onSelect:N("Select Invert",p=>p.selectObjects(V.filter(_=>!M.includes(_)))),children:"Invert"})]}),b.jsx(ye,{id:"add",open:o,setOpen:d,anchorRef:x,children:Rr.map(p=>z(p))}),b.jsxs(ye,{id:"object",open:o,setOpen:d,anchorRef:O,children:[b.jsx(ue,{label:"Set Origin","data-testid":"blender-object-origin",children:Ar.map(p=>b.jsx(X,{"data-testid":`blender-origin-${p.type}`,disabled:p.refusal!==void 0||M.length===0,title:p.refusal??G,onSelect:N(`Set Origin ▸ ${p.label}`,_=>$e(_.selectedObjectNames(),`bpy.ops.object.origin_set(type='${p.type}')`)),children:p.label},p.type))}),b.jsx(ue,{label:"Clear","data-testid":"blender-object-clear",children:Or.map(p=>b.jsx(X,{"data-testid":`blender-clear-${p.label.toLowerCase()}`,disabled:M.length===0,title:G,onSelect:N(`Clear ▸ ${p.label}`,_=>$e(_.selectedObjectNames(),p.call)),children:p.label},p.label))}),b.jsx(ue,{label:"Apply","data-testid":"blender-object-apply",children:Cr.map(p=>b.jsx(X,{"data-testid":`blender-apply-${p.label.toLowerCase().replace(/ /g,"-")}`,disabled:M.length===0,title:G,onSelect:N(`Apply ▸ ${p.label}`,_=>$e(_.selectedObjectNames(),`bpy.ops.object.transform_apply(${p.call})`)),children:p.label},p.label))}),b.jsx(me,{}),b.jsx(X,{"data-testid":"blender-object-duplicate",disabled:M.length===0,title:G,onSelect:N("Duplicate Objects",async p=>{const _=p.selectedObjectNames().map($=>p.rowIdForObject($)).filter($=>$!==null);return p.structure.duplicateMany?.(_)}),children:"Duplicate Objects"}),b.jsx(X,{"data-testid":"blender-object-delete",disabled:M.length===0,title:G,onSelect:N("Delete",p=>{const _=p.selectedObjectNames().map($=>p.rowIdForObject($)).filter($=>$!==null);return p.structure.removeMany?.(_)}),children:"Delete"})]})]})}const ne=(e,t,o)=>({weight:e,target:t,rate:o>0?1/o:0}),Me=(e,t)=>{e.weight=e.rate<=0?e.target:e.weight<e.target?Math.min(e.target,e.weight+t*e.rate):Math.max(e.target,e.weight-t*e.rate)};function Pr(e,t){const o=[],d=e.animationFacts(),P=Object.keys(d.actions),g=d.clock?.fps||24,v=d.clock?.start??1,x=Math.max(1,(d.clock?.end??v+249)-v+1),O=new Map;let S=0,F=!1;const N=(l,i,c)=>{l.clips.set(i,null),l.failed.set(i,c),o.push(`${l.rig.armature} / ${i}: ${c}`)},M=(l,i)=>{if(l.clips.has(i))return l.clips.get(i);l.clips.set(i,void 0),t(l.rig.armature,i).then(c=>{const h=c?cr(c):null;for(const y of h?.unsupported??[])o.push(`${l.rig.armature}: ${y} plays only in Blender, not in a game.${tt([y])}`);h?l.clips.set(i,h):N(l,i,c?.reason??`it animates none of ${l.rig.armature}'s bones`)},c=>N(l,i,`it could not be read: ${c instanceof Error?c.message:String(c)}`))};for(const l of e.skeletons.rigs()){const i=d.armatures[l.armature];if(!i)continue;const c=new lr(l);c.facts(i);for(const y of c.unsupported())o.push(`${l.armature}: ${y} plays only in Blender, not in a game.${tt([y])}`);const h={rig:l,pose:c,facts:i,clips:new Map,failed:new Map,line:[],tracks:new Map,constraints:new Map};i.action&&(h.line=[{action:i.action,from:0,loop:!0,speed:1,weight:ne(1,1,0)}]),O.set(l.armature,h)}const V=(l,i,c,h)=>{const y=M(l,i.action);if(!y)return y;const u=y.end-y.start,k=(S-i.from)*g*i.speed,s=u>0&&i.loop?y.start+(k%u+u)%u:Math.min(y.end,y.start+k);return{clip:y,frame:s,influence:c*i.weight.weight,blend:h}},G=l=>{const i=[];let c=!1,h=!1;const y=w=>{w===void 0?c=!0:w&&i.push(w)},u=l.facts.animation,k=v+S*g%x,s=u?.tracks.some(w=>w.solo)??!1;for(const w of u&&u.useNla?u.tracks:[]){const A=l.tracks.get(w.name);if(s?!w.solo:A?A.mute:w.mute)continue;const n=A?A.influence.weight:1;if(A?.action){const a=w.strips[0]?.blendType??"REPLACE";A.previous&&y(V(l,A.previous,n,a)),y(V(l,A.action,n,a)),h=!0;continue}const r=ir({...u,tracks:[{...w,mute:!1,solo:!1}]},k,a=>M(l,a));r.waiting&&(c=!0),r.evaluated&&(h=!0);for(const a of r.layers)i.push({...a,influence:a.influence*n})}for(const w of l.tracks.values())!w.own||w.mute||!w.action||(w.previous&&y(V(l,w.previous,w.influence.weight,"REPLACE")),y(V(l,w.action,w.influence.weight,"REPLACE")),h=!0);const f=!!u?.useNla,E=f&&h;for(const w of f&&s?[]:l.line)y(V(l,w,E?u.influence:1,E?u.blendType:"REPLACE"));return c?null:i},W=l=>{for(const c of O.values())if(c.rig.object===l)return c;const i=l.geometry?.userData.blenderSkin;return i?O.get(i.armature)??null:null},L=l=>{for(let c=l;c;c=c.parent){const h=W(c);if(h)return h}let i=null;return l.traverse(c=>{i||(i=W(c))}),i},q=(l,i)=>i in d.actions?l.failed.get(i)??null:`the file has no action "${i}"`,z=(l,i,c)=>({action:l,from:S,loop:i.loop??!0,speed:i.speed??1,weight:c}),p=l=>({ok:!0,armature:l.rig.armature}),_=new Set,$=l=>{if(!d.unkept.includes(l)||_.has(l))return;_.add(l);const i=`The game plays "${l}", which nothing in the file uses and has no fake user, so Blender drops it the next time the file saves. Give it a fake user (action.use_fake_user = True) or assign it.`;o.push(i),H().console.warn(i,"blender-animation")},B=l=>({ok:!1,why:`${l.name||"this object"} has no armature`});return{warnings:o,clips:l=>L(l)?P:[],play(l,i,c={}){const h=L(l);if(!h)return B(l);const y=q(h,i);if(y)return{ok:!1,why:y};$(i);const u=h.line.at(-1);if(u?.action===i&&u.weight.target>0)return c.restart&&(h.line[h.line.length-1]={...u,from:S}),p(h);const k=Math.max(0,c.fade??.2);return h.line=u&&k>0?[...h.line,z(i,c,ne(0,1,k))]:[z(i,c,ne(1,1,0))],p(h)},stop(l,i=.2){const c=L(l);if(c)if(i<=0)c.line=[];else for(const h of c.line)Object.assign(h.weight,ne(h.weight.weight,0,i))},playing:l=>{const i=L(l)?.line.at(-1);return i&&i.weight.target>0?i.action:null},track(l,i,c){const h=L(l);if(!h)return B(l);const y=h.facts.animation?.tracks.some(s=>s.name===i)??!1,u=h.tracks.get(i);if(c===null)return u?.own?Object.assign(u.influence,ne(u.influence.weight,0,.2)):h.tracks.delete(i),p(h);if(c.action){const s=q(h,c.action);if(s)return{ok:!1,why:s};$(c.action)}else if(!y&&!u)return{ok:!1,why:`${h.rig.armature} has no NLA track "${i}"; give it an \`action\` to make one`};const k=u??{action:null,previous:null,influence:ne(1,1,0),mute:!1,own:!y};if(c.influence!==void 0&&Object.assign(k.influence,ne(k.influence.weight,Math.max(0,Math.min(1,c.influence)),Math.max(0,c.fade??0))),c.mute!==void 0&&(k.mute=c.mute),c.action&&(k.action?.action!==c.action||c.restart)){const s=Math.max(0,c.fade??.2);k.previous=k.action&&s>0?k.action:null,k.action=z(c.action,c,ne(k.previous?0:1,1,s))}return h.tracks.set(i,k),p(h)},constraint(l,i,c,h){const y=L(l);if(!y)return B(l);const u=y.facts.bones.find(f=>f.name===i);if(!u)return{ok:!1,why:`${y.rig.armature} has no bone "${i}"`};const k=u.constraints?.find(f=>f.name===c);if(!k)return{ok:!1,why:`bone "${i}" has no constraint "${c}"; it has ${(u.constraints??[]).map(f=>`"${f.name}"`).join(", ")||"none"}`};if(k.type!=="DAMPED_TRACK")return{ok:!1,why:`"${c}" is a ${k.type} constraint, which plays only in Blender; a game plays Damped Track`};const s=`${i}\0${c}`;return y.constraints.set(s,{...y.constraints.get(s),...h}),p(y)},update(l){if(!F){S+=l;for(const i of O.values()){for(const y of i.line)Me(y.weight,l);let c=-1;i.line.forEach((y,u)=>{y.weight.weight>=1&&(c=u)}),c>0&&(i.line=i.line.slice(c)),i.line=i.line.filter(y=>y.weight.weight>0||y.weight.target>0);for(const[y,u]of i.tracks)Me(u.influence,l),u.action&&Me(u.action.weight,l),u.previous&&u.action&&u.action.weight.weight>=1&&(u.previous=null),u.own&&u.influence.weight===0&&u.influence.target===0&&i.tracks.delete(y);const h=G(i);h&&i.pose.apply(h,{object:y=>e.objectForBlenderName(y),override:(y,u)=>i.constraints.get(`${y}\0${u}`)})}}},dispose(){F=!0,O.clear()}}}function xe(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 it({documentId:e,path:t,error:o,preview:d,retry:P,returnToPreview:g,preparingView:v=!1,note:x=null}){const O=o?"Could not open model":v?"Preparing model view":"Opening model",S=m.useMemo(()=>{const F={id:`opening:${e}`,label:O,secondaryLabel:t,role:"boundary",kind:"object",parentId:null,childIds:[]};return{capabilities:{transform:!1,inspectorFields:!1,persist:!1},hierarchy:{roots:()=>[F],node:N=>N===F.id?F:null},subscribe:()=>()=>{}}},[e,t,O]);return b.jsxs("div",{"data-testid":"blender-model-opening","aria-busy":!o,style:{position:"absolute",inset:0,overflow:"auto",background:U.surface.panel,color:U.content.primary},children:[!v&&b.jsx($t,{documentId:e,type:"Model",title:t,status:o?xe(o):O,selection:()=>({adapter:S,nodeId:null})},O),d&&b.jsx("img",{src:d.image,alt:`Last view of ${d.path}`,draggable:!1,style:{position:"absolute",inset:0,width:"100%",height:"100%",objectFit:"contain",pointerEvents:"none"}}),b.jsxs("div",{style:{position:"relative",minHeight:"100%",display:"flex",flexDirection:"column",justifyContent:d?"flex-end":"center",alignItems:d?"flex-start":"center",boxSizing:"border-box",padding:Q[8],gap:Q[4]},children:[d&&b.jsxs("div",{style:{padding:`${Q[2]} ${Q[4]}`,background:U.surface.chrome,border:`1px solid ${U.boundary.default}`,borderRadius:U.shape.small,maxWidth:"100%",overflowWrap:"anywhere"},children:["Previous model: ",d.path," · Preview only"]}),b.jsx(Mt,{tone:o?"error":"loading",style:{width:"min(100%, 32rem)",background:U.surface.chrome,border:`1px solid ${U.boundary.default}`,borderRadius:U.shape.small,overflowWrap:"anywhere"},title:b.jsx("span",{style:{fontSize:Le.lg},children:O}),description:b.jsxs(b.Fragment,{children:[b.jsx("div",{style:{color:U.content.primary,marginBottom:Q[3]},children:t}),o?xe(o):v?"The file is open. Preparing its viewport.":d?"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&&x&&b.jsx("div",{"data-testid":"blender-model-opening-note",style:{marginTop:Q[3],color:U.content.muted,userSelect:"text"},children:x}),o&&b.jsx("div",{"data-testid":"blender-model-opening-detail",style:{marginTop:Q[3],fontFamily:Pt,fontSize:Le.sm,color:U.content.muted,whiteSpace:"pre-wrap",userSelect:"text",textAlign:"left"},children:o})]}),action:o?b.jsxs("div",{style:{display:"flex",flexWrap:"wrap",justifyContent:"center",gap:Q[3]},children:[d&&b.jsx(We,{onClick:g,children:"Return to previous model"}),b.jsx(We,{variant:"secondary",onClick:P,children:"Retry opening"})]}):b.jsx("progress",{"aria-label":`Opening ${t}`,style:{width:"min(100%, 18rem)",accentColor:U.accent.default}})})]})]})}let ae=null;const Ve=new Set;let Pe=!1;function kt(){Pe||(Pe=!0,queueMicrotask(()=>{Pe=!1;for(const e of[...Ve])e()}))}function ct(e){ae?.project===e.project&&ae.capturedAt>e.capturedAt||ae!==e&&(ae=e,kt())}function Fr(){ae&&(ae=null,kt())}function Lr(e){return ae?.project===e?ae:null}function Tr(e){return Ve.add(e),()=>{Ve.delete(e)}}const dt="blender-model-open",Nr=3e4,ut=new WeakMap;let Br=0;function Dr(e){let t=ut.get(e);return t===void 0&&(t=++Br,ut.set(e,t)),t}const pt=new WeakSet,Zr="workspace.document",en="Blender Model",tn=({documentId:e,notify:t})=>b.jsx(St,{documentId:e,notify:t}),Ir="model",rn="owned",nn=[],Z=Xt,Vr={wireframe:"WIREFRAME",solid:"SOLID",preview:"MATERIAL",rendered:"RENDERED"},ft=new WeakMap;function Gr(e){let t=ft.get(e);return t||(t={subject:()=>{const o=pe.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,d,P,g)=>{const{location:v,rotation:x}=e.blenderPose(d,P);return Ee(`from mathutils import Matrix, Quaternion, Vector
|
|
10
|
-
import bpy
|
|
11
|
-
object = bpy.data.objects[${JSON.stringify(o)}]
|
|
12
|
-
object.matrix_world = Matrix.LocRotScale(Vector((${v.join(", ")})), Quaternion((${x.join(", ")})), object.matrix_world.to_scale())`,g,"Lock Camera to View").then(O=>{O.error!==null&&H().console.error(`Blender refused the camera's pose: ${O.error}`,"blender-camera")},O=>H().console.error(`The camera's pose was not written to Blender: ${String(O)}`,"blender-camera"))},view:(o,d,P,g)=>e.cameraView(o,d,P,g)}},ft.set(e,t),t)}function on(e){const{active:t,document:o,documentId:d,notify:P,publishContext:g}=e,v=o?.source?.path,x=o?.id,O=JSON.stringify([d,x,v]),[S,F]=m.useState(null),[N,M]=m.useState(null),[V,G]=m.useState(0),W=H().projectLocalState.projectRootPath(),L=m.useSyncExternalStore(Tr,()=>Lr(W),()=>null),q=m.useSyncExternalStore(mt,we,we),z=m.useRef(null),p=m.useRef({notify:P,publishContext:g});return p.current={notify:P,publishContext:g},m.useEffect(()=>H().session.onEnded(Fr),[]),m.useEffect(()=>{if(t===!1||!d||!x||!W||S?.key!==O||S.error)return;const _=Se(d);if(!_)return;let $=!1,B;const l=async()=>{try{const i=Z.snapshot(),c=se(d);if(!c||_.root!==Z.root||!Ye(d,x,v,i))return;const h=await _.requestPresentedFrame();if($||Z.snapshot()!==i||Se(d)!==_||_.root!==Z.root||se(d)!==c||!Ye(d,x,v,i))return;if(h&&h.width>0&&h.height>0){const y=window.document.createElement("canvas");y.width=Math.min(h.width,1024),y.height=Math.max(1,Math.round(y.width*h.height/h.width));const u=y.getContext("2d");u&&(u.drawImage(h,0,0,y.width,y.height),z.current={project:W,entryId:x,path:v??"Model",image:y.toDataURL("image/png"),capturedAt:performance.now()},ct(z.current))}}catch{}finally{$||(B=setTimeout(()=>{l()},1e3))}};return l(),()=>{$=!0,clearTimeout(B)}},[t,v,d,x,W,O,S,q]),m.useLayoutEffect(()=>{if(!(t===!1||!d||!x||!W||S?.key!==O||S.error))return()=>{if(!H().session.open())return;const _=z.current;_?.project===W&&_.entryId===x&&ct(_)}},[t,v,d,x,W,O,S]),m.useEffect(()=>{if(t===!1||!d)return;let _=!1,$;const B=v===void 0?null:{documentId:d,entryId:x,blend:v},l=Yt(B),i=()=>{$=p.current.publishContext?.(Z)};F(null),M(null);const c=H().documents;let h=!1,y=!1,u=!1;const k=v??"the model",s=async()=>{if(!(_||h||y)){if(B&&!Qt(B)){u=!0;return}h=!0,u=!1;try{if(B){if(!await Zt(B,i)){u=!0;return}}else i();_||(y=!0,Tt(dt),F({key:O,error:null}))}catch(n){if(_)return;y=!0,$?.(),$=void 0;const r=n instanceof Error?n.message:String(n);F({key:O,error:r}),H().console.error(r,"blender-open"),p.current.notify?.({tone:"error",title:`Blender could not open ${k}`,detail:xe(r)}),Nt(dt,{message:`Blender could not open ${k}: ${r}`,guidance:`${xe(r)} Dismiss this to reach the model's Retry.`,command:null})}finally{h=!1}}},f=setInterval(()=>{_||y||M(u?`Still waiting: Blender is holding another model, and opens ${k} when it is free.`:`Still opening ${k}: Blender is working (a large file, or a cold start). ${Ft("status")} shows what it is busy with.`)},Nr);let E=!1;const w=()=>{_||E||(E=!0,setTimeout(()=>{E=!1,s()},0))},A=c.subscribe(w);return w(),()=>{_=!0,clearInterval(f),A(),$?.(),l()}},[t,v,d,x,O,V]),t===!1||!d?null:S?.key!==O||S.error?b.jsx(it,{documentId:d,path:v??"Model",error:S?.key===O?S.error:null,preview:L,note:N,retry:()=>{F(null),G(_=>_+1)},returnToPreview:()=>{L&&H().workspace.open({kind:"document",id:L.entryId}).then(_=>{if(!_)throw new Error("The previous model is no longer available in this project.")}).catch(_=>p.current.notify?.({tone:"error",title:"Could not return to the previous model",detail:String(_)}))}}):b.jsxs(b.Fragment,{children:[b.jsx(Wr,{...e}),!se(d)&&b.jsx(it,{documentId:d,path:v??"Model",error:null,preparingView:!0,preview:L,retry:()=>{},returnToPreview:()=>{}})]})}function Wr(e){const{documentId:t}=e,o=e.document?.source?.path;m.useEffect(()=>t?dr(t,o):void 0,[t,o]),m.useEffect(()=>{if(!t)return;let u=!1,k=0,s=null;const f=[t,`${t}#area-2`,`${t}#play`],E=()=>{for(const a of f)Se(a)?.setDisplayTransform(s?.transform??null)},w=async()=>{const a=++k,j=await er();if(!j)return;const[C,R]=await Promise.all([Qe(`${j.scene}.view_settings`),Qe(`${j.scene}.display_settings`)]);if(u||a!==k||C?.kind!=="struct"||C.type!=="ColorManagedViewSettings")return;if(R?.kind==="struct"){const Y=R.groups.flatMap(Ce=>Ce.rows).find(Ce=>Ce.identifier==="display_device")?.value;if(typeof Y=="string"&&Y!=="sRGB")throw new Error(`Blender display device ${Y} has no browser display processor yet`)}const D=C.groups.flatMap(Y=>Y.rows),K=D.find(Y=>Y.identifier==="view_transform")?.value,I=D.find(Y=>Y.identifier==="exposure")?.value,T=D.find(Y=>Y.identifier==="look")?.value,J=D.find(Y=>Y.identifier==="gamma")?.value,te=typeof I=="number"?2**I:1,ie={transform:typeof K=="string"?K:"AgX",look:typeof T=="string"?T:"None",exposure:te,gamma:typeof J=="number"?J:1},de=JSON.stringify(ie);if(s?.key===de)return;const ce=await tr(ie);if(u||a!==k){ce.dispose();return}const xt=s;s={key:de,transform:ce},E(),xt?.transform.dispose();for(const Y of f)Oe(Y,{modes:{rendered:{lighting:{tone:{mapper:"none",exposure:1}}},preview:{lighting:{tone:{mapper:"none",exposure:1}}}}})},A=()=>{w().catch(a=>H().console.error(String(a),"blender-colour"))},n=ht(A),r=gt(E);return A(),()=>{u=!0,n(),r();const a=s;s=null,E(),a?.transform.dispose()}},[t]);const d=m.useSyncExternalStore(wt,()=>t?Ge(t):!1,()=>!1),[P,g]=m.useState(null);m.useEffect(()=>{if(!d||!t)return;const u=`${t}#area-2`;Lt(u).drawMode===void 0&&Oe(u,{drawMode:"rendered"});const k=Z.follow();return g(k),()=>{g(null),k.dispose()}},[d,t]);const v=m.useSyncExternalStore(Ae,()=>t?ee("model")?.playing(t)??!1:!1,()=>!1),[x,O]=m.useState(null),S=m.useSyncExternalStore(Ae,()=>t?ee("model")?.aspectRatio?.(t)??null:null,()=>null),[F,N]=m.useState(!1),M=m.useSyncExternalStore(Ae,()=>t?ee("model")?.transport?.generation(t)??0:0,()=>0),[V,G]=m.useState(M),[W,L]=m.useState(null),q=m.useRef(!1),z=m.useRef(!1);m.useLayoutEffect(()=>{if(M!==V){if(v&&t){if(q.current=!0,!z.current){let u=null;try{u=se(`${t}#play`)?.capture?.()??null}catch{}L(u)}z.current=!0}G(M)}},[M,V,v,t]);const p=ee("model")?.transport,_=m.useCallback(u=>p?.subscribeClock(u)??(()=>{}),[p]),$=m.useSyncExternalStore(_,()=>t&&p?p.clock(t).failure??null:null,()=>null);m.useEffect(()=>{$!==null&&(z.current=!1,L(null))},[$]);const B=m.useRef([]);m.useEffect(()=>{if(!v||!t){q.current=!1;return}const u=`${t}#play`;Oe(u,{drawMode:"rendered"});const k=Z.detach(),s=q.current;return q.current=!1,s||N(!1),O(k),s||(Z.setPlaying(!0),ze(t)),()=>{if(q.current&&ee("model")?.playing(t)){B.current.push(k);return}k.dispose();for(const f of B.current.splice(0))f.dispose();z.current=!1,O(null),L(null),Z.setPlaying(!1),ze(t)}},[v,t,V]),m.useEffect(()=>{for(const u of B.current.filter(k=>k!==x))u.dispose();B.current=B.current.filter(u=>u===x)},[x]),m.useEffect(()=>()=>{for(const u of B.current.splice(0))u.dispose()},[]),m.useEffect(()=>{if(t)return()=>ee("model")?.setPlaying(t,!1)},[t]);const l=v?x:null,i=S===null?{position:"absolute",inset:0}:{position:"absolute",left:"50%",top:"50%",transform:"translate(-50%, -50%)",width:`min(100cqw, calc(100cqh * ${S}))`,height:`min(100cqh, calc(100cqw / ${S}))`};if(m.useEffect(()=>{if(!l||!t)return;const u=se(t);if(!u)return;const k=u.capture,s=f=>se(`${t}#play`)?.capture?.(f)??null;return u.capture=s,()=>{u.capture===s&&(k?u.capture=k:delete u.capture)}},[l,t]),!t)return null;const c=d?P:null,h={position:"relative",flex:"1 1 0",minWidth:0,margin:12},y=l!==null&&F;return b.jsxs("div",{style:l||c?{position:"absolute",inset:-12,display:"flex",gap:2}:{display:"contents"},children:[b.jsx("div",{inert:y||void 0,style:l?{position:"absolute",inset:12,zIndex:2,opacity:F?0:1,pointerEvents:F?"none":"auto",transition:"opacity 160ms ease-out"}:c?h:{display:"contents"},children:b.jsx(Fe,{...e,view:Z,main:!0})},"model"),l&&b.jsx("div",{style:{position:"absolute",inset:12,containerType:"size"},"data-testid":"blender-play-area",children:b.jsx("div",{"data-volter-play-frame":!0,style:i,children:b.jsx(Fe,{...e,documentId:`${t}#play`,view:l.view,main:!1,playing:!0,onPlayReady:()=>{z.current=!1,N(!0),L(null)},onPlayReturn:()=>N(!1)})})},`play-${Dr(l)}`),l&&$!==null&&b.jsxs("div",{role:"alert","data-testid":"blender-play-failure",style:{position:"absolute",left:24,right:24,top:24,zIndex:4,padding:`${Q[2]} ${Q[3]}`,background:U.surface.chrome,border:`1px solid ${U.semantic.danger}`,borderRadius:U.shape.small,color:U.content.primary,fontSize:Le.sm,whiteSpace:"pre-wrap",overflowWrap:"anywhere",userSelect:"text"},children:[b.jsx("strong",{style:{color:U.semantic.danger},children:"Play is not running."})," ",$," Restart (or save the script) to try again, or Stop."]},"play-failure"),l&&W!==null&&b.jsx("div",{style:{position:"absolute",inset:12,containerType:"size",zIndex:3,pointerEvents:"none"},"data-testid":"blender-play-restart-still",children:b.jsx("img",{alt:"",src:W,style:{...i,display:"block",objectFit:"fill"}})},"restart-still"),c&&b.jsxs("div",{style:{...h,visibility:l?"hidden":void 0},"aria-hidden":l?!0:void 0,"data-testid":"blender-second-area",children:[b.jsx(Fe,{...e,documentId:`${t}#area-2`,view:c.view,main:!1}),!l&&b.jsx(zr,{documentId:t,areaId:`${t}#area-2`,notify:e.notify})]},"second")]})}function zr({documentId:e,areaId:t,notify:o}){m.useSyncExternalStore(mt,we,we);const d=m.useSyncExternalStore(Dt,()=>It(e)),P=se(t)?.HeaderControls,g=m.useRef(null);return m.useEffect(()=>{const v=g.current,x=v?.parentElement;if(!x)return;const O=()=>qe(e,{headerWidth:x.getBoundingClientRect().width+12,shelf:v});O();const S=new ResizeObserver(O);return S.observe(x),()=>{S.disconnect(),qe(e,null)}},[e]),b.jsxs(b.Fragment,{children:[b.jsx("div",{ref:g,className:"volter-dock-document-shelf",role:"toolbar","aria-orientation":"vertical","aria-label":"Document tools"}),d&&Vt.createPortal(b.jsxs("div",{className:"volter-dock-document-toolbar-own","data-testid":`document-header:${t}`,style:{display:"flex",alignItems:"center"},children:[b.jsx(St,{documentId:e,notify:o}),P&&b.jsx(m.Suspense,{fallback:null,children:b.jsx(P,{documentId:t})})]}),d)]})}function Fe({active:e,document:t,documentId:o,notify:d,surfaces:P,view:g,main:v,playing:x=!1,onPlayReady:O,onPlayReturn:S}){const F=Gr(g),N=m.useCallback(()=>({root:g.root,prepareDraw:(s,f)=>g.prepareDraw(s,f),...x?{}:{onChange(s){const f=g.onChange(s),E=pe.subscribe(s);return()=>{f(),E()}}},dispose(){}}),[g,x]),M=t?.source?.path,V=m.useCallback(s=>{const f=g.onChange(s),E=pe.subscribe(s);let w=null;const A=()=>{w?.(),w=oe().find(r=>r.documentId===o)?.onFrame(s)??null};A();const n=he(A);return()=>{f(),E(),n(),w?.()}},[o,g]),G=m.useSyncExternalStore(V,F.subject),W=m.useMemo(()=>v?xr:_t(()=>g),[v,g]);m.useEffect(()=>{if(v||x||!o)return;let s=!1;const f=()=>{if(s)return;const A=Se(o);A===null||g.cameraViewCamera()===null||(s=A.toggleCameraView())};f();const E=gt(f),w=g.subscribeFrames(f);return()=>{E(),w()}},[v,x,o,g]);const L=m.useRef(d),q=m.useRef(null),[z,p]=m.useState(!1);L.current=d;const _=m.useRef(O);_.current=O;const $=m.useRef(S);$.current=S,m.useEffect(()=>{if(!x||!o)return;if(M===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 s=o.replace(/#play$/,""),f=window.document.createElement("div");Object.assign(f.style,{position:"absolute",inset:"0",pointerEvents:"none"}),f.dataset.testid="model-play-roots",q.current?.appendChild(f),p(!1);let E=!1,w=!1,A=null,n=null,r=null;const a=()=>{if(A||w||E)return;const I=oe().find(T=>T.documentId===o);!I||!g.root.parent||(w=!0,n=I.rig().orbit,n.enabled=!1,g.prepareRendered(I.rig().drawCamera(),"render").then(()=>{E||(r=Pr(g,(T,J)=>Re({object:T,action:J})),A=ee("model")?.run({...r?{animation:r}:{},documentId:s,container:f,ready:()=>{E||(p(!0),_.current?.())},returning:()=>{E||$.current?.()},sourcePath:M,root:g.root,camera:()=>I.rig().drawCamera(),editingCamera:()=>oe().find(T=>T.documentId===s)?.rig().drawCamera()??I.rig().drawCamera(),onFrame:T=>I.onFrame(T),ownMaterial:T=>rr(T),report:(T,J)=>{H().console.error(`${T}: ${J}`,"blender-play"),L.current?.({tone:"error",title:T,detail:J})}})??null)},T=>{if(E)return;const J=`The game's stage could not be prepared for a rendered draw: ${T instanceof Error?T.message:String(T)}`;H().console.error(J,"model-play");const te=ee("model");te?.transport?.fail?te.transport.fail(s,M,J):(L.current?.({tone:"error",title:"Play could not start",detail:J}),te?.setPlaying(s,!1))}))};a();let j,C;const R=()=>{const I=oe().find(T=>T.documentId===o);I!==j&&(C?.(),j=I,C=I?.onFrame(a),a())};R();const D=he(R),K=I=>{if(I.key==="Escape"&&Gt(I)){const T=ee("model");T?.escape?T.escape(s):T?.setPlaying(s,!1)}};return window.addEventListener("keydown",K,!0),()=>{E=!0,D(),C?.(),window.removeEventListener("keydown",K,!0),A?.(),r?.dispose(),r=null,f.remove(),n&&(n.enabled=!0)}},[x,o,M,g]),m.useEffect(()=>!v||!o?void 0:He(()=>{const f=g.savedView(),E=Ue(o).drawMode,w=Vr[E];!f||w===void 0||f.drawMode===E||(g.noteSavedShading(w),nr(w))}),[v,o,g]),m.useEffect(()=>{if(v||!o)return;const s=()=>{const f=Wt(o);f===null||pt.has(f)||(pt.add(f),f.showHelpers&&f.toggleHelpers(),f.showGizmos&&f.toggleGizmos())};return s(),Bt(s)},[v,o]),m.useEffect(()=>{if(!o)return;const s=g.overlayGroups(),f=()=>{const w=oe().find(A=>A.documentId===o);if(w)for(const{kind:A,object:n}of s)w.setHelper(A,n)};f();const E=he(f);return()=>{E();const w=oe().find(A=>A.documentId===o);for(const{kind:A}of s)w?.setHelper(A,null)}},[o,g]);const B=m.useSyncExternalStore(ht,Xe,Xe);m.useEffect(()=>{if(!o||!v)return;let s=!0;return pe.sync(g,{clip:f=>Re({object:f}),bake:(f,E)=>Re({object:f,action:E})}).catch(f=>{s&&H().console.warn(`This file's action could not be read: ${f instanceof Error?f.message:String(f)}`,"blender-skin")}),()=>{s=!1}},[o,v,g,B]),m.useEffect(()=>{if(!o||!v)return;const{transport:s}=H();let f=null,E=!1,w=!1;const A=()=>{if(E||f)return;const a=s.for(o);a&&(f=pe.attachTo(a))},n=()=>{E||w||(w=!0,queueMicrotask(()=>{w=!1,A()}))};n();const r=s.subscribe(n);return()=>{E=!0,r();const a=f;f=null,a&&queueMicrotask(a)}},[o,v]),m.useEffect(()=>{if(!o)return;const s=()=>oe().find(j=>j.documentId===o);let f,E=null;const w=new ur,A=()=>s()?.rig().drawCamera()??w,n=()=>{const j=s();j!==f&&(E?.(),E=j?j.onFrame(()=>g.refreshRendered()):null,f=j);const{lighting:C,drawMode:R}=Ue(o),D=R==="preview",K=D?{world:C.source==="scene",lights:C.preview.sceneLights}:void 0,I=C.source==="scene"||D&&C.preview.sceneLights;g.holdRendered(I&&j?A:null,K,x?"render":"viewport"),g.setWorkbench(C.source==="studio"&&C.studioPreset===bt.id)};n();const r=He(n),a=he(n);return()=>{r(),a(),E?.(),g.holdRendered(null),g.setWorkbench(!1)}},[o,g,x]);const l=m.useRef(null),i=s=>!x&&s.button===2&&s.shiftKey&&s.target instanceof HTMLCanvasElement,c=s=>{if(!i(s)){l.current=null;return}s.preventDefault(),s.stopPropagation(),l.current={id:s.pointerId,x:s.clientX,y:s.clientY},s.isTrusted&&s.target.setPointerCapture(s.pointerId)},h=()=>{l.current=null},y=s=>{const f=l.current;if(f===null||s.pointerId!==f.id||s.button!==2||(l.current=null,s.preventDefault(),s.stopPropagation(),Math.hypot(s.clientX-f.x,s.clientY-f.y)>3))return;const E=g.placeCursor(s.clientX,s.clientY,s.target);if(E===null)return;const[w,A,n]=E.location,[r,a,j,C]=E.rotation;Ee(`from mathutils import Matrix, Quaternion, Vector
|
|
13
|
-
bpy.context.scene.cursor.matrix = Matrix.LocRotScale(Vector((${w}, ${A}, ${n})), Quaternion((${r}, ${a}, ${j}, ${C})), None)`,!1,"Set 3D Cursor").then(R=>{R.error!==null&&H().console.error(`Blender refused the 3D cursor: ${R.error}`,"blender-cursor")},R=>H().console.error(`The 3D cursor was not written to Blender: ${String(R)}`,"blender-cursor"))},u=s=>{i(s)&&s.preventDefault()};if(!o)return null;const k=P.Object3DAuthoring;return b.jsx("div",{ref:q,"data-play-ready":x?z:void 0,style:x?{position:"absolute",inset:0}:{display:"contents"},onPointerDownCapture:c,onPointerUpCapture:y,onPointerCancelCapture:h,onLostPointerCaptureCapture:h,onContextMenuCapture:u,children:b.jsx(k,{active:e??!0,fillContainer:x,documentId:o,sourcePath:M??"blender:runtime",displayName:t?.label??"Model",...G===null?{}:{subject:G},gridScale:F.gridScale,cameraView:F.cameraView,build:N,audit:!1,...x?{}:{authoring:W},cameraDirection:[.8187,.4458,.3617],openingFit:3,openingView:g.savedView(),presentation:(()=>{const s=g.savedView();if(!s)return null;const f={fov:vt(s.lens)};return v&&s.drawMode?{camera:f,drawMode:s.drawMode,modes:{preview:{lighting:{source:s.sceneWorld?"scene":"preview",preview:{sceneLights:s.sceneLights}},backdrop:{source:s.sceneWorld?"scene":"fill"}}}}:{camera:f}})(),stageKind:Ir,dressing:{environment:!1,keyLight:!1,viewLocked:g.studioLights()}})})}export{tn as Toolbar,on as default,Ir as documentKind,nn as inspectorBuiltins,rn as inspectorRail,Zr as point,en as title};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{h2 as n,iD as r}from"./volter-sdk-CjkJnQ6d.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};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as u,aJ as Te,j as s,ie as Ge,h_ as Me,ig as he}from"./volter-sdk-CjkJnQ6d.js";import{s as Be,b as ye}from"./blender-runtime-host-DKW0D0Bb.js";import{s as de,p as D,m as K,a as ie,b,c as We,d as je,e as Ne,f as q}from"./play-mode-Bfa-EEKv.js";import"./output-pass-j4dAGrPY.js";import"./three.module-CtVjCPcj.js";import"./linear-resolve-Cuka7Ypb.js";const Ve={transform:{startFrame:-5,pixelsPerFrame:8},refusal:null,size:{w:0,h:0},framedAt:0,drawn:null,onlySelected:!0};let X=Ve,ce=0;const Z=new Set;let Pe=0;function F(){return X}function z(){return ce}function ue(e){return Z.add(e),()=>{Z.delete(e)}}function I(e){X={...X,...e},ce+=1;for(const t of[...Z])t()}function Ke(e){X.onlySelected!==e&&I({onlySelected:e})}function Ae(){Pe+=1,ce+=1;for(const e of[...Z])e()}function Je(){return Pe}function $e(e){I({refusal:e})}const Ye=20,A=23,Q=26,Ue=16,qe=2,Xe=A+qe,ge=35,Ze=6;function Fe(e){const t=[2,3,5],n=[];for(let r=0;r<t.length;r++){const a=t[r],i=Math.trunc(e/a),o=i*a===e;if(o&&i===2)return a;n[r]=o}for(let r=0;r<t.length;r++)if(n[r])return t[r];return e}function Qe(e,t,n,r){if(n===0)return 1;const a=t/n;let i=Math.max(e,1);if(a*i>r)for(;i>1;){const o=Fe(i),m=Math.trunc(i/o);if(a*m<r)break;i=m}else for(;a*i<r&&i<1<<30;)i*=2;return i}function et(e){return e<=1?null:e/Fe(Math.round(e))}const y={back:"#303030",header:"#303030",grid:"#161616",gridMinor:"#262626",scrubBack:"#1d1d1d",scrubText:"#808080",playhead:"#4772b3",playheadText:"#ffffff",keyBorder:"#000000"},xe={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"}},tt={KEYFRAME:1,EXTREME:1.2,MOVING_HOLD:.925,BREAKDOWN:.85,JITTER:.8,GENERATED:.75},we=5.06,nt=2.12,rt=15,S={minPillWidth:24,textPadding:4,margin:2,radius:4,tipHalfWidth:6,tipHeight:6,stalkWidth:3},be="#212121",d={text:"#a6a6a6",rule:"#161616",widget:"#545454",widgetText:"#e6e6e6",widgetOutline:"#3d3d3d",widgetRadius:4,unit:Ye,refusal:"#ffaf23",headerPadding:"0 8px",headerGap:8,statusPadding:"2px 8px"},it=.2,ee={time:0,tick:0,paused:!1,speed:1},J={on:!1,available:!1,by:null};function O(){return Ge("model")}function H(e,t){t==="movie"&&O()?.playing(e)&&O()?.setPlaying(e,!1),t==="game"&&b.transport?.snapshot().playbackState==="playing"&&b.transport.pause(),We(e,t)}function M(e){const t=e?.document;if(typeof t=="string"&&t!=="")return t;const n=ie();if(n===null)throw new Error("No model document is open; open one, or name it with `document`.");return n}function $(){const e=O();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 j(e){const t=O(),n=je(e);return{document:e,mode:K(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)??ee,speeds:t?.transport?.speeds??[],autoplay:st(e)}}function Ie(e,t){return e?t.on?"bot":t.person===!1?"none":"person":null}function st(e){const t=O(),n=t?.transport?.autoplay?.(e)??J,r=t?.playing(e)??!1,a=Re(r,t?.transport?.clock(e)??ee,n);return{...n,driver:Ie(r,n),why:a}}function Oe(e,t,n){return n.available?null:e&&(t.running??!t.failure)?"no-bot":"not-running"}function Re(e,t,n){switch(Oe(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 se(e,t){if(!$().playing(e))throw new Error(`Nothing is playing in ${e}, so there is nothing to ${t}; \`play\` starts it.`)}Me({view:"model-play",title:"Game",verbs:[{id:"state",run:e=>j(M(e))},{id:"mode",run:e=>{const t=M(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)}.`);H(t,n)}return j(t)}},{id:"game-mode",title:"Game: Switch to Game Mode",run:e=>{const t=M(e);return H(t,"game"),j(t)}},{id:"movie-mode",title:"Game: Switch to Movie Mode",run:e=>{const t=M(e);return H(t,"movie"),j(t)}},{id:"play",title:"Game: Play",run:e=>{const t=M(e),n=$();return K(t)!=="game"&&H(t,"game"),n.playing(t)||n.setPlaying(t,!0),j(t)}},{id:"stop",title:"Game: Stop",run:e=>{const t=M(e);return $().setPlaying(t,!1),j(t)}},{id:"pause",title:"Game: Pause",run:e=>{const t=M(e);return se(t,"pause"),$().transport.setPaused(t,!0),j(t)}},{id:"resume",title:"Game: Resume",run:e=>{const t=M(e);return se(t,"resume"),$().transport.setPaused(t,!1),j(t)}},{id:"step",title:"Game: Step One Tick",run:e=>{const t=M(e);se(t,"step");const{transport:n}=$();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 i=0;i<a;i++)n.step(t);return j(t)}},{id:"speed",run:e=>{const t=M(e),{transport:n}=$(),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),j(t)}},{id:"autoplay",run:e=>{const t=M(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=typeof e?.behavior=="string"&&e.behavior!==""?e.behavior:null,i=e?.for??e?.limit,o=i==null?null:Number(i);if(o!==null&&!(Number.isFinite(o)&&o>0))throw new Error(`autoplay's \`for\` is a positive number of simulation seconds; got ${JSON.stringify(i)}.`);const m=$(),{transport:p}=m;if(p.setAutoplay===void 0)throw new Error("The installed Play tool has no autoplay; update @volter/editor-model-play.");const c=r?Re(m.playing(t),p.clock(t),p.autoplay?.(t)??J):null;if(c!==null)throw new Error(c);return p.setAutoplay(t,r,"cli",r?{behavior:a,limit:o}:void 0),j(t)}},{id:"restart",title:"Game: Restart",run:e=>{const t=M(e),n=$();return K(t)!=="game"&&H(t,"game"),n.transport.restart(t),j(t)}}]});const ot=e=>e.preventDefault();function U(e){return s.jsx("svg",{width:12,height:12,viewBox:"0 0 12 12","aria-hidden":"true",children:s.jsx("path",{d:e,fill:d.widgetText})})}const C={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:i,children:o}){const m=d.unit;return s.jsx("button",{type:"button","data-testid":t,title:e,"aria-label":e,"aria-pressed":r,disabled:n,onMouseDown:ot,onClick:i,style:{minWidth:m,height:m,padding:a?"0 6px":0,border:`1px solid ${d.widgetOutline}`,background:r?y.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:o})}function _e({title:e}){u.useSyncExternalStore(de,D,D);const t=u.useSyncExternalStore(Te,O,()=>null),n=ie();if(t===null||n===null)return s.jsx("span",{style:{color:d.text},children:e});const r=K(n),a=(i,o,m)=>s.jsx(R,{testId:`model-play-mode-${i}`,label:m,pressed:r===i,wide:!0,onClick:()=>H(n,i),children:o});return s.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 Le(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 ve(e){return`${e}×`}function at(){u.useSyncExternalStore(de,D,D);const e=ie(),t=u.useSyncExternalStore(Te,O,()=>null),n=t?.transport,r=e!==null&&(t?.playing(e)??!1),a=u.useCallback(x=>n?.subscribeClock(x)??(()=>{}),[n]),i=u.useSyncExternalStore(a,()=>e!==null&&n?n.clock(e):ee,()=>ee),o=u.useSyncExternalStore(a,()=>e!==null&&n?.autoplay?n.autoplay(e):J,()=>J),m=e===null?void 0:je(e),p=m===void 0?null:t?.scriptPath?.(m)??null,c=m===void 0?null:t?.hasScript?.(m)??null,f=e!==null&&t!==null,g=e===null?"No model document is open.":c===!1&&p!==null?`No play script yet — Play runs ${p}. \`cyclotron add-play\` adds an example.`:r&&i.failure?`Not running — ${i.failure.replace(/\.$/,"")}. Restart (or save the script) to retry, or Stop.`:r?`${i.paused?"Paused":"Playing"} ${p??""}`.trim():p===null?"Stopped.":`Stopped · Play runs ${p}`;return s.jsxs("div",{"data-testid":"blender-game-panel","data-playing":r||void 0,"data-paused":r&&i.paused||void 0,"data-failed":r&&!!i.failure||void 0,style:{position:"absolute",inset:0,display:"flex",flexDirection:"column",overflow:"hidden",background:y.back,color:d.text,font:"11px Inter, system-ui, sans-serif"},children:[s.jsxs("div",{style:{height:Q,flex:`0 0 ${Q}px`,display:"flex",alignItems:"center",gap:d.headerGap,padding:d.headerPadding,background:y.header,borderBottom:`1px solid ${d.rule}`},children:[s.jsx(_e,{title:"Game"}),s.jsx("div",{style:{flex:1}}),s.jsxs("div",{style:{display:"flex"},role:"group","aria-label":"Game transport",children:[s.jsxs(R,{testId:"model-play-button",label:r?"Stop playing (Escape)":"Play this model’s script",pressed:r,wide:!0,disabled:!f,onClick:()=>{e!==null&&t&&t.setPlaying(e,!t.playing(e))},children:[U(r?C.stop:C.play),r?"Stop":"Play"]}),n&&s.jsxs(s.Fragment,{children:[s.jsx(R,{testId:"model-play-pause",label:i.paused?"Resume":"Pause",pressed:r&&i.paused,disabled:!r,onClick:()=>{e!==null&&n.setPaused(e,!n.clock(e).paused)},children:U(i.paused?C.play:C.pause)}),s.jsx(R,{testId:"model-play-step",label:"Step one tick (while paused)",disabled:!r||!i.paused,onClick:()=>{e!==null&&n.step(e)},children:U(C.step)}),s.jsx(R,{testId:"model-play-restart",label:"Restart on a fresh copy of the model",disabled:!r,onClick:()=>{e!==null&&n.restart(e)},children:U(C.restart)})]})]}),n&&s.jsx("div",{style:{display:"flex"},role:"group","aria-label":"Game speed",children:n.speeds.map(x=>s.jsx(R,{testId:`model-play-speed-${x}`,label:`Speed ${ve(x)}`,pressed:i.speed===x,wide:!0,disabled:e===null,onClick:()=>{e!==null&&n.setSpeed(e,x)},children:ve(x)},x))}),s.jsx("div",{style:{flex:1}}),s.jsxs("span",{"data-testid":"model-play-clock",style:{color:d.widgetText,fontVariantNumeric:"tabular-nums",whiteSpace:"nowrap"},children:[Le(i.time)," · tick ",i.tick]})]}),s.jsxs("div",{style:{flex:1,minHeight:0,display:"flex",alignItems:"stretch",gap:d.headerGap,padding:d.statusPadding,overflow:"hidden"},children:[s.jsxs("div",{style:{flex:"0 1 260px",minWidth:0,display:"flex",flexDirection:"column",gap:6},children:[s.jsx("span",{"data-testid":"model-play-status",title:g,style:{whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:g}),n?.autoplay&&e!==null&&s.jsx(lt,{documentId:e,playing:r,clock:i,autoplay:o,transport:n})]}),t?.log&&e!==null&&s.jsx(dt,{documentId:e,log:t.log})]})]})}function lt({documentId:e,playing:t,clock:n,autoplay:r,transport:a}){const i=Oe(t,n,r),o=r.armed===!0,m=!t&&a.armAutoplay!==void 0,p=i==="no-bot"?"This game provides no bot: its play script registers none with play.autoplay(controller)":i==="not-running"?m?o?"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)",c=i==="no-bot"?"No autoplay — this game doesn’t provide a bot":i==="not-running"?o?"Armed — turns on once the game is running":"Available once the game is running":null,f=r.behaviors??[],[g,x]=u.useState(null),Y=r.on||o?r.behavior??null:g!==null&&f.includes(g)?g:f[0]??null,k=Ie(t,r),_=k!=="none"?null:r.by==="limit"&&r.limit?`Autoplay stopped at its ${Math.round(r.limit)} s limit`:r.refused?`Autoplay didn’t start: ${r.refused}`:null,G=[r.behavior,r.state].filter(Boolean).join(" — ");return s.jsxs("div",{style:{display:"flex",alignItems:"center",gap:d.headerGap,minWidth:0},children:[f.length>1&&s.jsx("select",{"data-testid":"model-play-autoplay-behavior",title:"The bot behaviour Autoplay runs",value:Y??"",disabled:r.on,onChange:T=>x(T.target.value),style:{background:d.widget,color:d.widgetText,border:"none",borderRadius:d.widgetRadius,font:"inherit",minWidth:0},children:f.map(T=>s.jsx("option",{value:T,children:T},T))}),s.jsx("span",{title:p,style:{display:"inline-flex"},children:s.jsx(R,{testId:"model-play-autoplay",label:p,pressed:r.on||o,wide:!0,disabled:m?!1:!t||!r.available||a.setAutoplay===void 0,onClick:()=>{const T=a.autoplay?.(e)??J;O()?.playing(e)??!1?a.setAutoplay?.(e,!T.on,"panel",T.on?void 0:{behavior:Y}):a.armAutoplay?.(e,!T.armed,{behavior:Y})},children:"Autoplay"})}),c!==null?s.jsx("span",{"data-testid":"model-play-autoplay-note","data-reason":i??void 0,style:{color:d.widgetText,minWidth:0},children:c}):t&&s.jsx("span",{"data-testid":"model-play-driver","data-driver":k??void 0,title:r.state?`The bot: ${r.state}`:void 0,style:{color:r.on?y.playhead:d.widgetText,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",minWidth:0},children:k==="bot"?`Bot driving${G?` · ${G}`:""}`:_?`${_}${r.state?` — ${r.state}`:""}`:k==="person"?"You’re driving":"Nobody’s driving"})]})}const oe=200;function Ee(e){if(e===void 0)return"";try{return JSON.stringify(e)}catch{return""}}function dt({documentId:e,log:t}){const[n,r]=u.useState(""),[,a]=u.useReducer(c=>c+1,0);u.useEffect(()=>{let c=0;const f=t.subscribe(()=>{c===0&&(c=requestAnimationFrame(()=>{c=0,a()}))});return()=>{f(),cancelAnimationFrame(c)}},[t]);const i=t.tail(e,oe,n===""?void 0:n),o=u.useRef(null),m=u.useRef(!0);u.useLayoutEffect(()=>{const c=o.current;c&&m.current&&(c.scrollTop=c.scrollHeight)});const p=i.entries.at(-1)?.seq;return s.jsxs("div",{"data-testid":"model-play-log",style:{flex:1,minWidth:0,display:"flex",flexDirection:"column",gap:4},children:[s.jsxs("div",{style:{display:"flex",alignItems:"center",gap:d.headerGap},children:[s.jsx("span",{children:"Play log"}),s.jsxs("select",{"data-testid":"model-play-log-kind","aria-label":"Show entries of kind",value:n,onChange:c=>{r(c.target.value),c.target.blur()},style:{height:d.unit,background:d.widget,color:d.widgetText,border:`1px solid ${d.widgetOutline}`,font:"inherit"},children:[s.jsx("option",{value:"",children:"All kinds"}),[...new Set([...i.kinds,...n===""?[]:[n]])].map(c=>s.jsx("option",{value:c,children:c},c))]}),s.jsx("span",{style:{color:d.widgetText},children:i.total===0?"Nothing logged yet":`${i.total} written${i.total>oe?` · newest ${oe} shown`:""}`})]}),s.jsx("div",{ref:o,"data-testid":"model-play-log-entries","data-newest":p,onScroll:c=>{const f=c.currentTarget;m.current=f.scrollTop+f.clientHeight>=f.scrollHeight-4},style:{flex:1,minHeight:0,overflowY:"auto",font:"12px/1.45 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace",background:y.header,border:`1px solid ${d.rule}`,padding:"2px 6px"},children:i.entries.map(c=>s.jsxs("div",{"data-kind":c.kind,style:{display:"flex",gap:10,whiteSpace:"nowrap",color:c.source==="play"?d.widgetText:d.text},children:[s.jsx("span",{style:{flex:"0 0 auto",fontVariantNumeric:"tabular-nums"},children:Le(c.simT)}),s.jsx("span",{style:{flex:"0 0 auto"},children:c.kind}),s.jsx("span",{style:{minWidth:0,overflow:"hidden",textOverflow:"ellipsis"},title:Ee(c.facts),children:Ee(c.facts)})]},c.seq))})]})}const bt="workspace.document",ct="Timeline",Ce=.25,He=200,ae={"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."},te="No scene transport is attached yet; open the model document first.";function w(){return b.transport}function le(){return w()?.snapshot().playbackState==="playing"}function ne(e){return $e(e),P()}const Se={JITTER:1,GENERATED:2,MOVING_HOLD:3,BREAKDOWN:4,KEYFRAME:5,EXTREME:6};function De(e,t){const n=[],r=new Map;for(const a of e)if(!(t&&!a.selected)){n.push(a.object);for(const i of a.keyframes){const o=r.get(i.frame);if(!o){r.set(i.frame,{...i});continue}o.select=o.select||i.select,(Se[i.type]??0)>(Se[o.type]??0)&&(o.type=i.type)}}return{columns:[...r.values()].sort((a,i)=>a.frame-i.frame),objects:n}}function re(){return De(b.state().summary,F().onlySelected).columns.map(e=>e.frame)}function P(){const e=F();return{...b.state(),transform:e.transform,size:e.size,refusal:e.refusal,drawn:e.drawn}}function V(e){if(!b.playable)return ne(te);const t=w();return t?(t.seekFrame(e),P()):ne("No stage transport is attached yet; open the model document first.")}Me({view:"timeline",title:ct,verbs:[{id:"state",run:()=>P()},{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 V(t)}},{id:"play",title:"Timeline: Play",run:()=>{if(!b.playable)throw new Error(te);const e=w();if(!e)throw new Error("No stage transport is attached yet; open the model document first.");return e.play(),P()}},{id:"pause",title:"Timeline: Pause",run:()=>{const e=w();return e?(e.pause(),P()):ne("No stage transport is attached yet.")}},{id:"jump-start",title:"Timeline: Jump to Start",run:()=>V(b.state().start)},{id:"jump-end",title:"Timeline: Jump to End",run:()=>V(b.state().end)},{id:"next-keyframe",title:"Timeline: Next Keyframe",run:()=>{const e=b.frame(),t=re().find(n=>n>e+1e-4);return t===void 0?P():V(t)}},{id:"prev-keyframe",title:"Timeline: Previous Keyframe",run:()=>{const e=b.frame(),t=re().reverse().find(n=>n<e-1e-4);return t===void 0?P():V(t)}},{id:"view-all",title:"Timeline: View All",run:()=>(Ae(),P())},{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}=F(),a=n.startFrame+r.w/2/n.pixelsPerFrame,i=Math.min(He,Math.max(Ce,t));return I({transform:{pixelsPerFrame:i,startFrame:a-r.w/2/i}}),P()}},{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}=F();return I({transform:{...n,startFrame:n.startFrame+t}}),P()}},...Object.keys(ae).map(e=>({id:e,run:()=>ne(ae[e])}))]});const ke="timeline";function vt(){u.useSyncExternalStore(de,D,D);const e=ie(),t=e!==null&&K(e)==="game";return u.useEffect(()=>he(ke,t?it:null),[t]),u.useEffect(()=>()=>he(ke,null),[]),t?s.jsx(at,{}):s.jsx(ut,{})}function ut(){u.useSyncExternalStore(Be,ye,ye),u.useSyncExternalStore(Ne,q,q),u.useSyncExternalStore(ue,z,z);const e=u.useRef(null),t=u.useRef(-1),{transform:n,size:r,refusal:a,onlySelected:i}=F(),o=b.state();u.useEffect(()=>{const l=e.current;if(!l)return;const v=new ResizeObserver(()=>{const h={w:l.clientWidth,h:l.clientHeight},E=F().size;(E.w!==h.w||E.h!==h.h)&&I({size:h})});return v.observe(l),I({size:{w:l.clientWidth,h:l.clientHeight}}),()=>v.disconnect()},[]);const m=Je();u.useEffect(()=>{if(m===t.current)return;t.current=m;const{w:l}=F().size;if(l===0)return;const v=Math.max(1,o.end-o.start),h=Math.min(He,Math.max(Ce,l*.9/v));I({transform:{pixelsPerFrame:h,startFrame:o.start-l*.05/h},framedAt:Date.now()})},[m,o.start,o.end]);const p=u.useCallback(l=>(l-n.startFrame)*n.pixelsPerFrame,[n]),c=u.useCallback(l=>n.startFrame+l/n.pixelsPerFrame,[n]),f=u.useMemo(()=>De(o.summary,i),[o.summary,i]),g=u.useMemo(()=>{if(r.w===0)return null;const l=r.w/n.pixelsPerFrame,v=Math.max(`${Math.round(n.startFrame)}`.length,`${Math.round(n.startFrame+l)}`.length),h=Math.max(ge,v*6+Ze),E=Qe(Math.round(o.fps),r.w+1,l,h),N=et(E),ze=Math.ceil(n.startFrame/E)*E,me=[];for(let B=ze;B<=n.startFrame+l;B+=E)me.push(B);const fe=[];if(N!==null&&N*n.pixelsPerFrame>=ge/5){const B=Math.ceil(n.startFrame/N)*N;for(let W=B;W<=n.startFrame+l;W+=N)Math.abs(W/E-Math.round(W/E))>1e-6&&fe.push(W)}return{major:E,minor:N,majors:me,minors:fe}},[r.w,n,o.fps]),x=A,k=Xe+Ue/2;u.useEffect(()=>{if(!g)return;const l=[...o.warnings];o.action||l.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."),l.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."),l.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`."),i&&f.objects.length===0&&o.summary.length>0&&l.push(`The summary row is empty because nothing animated is SELECTED, which is Blender's own answer with this filter on. ${o.summary.map(h=>h.object).join(", ")} carr${o.summary.length===1?"ies":"y"} an action; select it, or turn the filter off.`),l.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 v={drawn:{action:o.action,object:o.object,armature:o.armature,frame:o.frame,start:o.start,end:o.end,fps:o.fps,playing:le(),keyframes:f.columns.map(h=>h.frame),onlySelected:i,summaryObjects:f.objects,majorStep:g.major,minorStep:g.minor,majorLines:g.majors.length,minorLines:g.minors.length,labels:g.majors.length,diamonds:f.columns.length,diamondRadius:we,diamondSprite:rt,bones:o.bones,tracks:o.tracks,engineCalls:o.engineCalls,warnings:l}};JSON.stringify(v.drawn)!==JSON.stringify(F().drawn)&&I(v)},[g,o,f,i]);const _=u.useRef(!1),G=u.useCallback(l=>{const v=e.current;if(!v)return;const h=v.getBoundingClientRect();w()?.seekFrame(Math.round(c(l-h.left)))},[c]),T=`${Math.round(o.frame)}`,pe=Math.max(S.minPillWidth,T.length*6+2*S.textPadding),L=p(o.frame);return s.jsxs("div",{"data-testid":"blender-timeline",style:{position:"absolute",inset:0,display:"flex",flexDirection:"column",overflow:"hidden",background:y.back,color:d.text,font:"11px Inter, system-ui, sans-serif"},children:[s.jsx(mt,{}),s.jsx("div",{ref:e,style:{flex:1,minHeight:0,position:"relative"},children:s.jsxs("svg",{width:r.w,height:r.h,style:{display:"block",cursor:"ew-resize"},"aria-label":"Timeline",onPointerDown:l=>{_.current=!0,l.currentTarget.setPointerCapture(l.pointerId),G(l.clientX)},onPointerMove:l=>{_.current&&G(l.clientX)},onPointerUp:l=>{_.current=!1,l.currentTarget.releasePointerCapture(l.pointerId)},children:[s.jsx("title",{children:"Timeline"}),s.jsx("rect",{x:0,y:0,width:r.w,height:r.h,fill:y.back}),s.jsx("rect",{x:0,y:x,width:Math.max(0,p(o.start)),height:Math.max(0,r.h-x),fill:be}),s.jsx("rect",{x:p(o.end),y:x,width:Math.max(0,r.w-p(o.end)),height:Math.max(0,r.h-x),fill:be}),g?.minors.map(l=>s.jsx("line",{x1:p(l),y1:x,x2:p(l),y2:r.h,stroke:y.gridMinor,strokeWidth:1},`n${l}`)),g?.majors.map(l=>s.jsx("line",{x1:p(l),y1:x,x2:p(l),y2:r.h,stroke:y.grid,strokeWidth:1},`m${l}`)),s.jsx("rect",{x:0,y:0,width:r.w,height:A,fill:y.scrubBack}),g?.majors.map(l=>s.jsx("text",{x:p(l),y:15.5,textAnchor:"middle",fill:y.scrubText,fontSize:11,children:Math.round(l)},`t${l}`)),s.jsx("path",{d:`M3,${k-3.5} L6.5,${k} L3,${k+3.5} Z`,fill:y.scrubText}),f.columns.map(l=>{const v=tt[l.type]??1,h=we*v,E=xe[l.type]??xe.KEYFRAME,N=p(l.frame);return s.jsx("polygon",{points:`${N},${k-h} ${N+h},${k} ${N},${k+h} ${N-h},${k}`,fill:l.select?E.selected:E.fill,stroke:y.keyBorder,strokeWidth:nt*v},`k${l.frame}`)}),s.jsx("rect",{x:L-S.stalkWidth/2,y:A,width:S.stalkWidth,height:Math.max(0,r.h-A),fill:y.playhead}),s.jsx("rect",{x:L-pe/2,y:S.margin,width:pe,height:A-2*S.margin,rx:S.radius,fill:y.playhead}),s.jsx("polygon",{points:`${L-S.tipHalfWidth},${A-S.margin} ${L+S.tipHalfWidth},${A-S.margin} ${L},${A-S.margin+S.tipHeight}`,fill:y.playhead}),s.jsx("text",{x:L,y:15.5,textAnchor:"middle",fill:y.playheadText,fontSize:11,children:T})]})}),a?s.jsx("div",{style:{borderTop:`1px solid ${d.rule}`,padding:d.statusPadding,color:d.refusal},children:a}):null]})}function pt(){u.useSyncExternalStore(ue,z,z);const{onlySelected:e}=F(),[t,n]=u.useState(!1),r=(a,i,o)=>s.jsxs("button",{type:"button",onClick:()=>{o(),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:[s.jsx("span",{style:{width:12,display:"inline-block"},children:i===null?"":i?"✓":""}),a]});return s.jsxs("span",{style:{position:"relative"},children:[s.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?s.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,()=>Ke(!e)),r("Frame All",null,()=>Ae())]}):null]})}function mt(){u.useSyncExternalStore(Ne,q,q),u.useSyncExternalStore(ue,z,z);const e=b.state(),t=d.unit,n=b.playable,r=(i,o,m,p)=>s.jsx("button",{type:"button",title:n?p:`${p} — ${te}`,"aria-label":p,disabled:!n,onClick:m,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:o},i),a=i=>s.jsx("svg",{width:12,height:12,viewBox:"0 0 12 12","aria-hidden":"true",children:s.jsx("path",{d:i,fill:d.widgetText})});return s.jsxs("div",{style:{height:Q,flex:`0 0 ${Q}px`,display:"flex",alignItems:"center",gap:d.headerGap,padding:d.headerPadding,background:y.header,borderBottom:`1px solid ${d.rule}`},children:[s.jsx(_e,{title:"Timeline"}),s.jsx(pt,{}),s.jsx("div",{style:{flex:1}}),s.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 i=re().reverse().find(o=>o<b.frame()-1e-4);i!==void 0&&w()?.seekFrame(i)},"Jump to Previous Keyframe"),n&&le()?r("pause-rev",a("M3 2h2v8H3zM7 2h2v8H7z"),()=>w()?.pause(),"Pause"):r("play-reverse",a("M9 2L2 6l7 4z"),()=>w()?.play("reverse"),"Play Reverse"),n&&le()?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 i=re().find(o=>o>b.frame()+1e-4);i!==void 0&&w()?.seekFrame(i)},"Jump to Next Keyframe"),r("jump-end",a("M10 2H8.5v8H10zM2 2v8L7.5 6z"),()=>w()?.seekFrame(e.end),"Jump to End")]}),s.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")]}),s.jsx("div",{style:{flex:1}}),s.jsx("input",{type:"number",value:Math.round(e.frame),onChange:i=>{const o=Number(i.target.value);Number.isFinite(o)&&w()?.seekFrame(o)},"aria-label":"Current frame",disabled:!n,title:n?void 0:te,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}}),s.jsxs("span",{onClick:()=>$e(ae["set-range"]),onKeyDown:()=>{},style:{color:d.text,cursor:"not-allowed"},children:["Start ",e.start," · End ",e.end]})]})}export{vt as default,bt as point,ct as title};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as c,j as u,h_ as le}from"./volter-sdk-CjkJnQ6d.js";import{s as ue,b as X,h as de}from"./blender-runtime-host-DKW0D0Bb.js";import"./output-pass-j4dAGrPY.js";import"./three.module-CtVjCPcj.js";import"./linear-resolve-Cuka7Ypb.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 _e(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 _={text:"#e6e6e6",refusal:"#ed5700",rule:"#232323",statusPadding:"3px 8px",statusGap:12},Te="workspace.document",Ee="UV Editor",D=8e3,re=16,oe=8192,E={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:Ee,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(E.move("the active UV map"))},{id:"select",run:()=>R(E.select)},{id:"pin",run:()=>R(E.pin)},{id:"unwrap",run:()=>R(E.unwrap)}]});function R(t){return ne(t),m()}function Se(t){return!t?.uvBase64||!t.triangleBase64?null:{uv:Ve(t.uvBase64),tris:z(t.triangleBase64),starts:z(t.loopStartBase64??""),totals:z(t.loopTotalBase64??""),pins:t.pinBase64?W(t.pinBase64):null}}function je(){const t=c.useSyncExternalStore(ue,X,X);c.useSyncExternalStore(fe,Q,Q);const r=c.useRef(0),a=c.useRef(null),d=c.useRef(null),j=c.useRef(null),{transform:b,refusal:C,size:U}=m(),[,F]=[0,c.useCallback(()=>v({}),[])];c.useEffect(()=>{let e=!0;return(async()=>{try{const s=await de();if(!e)return;d.current=s,j.current=null}catch(s){if(!e)return;j.current=s instanceof Error?s.message:String(s)}F()})(),()=>{e=!1}},[t,F]),c.useEffect(()=>{const e=a.current;if(!e)return;const s=new ResizeObserver(()=>{const l={w:e.clientWidth,h:e.clientHeight},h=m().size;(h.w!==l.w||h.h!==l.h)&&v({size:l})});return s.observe(e),v({size:{w:e.clientWidth,h:e.clientHeight}}),()=>s.disconnect()},[]);const n=d.current,M=c.useMemo(()=>Se(n),[n]),O=me();c.useEffect(()=>{if(O===r.current)return;r.current=O;const e=n?.bounds??[0,0,1,1],{w:s,h:l}=m().size;if(s===0||l===0)return;const[h,g,o,f]=e,V=Math.max(o-h,.001),S=Math.max(f-g,.001),k=Math.min(oe,Math.max(re,Math.min(s/V,l/S)*.9));v({transform:{cx:(h+o)/2,cy:(g+f)/2,zoom:k},framedAt:Date.now()})},[O,n]);const w=e=>(e-b.cx)*b.zoom+U.w/2,y=e=>U.h/2-(e-b.cy)*b.zoom,i=c.useMemo(()=>{if(!n||!M)return null;const{uv:e,tris:s,starts:l,totals:h,pins:g}=M,o=[],f=[],V=[],S=[],k=l.length;for(let p=0;p<k;p++){const ce=l[p],I=h[p];if(I<3)continue;let $="",H=0,G=0;for(let A=0;A<I;A++){const Z=ce+A,q=e[Z*2],Y=e[Z*2+1];H+=q,G+=Y,$+=`${A===0?"M":"L"}${w(q).toFixed(2)} ${y(Y).toFixed(2)}`}$+="Z",o.push($),f.push($),S.push({x:w(H/I),y:y(G/I)})}const P=e.length>>1;for(let p=0;p<P&&V.length<D;p++)V.push({x:w(e[p*2]),y:y(e[p*2+1]),pinned:g?g[p]!==0:!1});return{faces:o,outlines:f,dots:V,faceDots:S,corners:P,triangles:s.length/3}},[n,M,b,U]);c.useEffect(()=>{if(!n)return;const e=[];n.layers.length===0&&n.object&&e.push(`"${n.object}" has no UV map — Blender's UV editor draws an empty tile.`),i&&i.corners>D&&e.push(`${i.corners} UV corners exceed this view's ${D}-dot budget; ${i.corners-D} corner marks are not drawn. The islands, their edges and the face dots are all drawn.`),n.image||e.push("No image behind the tile: the active material's node tree has no image texture with an image, so there is nothing for Blender's backdrop to show."),e.push(xe),e.push("The line style is SHADOW (#707070), not Blender's stock OUTLINE: `edit_uv_line_style_from_space_image` returns OUTLINE only when `SpaceImage.mode == SI_MODE_UV`, and there is no SpaceImage here."),v({drawn:{object:n.object,mesh:n.mesh,layer:n.active,layers:n.layers,mode:n.mode,loops:n.loops,polygons:n.polygons,triangles:i?.triangles??0,faces:i?.faces.length??0,edges:i?.outlines.length??0,verts:i?.dots.length??0,faceDots:i?.faceDots.length??0,pinned:i?.dots.filter(s=>s.pinned).length??0,bounds:n.bounds??null,tiles:J,subdiv:K,image:n.image?.name??null,warnings:e}})},[n,i]);const ie=c.useMemo(()=>{const e=[],[s,l]=J,[h,g]=K;for(let o=0;o<=s*h;o++){const f=o/h;e.push({key:`u${o}`,x1:w(f),y1:y(0),x2:w(f),y2:y(l),major:o%h===0})}for(let o=0;o<=l*g;o++){const f=o/g;e.push({key:`v${o}`,x1:w(0),y1:y(f),x2:w(s),y2:y(f),major:o%g===0})}return e},[b,U]),ae=n?n.active?`UV Editor · ${n.object} · ${n.active} · ${n.polygons} faces, ${n.loops} corners · ${n.mode}`:`UV Editor · ${n.object??"no mesh selected"} · no UV map · ${n.mode}`:j.current??"UV Editor · reading…";return u.jsxs("div",{"data-testid":"blender-uv-editor",style:{display:"flex",flexDirection:"column",position:"absolute",inset:0,overflow:"hidden",background:x.back,color:_.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(E.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:_e(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 ${_.rule}`,padding:_.statusPadding,display:"flex",gap:_.statusGap,alignItems:"center"},children:[u.jsx("span",{children:ae}),C?u.jsx("span",{style:{color:_.refusal},children:C}):null]})]})}export{je as default,Te as point,Ee as title};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{h2 as s,n as r,j as n}from"./volter-sdk-CjkJnQ6d.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};
|
|
@@ -1,2 +0,0 @@
|
|
|
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-C7WcdPfy.js";import{s as W}from"./session-rpZf0raD.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};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{L as l}from"./blender-runtime-host-DKW0D0Bb.js";import"./output-pass-j4dAGrPY.js";import"./three.module-CtVjCPcj.js";import"./linear-resolve-Cuka7Ypb.js";import"./volter-sdk-CjkJnQ6d.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-native-preview":e("none",12e4),"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-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};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{j as e}from"./volter-sdk-CjkJnQ6d.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};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{g as X}from"./asset-preview-C3dOTcRY.js";import{V,bf as L,X as q,g as F}from"./three.module-CtVjCPcj.js";function ae(t,e){return e.skinnedMeshes>0?"skinned":e.uniqueBones>0?"rigged":t.clips>0?"animated":"static"}const Y=["map","alphaMap","aoMap","bumpMap","displacementMap","emissiveMap","envMap","lightMap","metalnessMap","normalMap","roughnessMap","specularMap"];function Z(t){if(!("color"in t))return null;const e=t.color;return e?.isColor===!0?`#${e.getHexString()}`:null}function E(t){let e=0;for(const n of Object.values(t.attributes)){const s=n.array;for(let i=0;i<s.length;i++)Number.isFinite(Number(s[i]))||e++}return e}function O(t){if(!t)return null;const e=new q,n=new V;for(let s=0;s<t.count;s++)n.set(t.getX(s),t.getY(s),t.getZ(s)),Number.isFinite(n.x)&&Number.isFinite(n.y)&&Number.isFinite(n.z)&&e.expandByPoint(n);return e.isEmpty()?null:e}function R(t){const e=O(t.getAttribute("position"));if(!e)return null;for(const n of t.morphAttributes.position??[]){const s=O(n);s&&(t.morphTargetsRelative?(e.expandByPoint(new V().addVectors(e.min,s.min)),e.expandByPoint(new V().addVectors(e.max,s.max))):e.union(s))}return e}function J(t){return t.matrixAutoUpdate?new F().compose(t.position,t.quaternion,t.scale):t.matrix.clone()}function G(t,e,n){if(X(e,"editorHelper")||e.isSkeletonHelper)return;const s=e;if(!s.isMesh&&!s.isLine&&!s.isPoints||!s.geometry)return;const i=R(s.geometry);if(!i)return;const r=e;if(!r.isInstancedMesh){t.union(i.clone().applyMatrix4(n));return}const l=new F;for(let a=0;a<r.count;a++)r.getMatrixAt(a,l),t.union(i.clone().applyMatrix4(new F().multiplyMatrices(n,l)))}function K(t){const e=new q,n=[];for(let r=t.parent;r;r=r.parent)n.push(r);const s=new F;for(let r=n.length-1;r>=0;r--)s.multiply(J(n[r]));const i=(r,l)=>{const a=new F().multiplyMatrices(l,J(r));G(e,r,a);for(const p of r.children)i(p,a)};return i(t,s),e.isEmpty()?null:e}function le(t){const e=new Set,n=new Set,s=new Map,i=new Map,r=new Map,l=new Set,a=[],p=[];let M=0,v=0,x=0,g=0,T=0,A=0,C=0,N=0,f=0,d=0,b=0,z=0,P=0,D=0,U=0;t.traverse(o=>{if(X(o,"editorHelper")||o.isSkeletonHelper)return;M++;let c=0;for(let u=o.parent;u&&u!==t.parent;u=u.parent)c++;p.push({id:o.uuid,name:o.name||o.type,type:o.type,depth:c}),o.isBone&&A++,o.isLOD&&(D++,U+=o.levels.length);const h=o,S=o;if(!S.isMesh&&!S.isLine&&!S.isPoints)return;v++,h.isInstancedMesh&&b++,h.isSkinnedMesh&&z++;const m=h.geometry;if(m){P+=E(m);const u=m.getAttribute("position");g+=u?.count??0,T+=m.index?Math.floor(m.index.count/3):Math.floor((u?.count??0)/3),x+=Math.max(m.groups.length,1),C+=m.morphAttributes.position?.length??0,m.index?(f++,N+=m.index.array.byteLength):d++;for(const[w,B]of Object.entries(m.attributes)){N+=B.array.byteLength;const y=r.get(w)??{itemSize:B.itemSize,meshes:0};y.meshes++,r.set(w,y),/^uv\d*$/.test(w)&&l.add(w)}}const W=Array.isArray(h.material)?h.material:h.material?[h.material]:[];for(const u of W){e.add(u);const w=i.get(u)??new Set;w.add(o),i.set(u,w);const B=s.get(u)??[];for(const y of Y){const k=u[y];if(k?.isTexture!==!0)continue;n.add(k),B.includes(y)||B.push(y);const $=k.image;a.some(H=>H.materialId===u.uuid&&H.slot===y)||a.push({materialId:u.uuid,materialName:u.name||u.type,slot:y,textureName:k.name||k.source.data?.src||"Texture",width:$?.width??null,height:$?.height??null,format:k.format,colorSpace:k.colorSpace||"none"})}s.set(u,B)}});for(const o of n){const c=o.image;N+=(c?.width??0)*(c?.height??0)*4}const I=K(t)?.getSize(new V)??null;return{nodes:M,meshes:v,primitives:x,vertices:g,triangles:T,materials:e.size,textures:n.size,bones:A,clips:t.animations.length,morphTargets:C,memoryBytes:N,bounds:I?{x:I.x,y:I.y,z:I.z}:null,geometry:{attributes:[...r.entries()].map(([o,c])=>({name:o,itemSize:c.itemSize,meshCount:c.meshes})).sort((o,c)=>o.name.localeCompare(c.name)),uvChannels:[...l].sort(),indexedMeshes:f,nonIndexedMeshes:d,instancedMeshes:b,skinnedMeshes:z,nonFiniteAttributeValues:P,lodGroups:D,lodLevels:U},animationClips:t.animations.map((o,c)=>{const h=new Set;let S=0;for(const m of o.tracks){S+=m.times.length;const W=L.parseTrackName(m.name);W.nodeName&&h.add(W.nodeName)}return{id:`${c}:${o.uuid}`,name:o.name||`Clip ${c+1}`,duration:o.duration,tracks:o.tracks.length,keyframes:S,targets:[...h].sort(),rootMotion:se(o).length>1}}),hierarchy:p,materialNames:[...e].map(o=>o.name||o.type),textureNames:[...n].map(o=>o.name||o.source.data?.src||"Texture"),materialSlots:[...e].map(o=>({id:o.uuid,name:o.name||o.type,type:o.type,textureSlots:s.get(o)??[],usageCount:i.get(o)?.size??0,meshNames:[...i.get(o)??[]].map(c=>c.name||c.type).sort(),color:Z(o),transparent:o.transparent})),textureBindings:a}}function Q(t){const e=t.geometry.getAttribute("skinIndex"),n=t.geometry.getAttribute("skinWeight");if(!e||!n)return{weightedVertices:0,nonNormalizedVertices:0,zeroWeightVertices:0,invalidJointIndices:0};const s=Math.min(e.count,n.count);let i=0,r=0,l=0;for(let a=0;a<s;a++){const p=[n.getX(a),n.getY(a),n.getZ(a),n.getW(a)],M=[e.getX(a),e.getY(a),e.getZ(a),e.getW(a)],v=p.reduce((x,g)=>x+g,0);v<=1e-6?r++:Math.abs(v-1)>.001&&i++,l+=p.filter((x,g)=>x>1e-6&&(M[g]<0||M[g]>=t.skeleton.bones.length)).length}return{weightedVertices:s,nonNormalizedVertices:i,zeroWeightVertices:r,invalidJointIndices:l}}function _(t){let e=0;for(const n of t.times)Number.isFinite(n)||e++;for(const n of t.values)Number.isFinite(n)||e++;return e}function j(t,e){const n=L.parseTrackName(e.name).nodeName;return n&&!L.findNode(t,n)?n:null}function ee(t){let e=0;const n=new Set;for(const s of t.animations)for(const i of s.tracks){e+=_(i);const r=j(t,i);r&&n.add(r)}return{nonFiniteValues:e,unresolvedTargets:n}}function ue(t){const e=new Set,n=new Set,s=new Set;let i=0,r=0,l=0,a=0,p=0,M=0;const v=new Set,x=new Set,g=new Set;t.traverse(f=>{e.add(f);const d=f;d.isBone&&s.add(d)}),t.traverse(f=>{const d=f;if(!d.isSkinnedMesh)return;i++,g.add(d.bindMode),n.add(d.skeleton),d.skeleton.bones.length!==d.skeleton.boneInverses.length&&M++;for(const z of d.skeleton.bones)s.add(z),e.has(z)||v.add(z);const b=Q(d);r+=b.weightedVertices,l+=b.nonNormalizedVertices,a+=b.zeroWeightVertices,p+=b.invalidJointIndices});const T=ee(t);for(const f of s)(!f.parent?.isBone||!s.has(f.parent))&&x.add(f.name||f.uuid);const A=T.nonFiniteValues,C=T.unresolvedTargets,N=l===0&&a===0&&p===0&&M===0&&v.size===0&&A===0&&C.size===0;return{kind:i>0?"skinned":s.size>0?"rigid":"none",skinnedMeshes:i,skeletons:n.size,uniqueBones:s.size,weightedVertices:r,nonNormalizedVertices:l,zeroWeightVertices:a,invalidJointIndices:p,inverseBindMismatches:M,externalBones:v.size,nonFiniteAnimationValues:A,unresolvedTrackTargets:[...C].sort(),rootBones:[...x].sort(),bindModes:[...g].sort(),valid:N}}function ce(t,e){if(e&&!te(e))return null;const n=t.clone().normalize();for(const s of["front","back","left","right","top","bottom"])if(ne(s).angleTo(n)<.0087)return`${s[0]?.toUpperCase()}${s.slice(1)}`;return null}function te(t){const e=t.clone().normalize();return Math.max(Math.abs(e.x),Math.abs(e.y),Math.abs(e.z))>Math.cos(.0087)}function ne(t){const e={front:[0,0,1],back:[0,0,-1],left:[-1,0,0],right:[1,0,0],top:[0,1,0],bottom:[0,-1,0],isometric:[1,.72,1]};return new V(...e[t]).normalize()}function de(t){let e=!1,n=!1,s=!1,i=!1;return t.traverse(r=>{const l=r;e||=!!l.geometry?.getAttribute("uv"),n||=!!l.geometry?.getAttribute("color"),s||=!!(r.isBone||l.isSkinnedMesh),i||=r.isLOD===!0}),[{mode:"lit",available:!0},{mode:"unlit",available:!0},{mode:"wireframe",available:!0},{mode:"normals",available:!0},{mode:"uv",available:e,...e?{}:{reason:"No UV channel"}},{mode:"vertex-colors",available:n,...n?{}:{reason:"No vertex colors"}},{mode:"bounds",available:!0},{mode:"skeleton",available:s,...s?{}:{reason:"No skeleton"}},{mode:"collision",available:!1,reason:"No collision metadata"},{mode:"lod",available:i,...i?{}:{reason:"No LOD groups"}}]}function se(t){const e=t.tracks.filter(i=>i.ValueTypeName==="vector"&&i.name.toLowerCase().endsWith(".position")),n=e.find(i=>/(^|[./])(root|hips|armature)[./]/i.test(i.name))??e[0];if(!n||n.values.length<6)return[];const s=[];for(let i=0;i+2<n.values.length;i+=3)s.push(new V(n.values[i],n.values[i+1],n.values[i+2]));return s}export{ce as a,le as b,ne as c,ue as d,ae as e,te as i,de as s};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{h$ as i,i1 as t,i0 as s,i8 as d}from"./volter-sdk-CjkJnQ6d.js";const m={name:"modelsFromBlendFiles",reads:"files",schema:i({finder:d("modelsFromBlendFiles"),include:t(s().min(1)).min(1).describe("Project-relative globs of the Blender files to list (`src/models/**/*.blend`)")}).strict(),run(a,l){const n=[],o=[];for(const e of l.files??[]){if(!e.endsWith(".blend"))continue;const r=(e.split("/").pop()??e).replace(/\.blend$/,"");n.push({id:`model:${e}`,label:r,kind:"model",region:null,authorable:!0,reach:{kind:"root-mount"},source:{path:e}})}return n.length===0&&n.push({id:"blender:runtime",label:"Model",kind:"model",region:null,authorable:!0,reach:{kind:"root-mount"}}),{entries:n,notes:o}}};export{m as finder};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/Object3DDocumentToolbar-DAGo1TZr.js","assets/volter-sdk-CjkJnQ6d.js","assets/asset-preview-C3dOTcRY.js","assets/output-pass-j4dAGrPY.js","assets/three.module-CtVjCPcj.js","assets/model-inspection-DGW_rNdi.js","assets/ViewportShadingMenu-rbW6zaze.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{A as j,iy as V,iz as I,iA as L,iB as O,iC as P,n as M,g as k}from"./volter-sdk-CjkJnQ6d.js";function R(e,t){return e.object3D?.(t)??null}const o=new Map,l=new Map;function v(e){let t=l.get(e);return t||(t={frameListeners:new Set,helpers:new Map},l.set(e,t)),t}const d=new Set,p=new Set;function b(){for(const t of o.values())if(t.presenting)return t;const e=j();if(e!==null){const t=o.get(e);if(t)return t}return o.values().next().value??null}let s=null;function g(){s=null;const e=F();for(const t of p)t(e)}function _(e,t){const r=v(e);return{documentId:e,rig:()=>o.get(e)?.rig??t,setHelper:(n,a)=>{r.helpers.set(n,a),o.get(e)?.setHelper(n,a)},onFrame:n=>(r.frameListeners.add(n),()=>{r.frameListeners.delete(n)})}}function z(e,t,r,n){const a=v(n.documentId),c={documentId:n.documentId,rig:e,present:t,setHelper:r,frameListeners:a.frameListeners,helpers:a.helpers,presenting:!1};o.set(n.documentId,c);for(const[h,y]of c.helpers)r(h,y);return g(),()=>{o.get(n.documentId)===c&&(o.delete(n.documentId),g())}}function A(){return b()?.rig??null}function E(e){return d.add(e),()=>{d.delete(e)}}function F(){return s||(s=[...o.values()].map(e=>_(e.documentId,e.rig))),s}function H(e){const t=l.get(e);return t?[...t.helpers].filter(([,r])=>r!==null).map(([r])=>r):[]}function K(e){return p.add(e),()=>{p.delete(e)}}function q(e,t){const r=o.get(e);if(r){for(const n of r.frameListeners)n(t);if(b()===r)for(const n of d)n(t)}}const x=M.lazy(()=>k(()=>import("./Object3DDocumentToolbar-DAGo1TZr.js"),__vite__mapDeps([0,1,2,3,4,5,6])).then(e=>({default:e.Object3DDocumentToolbar}))),i=new Map,u=new Map;let S=0;const m=new Set;let f=!1;function D(){f||(f=!0,queueMicrotask(()=>{f=!1,S++;for(const e of[...m])e()}))}function G(e,t={}){i.set(e.documentId,e);const r=V(e),n=I(e.documentId,{...C(e),...t});return D(),()=>{n(),r(),i.get(e.documentId)===e&&(i.delete(e.documentId),D())}}const w=([e,t,r])=>({x:e,y:t,z:r});function C(e){return{read:()=>{const t=e.cameraPose(),r=e.presentation();return{camera:{position:w(t.position),target:w(t.target),...t.fov?{fov:t.fov}:{}},diagnostic:r.skeleton?"skeleton":r.mode,grid:P(e.documentId)}},setDiagnostic:t=>{if(t==="preview"||t==="rendered"){const r=L(e.documentId)?.stageKind;if(!r||O(r)?.modes?.[t]?.lighting===void 0)return!1}return e.setSkeleton(t==="skeleton"),e.setBounds(t==="bounds"),e.setMode(t==="skeleton"||t==="bounds"?"solid":t),!0},setCamera:t=>(typeof t!="string"?e.setCameraPose(t.position,t.target,t.fov):t==="perspective"?(e.setProjection("perspective"),e.frame()):e.setViewPreset(t),!0),frame:t=>t==="selection"?e.frameSelection():(e.frame(),!0),selection:{read:()=>e.selection(),apply:t=>e.select(t)},idsNamed:t=>{const r=[];return e.root.traverse(n=>{if(n.name!==t)return;const a=e.idForObject(n);a&&r.push(a)}),r},setTransformMode:t=>e.viewport.setTransformMode(t),capture:t=>e.captureImage(t??512),prepare:()=>T(e.documentId),HeaderControls:x}}function N(e){return i.get(e)??null}function W(e,t){return u.set(e,t),()=>{u.get(e)===t&&u.delete(e)}}async function T(e){await u.get(e)?.()}function J(){return[...i.values()]}function Q(e){return m.add(e),()=>m.delete(e)}function U(){return S}export{K as a,J as b,A as c,E as d,U as e,H as f,z as g,G as h,W as i,N as o,q as r,Q as s,R as t,F as v};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{h2 as W,aJ as z,ie as V}from"./volter-sdk-CjkJnQ6d.js";import{g as U}from"./blender-runtime-host-DKW0D0Bb.js";import{g as A,V as m,Q as S,u as q,E as H,M as X}from"./three.module-CtVjCPcj.js";const G=["location","rotation_quaternion","rotation_euler","rotation_axis_angle","scale"],C={location:[0,0,0],rotation_quaternion:[1,0,0,0],rotation_euler:[0,0,0],rotation_axis_angle:[0,0,0,0],scale:[1,1,1]};function Y(e){const t=atob(e),n=new Uint8Array(t.length);for(let s=0;s<t.length;s++)n[s]=t.charCodeAt(s);return new Float32Array(n.buffer,n.byteOffset,n.byteLength>>2)}function v(e){if(!e.action||e.clipStart===void 0||e.clipEnd===void 0||!e.tracks.length)return null;const t=new Map,n=new Set;for(const s of e.tracks){const r=`${s.bone}\0${s.property}`,o=C[s.property].length;let u=t.get(r);if(u||t.set(r,u={bone:s.bone,channel:s.property,mask:0,stride:o,curves:Array.from({length:o},()=>null)}),!(s.index<0||s.index>=o)){u.mask|=1<<s.index,u.curves[s.index]=R(s);for(const c of s.unsupported??[])n.add(`${e.action}'s ${c}`)}}for(const s of e.unsupported??[])n.add(`${e.action}'s ${s}`);return{action:e.action,start:e.clipStart,end:e.clipEnd,keysStart:e.keysStart===null?-1/0:e.keysStart??e.clipStart,keysEnd:e.keysEnd===null?1/0:e.keysEnd??e.clipEnd,cyclic:e.cyclic??!1,channels:[...t.values()],unsupported:[...n]}}function R(e){return{extrapolation:e.extrapolation,interpolation:e.interpolation,keys:Y(e.keysBase64),cycles:e.cycles??null}}function Q(e,t,n,s){const r=[e[0]-t[0],e[1]-t[1]],o=[s[0]-n[0],s[1]-n[1]],u=s[0]-e[0],c=Math.abs(r[0]),a=Math.abs(o[0]);if(c+a!==0&&c+a>u){const i=u/(c+a);t[0]=e[0]-i*r[0],t[1]=e[1]-i*r[1],n[0]=s[0]-i*o[0],n[1]=s[1]-i*o[1]}}function J(e,t,n,s,r){const o=(i,l,f,d,h)=>{const g=1-h;return g*g*g*i+3*g*g*h*l+3*g*h*h*f+h*h*h*d};let u=0,c=1,a=(e-t[0])/(r[0]-t[0]||1);for(let i=0;i<60;i++){const l=o(t[0],n[0],s[0],r[0],a)-e;if(Math.abs(l)<1e-9)break;l<0?u=a:c=a;const f=1-a,d=3*f*f*(n[0]-t[0])+6*f*a*(s[0]-n[0])+3*a*a*(r[0]-s[0]),h=d!==0?a-l/d:(u+c)/2;a=h>u&&h<c?h:(u+c)/2}return o(t[1],n[1],s[1],r[1],a)}function M(e,t){const n=e.keys,s=n.length/6;if(s===0)return 0;const r=p=>n[p*6],o=p=>n[p*6+1];if(s===1)return o(0);const u=s-1;if(t<=r(0)){if(e.extrapolation!=="LINEAR"||t===r(0)||e.interpolation[0]===0)return o(0);const p=r(0)-t;if(e.interpolation[0]===2){const b=r(0)-n[2];return b!==0?o(0)-(o(0)-n[3])/b*p:o(0)}const y=r(1)-r(0);return y!==0?o(0)-(o(1)-o(0))/y*p:o(0)}if(t>=r(u)){if(e.extrapolation!=="LINEAR"||t===r(u)||e.interpolation[u]===0)return o(u);const p=t-r(u);if(e.interpolation[u]===2){const b=n[u*6+4]-r(u);return b!==0?o(u)+(n[u*6+5]-o(u))/b*p:o(u)}const y=r(u)-r(u-1);return y!==0?o(u)+(o(u)-o(u-1))/y*p:o(u)}let c=0,a=u;for(;a-c>1;){const p=c+a>>1;r(p)<=t?c=p:a=p}if(t===r(c))return o(c);const i=e.interpolation[c]??1;if(i===0)return o(c);if(i===1)return o(c)+(o(a)-o(c))*(t-r(c))/(r(a)-r(c));const l=[r(c),o(c)],f=[n[c*6+4],n[c*6+5]],d=[n[a*6+2],n[a*6+3]],h=[r(a),o(a)],g=11920929e-14;return Math.abs(l[1]-h[1])<g&&Math.abs(f[1]-d[1])<g&&Math.abs(d[1]-h[1])<g?l[1]:(Q(l,f,d,h),J(t,l,f,d,h))}function L(e,t){const n=e.cycles,s=e.keys,r=s.length/6;if(!n||r<2)return M(e,t);const o=s[0],u=s[1],c=s[(r-1)*6],a=s[(r-1)*6+1];let i=0,l=0,f=0,d=0;if(t<o&&n[0]?(i=-1,l=n[0],f=n[1],d=o):t>c&&n[2]&&(i=1,l=n[2],f=n[3],d=c),i===0||l===0)return M(e,t);const h=c-o,g=a-u;if(h===0)return M(e,t);const p=i*(t-d)/h;if(f&&p>=f){const O=l===3&&f%2===1;return M(e,i===1?O?o:c:O?c:o)+(l===2?g*f*i:0)}const y=(t-d)%h,b=l===2?(i<0?Math.floor((t-d)/h):Math.ceil((t-d)/h))*g:0;let k;return y===0?(k=i===1?c:o,l===3&&Math.trunc(p)%2&&(k=i===1?o:c)):l===3&&Math.trunc(p+1)%2?k=i<0?o-y:c-y:k=(i<0?c:o)+y,k<o&&(k+=h),M(e,k)+b}function Z(e,t,n,s){const r=e?.useNla??!0;if(r&&e.tracks.some(c=>c.solo))return null;if(!r||!s)return{clip:t,frame:n,influence:1,blend:"REPLACE"};const o=e.extrapolation;let u=n;if(n<t.keysStart){if(o!=="HOLD")return null;u=t.keysStart}else if(n>t.keysEnd){if(o==="NOTHING")return null;u=t.keysEnd}return{clip:t,frame:u,influence:e.influence,blend:e.blendType}}function tt(e,t){const n=e.filter(o=>!o.mute).sort((o,u)=>o.start-u.start);for(const o of n)if(t>=o.start&&t<=o.end)return{strip:o,time:t};const s=n[0];if(!s)return null;if(t<s.start)return s.extrapolation==="HOLD"?{strip:s,time:s.start}:null;let r=null;for(const o of n)o.end<t&&(r=o);return r&&(r.extrapolation==="HOLD"||r.extrapolation==="HOLD_FORWARD")?{strip:r,time:r.end}:null}function et(e,t){const n=e.actionEnd-e.actionStart||1,s=Math.abs(e.scale)||1,r=Math.abs(e.repeat%1)<1e-6&&Math.abs(t-e.end)<1e-6,o=(t-e.start)%(n*s)/s;return e.reversed?r?e.actionStart:e.actionEnd-o:r?e.actionEnd:e.actionStart+o}const N=new WeakMap;function nt(e,t){if(e.animatedInfluence){const n=e.influenceCurve;if(!n)return e.influence;let s=N.get(n);return s||N.set(n,s=R(n)),Math.max(0,Math.min(1,L(s,t)))}return e.blendIn>0&&t>=e.start&&t<=e.start+e.blendIn?(t-e.start)/e.blendIn:e.blendOut>0&&t>=e.end-e.blendOut&&t<=e.end?(e.end-t)/e.blendOut:1}function st(e,t,n,s){const r=[],o=[];let u=!1,c=!1;if(!e||!e.useNla)return{layers:r,waiting:u,skipped:o,evaluated:c};const a=e.tracks.some(i=>i.solo);for(const i of e.tracks){if((a?!i.solo:i.mute)||s)continue;i.strips.length&&(c=!0);const l=tt(i.strips,t);if(!l)continue;const f=nt(l.strip,l.time);if(l.strip.type!=="CLIP"||!l.strip.action){o.push(`the ${l.strip.type.toLowerCase()} strip "${l.strip.name}" on track "${i.name}"`);continue}const d=n(l.strip.action);d===void 0&&(u=!0),d&&r.push({clip:d,frame:et(l.strip,l.time),influence:f,blend:l.strip.blendType})}return{layers:r,waiting:u,skipped:o,evaluated:c}}const ot=(e,t)=>[e[0]*t[0]-e[1]*t[1]-e[2]*t[2]-e[3]*t[3],e[0]*t[1]+e[1]*t[0]+e[2]*t[3]-e[3]*t[2],e[0]*t[2]+e[2]*t[0]+e[3]*t[1]-e[1]*t[3],e[0]*t[3]+e[3]*t[0]+e[1]*t[2]-e[2]*t[1]],_=e=>{const t=Math.hypot(e[0],e[1],e[2],e[3]);return t>0?e.map(n=>n/t):[1,0,0,0]},it=(e,t)=>{const n=t*Math.acos(Math.max(-1,Math.min(1,e[0]))),s=Math.hypot(e[1],e[2],e[3]),r=Math.sin(n);return s>0?[Math.cos(n),e[1]/s*r,e[2]/s*r,e[3]/s*r]:[Math.cos(n),0,0,0]};function rt(e,t,n){const s=Math.max(0,Math.min(1,n.influence));if(s===0)return;const r=n.frame;for(const o of n.clip.channels){const u=e.get(o.bone);if(!u)continue;const c=t.get(o.bone),a=u[o.channel];for(let l=0;l<o.stride;l++)o.mask&1<<l&&!(c[o.channel]&1<<l)&&(a[l]=C[o.channel][l]);c[o.channel]|=o.mask;const i=o.curves.map(l=>l?L(l,r):0);if(n.blend==="COMBINE"&&o.channel==="rotation_quaternion"){const l=ot(_(a),it(_(i),s));for(let f=0;f<o.stride;f++)o.mask&1<<f&&(a[f]=l[f]);continue}for(let l=0;l<o.stride;l++){if(!(o.mask&1<<l))continue;const f=a[l],d=i[l];switch(n.blend){case"ADD":a[l]=f+d*s;break;case"SUBTRACT":a[l]=f-d*s;break;case"MULTIPLY":a[l]=s*(f*d)+(1-s)*f;break;case"COMBINE":a[l]=o.channel==="scale"?f*Math.pow(d,s):f+(d-C[o.channel][l])*s;break;default:a[l]=f*(1-s)+d*s}}}}function at(e,t){const n=new S;if(e==="QUATERNION"){const i=_(t.rotation_quaternion);n.set(i[1],i[2],i[3],i[0])}else if(e==="AXIS_ANGLE"){const i=t.rotation_axis_angle;n.setFromAxisAngle(new m(i[1],i[2],i[3]).normalize(),i[0])}else{const i=t.rotation_euler;n.setFromEuler(new H(i[0],i[1],i[2],e.split("").reverse().join("")))}const[s,r,o]=t.location,[u,c,a]=t.scale;return new A().compose(new m(s,r,o),n,new m(u,c,a))}const lt=["TRACK_X","TRACK_Y","TRACK_Z","TRACK_NEGATIVE_X","TRACK_NEGATIVE_Y","TRACK_NEGATIVE_Z"],P=[[1,0,0],[0,1,0],[0,0,1],[-1,0,0],[0,-1,0],[0,0,-1]];function ct(e,t,n){const s=Math.max(0,lt.indexOf(n)),r=new X().setFromMatrix4(e),o=new m(...P[s]).applyMatrix3(r);if(o.lengthSq()===0)return e.clone();o.normalize();const u=new m().setFromMatrixPosition(e),c=t.clone().sub(u);c.lengthSq()===0?c.copy(o):c.normalize();const a=new m().crossVectors(o,c);let i=Math.acos(Math.max(-1,Math.min(1,o.dot(c))));const l=a.length();if(l<11920929e-14){if(Math.abs(i)<Math.PI-.01)return e.clone();i=Math.PI;const d=new m(...P[(s+1)%6]).applyMatrix3(r);if(a.crossVectors(o,d),a.lengthSq()===0)return e.clone()}else l<.1&&(i=i>Math.PI/2?Math.PI-Math.asin(l):Math.asin(l));return new A().makeRotationAxis(a.normalize(),i).multiply(e).setPosition(u)}function ut(e,t,n){if(n>=1)return t;const[s,r,o]=[new m,new S,new m],[u,c,a]=[new m,new S,new m];return e.decompose(s,r,o),t.decompose(u,c,a),new A().compose(s.lerp(u,n),r.slerp(c,n),o.lerp(a,n))}class ft{constructor(t){this.rig=t}#e=[];#r=new Map;#n=null;facts(t){if(t===this.#n)return;this.#n=t,this.#e=t.bones;const n=new Map(t.bones.map(s=>[s.name,B(s.rest??s.matrix)]));this.#r=new Map(t.bones.map(s=>{const r=n.get(s.name),o=s.parent===null?void 0:n.get(s.parent);return[s.name,o?o.clone().invert().multiply(r):r.clone()]}))}get armature(){return this.#n}unsupported(){const t=[];for(const n of this.#e){for(const s of n.constraints??[])s.enabled&&s.type!=="DAMPED_TRACK"&&t.push(`the ${ht(s.type)} constraint "${s.name}" on bone "${n.name}"`);n.inherit?.length&&t.push(`bone "${n.name}"'s parenting (${n.inherit.join(", ")})`)}for(const n of this.#n?.animation?.drivers??[])t.push(`the drivers on bone "${n}"`);this.#n?.animation?.tweak&&t.push("the NLA in tweak mode (leave it with Tab in the NLA editor)");for(const n of this.#n?.animation?.tracks??[])for(const s of n.strips)!s.mute&&s.animatedTime&&t.push(`the animated strip time of "${s.name}"`);return t}apply(t,n,s=!0){const r=new Map,o=new Map;for(const i of this.#e){const l=i.channels;r.set(i.name,Object.fromEntries(G.map(f=>[f,[...l?.[f]??C[f]]]))),o.set(i.name,{location:0,rotation_quaternion:0,rotation_euler:0,rotation_axis_angle:0,scale:0})}for(const i of t)rt(r,o,i);this.rig.object.updateWorldMatrix(!0,!1);const u=this.rig.object.matrixWorld,c=u.clone().invert(),a=new Map;for(const i of this.#e){const l=i.parent===null?null:a.get(i.parent)??null,f=at(i.channels?.mode??"QUATERNION",r.get(i.name));let d=(l?l.clone():new A).multiply(this.#r.get(i.name)).multiply(f);for(const h of i.constraints??[]){if(!h.enabled||h.type!=="DAMPED_TRACK")continue;const g=n.override?.(i.name,h.name),p=g?.influence??h.influence;if(p<=0)continue;const y=this.#a(h,g,a,n);if(!y)continue;const b=u.clone().multiply(d),k=ct(b,y,h.trackAxis??"TRACK_Y");d=c.clone().multiply(ut(b,k,p))}a.set(i.name,d)}if(!s)return a;for(const i of this.#e){const l=a.get(i.name),f=i.parent===null?void 0:a.get(i.parent),d=f?f.clone().invert().multiply(l):l,h=this.rig.bones.get(i.name);h&&d.decompose(h.position,h.quaternion,h.scale)}return this.rig.object.updateMatrixWorld(!0),a}#a(t,n,s,r){if(n?.target)return n.target.updateWorldMatrix(!0,!1),new m().setFromMatrixPosition(n.target.matrixWorld);if(n?.target===null||!t.target)return null;const o=r.object(t.target);if(!o)return null;if(o.updateWorldMatrix(!0,!1),!t.subtarget)return new m().setFromMatrixPosition(o.matrixWorld);const u=t.target===this.rig.armature,c=u?s.get(t.subtarget):void 0,a=this.#e.find(l=>l.name===t.subtarget);if(u&&c&&a)return new m(0,a.length*(t.headTail??0),0).applyMatrix4(c).applyMatrix4(this.rig.object.matrixWorld);const i=o.getObjectByName(t.subtarget);return i?new m().setFromMatrixPosition(i.matrixWorld):null}}const B=e=>new A().set(...e.flat()),ht=e=>e.toLowerCase().split("_").map(t=>t==="ik"?"IK":t[0].toUpperCase()+t.slice(1)).join(" ");function dt(e,t){let n=null;const[s,r,o,u,c,a]=[new m,new S,new m,new m,new S,new m];for(const i of t.bones){const l=e.get(i.name);if(!l)continue;l.decompose(s,r,o),B(i.matrix).decompose(u,c,a);const f=q.radToDeg(r.angleTo(c)),d=s.distanceTo(u)/Math.max(i.length,.1),h=Math.max(f/.1,d/.001);h>1&&(!n||h>n.score)&&(n={bone:i.name,degrees:f,offset:d,score:h})}return n&&{bone:n.bone,degrees:n.degrees,offset:n.offset}}function pt(e,t,n){const s=st(e.animation,t,n),r=e.action??null;if(r){const o=n(r);o===void 0&&(s.waiting=!0);const u=o?Z(e.animation,o,t,s.evaluated):null;u&&s.layers.push(u)}return s}function mt(e){const t=[];return e.some(n=>n.includes(" constraint ")||n.includes("drivers"))&&t.push("Bake a constraint or driver into the action (Pose ▸ Animation ▸ Bake Action, Visual Keying), or aim with a Damped Track."),e.some(n=>n.includes("curves on "))&&t.push("Key the motion on a bone (the root bone) instead of the armature object, or move the object from the game."),e.some(n=>n.includes("interpolation")||n.includes(" modifier"))&&t.push("Use Bezier, Linear or Constant keys and the Cycles modifier only, or bake the curves (Key ▸ Bake Keyframes)."),t.length?` ${t.join(" ")}`:""}function gt(e){return!!e.action||!!e.animation?.tracks.some(t=>t.strips.length)}class yt{#e=null;#r=null;#n=null;#a=null;#t=null;#o=new Map;#i=new Map;#l=null;#s=null;#c=null;#d=new Set;#m=0;#g=[];#y=new Set;#u=0;get version(){return this.#m}get engineCalls(){return this.#u}subscribe(t){return this.#d.add(t),()=>this.#d.delete(t)}#f(){this.#m++;for(const t of[...this.#d])t()}state(){const t=this.#t;return{frame:this.frame(),start:t?.frameStart??1,end:t?.frameEnd??250,fps:t?.fps??24,action:t?.action??null,object:t?.object??null,armature:t?.armature??null,bones:this.#n?this.#e?.skeletons.rig(this.#n)?.bones.size??0:0,keyframes:t?.keyframes??[],summary:t?.summary??[],clipStart:t?.clipStart??null,clipEnd:t?.clipEnd??null,tracks:t?.tracks.length??0,bound:[...this.#o.keys()],warnings:this.#g,engineCalls:this.#u,blenderFrame:t?.frameCurrent??null}}playhead(){return this.#t?this.frame():null}frame(){return this.#l??this.#t?.frameCurrent??1}get playable(){return this.#t!==null&&this.#s!==null}async sync(t,n){this.#e=t,this.#r=n;const s=t.animationFacts(),r=Object.keys(s.armatures),o=s.active,u=o&&s.armatures[o]?o:(o?s.skinArmature(o):null)??(r.filter(i=>s.armatures[i].action).length===1?r.find(i=>s.armatures[i].action):null);for(const[i,l]of[...this.#o])(!s.armatures[i]||t.skeletons.rig(i)!==l.rig)&&this.#o.delete(i);for(const[i,l]of Object.entries(s.armatures)){const f=t.skeletons.rig(i);if(!f||!gt(l)){this.#o.delete(i);continue}let d=this.#o.get(i);d||this.#o.set(i,d=new ft(f)),d.facts(l)}for(const[i,l]of[...this.#i]){const f=i.slice(i.indexOf("\0")+1);(s.actions[f]??null)!==l.revision&&this.#i.delete(i)}const c=u?s.armatures[u]?.action??null:null,a=JSON.stringify([u,c,c?s.actions[c]??null:null,s.clock,s.frame]);if(a!==this.#a){this.#a=a,this.#n=u;let i=null;u&&(this.#u++,i=await n.clip(u),i?.action&&i.armature&&this.#i.set(`${i.armature}\0${i.action}`,{revision:s.actions[i.action]??null,clip:v(i)}));const l=this.#t,f=i?.frameStart!==l?.frameStart||i?.frameEnd!==l?.frameEnd||i?.fps!==l?.fps;this.#t=i??null,(!i||i.scene!==l?.scene)&&(this.#l=null);const d=this.#s?.snapshot().activeSubject;f&&d&&this.#s?.setActiveSubject(d);const h=this.#s?.snapshot().playbackState==="playing";i&&!h&&(this.#l=null,this.#s&&i.fps>0&&this.#s.seek(i.frameCurrent/i.fps))}this.#p(),this.#f()}#b(t,n){const s=`${t}\0${n}`,r=this.#i.get(s);if(r)return r.clip;const o=this.#r,u=this.#e?.animationFacts().actions[n]??null;if(!o)return null;const c={revision:u,clip:void 0};this.#i.set(s,c),this.#u++,o.bake(t,n).then(a=>{c.clip=a?v(a):null,this.#i.get(s)===c&&(this.#p(),this.#f())},a=>{c.clip=null,this.#h(`bake:${s}`,`${t} / ${n} could not be read: ${a instanceof Error?a.message:String(a)}`)})}#p(){const t=this.#e;if(!t)return;const n=t.animationFacts(),s=this.frame(),r=s===n.frame,o=this.#s?.snapshot().playbackState==="playing",u=this.#t?.reason?[this.#t.reason]:[],c={object:a=>t.objectForBlenderName(a)};for(const[a,i]of this.#o){const l=n.armatures[a];if(!l)continue;const f=[...i.unsupported(),...this.#k(a).flatMap(h=>h.unsupported)];if(f.length){const h=`${a} plays ${f.join(", ")} only in Blender, not in the Timeline or a game.${mt(f)}`;u.push(h),this.#h(`unsupported:${a}:${f.join("|")}`,h)}const d=pt(l,s,h=>this.#b(a,h));for(const h of d.skipped)this.#h(`skipped:${a}:${h}`,`${a}: ${h} plays only in Blender, not in the Timeline or a game.`);d.waiting||(r&&!o?(t.skeletons.restorePose(a),i.rig.object.updateMatrixWorld(!0),this.#M(a,i,l,d.layers,c,f)):i.apply(d.layers,c))}this.#g=u}#k(t){const n=[];for(const[s,r]of this.#i)s.startsWith(`${t}\0`)&&r.clip&&n.push(r.clip);return n}#M(t,n,s,r,o,u){const c=dt(n.apply(r,o,!1),s);if(!c)return;const a=this.#t?.frameCurrent??this.frame(),i=u.length?`What Blender plays here and the evaluator does not: ${u.join(", ")}.`:"Nothing the evaluator knows of explains it; this is a defect in the presenter, report it with the file.";this.#h(`divergence:${t}:${a}:${c.bone}:${Math.round(c.degrees)}`,`${t} at frame ${a}: bone "${c.bone}" is ${c.degrees.toFixed(1)}° and ${(c.offset*100).toFixed(1)}% of its length off Blender's own pose, so the Timeline and a game show it differently from Blender. ${i}`)}#h(t,n){this.#y.has(t)||(this.#y.add(t),W().console.warn(n,"blender-animation"))}#w(t){const n=this.#t;n&&(this.#l=Math.min(n.frameEnd,Math.max(n.frameStart,t)),this.#p())}get scene(){return this.#t?.scene??null}async writeBookmark(){const t=Math.round(this.frame()),n=this.#t;if(!n)return t;const s=n.scene;return!s||n.frameCurrent===t||(this.#u++,await U(`bpy.data.scenes[${JSON.stringify(s)}]`,"frame_current",t,void 0,!1),this.#t={...n,frameCurrent:t},this.#f()),t}get transport(){return this.#s}attachTo(t){this.#c?.(),this.#s=t;const n=t.attach({id:this.#t?.action??"blender-action",label:this.#t?.action??"Action",range:()=>{const c=this.#t,a=c?.fps||24;return{start:(c?.frameStart??1)/a,end:(c?.frameEnd??250)/a,fps:a}},seek:c=>this.seekSeconds(c)}),s=t.onSettled(()=>{this.writeBookmark()});let r=!1;const o=()=>{r||(r=!0,s(),n(),this.#c===o&&(this.#s===t&&(this.#s=null),this.#c=null))};this.#c=o;const u=this.#t;return u&&u.fps>0&&t.seek(u.frameCurrent/u.fps),o}seekSeconds(t){const n=this.#t?.fps||24;this.#w(Math.round(t*n)),this.#f()}keyframes(){return(this.#t?.keyframes??[]).map(t=>t.frame)}dispose(){this.#c?.(),this.#t=null,this.#l=null;for(const t of this.#o.keys())this.#e?.skeletons.restorePose(t);this.#o.clear(),this.#i.clear(),this.#n=null,this.#a=null}}const D=new yt;function St(e){return D.subscribe(e)}function At(){return D.version}const F="volter.blender.play-mode:",$=new Set,j=new Map,x=new Map;let w=null,I=0;function T(){I+=1;for(const e of[...$])e()}function bt(e){try{const t=globalThis.sessionStorage?.getItem(F+e);return t==="game"||t==="movie"?t:null}catch{return null}}function K(e){let t=j.get(e);return t===void 0&&(t=bt(e),j.set(e,t)),t}function Et(e,t){if(K(e)!==t){j.set(e,t);try{globalThis.sessionStorage?.setItem(F+e,t)}catch{}T()}}function $t(e,t){return(w!==e||x.get(e)!==t)&&(w=e,t===void 0?x.delete(e):x.set(e,t),T()),()=>{w===e&&(w=null,T())}}function Ct(){return w}function Tt(e){return x.get(e)}function _t(e){const t=V("model");if(t===null)return"movie";const n=K(e);if(n!==null)return n;const s=x.get(e);return s!==void 0&&t.hasScript?.(s)===!0?"game":"movie"}function jt(){return I}let E=null;function Ot(e){return $.add(e),E??=z(T),()=>{$.delete(e),$.size===0&&E&&(E(),E=null)}}export{ft as A,Ct as a,D as b,Et as c,Tt as d,St as e,At as f,v as g,$t as h,_t as m,st as n,jt as p,mt as r,Ot as s};
|