@volter/game-editor 0.5.65
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 +11228 -0
- package/LICENSE +686 -0
- package/LICENSE-BLENDER +1409 -0
- package/LICENSE-MCP +21 -0
- package/NOTICE +21 -0
- package/catalog/entries/audio.json +14 -0
- package/catalog/entries/bake.json +36 -0
- package/catalog/entries/blender.json +17 -0
- package/catalog/entries/react-root.json +24 -0
- package/catalog/entries/reflections.json +29 -0
- package/catalog/entries/static-batch.json +25 -0
- package/catalog/project-source/LICENSE +37 -0
- package/catalog/project-source/src/contributions/bake.kind.ts +40 -0
- package/catalog/project-source/src/contributions/builder-document.tsx +65 -0
- package/catalog/project-source/src/contributions/builder-state.ts +27 -0
- package/catalog/project-source/src/contributions/builder-ui.tsx +61 -0
- package/catalog/project-source/src/contributions/module-source.ts +502 -0
- package/catalog/project-source/src/contributions/pages.finder.ts +61 -0
- package/catalog/project-source/src/lib/audio/sfx.ts +255 -0
- package/catalog/project-source/src/lib/bake/asset-seed.ts +128 -0
- package/catalog/project-source/src/lib/bake/bake-schema.ts +65 -0
- package/catalog/project-source/src/lib/bake/clip-layering.ts +203 -0
- package/catalog/project-source/src/lib/bake/gltf-bake.ts +657 -0
- package/catalog/project-source/src/lib/bake/mesh-slice.ts +157 -0
- package/catalog/project-source/src/lib/bake/node-image.ts +463 -0
- package/catalog/project-source/src/lib/bake/object3d-bake.ts +121 -0
- package/catalog/project-source/src/lib/bake/object3d-lifecycle.ts +15 -0
- package/catalog/project-source/src/lib/bake/object3d-source.ts +8 -0
- package/catalog/project-source/src/lib/bake/params.ts +75 -0
- package/catalog/project-source/src/lib/bake/rest-relative-animation.ts +217 -0
- package/catalog/project-source/src/lib/bake/use-model.ts +95 -0
- package/catalog/project-source/src/lib/react-root/index.ts +20 -0
- package/catalog/project-source/src/lib/react-root/react-root-adapter.tsx +57 -0
- package/catalog/project-source/src/lib/reflections/ReflectionProbe.tsx +201 -0
- package/catalog/project-source/src/lib/reflections/index.ts +19 -0
- package/catalog/project-source/src/lib/reflections/probe-controller.ts +75 -0
- package/catalog/project-source/src/lib/reflections/reflection-probe-registry.ts +402 -0
- package/catalog/project-source/src/lib/reflections/volume-reflection-material.ts +416 -0
- package/catalog/project-source/src/lib/static-batch/Frozen.tsx +91 -0
- package/catalog/project-source/src/lib/static-batch/freeze.ts +579 -0
- package/catalog/project-source/src/lib/static-batch/index.ts +44 -0
- package/catalog/project-source/src/lib/static-batch/mutation-watch.ts +149 -0
- package/catalog/project-source/src/lib/static-batch/shadow-cache.ts +171 -0
- package/catalog/project-source/src/tools/bake-module.tool.ts +139 -0
- package/catalog/project-source/src/tools/bake-preview.tool.ts +475 -0
- package/dist/.vite/manifest.json +8304 -0
- package/dist/assets/AssetBudgetPanel-J9--TZPU.js +23 -0
- package/dist/assets/AudioViewer-CR7333fe.js +1 -0
- package/dist/assets/BVHLoader-6bQIXhMX.js +1 -0
- package/dist/assets/BufferGeometryUtils-Nz37EVXf.js +1 -0
- package/dist/assets/CCDIKSolver-CD7vLpsK.js +1 -0
- package/dist/assets/CSS3DRenderer-CL7ABLVK.js +1 -0
- package/dist/assets/CanvasSceneViewport-Bpi6gVTC.js +1 -0
- package/dist/assets/ColladaLoader-aVOPIsCh.js +3 -0
- package/dist/assets/ColorInput-DQBNrW-K.js +1 -0
- package/dist/assets/ConvexGeometry-CAzXlPVG.js +1 -0
- package/dist/assets/ConvexHull-BINCESFp.js +1 -0
- package/dist/assets/CopyShader-BzTUYzf6.js +24 -0
- package/dist/assets/DecalGeometry-160KRdfg.js +1 -0
- package/dist/assets/EXRLoader-Cdans_oJ.js +1 -0
- package/dist/assets/EffectComposer-DQxfsXBZ.js +1 -0
- package/dist/assets/EntityModelDocument-Ccvw66N9.js +1 -0
- package/dist/assets/EnvironmentAssetDocument-Dg-Qq6O6.js +1 -0
- package/dist/assets/FBXLoader-B4MoUtAn.js +1 -0
- package/dist/assets/Fbo-Dz-Soul3.js +1 -0
- package/dist/assets/FontLoader-CvGoVI5a.js +2 -0
- package/dist/assets/GLTFExporter-HgrCle4L.js +1 -0
- package/dist/assets/GameplaySessionTimeline-B52W3FVZ.js +1 -0
- package/dist/assets/Gltf-UHVWKz65.js +2 -0
- package/dist/assets/HDRLoader-THU88oVD.js +5 -0
- package/dist/assets/ImageViewer-Tn7s_MnW.js +1 -0
- package/dist/assets/InspectorCanvasPreview-CEr_Kxna.js +1 -0
- package/dist/assets/InspectorObjectPreview-CVejvLRg.js +1 -0
- package/dist/assets/JsonAssetDocument-C7VGcLhu.js +3 -0
- package/dist/assets/LineSegments2-CsOpKSiM.js +370 -0
- package/dist/assets/MTLLoader-_Xzd4_0p.js +2 -0
- package/dist/assets/MarchingCubes-Bsp4wrzd.js +1 -0
- package/dist/assets/MeshBVH-BiDHDcu-.js +1 -0
- package/dist/assets/ModelAssetDocument-F5GACirk.js +1 -0
- package/dist/assets/NonThreeAuthoringBootstrap-C3woOMxX.js +1 -0
- package/dist/assets/OBJLoader-BhIC6Hwo.js +5 -0
- package/dist/assets/Object3DDocumentViewport-DB7T0NTl.js +2 -0
- package/dist/assets/Object3DPreview-DL8oi7Xs.js +2 -0
- package/dist/assets/OnlineAssetDetail-C6z9RvYK.js +2 -0
- package/dist/assets/OrbitControls-CM3bPray.js +1 -0
- package/dist/assets/OrbitControls-DLpayAaK.js +1 -0
- package/dist/assets/OrthographicCamera-bQozawrh.js +1 -0
- package/dist/assets/PLYLoader-DYQqs5Ik.js +2 -0
- package/dist/assets/PerspectiveCamera-CQ2lh01o.js +1 -0
- package/dist/assets/PlayBar-BR-Vg3Jb.js +2 -0
- package/dist/assets/RGBELoader-BgBcQv8j.js +1 -0
- package/dist/assets/RectAreaLightUniformsLib-CMMoWfll.js +1 -0
- package/dist/assets/RenderPass-DPrn-Uky.js +1 -0
- package/dist/assets/ResolutionPicker-C67vs1F3.js +1 -0
- package/dist/assets/RootSelectionOverlay-BZPlxmXU.js +1 -0
- package/dist/assets/RoundedBox-BDGBg6QZ.js +1 -0
- package/dist/assets/RoundedBoxGeometry-CyUuYPfW.js +1 -0
- package/dist/assets/STLLoader-Dyv3lsxY.js +1 -0
- package/dist/assets/SelectionBox-D_75KrNW.js +1 -0
- package/dist/assets/ShaderPass-QYRpPuFJ.js +1 -0
- package/dist/assets/ShadowEditor-DkImwu1Y.js +1 -0
- package/dist/assets/SimplifyModifier-C8ayvRzd.js +1 -0
- package/dist/assets/SkeletonUtils-Cps8GOC6.js +1 -0
- package/dist/assets/Sky-CQKCgYDs.js +154 -0
- package/dist/assets/SourceAssetViewer-2SWQoUut.js +12 -0
- package/dist/assets/StageHost-BN-IoTef.js +2 -0
- package/dist/assets/StoryPreviewMount-DjyxRCXu.js +1 -0
- package/dist/assets/TDSLoader-D_T8XJ81.js +1 -0
- package/dist/assets/TextGeometry-DOWAEUV0.js +1 -0
- package/dist/assets/ThreeBoardDocument-CVncZyIq.js +2 -0
- package/dist/assets/ThreeIsolationSceneContent-C8C8whSF.js +1 -0
- package/dist/assets/ToolObject3DPreview-BRoDWe4Q.js +1 -0
- package/dist/assets/TrackballControls-DfznuQTh.js +1 -0
- package/dist/assets/TransientHint-BB1fwrvK.js +1 -0
- package/dist/assets/UnrealBloomPass-CR-cS_K5.js +83 -0
- package/dist/assets/VideoViewer-C6kocgIU.js +1 -0
- package/dist/assets/_commonjsHelpers-D6-XlEtG.js +1 -0
- package/dist/assets/active-ingest-CT6jSGhr.js +3 -0
- package/dist/assets/adapter-surface-Y37Nzcyw.js +1 -0
- package/dist/assets/after-paint-CB4bz1-e.js +1 -0
- package/dist/assets/agx-base-srgb-BjWZJgrZ.lut +0 -0
- package/dist/assets/agx-look-medium-high-contrast-D5F_ob1L.lut +0 -0
- package/dist/assets/agx-look-punchy-dxsnycNs.lut +0 -0
- package/dist/assets/animation-clock-CnjZqfJp.js +1 -0
- package/dist/assets/asset-budget-asset.menu-Di3KiQCd.js +1 -0
- package/dist/assets/asset-budget.action-DCzzcuTh.js +1 -0
- package/dist/assets/asset-budget.document-BWU8wnVW.js +1 -0
- package/dist/assets/asset-budget.menu-BGZpT_31.js +1 -0
- package/dist/assets/asset-editor-persistence-BBaONOJt.js +1 -0
- package/dist/assets/asset-loaders-BOy5Ss8k.js +2 -0
- package/dist/assets/asset-parse-error-BHMwBRU3.js +3 -0
- package/dist/assets/assets-BuSoGjBX.js +1 -0
- package/dist/assets/audio-meter-CyiToeUW.js +1 -0
- package/dist/assets/audio-unlock.service-CfUgUQVy.js +1 -0
- package/dist/assets/audio.utility-C6K6jem8.js +1 -0
- package/dist/assets/authoring-CgcOFhGS.js +1 -0
- package/dist/assets/autoplay.service-BZBGNSvt.js +1 -0
- package/dist/assets/axe-LkjAB6Lv.js +30 -0
- package/dist/assets/babylon-authoring-adapter-CL02gWDn.js +1 -0
- package/dist/assets/binding-Bmxqznjk.js +1 -0
- package/dist/assets/binding-identity-DcTpbvyg.js +1 -0
- package/dist/assets/binding-resolver-Dsh-6Vor.js +2 -0
- package/dist/assets/blender-emscripten-engine-9ZIRYNhe.js +2 -0
- package/dist/assets/blender-node-editor.document-iIDkB9sI.js +1 -0
- package/dist/assets/blender-properties-tab-C5CyPydi.js +3 -0
- package/dist/assets/blender-runtime-host-BpBwGv7r.js +4 -0
- package/dist/assets/blender-runtime-skin-DyQ9B6CR.js +7140 -0
- package/dist/assets/blender-runtime.document-lIYhhPtv.js +8 -0
- package/dist/assets/blender-timeline.document-77fx96N7.js +1 -0
- package/dist/assets/blender-uv-editor.document-fsT7B4gV.js +1 -0
- package/dist/assets/blender-version.status-o6dBm3n6.js +1 -0
- package/dist/assets/blender-wali-engine-wTOcrOMC.js +2 -0
- package/dist/assets/blender.command-BtJeWk-A.js +1 -0
- package/dist/assets/blender.keymap-GAQgeklK.js +1 -0
- package/dist/assets/blender.status-ujwGU6dU.js +1 -0
- package/dist/assets/blender.style-Dcem5f_T.js +1 -0
- package/dist/assets/board-guides-DziKSTss.js +1 -0
- package/dist/assets/body-marks-h_xDxiDE.js +1 -0
- package/dist/assets/bridge.command-o5gDNEwa.js +3 -0
- package/dist/assets/browserAll-DeWblVez.js +1 -0
- package/dist/assets/build-profiles.document-kW8iw8Xj.js +2 -0
- package/dist/assets/build-progress.status-BNRLytg2.js +1 -0
- package/dist/assets/build-session-C_sg3CEn.js +9 -0
- package/dist/assets/build.action-lYjTLb7K.js +1 -0
- package/dist/assets/build.command-DIGgUPU_.js +1 -0
- package/dist/assets/build.header-CKajx5U3.js +1 -0
- package/dist/assets/build.menu-BdU0QXny.js +1 -0
- package/dist/assets/build.service-CbBAyeu3.js +1 -0
- package/dist/assets/bus-mixer-CGfWDP3C.js +1 -0
- package/dist/assets/camera-KEsKvOL7.js +1 -0
- package/dist/assets/camera-runtime.inspector-B7unX4g1.js +1 -0
- package/dist/assets/canvas-entry-runtime-SfBxaR9M.js +2 -0
- package/dist/assets/capability-coverage-Czas4C18.js +7 -0
- package/dist/assets/chrome-trace-YZHMz60-.js +1 -0
- package/dist/assets/client-DNXj_opT.js +25 -0
- package/dist/assets/clip-planes-CnAI6DZn.js +1 -0
- package/dist/assets/collaboration-presence-DLoZ7EA3.js +1 -0
- package/dist/assets/collider-Bw0mXlsW.js +1 -0
- package/dist/assets/collider-dimensions-9xoFADXN.js +1 -0
- package/dist/assets/collision-system-DpNUJRJ3.js +1 -0
- package/dist/assets/command-results-CUQD49AB.js +1 -0
- package/dist/assets/component-board-registry-DrIa2csL.js +1 -0
- package/dist/assets/component-board.service-DCwcUssB.js +2 -0
- package/dist/assets/component-board.service-DidCyM4O.js +2 -0
- package/dist/assets/component-verbs.command-7xzfjGMZ.js +1 -0
- package/dist/assets/component-verbs.service-Bv9jId3q.js +1 -0
- package/dist/assets/config-CEZk921y.js +6 -0
- package/dist/assets/configurations-DTBMdaTL.js +1 -0
- package/dist/assets/connection.status-BifnQdOs.js +1 -0
- package/dist/assets/console-bridge-CHcb-xk5.js +1 -0
- package/dist/assets/constraint-De8f1Uiq.js +1 -0
- package/dist/assets/constraints.inspector-B9U9Yj-u.js +1 -0
- package/dist/assets/countdown-timer-CUm74dom.js +1 -0
- package/dist/assets/coverage.service-VTX5Mcsx.js +3 -0
- package/dist/assets/crash-null-boundary-v3a0uEgw.js +1 -0
- package/dist/assets/create-runtime-CVCc1BDx.js +1 -0
- package/dist/assets/curve-7Q79VgU4.js +1 -0
- package/dist/assets/data-asset-4hjS642k.js +5 -0
- package/dist/assets/data-check-core-CQEjuFyt.js +1 -0
- package/dist/assets/data-ref-CQI28C0D.js +1 -0
- package/dist/assets/debug-bridge-CCohG-d-.js +1 -0
- package/dist/assets/debug-registry-Dgvitx8M.js +1 -0
- package/dist/assets/defaults-DKiBJCPN.js +1 -0
- package/dist/assets/deferred-commands-CEMmvL47.js +1 -0
- package/dist/assets/deferred-ingest-play-DCJi_Pgu.js +2 -0
- package/dist/assets/design-time-layers-wYgOTgni.js +1 -0
- package/dist/assets/design-time-mount-registry-DUpXCg1U.js +1 -0
- package/dist/assets/design-time-mount.service-BzY21e1F.js +2 -0
- package/dist/assets/design-time-react-mount-DM9WLrF2.js +1 -0
- package/dist/assets/dev-build-gDYrq68M.js +1 -0
- package/dist/assets/directional-shadow-fit-BVkOKAv2.js +1 -0
- package/dist/assets/document-preview-three-Kbg2GCLm.js +1 -0
- package/dist/assets/dom-authoring-adapter-CY8C7f4T.js +1 -0
- package/dist/assets/draco3d-BBUTcNkz.js +1 -0
- package/dist/assets/draco_decoder-DsQ12WqX.wasm +0 -0
- package/dist/assets/draco_encoder-2Tcju8Ns.wasm +0 -0
- package/dist/assets/edit-mode-audio.service-Bzetwd5B.js +1 -0
- package/dist/assets/edit-mode-authoring-B47TfLqu.js +1 -0
- package/dist/assets/edit-mode-networking.service-YCX6RRb_.js +1 -0
- package/dist/assets/editor-api-BoJIcyZG.js +1 -0
- package/dist/assets/editor-port-C_FeBdeV.js +1 -0
- package/dist/assets/editor-presentation-activity-C7SNSmTd.js +1 -0
- package/dist/assets/entry-adjudication-Cq8Yeb74.js +1 -0
- package/dist/assets/environment-capture-7himRh2L.js +1 -0
- package/dist/assets/esbuild-BHljloGq.wasm +0 -0
- package/dist/assets/events-156d8d12.esm-ErOhDXXB.js +36 -0
- package/dist/assets/extend-B-eOccUm.js +36 -0
- package/dist/assets/extends-CF3RwP-h.js +1 -0
- package/dist/assets/eyedropper-session-bjPXnfeX.js +1 -0
- package/dist/assets/fflate.module-DPuTF8aG.js +6 -0
- package/dist/assets/filmic-srgb-Ct35FIH6.lut +0 -0
- package/dist/assets/first-party-audio-system-DxnGJOER.js +1 -0
- package/dist/assets/first-party-navigation-system-CL5Bquub.js +1 -0
- package/dist/assets/fork-menu-BoVyw2Wu.js +1 -0
- package/dist/assets/frame-debugger-store-D1Mf_5up.js +1 -0
- package/dist/assets/frame-delta-D2nsw_Ht.js +1 -0
- package/dist/assets/frame-pacing-D5acoOzO.js +1 -0
- package/dist/assets/frame-selector-cache-cCeUbcjG.js +1 -0
- package/dist/assets/game-DHOZVb-7.js +1 -0
- package/dist/assets/game-contract-seams-a5YXejOu.js +1 -0
- package/dist/assets/game-css-scope-transform-Eng4wS8E.js +33 -0
- package/dist/assets/game-document.service-DbRfx2V0.js +1 -0
- package/dist/assets/game-eval.command-D-7Dxbj_.js +2 -0
- package/dist/assets/game-input-seams-CIQdetRw.js +1 -0
- package/dist/assets/game-loop-CZvXlY00.js +1 -0
- package/dist/assets/game-module-access-B2mFxv-i.js +1 -0
- package/dist/assets/game.layout-CBASrvQu.js +1 -0
- package/dist/assets/gameplay-export-BoKXm51x.js +1 -0
- package/dist/assets/gameplay-replay-e5umMlXv.js +1 -0
- package/dist/assets/gameplay-rng-trap-CTNhm-UW.js +3 -0
- package/dist/assets/gameplay.command-DxcVYX6F.js +1 -0
- package/dist/assets/generation-DhwCUHPf.css +1 -0
- package/dist/assets/generation-jobs-BQrXbGp_.js +1 -0
- package/dist/assets/generation.service-CDIgObuw.js +1 -0
- package/dist/assets/generations-DzUogZsM.js +1 -0
- package/dist/assets/generations.status-CgOUBCum.js +1 -0
- package/dist/assets/hierarchy-marks-BLPfSIym.js +1 -0
- package/dist/assets/host-pointer-DbGSCjE9.js +1 -0
- package/dist/assets/hosted-asset-materialization-CiIvWkGU.js +2 -0
- package/dist/assets/ibl-override-material-BlmCxFKq.js +6 -0
- package/dist/assets/index-96FBF1Oj.js +1 -0
- package/dist/assets/index-BAWkB0dv.js +1 -0
- package/dist/assets/index-BDnS2b6S.js +1 -0
- package/dist/assets/index-BHp07vN0.js +2 -0
- package/dist/assets/index-BMxv2MNV.js +1 -0
- package/dist/assets/index-BP6wv2A0.js +5 -0
- package/dist/assets/index-BcCBqgM_.js +952 -0
- package/dist/assets/index-Bge9JUr6.js +1 -0
- package/dist/assets/index-BjTCPEQ7.js +134 -0
- package/dist/assets/index-BncK9THk.js +1 -0
- package/dist/assets/index-CJbYy-CF.js +3 -0
- package/dist/assets/index-CVCb_ImQ.js +1 -0
- package/dist/assets/index-CZd9o7Lu.js +1 -0
- package/dist/assets/index-CanA16PU.js +2 -0
- package/dist/assets/index-CinJrH5C.js +9 -0
- package/dist/assets/index-CtzuWnCS.js +1 -0
- package/dist/assets/index-D2fNXpHa.css +1 -0
- package/dist/assets/index-DUpHH6JR.js +3120 -0
- package/dist/assets/index-DUqP1RMl.js +1 -0
- package/dist/assets/index-D_NuPfjr.js +9 -0
- package/dist/assets/index-Da9JhEvW.js +25 -0
- package/dist/assets/index-DgapqSPi.js +7 -0
- package/dist/assets/index-FUuS4qwW.js +562 -0
- package/dist/assets/index-GIL7oGEO.js +4894 -0
- package/dist/assets/index-IEjydI9d.js +1 -0
- package/dist/assets/index-OrYXPk3Z.js +487 -0
- package/dist/assets/index-V1R-e5Bd.js +1 -0
- package/dist/assets/index-bQE2NA0D.js +1 -0
- package/dist/assets/index-gHZae-lw.js +13 -0
- package/dist/assets/index-mjWQmGhM.js +1 -0
- package/dist/assets/index-nmcBqr7Y.js +1 -0
- package/dist/assets/inference-diagnostics-Dhmtfbq_.js +1 -0
- package/dist/assets/ingest-BbYMC2vQ.js +1 -0
- package/dist/assets/ingest-boot-viewport-D5rI_Kk_.js +1 -0
- package/dist/assets/ingest-siblings-Bop2kqVl.js +1 -0
- package/dist/assets/ingest-source-persistence-C_6Hiyra.js +1 -0
- package/dist/assets/ingest.service-BTDnQfM1.js +1 -0
- package/dist/assets/input-manager-DH_hGW6d.js +1 -0
- package/dist/assets/input-router-BNQvtIqw.js +1 -0
- package/dist/assets/inspect-BZfi3mmo.js +1 -0
- package/dist/assets/inspection-CObLhnrs.js +1 -0
- package/dist/assets/instance-fork-actions-D3sRzS3K.js +1 -0
- package/dist/assets/instances.command-D6UkZNO8.js +1 -0
- package/dist/assets/instruments-CKR02Y8I.js +1 -0
- package/dist/assets/json-history-resource-BbxllWfV.js +1 -0
- package/dist/assets/jsx-runtime-DPjLkJKQ.js +9 -0
- package/dist/assets/light-D-_wsKTq.js +1 -0
- package/dist/assets/light-camera-factory-CWbbe9gI.js +1 -0
- package/dist/assets/lil-gui.module.min-BF55BEwA.js +10 -0
- package/dist/assets/live-behaviors-Bxq49Maz.js +1 -0
- package/dist/assets/live-gesture-lock-DJbrjOqf.js +1 -0
- package/dist/assets/loader-CaF_I7Yt.js +1 -0
- package/dist/assets/logger-Dqis-7W1.js +1 -0
- package/dist/assets/loop-gate-report-N52EWFGD.js +1 -0
- package/dist/assets/matcap-texture-CVfalpWT.js +1 -0
- package/dist/assets/material-CpAdjDxn.js +1 -0
- package/dist/assets/material-factory-Bz6h__6g.js +1 -0
- package/dist/assets/mesh-B3WPtNKO.js +1 -0
- package/dist/assets/mesh-shadow-CZnXrw_l.js +1 -0
- package/dist/assets/mikktspace.module-DO88SLib.js +1 -0
- package/dist/assets/model-asset-sections-CFvvihfx.css +1 -0
- package/dist/assets/model-asset-sections.service-CHhFS3ZX.js +1 -0
- package/dist/assets/model.layout-BJUEQYUI.js +1 -0
- package/dist/assets/models.finder-G2jQgIRu.js +1 -0
- package/dist/assets/module-mode-DVBLT9d-.js +2 -0
- package/dist/assets/mount-canvas-ingest-root-DDuAWf_C.js +2 -0
- package/dist/assets/mount-dom-ingest-root-D_EiBgpn.js +2 -0
- package/dist/assets/mount-game-6t9cKNo4.js +1 -0
- package/dist/assets/mount-ingest-root-glv2SSWf.js +2 -0
- package/dist/assets/mount-manifest-CGVxhmAw.js +1 -0
- package/dist/assets/mount-readiness-Ds0HvvLH.js +4 -0
- package/dist/assets/mount-three-ingest-root-hrUt9VVU.js +1 -0
- package/dist/assets/mounted-authoring-Dmg5xmhP.js +1 -0
- package/dist/assets/mounted-story-viewport-source-DjP6RA9U.js +1 -0
- package/dist/assets/native-debug-module-CWicoSGD.js +1 -0
- package/dist/assets/native-entry-surface-BE8LJNdu.js +1 -0
- package/dist/assets/navigation-CIiCx-SM.js +1 -0
- package/dist/assets/navmesh-workflow-store-Cmnm57TB.js +1 -0
- package/dist/assets/navmesh.menu-CAKiH8PW.js +1 -0
- package/dist/assets/navmesh.service-jgDWlgj1.js +1 -0
- package/dist/assets/network.utility-CEu5nHf7.js +1 -0
- package/dist/assets/object-marks-DwvIEBOK.js +1 -0
- package/dist/assets/object3d-authoring-subject-CH5sI2oP.js +1 -0
- package/dist/assets/output-DK8waum9.js +195 -0
- package/dist/assets/particles-Y626p22p.js +1 -0
- package/dist/assets/particles-factory-DnLOHXT8.js +1 -0
- package/dist/assets/pasteboard-materialize-BqSS4QzV.js +20 -0
- package/dist/assets/pasteboard.action-DU3UHtJG.js +2 -0
- package/dist/assets/performance-profiler-D_Jey87L.js +1 -0
- package/dist/assets/physics-registry-B2Jkp8e6.js +1 -0
- package/dist/assets/physics-registry-CUB9cT9p.js +1 -0
- package/dist/assets/pixi-authoring-adapter-CjibysC3.js +1 -0
- package/dist/assets/pixi-live-write-target-DuWydlWb.js +1 -0
- package/dist/assets/pixi-primitive-DlWbUPN9.js +1 -0
- package/dist/assets/pixi-react-root-factory-DYsznYRQ.js +1 -0
- package/dist/assets/pixi-story-model-DNkfnWUV.js +1 -0
- package/dist/assets/pixi-transform-channels-VjdohT11.js +1 -0
- package/dist/assets/play-mode-BFU2PCkG.js +22 -0
- package/dist/assets/play.command-BpqqLqkq.js +2 -0
- package/dist/assets/playtest-BXIL1JEF.js +1 -0
- package/dist/assets/pose-guard-6Osb2cFu.js +1 -0
- package/dist/assets/presentation-BPP5pXeQ.js +1 -0
- package/dist/assets/product-DFhyARJj.js +1 -0
- package/dist/assets/profiler.action-CaXJDp3t.js +1 -0
- package/dist/assets/profiler.menu-BIMF6Bi4.js +1 -0
- package/dist/assets/profiler.utility-BExw9wBO.js +1 -0
- package/dist/assets/project-authoring-session-Bnt6icLr.js +2 -0
- package/dist/assets/project-provenance-BoP3nrle.js +1 -0
- package/dist/assets/prompt-labels-DSMdM2_B.js +1 -0
- package/dist/assets/properties-bone-constraints.inspector-ByT6p7S-.js +1 -0
- package/dist/assets/properties-bone.inspector-z4qJwKO5.js +1 -0
- package/dist/assets/properties-collection.inspector-D0_3ijWU.js +1 -0
- package/dist/assets/properties-constraints.inspector-CESzjuls.js +1 -0
- package/dist/assets/properties-data.inspector-hG8Wgyzb.js +1 -0
- package/dist/assets/properties-material.inspector-CzY0JCQ6.js +1 -0
- package/dist/assets/properties-modifiers.inspector-3dDhwf7g.js +1 -0
- package/dist/assets/properties-object.inspector-CiarfxkT.js +1 -0
- package/dist/assets/properties-output.inspector-DKJxmKSD.js +1 -0
- package/dist/assets/properties-particles.inspector-CCEdYWGm.js +1 -0
- package/dist/assets/properties-physics.inspector-B2c0KUyA.js +1 -0
- package/dist/assets/properties-render.inspector-Bcm0HLRW.js +1 -0
- package/dist/assets/properties-scene.inspector-PIM_eTb_.js +1 -0
- package/dist/assets/properties-texture.inspector-CgFlnyr8.js +1 -0
- package/dist/assets/properties-view-layer.inspector-DGjF_Aqo.js +1 -0
- package/dist/assets/properties-world.inspector-CrMvaRvB.js +1 -0
- package/dist/assets/r3f-design-session-D-4yyDO9.js +2 -0
- package/dist/assets/r3f-physics-binding-BBo8oma9.js +1 -0
- package/dist/assets/r3f-root-factory-z9llD1OU.js +1 -0
- package/dist/assets/r3f-source-authoring-adapter-w6Bc60K-.js +13 -0
- package/dist/assets/rapier-physics-adapter-CaZqWLu0.js +1 -0
- package/dist/assets/rapier-physics-bridge-CMoeVo3Y.js +1 -0
- package/dist/assets/react-18-By2b4xR9.js +1 -0
- package/dist/assets/react-inspector.service-B_neRnSK.js +1 -0
- package/dist/assets/react-root-CEz5NTck.js +1 -0
- package/dist/assets/react-story-board-BDDwiE2H.js +1 -0
- package/dist/assets/react-three-fiber.esm-CycrbDlA.js +1 -0
- package/dist/assets/react-three-rapier.esm-CEfKpvxT.js +1 -0
- package/dist/assets/react-world-authoring-adapter-DmrwM3py.js +1 -0
- package/dist/assets/realm-services-CobQsq_X.js +1 -0
- package/dist/assets/rebind-controller-Dtq19Vb3.js +1 -0
- package/dist/assets/recast-navigation.wasm-compat-Dsoa_MD-.js +1 -0
- package/dist/assets/reflection-probe-Don-M3Fj.js +1 -0
- package/dist/assets/reflection-probe-capture.inspector-CmFUoJCx.js +1 -0
- package/dist/assets/register-render-vitals-BiZk29b2.js +1 -0
- package/dist/assets/registry-02YZjMNp.js +1 -0
- package/dist/assets/relative-path-guard-GiM7Lsz8.js +1 -0
- package/dist/assets/render-audio-control-vMRlePWb.js +1 -0
- package/dist/assets/render-batch-system-0vq7p0VC.js +1 -0
- package/dist/assets/render-census-BrQX_CXv.js +1 -0
- package/dist/assets/render-control-Df3yTiyr.js +1 -0
- package/dist/assets/render-env-D2IV2x5k.js +1 -0
- package/dist/assets/render-features-CPQ_e568.js +1 -0
- package/dist/assets/render-seed-DF4JHy7P.js +1 -0
- package/dist/assets/render-settings-Bw4W9SYF.js +1 -0
- package/dist/assets/render-vitals-BZ5HtvMi.js +1 -0
- package/dist/assets/renderer-config-BqG4O8i9.js +1 -0
- package/dist/assets/resolve-three-SZE_WWUM.js +702 -0
- package/dist/assets/root-seam-contract-Z0VWX3Bk.js +1 -0
- package/dist/assets/rrweb-Cd2ifIRP.js +142 -0
- package/dist/assets/run-ticks-settled-C4ksViyA.js +1 -0
- package/dist/assets/runtime-inspection-l2iFQSsg.js +1 -0
- package/dist/assets/scene-capture-BQKzU0NT.js +1 -0
- package/dist/assets/scene-capture-CGYF-Viw.js +1 -0
- package/dist/assets/scene-document.service-qkDjUrlP.js +2 -0
- package/dist/assets/scene-framing-Cat0GtyJ.js +1 -0
- package/dist/assets/scene-index-B6BZOHMk.js +1 -0
- package/dist/assets/scene-query-C7_N-TpI.js +1 -0
- package/dist/assets/schema-kl9-2B_J.js +1 -0
- package/dist/assets/sculpt.layout-zJF55yCR.js +1 -0
- package/dist/assets/seeded-random-i3mtgBKZ.js +1 -0
- package/dist/assets/session-CZ5JPg-z.js +4877 -0
- package/dist/assets/setup-audio-S8GQF91f.js +1 -0
- package/dist/assets/setup-particles-GCXlnkj_.js +1 -0
- package/dist/assets/setup-physics-BeZ7-LKD.js +1 -0
- package/dist/assets/setup-renderer-DVXaSGin.js +1587 -0
- package/dist/assets/shading.layout-DULYZV6M.js +1 -0
- package/dist/assets/sim-clock-CLflx7kg.js +1 -0
- package/dist/assets/sky-precompute-worker-ChN7J87v.js +1 -0
- package/dist/assets/soft-particle-depth-DGvfQDi1.js +1 -0
- package/dist/assets/source-object3d-authoring-adapter-B-L6Ha6f.js +1 -0
- package/dist/assets/source-persistence-backend-C-aR-B_Y.js +1 -0
- package/dist/assets/spark-renderer-lifecycle-ynWESJcv.js +1 -0
- package/dist/assets/spark.module-4pXQoz5d.js +12120 -0
- package/dist/assets/stage-invalidation-DBg3C3Ta.js +1 -0
- package/dist/assets/stage-keyboard-n-5kKH-m.js +1 -0
- package/dist/assets/stage-overlay-set-B9zp2sLB.js +1 -0
- package/dist/assets/stage-presence-markers-DiGI6A45.js +1 -0
- package/dist/assets/standard-viewport-dressing-CzjAe_0A.js +7 -0
- package/dist/assets/state-bridge-DLP1jLRW.js +1 -0
- package/dist/assets/state-watch.action-BOvQR2qt.js +1 -0
- package/dist/assets/state-watch.menu-CNLvDeeY.js +1 -0
- package/dist/assets/state-watch.utility-Bg1tTTQU.js +1 -0
- package/dist/assets/static-batch-advisor-B13QEH7d.js +1 -0
- package/dist/assets/stats.module-BL02l9NC.js +1 -0
- package/dist/assets/story-arg-descriptors-Ek86ExX7.js +1 -0
- package/dist/assets/story-capture-_gC8dXV-.js +1 -0
- package/dist/assets/story-documents--TDLaPeL.js +3 -0
- package/dist/assets/story-documents.service-BiS_YbNQ.js +1 -0
- package/dist/assets/story-documents.service-CxOPYJ2j.js +1 -0
- package/dist/assets/story-media-presence-BHzk2IV5.js +1 -0
- package/dist/assets/story-mount-turn-DFRTj5hi.js +1 -0
- package/dist/assets/story-pixi-preview-BUrOJZXS.js +1 -0
- package/dist/assets/story-presentation-j2AVN-mK.js +1 -0
- package/dist/assets/story-three-preview-BHEDZzcl.js +2 -0
- package/dist/assets/structural-ids-Dc-7rEwi.js +1 -0
- package/dist/assets/structural-signature-0w-i_ats.js +1 -0
- package/dist/assets/surface-content-Dg9Kkazf.js +1 -0
- package/dist/assets/surface-state-DaxyruCj.js +3 -0
- package/dist/assets/system-adapters-rIC8FSGP.js +1 -0
- package/dist/assets/system-runner-DkOjxEBt.js +1 -0
- package/dist/assets/system-slot-E2mEdiih.js +1 -0
- package/dist/assets/team-playtest.service-DqOinFVA.js +1 -0
- package/dist/assets/texture.layout-DASpHVht.js +1 -0
- package/dist/assets/three-CDSueJyJ.js +1 -0
- package/dist/assets/three-authoring-adapter-CmSQ3Vui.js +1 -0
- package/dist/assets/three-authoring.service-iuHLwtf1.js +2 -0
- package/dist/assets/three-ingest-runtime-QzDYk6tU.js +1 -0
- package/dist/assets/three-projection-core-BmKMZ-nf.js +1 -0
- package/dist/assets/three-viewport-presentation-QBQpSdMh.js +1 -0
- package/dist/assets/three.module-D396a9Mn.js +3840 -0
- package/dist/assets/three.quarks.esm-B1C61jGo.js +1039 -0
- package/dist/assets/tools-B_NJsk05.js +1 -0
- package/dist/assets/transform-writer-BhBBTx33.js +1 -0
- package/dist/assets/transport.header-B-6HQlU2.js +1 -0
- package/dist/assets/trigger-volume-BNK2XzPL.js +1 -0
- package/dist/assets/tuples-CIQ4Bn1U.js +1 -0
- package/dist/assets/tween.module-DciWpAG6.js +1 -0
- package/dist/assets/ui-board-document-Bwtt--xp.js +2 -0
- package/dist/assets/unexported-game-trap-Dm1JYKHy.js +2 -0
- package/dist/assets/unmanaged-root-detector-B8CpbkSN.js +2 -0
- package/dist/assets/upstream-pin-BdgRH6ID.js +1 -0
- package/dist/assets/use-data-Dzq-MytE.js +1 -0
- package/dist/assets/use-live-actor-state-DErbWQWF.js +1 -0
- package/dist/assets/use-selection-DbR73-xd.js +1 -0
- package/dist/assets/user-data-BB2Of6Ht.js +1 -0
- package/dist/assets/utility-view-state-BHypxA33.js +1 -0
- package/dist/assets/uv-editing.layout-BEKHxmHw.js +1 -0
- package/dist/assets/vgai-shared-fontawesome-CU65D4Ij.js +1 -0
- package/dist/assets/vgai-shared-jsx-dev-runtime-DFDKL7fx.js +1 -0
- package/dist/assets/vgai-shared-jsx-runtime-DIqBpTut.js +1 -0
- package/dist/assets/vgai-shared-react-BT7rMc2H.js +1 -0
- package/dist/assets/vgai-shared-react-dom-DFajMqMT.js +1 -0
- package/dist/assets/vgai-shared-react-dom-client-S0ozfl6_.js +1 -0
- package/dist/assets/vgai-shared-three-Bc5PvpLM.js +1 -0
- package/dist/assets/viewport-pick-context-DkawXbEi.js +1 -0
- package/dist/assets/viewport-root-presentation-CWsE56K6.js +1 -0
- package/dist/assets/viewport-shading-BuA88e_A.js +1 -0
- package/dist/assets/viewport-shading-boundary-B_-_gABg.js +82 -0
- package/dist/assets/viewport-surface-status-B3om4Kcf.js +1 -0
- package/dist/assets/vision_bundle-DX0dWqEa.js +15 -0
- package/dist/assets/voxel-surface-DtcsSWRL.js +1 -0
- package/dist/assets/wav-encode-D31zWF6O.js +1 -0
- package/dist/assets/webgl-frame-capture-FlF9zQmW.js +1 -0
- package/dist/assets/webgl-gpu-timer-D3YX7RaD.js +1 -0
- package/dist/assets/webworkerAll-CM2o_dnz.js +1 -0
- package/dist/assets/worker-UrMcrc5_.js +2 -0
- package/dist/assets/world-documents-147tiFZe.js +1 -0
- package/dist/assets/world-root-stage-binding-vwTrtBz6.js +1 -0
- package/dist/assets/world-state-BWG-IcOd.js +1 -0
- package/dist/assets/writer-B-KovzkA.js +5 -0
- package/dist/assets/xstate-animation-binding-Brd0NST6.js +1 -0
- package/dist/assets/xstate-animation-meta-Q3u9zh_m.js +1 -0
- package/dist/assets/xstate-behavior.action-B8UluFBK.js +1 -0
- package/dist/assets/xstate-behavior.document-CKAsE45I.js +1 -0
- package/dist/assets/xstate-behavior.inspector-vJJyuifc.js +1 -0
- package/dist/assets/xstate-behavior.menu-BXbPICIh.js +1 -0
- package/dist/assets/xstate-inspection-BsZv8LS9.js +1 -0
- package/dist/vgai-shared-react.json +10 -0
- package/dist/vgai-shared-three.json +3 -0
- package/dist-node/cli.js +9320 -0
- package/dist-node/create.js +3239 -0
- package/package.json +91 -0
- package/presets.mjs +2 -0
- package/src/contributions.d.ts +4 -0
- package/src/index.ts +38 -0
- package/starter/cube.blend +0 -0
- package/starter/cube.py +81 -0
- package/template/.agents/references/project-manual.md +341 -0
- package/template/.agents/skills/editor/SKILL.md +53 -0
- package/template/.agents/skills/editor/agents/openai.yaml +4 -0
- package/template/.agents/skills/editor/references/editor-control.md +363 -0
- package/template/.agents/skills/vgai-3d-models/SKILL.md +64 -0
- package/template/.agents/skills/vgai-ingest-existing-game/SKILL.md +112 -0
- package/template/.agents/skills/vgai-threejs-authoring/SKILL.md +347 -0
- package/template/.agents/skills/vgai-threejs-authoring/agents/openai.yaml +4 -0
- package/template/.agents/skills/vgai-threejs-authoring/references/helper-catalog.md +65 -0
- package/template/.claude/skills/editor/SKILL.md +53 -0
- package/template/.claude/skills/editor/agents/openai.yaml +4 -0
- package/template/.claude/skills/editor/references/editor-control.md +363 -0
- package/template/.claude/skills/vgai-3d-models/SKILL.md +64 -0
- package/template/.claude/skills/vgai-ingest-existing-game/SKILL.md +112 -0
- package/template/.claude/skills/vgai-threejs-authoring/SKILL.md +347 -0
- package/template/.claude/skills/vgai-threejs-authoring/agents/openai.yaml +4 -0
- package/template/.claude/skills/vgai-threejs-authoring/references/helper-catalog.md +65 -0
- package/template/.github/copilot-instructions.md +6 -0
- package/template/.github/skills/editor/SKILL.md +53 -0
- package/template/.github/skills/editor/agents/openai.yaml +4 -0
- package/template/.github/skills/editor/references/editor-control.md +363 -0
- package/template/.github/skills/vgai-3d-models/SKILL.md +64 -0
- package/template/.github/skills/vgai-ingest-existing-game/SKILL.md +112 -0
- package/template/.github/skills/vgai-threejs-authoring/SKILL.md +347 -0
- package/template/.github/skills/vgai-threejs-authoring/agents/openai.yaml +4 -0
- package/template/.github/skills/vgai-threejs-authoring/references/helper-catalog.md +65 -0
- package/template/.mcp.json +12 -0
- package/template/.vgai/assets.json +1 -0
- package/template/.vgai/provenance.json +4 -0
- package/template/.volter/tracker/validation/.preset.base.mts +178 -0
- package/template/.volter/tracker/validation/preset.mts +186 -0
- package/template/.volter/tracker/visualizer/.extension.base.tsx +14 -0
- package/template/.volter/tracker/visualizer/extension.tsx +14 -0
- package/template/.volter/tracker-config.json +17 -0
- package/template/AGENTS.md +176 -0
- package/template/CLAUDE.md +1 -0
- package/template/DEVLOG.md +20 -0
- package/template/IDIOMS.md +118 -0
- package/template/LICENSE +30 -0
- package/template/README.md +83 -0
- package/template/ROADMAP.md +20 -0
- package/template/asset-manifest.json +3 -0
- package/template/check-idioms.ts +1533 -0
- package/template/index.html +18 -0
- package/template/manifest-entry-modules-plugin.ts +53 -0
- package/template/package.json +62 -0
- package/template/public/jsm/libs/basis/basis_transcoder.js +19 -0
- package/template/public/jsm/libs/basis/basis_transcoder.wasm +0 -0
- package/template/public/jsm/libs/draco/gltf/draco_decoder.js +33 -0
- package/template/public/jsm/libs/draco/gltf/draco_decoder.wasm +0 -0
- package/template/public/jsm/libs/draco/gltf/draco_encoder.js +33 -0
- package/template/public/jsm/libs/draco/gltf/draco_wasm_wrapper.js +116 -0
- package/template/public/shaders/daylight-sky.frag.glsl +15 -0
- package/template/public/shaders/daylight-sky.vert.glsl +7 -0
- package/template/scripts/patch-drei-stats-gl.mjs +35 -0
- package/template/server/colyseus-setup.ts +111 -0
- package/template/server/loopback.ts +76 -0
- package/template/server/main.ts +78 -0
- package/template/server/rooms/arena-room.ts +488 -0
- package/template/server/rooms/game-room.ts +274 -0
- package/template/server/rooms.ts +15 -0
- package/template/server/tsconfig.json +19 -0
- package/template/src/bot/QaTester.tsx +35 -0
- package/template/src/bot/behaviors.ts +203 -0
- package/template/src/bot/bot-station.ts +192 -0
- package/template/src/bot/tester-run.ts +238 -0
- package/template/src/bot/tester-station.ts +193 -0
- package/template/src/components/environment/DaylightSky.tsx +54 -0
- package/template/src/components/environment/Ground.tsx +129 -0
- package/template/src/components/environment/SceneAtmosphere.tsx +14 -0
- package/template/src/components/environment/SoftGroundShadow.tsx +62 -0
- package/template/src/components/environment/SunShadowFit.tsx +141 -0
- package/template/src/contributions/README.md +98 -0
- package/template/src/contributions/analytics.analytics.tsx +26 -0
- package/template/src/contributions/data.document.tsx +35 -0
- package/template/src/contributions/pages.finder.ts +61 -0
- package/template/src/contributions/tester.inspector.tsx +64 -0
- package/template/src/contributions/use-game-modules.ts +80 -0
- package/template/src/data/README.md +17 -0
- package/template/src/input.ts +97 -0
- package/template/src/lib/audio/capability.json +4 -0
- package/template/src/lib/audio/sfx.ts +255 -0
- package/template/src/lib/react-root/capability.json +4 -0
- package/template/src/lib/react-root/index.ts +20 -0
- package/template/src/lib/react-root/react-root-adapter.tsx +57 -0
- package/template/src/lib/reflections/ReflectionProbe.tsx +201 -0
- package/template/src/lib/reflections/capability.json +4 -0
- package/template/src/lib/reflections/index.ts +19 -0
- package/template/src/lib/reflections/probe-controller.ts +75 -0
- package/template/src/lib/reflections/reflection-probe-registry.ts +402 -0
- package/template/src/lib/reflections/volume-reflection-material.ts +416 -0
- package/template/src/lib/static-batch/Frozen.tsx +91 -0
- package/template/src/lib/static-batch/capability.json +4 -0
- package/template/src/lib/static-batch/freeze.ts +579 -0
- package/template/src/lib/static-batch/index.ts +44 -0
- package/template/src/lib/static-batch/mutation-watch.ts +149 -0
- package/template/src/lib/static-batch/shadow-cache.ts +171 -0
- package/template/src/main.ts +63 -0
- package/template/src/manifest-entry-modules.d.ts +3 -0
- package/template/src/prefabs/HeroBox.stories.tsx +23 -0
- package/template/src/prefabs/HeroBox.tsx +35 -0
- package/template/src/scenes/MainScene.tsx +77 -0
- package/template/src/world.tsx +87 -0
- package/template/tsconfig.json +35 -0
- package/template/tsconfig.node.json +32 -0
- package/template/tsconfig.tools.json +22 -0
- package/template/validate-asset-content.ts +27 -0
- package/template/validate-assets.ts +60 -0
- package/template/validate-manifest.ts +55 -0
- package/template/vgai.adapter.ts +76 -0
- package/template/vgai.project.json +24 -0
- package/template/vite.config.ts +247 -0
- package/template-dotfiles/gitignore +63 -0
- package/workbench/src/media/game-cover.css +83 -0
- package/workbench/src/product.contribution.ts +188 -0
- package/workbench/src/vgaiGameSkew.ts +276 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{V as g,bR as v,bS as x}from"./index-GIL7oGEO.js";import{J as k,c as j}from"./json-history-resource-BbxllWfV.js";import{p as y}from"./source-persistence-backend-C-aR-B_Y.js";import"./index-nmcBqr7Y.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-D_NuPfjr.js";import"./jsx-runtime-DPjLkJKQ.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./three.module-D396a9Mn.js";import"./ingest-source-persistence-C_6Hiyra.js";function C(r){return encodeURIComponent(r||"unnamed")}function u(r){try{return r.getClassName?.()||"Node"}catch{return"Node"}}function z(r){try{const e=r.getChildren?.();return Array.isArray(e)?e:[]}catch{return[]}}function m(r){const e=r?.x??0,t=r?.y??0,n=r?.z??0,s=Math.cos(e/2),i=Math.sin(e/2),a=Math.cos(t/2),o=Math.sin(t/2),c=Math.cos(n/2),l=Math.sin(n/2);return{x:i*a*c+s*o*l,y:s*o*c-i*a*l,z:s*a*l+i*o*c,w:s*a*c-i*o*l}}function p([r,e,t,n]){const s=2*(n*r+e*t),i=1-2*(r*r+e*e),a=2*(n*e-t*r),o=2*(n*t+r*e),c=1-2*(e*e+t*t);return{x:Math.atan2(s,i),y:Math.abs(a)>=1?Math.sign(a)*(Math.PI/2):Math.asin(a),z:Math.atan2(o,c)}}function d(r,e){r&&(r.x=e[0]??r.x,r.y=e[1]??r.y,r.z=e[2]??r.z)}function B(r,e){if(!r.rotationQuaternion){d(r.rotation,e);return}const t=m({x:e[0]??0,y:e[1]??0,z:e[2]??0});d(r.rotationQuaternion,[t.x,t.y,t.z]),r.rotationQuaternion.w=t.w}class V{constructor(e,t,n={}){this.engine=e,this.store=t,this.options=n,this.persistenceBackend=n.persistence??null,this.provenance=n.provenance??{source:"foreign",label:"live-only",detail:"Babylon.js scenes and Nodes projected directly — edits apply to native game objects for this session only."};const s=j(),i=this.persistenceBackend;this.persistence=i?{isDirty:()=>!1,save:async()=>{},get destination(){return i.destination()}}:s,i&&i.attach({read:(o,c)=>this.readChannel(o,c),apply:(o,c,l)=>this.applyChannel(o,c,l)});const a=t.projectHistory;if(this.historyResource=i&&a&&n.journal?new k({history:a,kind:"session-state",scope:"session",subject:{...n.journal,id:`${n.journal.id}/live-babylon-edits`},displayName:"Live edits",capture:()=>this.captureHistoryState(),conflictIdentity:o=>o.edits,restore:async o=>{this.restoreHistoryState(o)}}):null,n.canvas&&(this.pickable={pick:(o,c)=>{const l=n.canvas.getBoundingClientRect();for(const h of this.scenes()){const f=h.pick?.(o-l.left,c-l.top),b=f?.hit?f.pickedMesh:null;if(b)return this.reindex(),this.idsByObject.get(b)??null}return null}}),this.truth={resolve:(o,c)=>{const l=this.subjectFor(o,c);return{site:l.anchor,writeAnchorKind:l.anchorKind}}},this.installNativeTools(),n.canvas){const o=()=>{for(const l of this.selection.get())this.transforms.beginEdit(l)},c=()=>{for(const l of this.selection.get())this.transforms.endEdit(l)};n.canvas.addEventListener("pointerdown",o),n.canvas.addEventListener("pointerup",c),this.removeCanvasListeners=()=>{n.canvas.removeEventListener("pointerdown",o),n.canvas.removeEventListener("pointerup",c)}}else this.removeCanvasListeners=null}capabilities={transform:!0,inspectorFields:!0,persist:!1};provenance;persistence;pickable;truth;indexed=new Map;idsByObject=new Map;listeners=new Set;persistenceBackend;baselines=new Map;historyBefore=new Map;historyResource=null;edits=0;gizmos=[];pointerTokens=[];removeCanvasListeners;scenes(){return(this.engine.scenes??[]).filter(e=>{try{return!e.isDisposed?.()}catch{return!0}})}refresh(){this.reindex();let e=0,t=0;for(const n of this.indexed.values())n.kind==="scene"?e++:t++;return{scenes:e,objects:t}}reindex(){this.indexed.clear(),this.idsByObject.clear();const e=new Set;for(const[t,n]of this.scenes().entries()){const s=n.name||`Scene ${t+1}`,i=`babylon:scene:${t}:${C(n.uid||s)}`,a=Array.isArray(n.rootNodes)?n.rootNodes:[],o={id:i,label:s,role:"root",kind:"babylon-scene",typeLabel:"BABYLON.Scene",parentId:null,childIds:[]};this.indexed.set(i,{kind:"scene",scene:n,node:o}),o.childIds=a.map((c,l)=>this.indexNode(c,i,`${t}/${l}`,e))}}indexNode(e,t,n,s){const i=u(e),o=`babylon:node:${typeof e.uniqueId=="number"?String(e.uniqueId):`path:${n}`}`,c={id:o,label:e.name||i,role:"entity",kind:`babylon-${i.toLowerCase()}`,typeLabel:i,parentId:t,childIds:[]};return this.indexed.set(o,{kind:"node",object:e,node:c}),this.idsByObject.set(e,o),s.has(e)||(s.add(e),c.childIds=z(e).map((l,h)=>this.indexNode(l,o,`${n}/${h}`,s))),o}hierarchy={roots:()=>(this.reindex(),[...this.indexed.values()].filter(e=>e.kind==="scene").map(e=>e.node)),node:e=>(this.reindex(),this.indexed.get(e)?.node??null)};selection={get:()=>[...this.store.selectedEntityIds],set:e=>{this.store.selectMultiple(e),this.attachGizmos(e[0]??null),this.notify()}};transforms={dimensions:e=>(this.reindex(),this.indexed.get(e)?.kind==="node"?"3d":null),get:e=>{this.reindex();const t=this.indexed.get(e);if(!t||t.kind!=="node")return{position:[0,0,0],rotation:[0,0,0,1],scale:[1,1,1]};const n=t.object,s=n.rotationQuaternion??m(n.rotation);return{position:[n.position?.x??0,n.position?.y??0,n.position?.z??0],rotation:[s.x,s.y,s.z,s.w],scale:[n.scaling?.x??1,n.scaling?.y??1,n.scaling?.z??1]}},beginEdit:e=>{const t=this.captureChannels(e);t&&this.baselines.set(e,t),this.historyResource&&this.historyBefore.set(e,this.captureHistoryState())},apply:(e,t)=>{this.reindex();const n=this.indexed.get(e);if(!n||n.kind!=="node")return;const s=n.object;if(d(s.position,t.position),d(s.scaling,t.scale),s.rotationQuaternion)d(s.rotationQuaternion,t.rotation),s.rotationQuaternion.w=t.rotation[3];else{const i=p(t.rotation);d(s.rotation,[i.x,i.y,i.z])}this.notify()},endEdit:async e=>{const t=this.baselines.get(e);this.baselines.delete(e);const n=this.historyBefore.get(e);if(this.historyBefore.delete(e),!t||!this.persistenceBackend)return;const s=this.captureChannels(e);if(!s)return;const i=["position","rotation","scale"].filter(o=>JSON.stringify(t[o])!==JSON.stringify(s[o]));if(i.length===0)return;if(i.length>1){const o=`this Babylon gesture changed ${i.length} properties at once (${i.join(", ")})`;return this.persistenceBackend.report(`Transform ${this.labelOf(e)}`,o),{destination:"live-only (not saved)",persisted:!1}}const a=i[0];return y({backend:this.persistenceBackend,subject:()=>this.subjectFor(e,a),baseline:t[a],next:s[a],label:`Transform ${this.labelOf(e)}`,journal:()=>this.recordHistory(`Transform ${this.labelOf(e)}`,n)})}};inspector={properties:e=>{this.reindex();const t=this.indexed.get(e);if(!t)return[];if(t.kind==="scene")return[{path:"name",label:"Scene",type:"string",readonly:!0},{path:"uid",label:"UID",type:"string",readonly:!0}];const n=[{path:"className",label:"Type",type:"string",readonly:!0},{path:"name",label:"Name",type:"string"},{path:"id",label:"ID",type:"string",readonly:!0},{path:"enabled",label:"Enabled",type:"boolean"}];return typeof t.object.isVisible=="boolean"&&n.push({path:"isVisible",label:"Visible",type:"boolean"}),typeof t.object.visibility=="number"&&n.push({path:"visibility",label:"Visibility",type:"number"}),n},get:(e,t)=>{this.reindex();const n=this.indexed.get(e);if(n)return n.kind==="scene"?t==="name"?n.scene.name:t==="uid"?n.scene.uid:void 0:t==="className"?u(n.object):t==="enabled"?n.object.isEnabled?.(!1):n.object[t]},set:async(e,t,n)=>{this.reindex();const s=this.indexed.get(e);if(!s||s.kind!=="node")return;const i=this.readChannel(e,t),a=this.historyResource?this.captureHistoryState():void 0;if(t==="enabled")s.object.setEnabled?.(!!n);else if(t==="name"||t==="isVisible"||t==="visibility")s.object[t]=n;else return;this.notify();const o=this.readChannel(e,t);if(!(!this.persistenceBackend||i===void 0||o===void 0||JSON.stringify(i)===JSON.stringify(o)))return y({backend:this.persistenceBackend,subject:()=>this.subjectFor(e,t==="isVisible"?"visible":t),baseline:i,next:o,label:`Set ${this.labelOf(e)} ${t}`,journal:()=>this.recordHistory(`Set ${this.labelOf(e)} ${t}`,a)})}};subscribe(e){return this.listeners.add(e),()=>this.listeners.delete(e)}dispose(){this.removeCanvasListeners?.();for(const{scene:e,token:t}of this.pointerTokens)e.onPointerObservable?.remove(t);for(const e of this.gizmos)e.dispose();this.persistenceBackend?.dispose(),this.listeners.clear(),this.indexed.clear(),this.idsByObject.clear()}labelOf(e){return this.hierarchy.node(e)?.label??"Babylon node"}objectOf(e){this.reindex();const t=this.indexed.get(e);return t?.kind==="node"?t.object:null}readChannel(e,t){const n=this.objectOf(e);if(n){if(t==="position")return[n.position?.x??0,n.position?.y??0,n.position?.z??0];if(t==="rotation"){const s=n.rotationQuaternion,i=s?p([s.x,s.y,s.z,s.w]):n.rotation??{x:0,y:0,z:0};return[i.x,i.y,i.z]}return t==="scale"?[n.scaling?.x??1,n.scaling?.y??1,n.scaling?.z??1]:t==="visible"?n.isVisible:this.inspector.get(e,t)}}applyChannel(e,t,n){const s=this.objectOf(e);s&&(t==="position"&&Array.isArray(n)?d(s.position,n):t==="rotation"&&Array.isArray(n)?B(s,n):t==="scale"&&Array.isArray(n)?d(s.scaling,n):t==="visible"?s.isVisible=!!n:(t==="name"||t==="visibility")&&(s[t]=n),this.notify())}recordHistory(e,t){!this.historyResource||!t||(this.edits+=1,this.historyResource.record(e,t,this.captureHistoryState()).catch(n=>{g.error(`[babylon] failed to journal "${e}" into project history — the edit is applied but has no history entry (it cannot be undone): ${n instanceof Error?n.message:String(n)}`)}))}captureHistoryState(){this.reindex();const e={};for(const[t,n]of this.indexed){if(n.kind!=="node")continue;const s={};for(const i of["position","rotation","scale","visible","name","visibility"]){const a=this.readChannel(t,i);a!=null&&(s[i]=a)}e[t]=s}return{edits:this.edits,nodes:e}}restoreHistoryState(e){this.edits=e.edits;for(const[t,n]of Object.entries(e.nodes))for(const[s,i]of Object.entries(n))this.applyChannel(t,s,i);this.notify()}captureChannels(e){const t=this.readChannel(e,"position"),n=this.readChannel(e,"rotation"),s=this.readChannel(e,"scale");return t&&n&&s?{position:t,rotation:n,scale:s}:null}subjectFor(e,t){const n=this.objectOf(e),s=v(n);return{entityId:e,property:t,surface:"babylon",anchor:s,anchorKind:s.anchored?"construction-literal":"live-only",instances:s.anchored&&s.kind==="source"?x(s):0}}installNativeTools(){const e=this.options.api?.GizmoManager;for(const t of this.scenes()){if(e){const s=new e(t);s.positionGizmoEnabled=!0,s.rotationGizmoEnabled=!0,s.scaleGizmoEnabled=!0,s.usePointerToAttachGizmos=!1,this.gizmos.push(s)}const n=t.onPointerObservable;if(n){const s=n.add(i=>{const a=i.pickInfo?.pickedMesh;if(!a)return;this.reindex();const o=this.idsByObject.get(a);o&&this.selection.set([o])});this.pointerTokens.push({scene:t,token:s})}}}attachGizmos(e){const t=e?this.objectOf(e):null;for(const n of this.gizmos){if(!t){n.attachToMesh(null);continue}try{u(t).includes("Mesh")?n.attachToMesh(t):n.attachToNode?n.attachToNode(t):n.attachToMesh(null)}catch{n.attachToMesh(null)}}}notify(){for(const e of this.listeners)e();this.store.notifyIngestEdit()}}export{V as BabylonAuthoringAdapter};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function l(e){const t=e.mounted.authoring,{selection:s,transforms:o,inspector:n,instances:r,spatialHandles:c,boxEdit:i,text:b}=t??{};return{substrate:{adapter:e.adapter,mounted:e.mounted,pausable:e.pausable,loop:e.root.loop},...t===void 0?{}:d(t,{selection:s,transforms:o,inspector:n,instances:r,spatialHandles:c,boxEdit:i,text:b}),observation:{systems:e.mounted.systems,debugRegistry:e.debugRegistry,observe:e.mounted.observe,subscribe:t?.subscribe?.bind(t),entryDebug:e.entryDebug,entrySystems:e.entrySystems},project:{root:e.root,definition:e.definition,entry:e.entry}}}function d(e,t){const{selection:s,transforms:o,inspector:n,instances:r,spatialHandles:c,boxEdit:i,text:b}=t;return{projection:{capabilities:e.capabilities,hierarchy:e.hierarchy,provenance:e.provenance,selection:s,transforms:o,inspector:n,instances:r,spatialHandles:c,boxEdit:i,text:b,assetSubject:e.assetSubject,related:e.related,rects:e.rects,pickable:e.pickable,stories:e.stories,colorSample:e.colorSample},truth:{structure:e.structure,persistence:e.persistence,truth:e.truth,assetDrop:e.assetDrop,selection:s,transforms:o,inspector:n,instances:r,spatialHandles:c,boxEdit:i,text:b}}}export{l as createRootBinding};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function o(t,e){if(t.type!==e.type)return!1;switch(t.type){case"key":return t.code===e.code;case"mouse_button":return t.button===e.button;case"mouse_move":return!0;case"gamepad_button":return t.button===e.button;case"gamepad_axis":{const s=e;return t.axis===s.axis&&t.direction===s.direction}case"gamepad_axis_pair":{const s=e;return t.xAxis===s.xAxis&&t.yAxis===s.yAxis}case"touch_button":case"touch_stick":case"test_axis":case"test_vector2":case"test_pointer_delta":case"test_pointer_position":return t.sourceId===e.sourceId}}export{o as inputBindingsCollide};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-GIL7oGEO.js","assets/index-nmcBqr7Y.js","assets/_commonjsHelpers-D6-XlEtG.js","assets/index-D_NuPfjr.js","assets/jsx-runtime-DPjLkJKQ.js","assets/index-CtzuWnCS.js","assets/index-CinJrH5C.js","assets/index-FUuS4qwW.js","assets/client-DNXj_opT.js","assets/three.module-D396a9Mn.js","assets/index-D2fNXpHa.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{dv as h,_ as v,db as y,dw as w,aj as g}from"./index-GIL7oGEO.js";import{nativeDebugBindingFromEntryModule as b,nativeSystemsBindingFromEntryModule as R}from"./native-debug-module-CWicoSGD.js";import{assertNever as f}from"./adapter-surface-Y37Nzcyw.js";import{a as E}from"./entry-adjudication-Cq8Yeb74.js";import{a as A}from"./realm-services-CobQsq_X.js";import{r as j}from"./relative-path-guard-GiM7Lsz8.js";import{f as k,m as x}from"./capability-coverage-Czas4C18.js";import{a as M,b as $}from"./react-root-CEz5NTck.js";function P(e,o){const r=n=>{throw new Error(`resolveRootBinding: world "${e.id}" declares { module: "${o}" } — ${n} (the module path must be game-folder-relative, normalized, with no \`..\` escape).`)},t=j(o);t==="empty"&&r("the module path is empty"),t==="nul"&&r("the module path contains a NUL byte"),t==="absolute"&&r("the module path is absolute, not game-folder-relative"),t==="traversal"&&r("the module path contains a `..` segment and would escape the game folder"),o.includes("\\")&&r("the module path contains a backslash (not POSIX-relative)");const a=o.split("/").filter(n=>n.length>0&&n!==".").join("/");return a===""&&r("the module path resolves to nothing (empty after normalization)"),a}function u(e,o,r){const t=n=>{throw new Error(`resolveRootBinding: world "${e.id}"'s custom adapter module "${o}" ${n} — a { module } adapter must default-export an object shaped like \`RootAdapter\`: \`{ id: string, mount(host): Promise<MountedThreeRoot> }\`.`)};(r===null||typeof r!="object")&&t("has no default export (or it is not an object)");const a=r;(typeof a.id!="string"||a.id.length===0)&&t("default-exports an object with no non-empty string `id`"),typeof a.mount!="function"&&t("default-exports an object with no `mount` function")}const D="this world mounts through the project’s own adapter module, so every capability the editor has here is one that module hands it";function p(e,o){return{id:o.id,async mount(r){const t=await o.mount(r),a=k(e.id,x(t),D,t.kind);if(a){const{editorConsole:n}=await v(async()=>{const{editorConsole:i}=await import("./index-GIL7oGEO.js").then(s=>s.tC);return{editorConsole:i}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10]));n.warn(a,"adapter")}return t}}}async function S(e,o,r){const{adapter:t}=e;if(t.type!=="module")throw new Error(`resolveModuleAdapter: world "${e.id}" is not a { module } world.`);const a=P(e,t.module),i=await import(h(o,a,r)),s=i.default;switch(e.surface){case"three":return u(e,t.module,s),{resolved:{surface:"three",adapter:p(e,s)},module:i};case"canvas":return u(e,t.module,s),{resolved:{surface:"canvas",adapter:p(e,s)},module:i};case"dom":return u(e,t.module,s),{resolved:{surface:"dom",adapter:p(e,s)},module:i};default:return f(e.surface,"resolveModuleAdapter")}}async function _(e,o,r,t){const{adapter:a,module:n}=await I(e,o,t);return{adapter:a,declaration:C(e,r,n)}}function C(e,o,r){const t=b(e.id,r),a=R(e.id,r,e.surface);return{root:e,definition:o,entry:{reach:"full",module:r},...t?{entryDebug:t}:{},...a?{entrySystems:a}:{}}}async function I(e,o,r){const{adapter:t}=e;switch(t.identity){case"three":return O(e,o,r);case"canvas":return B(e,o,r);case"dom":{let a={};return{adapter:{surface:"dom",adapter:await $(e,o,i=>{a=i})},module:a}}case"module":{const{resolved:a,module:n}=await S(e,o.projectRoot,o.epoch);return{adapter:a,module:n}}case"ingest-react":{const{adapter:a,module:n}=await M(e,o);return{adapter:{surface:"dom",adapter:a},module:n}}case"ingest-pixi":case"ingest-three":return T(e);default:{const a=t;throw new Error(`resolveRootBinding: unhandled adapter identity ${JSON.stringify(a)}`)}}}async function O(e,o,r){if(e.entry===void 0)throw new Error(`resolveRootBinding: world "${e.id}" is a three root with no \`entry\` — this should have been rejected by manifest validation. A three root is authored as a TSX/R3F world module.`);const t=await o.loadEntryModule(e.entry,e.id,"three",r?.selectionOverride),a=await E(t,e.id,{entryPath:e.entry});if(!a)throw new Error(`Project script at ${e.entry} neither exports \`adapter\` nor default-exports a React world component — every explicit first-party entry module satisfies one of the two (\`export default function World() { … }\`, or an \`adapter\` export for full control).`);return{adapter:{surface:"three",adapter:a},module:t}}async function B(e,o,r){if(e.entry===void 0)throw new Error(`resolveRootBinding: world "${e.id}" is a canvas root with no \`entry\` — this should have been rejected by manifest validation. A canvas root is authored as a TSX world module; point \`entry\` at it.`);const t=await o.loadEntryModule(e.entry,e.id,"canvas",r?.selectionOverride),a=await o.pixiRuntime(t,e.id);if(!a)throw new Error(`Project script at ${e.entry} (canvas root "${e.id}") must default-export a React component (\`export default function World() { … }\`) — or export an \`adapter\` for full control.`);return{adapter:{surface:"canvas",adapter:a},module:t}}function T(e){const o=e.adapter.identity==="ingest-pixi"?"resolveIngest2DDescriptor + mountCanvasIngestRootFromManifest":"resolveIngestDescriptor + mountThreeIngestRootFromManifest";throw new Error(`resolveRootBinding: world "${e.id}" (${e.adapter.identity}) is a captured foreign runtime, not a host-mounted RootAdapter; dispatch it through ${o}`)}async function m(e,o,r){const t=y(),a=await A(o,t),n=await w(),i=[];for(const s of g(e)){const d=r?.selectionOverride,c=await _(s,a,n,{...d&&s.id===d.regionId?{selectionOverride:{selection:d.selection,key:d.key}}:{}});i.push({world:s,resolved:c})}return{roots:i,mountId:String(t)}}async function J(e,o){const{roots:r}=await m(e,o),t=[];for(const{world:a,resolved:n}of r){const i={id:a.id,zOrder:a.zOrder,pausable:a.pausable,declaration:n.declaration},s=n.adapter;switch(s.surface){case"canvas":t.push({...i,kind:"canvas",adapter:s.adapter});break;case"dom":t.push({...i,kind:"dom",adapter:s.adapter});break;case"three":t.push({...i,kind:"three",adapter:s.adapter});break;default:f(s,"resolveAllRoots")}}return t}async function V(e,o,r){const{roots:t,mountId:a}=await m(e,o,r),n={};for(const{world:i,resolved:s}of t){const{root:d,...c}=s.declaration,l=s.adapter;switch(l.surface){case"canvas":n[i.id]={kind:"canvas",adapter:l.adapter,declaration:c};break;case"dom":n[i.id]={kind:"dom",adapter:l.adapter,declaration:c};break;case"three":n[i.id]={kind:"three",adapter:l.adapter,declaration:c};break;default:f(l,"resolveAllRootEntries")}}return{entries:n,mountId:a}}export{V as a,J as r};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{b as u,a as S,S as f,P as m,s as _,o as g}from"./worker-UrMcrc5_.js";import{s as F}from"./session-CZ5JPg-z.js";async function O(a){const o=await fetch(a);if(!o.ok)throw new Error(`${a}: HTTP ${o.status}`);const e=await o.text(),r={exports:{}},l=new Function("module","exports","define",`${e}
|
|
2
|
+
return typeof createBlenderModule === 'function' ? createBlenderModule : module.exports;`)(r,r.exports,void 0);if(typeof l!="function")throw new Error("blender_browser.js did not produce a module factory");return l}const R=new TextEncoder;function B(a,o){let e="";for(const r of o.split("/").filter(Boolean))a.FS_createPath(e||"/",r,!0,!0),e+=`/${r}`}function I(a){const o=a.FS;return{readFile:async e=>o.readFile(e),writeFile:async(e,r)=>o.writeFile(e,r),mkdirTree:async e=>o.mkdirTree(e),readdir:async e=>o.readdir(e),stat:async e=>{let r;try{r=o.stat(e)}catch{return null}const i=r.mtime;return{size:r.size,mode:r.mode??0,mtimeMs:typeof i=="number"?i:i?.getTime()??0}},unlink:async e=>o.unlink(e)}}async function k(a,o){if(!self.crossOriginIsolated)throw new Error("Headless Blender needs SharedArrayBuffer, so the editor page has to be cross-origin isolated (Cross-Origin-Opener-Policy: same-origin and Cross-Origin-Embedder-Policy on every response). This worker reports crossOriginIsolated=false.");const e=u("blender_browser.js"),r=await O(e),i=performance.now();let l=null;const s=(t,c)=>{c.startsWith("@@VGAI-READY ")&&(l=c.slice(13)),a.log(c.startsWith("@@VGAI-WARN")||c.startsWith("@@VGAI-ERROR")?"error":"log",c)},n=await r({arguments:["--background","--factory-startup","--python",S],locateFile:t=>u(t),mainScriptUrlOrBlob:e,print:t=>s("log",t),printErr:t=>s("error",t),preRun:[t=>{t.ENV??={},Object.assign(t.ENV,{BLENDER_SYSTEM_RESOURCES:"/bw",BLENDER_SYSTEM_PYTHON:"/bw/python",BLENDER_SYSTEM_SCRIPTS:"/bw/scripts",BLENDER_SYSTEM_DATAFILES:"/bw/datafiles",VGAI_SESSION_ROOT:f,HOME:"/root",TMPDIR:"/tmp"});for(const c of["/tmp","/root","/work",f,...m,a.project])B(t,c);t.FS_createDataFile(f,"session.py",R.encode(F),!0,!0,!0)}]});for(;l===null;)await _(5);const d=performance.now()-i,b=JSON.parse(l);let h=null;if(typeof n.releasePreloadedFileData=="function"){const t=n.releasePreloadedFileData();h=t.bytes,a.log("log",`blender: released the preloaded ${(t.bytes/1048576).toFixed(0)} MB payload (${t.files} files); WasmFS already holds it`)}else a.log("error","blender: this bundle has no releasePreloadedFileData, so the ~55 MB packed .data payload stays resident beside the copy WasmFS made of it — relink with the recipe's --post-js (recipe/release-preloaded-file-data.js).");const p=n.FS;let w="";for(const t of`${a.project}`.split("/").filter(Boolean)){w+=`/${t}`;try{p.chmod(w,511)}catch{}}for(const t of["/work","/tmp","/root",f,...m])try{p.chmod(t,511)}catch{}const y=I(n);p.chmod("/bw/datafiles",493),await T(y);const{request:E}=g(y,a);return{skew:"emscripten",banner:b,files:y,request:E,readArena:async()=>n.HEAPU8.subarray(n._blender_web_export_buffer(),n._blender_web_export_buffer()+n._blender_web_export_buffer_size()),bootMs:d,memoryBytes:()=>n.HEAPU8.length,releasedPayloadBytes:h}}async function T(a){const[o,e]=await Promise.all([fetch(u("essentials.json")),fetch(u("essentials.bin"))]);if(!o.ok||!e.ok)throw new Error(`Blender Essentials assets are missing (${o.status}/${e.status})`);const r=await o.json(),i=await e.arrayBuffer(),l=Array.from(new Uint8Array(await crypto.subtle.digest("SHA-256",i)),s=>s.toString(16).padStart(2,"0")).join("");if(i.byteLength!==r.bytes||l!==r.sha256)throw new Error("Blender Essentials payload does not match its source manifest");for(const s of r.files){if(!s.path||s.path.includes("\\")||s.path.split("/").some(d=>!d||d==="."||d==="..")||!Number.isInteger(s.offset)||!Number.isInteger(s.bytes)||s.offset<0||s.bytes<0||s.offset+s.bytes>i.byteLength)throw new Error(`Invalid Blender Essentials file: ${s.path}`);const n=`/bw/datafiles/assets/${s.path}`;await a.mkdirTree(n.slice(0,n.lastIndexOf("/"))),await a.writeFile(n,new Uint8Array(i,s.offset,s.bytes))}}export{k as startEmscriptenBlenderEngine};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as i}from"./jsx-runtime-DPjLkJKQ.js";import{fo as Ce}from"./index-GIL7oGEO.js";import{r as T}from"./index-nmcBqr7Y.js";import{s as Te,b as Q,a as Ee,n as ee,c as B,d as U,r as we,e as Oe,f as Ie,N as Ne}from"./blender-runtime-host-BpBwGv7r.js";import"./_commonjsHelpers-D6-XlEtG.js";import"./index-CtzuWnCS.js";import"./index-CinJrH5C.js";import"./index-D_NuPfjr.js";import"./index-FUuS4qwW.js";import"./client-DNXj_opT.js";import"./three.module-D396a9Mn.js";import"./clip-planes-CnAI6DZn.js";const Re={customSocketOrder:!0,items:[{kind:"input",name:"Image"},{kind:"output",name:"Image",alignWithPrevious:!0},{kind:"input",name:"Factor",identifier:"Fac"},{kind:"input",name:"Type"},{kind:"input",name:"Lift",identifier:"Base Lift"},{kind:"input",name:"Lift",identifier:"Color Lift"},{kind:"input",name:"Gamma",identifier:"Base Gamma"},{kind:"input",name:"Gamma",identifier:"Color Gamma"},{kind:"input",name:"Gain",identifier:"Base Gain"},{kind:"input",name:"Gain",identifier:"Color Gain"},{kind:"input",name:"Offset",identifier:"Base Offset"},{kind:"input",name:"Offset",identifier:"Color Offset"},{kind:"input",name:"Power",identifier:"Base Power"},{kind:"input",name:"Power",identifier:"Color Power"},{kind:"input",name:"Slope",identifier:"Base Slope"},{kind:"input",name:"Slope",identifier:"Color Slope"},{kind:"panel",name:"Input",items:[{kind:"input",name:"Temperature",identifier:"Input Temperature"},{kind:"input",name:"Tint",identifier:"Input Tint"},{kind:"layout"}]},{kind:"panel",name:"Output",items:[{kind:"input",name:"Temperature",identifier:"Output Temperature"},{kind:"input",name:"Tint",identifier:"Output Tint"},{kind:"layout"}]}]},Pe={customSocketOrder:!0,items:[{kind:"input",name:"Image"},{kind:"output",name:"Image",alignWithPrevious:!0},{kind:"input",name:"Mask"},{kind:"panel",name:"Master",items:[{kind:"input",name:"Saturation",identifier:"Master Saturation"},{kind:"input",name:"Contrast",identifier:"Master Contrast"},{kind:"input",name:"Gamma",identifier:"Master Gamma"},{kind:"input",name:"Gain",identifier:"Master Gain"},{kind:"input",name:"Offset",identifier:"Master Offset"}],defaultClosed:!0},{kind:"panel",name:"Highlights",items:[{kind:"input",name:"Saturation",identifier:"Highlights Saturation"},{kind:"input",name:"Contrast",identifier:"Highlights Contrast"},{kind:"input",name:"Gamma",identifier:"Highlights Gamma"},{kind:"input",name:"Gain",identifier:"Highlights Gain"},{kind:"input",name:"Offset",identifier:"Highlights Offset"}],defaultClosed:!0},{kind:"panel",name:"Midtones",items:[{kind:"input",name:"Saturation",identifier:"Midtones Saturation"},{kind:"input",name:"Contrast",identifier:"Midtones Contrast"},{kind:"input",name:"Gamma",identifier:"Midtones Gamma"},{kind:"input",name:"Gain",identifier:"Midtones Gain"},{kind:"input",name:"Offset",identifier:"Midtones Offset"}],defaultClosed:!0},{kind:"panel",name:"Shadows",items:[{kind:"input",name:"Saturation",identifier:"Shadows Saturation"},{kind:"input",name:"Contrast",identifier:"Shadows Contrast"},{kind:"input",name:"Gamma",identifier:"Shadows Gamma"},{kind:"input",name:"Gain",identifier:"Shadows Gain"},{kind:"input",name:"Offset",identifier:"Shadows Offset"}],defaultClosed:!0},{kind:"panel",name:"Tonal Range",items:[{kind:"input",name:"Midtones Start"},{kind:"input",name:"Midtones End"}],defaultClosed:!0},{kind:"panel",name:"Channels",items:[{kind:"input",name:"Red",identifier:"Apply On Red"},{kind:"input",name:"Green",identifier:"Apply On Green"},{kind:"input",name:"Blue",identifier:"Apply On Blue"}],defaultClosed:!0}]},_e={customSocketOrder:!0,items:[{kind:"output",name:"Image"},{kind:"input",name:"Image"},{kind:"input",name:"Factor",identifier:"Fac"},{kind:"input",name:"Spill Channel"},{kind:"input",name:"Limit Method"},{kind:"input",name:"Limit Channel"},{kind:"input",name:"Limit Strength"},{kind:"panel",name:"Spill Strength",items:[{kind:"input",name:"Use Spill Strength",panelToggle:!0},{kind:"input",name:"Strength",identifier:"Spill Strength"}],defaultClosed:!0}]},Me={customSocketOrder:!0,items:[{kind:"input",name:"Image"},{kind:"output",name:"Image",alignWithPrevious:!0},{kind:"output",name:"Plane"},{kind:"input",name:"Upper Left"},{kind:"input",name:"Upper Right"},{kind:"input",name:"Lower Left"},{kind:"input",name:"Lower Right"},{kind:"panel",name:"Sampling",items:[{kind:"input",name:"Interpolation"},{kind:"input",name:"Extension X"},{kind:"input",name:"Extension Y"}],defaultClosed:!0}]},ve={customSocketOrder:!0,items:[{kind:"input",name:"Image"},{kind:"output",name:"Image",alignWithPrevious:!0},{kind:"input",name:"Samples"},{kind:"input",name:"Center"},{kind:"input",name:"Rotation"},{kind:"input",name:"Scale"},{kind:"panel",name:"Translation",items:[{kind:"input",name:"Amount",identifier:"Translation Amount"},{kind:"input",name:"Direction",identifier:"Translation Direction"}]}]},Ae={customSocketOrder:!0,items:[{kind:"input",name:"Image"},{kind:"output",name:"Image",alignWithPrevious:!0},{kind:"input",name:"Displacement"},{kind:"panel",name:"Sampling",items:[{kind:"input",name:"Interpolation"},{kind:"input",name:"Extension X"},{kind:"input",name:"Extension Y"}],defaultClosed:!0}]},be={customSocketOrder:!0,items:[{kind:"input",name:"Image"},{kind:"output",name:"Image",alignWithPrevious:!0},{kind:"output",name:"Glare"},{kind:"output",name:"Highlights"},{kind:"input",name:"Type"},{kind:"input",name:"Quality"},{kind:"panel",name:"Highlights",items:[{kind:"input",name:"Threshold",identifier:"Highlights Threshold"},{kind:"input",name:"Smoothness",identifier:"Highlights Smoothness"},{kind:"panel",name:"Clamp",items:[{kind:"input",name:"Clamp",identifier:"Clamp Highlights",panelToggle:!0},{kind:"input",name:"Maximum",identifier:"Maximum Highlights"}],defaultClosed:!0}],defaultClosed:!0},{kind:"panel",name:"Adjust",items:[{kind:"input",name:"Strength"},{kind:"input",name:"Saturation"},{kind:"input",name:"Tint"}]},{kind:"panel",name:"Glare",items:[{kind:"input",name:"Size"},{kind:"input",name:"Streaks"},{kind:"input",name:"Streaks Angle"},{kind:"input",name:"Iterations"},{kind:"input",name:"Fade"},{kind:"input",name:"Color Modulation"},{kind:"input",name:"Diagonal",identifier:"Diagonal Star"},{kind:"input",name:"Sun Position"},{kind:"input",name:"Jitter"},{kind:"input",name:"Kernel Data Type"},{kind:"input",name:"Kernel",identifier:"Float Kernel"},{kind:"input",name:"Kernel",identifier:"Color Kernel"}]}]},De={customSocketOrder:!0,items:[{kind:"input",name:"Image"},{kind:"output",name:"Image",alignWithPrevious:!0},{kind:"output",name:"Matte"},{kind:"output",name:"Edges"},{kind:"input",name:"Key Color"},{kind:"panel",name:"Preprocess",items:[{kind:"input",name:"Blur Size",identifier:"Preprocess Blur Size"}],defaultClosed:!0},{kind:"panel",name:"Key",items:[{kind:"input",name:"Balance",identifier:"Key Balance"}],defaultClosed:!0},{kind:"panel",name:"Tweak",items:[{kind:"input",name:"Black Level"},{kind:"input",name:"White Level"},{kind:"panel",name:"Edges",items:[{kind:"input",name:"Size",identifier:"Edge Search Size"},{kind:"input",name:"Tolerance",identifier:"Edge Tolerance"}],defaultClosed:!0}],defaultClosed:!0},{kind:"panel",name:"Mask",items:[{kind:"input",name:"Garbage Matte"},{kind:"input",name:"Core Matte"}],defaultClosed:!0},{kind:"panel",name:"Postprocess",items:[{kind:"input",name:"Blur Size",identifier:"Postprocess Blur Size"},{kind:"input",name:"Dilate Size",identifier:"Postprocess Dilate Size"},{kind:"input",name:"Feather Size",identifier:"Postprocess Feather Size"},{kind:"input",name:"Feather Falloff"}],defaultClosed:!0},{kind:"panel",name:"Despill",items:[{kind:"input",name:"Strength",identifier:"Despill Strength"},{kind:"input",name:"Balance",identifier:"Despill Balance"}],defaultClosed:!0}]},Be={customSocketOrder:!0,items:[{kind:"input",name:"Image"},{kind:"output",name:"Image",alignWithPrevious:!0},{kind:"input",name:"UV"},{kind:"panel",name:"Sampling",items:[{kind:"input",name:"Interpolation"},{kind:"input",name:"Extension X"},{kind:"input",name:"Extension Y"}],defaultClosed:!0}]},Le={customSocketOrder:!0,items:[{kind:"output",name:"Mask"},{kind:"layout"},{kind:"input",name:"Size Source"},{kind:"input",name:"Size X"},{kind:"input",name:"Size Y"},{kind:"input",name:"Feather"},{kind:"panel",name:"Motion Blur",items:[{kind:"input",name:"Motion Blur",panelToggle:!0},{kind:"input",name:"Samples",identifier:"Motion Blur Samples"},{kind:"input",name:"Shutter",identifier:"Motion Blur Shutter"}],defaultClosed:!0}]},$e={customSocketOrder:!0,items:[{kind:"input",name:"Image"},{kind:"output",name:"Image",alignWithPrevious:!0},{kind:"output",name:"Plane"},{kind:"layout"},{kind:"panel",name:"Motion Blur",items:[{kind:"input",name:"Motion Blur",panelToggle:!0},{kind:"input",name:"Samples",identifier:"Motion Blur Samples"},{kind:"input",name:"Shutter",identifier:"Motion Blur Shutter"}],defaultClosed:!0}]},je={customSocketOrder:!0,items:[{kind:"input",name:"Image"},{kind:"output",name:"Image",alignWithPrevious:!0},{kind:"input",name:"Angle"},{kind:"panel",name:"Sampling",items:[{kind:"input",name:"Interpolation"},{kind:"input",name:"Extension X"},{kind:"input",name:"Extension Y"}],defaultClosed:!0}]},Fe={customSocketOrder:!0,items:[{kind:"input",name:"Image"},{kind:"output",name:"Image",alignWithPrevious:!0},{kind:"input",name:"Type"},{kind:"input",name:"X"},{kind:"input",name:"Y"},{kind:"input",name:"Frame Type"},{kind:"panel",name:"Sampling",items:[{kind:"input",name:"Interpolation"},{kind:"input",name:"Extension X"},{kind:"input",name:"Extension Y"}],defaultClosed:!0}]},Ge={customSocketOrder:!0,items:[{kind:"input",name:"Image"},{kind:"output",name:"Image",alignWithPrevious:!0},{kind:"layout"},{kind:"input",name:"Frame"},{kind:"input",name:"Invert"},{kind:"panel",name:"Sampling",items:[{kind:"input",name:"Interpolation"},{kind:"input",name:"Extension X"},{kind:"input",name:"Extension Y"}],defaultClosed:!0}]},We={customSocketOrder:!0,items:[{kind:"output",name:"Image"},{kind:"input",name:"String"},{kind:"input",name:"Font"},{kind:"input",name:"Size"},{kind:"panel",name:"Alignment",items:[{kind:"input",name:"Horizontal Alignment"},{kind:"input",name:"Vertical Alignment"}],defaultClosed:!0},{kind:"panel",name:"Wrap",items:[{kind:"input",name:"Wrap",panelToggle:!0},{kind:"input",name:"Width",identifier:"Wrap Width"}],defaultClosed:!0}]},He={customSocketOrder:!0,items:[{kind:"input",name:"Image"},{kind:"output",name:"Image",alignWithPrevious:!0},{kind:"input",name:"X"},{kind:"input",name:"Y"},{kind:"input",name:"Angle"},{kind:"input",name:"Scale"},{kind:"panel",name:"Sampling",items:[{kind:"input",name:"Interpolation"},{kind:"input",name:"Extension X"},{kind:"input",name:"Extension Y"}],defaultClosed:!0}]},Ue={customSocketOrder:!0,items:[{kind:"input",name:"Image"},{kind:"output",name:"Image",alignWithPrevious:!0},{kind:"input",name:"X"},{kind:"input",name:"Y"},{kind:"panel",name:"Sampling",items:[{kind:"input",name:"Interpolation"},{kind:"input",name:"Extension X"},{kind:"input",name:"Extension Y"}],defaultClosed:!0}]},Ye={customSocketOrder:!0,items:[{kind:"output",name:"Matrix"},{kind:"panel",name:"Column 1",items:[{kind:"input",name:"Column 1 Row 1"},{kind:"input",name:"Column 1 Row 2"},{kind:"input",name:"Column 1 Row 3"},{kind:"input",name:"Column 1 Row 4"}],defaultClosed:!0},{kind:"panel",name:"Column 2",items:[{kind:"input",name:"Column 2 Row 1"},{kind:"input",name:"Column 2 Row 2"},{kind:"input",name:"Column 2 Row 3"},{kind:"input",name:"Column 2 Row 4"}],defaultClosed:!0},{kind:"panel",name:"Column 3",items:[{kind:"input",name:"Column 3 Row 1"},{kind:"input",name:"Column 3 Row 2"},{kind:"input",name:"Column 3 Row 3"},{kind:"input",name:"Column 3 Row 4"}],defaultClosed:!0},{kind:"panel",name:"Column 4",items:[{kind:"input",name:"Column 4 Row 1"},{kind:"input",name:"Column 4 Row 2"},{kind:"input",name:"Column 4 Row 3"},{kind:"input",name:"Column 4 Row 4"}],defaultClosed:!0}]},ze={customSocketOrder:!0,items:[{kind:"panel",name:"Column 1",items:[{kind:"output",name:"Column 1 Row 1"},{kind:"output",name:"Column 1 Row 2"},{kind:"output",name:"Column 1 Row 3"},{kind:"output",name:"Column 1 Row 4"}],defaultClosed:!0},{kind:"panel",name:"Column 2",items:[{kind:"output",name:"Column 2 Row 1"},{kind:"output",name:"Column 2 Row 2"},{kind:"output",name:"Column 2 Row 3"},{kind:"output",name:"Column 2 Row 4"}],defaultClosed:!0},{kind:"panel",name:"Column 3",items:[{kind:"output",name:"Column 3 Row 1"},{kind:"output",name:"Column 3 Row 2"},{kind:"output",name:"Column 3 Row 3"},{kind:"output",name:"Column 3 Row 4"}],defaultClosed:!0},{kind:"panel",name:"Column 4",items:[{kind:"output",name:"Column 4 Row 1"},{kind:"output",name:"Column 4 Row 2"},{kind:"output",name:"Column 4 Row 3"},{kind:"output",name:"Column 4 Row 4"}],defaultClosed:!0},{kind:"input",name:"Matrix"}]},Ve={customSocketOrder:!0,items:[{kind:"input",name:"String"},{kind:"output",name:"String",alignWithPrevious:!0},{kind:"input",name:"Characters"},{kind:"input",name:"Whitespace"},{kind:"panel",name:"Limit",items:[{kind:"input",name:"Start"},{kind:"input",name:"End"}],defaultClosed:!0}]},Xe={customSocketOrder:!0,items:[{kind:"output",name:"Topology"},{kind:"input",name:"Bounds Min"},{kind:"input",name:"Bounds Max"},{kind:"input",name:"Resolution X"},{kind:"input",name:"Resolution Y"},{kind:"input",name:"Resolution Z"},{kind:"panel",name:"Min",items:[{kind:"input",name:"Min X"},{kind:"input",name:"Min Y"},{kind:"input",name:"Min Z"}],defaultClosed:!0}]},Ke={customSocketOrder:!0,conditional:!0,items:[{kind:"output",name:"Geometry"},{kind:"input",name:"",identifier:"__extend__main"},{kind:"output",name:"",identifier:"__extend__main",alignWithPrevious:!0},{kind:"panel",name:"Generated",items:[{kind:"separator"},{kind:"input",name:"",identifier:"__extend__generation"},{kind:"output",name:"",identifier:"__extend__generation",alignWithPrevious:!0}]}]},Ze={customSocketOrder:!0,items:[{kind:"output",name:"Names"},{kind:"input",name:"Geometry"},{kind:"panel",name:"Filter Data Type",items:[{kind:"input",name:"Filter Data Type",panelToggle:!0},{kind:"input",name:"Data Type"}]},{kind:"panel",name:"Filter Domain",items:[{kind:"input",name:"Filter Domain",panelToggle:!0},{kind:"input",name:"Domain"}]}]},qe={customSocketOrder:!0,conditional:!0,items:[{kind:"layout"},{kind:"output",name:"Points"},{kind:"output",name:"Value"},{kind:"panel",name:"Voxel Index",items:[{kind:"output",name:"X"},{kind:"output",name:"Y"},{kind:"output",name:"Z"},{kind:"output",name:"Is Tile"},{kind:"output",name:"Extent"}],defaultClosed:!0},{kind:"input",name:"Grid"}]},Je={customSocketOrder:!0,items:[{kind:"output",name:"X"},{kind:"output",name:"Y"},{kind:"output",name:"Z"},{kind:"panel",name:"Tile",items:[{kind:"output",name:"Is Tile"},{kind:"output",name:"Extent X"},{kind:"output",name:"Extent Y"},{kind:"output",name:"Extent Z"}],defaultClosed:!0}]},Qe={customSocketOrder:!0,items:[{kind:"input",name:"Mesh"},{kind:"output",name:"Mesh",alignWithPrevious:!0},{kind:"input",name:"Selection"},{kind:"input",name:"Affect Kind"},{kind:"input",name:"Start Left Offset"},{kind:"input",name:"Start Right Offset"},{kind:"input",name:"End Left Offset"},{kind:"input",name:"End Right Offset"},{kind:"input",name:"Offset"},{kind:"input",name:"Miter"},{kind:"input",name:"Spread"},{kind:"input",name:"Segments"},{kind:"input",name:"Shape"},{kind:"input",name:"Profile"},{kind:"panel",name:"Selections",items:[{kind:"output",name:"Vertex Face"},{kind:"output",name:"Edge Face"},{kind:"output",name:"Outer Edge"},{kind:"output",name:"Mid Edge"}]}]},en={customSocketOrder:!0,items:[{kind:"output",name:"Amplitude"},{kind:"input",name:"Sound"},{kind:"input",name:"Time"},{kind:"input",name:"All Channels"},{kind:"input",name:"Channel"},{kind:"input",name:"Low"},{kind:"input",name:"High"},{kind:"panel",name:"FFT",items:[{kind:"input",name:"FFT Size"},{kind:"input",name:"Window Function"}],defaultClosed:!0}]},nn={customSocketOrder:!0,items:[{kind:"output",name:"Curve Instances"},{kind:"output",name:"Remainder"},{kind:"output",name:"Line"},{kind:"output",name:"Word"},{kind:"output",name:"Pivot Point"},{kind:"input",name:"String"},{kind:"input",name:"Size"},{kind:"input",name:"Font"},{kind:"panel",name:"Alignment",items:[{kind:"input",name:"Align X"},{kind:"input",name:"Align Y"},{kind:"input",name:"Pivot Point"}],defaultClosed:!0},{kind:"panel",name:"Spacing",items:[{kind:"input",name:"Character Spacing"},{kind:"input",name:"Word Spacing"},{kind:"input",name:"Line Spacing"}],defaultClosed:!0},{kind:"panel",name:"Text Box",items:[{kind:"input",name:"Overflow"},{kind:"input",name:"Text Box Width"},{kind:"input",name:"Text Box Height"}],defaultClosed:!0}]},tn={customSocketOrder:!0,conditional:!0,items:[{kind:"input",name:"Target"},{kind:"output",name:"Target",alignWithPrevious:!0},{kind:"output",name:"Transferred Names"},{kind:"panel",name:"Target IDs",items:[],defaultClosed:!0},{kind:"input",name:"Source"},{kind:"panel",name:"Source IDs",items:[],defaultClosed:!0},{kind:"input",name:"Pattern Mode"},{kind:"input",name:"Attribute Names"},{kind:"input",name:"Exclude Names"}]},an={customSocketOrder:!0,items:[{kind:"input",name:"World"},{kind:"output",name:"World",alignWithPrevious:!0},{kind:"input",name:"Delta Time"},{kind:"input",name:"Filter"},{kind:"input",name:"Simulation to World"},{kind:"panel",name:"Solver",items:[{kind:"input",name:"Substeps"},{kind:"input",name:"Constraint Iterations"},{kind:"input",name:"Solver Path"}],defaultClosed:!0},{kind:"panel",name:"Interpolation Range",items:[{kind:"input",name:"Begin"},{kind:"input",name:"End"}],defaultClosed:!0}]},on={customSocketOrder:!0,conditional:!0,items:[{kind:"input",name:"Closure"},{kind:"panel",name:"Interface",items:[{kind:"output",name:"",identifier:"__extend__"},{kind:"input",name:"",identifier:"__extend__"}]}]},rn={customSocketOrder:!0,items:[{kind:"output",name:"BSDF"},{kind:"layout"},{kind:"input",name:"Color"},{kind:"input",name:"Roughness"},{kind:"input",name:"IOR"},{kind:"input",name:"Normal"},{kind:"input",name:"Weight",conditional:!0},{kind:"panel",name:"Thin Film",items:[{kind:"input",name:"Thin Film Thickness"},{kind:"input",name:"Thin Film IOR"}],defaultClosed:!0}]},un={customSocketOrder:!0,items:[{kind:"output",name:"BSDF"},{kind:"layout"},{kind:"input",name:"Base Color"},{kind:"input",name:"Edge Tint"},{kind:"input",name:"IOR"},{kind:"input",name:"Extinction"},{kind:"input",name:"Roughness"},{kind:"input",name:"Anisotropy"},{kind:"input",name:"Rotation"},{kind:"input",name:"Normal"},{kind:"input",name:"Tangent"},{kind:"input",name:"Weight",conditional:!0},{kind:"panel",name:"Thin Film",items:[{kind:"input",name:"Thin Film Thickness"},{kind:"input",name:"Thin Film IOR"}],defaultClosed:!0}]},sn={customSocketOrder:!0,items:[{kind:"output",name:"BSDF"},{kind:"input",name:"Base Color"},{kind:"input",name:"Metallic"},{kind:"input",name:"Roughness"},{kind:"input",name:"IOR"},{kind:"input",name:"Alpha"},{kind:"input",name:"Thin Wall"},{kind:"input",name:"Normal"},{kind:"input",name:"Weight",conditional:!0},{kind:"panel",name:"Diffuse",items:[{kind:"input",name:"Diffuse Roughness"}],defaultClosed:!0},{kind:"panel",name:"Subsurface",items:[{kind:"layout"},{kind:"input",name:"Subsurface Weight"},{kind:"input",name:"Subsurface Radius"},{kind:"input",name:"Subsurface Scale"},{kind:"input",name:"Subsurface IOR"},{kind:"input",name:"Subsurface Anisotropy"}],defaultClosed:!0},{kind:"panel",name:"Specular",items:[{kind:"layout"},{kind:"input",name:"Specular IOR Level"},{kind:"input",name:"Specular Tint"},{kind:"input",name:"Anisotropic"},{kind:"input",name:"Anisotropic Rotation"},{kind:"input",name:"Tangent"}],defaultClosed:!0},{kind:"panel",name:"Transmission",items:[{kind:"input",name:"Transmission Weight"}],defaultClosed:!0},{kind:"panel",name:"Coat",items:[{kind:"input",name:"Coat Weight"},{kind:"input",name:"Coat Roughness"},{kind:"input",name:"Coat IOR"},{kind:"input",name:"Coat Tint"},{kind:"input",name:"Coat Normal"}],defaultClosed:!0},{kind:"panel",name:"Sheen",items:[{kind:"input",name:"Sheen Weight"},{kind:"input",name:"Sheen Roughness"},{kind:"input",name:"Sheen Tint"}],defaultClosed:!0},{kind:"panel",name:"Emission",items:[{kind:"input",name:"Emission Color"},{kind:"input",name:"Emission Strength"}],defaultClosed:!0},{kind:"panel",name:"Thin Film",items:[{kind:"input",name:"Thin Film Thickness"},{kind:"input",name:"Thin Film IOR"}],defaultClosed:!0}]},dn={customSocketOrder:!0,conditional:!0,items:[{kind:"layout"},{kind:"output",name:"Is Hit"},{kind:"output",name:"Self Hit"},{kind:"output",name:"Hit Distance"},{kind:"output",name:"Hit Position"},{kind:"output",name:"Hit Normal"},{kind:"input",name:"Position"},{kind:"input",name:"Direction"},{kind:"input",name:"Length"},{kind:"panel",name:"Attributes",items:[{kind:"input",name:"",identifier:"__extend__"},{kind:"output",name:"",identifier:"__extend__",alignWithPrevious:!0}],defaultClosed:!0}]},ln={customSocketOrder:!0,items:[{kind:"output",name:"Volume"},{kind:"input",name:"Weight",conditional:!0},{kind:"panel",name:"Absorption",items:[{kind:"input",name:"Absorption Coefficients"}]},{kind:"panel",name:"Scatter",items:[{kind:"layout"},{kind:"input",name:"Scatter Coefficients"},{kind:"input",name:"Anisotropy"},{kind:"input",name:"IOR"},{kind:"input",name:"Backscatter"},{kind:"input",name:"Alpha"},{kind:"input",name:"Diameter"}]},{kind:"panel",name:"Emission",items:[{kind:"input",name:"Emission Coefficients"}]}]},mn={CompositorNodeColorBalance:Re,CompositorNodeColorCorrection:Pe,CompositorNodeColorSpill:_e,CompositorNodeCornerPin:Me,CompositorNodeDBlur:ve,CompositorNodeDisplace:Ae,CompositorNodeGlare:be,CompositorNodeKeying:De,CompositorNodeMapUV:Be,CompositorNodeMask:Le,CompositorNodePlaneTrackDeform:$e,CompositorNodeRotate:je,CompositorNodeScale:Fe,CompositorNodeStabilize:Ge,CompositorNodeStringToImage:We,CompositorNodeTransform:He,CompositorNodeTranslate:Ue,FunctionNodeCombineMatrix:Ye,FunctionNodeSeparateMatrix:ze,FunctionNodeTrimString:Ve,GeometryNodeCubeGridTopology:Xe,GeometryNodeForeachGeometryElementOutput:Ke,GeometryNodeGetAttributeNames:Ze,GeometryNodeGridToPoints:qe,GeometryNodeInputVoxelIndex:Je,GeometryNodeMeshBevel:Qe,GeometryNodeSampleSoundFrequencies:en,GeometryNodeStringToCurves:nn,GeometryNodeTransferAttributes:tn,GeometryNodeXPBDSolver:an,NodeEvaluateClosure:on,ShaderNodeBsdfGlass:rn,ShaderNodeBsdfMetallic:un,ShaderNodeBsdfPrincipled:sn,ShaderNodeRaycast:dn,ShaderNodeVolumeCoefficients:ln},I=20,N=1,S=I,O=I/2,D=.2*I,me=.25*I,Z=1.2*I,_=.1*I,pn=.8*I,w=.5,Y=D+w,cn=D+N,ne=2.5,kn=.2,fn=S*.5,z=S*-.5,hn=me,gn=1.5*I,R=11,h={sliderFill:"#4671b2",background:"#1a1a1a",body:"#303030",outline:"#ffffff",outlineAlpha:38/255,select:"#ed5700",active:"#ffffff",wireInner:"#8d8d8d",wire:"#1a1a1a",noodleCurving:4,dashAlpha:.5,text:"#e6e6e6",frame:"#0f0f0f",frameAlpha:204/255},Sn={INPUT:"#82354c",OUTPUT:"#3e232a",CONVERTER:"#246283",COLOR:"#6e6e23",VECTOR:"#3c3c83",FILTER:"#412b51",GROUP:"#374725",INTERFACE:"#1d1d1d",MATTE:"#5a3838",DISTORT:"#3e5a5b",TEXTURE:"#79461d",SHADER:"#2b652b",SCRIPT:"#203c3c",GEOMETRY:"#1d725e",ATTRIBUTE:"#1d2546",NONE:h.body,PATTERN:h.body},xn={VALUE:"#a1a1a1",VECTOR:"#6363c7",RGBA:"#c7c729",SHADER:"#63c763",BOOLEAN:"#cca6d6",INT:"#598c5c",STRING:"#70b3ff",OBJECT:"#ed9e5c",IMAGE:"#633863",GEOMETRY:"#00d6a3",COLLECTION:"#f5f5f5",TEXTURE:"#9e4fa3",MATERIAL:"#eb7582",ROTATION:"#a663c7",MENU:"#666666",MATRIX:"#b83385",BUNDLE:"#4d8080",CLOSURE:"#7d7d3b",FONT:"#635742",SOUND:"#635742",INT_VECTOR:"#5c789c",CUSTOM:"#333333"},yn="#ff00ff",pe=h.wire,Cn="#808080",F=N;function A(e){return e.enabled&&!e.hide}function V(e){const n=e.location[0]??0,a=e.location[1]??0,r=e.width,t=e.outputs.filter(A),o=e.inputs.filter(A);if(e.collapsed){const p=fn,m=p*Math.max(o.length,t.length,2)+D*2,x=a+m/2+z,c=a-m/2+z,k=(g,C)=>{let y=a+p*(g.length-1)*.5+z;return g.map(E=>{const P=M(E,C,C?n+r:n,y,y);return y-=p,P})};return{name:e.name,x:n,yTop:x,yBottom:c,width:r,collapsed:!0,sockets:[...k(t,!0),...k(o,!1)]}}let d=a-S;const u=[],l=(p,m)=>{const x=d;u.push(M(p,m,m?n+r:n,x-O,x)),d=x-S};return(t.length>0||o.length>0)&&(d-=2*_),t.forEach((p,m)=>{m>0&&(d-=_),l(p,!0)}),t.length>0&&o.length>0&&(d-=_),o.forEach((p,m)=>{(m>0||t.length>0)&&m>0&&(d-=_),l(p,!1)}),t.length>0||o.length>0?d-=2*_:d-=O,{name:e.name,x:n,yTop:a,yBottom:Math.min(d,a-2*S),width:r,collapsed:!1,sockets:u}}function M(e,n,a,r,t,o=!1){return{identifier:e.identifier,name:e.label??e.name,type:e.type,shape:e.shape,output:n,linked:e.linked,multiInput:e.multiInput,hideValue:e.hideValue,value:e.value,...e.softMin===void 0?{}:{softMin:e.softMin},...e.softMax===void 0?{}:{softMax:e.softMax},x:a,y:r,rowTop:t,panelCollapsed:o}}function Tn(e,n,a=h.noodleCurving){if(a===0)return[[e[0]+(n[0]-e[0])/3,e[1]+(n[1]-e[1])/3],[e[0]+(n[0]-e[0])*2/3,e[1]+(n[1]-e[1])*2/3]];const r=Math.abs(n[0]-e[0]),t=Math.abs(n[1]-e[1]),o=r===0?Number.POSITIVE_INFINITY:t/r,d=Math.min(1,o*(4.5-.25*a)),u=a*.1*r*d;return[[e[0]+u,e[1]],[n[0]-u,n[1]]]}function K(e){return e.idname==="NodeFrame"?h.frame:e.colorTag==="OUTPUT"&&!e.activeOutput?h.body:Sn[e.colorTag]??h.body}function te(e){return e.useCustomColor?b(e.color):h.body}function b(e){const n=a=>Math.round(Math.min(1,Math.max(0,a))*255).toString(16).padStart(2,"0");return`#${n(e[0]??0)}${n(e[1]??0)}${n(e[2]??0)}`}function ie(e,n){const a=ae(h.background),r=ae(e);return b([r[0]*(1-n)+a[0]*n,r[1]*(1-n)+a[1]*n,r[2]*(1-n)+a[2]*n])}const En=.6,wn=.8,On=.2;function ae(e){const n=Number.parseInt(e.slice(1),16);return[(n>>16&255)/255,(n>>8&255)/255,(n&255)/255]}function G(e){return xn[e]??yn}const oe=O,X=Z/3,re=Z/4,In=I,j={cell:8,reach:4,spread:3.64648,stroke:1},Nn="#000000",Rn=31/255*1.5,$=e=>e.identifier??e.name;function Pn(e,n,a){if(!e.customSocketOrder)return{ok:!1,why:"its declaration does not set use_custom_socket_order, so Blender lays it out the legacy way"};const r=[],t=[],o=l=>{for(const p of l)p.kind==="input"?r.push($(p)):p.kind==="output"?t.push($(p)):p.kind==="panel"&&o(p.items)};o(e.items);const d=(l,p,m)=>{if(l.length!==p.length)return`the declaration names ${l.length} ${m}${l.length===1?"":"s"} and the engine reports ${p.length}`;for(let x=0;x<l.length;x++)if(l[x]!==p[x]?.identifier)return`${m} ${x} is "${p[x]?.identifier}" in the engine and "${l[x]}" in the declaration`;return null},u=d(t,a,"output")??d(r,n,"input");return u===null?{ok:!0}:{ok:!1,why:u}}const _n={Socket:2,Separator:.5,Layout:3,PanelHeader:4},Mn={Socket:2,Separator:1,Layout:5,PanelHeader:4,PanelContentEnd:1},vn={Socket:{Socket:1,Separator:0,Layout:2,PanelHeader:3,PanelContentEnd:2},Layout:{Socket:2,Separator:0,Layout:1,PanelHeader:3,PanelContentEnd:2},Separator:{Socket:2,Separator:1,Layout:1,PanelHeader:1,PanelContentEnd:1},PanelHeader:{Socket:4,Separator:3,Layout:3,PanelHeader:5,PanelContentBegin:3,PanelContentEnd:3},PanelContentBegin:{Socket:2,Separator:1,Layout:2,PanelHeader:3,PanelContentEnd:1},PanelContentEnd:{Socket:1,Separator:1,Layout:1,PanelHeader:3,PanelContentEnd:0}};function ce(e,n,a,r,t,o,d){let u=!1;for(const l of e){if(l.kind==="input"||l.kind==="output"){const y=n.get(`${l.kind}:${$(l)}`);if(!y||!A(y)){u=!1;continue}const E=o[o.length-1];if(l.alignWithPrevious===!0&&u&&E&&E.type==="Socket"){o[o.length-1]={type:"Socket",input:l.kind==="input"?y:E.input,output:l.kind==="output"?y:E.output},u=!0;continue}o.push({type:"Socket",input:l.kind==="input"?y:void 0,output:l.kind==="output"?y:void 0}),u=!0;continue}if(u=!1,l.kind==="separator"){o.push({type:"Separator"});continue}if(l.kind==="layout"){r&&o.push({type:"Layout"});continue}if(l.kind!=="panel")continue;const p=l.items[0],m=p&&p.kind==="input"&&p.panelToggle===!0?p:null,x=m?n.get(`input:${$(m)}`)??null:null,c=[],k=y=>{for(const E of y)if(E.kind==="input"||E.kind==="output"){const P=n.get(`${E.kind}:${$(E)}`);P&&c.push(P)}else E.kind==="panel"&&k(E.items)};if(k(l.items),!c.some(A))continue;const g=a(l.defaultClosed===!0),C={name:l.name,depth:t,collapsed:g,toggle:x,owned:c,centerY:0,contentTop:null,contentBottom:null,fillsNodeEnd:!1};d.push(C),o.push({type:"PanelHeader",panel:C}),!g&&(o.push({type:"PanelContentBegin",panel:C}),ce(l.items.filter(y=>y!==m),n,a,r,t+1,o,d),o.push({type:"PanelContentEnd",panel:C}))}}function An(e){const n=e.location[0]??0,a=e.location[1]??0,r=e.width,t=new Map;for(const c of e.inputs)t.set(`input:${c.identifier}`,c);for(const c of e.outputs)t.set(`output:${c.identifier}`,c);let o=0;const d=e.panelStates,u=[],l=[];ce(e.declaration.items,t,c=>d[o++]?.collapsed??c,e.showOptions,0,u,l);const p=[];let m=a-S;u.length===0&&(m-=O);for(let c=0;c<u.length;c++){const k=u[c];if(!k)continue;const g=u[c-1],C=c===0?_n[k.type]??0:vn[g?.type??"Socket"]?.[k.type]??0;if(m-=C*_,k.type==="Socket"){const y=m;k.output&&p.push(M(k.output,!0,n+r,y-O,y)),k.input&&p.push(M(k.input,!1,n,y-O,y)),m=y-S;continue}if(k.type==="Layout"||k.type==="Separator"){m-=S;continue}if(k.type==="PanelHeader"&&k.panel){m-=oe/2,k.panel.centerY=m,m-=oe/2,k.panel.toggle&&p.push(M(k.panel.toggle,!1,n,k.panel.centerY,k.panel.centerY));continue}k.type==="PanelContentBegin"&&k.panel&&(k.panel.contentTop=m),k.type==="PanelContentEnd"&&k.panel&&(k.panel.contentBottom=m)}const x=u[u.length-1];x&&(m-=(Mn[x.type]??0)*_);for(const c of l)if(c.collapsed)for(const k of c.owned){if(!A(k))continue;const g=e.outputs.includes(k);p.push(M(k,g,g?n+r:n,c.centerY,c.centerY,!0))}for(let c=u.length-1;c>=0;c--){const k=u[c];if(!k||k.type!=="PanelContentEnd")break;k.panel&&(k.panel.fillsNodeEnd=!0)}return{name:e.name,x:n,yTop:a,yBottom:Math.min(m,a-2*S),width:r,collapsed:!1,sockets:p,panels:l.map(c=>({name:c.name,depth:c.depth,collapsed:c.collapsed,centerY:c.centerY,contentTop:c.contentTop,contentBottom:c.contentBottom,fillsNodeEnd:c.fillsNodeEnd,toggle:c.toggle?M(c.toggle,!1,n,c.centerY,c.centerY):null}))}}function bn(e){const n=a=>a.some(r=>r.kind==="layout"?!0:r.kind==="panel"?n(r.items):!1);return n(e.items)}const dt="workspace.document",lt="Shader Editor";Ce(Ne);const Dn=320,ue=.1,se=4;function mt(){const e=T.useSyncExternalStore(Te,Q,Q),[n,a]=T.useState(null),[r,t]=T.useState(null),o=T.useRef(null),d=T.useRef(!1);T.useSyncExternalStore(Ee,ee,ee);const{transform:u,looked:l,refusal:p,size:m}=U(),x=T.useCallback(s=>{const f=U().transform;B({transform:typeof s=="function"?s(f):s})},[]),c=T.useCallback(s=>{B({looked:s,refusal:null})},[]),k=T.useCallback(s=>{const f=U().size;f.w===s.w&&f.h===s.h||B({size:s})},[]),g=T.useCallback(s=>{we(s)},[]);T.useEffect(()=>{let s=!0;return(async()=>{try{const f=await Oe();if(!s)return;a(f),t(null)}catch(f){if(!s)return;t(f instanceof Error?f.message:String(f))}})(),()=>{s=!1}},[e]),T.useEffect(()=>{const s=o.current;if(!s)return;const f=new ResizeObserver(()=>{k({w:s.clientWidth,h:s.clientHeight})});return f.observe(s),k({w:s.clientWidth,h:s.clientHeight}),()=>f.disconnect()},[]);const C=T.useMemo(()=>jn(n),[n]);T.useEffect(()=>{B({drawn:[...C.frames,...C.nodes].map(({node:s,laid:f,panels:v,fallback:ye})=>{const J=f.sockets.find(H=>!H.panelCollapsed)??f.sockets[0];return{panels:v.length,collapsedPanels:v.filter(H=>H.collapsed).length,panelFallback:ye,name:s.name,x:f.x,yTop:f.yTop,yBottom:f.yBottom,width:f.width,height:f.yTop-f.yBottom,sockets:f.sockets.length,firstSocketBelowTop:J?f.yTop-J.y:null,header:K(s)}})})},[C]);const y=T.useCallback(()=>{const s=Fn(C.nodes);if(!s)return;const f=de(Math.min(m.w/(s.w+2*S),m.h/(s.h+2*S)),ue,se);B({transform:{cx:s.x+s.w/2,cy:s.y-s.h/2,zoom:f},framedAt:Date.now()})},[C.nodes,m.h,m.w]),E=Ie(),P=T.useRef(0);T.useEffect(()=>{E!==P.current&&(P.current=E,y())},[E,y]),T.useEffect(()=>{d.current||C.nodes.length===0||m.w<=1||(d.current=!0,y())},[C.nodes.length,m.w,y]);const W=T.useRef(null),fe=s=>{s.button===1&&(s.preventDefault(),s.target.setPointerCapture?.(s.pointerId),W.current={x:s.clientX,y:s.clientY,cx:u.cx,cy:u.cy})},he=s=>{const f=W.current;f&&x(v=>({...v,cx:f.cx-(s.clientX-f.x)/v.zoom,cy:f.cy+(s.clientY-f.y)/v.zoom}))},q=()=>{W.current=null},ge=s=>{s.preventDefault(),x(f=>({...f,zoom:de(f.zoom*(s.deltaY<0?1.1:1/1.1),ue,se)}))},Se=n?.nodes.find(s=>s.name===l)??null,xe=u.zoom>kn;return i.jsxs("div",{"data-testid":"blender-node-editor",style:{display:"flex",position:"absolute",inset:0,overflow:"hidden"},children:[i.jsxs("div",{style:{display:"flex",flexDirection:"column",flex:1,minWidth:0,minHeight:0},children:[i.jsx(Xn,{tree:n,zoom:u.zoom,onViewAll:y,onRefuse:g}),i.jsx("div",{ref:o,style:{position:"relative",flex:1,minHeight:0},children:i.jsx("svg",{role:"presentation",width:"100%",height:"100%",onPointerDown:fe,onPointerMove:he,onPointerUp:q,onPointerCancel:q,onWheel:ge,onContextMenu:s=>{s.preventDefault(),g("The node context menu adds, deletes and reconnects nodes — editing.")},style:{display:"block",background:h.background,cursor:"default"},children:i.jsxs("g",{transform:`translate(${m.w/2} ${m.h/2}) scale(${u.zoom} ${-u.zoom}) translate(${-u.cx} ${-u.cy})`,children:[C.frames.map(s=>i.jsx(Vn,{node:s.node,laid:s.laid},s.node.name)),C.links.map(s=>i.jsx(zn,{link:s},s.key)),C.nodes.map(s=>i.jsx(Gn,{node:s.node,laid:s.laid,panels:s.panels,looked:s.node.name===l,details:xe,onLook:()=>c(s.node.name),onRefuse:g},s.node.name))]})})}),i.jsx(Kn,{entries:C.nodes,error:r,refusal:p})]}),i.jsx(Zn,{node:Se,onRefuse:g})]})}const Bn=26,Ln=22,$n=mn;function jn(e){if(!e)return{nodes:[],frames:[],links:[]};const n=new Map,a=e.nodes.map(t=>{const o={name:t.name,location:t.location,width:t.width,collapsed:t.collapsed,inputs:t.inputs,outputs:t.outputs},d=t.collapsed?void 0:$n[t.idname];if(t.panelCount>0&&!d){const l=V(o);return n.set(t.name,l),{node:t,laid:l,panels:[],fallback:t.collapsed?null:"no traced declaration — the trace covers the 36 node types that declare a panel in Blender 5.2.0, and a node group’s panels are runtime data",approximate:!1}}if(d){const l=Pn(d,t.inputs,t.outputs);if(l.ok){const m=An({...o,declaration:d,panelStates:t.panels,showOptions:t.showOptions});return n.set(t.name,m),{node:t,laid:m,panels:m.panels,fallback:null,approximate:bn(d)}}const p=V(o);return n.set(t.name,p),{node:t,laid:p,panels:[],fallback:l.why,approximate:!1}}const u=V(o);return n.set(t.name,u),{node:t,laid:u,panels:[],fallback:null,approximate:!1}}),r=e.links.flatMap((t,o)=>{const d=n.get(t.fromNode),u=n.get(t.toNode);if(!d||!u)return[];const l=d.sockets.find(m=>m.output&&m.identifier===t.fromSocket),p=u.sockets.find(m=>!m.output&&m.identifier===t.toSocket);return!l||!p?[]:[{key:`${t.fromNode}.${t.fromSocket}→${t.toNode}.${t.toSocket}#${o}`,from:[l.x,l.y],to:[p.x,p.y],fromColor:G(l.type),toColor:G(p.type),muted:t.muted,valid:t.valid}]});return{nodes:a.filter(t=>t.node.idname!=="NodeFrame"),frames:a.filter(t=>t.node.idname==="NodeFrame"),links:r}}function Fn(e){if(e.length===0)return null;let n=Number.POSITIVE_INFINITY,a=Number.NEGATIVE_INFINITY,r=Number.POSITIVE_INFINITY,t=Number.NEGATIVE_INFINITY;for(const{laid:o}of e)n=Math.min(n,o.x),a=Math.max(a,o.x+o.width),r=Math.min(r,o.yBottom),t=Math.max(t,o.yTop);return{x:n,y:t,w:a-n,h:t-r}}const de=(e,n,a)=>Math.min(a,Math.max(n,e));function Gn({node:e,laid:n,panels:a,looked:r,details:t,onLook:o,onRefuse:d}){if(e.type==="REROUTE"){const g=n.sockets[0];return i.jsx("circle",{cx:n.x,cy:n.yTop,r:hn,fill:g?G(g.type):h.wireInner,stroke:pe,strokeWidth:F,onPointerDown:C=>{C.button===0&&o()}})}const u=e.muted?ie(K(e),En):K(e),l=e.muted?ie(te(e),wn):te(e),p=e.muted?1-On:1,m=e.selected?e.activeOutput||r?h.active:h.select:h.outline,x=e.selected?1:h.outlineAlpha,c=n.yTop-n.yBottom,k=e.label??e.typeLabel;return i.jsxs("g",{opacity:p,onPointerDown:g=>{g.button===0&&o()},onDoubleClick:()=>d(`Renaming "${e.name}" writes Node.name — editing parity is not the program.`),style:{cursor:"default"},children:[n.collapsed?i.jsx("rect",{x:n.x-w,y:-n.yTop-w,width:n.width+2*w,height:c+2*w,rx:Y,fill:u,transform:"scale(1 -1)"}):i.jsxs(i.Fragment,{children:[i.jsx("rect",{x:n.x-w,y:-(n.yTop-S)-w,width:n.width+2*w,height:c-S+2*w,rx:Y,fill:l,transform:"scale(1 -1)"}),i.jsx("rect",{x:n.x-w,y:-n.yTop-w,width:n.width+2*w,height:S+2*w,rx:Y,fill:u,transform:"scale(1 -1)"}),i.jsx("rect",{x:n.x-w,y:-(n.yTop-S)-w,width:n.width+2*w,height:D,fill:u,transform:"scale(1 -1)"}),a.map(g=>i.jsx(Wn,{panel:g,laid:n},`bg:${g.name}`))]}),i.jsx("rect",{x:n.x-N,y:-n.yTop-N,width:n.width+2*N,height:c+2*N,rx:cn,fill:"none",stroke:m,strokeOpacity:x,strokeWidth:N,transform:"scale(1 -1)"}),i.jsx("text",{x:n.x+Z,y:-(n.yTop-S/2),transform:"scale(1 -1)",fill:h.text,fontSize:R,dominantBaseline:"central",style:{pointerEvents:"none",userSelect:"none"},children:k}),t&&n.sockets.map(g=>i.jsx(Un,{socket:g,node:n,onRefuse:d},`${g.output?"o":"i"}:${g.identifier}`)),t&&a.map(g=>i.jsx(Hn,{panel:g,laid:n,onRefuse:d},`hd:${g.name}`))]})}function Wn({panel:e,laid:n}){if(e.contentTop===null||e.contentBottom===null)return null;const a=[{y:e.contentTop,height:e.contentTop-e.contentBottom,radius:0,times:1}];return e.fillsNodeEnd&&a.push({y:e.contentBottom,height:e.contentBottom-n.yBottom,radius:D,times:e.depth+1}),i.jsx("g",{style:{pointerEvents:"none"},children:a.flatMap((r,t)=>Array.from({length:r.times},(o,d)=>i.jsx("rect",{x:n.x,y:-r.y,width:n.width,height:Math.max(r.height,0),rx:r.radius,fill:Nn,fillOpacity:Rn,transform:"scale(1 -1)"},`${t}:${d}`)))})}function Hn({panel:e,laid:n,onRefuse:a}){const r=pn,t=r/j.cell,o=n.x+X+r/2,d=e.centerY,u=j.reach*t,l=j.spread*t,p=e.collapsed?`M ${o-u/2} ${-(d+l)} L ${o+u/2} ${-d} L ${o-u/2} ${-(d-l)}`:`M ${o-l} ${-(d+u/2)} L ${o} ${-(d-u/2)} L ${o+l} ${-(d+u/2)}`,m=n.x+X+r+re+(e.toggle&&!e.toggle.linked?In:0);return i.jsxs("g",{onPointerDown:x=>{x.button===0&&(x.stopPropagation(),a(`${e.collapsed?"Opening":"Collapsing"} "${e.name}" writes the panel's is_collapsed — editing parity is not the program.`))},style:{cursor:"default"},children:[i.jsx("rect",{x:n.x,y:-(d+O),width:n.width,height:2*O,fill:"transparent",transform:"scale(1 -1)"}),i.jsx("path",{d:p,fill:"none",stroke:h.text,strokeWidth:j.stroke*t,strokeLinecap:"round",strokeLinejoin:"round",transform:"scale(1 -1)",style:{pointerEvents:"none"}}),e.toggle&&!e.toggle.linked&&i.jsx("rect",{x:n.x+X+r+re,y:-(d+O/2),width:O,height:O,rx:.2*O,fill:e.toggle.value===!0?"#4772b3":"#545454",transform:"scale(1 -1)",style:{pointerEvents:"none"}}),i.jsx("text",{x:m,y:-d,transform:"scale(1 -1)",fill:h.text,fontSize:R,dominantBaseline:"central",style:{pointerEvents:"none",userSelect:"none"},children:e.name})]})}function Un({socket:e,node:n,onRefuse:a}){const r=G(e.type),t=e.type==="CUSTOM"?Cn:pe,o=me,d=e.shape.replace("_DOT",""),u=e.shape.endsWith("_DOT"),l=d==="SQUARE"?i.jsx("rect",{x:e.x-o,y:-e.y-o,width:2*o,height:2*o,fill:r,stroke:t,strokeWidth:F,transform:"scale(1 -1)"}):d==="DIAMOND"?i.jsx("polygon",{points:`${e.x},${-e.y-o} ${e.x+o},${-e.y} ${e.x},${-e.y+o} ${e.x-o},${-e.y}`,fill:r,stroke:t,strokeWidth:F,transform:"scale(1 -1)"}):i.jsx("circle",{cx:e.x,cy:-e.y,r:o,fill:r,stroke:t,strokeWidth:F,transform:"scale(1 -1)"});return i.jsxs("g",{onPointerDown:p=>{p.button===0&&(p.stopPropagation(),a(`Dragging from "${e.name}" would make a link — editing parity is not the program.`))},children:[l,u&&i.jsx("circle",{cx:e.x,cy:-e.y,r:o*.35,fill:t,transform:"scale(1 -1)"}),!n.collapsed&&!e.panelCollapsed&&i.jsx(Yn,{socket:e,node:n,onRefuse:a})]})}function Yn({socket:e,node:n,onRefuse:a}){const r=O,t=n.x+r,o=n.x+n.width-r,d=-(e.rowTop-S/2);if(!(!e.output&&!e.linked&&!e.hideValue&&e.value!==null))return i.jsx("text",{x:e.output?o:t,y:d,transform:"scale(1 -1)",textAnchor:e.output?"end":"start",fill:h.text,fontSize:R,dominantBaseline:"central",style:{pointerEvents:"none",userSelect:"none"},children:e.name});const l=Array.isArray(e.value)&&e.value.length>=3;return i.jsxs("g",{onPointerDown:p=>{p.button===0&&(p.stopPropagation(),a(`Changing "${e.name}" writes the socket's default_value — editing parity is not the program.`))},style:{cursor:"default"},children:[i.jsx("rect",{x:t,y:d-S/2+1,width:o-t,height:S-2,rx:.2*S,fill:"#545454",transform:"scale(1 -1)"}),le(e)!==null&&i.jsxs(i.Fragment,{children:[i.jsx("clipPath",{id:`sl-${e.identifier}`,children:i.jsx("rect",{x:t,y:d-S/2+1,width:o-t,height:S-2,rx:.2*S})}),i.jsx("rect",{x:t,y:d-S/2+1,width:(o-t)*(le(e)??0),height:S-2,fill:h.sliderFill,clipPath:`url(#sl-${e.identifier})`,transform:"scale(1 -1)"})]}),i.jsx("text",{x:t+6,y:d,transform:"scale(1 -1)",fill:h.text,fontSize:R,dominantBaseline:"central",style:{pointerEvents:"none",userSelect:"none"},children:e.name}),l?i.jsx("rect",{x:o-34,y:d-S/2+3,width:30,height:S-6,rx:2,fill:b(e.value),transform:"scale(1 -1)"}):i.jsx("text",{x:o-6,y:d,transform:"scale(1 -1)",textAnchor:"end",fill:h.text,fontSize:R,dominantBaseline:"central",style:{pointerEvents:"none",userSelect:"none"},children:ke(e.value)})]})}function le(e){const{softMin:n,softMax:a,value:r}=e;return n===void 0||a===void 0||typeof r!="number"||a<=n?null:Math.min(1,Math.max(0,(r-n)/(a-n)))}function ke(e){return e===null?"":typeof e=="boolean"?e?"On":"Off":typeof e=="number"?e.toFixed(3):typeof e=="string"?e:e.map(n=>n.toFixed(2)).join(", ")}function zn({link:e}){const[n,a]=Tn(e.from,e.to),r=`M ${e.from[0]} ${e.from[1]} C ${n[0]} ${n[1]}, ${a[0]} ${a[1]}, ${e.to[0]} ${e.to[1]}`,t=e.valid?h.wireInner:"#ff2020";return i.jsxs("g",{style:{pointerEvents:"none"},children:[i.jsx("path",{d:r,fill:"none",stroke:h.wire,strokeWidth:ne+2*N}),i.jsx("path",{d:r,fill:"none",stroke:t,strokeWidth:ne,strokeDasharray:e.muted?"10 10":void 0,strokeOpacity:e.muted?h.dashAlpha:1})]})}function Vn({node:e,laid:n}){const a=Math.max(n.yTop-n.yBottom,gn*2);return i.jsxs("g",{style:{pointerEvents:"none"},children:[i.jsx("rect",{x:n.x,y:-n.yTop,width:n.width,height:a,rx:D,fill:e.useCustomColor?b(e.color):h.frame,fillOpacity:h.frameAlpha,transform:"scale(1 -1)"}),e.label&&i.jsx("text",{x:n.x+n.width/2,y:-(n.yTop-25),transform:"scale(1 -1)",textAnchor:"middle",fill:h.text,fontSize:20,children:e.label})]})}function Xn({tree:e,zoom:n,onViewAll:a,onRefuse:r}){return i.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"var(--vgai-space-2)",height:Bn,padding:"0 var(--vgai-space-2)",background:h.background,color:h.text,font:`${R}px inherit`,borderBottom:"1px solid #161616"},children:[i.jsx("span",{"data-testid":"node-editor-tree-type",style:{opacity:.85},children:e?.typeLabel??"Shader Editor"}),i.jsx("span",{style:{opacity:.4},children:"·"}),i.jsx("span",{"data-testid":"node-editor-material",children:e?.material??"No material"}),i.jsx("span",{style:{flex:1}}),i.jsxs("span",{style:{opacity:.6},children:[Math.round(n*100),"%"]}),i.jsx("button",{type:"button",className:"vgai-btn","data-variant":"ghost","data-size":"sm",onClick:a,"data-testid":"node-editor-view-all",children:"View All"}),i.jsx("button",{type:"button",className:"vgai-btn","data-variant":"ghost","data-size":"sm","data-testid":"node-editor-use-nodes",onClick:()=>r("Use Nodes writes Material.use_nodes — editing parity is not the program."),children:"Use Nodes"})]})}function Kn({entries:e,error:n,refusal:a}){const r=e.filter(u=>u.fallback!==null),t=e.filter(u=>u.approximate),o=e.reduce((u,l)=>u+l.panels.length,0),d=n||a||(r.length>0?`${r.map(u=>`"${u.node.name}" draws its sockets flat: ${u.fallback}`).join("; ")}.`:t.length>0?`${t.map(u=>`"${u.node.name}"`).join(", ")} ${t.length===1?"carries a":"carry"} declaration LAYOUT row, whose drawn height RNA cannot answer; one UI unit is reserved for it.`:o>0?`${o} socket panel${o===1?"":"s"} drawn from Blender's own declarations. Read-only: this view inspects the node tree and never writes it.`:"Read-only: this view inspects the node tree and never writes it.");return i.jsx("div",{"data-testid":"node-editor-status",style:{flex:"0 0 auto",height:Ln,display:"flex",alignItems:"center",padding:"0 var(--vgai-space-2)",background:h.background,color:n||a?"#ffa028":"#888888",font:`${R}px inherit`,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:d})}function Zn({node:e,onRefuse:n}){return i.jsxs("aside",{"data-testid":"node-editor-sidebar",style:{width:Dn,flex:"0 0 auto",overflow:"auto",background:h.background,color:h.text,font:`${R}px inherit`,borderLeft:"1px solid #161616",padding:"var(--vgai-space-2)"},children:[i.jsx("div",{style:{opacity:.6,marginBottom:"var(--vgai-space-2)"},children:"Node"}),e?i.jsxs(i.Fragment,{children:[i.jsx(L,{label:"Name",value:e.name,onRefuse:n}),i.jsx(L,{label:"Label",value:e.label??"",onRefuse:n}),i.jsx(L,{label:"Color",value:e.useCustomColor?b(e.color):"Off",onRefuse:n,swatch:e.useCustomColor?b(e.color):void 0}),i.jsx(L,{label:"Mute",value:e.muted?"On":"Off",onRefuse:n}),i.jsx("div",{style:{opacity:.6,margin:"var(--vgai-space-3) 0 var(--vgai-space-1)"},children:"Properties"}),e.inputs.filter(A).map(a=>i.jsx(L,{label:a.label??a.name,value:a.linked?"Linked":ke(a.value),onRefuse:n},a.identifier))]}):i.jsx("div",{style:{opacity:.5},children:"No node looked at."})]})}function L({label:e,value:n,swatch:a,onRefuse:r}){return i.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"var(--vgai-space-2)",height:20},onPointerDown:()=>r(`"${e}" is read here and written nowhere — inspection parity.`),children:[i.jsx("span",{style:{flex:"0 0 45%",opacity:.75,textAlign:"right"},children:e}),a&&i.jsx("span",{style:{width:14,height:14,borderRadius:2,background:a,flex:"0 0 auto"}}),i.jsx("span",{style:{flex:1,minWidth:0,overflow:"hidden",textOverflow:"ellipsis"},title:n,children:n})]})}export{mt as default,dt as point,lt as title};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{a as i}from"./jsx-runtime-DPjLkJKQ.js";import{q as Y}from"./index-GIL7oGEO.js";import{y as ce,C as q,D as J,E as ue,F as ae,s as de,G as fe,t as pe}from"./blender-runtime-host-BpBwGv7r.js";import{r as j}from"./index-nmcBqr7Y.js";const he=e=>typeof e=="object"&&e!==null&&typeof e.subscribeFrames=="function"&&typeof e.blenderObjectName=="function",xe=e=>typeof e=="object"&&e!==null&&typeof e.documentId=="string"&&typeof e.hierarchy?.object3D=="function";function Z(){const e=Y().documents.context(q());return he(e)?e:null}function Q(e,t){if(e===null||!xe(t))return null;const n=Z();if(n===null)return null;if(e.id===t.documentId)return t.documentRootObject===n.root?{kind:"scene"}:null;const r=ce().byId.get(e.id);if(r?.type==="TSE_LAYER_COLLECTION")return{kind:"collection",path:r.path};const l=t.hierarchy.object3D(e.id);if(l===null)return null;if(l===n.root)return{kind:"scene"};const o=n.blenderObjectName(l);return o===null?null:{kind:"object",name:o}}let O={object:null,collection:null,context:null,views:new Map,error:null,loading:!1},ee=0;const W=new Set;let U=null;const N=new Set;let I=null,b=0,_=0;const T=new Set;function y(e,t=!1){O={...O,...e},ee+=1;for(const n of[...W])n();t&&Y().documents.contextChanged(q())}function ge(e){return W.add(e),()=>{W.delete(e)}}function V(){return ee}function F(){return O}function ye(){const e=I;b+=1,N.clear(),T.clear(),e!==null?te(e,!0):y({})}de(()=>{ye()});let k=null;function te(e,t=!1){k!==e&&(k=e,setTimeout(()=>{k===e&&(k=null,me(e,t))},0))}function be(e){return e.kind==="scene"?"":e.kind==="collection"?`collection:${e.path}`:e.name}function je(){if(U!==null)return;const e=Z();e!==null&&(U=e.subscribeFrames(ue))}async function me(e,t=!1){const n=e.startsWith("collection:")?e.slice(11):null,r=n===null&&e!==""?e:null,l=t&&I===e;I!==e&&(b+=1,N.clear(),T.clear());const o=b,c=++_;I=e;const u=l?O.context:null;l||y({loading:!0,object:r,collection:n,context:null,error:null,views:new Map});try{const s=await ae(r??void 0,n??void 0);if(o!==b||c!==_)return;if(l&&JSON.stringify(s)===JSON.stringify(u)){y({loading:!1,error:null});return}y({context:s,loading:!1,error:null},!0)}catch(s){if(o!==b||c!==_)return;y({context:null,loading:!1,error:w(s)},!0)}}function ne(e){if(!J())return;je();const t=be(e);I!==t&&te(t)}function R(e){const t=O.views.get(e);if(t!==void 0&&T.has(e)||N.has(e)||!J())return t;N.add(e);const n=b;return fe(e).then(r=>{if(n!==b||(N.delete(e),T.add(e),r===null))return;const l=new Map(O.views);l.set(e,r),y({views:l,error:null})}).catch(r=>{n===b&&(N.delete(e),y({error:w(r)}))}),t}async function ve(e,t,n,r){try{return await pe(e,t,n,r),T.delete(e),y({error:null}),!0}catch(l){return y({error:w(l)}),!1}}function w(e){return e instanceof Error?e.message:String(e)}const $=20,H=2,Se="40%",Ee=25,X=20,v=8,Ne=4,G=8,p=11,g=.5,x="#e6e6e6",Ae="#3d3d3d",Oe="#ffffff11",Re="rgba(0,0,0,0.12)",$e="#545454",Le="#3d3d3d",Ce="#4772b3",ie="#991616",Ie=8,Te=6,Pe=e=>Math.round(e*.2),re=e=>e.filter(t=>t.hidden!==!0&&t.undrawn!==!0);function P(){return j.useSyncExternalStore(ge,V,V)}function h({title:e,sub:t=!1,closed:n=!1,note:r,count:l,children:o}){const[c,u]=j.useState(!n);return i.jsxs("div",{style:{marginBottom:v,borderRadius:Ne,boxShadow:t?"none":`inset 0 0 0 1px ${Oe}`,background:t?Re:"transparent",overflow:"hidden"},children:[i.jsxs("button",{type:"button",onClick:()=>u(!c),style:{display:"flex",alignItems:"center",width:"100%",height:Ee,background:t?"transparent":Ae,border:"none",padding:`0 ${G}px 0 ${t?X+14-20:0}px`,color:x,font:`${p}px inherit`,textAlign:"left",cursor:"pointer",gap:Te},children:[i.jsx("span",{"aria-hidden":"true",style:{width:X-8,textAlign:"center",fontSize:Ie,opacity:.85},children:c?"▼":"▶"}),i.jsx("span",{style:{fontWeight:400},title:r,children:e}),l===void 0?null:i.jsx("span",{style:{opacity:g,marginLeft:"auto"},children:l})]}),c?i.jsx("div",{style:{padding:v},children:o}):null]})}function A({label:e,title:t,readonly:n,identifier:r,children:l}){return i.jsxs("div",{"data-rna-field":r??"","data-field-label":e,"data-field-readonly":n?"true":void 0,style:{display:"flex",alignItems:"center",minHeight:$,marginBottom:H,gap:G,opacity:n?g:1},title:t,children:[i.jsx("span",{style:{flex:`0 0 ${Se}`,textAlign:"right",color:x,fontSize:p,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e}),i.jsx("span",{style:{flex:"1 1 0",minWidth:0,display:"flex",gap:H},children:l})]})}const m={height:$,width:"100%",minWidth:0,boxSizing:"border-box",background:$e,border:`1px solid ${Le}`,borderRadius:Pe($),color:x,fontSize:p,padding:`0 ${G}px`,textAlign:"center"};function S({children:e}){return i.jsx("span",{style:{...m,display:"flex",alignItems:"center",justifyContent:"center",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e})}const D=$-2*Math.floor(($-2)/6);function le({value:e,readonly:t,label:n,onChange:r}){return i.jsx("input",{type:"checkbox",checked:e,readOnly:t,...n===void 0?{}:{"aria-label":n},onChange:l=>!t&&r(l.target.checked),style:{width:D,height:D,margin:`${($-D)/2}px 0`,accentColor:Ce,cursor:t?"default":"pointer"}})}function oe({row:e,value:t,index:n,onWrite:r}){const[l,o]=j.useState(null),c=e.type==="FLOAT"?e.precision??3:0,u=l??(e.type==="FLOAT"?t.toFixed(c):String(t));return e.readonly?i.jsx(S,{children:u}):i.jsx("input",{type:"number","aria-label":L(e,n),value:u,...e.softMin===void 0?{}:{min:e.softMin},...e.softMax===void 0?{}:{max:e.softMax},...e.step===void 0?{}:{step:e.type==="FLOAT"?e.step/100:1},onChange:s=>o(s.target.value),onBlur:()=>{const s=Number(l);o(null),l!==null&&Number.isFinite(s)&&s!==t&&r(s,n)},onKeyDown:s=>{s.key==="Enter"&&s.target.blur(),s.key==="Escape"&&o(null)},style:m})}const B=["X","Y","Z","W"];function L(e,t){const n=e.name||e.identifier;return t===void 0?n:`${n} ${B[t]??t}`}function ke(e){const t=n=>Math.max(0,Math.min(255,Math.round((e[n]??0)**.45454545454545453*255)));return`rgb(${t(0)}, ${t(1)}, ${t(2)})`}function Me({row:e,onOpen:t}){const n=e.value;if(n===null||n.path===null)return i.jsx(S,{children:n===null?"None":n.name??n.type});const r=n.path;return i.jsx("button",{type:"button","aria-label":L(e),onClick:()=>t(r),style:{...m,cursor:"pointer",textAlign:"left"},title:r,children:n.name??n.type})}function Be({row:e,write:t}){const n=e.items??[];if(e.isFlag){const l=e.value??[];return i.jsx(S,{children:l.length===0?"None":l.join(", ")})}const r=String(e.value??"");return e.readonly?i.jsx(S,{children:n.find(l=>l.identifier===r)?.name??r}):i.jsx("select",{"aria-label":L(e),value:r,onChange:l=>t(l.target.value),style:{...m,textAlign:"left"},children:n.map(l=>i.jsx("option",{value:l.identifier,children:l.name},l.identifier))})}function Fe({row:e,write:t}){const n=String(e.value??"");return e.readonly?i.jsx(S,{children:n}):i.jsx(we,{value:n,label:L(e),onWrite:r=>t(r)})}function _e({row:e}){const t=e.value??[];return i.jsx("span",{style:{...m,background:ke(t),display:"block"},title:t.map(n=>n.toFixed(3)).join(", ")})}function De({row:e,label:t,title:n,write:r}){const l=e.value??[];return i.jsx(i.Fragment,{children:l.map((o,c)=>i.jsx(A,{label:We(t,c,l.length),title:n,readonly:e.readonly,identifier:`${e.identifier}[${c}]`,children:e.type==="BOOLEAN"?i.jsx(le,{value:o===!0,readonly:e.readonly,label:L(e,c),onChange:u=>r(u,c)}):i.jsx(oe,{row:e,value:Number(o),index:c,onWrite:(u,s)=>r(u,s)})},`${e.identifier}-${B[c]??c}`))})}function We(e,t,n){return n>B.length?t===0?e:`${e} ${t}`:`${t===0?`${e} `:""}${B[t]}`}function ze(e){const{row:t,write:n}=e;switch(t.type){case"POINTER":return i.jsx(Me,{...e});case"ENUM":return i.jsx(Be,{...e});case"STRING":return i.jsx(Fe,{...e});case"BOOLEAN":return i.jsx(le,{value:t.value===!0,readonly:t.readonly,label:L(t),onChange:n});default:return i.jsx(oe,{row:t,value:Number(t.value??0),onWrite:r=>n(r)})}}function K({row:e,path:t,onOpen:n}){const r=(a,f)=>void ve(t,e.identifier,a,f),l=e.name||e.identifier,o=`${e.identifier} — ${e.type}${e.subtype==="NONE"?"":`/${e.subtype}`}${e.readonly?" (read-only)":""}${e.description?`
|
|
2
|
+
${e.description}`:""}`,c={row:e,path:t,write:r,onOpen:n},u=e.valueOmitted??e.valueError;if(u!==void 0)return i.jsx(A,{label:l,title:o,readonly:!0,identifier:e.identifier,children:i.jsx(S,{children:u})});if(e.type==="COLLECTION")return i.jsx(Ge,{label:l,title:o,value:e.value??{count:0},identifier:e.identifier,onOpen:()=>n(`${t}.${e.identifier}`)});const s=e.type==="INT"||e.type==="FLOAT";return e.arrayLength>0&&(s||e.type==="BOOLEAN")?s&&(e.subtype==="COLOR"||e.subtype==="COLOR_GAMMA")?i.jsx(A,{label:l,title:o,readonly:e.readonly,identifier:e.identifier,children:i.jsx(_e,{...c})}):i.jsx(De,{...c,label:l,title:o}):i.jsx(A,{label:l,title:o,readonly:e.readonly,identifier:e.identifier,children:ze(c)})}function we({value:e,label:t,onWrite:n}){const[r,l]=j.useState(null);return i.jsx("input",{type:"text",...t===void 0?{}:{"aria-label":t},value:r??e,onChange:o=>l(o.target.value),onBlur:()=>{r!==null&&r!==e&&n(r),l(null)},onKeyDown:o=>{o.key==="Enter"&&o.target.blur(),o.key==="Escape"&&l(null)},style:{...m,textAlign:"left"}})}function Ge({label:e,title:t,value:n,identifier:r,onOpen:l}){const[o,c]=j.useState(!1),u=n.names??[];return i.jsxs(i.Fragment,{children:[i.jsx(A,{label:e,title:t,readonly:!1,identifier:r,children:i.jsxs("button",{type:"button","aria-label":e,onClick:()=>u.length?c(!o):l(),style:{...m,cursor:"pointer",textAlign:"left"},children:[u.length?`${o?"▼":"▶"} `:"",n.count," ",n.count===1?"item":"items"]})}),o?u.map(s=>i.jsx(A,{label:"",readonly:!0,children:i.jsx(S,{children:s})},s)):null]})}const z=e=>typeof e=="string"?e:e.property;function Ke(e){if(e.active===void 0)return{path:null,index:null};const t=F().context?.[e.active];if(typeof t!="object"||t===null)return{path:null,index:null};const n=t;return{path:n.path??null,index:typeof n.index=="number"?n.index:null}}function Ue({panel:e,path:t,onOpen:n}){P();const r=R(t),l=Ke(e);return r===void 0?i.jsx(h,{title:e.title,closed:e.closed===!0,children:i.jsxs("div",{style:{color:x,opacity:g,fontSize:p},children:["Reading ",t,"…"]})}):r.kind!=="collection"?i.jsx(h,{title:e.title,closed:e.closed===!0,note:t,children:i.jsxs("div",{style:{color:ie,fontSize:p},children:[t," is not a collection — this panel is declared `collection: true`."]})}):i.jsxs(h,{title:e.title,closed:e.closed===!0,note:t,count:r.count,children:[r.items.length===0?i.jsx("div",{style:{color:x,opacity:g,fontSize:p},children:"None"}):null,r.items.map((o,c)=>i.jsx(h,{title:`${o.path!==null&&o.path===l.path||c===l.index?"● ":""}${o.name??o.type}`,sub:!0,children:o.path===null?i.jsxs("div",{style:{color:x,opacity:g,fontSize:p},children:[o.type," — RNA gives this member no address."]}):i.jsx(Ve,{path:o.path,properties:e.properties,andDeclared:e.andDeclared===!0,onOpen:n})},o.path??o.name??o.type))]})}function Ve({path:e,properties:t,andDeclared:n=!1,onOpen:r}){P();const l=R(e);if(l===void 0)return i.jsxs("div",{style:{color:x,opacity:g,fontSize:p},children:["Reading ",e,"…"]});const o=l.kind==="struct"?l.groups.flatMap(a=>a.rows):[],c=new Map(o.map(a=>[a.identifier,a])),u=t.map(a=>c.get(z(a))).filter(a=>a!==void 0),s=n&&l.kind==="struct"?re(o).filter(a=>a.group===l.type&&!t.some(f=>z(f)===a.identifier)):[];return i.jsx(i.Fragment,{children:[...u,...s].map(a=>i.jsx(K,{row:a,path:e,onOpen:r},a.identifier))})}function He(e,t){if(e.engine!==void 0){const n=F().context?.engine;if(n===void 0)return null;if(!e.engine.includes(n))return!1}for(const n of e.when??[]){const r=n.from??e.from,l=r?t.find(s=>s.label===r):t[0];if(l===void 0)return!1;const o=R(l.path);if(o===void 0)return null;if(o.kind!=="struct")return!1;const c=o.groups.flatMap(s=>s.rows).find(s=>s.identifier===n.property);if(c===void 0)return!1;const u=c.value;if(typeof u!="string"&&typeof u!="number"&&typeof u!="boolean"||n.is!==void 0&&!n.is.includes(u)||n.isNot!==void 0&&n.isNot.includes(u))return!1}return!0}function se({panel:e,paths:t,onOpen:n}){if(P(),He(e,t)!==!0)return null;const r=e.from?t.find(s=>s.label===e.from):t[0];if(r!==void 0&&e.collection===!0)return i.jsx(Ue,{panel:e,path:r.path,onOpen:n});if(r===void 0)return null;const l=R(r.path),o=e.sub??[],c=[],u=[];for(const s of e.properties){const a=z(s),f=typeof s=="string"?r:t.find(C=>C.label===s.from),d=f===void 0?void 0:R(f.path),E=d?.kind==="struct"?d.groups.flatMap(C=>C.rows).find(C=>C.identifier===a):void 0;E===void 0||f===void 0?u.push(a):c.push({identifier:a,row:E,path:f.path})}return l===void 0?i.jsx(h,{title:e.title,closed:e.closed===!0,children:i.jsxs("div",{style:{color:x,opacity:g,fontSize:p},children:["Reading ",r.path,"…"]})}):c.length===0&&o.length===0?null:i.jsxs(h,{title:e.title,closed:e.closed===!0,note:u.length===0?`${r.path}`:`${r.path}
|
|
3
|
+
Not on this datablock: ${u.join(", ")}`,children:[c.map(s=>i.jsx(K,{row:s.row,path:s.path,onOpen:n},s.identifier)),o.map((s,a)=>i.jsx(se,{panel:s,paths:t,onOpen:n},`${a}:${s.title}`))]})}function M({path:e,onOpen:t}){P();const n=R(e);return n===void 0?i.jsxs("div",{style:{color:x,opacity:g,fontSize:p,padding:v},children:["Reading ",e,"…"]}):n.kind==="collection"?i.jsxs(i.Fragment,{children:[n.items.length===0?i.jsx("div",{style:{color:x,opacity:g,fontSize:p},children:n.count===0?"None":`${n.count} items`}):null,n.items.map(r=>i.jsx(h,{title:r.name??r.type,sub:!0,children:r.path===null?i.jsxs("div",{style:{color:x,opacity:g,fontSize:p},children:[r.type," — RNA gives this member no address."]}):i.jsx(M,{path:r.path,onOpen:t})},r.path??r.name??r.type))]}):i.jsx(i.Fragment,{children:n.groups.map(r=>{const l=re(r.rows);return l.length===0?null:i.jsx(h,{title:r.label,sub:!0,children:l.map(o=>i.jsx(K,{row:o,path:n.path,onOpen:t},o.identifier))},r.id)})})}function Xe({tabId:e,subject:t,curated:n=[]}){P(),j.useEffect(()=>ne(t),[t]);const[r,l]=j.useState([]),o=F(),c=o.context?.tabs.find(d=>d.id===e)??null,u=c?.paths??[],s=u.map(d=>d.path).join("|");if(j.useEffect(()=>l([]),[s]),o.error!==null)return i.jsx("div",{style:{color:ie,fontSize:p,padding:v},children:o.error});if(c===null)return i.jsx("div",{style:{color:x,opacity:g,fontSize:p,padding:v},children:o.loading?"Reading the engine…":"Blender shows no properties here."});const a=d=>l(E=>[...E,d]),f=r[r.length-1];return i.jsxs("div",{style:{padding:`${v}px 0`},children:[r.length>0?i.jsxs("button",{type:"button",onClick:()=>l(d=>d.slice(0,-1)),style:{...m,width:"auto",marginBottom:v,cursor:"pointer",textAlign:"left"},title:f,children:["← ",c.label]}):null,f!==void 0?i.jsx(h,{title:f.slice(f.lastIndexOf(".")+1),children:i.jsx(M,{path:f,onOpen:a})}):i.jsxs(i.Fragment,{children:[n.map((d,E)=>i.jsx(se,{panel:d,paths:u,onOpen:a},`${E}:${d.title}`)),n.length>0?i.jsx(h,{title:"All properties",closed:!0,children:u.map(d=>i.jsx(h,{title:d.label,sub:!0,children:i.jsx(M,{path:d.path,onOpen:a})},d.path))}):u.map(d=>i.jsx(h,{title:d.label,children:i.jsx(M,{path:d.path,onOpen:a})},d.path))]})]})}function Qe(e){return(t,n)=>{const r=Q(t,n);if(r===null)return!1;if(ne(r),e.standing==="any")return!0;if(e.standing==="object")return r.kind==="object";const l=F(),o=r.kind==="object"?r.name:null,c=r.kind==="collection"?r.path:null;return l.object!==o||l.collection!==c?!1:l.context?.tabs.some(u=>u.id===e.id)??!1}}function et(e){return function({node:n,adapter:r}){const l=Q(n,r);return l===null?null:i.jsx(Xe,{tabId:e.id,subject:l,curated:e.curated??[]})}}export{Qe as a,et as b,F as c,Q as r};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{lv as mt,lw as yt,q as k,aO as bt,lx as Mt}from"./index-GIL7oGEO.js";import{C as vt,a4 as Ue,K as Ve,af as xt,cb as kt,j as Et,ch as ye,w as St,a as Bt,aF as We,V as ce,s as Ct,ar as At,x as jt,cr as It,b_ as Ge}from"./three.module-D396a9Mn.js";import{f as Tt}from"./clip-planes-CnAI6DZn.js";class _t{#r;#s;#n=new Map;#k=0;#c=null;#a=null;#u=!1;#y=!1;#b=t=>{!this.#y&&this.#n.size===0||(t.preventDefault(),t.returnValue="")};#d=new Map;#p=new Map;#h=null;#w=0;#M=0;#v=0;#i=null;#x=null;#g=null;constructor(t){this.#s=t,this.#r=new Worker(new URL("/assets/worker-UrMcrc5_.js",import.meta.url),{type:"module",name:"blender"}),globalThis.addEventListener?.("beforeunload",this.#b),this.#r.onmessage=n=>void this.#E(n.data),this.#r.onerror=n=>{const r=n.error,a=n.filename?` at ${n.filename}:${n.lineno}:${n.colno}`:"",o=r?.stack??r?.message??n.message,s=new Error(`Blender worker failed: ${o||"the worker script did not load"}${a}`);console.error(s.message);for(const i of[...this.#n.keys()])this.#f(i);for(const i of this.#n.values())i.reject(s);this.#n.clear()}}#o=null;#l=null;get project(){return this.#o}get document(){return this.#l}start(t,n){return this.#o!==null&&this.#o!==t?Promise.reject(new Error(`The Blender session is bound to ${this.#o}, not ${t}`)):n!==void 0&&this.#l!==null&&this.#l!==n?Promise.reject(new Error(`Blender resource conflict: the session holds ${this.#l}; cannot open ${n}`)):(this.#o=t,this.#l??=n??"models/model.blend",this.#c??=this.#e({op:"start",project:t,...n===void 0?{}:{document:n}}),this.#c)}#t(){return this.#o===null?Promise.reject(new Error("The Blender session has not been started with a project (blender-start)")):this.start(this.#o)}async execute(t,n=!0,r="Blender Python"){return await this.#t(),await this.#e({op:"execute",code:t,history:n,label:r})}async historyGesture(t){await this.#t(),await this.#e({op:t})}async historyStep(t,n){return await this.#t(),(await this.#e({op:"history-step",token:t,direction:n})).moved}async sceneInfo(){return await this.#t(),await this.#e({op:"scene-info"})}async objectInfo(t){return await this.#t(),await this.#e({op:"object-info",name:t})}async rna(t,n){return await this.#t(),await this.#e({op:"rna",path:t,...n===void 0?{}:{names:n}})}async rnaContext(t,n){return await this.#t(),await this.#e({op:"rna-context",...t===void 0?{}:{object:t},...n===void 0?{}:{collection:n}})}async rnaSet(t,n,r,a,o=!0){return await this.#t(),await this.#e({op:"rna-set",history:o,path:t,property:n,value:r,...a===void 0?{}:{index:a}})}async outliner(t){return await this.#t(),await this.#e({op:"outliner",...t===void 0?{}:{selected:t}})}async nodeTree(t){return await this.#t(),await this.#e({op:"node-tree",...t?.path===void 0?{}:{path:t.path},...t?.material===void 0?{}:{material:t.material}})}async uvLayout(t){return await this.#t(),await this.#e({op:"uv-layout",...t?.object===void 0?{}:{object:t.object},...t?.uvLayer===void 0?{}:{uvLayer:t.uvLayer}})}async rig(t){return await this.#t(),await this.#e({op:"rig",...t?.object===void 0?{}:{object:t.object}})}async actionClip(t){return await this.#t(),await this.#e({op:"action-clip",...t?.object===void 0?{}:{object:t.object},...t?.bake===void 0?{}:{bake:t.bake}})}async outlinerSet(t,n,r){return await this.#t(),await this.#e({op:"outliner-set",path:t,column:n,value:r})}async present(){await this.#t(),await this.#e({op:"present"})}async screenshotView(t){return await this.#t(),await this.#e({op:"screenshot-view",maxSize:t})}async readFile(t){return await this.#t(),await this.#e({op:"read-file",path:t})}async writeFile(t,n){await this.#t(),await this.#e({op:"write-file",path:t,bytes:n})}async listFiles(t){return await this.#t(),await this.#e({op:"list-files",path:t})}get presented(){return this.#x}stop(){return this.#u?Promise.resolve():this.#a?this.#a:(this.#a=(async()=>{this.#c&&(await this.#c,await this.#e({op:"flush-document"},!0)),this.terminate()})().catch(t=>{throw this.#a=null,t}),this.#a)}terminate(){if(this.#u)return;this.#u=!0,globalThis.removeEventListener?.("beforeunload",this.#b);const t=this.#m("terminating worker");try{this.#r.terminate()}finally{t()}const n=new Error("The Blender session was terminated");for(const r of[...this.#n.keys()])this.#f(r);for(const r of this.#n.values())r.reject(n);this.#n.clear()}metrics(t=performance.now()){let n=null,r=this.#w,a=this.#M,o=this.#v;for(const s of this.#d.values()){const i=t-s;(n===null||i>n)&&(n=i),i>r&&(r=i),i>=5e3&&(a+=1),i>=3e4&&(o+=1)}return{inFlightMs:n===null?null:Math.round(n),lastCallMs:this.#h===null?null:Math.round(this.#h),maxCallMs:this.#h===null&&n===null?null:Math.round(r),callsOver5s:a,callsOver30s:o,lastCallWindow:this.#i,wasmMemoryMB:this.#g===null?null:Math.round(this.#g/1048576)}}#f(t){this.#p.get(t)?.(),this.#p.delete(t);const n=this.#d.get(t);if(n===void 0)return;this.#d.delete(t);const r=performance.now()-n;this.#h=r,r>this.#w&&(this.#w=r),r>=5e3&&(this.#M+=1),r>=3e4&&(this.#v+=1),this.#i!==null&&this.#i.start===n&&(this.#i={start:n,end:n+r})}#e(t,n=!1){if(this.#u||this.#a&&!n)return Promise.reject(new Error("The Blender session is stopping or terminated"));const r=++this.#k;return new Promise((a,o)=>{this.#n.set(r,{resolve:a,reject:o});const s=performance.now();this.#d.set(r,s),this.#i={start:s,end:null},this.#p.set(r,this.#m(`waiting for worker ${t.op}`));try{this.#r.postMessage({...t,id:r})}catch(i){this.#n.delete(r),this.#f(r),o(i instanceof Error?i:new Error(String(i)))}})}#m(t){try{const n=this.#s.work?.(t);return()=>{try{n?.()}catch{}}}catch{return()=>{}}}async#E(t){if("op"in t){if(t.op==="document-dirty"){this.#y=t.dirty;return}if(t.op==="history"){this.#s.history?.(t.entries);return}if(t.op==="log"){this.#s.log?.(t.level,t.text);return}if(t.op==="memory"){this.#g=t.bytes;return}const r=t.frame;typeof r?.session=="string"&&typeof r.revision=="number"&&(this.#x={session:r.session,revision:r.revision});const a=this.#m("presenting worker frame");try{const o=await this.#s.present(t.frame,t.description,t.capture);this.#r.postMessage({op:"present-result",id:t.id,...o?.capture===void 0?{}:{capture:o.capture},...o!=null&&"held"in o?{held:o.held}:{}})}catch(o){this.#r.postMessage({op:"present-result",id:t.id,error:o instanceof Error?o.message:String(o)})}finally{a()}return}const n=this.#n.get(t.id);n&&(this.#n.delete(t.id),this.#f(t.id),"error"in t?n.reject(new Error(t.error)):n.resolve(t.result))}}const Ft="/assets/agx-base-srgb-BjWZJgrZ.lut",Lt="/assets/agx-look-medium-high-contrast-D5F_ob1L.lut",Rt="/assets/agx-look-punchy-dxsnycNs.lut",$t="/assets/filmic-srgb-Ct35FIH6.lut",_=new Float64Array(12),ze=[0,0,0],O=new Float64Array(3),q=new Float64Array(3),F=new Int8Array([1,0,0,1,1,0,0,1,2,1,0,0,1,0,1,0,2,1,0,0,1,1,0,1,2,0,1,0,0,1,0,1,1,2,1,0,0,1,0,0,1,1,1,2,0,0,1,0,1,1,0,1,0,2]);function Ot(e,t,n){return e>t?t>n?0:e>n?1:2:n>t?3:n>e?4:5}function Je(e,t,n,r,a){const o=t*t,s=Math.min(1,Math.max(0,n))*(t-1),i=Math.min(1,Math.max(0,r))*(t-1),c=Math.min(1,Math.max(0,a))*(t-1),f=Math.min(Math.floor(s),t-2),l=Math.min(Math.floor(i),t-2),h=Math.min(Math.floor(c),t-2),b=s-f,M=i-l,A=c-h,w=(d,p,S,B)=>{const y=(f+p+(l+S)*t+(h+B)*o)*3;_[d]=e[y]/65535,_[d+1]=e[y+1]/65535,_[d+2]=e[y+2]/65535};w(0,0,0,0),w(9,1,1,1),O[0]=b,O[1]=M,O[2]=A;const g=Ot(b,M,A)*9;w(3,F[g],F[g+1],F[g+2]),w(6,F[g+3],F[g+4],F[g+5]);const v=O[F[g+6]],u=O[F[g+7]],m=O[F[g+8]];for(let d=0;d<3;d++){const p=_[d];ze[d]=p+v*(_[3+d]-p)+u*(_[6+d]-_[3+d])+m*(_[9+d]-_[6+d])}return ze}function H(e){const t=e&32768?-1:1,n=e>>10&31,r=e&1023;return n===0?t*2**-24*r:n===31?r?Number.NaN:t*Number.POSITIVE_INFINITY:t*2**(n-15)*(1+r/1024)}function Ie(e,t,n,r){const a=new Uint8ClampedArray(t*4);for(let o=0;o<t;o++){const s=o*4,i=H(e[s+3]),c=i===0?n:n/i;q[0]=H(e[s])*c,q[1]=H(e[s+1])*c,q[2]=H(e[s+2])*c;const f=r(q);a[s]=Math.round(f[0]*255),a[s+1]=Math.round(f[1]*255),a[s+2]=Math.round(f[2]*255),a[s+3]=Math.round(Math.min(1,Math.max(0,i))*255)}return a}function Nt(e){return new URL(Object.assign({"./agx-base-srgb.lut":Ft,"./agx-look-medium-high-contrast.lut":Lt,"./agx-look-punchy.lut":Rt,"./filmic-srgb.lut":$t})[`./${e.replace(/\.lut$/,"")}.lut`],import.meta.url)}const Dt=57,R=-12.47393,Qe=12.5260688117,Pt=[[.4123908,.3575843,.1804808],[.212639,.7151687,.0721923],[.0193308,.1191948,.9505322]],Ut=[[1.5250528,-.3159135,-.1226583],[-.5091526,1.3333274,.1382844],[.0957153,.0508974,.7879558]];function qe(e,t,n){const r=t[0],a=t[1],o=t[2];n[0]=e[0][0]*r+e[0][1]*a+e[0][2]*o,n[1]=e[1][0]*r+e[1][1]*a+e[1][2]*o,n[2]=e[2][0]*r+e[2][1]*a+e[2][2]*o}const X=new Float64Array(3),He=new Float64Array(3),Z=[0,0,0];function ue(e){const t=Math.min(1,Math.max(0,e));return t<=.0031308?12.92*t:1.055*t**(1/2.4)-.055}function et(e,t,n,r){return Je(e,Dt,t,n,r)}function Vt(e,t){qe(Pt,t,He),qe(Ut,He,X);const n=Qe-R,r=et(e,(Math.log2(Math.max(X[0],1e-10))-R)/n,(Math.log2(Math.max(X[1],1e-10))-R)/n,(Math.log2(Math.max(X[2],1e-10))-R)/n);return Z[0]=ue(Math.max(0,r[0])**2.4),Z[1]=ue(Math.max(0,r[1])**2.4),Z[2]=ue(Math.max(0,r[2])**2.4),Z}const Wt={"AgX - Medium High Contrast":"agx-look-medium-high-contrast.lut","AgX - Punchy":"agx-look-punchy.lut"};function Gt(e,t){const n=Qe-R;return et(e,(Math.log2(Math.max(t[0],1e-10))-R)/n,(Math.log2(Math.max(t[1],1e-10))-R)/n,(Math.log2(Math.max(t[2],1e-10))-R)/n)}function zt(e,t,n,r={}){const a=r.exposure??1,o=r.composedLook===!0?Gt:Vt;return Ie(t,n,a,s=>o(e,s))}const tt=33,be=tt**3*3,Me=4096,de=-12.473931188,he=25;function fe(e,t){const n=Math.min(1,Math.max(0,t))*(Me-1),r=Math.min(Math.floor(n),Me-2),a=n-r;return((1-a)*e[be+r]+a*e[be+r+1])/65535}const K=[0,0,0];function qt(e,t){const n=Je(e,tt,(Math.log2(Math.max(t[0],1e-10))-de)/he,(Math.log2(Math.max(t[1],1e-10))-de)/he,(Math.log2(Math.max(t[2],1e-10))-de)/he);return K[0]=fe(e,n[0]/.66),K[1]=fe(e,n[1]/.66),K[2]=fe(e,n[2]/.66),K}function Ht(e,t,n,r){if(e.length!==be+Me)throw new Error("Invalid Blender Filmic display table");return Ie(t,n,r,a=>qt(e,a))}const W=2.4,$=.055,nt=$/(W-1),Xt=1/(W/(1+$)*((nt+$)/(1+$))**(W-1)),Zt=((nt+$)/(1+$))**W;function pe(e){return e>0?e<Zt?e*Xt:(1+$)*e**(1/W)-$:0}const Y=[0,0,0];function Kt(e){return Y[0]=pe(e[0]),Y[1]=pe(e[1]),Y[2]=pe(e[2]),Y}function Yt(e,t,n){return Ie(e,t,n,Kt)}function rt(e,t,n,r){if(!Number.isFinite(n.width)||!Number.isFinite(n.height)||n.width<1||n.height<1)throw new Error("Scene capture requires finite positive dimensions");const a=Math.min(2048,Math.round(n.width)),o=Math.min(2048,Math.round(n.height)),s=r?1:2,i=a*s,c=o*s,f=mt(),l=f.renderer,h={target:l.getRenderTarget(),toneMapping:l.toneMapping,exposure:l.toneMappingExposure,colorSpace:l.outputColorSpace,shadows:l.shadowMap.enabled,shadowType:l.shadowMap.type,clearColor:l.getClearColor(new vt),clearAlpha:l.getClearAlpha(),background:e.background};let b,M,A=!1;try{b=new Ue(i,c,{type:Ve}),n.effect&&(b.depthTexture=new xt(i,c)),l.shadowMap.enabled=!0,l.shadowMap.type=kt,l.outputColorSpace=Et,l.toneMapping=n.toneMapping??ye,l.toneMappingExposure=n.exposure??1,l.setClearColor(0,n.transparent?0:1),n.transparent&&(e.background=null),l.setRenderTarget(b),l.clear(),l.render(e,t);const w=n.effect?.render(l,b,e,t)??b;if(w.texture.type!==Ve||w.width!==i||w.height!==c)throw new Error("Scene capture effect must return a same-size half-float target");if(r){const y=new Uint16Array(i*c*4);return l.readRenderTargetPixels(w,0,0,i,c,y),A=!0,{pixels:y,width:a,height:o}}M=new Ue(i,c),yt(n.transparent===!0).render(l,M,w,0,!1);const g=new Uint8Array(i*c*4);l.readRenderTargetPixels(M,0,0,i,c,g);const v=document.createElement("canvas");v.width=i,v.height=c;const u=v.getContext("2d");if(!u)throw new Error("Scene capture could not create an image canvas");const m=u.createImageData(i,c),d=i*4;for(let y=0;y<c;y++)m.data.set(g.subarray((c-1-y)*d,(c-y)*d),y*d);u.putImageData(m,0,0);const p=document.createElement("canvas");p.width=a,p.height=o;const S=p.getContext("2d");if(!S)throw new Error("Scene capture could not create an output canvas");S.drawImage(v,0,0,a,o);const B=p.toDataURL("image/png");return A=!0,B}finally{e.background=h.background,l.setRenderTarget(h.target),l.toneMapping=h.toneMapping,l.toneMappingExposure=h.exposure,l.outputColorSpace=h.colorSpace,l.shadowMap.enabled=h.shadows,l.shadowMap.type=h.shadowType,l.setClearColor(h.clearColor,h.clearAlpha),M?.dispose(),b?.dispose(),f.release({discard:!A})}}function Jt(e,t,n){return rt(e,t,n,!0)}function Qt(e,t,n){return rt(e,t,n,!1)}const en=e=>typeof e=="object"&&e!==null&&typeof e.subscribeFrames=="function"&&typeof e.objectForBlenderName=="function"&&typeof e.blenderObjectName=="function"&&typeof e.blenderSelection=="function"&&typeof e.setStageMode=="function";function Te(){const e=k().documents.context(lt());return en(e)?e:null}function tn(){return Te()?.blenderSelection()??{selected:[],active:null}}const nn={tree:null,byId:new Map,parentOf:new Map,error:null,loading:!1};let ve=nn,ot=0;const xe=new Set;let P=null,re=null,_e="",U=null;function rn(e){const t=new Map,n=new Map,r=(a,o)=>{t.set(a.id,a),n.set(a.id,o);for(const s of a.children)r(s,a.id)};for(const a of e?.rows??[])r(a,null);return{byId:t,parentOf:n}}function Q(e){ve={...ve,...e},ot+=1;for(const t of[...xe])t()}function Sn(e){return xe.add(e),()=>{xe.delete(e)}}function Bn(){return ot}function Cn(){return ve}function Fe(e){U!==e&&(U=e,setTimeout(()=>{U===e&&(U=null,at(e===""?[]:e.split("\0")))},0))}let we=0,ke=Promise.resolve();function at(e){const t=on(e);return ke=t,t}async function on(e){const t=e.join("\0"),n=++we;re=t,_e=t,Q({loading:!0});try{const r=await wn(e);if(n!==we)return;Te()?.setStageMode(r?.mode??null),Q({tree:r,...rn(r),loading:!1,error:null})}catch(r){if(n!==we)return;Q({loading:!1,error:st(r)})}}function an(){re=null,Fe(_e);for(const e of[...Ee])e()}const Ee=new Set;function An(e){return Le(),Ee.add(e),()=>{Ee.delete(e)}}let J=!1,ge=null;function Le(){const e=Te();if(P!==null&&ge===e)return;P!==null&&(P(),P=null,ge=null);const t=e;if(t!==null){P=t.subscribeFrames(an),ge=t;return}J||(J=!0,k().documents.waitForContext(lt()).then(()=>{J=!1,Le()}).catch(()=>{J=!1}))}function jn(e){if(!I())return;Le();const t=[...e].sort().join("\0");re!==t&&Fe(t)}async function sn(e){if(!I())return;U=null;let t=at([...e].sort());for(;;){if(await t,ke===t)return;t=ke}}async function In(e,t,n){try{return await ut(e,t,n),re=null,Fe(_e),!0}catch(r){return Q({error:st(r)}),!1}}function st(e){return e instanceof Error?e.message:String(e)}const ln={transform:{cx:0,cy:0,zoom:1},looked:null,refusal:null,size:{w:0,h:0},framedAt:0,drawn:[]};let Se=ln,Re=0;const ne=new Set;let it=0;function me(){return Se}function Tn(){return Re}function _n(e){return ne.add(e),()=>{ne.delete(e)}}function V(e){Se={...Se,...e},Re+=1;for(const t of[...ne])t()}function cn(){it+=1,Re+=1;for(const e of[...ne])e()}function Fn(){return it}function N(e){V({refusal:e})}const Xe=new Map;function un(e){let t=Xe.get(e);return t||(t=fetch(Nt(e)).then(async n=>{if(!n.ok)throw new Error(`Blender display table ${e}: ${n.status} ${n.statusText}`);return new Uint16Array(await n.arrayBuffer())}),Xe.set(e,t)),t}function dn(e){const t=atob(e),n=new Uint8Array(t.length);for(let r=0;r<t.length;r++)n[r]=t.charCodeAt(r);return new Uint16Array(n.buffer,n.byteOffset,n.byteLength>>1)}async function Ze(e,t){const n=t.look??"None",r=t.toneMapping==="filmic",a=t.toneMapping==="none";if(!a&&t.toneMapping!=="agx"&&!r)throw new Error("Blender's Khronos PBR Neutral view transform has no scene-linear implementation in the browser, so it cannot resolve a composited or scene-referred frame (implemented: Standard, AgX, Filmic)");const o=a?null:r?"filmic-srgb.lut":n==="None"?"agx-base-srgb.lut":Wt[n];if(o===void 0)throw new Error(`Blender display transform has no table for look ${n}`);const s=o?await un(o):null,i=t.linearInput,c=i?{pixels:dn(i.base64),width:i.width,height:i.height}:e;if(!c)throw new Error("Blender display transform requires a linear capture");const{pixels:f,width:l,height:h}=c,b=a?Yt(f,l*h,t.exposure):r?Ht(s,f,l*h,t.exposure):zt(s,f,l*h,{exposure:t.exposure,composedLook:n!=="None"}),M=document.createElement("canvas");M.width=l,M.height=h;const A=M.getContext("2d");if(!A)throw new Error("Blender display transform could not create its image canvas");const w=A.createImageData(l,h),g=l*4;for(let m=0;m<h;m++){const d=(h-1-m)*g;w.data.set(b.subarray(d,d+g),m*g)}A.putImageData(w,0,0);const v=M.toDataURL("image/png"),u={base64:v.slice(v.indexOf(",")+1),mimeType:"image/png"};if(t.linear===!0){const m=new Uint8Array(f.buffer,f.byteOffset,f.byteLength);let d="";for(let p=0;p<m.length;p+=32768)d+=String.fromCharCode(...m.subarray(p,p+32768));u.linearBase64=btoa(d),u.linearWidth=l,u.linearHeight=h}return u}const hn="document:blender:runtime";let j=null,Ke=0;function Ln(e){const t=++Ke;return j=e,D(),()=>{Ke===t&&(j=null,D())}}function Be(){const e=x?.document,t=k().documents.activeId(),n=t?.startsWith("document:model:")?t.slice(15):j?.blend;return!n||!e||n===e?null:`Blender is editing ${e}; ${n} is not open. Return to ${e} before editing.`}function L(){return j?.documentId??hn}function lt(){return L()}async function Rn(e,t){const n=k();if(!n.session.open())throw new Error("Opening a model requires an open project session.");const r=n.projectLocalState.projectRootPath();if(r===null)throw new Error("Opening a model requires a project path.");if(j!==e||n.documents.activeId()!==e.documentId)return!1;const a=E(),o=a.start(r,e.blend);return t(),await o,j!==e?!1:(await a.present(),j===e)}function I(){return x?.project!=null&&Be()===null}let ct=0;const Ce=new Set;function $n(){return ct}function On(e){return Ce.add(e),()=>{Ce.delete(e)}}function D(){ct+=1;for(const e of[...Ce])e()}async function Nn(e,t){return I()?E().rna(e,t):null}async function Dn(e,t){return I()?E().rnaContext(e,t):null}async function fn(e,t,n,r,a=!0){if(!I())return null;const o=await E().rnaSet(e,t,n,r,a);return D(),o}async function pn(e,t=!0,n="Blender Python"){const r=await E().execute(e,t,n);D();const a=/^Error executing code:/.exec(r);return{text:r,executed:a===null,result:a===null?r.replace(/^Code executed successfully: ?/,""):"",error:a===null?null:r.replace(/^Error executing code: ?/,"")}}function Pn(){E().historyGesture("history-begin").catch(e=>k().console.error(`Could not begin Blender undo gesture: ${String(e)}`,"blender-history"))}async function Un(){await E().historyGesture("history-end")}async function wn(e){return I()?E().outliner(e):null}async function Vn(e){return I()?E().nodeTree(e):null}async function Wn(e){return I()?E().uvLayout(e):null}async function Gn(e){return I()?E().rig(e):null}async function zn(e){return I()?E().actionClip(e):null}async function ut(e,t,n){if(!I())return null;const r=await E().outlinerSet(e,t,n);return D(),r}const gn={view:"blender-node-view",title:"Node Editor",verbs:[["state",void 0],["look",void 0],["view-all","Node Editor: Frame All"],["zoom",void 0],["pan",void 0],["move",void 0],["link",void 0],["set-value",void 0],["use-nodes",void 0],["collapse-panel",void 0]].map(([e,t])=>({id:e,...t?{title:t}:{},run:n=>dt({...n,action:e})}))};function dt(e){const t=typeof e.action=="string"?e.action:"state";switch(t){case"state":break;case"look":V({looked:typeof e.node=="string"?e.node:null,refusal:null});break;case"view-all":cn(),V({refusal:null});break;case"zoom":{const n=typeof e.zoom=="number"?e.zoom:1;V({transform:{...me().transform,zoom:n},refusal:null});break}case"pan":{const n=me().transform;V({transform:{...n,cx:typeof e.cx=="number"?e.cx:n.cx,cy:typeof e.cy=="number"?e.cy:n.cy},refusal:null});break}case"move":N(`Moving "${String(e.node??"a node")}" writes Node.location — editing parity is not the program.`);break;case"link":N("Dragging between sockets would make a link — editing parity is not the program.");break;case"set-value":N(`Changing "${String(e.socket??"a socket")}" writes the socket's default_value — editing parity is not the program.`);break;case"use-nodes":N("Use Nodes writes Material.use_nodes — editing parity is not the program.");break;case"collapse-panel":N(`Collapsing "${String(e.panel??"a panel")}" writes the panel's is_collapsed — editing parity is not the program.`);break;default:N(`blender-node-view: no action "${t}" — state, look, view-all, zoom, pan, and the refusals move, link, set-value, use-nodes, collapse-panel.`)}return me()}let x=null;const ee=new Set;function ht(){ee.size&&k().history.invalidate([...ee]),ee.clear()}let Ae=null,Ye=!1;function te(e){try{const t=k().session.beginWork(`Blender: ${e}`);return()=>{try{t()}catch{}}}catch{return()=>{}}}function je(){const e=te("invalidating history and releasing runtime");try{ht(),Ae?.abort(),Ae=null,x?.terminate(),x=null,ft=null}finally{e()}}function mn(){Ye||(Ye=!0,k().session.onBeforeClose(async()=>{await x?.stop(),je()}),k().session.onEnded(je))}let ft=null;const yn=e=>typeof e=="object"&&e!==null&&typeof e.applyFrame=="function"&&typeof e.snapshot=="function"&&typeof e.captureSnapshot=="function"&&typeof e.recordPresentation=="function"&&typeof e.recordPhotograph=="function";async function bn(){const{documents:e}=k(),t=Date.now()+15e3;let n=L();for(;;){n=L();const r=await e.waitForContext(n,Math.max(0,Math.min(250,t-Date.now())));if(yn(r))return r;if(Date.now()>=t)break}throw new Error(`The Blender Model document is not open, or the open one is not a Model this engine can present to (it must answer applyFrame, captureSnapshot, recordPresentation and recordPhotograph): nothing published a presentable view as ${n} within 15 s (bound model: ${j?.documentId??"none"}). Open the Model document first (\`vgai blender-mcp\` opens it before its first call).`)}function E(){const e=Be();if(e)throw new Error(e);if(x!==null)return x;mn();const t=new AbortController;Ae=t;let n=!1;x=new _t({work:te,history:a=>{const o=x;if(!o)throw new Error("Blender history arrived before its runtime");for(const s of a){if("reset"in s){ht();continue}if(!s.resource)throw new Error("A Blender edit has no document resource");ee.add(s.resource);const i=async c=>{if(x!==o)throw new Error("This Blender history belongs to a closed worker");const f=await o.historyStep(s.id,c);return D(),await sn(tn().selected),f};k().history.record({id:s.id,label:s.label,resources:[s.resource],document:L(),undo:()=>i("undo"),redo:()=>i("redo")})}},present:async(a,o,s)=>{const i=Be();if(i)throw new Error(i);const c=L(),f=te("waiting for Model presenter");let l;try{l=await bn()}finally{f()}if(t.signal.throwIfAborted(),L()!==c)throw new Error("Blender document changed before its frame could be presented");const h=te("applying frame to Model"),b=(()=>{try{return l.applyFrame(a)}finally{h()}})(),M=typeof b=="object"&&b!==null&&"held"in b,A=M?b.held:null,w=B=>({...B===void 0?{}:{capture:B},...M?{held:A}:{}});if(l.recordPresentation(o),!s||(ft=s,!s.render))return w(void 0);const g=l.snapshot(),v=()=>{if(t.signal.throwIfAborted(),L()!==c||l.snapshot()!==g)throw new Error("Blender capture document or source revision changed before completion")};if(s.render.linearInput){const B=await Ze(null,s.render);return v(),w(B)}const{render:u,position:m,target:d,up:p}=s;if(!m||!d||!p)throw new Error("A Blender render capture must carry the scene camera position, target and up");if(n)throw new Error("A Blender render capture is already in progress");const S=l.captureSnapshot();n=!0,t.signal.addEventListener("abort",S.dispose,{once:!0});try{v();const B=new St;B.add(S.root),B.updateMatrixWorld(!0);const y=S.root.matrixWorld,oe=new Bt().copy(y).invert(),pt=new We().setFromMatrix4(y),wt=new We().setFromMatrix4(oe),ae=new ce(m[0],m[1],m[2]).applyMatrix4(y),$e=new ce(d[0],d[1],d[2]).applyMatrix4(y),Oe=new ce(p[0],p[1],p[2]).applyMatrix3(pt),se=Math.min(2048,Math.round(u.width))/Math.min(2048,Math.round(u.height)),Ne=bt(S.root).getBoundingSphere(new Ct),G=Tt(ae.distanceTo(Ne.center),Ne.radius);let T;if(u.orthographic){const z=u.fov/2;T=new At(-z*se,z*se,z,-z,G.near,G.far)}else T=new jt(u.fov,se,G.near,G.far);T.up.copy(Oe),T.position.copy(ae),T.lookAt($e),T.updateMatrixWorld(!0);const ie={position:ae.clone().applyMatrix4(oe).toArray(),target:$e.clone().applyMatrix4(oe).toArray(),up:Oe.clone().applyMatrix3(wt).toArray()};l.recordPhotograph({sent:{position:m,target:d,up:p},photographed:ie,render:{width:u.width,height:u.height,fov:u.fov,orthographic:u.orthographic}});const gt={none:ye,agx:Ge,neutral:It,filmic:ye};await S.prepare(T),v();const De={effect:S.effect,width:u.width,height:u.height,transparent:u.transparent===!0,toneMapping:gt[u.toneMapping]??Ge,exposure:u.exposure},Pe=u.toneMapping==="agx"||u.toneMapping==="filmic"||u.linear===!0?await Ze(Jt(B,T,De),u):null;if(v(),Pe)return w({...Pe,camera:ie});const le=Qt(B,T,De);if(!le)throw new Error("Blender render could not capture its image");return w({base64:le.slice(le.indexOf(",")+1),mimeType:"image/png",camera:ie})}finally{n=!1,t.signal.removeEventListener("abort",S.dispose),S.dispose()}},log:(a,o)=>(a==="error"?console.error:console.log)(`[blender] ${o}`)});const r=x;return k().session.reportWorkerCallMeter(()=>r.metrics()),x}const Mn="models/model.blend",C=(e,t)=>{const n=e[t];if(typeof n!="string")throw new Error(`${String(e.type)} requires a string "${t}"`);return n};async function vn(e){const t=k().projectLocalState.projectRootPath();if(t===null)return{};let n;try{n=await e.execute(`import bpy
|
|
2
|
+
print(bpy.data.filepath)
|
|
3
|
+
`,!1)}catch{return{}}if(/^Error executing code:/m.test(n))return{};const r=n.replace(/^Code executed successfully:/,"").split(`
|
|
4
|
+
`).map(o=>o.trim()).filter(o=>o.startsWith("/")).pop()??"";if(r==="")return{};const a=t.endsWith("/")?t:`${t}/`;return r.startsWith(a)?{document:r.slice(a.length)}:{}}async function qn(e){const t=k();if(e.type==="blender-status")return{ok:!0,data:{started:x?.project!=null,document:t.documents.context(L())!==void 0}};if(!t.session.open())return{ok:!1,error:`${e.type} needs an open project session; this editor page has none.`};try{const n=e.type==="blender-start"?C(e,"project"):null;let r=typeof e.document=="string"?e.document:void 0;if((e.type==="blender-stop"||e.type==="blender-start"&&e.fresh===!0)&&(await x?.stop(),je(),e.type==="blender-stop"))return{ok:!0,data:{stopped:!0}};if(e.type==="blender-start"&&!t.documents.context(L())){const o=await t.project.documentTable(),s=o.entries.filter(l=>l.kind==="model"),i=r!==void 0?s.find(l=>l.source?.path===r):s.find(l=>l.id===(j?.entryId??o.default))??(s.length===1?s[0]:void 0);if(!i)return{ok:!1,error:r!==void 0?`No declared Model document names ${r}.`:`Choose a Model document before starting Blender. Available: ${s.map(l=>l.id).join(", ")||"(none)"}.`};const c=i.id;if(r=i.source?.path,!await t.workspace.open({kind:"document",id:c}))return{ok:!1,error:`blender-start could not open the Blender Model document ${c}: nothing in this editor opens that document (the Model document ships with @volter/editor-blender).`}}const a=E();switch(e.type){case"blender-start":{const o=r!==void 0?r:j?.blend??Mn;return{ok:!0,data:{...await a.start(n,o)}}}case"blender-execute":return{ok:!0,data:{result:(await pn(C(e,"code"))).text}};case"blender-scene-info":return{ok:!0,data:{result:await a.sceneInfo()}};case"blender-object-info":return{ok:!0,data:{result:await a.objectInfo(C(e,"name"))}};case"blender-rna":{const o=typeof e.names=="number"?e.names:void 0;return{ok:!0,data:{result:await a.rna(C(e,"path"),o)}}}case"blender-rna-context":{const o=typeof e.object=="string"?e.object:void 0,s=typeof e.collection=="string"?e.collection:void 0;return{ok:!0,data:{result:await a.rnaContext(o,s)}}}case"blender-rna-set":{const o=typeof e.index=="number"?e.index:void 0;return{ok:!0,data:{result:await fn(C(e,"path"),C(e,"property"),e.value,o)}}}case"blender-outliner":{const o=Array.isArray(e.selected)?e.selected.filter(s=>typeof s=="string"):void 0;return{ok:!0,data:{result:await a.outliner(o)}}}case"blender-node-tree":return{ok:!0,data:{result:await a.nodeTree({...typeof e.path=="string"?{path:e.path}:{},...typeof e.material=="string"?{material:e.material}:{}})}};case"blender-uv-layout":return{ok:!0,data:{result:await a.uvLayout({...typeof e.object=="string"?{object:e.object}:{},...typeof e.uvLayer=="string"?{uvLayer:e.uvLayer}:{}})}};case"blender-rig":return{ok:!0,data:{result:await a.rig({...typeof e.object=="string"?{object:e.object}:{}})}};case"blender-action-clip":return{ok:!0,data:{result:await a.actionClip({...typeof e.object=="string"?{object:e.object}:{},...typeof e.bake=="boolean"?{bake:e.bake}:{}})}};case"blender-node-view":{const o=typeof e.action=="string"?e.action:"state";return{ok:!0,data:{result:gn.verbs.some(i=>i.id===o)?Mt("blender-node-view",o,e):dt(e)}}}case"blender-outliner-set":return{ok:!0,data:{result:await ut(C(e,"path"),C(e,"column"),e.value!==!1)}};case"blender-screenshot-view":{const o=typeof e.maxSize=="number"?e.maxSize:1e3,s={kind:"document",id:j?.entryId??"blender:runtime"};return{ok:!0,data:{...await a.screenshotView(o),document:s}}}case"blender-read-file":{const o=await a.readFile(C(e,"path")),s=C(e,"transferId"),i=await fetch(`/__editor/blender-file?id=${encodeURIComponent(s)}`,{method:"POST",headers:{"content-type":"application/octet-stream"},body:new Blob([o])});return i.ok?{ok:!0,data:{bytes:o.length}}:{ok:!1,error:`Transfer ${s} was refused: ${i.status}`}}case"blender-write-file":{const o=atob(C(e,"base64")),s=Uint8Array.from(o,i=>i.charCodeAt(0));return await a.writeFile(C(e,"path"),s),{ok:!0,data:{written:s.length}}}case"blender-list-files":{const o=await a.listFiles(C(e,"path")),s=a.presented;return{ok:!0,data:{entries:o,...s?{session:s.session,revision:s.revision}:{},...await vn(a)}}}}return{ok:!1,error:`Unknown Blender command ${e.type}`}}catch(n){return{ok:!1,error:n instanceof Error?n.message:String(n)}}}export{Ln as A,Rn as B,lt as C,I as D,D as E,Dn as F,Nn as G,gn as N,_n as a,$n as b,V as c,me as d,Vn as e,Fn as f,zn as g,qn as h,Gn as i,Wn as j,Sn as k,sn as l,tn as m,Tn as n,An as o,Bn as p,Te as q,N as r,On as s,fn as t,Un as u,Pn as v,In as w,jn as x,Cn as y,pn as z};
|