@fps-games/editor-deployment 0.2.3-beta.10
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/bin/fps-editor-agent.mjs +5 -0
- package/bin/fps-editor-prepare.mjs +5 -0
- package/bin/fps-editor-project.mjs +18 -0
- package/bin/fps-editor-server.mjs +2 -0
- package/licenses/THIRD_PARTY_NOTICES.txt +7 -0
- package/manifest.json +2688 -0
- package/npm-shrinkwrap.json +21 -0
- package/package.json +44 -0
- package/public/assets/abstractAudioBus-BRAC2GY2.js +1 -0
- package/public/assets/animation-C6iNAO1g.js +1 -0
- package/public/assets/animation-C6iNAO1g.js.br +0 -0
- package/public/assets/animation-C6iNAO1g.js.gz +0 -0
- package/public/assets/animationGroup-C74XVFRE.js +1 -0
- package/public/assets/animationGroup-C74XVFRE.js.br +0 -0
- package/public/assets/animationGroup-C74XVFRE.js.gz +0 -0
- package/public/assets/arcRotateCamera-CIQYNBBJ.js +1 -0
- package/public/assets/arcRotateCamera-CIQYNBBJ.js.br +0 -0
- package/public/assets/arcRotateCamera-CIQYNBBJ.js.gz +0 -0
- package/public/assets/babylon-core-PuGyjHMj.js +13882 -0
- package/public/assets/babylon-core-PuGyjHMj.js.br +0 -0
- package/public/assets/babylon-core-PuGyjHMj.js.gz +0 -0
- package/public/assets/babylon-core-S0gBQJVe.js +1 -0
- package/public/assets/babylon-core-S0gBQJVe.js.br +0 -0
- package/public/assets/babylon-core-S0gBQJVe.js.gz +0 -0
- package/public/assets/basisTextureLoader-BdapVvhf.js +1 -0
- package/public/assets/basisTextureLoader-BdapVvhf.js.br +0 -0
- package/public/assets/basisTextureLoader-BdapVvhf.js.gz +0 -0
- package/public/assets/bumpVertex-DMhnr4dz.js +173 -0
- package/public/assets/bumpVertex-DMhnr4dz.js.br +0 -0
- package/public/assets/bumpVertex-DMhnr4dz.js.gz +0 -0
- package/public/assets/bumpVertex-DpGOKCkn.js +177 -0
- package/public/assets/bumpVertex-DpGOKCkn.js.br +0 -0
- package/public/assets/bumpVertex-DpGOKCkn.js.gz +0 -0
- package/public/assets/chromaticAberration.fragment-BgX-2zxS.js +7 -0
- package/public/assets/chromaticAberration.fragment-BgX-2zxS.js.br +0 -0
- package/public/assets/chromaticAberration.fragment-BgX-2zxS.js.gz +0 -0
- package/public/assets/chromaticAberration.fragment-D7t6Txg4.js +6 -0
- package/public/assets/chromaticAberration.fragment-D7t6Txg4.js.br +0 -0
- package/public/assets/chromaticAberration.fragment-D7t6Txg4.js.gz +0 -0
- package/public/assets/circleOfConfusion.fragment-D1RtHaPm.js +17 -0
- package/public/assets/circleOfConfusion.fragment-D1RtHaPm.js.br +0 -0
- package/public/assets/circleOfConfusion.fragment-D1RtHaPm.js.gz +0 -0
- package/public/assets/circleOfConfusion.fragment-D8geMRma.js +17 -0
- package/public/assets/circleOfConfusion.fragment-D8geMRma.js.br +0 -0
- package/public/assets/circleOfConfusion.fragment-D8geMRma.js.gz +0 -0
- package/public/assets/clipPlaneFragment-Bgl3Usc4.js +46 -0
- package/public/assets/clipPlaneFragment-Bgl3Usc4.js.br +0 -0
- package/public/assets/clipPlaneFragment-Bgl3Usc4.js.gz +0 -0
- package/public/assets/clipPlaneVertex-BxK9aoI2.js +177 -0
- package/public/assets/clipPlaneVertex-BxK9aoI2.js.br +0 -0
- package/public/assets/clipPlaneVertex-BxK9aoI2.js.gz +0 -0
- package/public/assets/color.fragment-BUdIBar6.js +20 -0
- package/public/assets/color.fragment-BUdIBar6.js.br +0 -0
- package/public/assets/color.fragment-BUdIBar6.js.gz +0 -0
- package/public/assets/color.fragment-CDn4ZgkT.js +21 -0
- package/public/assets/color.fragment-CDn4ZgkT.js.br +0 -0
- package/public/assets/color.fragment-CDn4ZgkT.js.gz +0 -0
- package/public/assets/color.vertex-CaMOSKlC.js +39 -0
- package/public/assets/color.vertex-CaMOSKlC.js.br +5 -0
- package/public/assets/color.vertex-CaMOSKlC.js.gz +0 -0
- package/public/assets/color.vertex-dgbB6mhK.js +32 -0
- package/public/assets/color.vertex-dgbB6mhK.js.br +0 -0
- package/public/assets/color.vertex-dgbB6mhK.js.gz +0 -0
- package/public/assets/dds-3J0FZYX1.js +1 -0
- package/public/assets/dds-3J0FZYX1.js.br +0 -0
- package/public/assets/dds-3J0FZYX1.js.gz +0 -0
- package/public/assets/ddsTextureLoader-s5HptTVZ.js +1 -0
- package/public/assets/ddsTextureLoader-s5HptTVZ.js.br +0 -0
- package/public/assets/ddsTextureLoader-s5HptTVZ.js.gz +0 -0
- package/public/assets/default.fragment-C4xg7O-P.js +526 -0
- package/public/assets/default.fragment-C4xg7O-P.js.br +0 -0
- package/public/assets/default.fragment-C4xg7O-P.js.gz +0 -0
- package/public/assets/default.fragment-C4zjkcFb.js +468 -0
- package/public/assets/default.fragment-C4zjkcFb.js.br +0 -0
- package/public/assets/default.fragment-C4zjkcFb.js.gz +0 -0
- package/public/assets/default.vertex-A8wQopNr.js +193 -0
- package/public/assets/default.vertex-A8wQopNr.js.br +0 -0
- package/public/assets/default.vertex-A8wQopNr.js.gz +0 -0
- package/public/assets/default.vertex-YrvIUn4x.js +181 -0
- package/public/assets/default.vertex-YrvIUn4x.js.br +0 -0
- package/public/assets/default.vertex-YrvIUn4x.js.gz +0 -0
- package/public/assets/defaultUboDeclaration-C8GCosBM.js +5 -0
- package/public/assets/defaultUboDeclaration-C8GCosBM.js.br +0 -0
- package/public/assets/defaultUboDeclaration-C8GCosBM.js.gz +0 -0
- package/public/assets/defaultUboDeclaration-D26o_DDO.js +7 -0
- package/public/assets/defaultUboDeclaration-D26o_DDO.js.br +0 -0
- package/public/assets/defaultUboDeclaration-D26o_DDO.js.gz +0 -0
- package/public/assets/depth.fragment-Bn8G24s-.js +40 -0
- package/public/assets/depth.fragment-Bn8G24s-.js.br +4 -0
- package/public/assets/depth.fragment-Bn8G24s-.js.gz +0 -0
- package/public/assets/depth.vertex-B2lrdlJh.js +57 -0
- package/public/assets/depth.vertex-B2lrdlJh.js.br +0 -0
- package/public/assets/depth.vertex-B2lrdlJh.js.gz +0 -0
- package/public/assets/depthBoxBlur.fragment-BtTv8wid.js +5 -0
- package/public/assets/depthBoxBlur.fragment-BtTv8wid.js.br +0 -0
- package/public/assets/depthBoxBlur.fragment-BtTv8wid.js.gz +0 -0
- package/public/assets/depthBoxBlur.fragment-DViDG6Vb.js +6 -0
- package/public/assets/depthBoxBlur.fragment-DViDG6Vb.js.br +0 -0
- package/public/assets/depthBoxBlur.fragment-DViDG6Vb.js.gz +0 -0
- package/public/assets/depthOfFieldMerge.fragment-DCspcdWZ.js +26 -0
- package/public/assets/depthOfFieldMerge.fragment-DCspcdWZ.js.br +0 -0
- package/public/assets/depthOfFieldMerge.fragment-DCspcdWZ.js.gz +0 -0
- package/public/assets/depthOfFieldMerge.fragment-Ds-g4Ln8.js +21 -0
- package/public/assets/depthOfFieldMerge.fragment-Ds-g4Ln8.js.br +0 -0
- package/public/assets/depthOfFieldMerge.fragment-Ds-g4Ln8.js.gz +0 -0
- package/public/assets/dynamicTexture-Cuby-VOT.js +1329 -0
- package/public/assets/dynamicTexture-Cuby-VOT.js.br +0 -0
- package/public/assets/dynamicTexture-Cuby-VOT.js.gz +0 -0
- package/public/assets/easing-DbzzrXOl.js +1 -0
- package/public/assets/easing-DbzzrXOl.js.br +0 -0
- package/public/assets/easing-DbzzrXOl.js.gz +0 -0
- package/public/assets/editor-core-plugin-host-c2002442.js +1 -0
- package/public/assets/editor-core-plugin-host-c2002442.js.br +0 -0
- package/public/assets/editor-core-plugin-host-c2002442.js.gz +0 -0
- package/public/assets/exrTextureLoader-D39k4eK_.js +1 -0
- package/public/assets/exrTextureLoader-D39k4eK_.js.br +0 -0
- package/public/assets/exrTextureLoader-D39k4eK_.js.gz +0 -0
- package/public/assets/flowGraphArrayIndexBlock-C8nTWR8h.js +1 -0
- package/public/assets/flowGraphArrayIndexBlock-C8nTWR8h.js.br +0 -0
- package/public/assets/flowGraphArrayIndexBlock-C8nTWR8h.js.gz +0 -0
- package/public/assets/flowGraphBezierCurveEasingBlock-Izh7s0Zh.js +1 -0
- package/public/assets/flowGraphBezierCurveEasingBlock-Izh7s0Zh.js.br +0 -0
- package/public/assets/flowGraphBezierCurveEasingBlock-Izh7s0Zh.js.gz +0 -0
- package/public/assets/flowGraphBinaryOperationBlock-BRfalQP5.js +1 -0
- package/public/assets/flowGraphBinaryOperationBlock-BRfalQP5.js.br +0 -0
- package/public/assets/flowGraphBinaryOperationBlock-BRfalQP5.js.gz +0 -0
- package/public/assets/flowGraphBranchBlock-CV_leJX3.js +1 -0
- package/public/assets/flowGraphBranchBlock-CV_leJX3.js.br +0 -0
- package/public/assets/flowGraphBranchBlock-CV_leJX3.js.gz +0 -0
- package/public/assets/flowGraphCachedOperationBlock-BysRM-Ha.js +1 -0
- package/public/assets/flowGraphCachedOperationBlock-BysRM-Ha.js.br +2 -0
- package/public/assets/flowGraphCachedOperationBlock-BysRM-Ha.js.gz +0 -0
- package/public/assets/flowGraphCancelDelayBlock-BK6tDTGy.js +1 -0
- package/public/assets/flowGraphCancelDelayBlock-BK6tDTGy.js.br +0 -0
- package/public/assets/flowGraphCancelDelayBlock-BK6tDTGy.js.gz +0 -0
- package/public/assets/flowGraphCodeExecutionBlock-CQABvaP8.js +1 -0
- package/public/assets/flowGraphCodeExecutionBlock-CQABvaP8.js.br +0 -0
- package/public/assets/flowGraphCodeExecutionBlock-CQABvaP8.js.gz +0 -0
- package/public/assets/flowGraphConditionalDataBlock-D7OU_UOM.js +1 -0
- package/public/assets/flowGraphConditionalDataBlock-D7OU_UOM.js.br +0 -0
- package/public/assets/flowGraphConditionalDataBlock-D7OU_UOM.js.gz +0 -0
- package/public/assets/flowGraphConsoleLogBlock-BBxVDGOV.js +1 -0
- package/public/assets/flowGraphConsoleLogBlock-BBxVDGOV.js.br +0 -0
- package/public/assets/flowGraphConsoleLogBlock-BBxVDGOV.js.gz +0 -0
- package/public/assets/flowGraphConstantBlock-Cn3ZMGR0.js +1 -0
- package/public/assets/flowGraphConstantBlock-Cn3ZMGR0.js.br +0 -0
- package/public/assets/flowGraphConstantBlock-Cn3ZMGR0.js.gz +0 -0
- package/public/assets/flowGraphContextBlock-BS3b2XbE.js +1 -0
- package/public/assets/flowGraphContextBlock-BS3b2XbE.js.br +0 -0
- package/public/assets/flowGraphContextBlock-BS3b2XbE.js.gz +0 -0
- package/public/assets/flowGraphCounterBlock-xdcRCw4l.js +1 -0
- package/public/assets/flowGraphCounterBlock-xdcRCw4l.js.br +0 -0
- package/public/assets/flowGraphCounterBlock-xdcRCw4l.js.gz +0 -0
- package/public/assets/flowGraphDataSwitchBlock-dY8TSZtd.js +1 -0
- package/public/assets/flowGraphDataSwitchBlock-dY8TSZtd.js.br +0 -0
- package/public/assets/flowGraphDataSwitchBlock-dY8TSZtd.js.gz +0 -0
- package/public/assets/flowGraphDebounceBlock-Q_f2x-ID.js +1 -0
- package/public/assets/flowGraphDebounceBlock-Q_f2x-ID.js.br +0 -0
- package/public/assets/flowGraphDebounceBlock-Q_f2x-ID.js.gz +0 -0
- package/public/assets/flowGraphDoNBlock-COo31G00.js +1 -0
- package/public/assets/flowGraphDoNBlock-COo31G00.js.br +0 -0
- package/public/assets/flowGraphDoNBlock-COo31G00.js.gz +0 -0
- package/public/assets/flowGraphEasingBlock-jGW-fKIB.js +1 -0
- package/public/assets/flowGraphEasingBlock-jGW-fKIB.js.br +0 -0
- package/public/assets/flowGraphEasingBlock-jGW-fKIB.js.gz +0 -0
- package/public/assets/flowGraphFlipFlopBlock-B8znf-3o.js +1 -0
- package/public/assets/flowGraphFlipFlopBlock-B8znf-3o.js.br +0 -0
- package/public/assets/flowGraphFlipFlopBlock-B8znf-3o.js.gz +0 -0
- package/public/assets/flowGraphForLoopBlock-UxZSh8US.js +1 -0
- package/public/assets/flowGraphForLoopBlock-UxZSh8US.js.br +0 -0
- package/public/assets/flowGraphForLoopBlock-UxZSh8US.js.gz +0 -0
- package/public/assets/flowGraphFunctionReferenceBlock-c3ZQWBhk.js +1 -0
- package/public/assets/flowGraphFunctionReferenceBlock-c3ZQWBhk.js.br +0 -0
- package/public/assets/flowGraphFunctionReferenceBlock-c3ZQWBhk.js.gz +0 -0
- package/public/assets/flowGraphGetAssetBlock-B3zYUZmJ.js +1 -0
- package/public/assets/flowGraphGetAssetBlock-B3zYUZmJ.js.br +0 -0
- package/public/assets/flowGraphGetAssetBlock-B3zYUZmJ.js.gz +0 -0
- package/public/assets/flowGraphGetPropertyBlock-D--vcmMS.js +1 -0
- package/public/assets/flowGraphGetPropertyBlock-D--vcmMS.js.br +0 -0
- package/public/assets/flowGraphGetPropertyBlock-D--vcmMS.js.gz +0 -0
- package/public/assets/flowGraphGetVariableBlock-BkCEyiL6.js +1 -0
- package/public/assets/flowGraphGetVariableBlock-BkCEyiL6.js.br +0 -0
- package/public/assets/flowGraphGetVariableBlock-BkCEyiL6.js.gz +0 -0
- package/public/assets/flowGraphIndexOfBlock-C4ipR7YB.js +1 -0
- package/public/assets/flowGraphIndexOfBlock-C4ipR7YB.js.br +0 -0
- package/public/assets/flowGraphIndexOfBlock-C4ipR7YB.js.gz +0 -0
- package/public/assets/flowGraphInterpolationBlock-DuRc3LX7.js +1 -0
- package/public/assets/flowGraphInterpolationBlock-DuRc3LX7.js.br +0 -0
- package/public/assets/flowGraphInterpolationBlock-DuRc3LX7.js.gz +0 -0
- package/public/assets/flowGraphJsonPointerParserBlock-urEWktqi.js +1 -0
- package/public/assets/flowGraphJsonPointerParserBlock-urEWktqi.js.br +0 -0
- package/public/assets/flowGraphJsonPointerParserBlock-urEWktqi.js.gz +0 -0
- package/public/assets/flowGraphMathBlocks-CGTCQVqz.js +1 -0
- package/public/assets/flowGraphMathBlocks-CGTCQVqz.js.br +0 -0
- package/public/assets/flowGraphMathBlocks-CGTCQVqz.js.gz +0 -0
- package/public/assets/flowGraphMathCombineExtractBlocks-DDHGbRPt.js +1 -0
- package/public/assets/flowGraphMathCombineExtractBlocks-DDHGbRPt.js.br +0 -0
- package/public/assets/flowGraphMathCombineExtractBlocks-DDHGbRPt.js.gz +0 -0
- package/public/assets/flowGraphMatrixMathBlocks-Bwp1BysB.js +1 -0
- package/public/assets/flowGraphMatrixMathBlocks-Bwp1BysB.js.br +0 -0
- package/public/assets/flowGraphMatrixMathBlocks-Bwp1BysB.js.gz +0 -0
- package/public/assets/flowGraphMeshPickEventBlock-2wkqhQCG.js +1 -0
- package/public/assets/flowGraphMeshPickEventBlock-2wkqhQCG.js.br +0 -0
- package/public/assets/flowGraphMeshPickEventBlock-2wkqhQCG.js.gz +0 -0
- package/public/assets/flowGraphMultiGateBlock-BuKmvqC8.js +1 -0
- package/public/assets/flowGraphMultiGateBlock-BuKmvqC8.js.br +0 -0
- package/public/assets/flowGraphMultiGateBlock-BuKmvqC8.js.gz +0 -0
- package/public/assets/flowGraphPauseAnimationBlock-T_-VP-t5.js +1 -0
- package/public/assets/flowGraphPauseAnimationBlock-T_-VP-t5.js.br +0 -0
- package/public/assets/flowGraphPauseAnimationBlock-T_-VP-t5.js.gz +0 -0
- package/public/assets/flowGraphPlayAnimationBlock-DDVrE__n.js +1 -0
- package/public/assets/flowGraphPlayAnimationBlock-DDVrE__n.js.br +0 -0
- package/public/assets/flowGraphPlayAnimationBlock-DDVrE__n.js.gz +0 -0
- package/public/assets/flowGraphPointerOutEventBlock-Cx15Sf5R.js +1 -0
- package/public/assets/flowGraphPointerOutEventBlock-Cx15Sf5R.js.br +0 -0
- package/public/assets/flowGraphPointerOutEventBlock-Cx15Sf5R.js.gz +0 -0
- package/public/assets/flowGraphPointerOverEventBlock-DzzHa-dN.js +1 -0
- package/public/assets/flowGraphPointerOverEventBlock-DzzHa-dN.js.br +0 -0
- package/public/assets/flowGraphPointerOverEventBlock-DzzHa-dN.js.gz +0 -0
- package/public/assets/flowGraphReceiveCustomEventBlock-DKfLODu3.js +1 -0
- package/public/assets/flowGraphReceiveCustomEventBlock-DKfLODu3.js.br +0 -0
- package/public/assets/flowGraphReceiveCustomEventBlock-DKfLODu3.js.gz +0 -0
- package/public/assets/flowGraphSceneReadyEventBlock-ClJu3s64.js +1 -0
- package/public/assets/flowGraphSceneReadyEventBlock-ClJu3s64.js.br +0 -0
- package/public/assets/flowGraphSceneReadyEventBlock-ClJu3s64.js.gz +0 -0
- package/public/assets/flowGraphSceneTickEventBlock-3ZNr4eqw.js +1 -0
- package/public/assets/flowGraphSceneTickEventBlock-3ZNr4eqw.js.br +0 -0
- package/public/assets/flowGraphSceneTickEventBlock-3ZNr4eqw.js.gz +0 -0
- package/public/assets/flowGraphSendCustomEventBlock-CdKQeuma.js +1 -0
- package/public/assets/flowGraphSendCustomEventBlock-CdKQeuma.js.br +0 -0
- package/public/assets/flowGraphSendCustomEventBlock-CdKQeuma.js.gz +0 -0
- package/public/assets/flowGraphSequenceBlock-D0-_bFV3.js +1 -0
- package/public/assets/flowGraphSequenceBlock-D0-_bFV3.js.br +0 -0
- package/public/assets/flowGraphSequenceBlock-D0-_bFV3.js.gz +0 -0
- package/public/assets/flowGraphSetDelayBlock-B8946WOc.js +1 -0
- package/public/assets/flowGraphSetDelayBlock-B8946WOc.js.br +0 -0
- package/public/assets/flowGraphSetDelayBlock-B8946WOc.js.gz +0 -0
- package/public/assets/flowGraphSetPropertyBlock-Cx0IyW-a.js +1 -0
- package/public/assets/flowGraphSetPropertyBlock-Cx0IyW-a.js.br +0 -0
- package/public/assets/flowGraphSetPropertyBlock-Cx0IyW-a.js.gz +0 -0
- package/public/assets/flowGraphSetVariableBlock-0dns_CH6.js +1 -0
- package/public/assets/flowGraphSetVariableBlock-0dns_CH6.js.br +0 -0
- package/public/assets/flowGraphSetVariableBlock-0dns_CH6.js.gz +0 -0
- package/public/assets/flowGraphStopAnimationBlock-z4ou311H.js +1 -0
- package/public/assets/flowGraphStopAnimationBlock-z4ou311H.js.br +0 -0
- package/public/assets/flowGraphStopAnimationBlock-z4ou311H.js.gz +0 -0
- package/public/assets/flowGraphSwitchBlock-E7meS39u.js +1 -0
- package/public/assets/flowGraphSwitchBlock-E7meS39u.js.br +0 -0
- package/public/assets/flowGraphSwitchBlock-E7meS39u.js.gz +0 -0
- package/public/assets/flowGraphThrottleBlock-CldHJDs6.js +1 -0
- package/public/assets/flowGraphThrottleBlock-CldHJDs6.js.br +0 -0
- package/public/assets/flowGraphThrottleBlock-CldHJDs6.js.gz +0 -0
- package/public/assets/flowGraphTransformCoordinatesSystemBlock-pYdpcwK7.js +1 -0
- package/public/assets/flowGraphTransformCoordinatesSystemBlock-pYdpcwK7.js.br +0 -0
- package/public/assets/flowGraphTransformCoordinatesSystemBlock-pYdpcwK7.js.gz +0 -0
- package/public/assets/flowGraphTypeToTypeBlocks-CYfvLPJ-.js +1 -0
- package/public/assets/flowGraphTypeToTypeBlocks-CYfvLPJ-.js.br +0 -0
- package/public/assets/flowGraphTypeToTypeBlocks-CYfvLPJ-.js.gz +0 -0
- package/public/assets/flowGraphUnaryOperationBlock-s-kJ99D8.js +1 -0
- package/public/assets/flowGraphUnaryOperationBlock-s-kJ99D8.js.br +0 -0
- package/public/assets/flowGraphUnaryOperationBlock-s-kJ99D8.js.gz +0 -0
- package/public/assets/flowGraphVectorMathBlocks-D7iofIoY.js +1 -0
- package/public/assets/flowGraphVectorMathBlocks-D7iofIoY.js.br +0 -0
- package/public/assets/flowGraphVectorMathBlocks-D7iofIoY.js.gz +0 -0
- package/public/assets/flowGraphWaitAllBlock-CAW7HgUP.js +1 -0
- package/public/assets/flowGraphWaitAllBlock-CAW7HgUP.js.br +0 -0
- package/public/assets/flowGraphWaitAllBlock-CAW7HgUP.js.gz +0 -0
- package/public/assets/flowGraphWhileLoopBlock-DRP9_Zd1.js +1 -0
- package/public/assets/flowGraphWhileLoopBlock-DRP9_Zd1.js.br +0 -0
- package/public/assets/flowGraphWhileLoopBlock-DRP9_Zd1.js.gz +0 -0
- package/public/assets/fogFragmentDeclaration-CzUy86ul.js +22 -0
- package/public/assets/fogFragmentDeclaration-CzUy86ul.js.br +0 -0
- package/public/assets/fogFragmentDeclaration-CzUy86ul.js.gz +0 -0
- package/public/assets/fogFragmentDeclaration-kfcrkpgB.js +23 -0
- package/public/assets/fogFragmentDeclaration-kfcrkpgB.js.br +0 -0
- package/public/assets/fogFragmentDeclaration-kfcrkpgB.js.gz +0 -0
- package/public/assets/glowBlurPostProcess.fragment-CS_rTtUL.js +7 -0
- package/public/assets/glowBlurPostProcess.fragment-CS_rTtUL.js.br +0 -0
- package/public/assets/glowBlurPostProcess.fragment-CS_rTtUL.js.gz +0 -0
- package/public/assets/glowBlurPostProcess.fragment-G_xfSiIr.js +7 -0
- package/public/assets/glowBlurPostProcess.fragment-G_xfSiIr.js.br +0 -0
- package/public/assets/glowBlurPostProcess.fragment-G_xfSiIr.js.gz +0 -0
- package/public/assets/glowMapGeneration.fragment-DwJ3bpr6.js +63 -0
- package/public/assets/glowMapGeneration.fragment-DwJ3bpr6.js.br +0 -0
- package/public/assets/glowMapGeneration.fragment-DwJ3bpr6.js.gz +0 -0
- package/public/assets/glowMapGeneration.fragment-mDEHNZRi.js +63 -0
- package/public/assets/glowMapGeneration.fragment-mDEHNZRi.js.br +0 -0
- package/public/assets/glowMapGeneration.fragment-mDEHNZRi.js.gz +0 -0
- package/public/assets/glowMapGeneration.vertex-BACa9-r4.js +75 -0
- package/public/assets/glowMapGeneration.vertex-BACa9-r4.js.br +0 -0
- package/public/assets/glowMapGeneration.vertex-BACa9-r4.js.gz +0 -0
- package/public/assets/glowMapGeneration.vertex-mAWUJxSB.js +75 -0
- package/public/assets/glowMapGeneration.vertex-mAWUJxSB.js.br +3 -0
- package/public/assets/glowMapGeneration.vertex-mAWUJxSB.js.gz +0 -0
- package/public/assets/glowMapMerge.fragment-0Im35OVD.js +23 -0
- package/public/assets/glowMapMerge.fragment-0Im35OVD.js.br +0 -0
- package/public/assets/glowMapMerge.fragment-0Im35OVD.js.gz +0 -0
- package/public/assets/glowMapMerge.fragment-BXHfrWgL.js +25 -0
- package/public/assets/glowMapMerge.fragment-BXHfrWgL.js.br +0 -0
- package/public/assets/glowMapMerge.fragment-BXHfrWgL.js.gz +0 -0
- package/public/assets/glowMapMerge.vertex-8A2ntYoS.js +7 -0
- package/public/assets/glowMapMerge.vertex-8A2ntYoS.js.br +0 -0
- package/public/assets/glowMapMerge.vertex-8A2ntYoS.js.gz +0 -0
- package/public/assets/glowMapMerge.vertex-Cnm-5WLT.js +8 -0
- package/public/assets/glowMapMerge.vertex-Cnm-5WLT.js.br +0 -0
- package/public/assets/glowMapMerge.vertex-Cnm-5WLT.js.gz +0 -0
- package/public/assets/grain.fragment-BMGi-Hgp.js +6 -0
- package/public/assets/grain.fragment-BMGi-Hgp.js.br +0 -0
- package/public/assets/grain.fragment-BMGi-Hgp.js.gz +0 -0
- package/public/assets/grain.fragment-CH9zg05c.js +5 -0
- package/public/assets/grain.fragment-CH9zg05c.js.br +0 -0
- package/public/assets/grain.fragment-CH9zg05c.js.gz +0 -0
- package/public/assets/harmonicsFunctions-BQTTvws3.js +192 -0
- package/public/assets/harmonicsFunctions-BQTTvws3.js.br +0 -0
- package/public/assets/harmonicsFunctions-BQTTvws3.js.gz +0 -0
- package/public/assets/harmonicsFunctions-DtIiYWL1.js +189 -0
- package/public/assets/harmonicsFunctions-DtIiYWL1.js.br +0 -0
- package/public/assets/harmonicsFunctions-DtIiYWL1.js.gz +0 -0
- package/public/assets/hdrTextureLoader-Dqvpv0kr.js +2 -0
- package/public/assets/hdrTextureLoader-Dqvpv0kr.js.br +0 -0
- package/public/assets/hdrTextureLoader-Dqvpv0kr.js.gz +0 -0
- package/public/assets/iesTextureLoader-B8AoKSG2.js +2 -0
- package/public/assets/iesTextureLoader-B8AoKSG2.js.br +0 -0
- package/public/assets/iesTextureLoader-B8AoKSG2.js.gz +0 -0
- package/public/assets/index-CiIoJ8v1.js +4 -0
- package/public/assets/index-CiIoJ8v1.js.br +0 -0
- package/public/assets/index-CiIoJ8v1.js.gz +0 -0
- package/public/assets/index-Dhf9rSmv.js +1 -0
- package/public/assets/index-Dhf9rSmv.js.br +0 -0
- package/public/assets/index-Dhf9rSmv.js.gz +0 -0
- package/public/assets/instancesDeclaration-B2a0VuuR.js +23 -0
- package/public/assets/instancesDeclaration-B2a0VuuR.js.br +0 -0
- package/public/assets/instancesDeclaration-B2a0VuuR.js.gz +0 -0
- package/public/assets/ktxTextureLoader-DTr7AKqG.js +1 -0
- package/public/assets/ktxTextureLoader-DTr7AKqG.js.br +0 -0
- package/public/assets/ktxTextureLoader-DTr7AKqG.js.gz +0 -0
- package/public/assets/lazy-Cj-01uhW.js +2 -0
- package/public/assets/lazy-Cj-01uhW.js.br +0 -0
- package/public/assets/lazy-Cj-01uhW.js.gz +0 -0
- package/public/assets/lod.fragment-BuvQbBhE.js +3 -0
- package/public/assets/lod.fragment-BuvQbBhE.js.br +0 -0
- package/public/assets/lod.fragment-BuvQbBhE.js.gz +0 -0
- package/public/assets/lod.fragment-Cp0eqGjl.js +3 -0
- package/public/assets/lod.fragment-Cp0eqGjl.js.br +3 -0
- package/public/assets/lod.fragment-Cp0eqGjl.js.gz +0 -0
- package/public/assets/lodCube.fragment-CI1eTppS.js +22 -0
- package/public/assets/lodCube.fragment-CI1eTppS.js.br +2 -0
- package/public/assets/lodCube.fragment-CI1eTppS.js.gz +0 -0
- package/public/assets/lodCube.fragment-yDzV1teg.js +22 -0
- package/public/assets/lodCube.fragment-yDzV1teg.js.br +0 -0
- package/public/assets/lodCube.fragment-yDzV1teg.js.gz +0 -0
- package/public/assets/logDepthDeclaration-CeLLOhuK.js +4 -0
- package/public/assets/logDepthDeclaration-XDsVKoT0.js +4 -0
- package/public/assets/logDepthFragment-BPP-rBiT.js +4 -0
- package/public/assets/logDepthFragment-BPP-rBiT.js.br +0 -0
- package/public/assets/logDepthFragment-BPP-rBiT.js.gz +0 -0
- package/public/assets/logDepthFragment-CDaMyvfH.js +4 -0
- package/public/assets/logDepthVertex-CkFa6uAf.js +4 -0
- package/public/assets/logDepthVertex-CkFa6uAf.js.br +0 -0
- package/public/assets/logDepthVertex-CkFa6uAf.js.gz +0 -0
- package/public/assets/logDepthVertex-H6E8NLz1.js +4 -0
- package/public/assets/logDepthVertex-H6E8NLz1.js.br +1 -0
- package/public/assets/logDepthVertex-H6E8NLz1.js.gz +0 -0
- package/public/assets/mainUVVaryingDeclaration-DdwP8xi_.js +4 -0
- package/public/assets/mainUVVaryingDeclaration-OBB3LR8s.js +4 -0
- package/public/assets/mesh.vertexData.functions-BXkNVxNr.js +1 -0
- package/public/assets/mesh.vertexData.functions-BXkNVxNr.js.br +0 -0
- package/public/assets/mesh.vertexData.functions-BXkNVxNr.js.gz +0 -0
- package/public/assets/meshUboDeclaration-Cr5YhBB1.js +13 -0
- package/public/assets/meshUboDeclaration-Cr5YhBB1.js.br +0 -0
- package/public/assets/meshUboDeclaration-Cr5YhBB1.js.gz +0 -0
- package/public/assets/meshUboDeclaration-Uj1CsoJP.js +13 -0
- package/public/assets/meshUboDeclaration-Uj1CsoJP.js.br +0 -0
- package/public/assets/meshUboDeclaration-Uj1CsoJP.js.gz +0 -0
- package/public/assets/morphTargetsVertex-B9xWvV_u.js +100 -0
- package/public/assets/morphTargetsVertex-B9xWvV_u.js.br +0 -0
- package/public/assets/morphTargetsVertex-B9xWvV_u.js.gz +0 -0
- package/public/assets/oitFinalSimpleBlend.fragment-4NtZHGOG.js +3 -0
- package/public/assets/oitFinalSimpleBlend.fragment-4NtZHGOG.js.br +0 -0
- package/public/assets/oitFinalSimpleBlend.fragment-4NtZHGOG.js.gz +0 -0
- package/public/assets/oitFinalSimpleBlend.fragment-D8T6jyS0.js +2 -0
- package/public/assets/oitFinalSimpleBlend.fragment-D8T6jyS0.js.br +3 -0
- package/public/assets/oitFinalSimpleBlend.fragment-D8T6jyS0.js.gz +0 -0
- package/public/assets/oitFragment-CK8Y-Z-q.js +1202 -0
- package/public/assets/oitFragment-CK8Y-Z-q.js.br +0 -0
- package/public/assets/oitFragment-CK8Y-Z-q.js.gz +0 -0
- package/public/assets/oitFragment-ZUHesxAg.js +1077 -0
- package/public/assets/oitFragment-ZUHesxAg.js.br +0 -0
- package/public/assets/oitFragment-ZUHesxAg.js.gz +0 -0
- package/public/assets/openpbrMaterial-Dc7VVRl6.js +2 -0
- package/public/assets/openpbrMaterial-Dc7VVRl6.js.br +0 -0
- package/public/assets/openpbrMaterial-Dc7VVRl6.js.gz +0 -0
- package/public/assets/outline.fragment-BK0vgcx7.js +21 -0
- package/public/assets/outline.fragment-BK0vgcx7.js.br +0 -0
- package/public/assets/outline.fragment-BK0vgcx7.js.gz +0 -0
- package/public/assets/outline.fragment-DQK2JikO.js +18 -0
- package/public/assets/outline.fragment-DQK2JikO.js.br +0 -0
- package/public/assets/outline.fragment-DQK2JikO.js.gz +0 -0
- package/public/assets/outline.vertex-CHR7GZYH.js +47 -0
- package/public/assets/outline.vertex-CHR7GZYH.js.br +0 -0
- package/public/assets/outline.vertex-CHR7GZYH.js.gz +0 -0
- package/public/assets/outline.vertex-CKcILDiL.js +47 -0
- package/public/assets/outline.vertex-CKcILDiL.js.br +0 -0
- package/public/assets/outline.vertex-CKcILDiL.js.gz +0 -0
- package/public/assets/passCube.fragment-Ch6aeybh.js +23 -0
- package/public/assets/passCube.fragment-Ch6aeybh.js.br +0 -0
- package/public/assets/passCube.fragment-Ch6aeybh.js.gz +0 -0
- package/public/assets/passCube.fragment-wvJ8mb6_.js +23 -0
- package/public/assets/passCube.fragment-wvJ8mb6_.js.br +0 -0
- package/public/assets/passCube.fragment-wvJ8mb6_.js.gz +0 -0
- package/public/assets/pbr.fragment-Bo4XM7Ct.js +3277 -0
- package/public/assets/pbr.fragment-Bo4XM7Ct.js.br +0 -0
- package/public/assets/pbr.fragment-Bo4XM7Ct.js.gz +0 -0
- package/public/assets/pbr.fragment-T2xKI2J0.js +3327 -0
- package/public/assets/pbr.fragment-T2xKI2J0.js.br +0 -0
- package/public/assets/pbr.fragment-T2xKI2J0.js.gz +0 -0
- package/public/assets/pbr.vertex-BezAbBHx.js +357 -0
- package/public/assets/pbr.vertex-BezAbBHx.js.br +0 -0
- package/public/assets/pbr.vertex-BezAbBHx.js.gz +0 -0
- package/public/assets/pbr.vertex-w2ZWBdHy.js +227 -0
- package/public/assets/pbr.vertex-w2ZWBdHy.js.br +0 -0
- package/public/assets/pbr.vertex-w2ZWBdHy.js.gz +0 -0
- package/public/assets/playable-sdk-zAYuBOLj.js +8 -0
- package/public/assets/playable-sdk-zAYuBOLj.js.br +0 -0
- package/public/assets/playable-sdk-zAYuBOLj.js.gz +0 -0
- package/public/assets/playable-standard-project-Brbyn9c4.js +5140 -0
- package/public/assets/playable-standard-project-Brbyn9c4.js.br +0 -0
- package/public/assets/playable-standard-project-Brbyn9c4.js.gz +0 -0
- package/public/assets/rgbdDecode.fragment-BQ16CsAv.js +5 -0
- package/public/assets/rgbdDecode.fragment-BQ16CsAv.js.br +4 -0
- package/public/assets/rgbdDecode.fragment-BQ16CsAv.js.gz +0 -0
- package/public/assets/rgbdDecode.fragment-D_2CJy2O.js +5 -0
- package/public/assets/rgbdDecode.fragment-D_2CJy2O.js.br +0 -0
- package/public/assets/rgbdDecode.fragment-D_2CJy2O.js.gz +0 -0
- package/public/assets/rgbdEncode.fragment-CmDv6yEZ.js +5 -0
- package/public/assets/rgbdEncode.fragment-CmDv6yEZ.js.br +3 -0
- package/public/assets/rgbdEncode.fragment-CmDv6yEZ.js.gz +0 -0
- package/public/assets/rgbdEncode.fragment-QRg2h8KC.js +5 -0
- package/public/assets/rgbdEncode.fragment-QRg2h8KC.js.br +1 -0
- package/public/assets/rgbdEncode.fragment-QRg2h8KC.js.gz +0 -0
- package/public/assets/sceneLoader-CDreObGG.js +1 -0
- package/public/assets/sceneLoader-CDreObGG.js.br +0 -0
- package/public/assets/sceneLoader-CDreObGG.js.gz +0 -0
- package/public/assets/screenSpaceCurvature.fragment-BWdr_4iW.js +15 -0
- package/public/assets/screenSpaceCurvature.fragment-BWdr_4iW.js.br +0 -0
- package/public/assets/screenSpaceCurvature.fragment-BWdr_4iW.js.gz +0 -0
- package/public/assets/selection.fragment-CVXAuXcC.js +35 -0
- package/public/assets/selection.fragment-CVXAuXcC.js.br +0 -0
- package/public/assets/selection.fragment-CVXAuXcC.js.gz +0 -0
- package/public/assets/selection.fragment-DobH4NRw.js +35 -0
- package/public/assets/selection.fragment-DobH4NRw.js.br +0 -0
- package/public/assets/selection.fragment-DobH4NRw.js.gz +0 -0
- package/public/assets/selection.vertex-BUBv8X1j.js +74 -0
- package/public/assets/selection.vertex-BUBv8X1j.js.br +0 -0
- package/public/assets/selection.vertex-BUBv8X1j.js.gz +0 -0
- package/public/assets/selection.vertex-DlADXBtf.js +73 -0
- package/public/assets/selection.vertex-DlADXBtf.js.br +0 -0
- package/public/assets/selection.vertex-DlADXBtf.js.gz +0 -0
- package/public/assets/selectionOutline.fragment-CWpNrg8m.js +47 -0
- package/public/assets/selectionOutline.fragment-CWpNrg8m.js.br +0 -0
- package/public/assets/selectionOutline.fragment-CWpNrg8m.js.gz +0 -0
- package/public/assets/selectionOutline.fragment-DoKuUf2L.js +48 -0
- package/public/assets/selectionOutline.fragment-DoKuUf2L.js.br +0 -0
- package/public/assets/selectionOutline.fragment-DoKuUf2L.js.gz +0 -0
- package/public/assets/shadowMap.fragment-BEwhnKOg.js +78 -0
- package/public/assets/shadowMap.fragment-BEwhnKOg.js.br +0 -0
- package/public/assets/shadowMap.fragment-BEwhnKOg.js.gz +0 -0
- package/public/assets/shadowMap.fragment-CVar4C4N.js +79 -0
- package/public/assets/shadowMap.fragment-CVar4C4N.js.br +0 -0
- package/public/assets/shadowMap.fragment-CVar4C4N.js.gz +0 -0
- package/public/assets/shadowMap.vertex-ImOoSjTb.js +109 -0
- package/public/assets/shadowMap.vertex-ImOoSjTb.js.br +0 -0
- package/public/assets/shadowMap.vertex-ImOoSjTb.js.gz +0 -0
- package/public/assets/shadowMap.vertex-Q2d15P5z.js +119 -0
- package/public/assets/shadowMap.vertex-Q2d15P5z.js.br +0 -0
- package/public/assets/shadowMap.vertex-Q2d15P5z.js.gz +0 -0
- package/public/assets/shadowMapFragmentSoftTransparentShadow-BmxybqRD.js +4 -0
- package/public/assets/shadowMapFragmentSoftTransparentShadow-BmxybqRD.js.br +0 -0
- package/public/assets/shadowMapFragmentSoftTransparentShadow-BmxybqRD.js.gz +0 -0
- package/public/assets/shadowMapFragmentSoftTransparentShadow-D6ZvWsNy.js +4 -0
- package/public/assets/shadowMapFragmentSoftTransparentShadow-D6ZvWsNy.js.br +0 -0
- package/public/assets/shadowMapFragmentSoftTransparentShadow-D6ZvWsNy.js.gz +0 -0
- package/public/assets/sharpen.fragment-CI40r28S.js +8 -0
- package/public/assets/sharpen.fragment-CI40r28S.js.br +0 -0
- package/public/assets/sharpen.fragment-CI40r28S.js.gz +0 -0
- package/public/assets/textureMerger.fragment-BGsvQGn5.js +84 -0
- package/public/assets/textureMerger.fragment-BGsvQGn5.js.br +0 -0
- package/public/assets/textureMerger.fragment-BGsvQGn5.js.gz +0 -0
- package/public/assets/textureMerger.fragment-Q7yPwkGt.js +76 -0
- package/public/assets/textureMerger.fragment-Q7yPwkGt.js.br +0 -0
- package/public/assets/textureMerger.fragment-Q7yPwkGt.js.gz +0 -0
- package/public/assets/tgaTextureLoader-D7Pjisvo.js +1 -0
- package/public/assets/tgaTextureLoader-D7Pjisvo.js.br +0 -0
- package/public/assets/tgaTextureLoader-D7Pjisvo.js.gz +0 -0
- package/public/assets/vertexColorMixing-CwuEx4gP.js +20 -0
- package/public/assets/vertexColorMixing-CwuEx4gP.js.br +0 -0
- package/public/assets/vertexColorMixing-CwuEx4gP.js.gz +0 -0
- package/public/assets/vertexColorMixing-DRlcGbEu.js +24 -0
- package/public/assets/vertexColorMixing-DRlcGbEu.js.br +2 -0
- package/public/assets/vertexColorMixing-DRlcGbEu.js.gz +0 -0
- package/public/assets/volumetricLightingBlendVolume.fragment-0VKaEyya.js +12 -0
- package/public/assets/volumetricLightingBlendVolume.fragment-0VKaEyya.js.br +0 -0
- package/public/assets/volumetricLightingBlendVolume.fragment-0VKaEyya.js.gz +0 -0
- package/public/assets/volumetricLightingBlendVolume.fragment-BZLjMggm.js +11 -0
- package/public/assets/volumetricLightingBlendVolume.fragment-BZLjMggm.js.br +0 -0
- package/public/assets/volumetricLightingBlendVolume.fragment-BZLjMggm.js.gz +0 -0
- package/public/assets/volumetricLightingRenderVolume.fragment-6GAsdyvE.js +15 -0
- package/public/assets/volumetricLightingRenderVolume.fragment-6GAsdyvE.js.br +0 -0
- package/public/assets/volumetricLightingRenderVolume.fragment-6GAsdyvE.js.gz +0 -0
- package/public/assets/volumetricLightingRenderVolume.fragment-Da_DpfG1.js +13 -0
- package/public/assets/volumetricLightingRenderVolume.fragment-Da_DpfG1.js.br +0 -0
- package/public/assets/volumetricLightingRenderVolume.fragment-Da_DpfG1.js.gz +0 -0
- package/public/assets/volumetricLightingRenderVolume.vertex-BdVFX-tC.js +4 -0
- package/public/assets/volumetricLightingRenderVolume.vertex-BdVFX-tC.js.br +0 -0
- package/public/assets/volumetricLightingRenderVolume.vertex-BdVFX-tC.js.gz +0 -0
- package/public/assets/volumetricLightingRenderVolume.vertex-DO-VIhJn.js +5 -0
- package/public/assets/volumetricLightingRenderVolume.vertex-DO-VIhJn.js.br +0 -0
- package/public/assets/volumetricLightingRenderVolume.vertex-DO-VIhJn.js.gz +0 -0
- package/public/assets/webAudioBus-BkMWEG1L.js +1 -0
- package/public/assets/webAudioBus-BkMWEG1L.js.br +0 -0
- package/public/assets/webAudioBus-BkMWEG1L.js.gz +0 -0
- package/public/assets/webAudioMainBus-DYcQXAkm.js +1 -0
- package/public/assets/webAudioMainBus-DYcQXAkm.js.br +0 -0
- package/public/assets/webAudioMainBus-DYcQXAkm.js.gz +0 -0
- package/public/assets/workerPool-H9Ji3mCo.js +1 -0
- package/public/assets/workerPool-H9Ji3mCo.js.br +2 -0
- package/public/assets/workerPool-H9Ji3mCo.js.gz +0 -0
- package/public/index.html +21 -0
- package/public/index.html.br +0 -0
- package/public/index.html.gz +0 -0
- package/runtime/editor-control-plane.mjs +5 -0
- package/runtime/runtime-debug-authoring-bridge.mjs +1 -0
- package/worker/editor-service-worker.mjs +27 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import{EventEmitter as vG}from"node:events";var ld="medium",Sh={low:{opacity:.32,softness:.25,bias:.0015,normalBias:.02,maxDistance:24,resolution:512,cascadeCount:1,bakeSamples:8,blurKernel:2},medium:{opacity:.42,softness:.4,bias:.001,normalBias:.01,maxDistance:48,resolution:1024,cascadeCount:2,bakeSamples:24,blurKernel:4},high:{opacity:.5,softness:.58,bias:8e-4,normalBias:.006,maxDistance:80,resolution:2048,cascadeCount:4,bakeSamples:64,blurKernel:8},ultra:{opacity:.56,softness:.72,bias:6e-4,normalBias:.004,maxDistance:120,resolution:4096,cascadeCount:4,bakeSamples:128,blurKernel:12}};function ku(e=ld,t={}){let r=Sh[e]??Sh[ld];return{opacity:dd(t.opacity,r.opacity),softness:dd(t.softness,r.softness),bias:dd(t.bias,r.bias),normalBias:dd(t.normalBias,r.normalBias),maxDistance:dd(t.maxDistance,r.maxDistance),resolution:FG(t.resolution,r.resolution),cascadeCount:$G(t.cascadeCount,r.cascadeCount),bakeSamples:GG(t.bakeSamples,r.bakeSamples),blurKernel:LG(t.blurKernel,r.blurKernel)}}function dd(e,t){return typeof e=="number"&&Number.isFinite(e)?e:t}function GG(e,t){return typeof e=="number"&&Number.isFinite(e)&&e>0?Math.round(e):t}function LG(e,t){return typeof e=="number"&&Number.isFinite(e)&&e>=0?Math.round(e):t}function FG(e,t){return e===512||e===1024||e===2048||e===4096?e:t}function $G(e,t){return e===1||e===2||e===4?e:t}function ju(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:void 0}function Nu(e){return e==="inherit"||e==="none"||e==="enabled"||e==="auto"}function Gu(e){return e==="inherit"||e==="none"||e==="enabled"||e==="auto"}function Lu(e){return e==="inherit"||e==="none"||e==="dynamic"||e==="static"||e==="blob"||e==="projected"||e==="auto"}function Fu(e){return e==="inherit"||e==="low"||e==="medium"||e==="high"||e==="ultra"}function $u(e){return e==="inherit"||e==="scene-main"||e==="nearest"||e==="explicit"}function uA(e){let t=ju(e);if(!t)return;let r={};Nu(t.cast)&&(r.cast=t.cast),Gu(t.receive)&&(r.receive=t.receive),Lu(t.mode)&&(r.mode=t.mode),Fu(t.quality)&&(r.quality=t.quality);let n=ju(t.light);if(n){let a={};$u(n.mode)&&(a.mode=n.mode),typeof n.lightId=="string"&&n.lightId.trim()&&(a.lightId=n.lightId.trim()),Object.keys(a).length>0&&(r.light=a)}let o=BG(t.params);return o&&(r.params=o),Object.keys(r).length>0?r:void 0}function Tt(e){let t=uA(e);return t?{shadow:t,diagnostics:[]}:{diagnostics:[]}}function Bu(e,t="none"){let r=e?.mode;return!r||r==="inherit"||r==="auto"?t:r}function zu(e,t=ld){let r=e?.quality;return r&&r!=="inherit"?r:t}function BG(e){let t=ju(e);if(!t)return;let r={};return typeof t.opacity=="number"&&Number.isFinite(t.opacity)&&(r.opacity=t.opacity),typeof t.softness=="number"&&Number.isFinite(t.softness)&&(r.softness=t.softness),typeof t.bias=="number"&&Number.isFinite(t.bias)&&(r.bias=t.bias),typeof t.normalBias=="number"&&Number.isFinite(t.normalBias)&&(r.normalBias=t.normalBias),typeof t.maxDistance=="number"&&Number.isFinite(t.maxDistance)&&(r.maxDistance=t.maxDistance),(t.resolution===512||t.resolution===1024||t.resolution===2048||t.resolution===4096)&&(r.resolution=t.resolution),(t.cascadeCount===1||t.cascadeCount===2||t.cascadeCount===4)&&(r.cascadeCount=t.cascadeCount),typeof t.bakeSamples=="number"&&Number.isFinite(t.bakeSamples)&&(r.bakeSamples=t.bakeSamples),typeof t.blurKernel=="number"&&Number.isFinite(t.blurKernel)&&(r.blurKernel=t.blurKernel),Object.keys(r).length>0?r:void 0}var zG=new Set(["cast","receive","mode","quality","light","params"]),VG=new Set(["mode","lightId"]),UG=new Set(["opacity","softness","bias","normalBias","maxDistance","resolution","cascadeCount","bakeSamples","blurKernel"]);function ud(e,t="$.shadow"){let r=Eh(e);if(!r)throw Zt("schema.invalidType",t);if(Ih(r,zG,t),"cast"in r&&!Nu(r.cast))throw Zt("schema.invalidValue",`${t}.cast`);if("receive"in r&&!Gu(r.receive))throw Zt("schema.invalidValue",`${t}.receive`);if("mode"in r&&!Lu(r.mode))throw Zt("schema.invalidValue",`${t}.mode`);if("quality"in r&&!Fu(r.quality))throw Zt("schema.invalidValue",`${t}.quality`);"light"in r&&HG(r.light,`${t}.light`),"params"in r&&KG(r.params,`${t}.params`)}function HG(e,t){let r=Eh(e);if(!r)throw Zt("schema.invalidType",t);if(Ih(r,VG,t),"mode"in r&&!$u(r.mode))throw Zt("schema.invalidValue",`${t}.mode`);if("lightId"in r&&(typeof r.lightId!="string"||!r.lightId.trim()))throw Zt("schema.invalidValue",`${t}.lightId`);if(r.mode==="explicit"&&(typeof r.lightId!="string"||!r.lightId.trim()))throw Zt("schema.invalidValue",`${t}.lightId`)}function KG(e,t){let r=Eh(e);if(!r)throw Zt("schema.invalidType",t);if(Ih(r,UG,t),ti(r,"opacity",t,n=>n>=0&&n<=1),ti(r,"softness",t,n=>n>=0),ti(r,"bias",t,()=>!0),ti(r,"normalBias",t,()=>!0),ti(r,"maxDistance",t,n=>n>0),ti(r,"bakeSamples",t,n=>n>0),ti(r,"blurKernel",t,n=>n>=0),"resolution"in r&&![512,1024,2048,4096].includes(r.resolution))throw Zt("schema.invalidValue",`${t}.resolution`);if("cascadeCount"in r&&![1,2,4].includes(r.cascadeCount))throw Zt("schema.invalidValue",`${t}.cascadeCount`)}function ti(e,t,r,n){if(!(t in e))return;let o=e[t];if(typeof o!="number"||!Number.isFinite(o)||!n(o))throw Zt("schema.invalidValue",`${r}.${t}`)}function Ih(e,t,r){for(let n of Object.keys(e))if(!t.has(n))throw Zt("schema.deprecatedField",`${r}.${n}`)}function Zt(e,t){let r=new Error(`${e}: ${t}`);return Object.assign(r,{code:e,path:t}),r}function Eh(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}var xh="fps.shadow-map-experiment";function WG(e,t="$.scene.shadowMapExperiment"){let r=rn(e,t);Gn(r,["qualityProfile","behaviorProfile"],t),r.qualityProfile!==void 0&&Nn(r.qualityProfile,`${t}.qualityProfile`),r.behaviorProfile!==void 0&&Nn(r.behaviorProfile,`${t}.behaviorProfile`)}function qG(e,t="$.shadowMapExperiment"){let r=rn(e,t);Gn(r,["behaviorProfile"],t),Nn(r.behaviorProfile,`${t}.behaviorProfile`)}function ri(e,t="$"){let r=rn(e,t);Gn(r,["schemaVersion","enabled","lightRef","defaultQualityProfile","defaultBehaviorProfile","qualityProfiles","behaviorProfiles"],t),r.schemaVersion!==1&&_e(`${t}.schemaVersion`,"expected 1"),typeof r.enabled!="boolean"&&_e(`${t}.enabled`,"expected boolean"),Nn(r.lightRef,`${t}.lightRef`);let n=Nn(r.defaultQualityProfile,`${t}.defaultQualityProfile`),o=Nn(r.defaultBehaviorProfile,`${t}.defaultBehaviorProfile`),a=pA(r.qualityProfiles,`${t}.qualityProfiles`),i=pA(r.behaviorProfiles,`${t}.behaviorProfiles`);for(let[s,c]of Object.entries(a))JG(c,`${t}.qualityProfiles.${s}`);for(let[s,c]of Object.entries(i))XG(c,`${t}.behaviorProfiles.${s}`);Object.prototype.hasOwnProperty.call(a,n)||_e(`${t}.defaultQualityProfile`,`unknown quality profile: ${n}`),Object.prototype.hasOwnProperty.call(i,o)||_e(`${t}.defaultBehaviorProfile`,`unknown behavior profile: ${o}`)}function fA(e){ri(e.config),e.settings!==void 0&&WG(e.settings),(!Number.isInteger(e.revision)||e.revision<0)&&_e("$.revision","expected a non-negative integer");let t=e.settings?.qualityProfile??e.config.defaultQualityProfile,r=e.settings?.behaviorProfile??e.config.defaultBehaviorProfile,n=Ah(e.config.qualityProfiles,t,"$.settings.qualityProfile","quality");Ah(e.config.behaviorProfiles,r,"$.settings.behaviorProfile","behavior");let o=e.objects.map((s,c)=>{let d=`$.objects[${c}]`;s.override!==void 0&&qG(s.override,`${d}.override`);let u=s.override?.behaviorProfile??r,l=Ah(e.config.behaviorProfiles,u,`${d}.override.behaviorProfile`,"behavior");return Object.freeze({entityId:Nn(s.entityId,`${d}.entityId`),renderableIds:Object.freeze(a0(s.renderableIds,`${d}.renderableIds`)),cast:mA(s.cast,`${d}.cast`)??l.cast==="enabled",receive:mA(s.receive,`${d}.receive`)??l.receive==="enabled",updateClass:l.updateClass!=="auto"?l.updateClass:s.inferredUpdateClass??"static",behaviorProfileId:u})}).sort((s,c)=>s.entityId.localeCompare(c.entityId)),a=e.config.enabled?o:[];n0(a);let i=Object.fromEntries(Object.entries(e.config.behaviorProfiles).sort(([s],[c])=>s.localeCompare(c)).map(([s,c])=>[s,Object.freeze({cast:c.cast==="enabled",receive:c.receive==="enabled",updateClass:c.updateClass})]));return gA({schemaVersion:3,revision:e.revision,enabled:e.config.enabled,scopeId:Nn(e.scopeId,"$.scopeId"),light:{entityId:e.config.lightRef,direction:pd(e.lightDirection,"$.lightDirection")},qualityProfileId:t,generator:{maps:{...n.maps},...n.cascadeCount===void 0?{}:{cascadeCount:n.cascadeCount},filter:n.receiverFilter,bias:n.bias,normalBias:n.normalBias,darkness:n.darkness,...n.softness===void 0?{}:{softness:n.softness},bounds:o0(n.bounds),backend:{...n.backend}},culling:{...n.culling},diagnosticThresholds:{...n.diagnostics},behaviorProfiles:i,objects:a,diagnostics:[]})}function mA(e,t){if(e!==void 0)return typeof e!="boolean"&&_e(t,"expected a boolean"),e}function YG(e,t){let r=rn(e,t);Gn(r,["mode","center","extent","near","far"],t),r.mode!=="fixed"&&_e(`${t}.mode`,"expected fixed"),pd(r.center,`${t}.center`),pd(r.extent,`${t}.extent`).some(i=>i<=0)&&_e(`${t}.extent`,"expected positive values");let o=Vu(r.near,`${t}.near`),a=Vu(r.far,`${t}.far`);(o<0||a<=o)&&_e(t,"expected 0 <= near < far")}function JG(e,t){let r=rn(e,t);Gn(r,["maps","cascadeCount","receiverFilter","bias","normalBias","darkness","softness","bounds","backend","culling","diagnostics"],t),QG(r.maps,`${t}.maps`),r.cascadeCount!==void 0&&ZG(r.cascadeCount,`${t}.cascadeCount`),r.receiverFilter!=="hard"&&r.receiverFilter!=="low-pcf"&&_e(`${t}.receiverFilter`,"expected hard or low-pcf"),md(r.bias,`${t}.bias`,0,.1),md(r.normalBias,`${t}.normalBias`,0,1),md(r.darkness,`${t}.darkness`,0,1),r.softness!==void 0&&md(r.softness,`${t}.softness`,0,1),YG(r.bounds,`${t}.bounds`),e0(r.backend,`${t}.backend`),t0(r.culling,`${t}.culling`),r0(r.diagnostics,`${t}.diagnostics`)}function XG(e,t){let r=rn(e,t);Gn(r,["cast","receive","updateClass"],t),r.cast!=="enabled"&&r.cast!=="disabled"&&_e(`${t}.cast`,"expected enabled or disabled"),r.receive!=="enabled"&&r.receive!=="disabled"&&_e(`${t}.receive`,"expected enabled or disabled"),["auto","static","dynamic","skinned"].includes(String(r.updateClass))||_e(`${t}.updateClass`,"expected auto, static, dynamic, or skinned")}function QG(e,t){let r=rn(e,t);Gn(r,["staticResolution","dynamicResolution","compositeResolution"],t),Th(r.staticResolution,`${t}.staticResolution`),Th(r.dynamicResolution,`${t}.dynamicResolution`),Th(r.compositeResolution,`${t}.compositeResolution`)}function Th(e,t){e!==512&&e!==1024&&e!==2048&&e!==4096&&_e(t,"expected 512, 1024, 2048, or 4096")}function ZG(e,t){e!==1&&e!==2&&e!==4&&_e(t,"expected 1, 2, or 4")}function e0(e,t){let r=rn(e,t);Gn(r,["mode","fallback"],t),["auto","split","single"].includes(String(r.mode))||_e(`${t}.mode`,"expected auto, split, or single"),r.fallback!=="single-map"&&r.fallback!=="disable"&&_e(`${t}.fallback`,"expected single-map or disable")}function t0(e,t){let r=rn(e,t);Gn(r,["enabled","guardBandRatio"],t),typeof r.enabled!="boolean"&&_e(`${t}.enabled`,"expected boolean"),md(r.guardBandRatio,`${t}.guardBandRatio`,0,4)}function r0(e,t){let r=rn(e,t);Gn(r,["staticCasterCountWarning","dynamicCasterCountWarning","renderableCountWarning"],t),Ph(r.staticCasterCountWarning,`${t}.staticCasterCountWarning`),Ph(r.dynamicCasterCountWarning,`${t}.dynamicCasterCountWarning`),Ph(r.renderableCountWarning,`${t}.renderableCountWarning`)}function n0(e){let t=new Set,r=new Set;for(let n of e){t.has(n.entityId)&&_e("$.objects",`duplicate entity id: ${n.entityId}`),t.add(n.entityId);for(let o of n.renderableIds)r.has(o)&&_e("$.objects",`duplicate renderable id: ${o}`),r.add(o)}}function pA(e,t){let r=rn(e,t);Object.keys(r).length===0&&_e(t,"expected at least one profile");for(let n of Object.keys(r))Nn(n,`${t} key`);return r}function Ah(e,t,r,n){return Object.prototype.hasOwnProperty.call(e,t)||_e(r,`unknown ${n} profile: ${t}`),e[t]}function o0(e){return Object.freeze({mode:"fixed",center:pd(e.center,"$.bounds.center"),extent:pd(e.extent,"$.bounds.extent"),near:e.near,far:e.far})}function pd(e,t){let r=i0(e,t);return r.length!==3&&_e(t,"expected exactly three numbers"),Object.freeze(r.map((n,o)=>Vu(n,`${t}[${o}]`)))}function a0(e,t){let r=e.map((n,o)=>Nn(n,`${t}[${o}]`));return new Set(r).size!==r.length&&_e(t,"expected unique strings"),r}function Vu(e,t){return(typeof e!="number"||!Number.isFinite(e))&&_e(t,"expected a finite number"),e}function md(e,t,r,n){let o=Vu(e,t);return(o<r||o>n)&&_e(t,`expected ${r}..${n}`),o}function Ph(e,t){return(!Number.isInteger(e)||e<0)&&_e(t,"expected a non-negative integer"),e}function Nn(e,t){return(typeof e!="string"||!e.trim()||e!==e.trim())&&_e(t,"expected a trimmed non-empty string"),e}function rn(e,t){(!e||typeof e!="object"||Array.isArray(e))&&_e(t,"expected an object");let r=Object.getPrototypeOf(e);return r!==Object.prototype&&r!==null&&_e(t,"expected a plain object"),e}function i0(e,t){return Array.isArray(e)||_e(t,"expected an array"),e}function Gn(e,t,r){let n=new Set(t);for(let o of Object.keys(e))n.has(o)||_e(`${r}.${o}`,"unknown field")}function gA(e){if(!e||typeof e!="object"||Object.isFrozen(e))return e;for(let t of Object.values(e))gA(t);return Object.freeze(e)}function _e(e,t){throw new Error(`shadow_map_experiment_invalid:${e}:${t}`)}var hA=["useBlobShadow","blobSettings"],s0=["resolution","maxSize"],c0=new Set(["none","blob","static","planar","dynamic"]);function Nt(e){let t=ni(e);if(!t)throw Ke("schema.invalidType","$");for(let o of hA)if(Object.prototype.hasOwnProperty.call(t,o))throw Ke("schema.deprecatedField",`$.${o}`);if(Ge(t,["globalVolume","materials","renderingGroups","shadowMeshes","shadows"],"$"),u0(t.globalVolume,"$.globalVolume"),m0(t.materials,"$.materials"),d0(t.renderingGroups,"$.renderingGroups"),l0(t.globalVolume,"$.globalVolume"),y0(t.shadowMeshes,"$.shadowMeshes"),!Object.prototype.hasOwnProperty.call(t,"shadows"))return;let r=ni(t.shadows);if(!r)throw Ke("schema.invalidType","$.shadows");for(let o of hA)if(Object.prototype.hasOwnProperty.call(r,o))throw Ke("schema.deprecatedField",`$.shadows.${o}`);if(Ge(r,["defaultMode","enabled","useCsm","settings","blob","staticProjected","planar","shadowRange","shadowOrtho","csm"],"$.shadows"),"defaultMode"in r&&!c0.has(String(r.defaultMode)))throw Ke("schema.invalidValue","$.shadows.defaultMode");er(r,"enabled","$.shadows"),er(r,"useCsm","$.shadows");let n=ni(r.settings);if(Object.prototype.hasOwnProperty.call(r,"settings")&&!n)throw Ke("schema.invalidType","$.shadows.settings");if(n){Ge(n,["mapSize","darkness","blurKernel","bias","normalBias","shadowMinZ","shadowMaxZ","useBlurExponentialShadowMap","shadowColor"],"$.shadows.settings");for(let o of["mapSize","darkness","blurKernel","bias","normalBias","shadowMinZ","shadowMaxZ"])Bt(n,o,"$.shadows.settings");er(n,"useBlurExponentialShadowMap","$.shadows.settings"),Uu(n.shadowColor,"$.shadows.settings.shadowColor",!1)}f0(r.blob,"$.shadows.blob"),g0(r.staticProjected,"$.shadows.staticProjected"),h0(r.planar,"$.shadows.planar"),oi(r.shadowRange,"$.shadows.shadowRange",["minZ","maxZ"]),oi(r.shadowOrtho,"$.shadows.shadowOrtho",["left","right","top","bottom"]),b0(r.csm,"$.shadows.csm")}function d0(e,t){if(e===void 0)return;let r=ni(e);if(!r||!Array.isArray(r.slots))throw Ke("schema.invalidType",t);Ge(r,["slots"],t),r.slots.forEach((n,o)=>{let a=`${t}.slots[${o}]`,i=ni(n);if(!i)throw Ke("schema.invalidType",a);if(Ge(i,["renderingGroupId","name","alphaIndexPresets"],a),![0,1,2,3].includes(i.renderingGroupId))throw Ke("schema.invalidValue",`${a}.renderingGroupId`);if(typeof i.name!="string"||!i.name.trim())throw Ke("schema.invalidValue",`${a}.name`);if(!Array.isArray(i.alphaIndexPresets))throw Ke("schema.invalidType",`${a}.alphaIndexPresets`);i.alphaIndexPresets.forEach((s,c)=>{let d=`${a}.alphaIndexPresets[${c}]`,u=ni(s);if(!u)throw Ke("schema.invalidType",d);if(Ge(u,["name","alphaIndex"],d),typeof u.name!="string"||!u.name.trim())throw Ke("schema.invalidValue",`${d}.name`);Dh(u,"alphaIndex",d)})})}function l0(e,t){if(e===void 0)return;let r=Ot(e,t);for(let a of["samples","camera","lights"])if(a in r)throw Ke("schema.deprecatedField",`${t}.${a}`);if(Ge(r,["enabled","hdr","environment","imageProcessing","toneMapping","antialiasing","postProcessing","rendering","textures"],t),er(r,"enabled",t),er(r,"hdr",t),r.environment!==void 0){let a=Ot(r.environment,`${t}.environment`);for(let i of["textureAssetId","textureUrl","intensity"])if(i in a)throw Ke("schema.deprecatedField",`${t}.environment.${i}`);if(Ge(a,["texture","iblIntensity","rotationY","useCocosIBL"],`${t}.environment`),a.texture!==void 0&&a.texture!==null){let i=Ot(a.texture,`${t}.environment.texture`);for(let s of Object.keys(i))if(s!=="textureAssetId"&&s!=="url")throw Ke("schema.deprecatedField",`${t}.environment.texture.${s}`);for(let s of["textureAssetId","url"])if(s in i&&i[s]!=null&&(typeof i[s]!="string"||!i[s].trim()))throw Ke("schema.invalidValue",`${t}.environment.texture.${s}`)}Bt(a,"iblIntensity",`${t}.environment`),Bt(a,"rotationY",`${t}.environment`),er(a,"useCocosIBL",`${t}.environment`)}if(oi(r.imageProcessing,`${t}.imageProcessing`,["exposure","contrast"]),r.toneMapping!==void 0){let a=Ot(r.toneMapping,`${t}.toneMapping`);if(Ge(a,["enabled","type"],`${t}.toneMapping`),er(a,"enabled",`${t}.toneMapping`),"type"in a&&!["standard","aces","khr-pbr-neutral"].includes(String(a.type)))throw Ke("schema.invalidValue",`${t}.toneMapping.type`)}if(r.antialiasing!==void 0){let a=Ot(r.antialiasing,`${t}.antialiasing`);if(Ge(a,["samples"],`${t}.antialiasing`),"samples"in a&&![1,2,4,8].includes(a.samples))throw Ke("schema.invalidValue",`${t}.antialiasing.samples`)}let n=nn(r.postProcessing,`${t}.postProcessing`);n&&Ge(n,["bloom"],`${t}.postProcessing`);let o=n?nn(n.bloom,`${t}.postProcessing.bloom`):null;if(o){Ge(o,["enabled","threshold","weight","kernel","scale"],`${t}.postProcessing.bloom`),er(o,"enabled",`${t}.postProcessing.bloom`);for(let a of["threshold","weight","kernel","scale"])Bt(o,a,`${t}.postProcessing.bloom`)}}function u0(e,t){if(e===void 0)return;let r=Ot(e,t),n=nn(r.rendering,`${t}.rendering`);n&&(Ge(n,["maxDpr","hardwareScalingLevel"],`${t}.rendering`),Bt(n,"maxDpr",`${t}.rendering`),p0(n,"hardwareScalingLevel",`${t}.rendering`));let o=nn(r.textures,`${t}.textures`);if(o&&(Ge(o,["anisotropicFilteringLevel","samplingMode"],`${t}.textures`),Bt(o,"anisotropicFilteringLevel",`${t}.textures`),"samplingMode"in o&&(typeof o.samplingMode!="string"||!o.samplingMode.trim())))throw Ke("schema.invalidValue",`${t}.textures.samplingMode`)}function m0(e,t){if(e===void 0)return;let r=Ot(e,t);Ge(r,["sceneMaterials","plantMaterials"],t);for(let n of["sceneMaterials","plantMaterials"])n in r&&Ot(r[n],`${t}.${n}`)}function p0(e,t,r){!(t in e)||e[t]==null||Bt(e,t,r)}function f0(e,t){if(e===void 0)return;let r=Ot(e,t);Ge(r,["enabled","plane","appearance","size"],t),er(r,"enabled",t),oi(r.plane,`${t}.plane`,["height","yOffset"]);let n=nn(r.appearance,`${t}.appearance`);n&&(Ge(n,["color","edgeSoftness"],`${t}.appearance`),Uu(n.color,`${t}.appearance.color`,!0),Bt(n,"edgeSoftness",`${t}.appearance`)),oi(r.size,`${t}.size`,["sizeMultiplier","minSize","maxSize"])}function g0(e,t){if(e===void 0)return;let r=Ot(e,t);Ge(r,["enabled","plane","appearance","bake"],t),er(r,"enabled",t),oi(r.plane,`${t}.plane`,["height","yOffset"]);let n=nn(r.appearance,`${t}.appearance`);if(n&&(Ge(n,["color"],`${t}.appearance`),Uu(n.color,`${t}.appearance.color`,!0)),r.bake===void 0)return;let o=Ot(r.bake,`${t}.bake`);for(let a of s0)if(a in o)throw Ke("schema.deprecatedField",`${t}.bake.${a}`);Ge(o,["padding","blur","texelsPerMeter","atlasSize","maxAtlasPages","sdfRadiusPx","spatialChunkSize","targetChunkCount"],`${t}.bake`);for(let a of["padding","blur","texelsPerMeter","atlasSize","maxAtlasPages","sdfRadiusPx","spatialChunkSize","targetChunkCount"])Bt(o,a,`${t}.bake`)}function h0(e,t){if(e===void 0)return;let r=Ot(e,t);Ge(r,["enabled","plane","appearance","projection","stencil","casters","receivers"],t),er(r,"enabled",t);let n=nn(r.plane,`${t}.plane`);if(n){Ge(n,["normal","height","bias","heightMode"],`${t}.plane`),S0(n.normal,`${t}.plane.normal`);for(let c of["height","bias"])Bt(n,c,`${t}.plane`);if("heightMode"in n&&!["fixed","receiver"].includes(String(n.heightMode)))throw Ke("schema.invalidValue",`${t}.plane.heightMode`)}let o=nn(r.appearance,`${t}.appearance`);o&&(Ge(o,["color"],`${t}.appearance`),Uu(o.color,`${t}.appearance.color`,!0)),oi(r.projection,`${t}.projection`,["footprintScale"]);let a=nn(r.stencil,`${t}.stencil`);if(a){Ge(a,["enabled","receiverRenderingGroup","shadowRenderingGroup"],`${t}.stencil`),er(a,"enabled",`${t}.stencil`);for(let c of["receiverRenderingGroup","shadowRenderingGroup"])Bt(a,c,`${t}.stencil`)}let i=nn(r.casters,`${t}.casters`);if(i){Ge(i,["autoDetectAll","includePatterns","excludePatterns","rootBoundaryPatterns","minVolume"],`${t}.casters`),er(i,"autoDetectAll",`${t}.casters`);for(let c of["includePatterns","excludePatterns","rootBoundaryPatterns"])Mh(i[c],`${t}.casters.${c}`);Bt(i,"minVolume",`${t}.casters`)}let s=nn(r.receivers,`${t}.receivers`);s&&(Ge(s,["patterns"],`${t}.receivers`),Mh(s.patterns,`${t}.receivers.patterns`))}function b0(e,t){if(e===void 0)return;let r=Ot(e,t);Ge(r,["numCascades","lambda","cascadeBlendPercentage","stabilizeCascades"],t);for(let n of["numCascades","lambda","cascadeBlendPercentage"])Bt(r,n,t);er(r,"stabilizeCascades",t)}function y0(e,t){if(e===void 0)return;let r=Ot(e,t);Ge(r,["shadowReceivers","shadowCasters","excludeFromShadow"],t);for(let n of["shadowReceivers","shadowCasters","excludeFromShadow"])Mh(r[n],`${t}.${n}`)}function oi(e,t,r){if(e===void 0)return;let n=Ot(e,t);Ge(n,r,t);for(let o of r)Bt(n,o,t)}function Uu(e,t,r){if(e===void 0)return;let n=Ot(e,t),o=r?["r","g","b","a"]:["r","g","b"];Ge(n,o,t);for(let a of o)Dh(n,a,t)}function S0(e,t){if(e===void 0)return;let r=Ot(e,t);Ge(r,["x","y","z"],t);for(let n of["x","y","z"])Dh(r,n,t)}function Mh(e,t){if(e!==void 0&&(!Array.isArray(e)||e.some(r=>typeof r!="string")))throw Ke("schema.invalidType",t)}function Dh(e,t,r){if(!(t in e))throw Ke("schema.invalidValue",`${r}.${t}`);Bt(e,t,r)}function nn(e,t){return e===void 0?null:Ot(e,t)}function Ot(e,t){let r=ni(e);if(!r)throw Ke("schema.invalidType",t);return r}function er(e,t,r){if(t in e&&typeof e[t]!="boolean")throw Ke("schema.invalidValue",`${r}.${t}`)}function Bt(e,t,r){if(!(t in e))return;let n=e[t];if(typeof n!="number"||!Number.isFinite(n))throw Ke("schema.invalidValue",`${r}.${t}`)}function Ge(e,t,r){let n=new Set(t);for(let o of Object.keys(e))if(!n.has(o))throw Ke("schema.unknownField",`${r}.${o}`)}function Ke(e,t){let r=new Error(`${e}: ${t}`);return Object.assign(r,{code:e,path:t}),r}function ni(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function te(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}function bA(e,t){let r=te(e);return{x:Je(r.x,t.x),y:Je(r.y,t.y),z:Je(r.z,t.z)}}function Oh(e,t){let r=te(e);return{r:Ye(r.r,t.r,0,1),g:Ye(r.g,t.g,0,1),b:Ye(r.b,t.b,0,1)}}function kr(e,t){let r=te(e);return{...Oh(r,t),a:Ye(r.a,t.a,0,1)}}function jr(e){return Array.isArray(e)?e.map(t=>typeof t=="string"?t.trim():"").filter((t,r,n)=>t.length>0&&n.indexOf(t)===r):[]}function Rh(e){return(typeof e=="string"?e.trim():"")||null}function na(e,t){return(typeof e=="string"?e.trim():"")||t}function tr(e,t){return typeof e=="boolean"?e:t}function yA(e){return e===0||e===1||e===2||e===3?e:null}function Hu(e,t){return e==="standard"||e==="aces"||e==="khr-pbr-neutral"?e:t}function Ku(e,t){return e===1||e===2||e===4||e===8?e:t}function SA(e,t){return e==="fixed"||e==="receiver"?e:t}function IA(e,t){return e==="none"||e==="blob"||e==="static"||e==="planar"||e==="dynamic"?e:t}function Je(e,t){return typeof e=="number"&&Number.isFinite(e)?e:t}function Ie(e,t){let r=Je(e,t);return Math.max(0,r)}function Gt(e,t){let r=Je(e,t);return r>0?r:t}function Ye(e,t,r,n){let o=Je(e,t);return Math.min(n,Math.max(r,o))}var EA=["editor","grid","gizmo","helper","camera","light","decal","texture","trigger","collision","ui","_shadow","_planarShadow"],TA=[...EA,"_blobShadow"],I0=[...TA,"_staticProjectedShadow"];var AA=[{renderingGroupId:0,name:"\u666E\u901A\u573A\u666F",alphaIndexPresets:[{name:"\u9ED8\u8BA4\u900F\u660E\u987A\u5E8F",alphaIndex:0},{name:"\u5730\u8868\u8D34\u82B1",alphaIndex:100},{name:"\u8FD1\u666F\u8986\u76D6",alphaIndex:200}]},{renderingGroupId:1,name:"\u6C34\u9762 / \u900F\u660E\u5730\u8868",alphaIndexPresets:[{name:"\u6C34\u9762",alphaIndex:0},{name:"\u900F\u660E\u5730\u8868",alphaIndex:100},{name:"\u6C34\u9762\u9AD8\u5149",alphaIndex:200}]},{renderingGroupId:2,name:"\u7279\u6548",alphaIndexPresets:[{name:"\u666E\u901A\u7279\u6548",alphaIndex:0},{name:"\u524D\u666F\u7279\u6548",alphaIndex:100},{name:"\u6700\u524D\u7279\u6548",alphaIndex:200}]},{renderingGroupId:3,name:"\u4E16\u754C\u7A7A\u95F4 UI / \u5F15\u5BFC\u7BAD\u5934",alphaIndexPresets:[{name:"\u4E16\u754C\u7A7A\u95F4 UI",alphaIndex:0},{name:"\u5F15\u5BFC\u7BAD\u5934",alphaIndex:100},{name:"\u9876\u5C42\u63D0\u793A",alphaIndex:200}]}];function mt(e){e!=null&&Nt(e);let t=te(e),r=te(t.shadows),n=te(r.settings),o=te(r.blob),a=E0(o),i=A0(r.staticProjected),s=te(r.shadowRange),c=te(r.shadowOrtho),d=te(r.csm),u=te(t.shadowMeshes);return{renderingGroups:Wu(t.renderingGroups),environment:P0(t.globalVolume),postProcess:x0(t.globalVolume),shadows:{defaultMode:IA(r.defaultMode,"none"),enabled:tr(r.enabled,!1),useCsm:tr(r.useCsm,!1),settings:{mapSize:Ie(n.mapSize,1024),darkness:Ie(n.darkness,.3),blurKernel:Ie(n.blurKernel,16),bias:Ie(n.bias,5e-5),normalBias:Ie(n.normalBias,.02),useBlurExponentialShadowMap:tr(n.useBlurExponentialShadowMap,!0),shadowMinZ:Ie(n.shadowMinZ,1),shadowMaxZ:Ie(n.shadowMaxZ,60),shadowColor:Oh(n.shadowColor,{r:0,g:0,b:0})},blob:a,staticProjected:i,shadowRange:{minZ:Ie(s.minZ,1),maxZ:Ie(s.maxZ,60)},shadowOrtho:{left:Je(c.left,-20),right:Je(c.right,20),top:Je(c.top,20),bottom:Je(c.bottom,-20)},csm:{numCascades:Ie(d.numCascades,2),lambda:Ye(d.lambda,.5,0,1),cascadeBlendPercentage:Ye(d.cascadeBlendPercentage,.1,0,1),stabilizeCascades:tr(d.stabilizeCascades,!0)},planar:T0(r.planar)},shadowMeshes:{shadowReceivers:jr(u.shadowReceivers),shadowCasters:jr(u.shadowCasters),excludeFromShadow:jr(u.excludeFromShadow)}}}function Ms(e){let t=e?.environment?.texture!=null;return{environmentTextureAssetId:e?.environment?.texture?.textureAssetId??null,environmentTextureUrl:e?.environment?.texture?.url??null,environmentIblIntensity:t?e?.environment?.iblIntensity??null:null,postProcessEnabled:e?.postProcess?.enabled??null,postProcessExposure:e?.postProcess?.imageProcessing?.exposure??null,postProcessBloomEnabled:e?.postProcess?.bloom?.enabled??null,blobEnabled:e?.shadows?.blob?.enabled??null,blobOpacity:e?.shadows?.blob?.appearance?.color?.a??null,staticProjectedEnabled:e?.shadows?.staticProjected?.enabled??null,staticProjectedOpacity:e?.shadows?.staticProjected?.appearance?.color?.a??null,planarEnabled:e?.shadows?.planar?.enabled??null,planarOpacity:e?.shadows?.planar?.appearance?.color?.a??null,planeHeight:e?.shadows?.planar?.plane?.height??null,planeBias:e?.shadows?.planar?.plane?.bias??null,stencilEnabled:e?.shadows?.planar?.stencil?.enabled??null}}function E0(e){let t=te(e),r=te(t.plane),n=te(t.appearance),o=te(t.size),a=kr(n.color,{r:0,g:0,b:0,a:.35});return{enabled:tr(t.enabled,!0),plane:{height:Je(r.height,0),yOffset:Ie(r.yOffset,.08)},appearance:{color:kr(n.color,a),edgeSoftness:Ye(n.edgeSoftness,.55,0,.98)},size:{sizeMultiplier:Ie(o.sizeMultiplier,1.25),minSize:Ie(o.minSize,.25),maxSize:Gt(o.maxSize,20)}}}function Wu(e){let t=te(e),r=Array.isArray(t.slots)?t.slots:[];return{slots:AA.map(n=>{let o=r.find(i=>yA(te(i).renderingGroupId)===n.renderingGroupId),a=te(o);return{renderingGroupId:n.renderingGroupId,name:na(a.name,n.name),alphaIndexPresets:qu(a.alphaIndexPresets,n.alphaIndexPresets)}})}}function qu(e,t){let r=Array.isArray(e)?e:t,n=new Set,o=[];return r.forEach((a,i)=>{let s=te(a),c=Je(s.alphaIndex,Number.NaN);!Number.isFinite(c)||n.has(c)||(n.add(c),o.push({name:na(s.name,`Order ${i+1}`),alphaIndex:c}))}),o}function T0(e){let t=te(e),r=te(t.plane),n=te(t.appearance),o=te(t.projection),a=te(t.stencil),i=te(t.casters),s=te(t.receivers);return{enabled:tr(t.enabled,!0),plane:{normal:bA(r.normal,{x:0,y:1,z:0}),height:Je(r.height,0),heightMode:SA(r.heightMode,"receiver"),bias:Ie(r.bias,.4)},appearance:{color:kr(n.color,{r:0,g:0,b:0,a:.35})},projection:{footprintScale:Ye(o.footprintScale,1,0,2)},stencil:{enabled:tr(a.enabled,!0),receiverRenderingGroup:Ie(a.receiverRenderingGroup,0),shadowRenderingGroup:Ie(a.shadowRenderingGroup,1)},casters:{autoDetectAll:tr(i.autoDetectAll,!0),includePatterns:jr(i.includePatterns),excludePatterns:jr(i.excludePatterns),rootBoundaryPatterns:jr(i.rootBoundaryPatterns),minVolume:Ie(i.minVolume,.001)},receivers:{patterns:jr(s.patterns)}}}function A0(e){let t=te(e),r=te(t.plane),n=te(t.appearance),o=te(t.bake),a=Gt(o.spatialChunkSize,16);return{enabled:tr(t.enabled,!1),plane:{height:Je(r.height,0),yOffset:Ie(r.yOffset,.08)},appearance:{color:kr(n.color,{r:0,g:0,b:0,a:.35})},bake:{padding:Ie(o.padding,.15),blur:Ie(o.blur,0),texelsPerMeter:Gt(o.texelsPerMeter,256),atlasSize:Gt(o.atlasSize,4096),maxAtlasPages:Gt(o.maxAtlasPages,8),sdfRadiusPx:Ie(o.sdfRadiusPx,8),spatialChunkSize:a,targetChunkCount:Gt(o.targetChunkCount,64)}}}function P0(e){let t=te(e),r=te(t.environment),n=te(r.texture),o=Rh(n.textureAssetId),a=Rh(n.url);return{texture:o||a?{...o?{textureAssetId:o}:{},...a?{url:a}:{}}:null,iblIntensity:Ie(r.iblIntensity,1),rotationY:Je(r.rotationY,0)}}function x0(e){let t=te(e),r=te(t.imageProcessing),n=te(t.toneMapping),o=te(t.antialiasing),a=te(t.postProcessing),i=te(a.bloom);return{enabled:tr(t.enabled,!0),hdr:tr(t.hdr,!0),imageProcessing:{exposure:Je(r.exposure,1),contrast:Je(r.contrast,1)},toneMapping:{enabled:tr(n.enabled,!0),type:Hu(n.type,"aces")},antialiasing:{samples:Ku(o.samples,4)},bloom:{enabled:tr(i.enabled,!1),threshold:Ie(i.threshold,.9),weight:Ie(i.weight,.2),kernel:Ie(i.kernel,64),scale:Gt(i.scale,.5)}}}var Yu=class extends Error{path;reason;code="runtime.lighting.invalid";constructor(t,r){super(`Invalid Runtime Lighting data at ${t}: ${r}`),this.path=t,this.reason=r,this.name="FpsRuntimeLightingDataError"}},PA=1e-6,M0=1e-4,D0=new Set(["schemaVersion","type","intensity","direction","diffuseColor"]),O0=new Set(["schemaVersion","type","intensity","diffuseColor","groundColor"]),R0=new Set(["x","y","z"]),C0=new Set(["r","g","b"]);function gd(e,t="$.direction"){let r=xA(e,t),n=Math.hypot(r.x,r.y,r.z);return n<=PA&&on(t,"expected a non-zero direction vector"),Object.freeze({x:r.x/n,y:r.y/n,z:r.z/n})}function Ds(e,t="$.light"){let r=vh(e,t);r.schemaVersion!==1&&on(`${t}.schemaVersion`,"expected 1");let n=w0(r.intensity,`${t}.intensity`);if(r.type==="directional"){Ju(r,D0,t);let o=xA(r.direction,`${t}.direction`),a=Math.hypot(o.x,o.y,o.z);return a<=PA&&on(`${t}.direction`,"expected a non-zero direction vector"),Math.abs(a-1)>M0&&on(`${t}.direction`,"expected a normalized direction vector"),Object.freeze({schemaVersion:1,type:"directional",intensity:n,direction:o,diffuseColor:Ch(r.diffuseColor,`${t}.diffuseColor`)})}if(r.type==="hemispheric")return Ju(r,O0,t),Object.freeze({schemaVersion:1,type:"hemispheric",intensity:n,diffuseColor:Ch(r.diffuseColor,`${t}.diffuseColor`),groundColor:Ch(r.groundColor,`${t}.groundColor`)});on(`${t}.type`,"expected directional or hemispheric")}function xA(e,t){let r=vh(e,t);return Ju(r,R0,t),Object.freeze({x:fd(r.x,`${t}.x`),y:fd(r.y,`${t}.y`),z:fd(r.z,`${t}.z`)})}function Ch(e,t){let r=vh(e,t);return Ju(r,C0,t),Object.freeze({r:wh(r.r,`${t}.r`),g:wh(r.g,`${t}.g`),b:wh(r.b,`${t}.b`)})}function vh(e,t){(!e||typeof e!="object"||Array.isArray(e))&&on(t,"expected a plain object");let r=Object.getPrototypeOf(e);return r!==Object.prototype&&r!==null&&on(t,"expected a plain object"),e}function Ju(e,t,r){for(let n of Object.keys(e))t.has(n)||on(`${r}.${n}`,"unknown field")}function fd(e,t){return(typeof e!="number"||!Number.isFinite(e))&&on(t,"expected a finite number"),e}function w0(e,t){let r=fd(e,t);return r<0&&on(t,"expected a non-negative number"),r}function wh(e,t){let r=fd(e,t);return(r<0||r>1)&&on(t,"expected a number between 0 and 1"),r}function on(e,t){throw new Yu(e,t)}var v0=new Set([".glb",".gltf",".png",".jpg",".jpeg",".webp",".env",".hdr",".dds",".ktx",".ktx2",".mp3",".wav",".ogg",".flac",".aac",".m4a"]);function MA(e){let t=String(e??"").trim().toLowerCase();if(/^\.[a-z0-9]+$/.test(t))return t;let r=t.split(/[?#]/,1)[0]??"",n=r.slice(r.lastIndexOf("/")+1),o=n.lastIndexOf(".");return o<=0||o===n.length-1?null:n.slice(o)}function DA(e){return v0.has(e)}function oa(e){return e==="fps.builtin.pbr"||e==="fps.builtin.standard"?e:void 0}function OA(e){if(!e||typeof e!="object")return;let t={};(e.lightingModel==="lit"||e.lightingModel==="unlit")&&(t.lightingModel=e.lightingModel);let r={},n=RA(e.baseColor?.color);n&&(r.color=n);let o=ai(e.baseColor?.texture);o!==void 0&&(r.texture=o),Io(e.baseColor,r,"brightness"),Io(e.baseColor,r,"saturation"),Io(e.baseColor,r,"contrast"),Io(e.baseColor,r,"hue"),Object.keys(r).length>0&&(t.baseColor=r);let a={},i=ai(e.normal?.texture);i!==void 0&&(a.texture=i),Io(e.normal,a,"strength"),Object.keys(a).length>0&&(t.normal=a),Rs(e.metallic)&&(t.metallic=e.metallic),Rs(e.roughness)&&(t.roughness=e.roughness);let s={},c=ai(e.metallicRoughness?.texture);c!==void 0&&(s.texture=c),Object.keys(s).length>0&&(t.metallicRoughness=s);let d={},u=ai(e.occlusion?.texture);u!==void 0&&(d.texture=u),Io(e.occlusion,d,"strength"),Object.keys(d).length>0&&(t.occlusion=d);let l={},m=RA(e.emission?.color);m&&(l.color=m),Io(e.emission,l,"intensity");let p=ai(e.emission?.texture);p!==void 0&&(l.texture=p);let h=ai(e.emission?.maskTexture);h!==void 0&&(l.maskTexture=h),Object.keys(l).length>0&&(t.emission=l);let g={};(e.alpha?.mode==="opaque"||e.alpha?.mode==="mask"||e.alpha?.mode==="blend")&&(g.mode=e.alpha.mode),Io(e.alpha,g,"opacity"),Io(e.alpha,g,"cutoff");let f=ai(e.alpha?.texture);return f!==void 0&&(g.texture=f),Object.keys(g).length>0&&(t.alpha=g),Object.keys(t).length>0?t:void 0}function Cs(...e){let t={};for(let r of e){let n=OA(r);n&&(n.lightingModel&&(t.lightingModel=n.lightingModel),Os(t,n,"baseColor"),Os(t,n,"normal"),n.metallic!==void 0&&(t.metallic=n.metallic),n.roughness!==void 0&&(t.roughness=n.roughness),Os(t,n,"metallicRoughness"),Os(t,n,"occlusion"),Os(t,n,"emission"),Os(t,n,"alpha"))}return OA(t)??{}}function Os(e,t,r){let n=t[r];n&&Object.assign(e,{[r]:{...e[r]??{},...n}})}function RA(e){return e&&Rs(e.r)&&Rs(e.g)&&Rs(e.b)?{r:e.r,g:e.g,b:e.b}:void 0}function ai(e){if(e===null)return null;if(!e||typeof e!="object")return;let t=typeof e.url=="string"?e.url.trim():"",r=typeof e.textureAssetId=="string"?e.textureAssetId.trim():"";if(!(!t&&!r))return{...t?{url:t}:{},...r?{textureAssetId:r}:{}}}function Io(e,t,r){Rs(e?.[r])&&(t[r]=e[r])}function Rs(e){return typeof e=="number"&&Number.isFinite(e)}var tm="staticShadows";function To(e){let t=Ao(e);if(!t)return null;let r=At(t.sourceHash),n=At(t.lightHash),o=At(t.profileHash);if(!r||!n||!o)return null;let a={sourceHash:r,lightHash:n,profileHash:o,...typeof t.generatedAt=="string"&&t.generatedAt.trim()?{generatedAt:t.generatedAt.trim()}:{},...(()=>{let u=$0(t.stats);return u?{stats:u}:{}})()};if(t.version!==2||t.format!=="sdf-atlas"||!Array.isArray(t.pages)||!Array.isArray(t.chunks))return null;let i=[],s=new Map;for(let u of t.pages){let l=_0(u);if(!l||s.has(l.id))return null;i.push(l),s.set(l.id,l)}let c=[],d=new Set;for(let u of t.chunks){let l=k0(u,s);if(!l||d.has(l.id))return null;c.push(l),d.add(l.id)}return{version:2,format:"sdf-atlas",pages:i,chunks:c,...a}}function ia(e,t="$.staticShadows"){let r=To(e);if(r)return r;let n=new Error(`schema.unsupportedVersion: ${t}`);throw Object.assign(n,{code:"schema.unsupportedVersion",path:t}),n}function _0(e){let t=Ao(e);if(!t)return null;let r=At(t.id),n=em(t.width),o=em(t.height),a=B0(t.sdfTextureDataUrl);return!r||n==null||o==null||!a?null:{id:r,width:n,height:o,sdfTextureDataUrl:a}}function k0(e,t){let r=Ao(e);if(!r)return null;let n=At(r.id),o=L0(r.bounds),a=F0(r.plane),i=At(r.pageId),s=N0(r.atlasRect),c=G0(r.atlasUv),d=z0(r.sourceNodeIds),u=At(r.sourceHash),l=At(r.lightHash),m=At(r.profileHash);if(!n||!o||!a||!i||!s||!c||!d||!u||!l||!m)return null;let p=t.get(i);return!p||s.x+s.width>p.width||s.y+s.height>p.height?null:{id:n,bounds:o,plane:a,pageId:i,atlasRect:s,atlasUv:c,sourceNodeIds:d,sourceHash:u,lightHash:l,profileHash:m,...(()=>{let h=j0(r.binding);return h?{binding:h}:{}})()}}function j0(e){let t=Ao(e);if(!t)return null;let r=At(t.id),n=At(t.ownerCasterId),o=At(t.receiverId),a=At(t.generatedAt),i=At(t.sourceHash);if(!r||!n||!o||!a||!i||t.visibleWhenOwnerVisible!==!0||t.staleWhenOwnerTransformChanges!==!0||t.staleWhenLightChanges!==!0)return null;let s=At(t.lightId),c=At(t.textureAssetId),d=At(t.projectionNodeId);return{id:r,ownerCasterId:n,receiverId:o,...s?{lightId:s}:{},...c?{textureAssetId:c}:{},...d?{projectionNodeId:d}:{},visibleWhenOwnerVisible:!0,staleWhenOwnerTransformChanges:!0,staleWhenLightChanges:!0,generatedAt:a,sourceHash:i}}function N0(e){let t=Ao(e);if(!t)return null;let r=aa(t.x),n=aa(t.y),o=em(t.width),a=em(t.height);return r==null||n==null||o==null||a==null?null:{x:r,y:n,width:o,height:a}}function G0(e){let t=Ao(e);if(!t)return null;let r=Xu(t.u0),n=Xu(t.v0),o=Xu(t.u1),a=Xu(t.v1);return r==null||n==null||o==null||a==null||o<=r||a<=n?null:{u0:r,v0:n,u1:o,v1:a}}function L0(e){let t=Ao(e);if(!t)return null;let r=Ln(t.minX),n=Ln(t.maxX),o=Ln(t.minZ),a=Ln(t.maxZ),i=Ln(t.y);return r==null||n==null||o==null||a==null||i==null||n<=r||a<=o?null:{minX:r,maxX:n,minZ:o,maxZ:a,y:i}}function F0(e){let t=Ao(e);if(!t)return null;let r=Ln(t.height),n=Ln(t.yOffset);return r==null||n==null||n<0?null:{height:r,yOffset:n}}function $0(e){let t=Ao(e);if(!t)return null;let r=aa(t.sourceRootCount),n=aa(t.sourceMeshCount),o=aa(t.attemptedChunkCount),a=aa(t.chunkCount),i=aa(t.textureCount);return r==null||n==null||o==null||a==null||i==null?null:{sourceRootCount:r,sourceMeshCount:n,attemptedChunkCount:o,chunkCount:a,textureCount:i,...Qu(t.skippedChunkCount,"skippedChunkCount"),...Qu(t.pageCount,"pageCount"),...Eo(t.resolution,"resolution"),...Eo(t.chunkSize,"chunkSize"),...Eo(t.atlasSize,"atlasSize"),...Zu(t.atlasUsedPixels,"atlasUsedPixels"),...Zu(t.atlasAllocatedPixels,"atlasAllocatedPixels"),...V0(t.atlasOccupancy,"atlasOccupancy"),...Eo(t.texelsPerMeter,"texelsPerMeter"),...Eo(t.effectiveTexelsPerMeter,"effectiveTexelsPerMeter"),...Eo(t.maxAtlasPages,"maxAtlasPages"),...Zu(t.sdfRadiusPx,"sdfRadiusPx"),...Eo(t.spatialChunkSize,"spatialChunkSize"),...Eo(t.effectiveSpatialChunkSize,"effectiveSpatialChunkSize"),...Eo(t.targetChunkCount,"targetChunkCount"),...Qu(t.bakedChunkCount,"bakedChunkCount"),...Qu(t.reusedChunkCount,"reusedChunkCount"),...Zu(t.durationMs,"durationMs")}}function B0(e){let t=At(e);return t&&/^data:image\/png[;,]/i.test(t)?t:null}function z0(e){if(!Array.isArray(e)||e.length===0)return null;let t=[],r=new Set;for(let n of e){let o=At(n);if(!o)return null;r.has(o)||t.push(o),r.add(o)}return t}function At(e){return typeof e=="string"&&e.trim()?e.trim():null}function Ln(e){return typeof e=="number"&&Number.isFinite(e)?e:null}function aa(e){return typeof e=="number"&&Number.isInteger(e)&&e>=0?e:null}function em(e){return typeof e=="number"&&Number.isInteger(e)&&e>0?e:null}function Xu(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0&&e<=1?e:null}function Qu(e,t){let r=aa(e);return r==null?{}:{[t]:r}}function Eo(e,t){let r=Ln(e);return r==null||r<=0?{}:{[t]:r}}function Zu(e,t){let r=Ln(e);return r==null||r<0?{}:{[t]:r}}function V0(e,t){let r=Ln(e);return r==null||r<0||r>1?{}:{[t]:r}}function Ao(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}var U0="@fps-games/editor.playable-sdk.scene-compiler",H0="2",K0=1e-4,Nr={nodeKinds:["group","instance","transform","primitive","image"],primitiveShapes:["cube","sphere","plane","capsule"],transformTypes:["plain","light","camera","groundDecal"],assetTypes:["glb","texture"],materialScopes:["sharedAsset","nodeMaterial"],materialModes:["shared","instance"],materialShaderIds:["fps.builtin.pbr","fps.builtin.standard"],materialAssetSystemPresets:["default-pbr","default-standard"],runtimeV3:{assetFields:["id","guid","type","url","external","warmupCount","singleton","materialMode","defaults","materialSlots"],materialSlotFields:["slotId","label","sourceSurfaces"],materialSlotSourceSurfaceFields:["ownerNodePath","nodeIndex","nodeIndexPath","meshIndex","primitiveIndex","sourceMaterialIndex","sourceMeshName"]},hierarchy:{parentTargets:["root","sceneNode"]},runtimeOnlyTokens:["/@fs","assetUrl","sourceAssetUrl","sourceAssetPath"]},W0=new Set(Nr.nodeKinds),q0=new Set(Nr.primitiveShapes),Y0=new Set(Nr.assetTypes),J0=new Set(Nr.materialModes),X0=new Set(Nr.materialScopes),Q0=new Set(Nr.materialAssetSystemPresets),Z0=new Set(Nr.transformTypes),hd=new Set(Nr.hierarchy.parentTargets),eL=Nr.runtimeOnlyTokens,tL=new Set(Nr.runtimeV3.assetFields),rL=new Set(Nr.runtimeV3.materialSlotFields),nL=new Set(Nr.runtimeV3.materialSlotSourceSurfaceFields);function oL(e,t={}){let{allowOrphanSharedMaterials:r=!0,allowOrphanNodeMaterials:n=!0,strictAssetIds:o=[],strictNodeIds:a=[],maxErrors:i=50}=t,s=Number.isInteger(i)&&i>0?i:50,c=[],d=new Set(o),u=new Set(a),l=(S,w)=>{c.length<s&&c.push({path:S,message:w})};if(!K(e))return l("$","scene json must be an object"),c;let m=e.schemaVersion;m!==2&&m!==3&&l("$.schemaVersion","schemaVersion must be 2 or 3"),SL(e.meta?.generatedFrom,"$.meta.generatedFrom",l);let p=OL(e),h=e.scene;if(!K(h))return l("$.scene","scene must be an object"),c;if(X(h.rootId)||l("$.scene.rootId","rootId must be a non-empty string"),Array.isArray(h.assets)||l("$.scene.assets","assets must be an array"),Array.isArray(h.nodes)||l("$.scene.nodes","nodes must be an array"),Array.isArray(h.materialAssets)||l("$.scene.materialAssets","materialAssets must be an array"),Array.isArray(h.materials)||l("$.scene.materials","materials must be an array"),Array.isArray(h.textures)||l("$.scene.textures","textures must be an array"),c.length>0)return c;e.staticShadows!=null&&CA(()=>ia(e.staticShadows,"$.staticShadows"),"$.staticShadows",l);let g=new Set,f=new Map,y=new Map,A=new Set,T=new Set([h.rootId]),D=new Map,P=new Map,C=new Set;return h.assets.forEach((S,w)=>{let M=`$.scene.assets[${w}]`;if(!K(S)){l(M,"asset must be an object");return}if(X(S.id)?g.has(S.id)?l(`${M}.id`,`duplicate asset id: ${S.id}`):(g.add(S.id),f.set(S.id,S.type)):l(`${M}.id`,"asset.id must be a non-empty string"),Y0.has(S.type)||l(`${M}.type`,"asset.type must be glb or texture"),S.guid!=null&&!X(S.guid)&&l(`${M}.guid`,"asset.guid must be a non-empty string when present"),S.url!=null&&!X(S.url)&&l(`${M}.url`,"url must be a non-empty string when present"),S.external!=null&&!K(S.external)&&l(`${M}.external`,"external must be an object when present"),S.warmupCount!=null&&(!Number.isInteger(S.warmupCount)||S.warmupCount<0)&&l(`${M}.warmupCount`,"warmupCount must be a non-negative integer when present"),S.singleton!=null&&typeof S.singleton!="boolean"&&l(`${M}.singleton`,"singleton must be a boolean when present"),S.materialMode!=null&&!J0.has(S.materialMode)&&l(`${M}.materialMode`,"materialMode must be shared or instance"),yL(S.defaults,`${M}.defaults`,l),m===3)for(let U of Object.keys(S))tL.has(U)||l(`${M}.${U}`,`runtime schema v3 asset field is not allowed: ${U}`);else S.displayName!=null&&!X(S.displayName)&&l(`${M}.displayName`,"displayName must be a non-empty string when present"),S.category!=null&&!X(S.category)&&l(`${M}.category`,"category must be a non-empty string when present"),S.metadata!=null&&!K(S.metadata)&&l(`${M}.metadata`,"metadata must be an object when present");let _=m===3?S.materialSlots:K(S.metadata)?S.metadata.materialSlots:void 0,B=m===3?`${M}.materialSlots`:`${M}.metadata.materialSlots`,re=new Set;_!=null&&(Array.isArray(_)?_.forEach((U,Be)=>{let Oe=`${B}[${Be}]`;if(!K(U)||!X(U.slotId)){l(Oe,m===3?"material slot must contain a stable slotId":"material slot must contain stable slotId and ownerNodePath");return}if(m!==3&&!X(U.ownerNodePath)){l(Oe,"material slot must contain stable slotId and ownerNodePath");return}re.has(U.slotId)?l(`${Oe}.slotId`,`duplicate material slot id: ${U.slotId}`):re.add(U.slotId),m===3&&bL(U,Oe,l)}):l(B,"materialSlots must be an array when present")),X(S.id)&&y.set(S.id,re),d.has(S.id)&&_A(S,M,l)}),h.nodes.forEach((S,w)=>{let M=`$.scene.nodes[${w}]`;if(!K(S)){l(M,"node must be an object");return}X(S.id)&&D.set(S.id,S),X(S.id)?T.has(S.id)?l(`${M}.id`,`duplicate node id: ${S.id}`):(T.add(S.id),typeof S.kind=="string"&&P.set(S.id,S.kind),S.kind==="transform"&&Object.prototype.hasOwnProperty.call(S,"marker")&&C.add(S.id)):l(`${M}.id`,"node.id must be a non-empty string"),W0.has(S.kind)||l(`${M}.kind`,"node.kind must be group, instance, transform, primitive, or image")}),h.materialAssets.forEach((S,w)=>{let M=`$.scene.materialAssets[${w}]`;if(!K(S)){l(M,"material asset must be an object");return}X(S.id)?A.has(S.id)?l(`${M}.id`,`duplicate material asset id: ${S.id}`):A.add(S.id):l(`${M}.id`,"material asset id must be a non-empty string"),S.name!=null&&!X(S.name)&&l(`${M}.name`,"material asset name must be a non-empty string when present"),S.guid!=null&&!X(S.guid)&&l(`${M}.guid`,"material asset guid must be a non-empty string when present"),Object.prototype.hasOwnProperty.call(S,"materialKind")&&l(`${M}.materialKind`,"materialKind is not supported; use shaderId"),Object.prototype.hasOwnProperty.call(S,"profile")&&l(`${M}.profile`,"profile is not supported; use properties");let _=oa(S.shaderId),B=dL(S.shaderId);!_&&!B&&l(`${M}.shaderId`,"shaderId must be a built-in id or a namespaced lowercase project id"),S.definitionVersion!=null&&!lL(S.definitionVersion)?l(`${M}.definitionVersion`,"definitionVersion must be a positive integer when present"):B&&S.definitionVersion==null&&l(`${M}.definitionVersion`,"definitionVersion is required for project shader material assets"),_?jA(S.properties,`${M}.properties`,l):uL(S.properties,`${M}.properties`,l);for(let re of Object.keys(S))["id","guid","name","shaderId","definitionVersion","properties","system","origin"].includes(re)||l(`${M}.${re}`,`material asset field is not allowed: ${re}`);mL(S.system,`${M}.system`,l),pL(S.origin,`${M}.origin`,l),fL(S,M,l)}),h.nodes.forEach((S,w)=>{if(!K(S))return;let M=`$.scene.nodes[${w}]`,_=Object.prototype.hasOwnProperty.call(S,"parentId");_&&!X(S.parentId)&&l(`${M}.parentId`,"parentId must be a non-empty string when present");let B=_?S.parentId:h.rootId;X(B)&&gL(B,h.rootId,T,`${M}.parentId`,l),X(S.id)&&hL(S.id,h.rootId,D,`${M}.parentId`,l),IL(S.source,`${M}.source`,l),GA(S.transform,`${M}.transform`,l),FL(S.rendering,`${M}.rendering`,l),S.shadow!=null&&CA(()=>ud(S.shadow,`${M}.shadow`),`${M}.shadow`,l),Object.prototype.hasOwnProperty.call(S,"shadowMode")&&l(`${M}.shadowMode`,"deprecated field; use shadow.mode");let re=null;S.kind==="instance"&&(K(S.instance)?g.has(S.instance.assetId)?f.get(S.instance.assetId)!=="glb"?l(`${M}.instance.assetId`,"instance.assetId must reference a glb asset"):re=X(S.instance.assetId)?S.instance.assetId:null:l(`${M}.instance.assetId`,`assetId must reference scene.assets: ${S.instance.assetId}`):l(`${M}.instance`,"instance node must contain instance object")),S.kind==="primitive"&&(K(S.primitive)?q0.has(S.primitive.shape)||l(`${M}.primitive.shape`,"primitive.shape must be cube, sphere, plane, or capsule"):l(`${M}.primitive`,"primitive node must contain primitive object")),S.kind==="image"&&(K(S.image)?(g.has(S.image.assetId)?f.get(S.image.assetId)!=="texture"&&l(`${M}.image.assetId`,"image.assetId must reference a texture asset"):l(`${M}.image.assetId`,`assetId must reference scene.assets: ${S.image.assetId}`),K(S.image.size)?(vA(S.image.size.width)||l(`${M}.image.size.width`,"image.size.width must be positive"),vA(S.image.size.height)||l(`${M}.image.size.height`,"image.size.height must be positive")):l(`${M}.image.size`,"image.size must be an object")):l(`${M}.image`,"image node must contain image object")),S.kind==="transform"&&S.transformType!=null&&!Z0.has(S.transformType)&&l(`${M}.transformType`,"transformType must be plain, light, camera, or groundDecal"),S.kind==="transform"&&S.transformType==="groundDecal"?wL(S.groundDecal,`${M}.groundDecal`,l):Object.prototype.hasOwnProperty.call(S,"groundDecal")&&l(`${M}.groundDecal`,"groundDecal is only allowed on transform nodes with transformType groundDecal"),S.kind==="transform"&&(DL(S.camera,`${M}.camera`,l),RL(S.light,`${M}.light`,l,p)),Object.prototype.hasOwnProperty.call(S,"marker")&&(S.kind!=="transform"?l(`${M}.marker`,"marker is only allowed on transform nodes"):(EL(S.marker,`${M}.marker`,l),TL(S.marker,S.id,T,C,`${M}.marker`,l))),(S.kind==="instance"||S.kind==="transform"||S.kind==="primitive"||S.kind==="image")&&iL(S.overrides,`${M}.overrides`,A,re?y.get(re):void 0,m===3?"materialSlots":"metadata.materialSlots",l),u.has(S.id)&&_A(S,M,l)}),h.materials.forEach((S,w)=>{let M=`$.scene.materials[${w}]`;if(!K(S)){l(M,"material must be an object");return}if(X(S.id)||l(`${M}.id`,"material.id must be a non-empty string"),S.scope!=null&&!X0.has(S.scope)&&l(`${M}.scope`,"material scope must be sharedAsset or nodeMaterial"),S.scope==="sharedAsset"&&(!X(S.assetId)||!g.has(S.assetId))&&!r&&l(`${M}.assetId`,`shared material assetId must reference scene.assets: ${S.assetId}`),S.scope==="nodeMaterial"){if((!X(S.nodeId)||!T.has(S.nodeId))&&!n)l(`${M}.nodeId`,`node material nodeId must reference scene.nodes: ${S.nodeId}`);else if(X(S.nodeId)&&T.has(S.nodeId)){let _=P.get(S.nodeId);_!=="instance"&&_!=="transform"&&_!=="primitive"&&l(`${M}.nodeId`,`node material nodeId must reference an instance, transform, or primitive node: ${S.nodeId}`)}}X(S.materialName)||l(`${M}.materialName`,"materialName must be a non-empty string"),K(S.properties)?FA(S.properties,`${M}.properties`,l):l(`${M}.properties`,"properties must be an object")}),c}function aL(e,t={}){let r=oL(e,t);return{ok:r.length===0,errors:r}}function CA(e,t,r){try{e()}catch(n){let o=typeof n?.path=="string"?n.path:t,a=typeof n?.code=="string"?n.code:"schema.invalidValue";r(o,a)}}function iL(e,t,r,n,o,a){if(e!=null){if(!K(e)){a(t,"overrides must be an object when present");return}kA(e.materialBinding,`${t}.materialBinding`,r,a),sL(e.materialSlotBindings,`${t}.materialSlotBindings`,"slotId",r,n,o,a),Object.prototype.hasOwnProperty.call(e,"childMaterialBindings")&&a(`${t}.childMaterialBindings`,"deprecated field; use materialSlotBindings keyed by slotId"),Object.prototype.hasOwnProperty.call(e,"childMaterials")&&a(`${t}.childMaterials`,"deprecated field; use materialSlotBindings keyed by slotId")}}function sL(e,t,r,n,o,a,i){if(e!=null){if(!K(e)){i(t,"material binding map must be an object when present");return}for(let[s,c]of Object.entries(e)){let d=`${t}.${s}`;X(s)||i(d,`${r} must be a non-empty string`),o?o.has(s)||i(d,`${r} must reference asset ${a}`):i(d,`${r} requires an instance asset with ${a}`),c==null?i(d,"material binding must be an object"):kA(c,d,n,i)}}}function kA(e,t,r,n){if(e!=null){if(!K(e)){n(t,"material binding must be an object when present");return}e.materialAssetId!=null&&(X(e.materialAssetId)?r.has(e.materialAssetId)||n(`${t}.materialAssetId`,`materialAssetId must reference scene.materialAssets: ${e.materialAssetId}`):n(`${t}.materialAssetId`,"materialAssetId must be non-empty when present")),e.override!=null&&jA(e.override,`${t}.override`,n)}}function jA(e,t,r){if(!K(e)){r(t,"material asset profile must be an object");return}if(e.lightingModel!=null&&e.lightingModel!=="lit"&&e.lightingModel!=="unlit"&&r(`${t}.lightingModel`,"lightingModel must be lit or unlit"),e.baseColor!=null)if(!K(e.baseColor))r(`${t}.baseColor`,"baseColor must be an object");else{rm(e.baseColor.color,`${t}.baseColor.color`,r),ii(e.baseColor.texture,`${t}.baseColor.texture`,r);for(let n of["brightness","saturation","contrast","hue"])e.baseColor[n]!=null&&!pr(e.baseColor[n])&&r(`${t}.baseColor.${n}`,`${n} must be a finite number`)}for(let n of["metallic","roughness"])e[n]!=null&&!pr(e[n])&&r(`${t}.${n}`,`${n} must be a finite number`);e.normal!=null&&(K(e.normal)?(ii(e.normal.texture,`${t}.normal.texture`,r),e.normal.strength!=null&&!pr(e.normal.strength)&&r(`${t}.normal.strength`,"normal strength must be a finite number")):r(`${t}.normal`,"normal must be an object")),e.metallicRoughness!=null&&(K(e.metallicRoughness)?ii(e.metallicRoughness.texture,`${t}.metallicRoughness.texture`,r):r(`${t}.metallicRoughness`,"metallicRoughness must be an object")),e.occlusion!=null&&(K(e.occlusion)?(ii(e.occlusion.texture,`${t}.occlusion.texture`,r),e.occlusion.strength!=null&&!pr(e.occlusion.strength)&&r(`${t}.occlusion.strength`,"occlusion strength must be a finite number")):r(`${t}.occlusion`,"occlusion must be an object")),e.emission!=null&&(K(e.emission)?(rm(e.emission.color,`${t}.emission.color`,r),e.emission.intensity!=null&&!pr(e.emission.intensity)&&r(`${t}.emission.intensity`,"emission intensity must be a finite number"),ii(e.emission.texture,`${t}.emission.texture`,r),ii(e.emission.maskTexture,`${t}.emission.maskTexture`,r)):r(`${t}.emission`,"emission must be an object")),e.alpha!=null&&(K(e.alpha)?(e.alpha.mode!=null&&e.alpha.mode!=="opaque"&&e.alpha.mode!=="mask"&&e.alpha.mode!=="blend"&&r(`${t}.alpha.mode`,"alpha mode must be opaque, mask, or blend"),e.alpha.opacity!=null&&!pr(e.alpha.opacity)&&r(`${t}.alpha.opacity`,"alpha opacity must be a finite number"),e.alpha.cutoff!=null&&!pr(e.alpha.cutoff)&&r(`${t}.alpha.cutoff`,"alpha cutoff must be a finite number"),ii(e.alpha.texture,`${t}.alpha.texture`,r)):r(`${t}.alpha`,"alpha must be an object"))}var cL=/^[a-z0-9]+(?:[._-][a-z0-9]+)+$/;function ci(e){return typeof e=="string"&&!e.startsWith("fps.builtin.")&&cL.test(e)}function dL(e){return ci(e)?e:null}function lL(e){return Number.isSafeInteger(e)&&e>0}function uL(e,t,r){if(!K(e)){r(t,"project shader material properties must be an object");return}_h(e,t,r)}function _h(e,t,r){if(!(e===null||typeof e=="string"||typeof e=="boolean")){if(typeof e=="number"){Number.isFinite(e)||r(t,"project shader material numbers must be finite");return}if(Array.isArray(e)){e.forEach((n,o)=>_h(n,`${t}[${o}]`,r));return}if(K(e)){for(let[n,o]of Object.entries(e))_h(o,`${t}.${n}`,r);return}r(t,"project shader material properties must be JSON-safe")}}function ii(e,t,r){if(e!=null){if(!K(e)){r(t,"texture ref must be an object");return}e.url!=null&&!X(e.url)&&r(`${t}.url`,"texture url must be non-empty when present"),e.textureAssetId!=null&&!X(e.textureAssetId)&&r(`${t}.textureAssetId`,"textureAssetId must be non-empty when present")}}function mL(e,t,r){if(e!=null){if(!K(e)){r(t,"material asset system must be an object");return}e.readonly!=null&&typeof e.readonly!="boolean"&&r(`${t}.readonly`,"readonly must be boolean"),e.preset!=null&&!Q0.has(e.preset)&&r(`${t}.preset`,"preset must be default-pbr or default-standard")}}function pL(e,t,r){if(e!=null){if(!K(e)){r(t,"material asset origin must be an object");return}e.type!=="imported"&&e.type!=="created"&&e.type!=="duplicated"&&e.type!=="preset"&&r(`${t}.type`,"origin type must be imported, created, duplicated, or preset"),e.sourceAssetGuid!=null&&!X(e.sourceAssetGuid)&&r(`${t}.sourceAssetGuid`,"sourceAssetGuid must be non-empty when present"),e.sourceAssetId!=null&&!X(e.sourceAssetId)&&r(`${t}.sourceAssetId`,"sourceAssetId must be non-empty when present"),e.sourceSlotId!=null&&!X(e.sourceSlotId)&&r(`${t}.sourceSlotId`,"sourceSlotId must be non-empty when present"),e.sourceMaterialIndex!=null&&!Number.isInteger(e.sourceMaterialIndex)&&r(`${t}.sourceMaterialIndex`,"sourceMaterialIndex must be an integer when present"),e.sourceMaterialName!=null&&!X(e.sourceMaterialName)&&r(`${t}.sourceMaterialName`,"sourceMaterialName must be non-empty when present"),e.sourceMaterialAssetId!=null&&!X(e.sourceMaterialAssetId)&&r(`${t}.sourceMaterialAssetId`,"sourceMaterialAssetId must be non-empty when present")}}function fL(e,t,r){let n=K(e.system)?e.system.preset:void 0;n==="default-pbr"&&e.shaderId!=="fps.builtin.pbr"&&r(`${t}.shaderId`,"default-pbr material assets must use shaderId fps.builtin.pbr"),n==="default-standard"&&e.shaderId!=="fps.builtin.standard"&&r(`${t}.shaderId`,"default-standard material assets must use shaderId fps.builtin.standard")}function gL(e,t,r,n,o){if(e===t){hd.has("root")||o(n,`parentId must point to scene node: ${e}`);return}if(hd.has("sceneNode")&&r.has(e))return;let a=hd.has("root")&&hd.has("sceneNode")?"root or scene node":hd.has("sceneNode")?"scene node":"root";o(n,`parentId must point to ${a}: ${e}`)}function hL(e,t,r,n,o){if(!X(t))return;let a=new Set([e]),i=X(r.get(e)?.parentId)?r.get(e)?.parentId:t;for(;X(i)&&i!==t;){if(a.has(i)){o(n,`parentId creates a node cycle involving ${e}`);return}a.add(i);let s=r.get(i);if(!s)return;i=X(s.parentId)?s.parentId:t}}function bL(e,t,r){for(let n of Object.keys(e))rL.has(n)||r(`${t}.${n}`,`runtime schema v3 material slot field is not allowed: ${n}`);if(e.label!=null&&!X(e.label)&&r(`${t}.label`,"label must be a non-empty string when present"),!Array.isArray(e.sourceSurfaces)||e.sourceSurfaces.length===0){r(`${t}.sourceSurfaces`,"sourceSurfaces must be a non-empty array");return}for(let n=0;n<e.sourceSurfaces.length;n+=1){let o=`${t}.sourceSurfaces[${n}]`,a=e.sourceSurfaces[n];if(!K(a)){r(o,"source surface must be an object");continue}for(let i of Object.keys(a))nL.has(i)||r(`${o}.${i}`,`runtime schema v3 material slot source surface field is not allowed: ${i}`);X(a.ownerNodePath)||r(`${o}.ownerNodePath`,"ownerNodePath must be a non-empty string");for(let i of["meshIndex","primitiveIndex"])(!Number.isInteger(a[i])||a[i]<0)&&r(`${o}.${i}`,`${i} must be a non-negative integer`);for(let i of["nodeIndex","sourceMaterialIndex"])a[i]!=null&&(!Number.isInteger(a[i])||a[i]<0)&&r(`${o}.${i}`,`${i} must be a non-negative integer when present`);a.nodeIndexPath!=null&&(!Array.isArray(a.nodeIndexPath)||a.nodeIndexPath.some(i=>!Number.isInteger(i)||i<0))&&r(`${o}.nodeIndexPath`,"nodeIndexPath must contain non-negative integers"),X(a.sourceMeshName)||r(`${o}.sourceMeshName`,"sourceMeshName is required")}}function yL(e,t,r){if(e!=null){if(!K(e)){r(t,"defaults must be an object");return}if(GA(e.transform,`${t}.transform`,r),wA(e.outline,`${t}.outline`,r),e.childOutlines!=null)if(!K(e.childOutlines))r(`${t}.childOutlines`,"childOutlines must be an object");else for(let[n,o]of Object.entries(e.childOutlines))wA(o,`${t}.childOutlines.${n}`,r)}}function SL(e,t,r){if(e!=null){if(!K(e)){r(t,"generatedFrom must be an object when present");return}NA(e,t,r),X(e.compilerId)||r(`${t}.compilerId`,"compilerId must be a non-empty string"),X(e.compilerVersion)||r(`${t}.compilerVersion`,"compilerVersion must be a non-empty string"),X(e.compiledAt)||r(`${t}.compiledAt`,"compiledAt must be a non-empty string")}}function IL(e,t,r){if(e!=null){if(!K(e)){r(t,"source must be an object when present");return}NA(e,t,r),e.objectGuid!=null&&!X(e.objectGuid)&&r(`${t}.objectGuid`,"objectGuid must be a non-empty string when present"),e.objectId!=null&&!X(e.objectId)&&r(`${t}.objectId`,"objectId must be a non-empty string when present"),e.component!=null&&!X(e.component)&&r(`${t}.component`,"component must be a non-empty string when present"),e.propertyPath!=null&&!X(e.propertyPath)&&r(`${t}.propertyPath`,"propertyPath must be a non-empty string when present")}}function NA(e,t,r){X(e.sourceId)||r(`${t}.sourceId`,"sourceId must be a non-empty string"),X(e.sourceType)||r(`${t}.sourceType`,"sourceType must be a non-empty string"),e.revision!=null&&(typeof e.revision!="number"||!Number.isFinite(e.revision))&&r(`${t}.revision`,"revision must be a finite number when present")}function nm(e,t){let r=aL(e,t);if(r.ok)return;let n=new Error(`scene_json_schema_failed:
|
|
2
|
+
${JSON.stringify(r.errors,null,2)}`);throw Object.assign(n,{code:"scene_json_schema_failed",diagnostics:r.errors}),n}function K(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function X(e){return typeof e=="string"&&e.trim().length>0}function GA(e,t,r){if(e!=null){if(!K(e)){r(t,"transform must be an object");return}Fn(e.position,`${t}.position`,r),Fn(e.rotation,`${t}.rotation`,r),Fn(e.rotationDeg,`${t}.rotationDeg`,r),typeof e.scale=="number"?Number.isFinite(e.scale)||r(`${t}.scale`,"scale number must be finite"):Fn(e.scale,`${t}.scale`,r)}}function EL(e,t,r){if(!K(e)){r(t,"marker must be an object");return}sa(e,["schemaVersion","label","type","kind","tags","note","color","target","semanticFrame","geometry","metadata"],t,r),e.schemaVersion!==1&&r(`${t}.schemaVersion`,"marker.schemaVersion must be 1"),X(e.label)||r(`${t}.label`,"marker.label must be a non-empty string"),X(e.type)||r(`${t}.type`,"marker.type must be a non-empty string"),e.kind!=null&&!X(e.kind)&&r(`${t}.kind`,"marker.kind must be a non-empty string when present"),e.tags!=null&&(Array.isArray(e.tags)?e.tags.forEach((n,o)=>{typeof n!="string"&&r(`${t}.tags[${o}]`,"marker tag must be a string")}):r(`${t}.tags`,"marker.tags must be an array when present")),e.note!=null&&typeof e.note!="string"&&r(`${t}.note`,"marker.note must be a string when present"),e.color!=null&&xL(e.color,`${t}.color`,r),e.target!=null&&kh(e.target,`${t}.target`,r),e.semanticFrame!=null&&AL(e.semanticFrame,`${t}.semanticFrame`,r),PL(e.geometry,`${t}.geometry`,r),e.metadata!=null&&!K(e.metadata)&&r(`${t}.metadata`,"marker.metadata must be an object when present")}function TL(e,t,r,n,o,a){if(!K(e))return;let i=[];e.target!=null&&i.push({value:e.target,path:`${o}.target`}),K(e.geometry)&&e.geometry.target!=null&&i.push({value:e.geometry.target,path:`${o}.geometry.target`});for(let s of i)K(s.value)&&(s.value.kind!=="scene-object"&&s.value.kind!=="marker"&&a(`${s.path}.kind`,"runtime marker target kind must be scene-object or marker"),X(s.value.id)&&(s.value.id===t?a(`${s.path}.id`,"runtime marker target must not reference its marker node"):r.has(s.value.id)?s.value.kind==="marker"&&!n.has(s.value.id)?a(`${s.path}.id`,`runtime marker target must reference a marker node: ${s.value.id}`):s.value.kind==="scene-object"&&n.has(s.value.id)&&a(`${s.path}.id`,`runtime scene-object target must not reference a marker node: ${s.value.id}`):a(`${s.path}.id`,`runtime marker target must reference scene.nodes: ${s.value.id}`)))}function kh(e,t,r){if(!K(e)){r(t,"marker target must be an object");return}sa(e,["kind","id","label","path","metadata"],t,r),X(e.kind)||r(`${t}.kind`,"marker target kind must be a non-empty string"),X(e.id)||r(`${t}.id`,"marker target id must be a non-empty string");for(let n of["label","path"])e[n]!=null&&typeof e[n]!="string"&&r(`${t}.${n}`,`marker target ${n} must be a string when present`);e.metadata!=null&&!K(e.metadata)&&r(`${t}.metadata`,"marker target metadata must be an object when present")}function AL(e,t,r){if(!K(e)){r(t,"marker semanticFrame must be an object");return}sa(e,["origin","forward","right","up","label","description"],t,r),K(e.origin)?Fn(e.origin,`${t}.origin`,r):r(`${t}.origin`,"marker semanticFrame.origin must be a vector object");for(let n of["forward","right","up"])e[n]!=null&&Fn(e[n],`${t}.${n}`,r);for(let n of["label","description"])e[n]!=null&&typeof e[n]!="string"&&r(`${t}.${n}`,`marker semanticFrame ${n} must be a string when present`)}function PL(e,t,r){if(!K(e)){r(t,"marker.geometry must be an object");return}if(e.kind==="box"){sa(e,["kind"],t,r);return}if(e.kind==="point"){sa(e,["kind","coordinateSpace","position","offset","target"],t,r),e.coordinateSpace!=null&&e.coordinateSpace!=="world"&&e.coordinateSpace!=="local"&&r(`${t}.coordinateSpace`,"point marker coordinateSpace must be world or local"),e.position!=null&&Fn(e.position,`${t}.position`,r),e.offset!=null&&Fn(e.offset,`${t}.offset`,r),e.target!=null&&kh(e.target,`${t}.target`,r);return}if(e.kind==="object-bounds"){sa(e,["kind","target"],t,r),kh(e.target,`${t}.target`,r);return}if(e.kind==="polyhedron"){sa(e,["kind","coordinateSpace","vertices","faces"],t,r),e.coordinateSpace!=null&&e.coordinateSpace!=="world"&&r(`${t}.coordinateSpace`,"polyhedron marker coordinateSpace must be world"),Array.isArray(e.vertices)?e.vertices.forEach((n,o)=>{let a=`${t}.vertices[${o}]`;K(n)?Fn(n,a,r):r(a,"polyhedron marker vertex must be a vector object")}):r(`${t}.vertices`,"polyhedron marker vertices must be an array"),e.faces!=null&&(Array.isArray(e.faces)?e.faces.forEach((n,o)=>{Array.isArray(n)?n.forEach((a,i)=>{(!Number.isInteger(a)||a<0)&&r(`${t}.faces[${o}][${i}]`,"polyhedron marker index must be a non-negative integer")}):r(`${t}.faces[${o}]`,"polyhedron marker face must be an array")}):r(`${t}.faces`,"polyhedron marker faces must be an array when present"));return}r(`${t}.kind`,"marker.geometry.kind must be box, point, object-bounds, or polyhedron")}function xL(e,t,r){if(!K(e)){r(t,"marker color must be an object");return}sa(e,["r","g","b"],t,r);for(let n of["r","g","b"])LA(e[n])||r(`${t}.${n}`,"marker color component must be between 0 and 1")}function sa(e,t,r,n){let o=new Set(t);for(let a of Object.keys(e))o.has(a)||n(`${r}.${a}`,`field is not allowed: ${a}`)}function Fn(e,t,r){if(e!=null){if(!K(e)){r(t,"value must be a vector object");return}for(let n of["x","y","z"])(typeof e[n]!="number"||!Number.isFinite(e[n]))&&r(`${t}.${n}`,"vector component must be a finite number")}}function ML(e,t,r){if(e!=null){if(!K(e)){r(t,"value must be a vector object");return}for(let n of["x","y"])(typeof e[n]!="number"||!Number.isFinite(e[n]))&&r(`${t}.${n}`,"vector component must be a finite number")}}function pr(e){return typeof e=="number"&&Number.isFinite(e)}function si(e){return pr(e)&&e>0}function LA(e){return pr(e)&&e>=0&&e<=1}function rm(e,t,r){if(e!=null){if(!K(e)){r(t,"color must be an object");return}for(let n of["r","g","b"])(typeof e[n]!="number"||!Number.isFinite(e[n]))&&r(`${t}.${n}`,"color component must be a finite number")}}function DL(e,t,r){if(e!=null){if(!K(e)){r(t,"camera must be an object");return}e.projection!=null&&e.projection!=="orthographic"&&e.projection!=="perspective"&&r(`${t}.projection`,"camera projection must be orthographic or perspective");for(let n of["alpha","beta"])e[n]!=null&&!pr(e[n])&&r(`${t}.${n}`,"camera property must be a finite number when present");for(let n of["radius","orthoSize"])e[n]!=null&&!si(e[n])&&r(`${t}.${n}`,"camera property must be a positive finite number when present");e.fov!=null&&!si(e.fov)&&r(`${t}.fov`,"camera fov must be a positive finite number"),Fn(e.targetOffset,`${t}.targetOffset`,r),ML(e.targetScreenOffset,`${t}.targetScreenOffset`,r);for(let n of["minZ","maxZ","lowerRadiusLimit","upperRadiusLimit"])e[n]!=null&&!si(e[n])&&r(`${t}.${n}`,"camera property must be a positive finite number");for(let n of["lowerBetaLimit","upperBetaLimit"])e[n]!=null&&!pr(e[n])&&r(`${t}.${n}`,"camera property must be a finite number");e.inertia!=null&&!LA(e.inertia)&&r(`${t}.inertia`,"camera inertia must be between 0 and 1"),si(e.minZ)&&si(e.maxZ)&&e.maxZ<=e.minZ&&r(`${t}.maxZ`,"camera maxZ must be greater than minZ"),pr(e.lowerBetaLimit)&&pr(e.upperBetaLimit)&&e.upperBetaLimit<e.lowerBetaLimit&&r(`${t}.upperBetaLimit`,"camera upperBetaLimit must be greater than or equal to lowerBetaLimit"),si(e.lowerRadiusLimit)&&si(e.upperRadiusLimit)&&e.upperRadiusLimit<e.lowerRadiusLimit&&r(`${t}.upperRadiusLimit`,"camera upperRadiusLimit must be greater than or equal to lowerRadiusLimit")}}function OL(e){let t=e.meta?.generatedFrom;return K(t)&&t.compilerId===U0&&t.compilerVersion===H0}function RL(e,t,r,n=!1){if(e==null)return;let o=n&&K(e)&&!Object.prototype.hasOwnProperty.call(e,"schemaVersion")?CL(e,t):e;try{Ds(o,t)}catch(a){let i=a;r(typeof i.path=="string"?i.path:t,typeof i.reason=="string"?i.reason:typeof i.message=="string"?i.message:"light does not satisfy the Engine Runtime Light contract")}}function CL(e,t){let r={...e,schemaVersion:1};if(e.type!=="directional"||!K(e.direction))return r;let{x:n,y:o,z:a}=e.direction;if(![n,o,a].every(s=>typeof s=="number"&&Number.isFinite(s)))return r;let i=Math.hypot(n,o,a);return i<=0||Math.abs(i-1)>K0?r:{...r,direction:gd(e.direction,`${t}.direction`)}}function wA(e,t,r){if(e!=null){if(!K(e)){r(t,"outline must be an object");return}e.renderOutline!=null&&typeof e.renderOutline!="boolean"&&r(`${t}.renderOutline`,"renderOutline must be boolean"),e.outlineWidth!=null&&(typeof e.outlineWidth!="number"||!Number.isFinite(e.outlineWidth))&&r(`${t}.outlineWidth`,"outlineWidth must be a finite number"),rm(e.outlineColor,`${t}.outlineColor`,r)}}function wL(e,t,r){if(e==null){r(t,"groundDecal is required when transformType is groundDecal");return}if(!K(e)){r(t,"groundDecal must be an object");return}vL(e,t,r)}function vL(e,t,r){if(X(e.uiKind)||r(`${t}.uiKind`,"groundDecal UI kind must be non-empty"),!K(e.size))r(`${t}.size`,"groundDecal.size must be an object");else for(let n of["width","depth"])(typeof e.size[n]!="number"||!Number.isFinite(e.size[n])||e.size[n]<=0)&&r(`${t}.size.${n}`,"groundDecal size must be a positive finite number");if(e.aspectSourceLayerId!=null&&!X(e.aspectSourceLayerId)&&r(`${t}.aspectSourceLayerId`,"aspectSourceLayerId must be non-empty when present"),e.lockAspectToBorder!=null&&typeof e.lockAspectToBorder!="boolean"&&r(`${t}.lockAspectToBorder`,"lockAspectToBorder must be boolean when present"),e.editorPreviewActive!=null&&r(`${t}.editorPreviewActive`,"editorPreviewActive is editor-only and must not appear in runtime scene data"),_L(e.mask,`${t}.mask`,r),kL(e.rendering,`${t}.rendering`,r),!Array.isArray(e.layers)){r(`${t}.layers`,"groundDecal UI layers must be an array");return}e.layers.forEach((n,o)=>jL(n,`${t}.layers[${o}]`,r)),NL(e.layers,`${t}.layers`,r)}function _L(e,t,r){if(e!=null){if(!K(e)){r(t,"groundDecal UI mask must be an object");return}e.enabled!=null&&typeof e.enabled!="boolean"&&r(`${t}.enabled`,"mask.enabled must be boolean"),e.source!=null&&e.source!=="roundedRect"&&e.source!=="borderAlpha"&&e.source!=="texture"&&r(`${t}.source`,"mask.source must be roundedRect, borderAlpha, or texture"),e.textureId!=null&&!X(e.textureId)&&r(`${t}.textureId`,"mask.textureId must be non-empty when present");for(let n of["cornerRadius","padding"])e[n]!=null&&(typeof e[n]!="number"||!Number.isFinite(e[n])||e[n]<0)&&r(`${t}.${n}`,`${n} must be a non-negative finite number`)}}function kL(e,t,r){if(e!=null){if(!K(e)){r(t,"groundDecal UI rendering must be an object");return}for(let n of["textureWidth","textureHeight"])e[n]!=null&&(!Number.isInteger(e[n])||e[n]<=0)&&r(`${t}.${n}`,`${n} must be a positive integer`);for(let n of["alphaIndex","diffuseTextureLevel","emissiveTextureLevel"])e[n]!=null&&(typeof e[n]!="number"||!Number.isFinite(e[n]))&&r(`${t}.${n}`,`${n} must be a finite number`)}}function jL(e,t,r){if(!K(e)){r(t,"groundDecal UI layer must be an object");return}X(e.id)||r(`${t}.id`,"layer.id must be non-empty"),X(e.role)||r(`${t}.role`,"layer.role must be non-empty"),e.editorPreviewPercent!=null&&r(`${t}.editorPreviewPercent`,"editorPreviewPercent is editor-only and must not appear in runtime scene data"),e.enabled!=null&&typeof e.enabled!="boolean"&&r(`${t}.enabled`,"layer.enabled must be boolean"),(typeof e.zOrder!="number"||!Number.isFinite(e.zOrder))&&r(`${t}.zOrder`,"layer.zOrder must be a finite number"),e.opacity!=null&&(typeof e.opacity!="number"||!Number.isFinite(e.opacity))&&r(`${t}.opacity`,"layer.opacity must be finite"),e.rotationDeg!=null&&(typeof e.rotationDeg!="number"||!Number.isFinite(e.rotationDeg)||e.rotationDeg<=-180||e.rotationDeg>180)&&r(`${t}.rotationDeg`,"layer.rotationDeg must be in the range (-180, 180]"),GL(e.rect,`${t}.rect`,r),e.kind==="texture"?(e.textureId!=null&&!X(e.textureId)&&r(`${t}.textureId`,"texture layer textureId must be non-empty when present"),e.imageFit!=null&&e.imageFit!=="contain"&&e.imageFit!=="stretch"&&r(`${t}.imageFit`,"texture layer imageFit must be contain or stretch"),ws(e.tint,`${t}.tint`,r)):e.kind==="textureProgress"?(e.textureId!=null&&!X(e.textureId)&&r(`${t}.textureId`,"texture progress layer textureId must be non-empty when present"),e.imageFit!=null&&e.imageFit!=="contain"&&e.imageFit!=="stretch"&&r(`${t}.imageFit`,"texture progress layer imageFit must be contain or stretch"),(typeof e.value!="number"||!Number.isFinite(e.value)||e.value<0||e.value>1)&&r(`${t}.value`,"texture progress value must be between 0 and 1"),e.direction!=null&&!["leftToRight","rightToLeft","bottomToTop","topToBottom"].includes(String(e.direction))&&r(`${t}.direction`,"texture progress direction is invalid"),ws(e.tint,`${t}.tint`,r)):e.kind==="color"?ws(e.color,`${t}.color`,r):e.kind==="progress"?((typeof e.value!="number"||!Number.isFinite(e.value)||e.value<0||e.value>1)&&r(`${t}.value`,"progress value must be between 0 and 1"),e.direction!=null&&!["leftToRight","rightToLeft","bottomToTop","topToBottom"].includes(String(e.direction))&&r(`${t}.direction`,"progress direction is invalid"),ws(e.color,`${t}.color`,r)):e.kind==="text"?LL(e.text,`${t}.text`,r):r(`${t}.kind`,"layer.kind must be texture, textureProgress, color, progress, or text")}function NL(e,t,r){let n=new Map;e.forEach((o,a)=>{if(!K(o)||!X(o.id))return;let i=n.get(o.id);if(i!=null){r(`${t}[${a}].id`,`layer.id must be unique; duplicate of layers[${i}]`);return}n.set(o.id,a)})}function GL(e,t,r){if(!K(e)){r(t,"layer.rect must be an object");return}for(let n of["x","z","width","depth"])(typeof e[n]!="number"||!Number.isFinite(e[n]))&&r(`${t}.${n}`,`rect.${n} must be a finite number`);for(let n of["width","depth"])typeof e[n]=="number"&&e[n]<=0&&r(`${t}.${n}`,`rect.${n} must be positive`)}function LL(e,t,r){if(!K(e)){r(t,"text layer text must be an object");return}typeof e.value!="string"&&r(`${t}.value`,"text.value must be a string"),e.fontFamily!=null&&typeof e.fontFamily!="string"&&r(`${t}.fontFamily`,"fontFamily must be a string"),e.fontSize!=null&&(typeof e.fontSize!="number"||!Number.isFinite(e.fontSize)||e.fontSize<=0)&&r(`${t}.fontSize`,"fontSize must be a positive finite number"),e.fontWeight!=null&&typeof e.fontWeight!="string"&&r(`${t}.fontWeight`,"fontWeight must be a string"),ws(e.color,`${t}.color`,r),ws(e.strokeColor,`${t}.strokeColor`,r),e.strokeWidth!=null&&(typeof e.strokeWidth!="number"||!Number.isFinite(e.strokeWidth)||e.strokeWidth<0)&&r(`${t}.strokeWidth`,"strokeWidth must be a non-negative finite number")}function ws(e,t,r){if(e!=null){if(!K(e)){r(t,"color must be an object");return}for(let n of["r","g","b"])(typeof e[n]!="number"||!Number.isFinite(e[n]))&&r(`${t}.${n}`,`color.${n} must be finite`);e.a!=null&&(typeof e.a!="number"||!Number.isFinite(e.a))&&r(`${t}.a`,"color.a must be finite")}}function FL(e,t,r){if(e!=null){if(!K(e)){r(t,"rendering must be an object");return}e.renderingGroupId!=null&&e.renderingGroupId!==0&&e.renderingGroupId!==1&&e.renderingGroupId!==2&&e.renderingGroupId!==3&&r(`${t}.renderingGroupId`,"renderingGroupId must be 0, 1, 2, or 3"),e.alphaIndex!=null&&(typeof e.alphaIndex!="number"||!Number.isFinite(e.alphaIndex))&&r(`${t}.alphaIndex`,"alphaIndex must be a finite number")}}function vA(e){return typeof e=="number"&&Number.isFinite(e)&&e>0}function FA(e,t,r){for(let[n,o]of Object.entries(e)){let a=`${t}.${n}`;["albedoColor","diffuseColor","emissiveColor","outlineColor"].includes(n)&&rm(o,a,r),["metallic","roughness","contrast","brightness","saturation","hue","colorDensity","alpha","alphaCutOff","transparencyMode"].includes(n)&&(typeof o!="number"||!Number.isFinite(o))&&r(a,`${n} must be a finite number`),n==="backFaceCulling"&&typeof o!="boolean"&&r(a,"backFaceCulling must be boolean"),["albedoTexture","normalTexture","metallicTexture"].includes(n)&&(K(o)?o.url!=null&&!X(o.url)&&r(`${a}.url`,"texture url must be non-empty when present"):r(a,`${n} must be an object`)),["pbr","standard"].includes(n)&&(K(o)?FA(o,a,r):r(a,`${n} must be an object`))}}function _A(e,t,r){let n=JSON.stringify(e),o=eL.filter(a=>n.includes(a));o.length>0&&r(t,`contains runtime-only asset fields: ${o.join(", ")}`)}function $L(e,t,r){let n=$A(e)??512,o=$A(t)??512;if(!Number.isFinite(r)||r<=0)return{width:n,height:o};let a=n,i=Math.max(1,Math.round(a/r));return i>o&&(i=o,a=Math.max(1,Math.round(i*r))),{width:a,height:i}}function om(e){let t=e.rendering?.textureWidth??512,r=e.rendering?.textureHeight??512,n=e.size.width>0&&e.size.depth>0?e.size.width/e.size.depth:t/r;return $L(t,r,n)}function $A(e){return typeof e!="number"||!Number.isFinite(e)||e<=0?null:Math.max(64,Math.min(2048,Math.round(e)))}function BA(e,t){let r=Nh(t.ids);if(r.length===0)return Le("empty-selection");for(let s of r)if(!Po(e,s))return Le("missing-node");let n=an(e,t.ids);if(n.length===0)return Le("empty-selection");for(let s of n){let c=Po(e,s);if(!c)return Le("missing-node");if(!HA(c))return Le(c.protected?"node-protected":c.locked?"node-locked":"node-readonly")}if(t.placement==="root")return t.parentId!=null||t.beforeId!=null||t.afterId!=null?Le("invalid-root-anchors"):am();let o=Po(e,t.targetId);if(!o)return Le("missing-target-node");if(n.includes(o.id))return Le("cannot-parent-to-self");if(n.some(s=>VA(e,o.id,s)))return Le("cannot-parent-to-descendant");if(t.placement==="inside"){if(!UA(o))return Le("target-cannot-have-children");if(t.parentId!=null&&t.parentId!==o.id)return Le("invalid-parent-anchor");let s=jh(e,o.id).filter(c=>!n.includes(c));return t.beforeId&&!s.includes(t.beforeId)?Le("invalid-before-anchor"):t.afterId&&!s.includes(t.afterId)?Le("invalid-after-anchor"):am()}if(o.locked&&!o.protected)return Le("target-node-locked");if(o.protected)return Le("cannot-reorder-root");let a=Po(e,o.parentId);if(a?.locked&&!a.protected)return Le("target-parent-locked");if((t.parentId??null)!==(o.parentId??null))return Le("invalid-parent-anchor");let i=jh(e,o.parentId??null).filter(s=>!n.includes(s));return t.beforeId&&!i.includes(t.beforeId)?Le("invalid-before-anchor"):t.afterId&&!i.includes(t.afterId)?Le("invalid-after-anchor"):t.placement==="before"&&t.beforeId!==o.id?Le("invalid-before-anchor"):t.placement==="after"&&t.afterId!==o.id?Le("invalid-after-anchor"):am()}function zA(e,t){let r=Nh(t.ids);if(r.length===0)return Le("empty-selection");for(let i of r)if(!Po(e,i))return Le("missing-node");let n=an(e,t.ids);if(n.length===0)return Le("empty-selection");if(n.length<2)return Le("selection-too-small");for(let i of n){let s=Po(e,i);if(!s)return Le("missing-node");if(!HA(s))return Le(s.protected?"node-protected":s.locked?"node-locked":"node-readonly")}let o=Po(e,t.parentId);if(t.parentId&&!o)return Le("missing-parent-node");if(o&&!UA(o))return Le("parent-cannot-have-children");if(o&&n.some(i=>o.id===i||VA(e,o.id,i)))return Le("cannot-parent-to-descendant");let a=jh(e,t.parentId??null).filter(i=>!n.includes(i));if(t.insertBeforeId){let i=Po(e,t.insertBeforeId);if(!a.includes(t.insertBeforeId)||i?.protected)return Le("invalid-before-anchor")}return am()}function Po(e,t){return t?e.find(r=>r.id===t)??null:null}function Nh(e){let t=[],r=new Set;for(let n of e)!n||r.has(n)||(r.add(n),t.push(n));return t}function an(e,t){let r=Nh(t).filter(o=>!!Po(e,o)),n=new Set(r);return r.filter(o=>!BL(e,o).some(a=>n.has(a)))}function jh(e,t){return e.filter(r=>(r.parentId??null)===(t??null)).map(r=>r.id)}function VA(e,t,r){let n=new Map(e.map(i=>[i.id,i])),o=n.get(t)??null,a=new Set;for(;o?.parentId;){if(o.parentId===r)return!0;if(a.has(o.parentId))return!1;a.add(o.parentId),o=n.get(o.parentId)??null}return!1}function UA(e){return!e||e.locked&&!e.protected?!1:e.canHaveChildren===!0}function HA(e){return!!e&&e.protected!==!0&&e.locked!==!0&&e.draggable!==!1}function BL(e,t){let r=new Map(e.map(i=>[i.id,i])),n=[],o=new Set,a=r.get(t)??null;for(;a?.parentId&&!o.has(a.parentId);)o.add(a.parentId),n.push(a.parentId),a=r.get(a.parentId)??null;return n}function am(){return{ok:!0}}function Le(e){return{ok:!1,reason:e}}var sn=(e,t)=>({kind:"number",...e!=null?{min:e}:{},...t!=null?{max:t}:{}}),di={kind:"texture"},KA={kind:"color"},zL={kind:"enum",values:["lit","unlit"]},VL={kind:"enum",values:["opaque","mask","blend"]},YA={lightingModel:zL,baseColor:{kind:"object",properties:{color:KA,texture:di,brightness:sn(0),saturation:sn(0),contrast:sn(0),hue:sn(-180,180)}},normal:{kind:"object",properties:{texture:di,strength:sn(0)}},emission:{kind:"object",properties:{color:KA,intensity:sn(0),texture:di,maskTexture:di}},alpha:{kind:"object",properties:{mode:VL,opacity:sn(0,1),cutoff:sn(0,1),texture:di}}},UL={kind:"object",properties:{...YA,metallic:sn(0,1),roughness:sn(0,1),metallicRoughness:{kind:"object",properties:{texture:di}},occlusion:{kind:"object",properties:{texture:di,strength:sn(0)}}}},HL={kind:"object",properties:YA},KL={lightingModel:"lit",baseColor:{color:{r:1,g:1,b:1},brightness:1,saturation:1,contrast:1,hue:0},metallic:0,roughness:1,emission:{color:{r:0,g:0,b:0},intensity:0}},WL={lightingModel:"lit",baseColor:{color:{r:1,g:1,b:1},brightness:1,saturation:1,contrast:1,hue:0},emission:{color:{r:0,g:0,b:0},intensity:0}},WA=[{id:"surface",title:"Surface",order:40},{id:"geometry",title:"Geometry",order:50},{id:"emission",title:"Emission",order:60},{id:"alpha",title:"Alpha",order:70}],li={path:"properties.lightingModel",operator:"equals",value:"lit",inactiveReasonKey:"litMaterial"},JA=[_s("properties.lightingModel","surface",1,"enum","assetLightingModel","lightingModel","lit",{options:[{value:"lit",labelKey:"assetLightingModelLit"},{value:"unlit",labelKey:"assetLightingModelUnlit"}],binding:"lightingModel",updateClass:"define"}),_s("properties.baseColor.color","surface",2,"color","assetBaseColor","baseColor",{r:1,g:1,b:1},{binding:"baseColor.color"}),ks("properties.baseColor.texture.textureAssetId","properties.baseColor.texture","surface",3,"assetBaseTexture","baseTexture","baseColor.texture"),cn("properties.baseColor.brightness","surface",4,"assetBrightness","brightness",1,{softMin:0,softMax:4,step:.05,conditions:[vs("properties.baseColor.texture.textureAssetId","baseTexture")]}),cn("properties.baseColor.saturation","surface",5,"assetSaturation","saturation",1,{softMin:0,softMax:2,step:.05,conditions:[vs("properties.baseColor.texture.textureAssetId","baseTexture")]}),cn("properties.baseColor.contrast","surface",6,"assetContrast","contrast",1,{softMin:0,softMax:2,step:.05,conditions:[vs("properties.baseColor.texture.textureAssetId","baseTexture")]}),cn("properties.baseColor.hue","surface",7,"assetHue","hue",0,{step:1,conditions:[vs("properties.baseColor.texture.textureAssetId","baseTexture")]}),ks("properties.normal.texture.textureAssetId","properties.normal.texture","geometry",10,"assetNormalTexture","normalTexture","normal.texture",[li]),cn("properties.normal.strength","geometry",11,"assetNormalStrength","normalStrength",1,{softMin:0,softMax:4,step:.05,conditions:[li,vs("properties.normal.texture.textureAssetId","normalTexture")]}),_s("properties.emission.color","emission",50,"color","assetEmissionColor","emissionColor",{r:0,g:0,b:0},{binding:"emission.color"}),cn("properties.emission.intensity","emission",51,"assetEmissionIntensity","emissionIntensity",0,{softMin:0,softMax:8,step:.05}),ks("properties.emission.texture.textureAssetId","properties.emission.texture","emission",52,"assetEmissionTexture","emissionTexture","emission.texture"),_s("properties.alpha.mode","alpha",60,"enum","assetAlphaMode","alphaMode","opaque",{options:[{value:"opaque",labelKey:"assetAlphaModeOpaque"},{value:"mask",labelKey:"assetAlphaModeMask"},{value:"blend",labelKey:"assetAlphaModeBlend"}],binding:"alpha.mode",updateClass:"pipeline"}),cn("properties.alpha.opacity","alpha",61,"assetAlphaOpacity","alphaOpacity",1,{step:.05,conditions:[{path:"properties.alpha.mode",operator:"equals",value:"blend",inactiveReasonKey:"alphaBlend"}]}),cn("properties.alpha.cutoff","alpha",62,"assetAlphaCutoff","alphaCutoff",.5,{step:.01,conditions:[{path:"properties.alpha.mode",operator:"equals",value:"mask",inactiveReasonKey:"alphaMask"}]}),ks("properties.alpha.texture.textureAssetId","properties.alpha.texture","alpha",63,"assetAlphaTexture","alphaTexture","alpha.texture",[{path:"properties.alpha.mode",operator:"not-equals",value:"opaque",inactiveReasonKey:"alphaTransparency"}])],qL=[...JA,cn("properties.metallic","geometry",20,"assetMetallic","metallic",0,{step:.05,conditions:[li]}),cn("properties.roughness","geometry",21,"assetRoughness","roughness",1,{step:.05,conditions:[li]}),ks("properties.metallicRoughness.texture.textureAssetId","properties.metallicRoughness.texture","geometry",22,"assetMetallicRoughnessTexture","metallicRoughnessTexture","metallicRoughness.texture",[li]),ks("properties.occlusion.texture.textureAssetId","properties.occlusion.texture","geometry",23,"assetOcclusionTexture","occlusionTexture","occlusion.texture",[li]),cn("properties.occlusion.strength","geometry",24,"assetOcclusionStrength","occlusionStrength",1,{softMin:0,softMax:4,step:.05,conditions:[li,vs("properties.occlusion.texture.textureAssetId","occlusionTexture")]})],YL=[{shaderId:"fps.builtin.pbr",version:1,runtimeKind:"pbr",displayName:"PBR",propertiesSchema:UL,defaultProperties:KL,inspector:{sections:WA,fields:qL}},{shaderId:"fps.builtin.standard",version:1,runtimeKind:"standard",displayName:"Standard",propertiesSchema:HL,defaultProperties:WL,inspector:{sections:WA,fields:JA}}],ca=JL(YL);function JL(e){let t=new Map;for(let n of e){QL(n,t);let o=ZL(n);t.set(n.shaderId,ZA(o))}let r=Object.freeze([...t.values()]);return Object.freeze({get(n){return typeof n=="string"?t.get(n)??null:null},list(){return r}})}function Lh(e,t=ca){return t.get(e)}function fr(e){return Lh(e)}function XL(e,t,r=ca){let n=$h(t);return r.get(e)?.inspector.fields.find(a=>a.path===n)??null}function yd(e,t,r=ca){let n=Lh(e,r);if(!n)return null;let o=XL(e,t,r),i=(o?.schemaPath??$h(t)).replace(/^properties\./,"").split(".").filter(Boolean);if(i.length===0)return null;let s=n.propertiesSchema;for(let c=0;c<i.length;c+=1){let d=i[c];if(s.kind==="texture"&&c===i.length-1&&(d==="url"||d==="textureAssetId"))return{kind:"string",nullable:!0};if(s.kind!=="object")return null;let u=s.properties[d];if(!u)return null;s=u}return o?.control==="texture"&&s.kind==="texture"?{kind:"string",nullable:!0}:s}function Fh(e){let t=fr(e);if(!t)throw new Error(`Unknown built-in material shader: ${e}`);return structuredClone(t.defaultProperties)}function js(e,t,r="properties",n=ca){let o=Lh(e,n);if(!o)return[{path:"shaderId",message:`Unknown material shader: ${String(e)}`}];let a=[];return Bh(o.propertiesSchema,t,r,a),a}function _s(e,t,r,n,o,a,i,s){return{path:e,sectionId:t,order:r,control:n,labelKey:o,tooltipKey:a,defaultValue:i,updateClass:"uniform",...s}}function cn(e,t,r,n,o,a,i={}){return _s(e,t,r,"number",n,o,a,{binding:e.replace(/^properties\./,""),step:i.step??.05,displayPrecision:2,precision:2,...i})}function ks(e,t,r,n,o,a,i,s){return _s(e,r,n,"texture",o,a,"",{schemaPath:t,binding:i,updateClass:"texture",conditions:s})}function vs(e,t){return{path:e,operator:"truthy",inactiveReasonKey:t}}function QL(e,t){if(!oa(e.shaderId)&&!ci(e.shaderId))throw new Error("Material Shader Definition shaderId must be a supported built-in id or a lowercase namespaced project id.");if(!Number.isInteger(e.version)||e.version<=0)throw new Error(`Material Shader Definition ${e.shaderId} must use a positive integer version.`);if(t.has(e.shaderId))throw new Error(`Duplicate Material Shader Definition: ${e.shaderId}`);if(e.sourceFile!=null&&!tF(e.sourceFile))throw new Error(`Material Shader Definition ${e.shaderId} sourceFile must be a safe project-relative path.`);XA(e.shaderId,e.propertiesSchema,"properties");let r=[];if(Bh(e.propertiesSchema,e.defaultProperties,"properties",r),r.length>0){let a=r[0];throw new Error(`Material Shader Definition ${e.shaderId} default ${a.path} ${a.message}.`)}let n=new Set;for(let a of e.inspector.sections){if(!a.id.trim()||n.has(a.id))throw new Error(`Material Shader Definition ${e.shaderId} contains an invalid or duplicate section: ${a.id}`);n.add(a.id)}let o=new Set;for(let a of e.inspector.fields){if(!a.path.startsWith("properties.")||o.has(a.path))throw new Error(`Material Shader Definition ${e.shaderId} contains an invalid or duplicate field: ${a.path}`);if(!n.has(a.sectionId))throw new Error(`Material Shader Definition ${e.shaderId} field ${a.path} references an unknown section.`);eF(e,a),o.add(a.path)}}function ZL(e){let t=structuredClone(e);return{...t,inspector:{...t.inspector,fields:t.inspector.fields.map(r=>{if(r.control!=="number")return r;let n=QA(t.propertiesSchema,r.schemaPath??r.path);return n?.kind!=="number"?r:{...r,...n.min!=null?{min:n.min}:{},...n.max!=null?{max:n.max}:{}}})}}}function eF(e,t){let r=[["min",t.min],["max",t.max],["softMin",t.softMin],["softMax",t.softMax]];for(let[o,a]of r)if(a!=null&&!Number.isFinite(a))throw new Error(`Material Shader Definition ${e.shaderId} field ${t.path} ${o} must be finite.`);if(t.control!=="number"){if(r.some(([,o])=>o!=null))throw new Error(`Material Shader Definition ${e.shaderId} field ${t.path} uses numeric ranges with a non-number control.`);return}let n=QA(e.propertiesSchema,t.schemaPath??t.path);if(n?.kind!=="number")throw new Error(`Material Shader Definition ${e.shaderId} field ${t.path} must reference a number schema.`);for(let[o,a,i]of[["min",t.min,n.min],["max",t.max,n.max]])if(a!=null&&a!==i)throw new Error(`Material Shader Definition ${e.shaderId} field ${t.path} ${o} must match propertiesSchema.`);if(t.softMin!=null&&t.softMax!=null&&t.softMin>t.softMax)throw new Error(`Material Shader Definition ${e.shaderId} field ${t.path} softMin must not exceed softMax.`);if(n.min!=null&&t.softMin!=null&&t.softMin<n.min)throw new Error(`Material Shader Definition ${e.shaderId} field ${t.path} softMin must not be below the schema minimum.`);if(n.max!=null&&t.softMax!=null&&t.softMax>n.max)throw new Error(`Material Shader Definition ${e.shaderId} field ${t.path} softMax must not exceed the schema maximum.`)}function XA(e,t,r){if(t.kind==="object"){for(let[n,o]of Object.entries(t.properties))XA(e,o,`${r}.${n}`);return}if(t.kind==="number"){if(t.min!=null&&!Number.isFinite(t.min))throw new Error(`Material Shader Definition ${e} number field ${r} min must be finite.`);if(t.max!=null&&!Number.isFinite(t.max))throw new Error(`Material Shader Definition ${e} number field ${r} max must be finite.`);if(t.min!=null&&t.max!=null&&t.min>t.max)throw new Error(`Material Shader Definition ${e} number field ${r} min must not exceed max.`);return}if(t.kind==="color"&&t.channels!=null&&t.channels!==3&&t.channels!==4)throw new Error(`Material Shader Definition ${e} color field ${r} channels must be 3 or 4.`)}function tF(e){let t=e.trim();return!t||t.startsWith("/")||t.includes("\\")||t.includes(":")?!1:!t.split("/").includes("..")}function $h(e){let t=e.trim();return t.startsWith("properties.")?t:`properties.${t}`}function QA(e,t){let r=$h(t).replace(/^properties\./,"").split(".").filter(Boolean);if(r.length===0)return null;let n=e;for(let o of r){if(n.kind!=="object")return null;let a=n.properties[o];if(!a)return null;n=a}return n}function Bh(e,t,r,n){if(e.kind==="object"){if(!Gh(t)){n.push({path:r,message:"must be an object"});return}for(let a of Object.keys(t))Object.prototype.hasOwnProperty.call(e.properties,a)||n.push({path:`${r}.${a}`,message:"is not supported by the selected shader"});for(let[a,i]of Object.entries(e.properties))t[a]!==void 0&&Bh(i,t[a],`${r}.${a}`,n);return}if(e.kind==="number"){if(typeof t!="number"||!Number.isFinite(t)){n.push({path:r,message:"must be a finite number"});return}e.min!=null&&t<e.min&&n.push({path:r,message:`must be greater than or equal to ${e.min}`}),e.max!=null&&t>e.max&&n.push({path:r,message:`must be less than or equal to ${e.max}`});return}if(e.kind==="boolean"){typeof t!="boolean"&&n.push({path:r,message:"must be a boolean"});return}if(e.kind==="string"){t!==null&&typeof t!="string"?n.push({path:r,message:"must be a string"}):t===null&&!e.nullable&&n.push({path:r,message:"must not be null"});return}if(e.kind==="enum"){(typeof t!="string"||!e.values.includes(t))&&n.push({path:r,message:`must be one of: ${e.values.join(", ")}`});return}if(e.kind==="color"){let a=e.channels===4?["r","g","b","a"]:["r","g","b"];qA(t,r,a,n,e.channels===4?"an RGBA object":"an RGB object");return}if(e.kind==="vec2"||e.kind==="vec3"){qA(t,r,e.kind==="vec2"?["x","y"]:["x","y","z"],n,`a ${e.kind} object`);return}if(t===null)return;if(!Gh(t)){n.push({path:r,message:"must be a texture reference object or null"});return}Object.keys(t).some(a=>a!=="url"&&a!=="textureAssetId")&&n.push({path:r,message:"must contain only url or textureAssetId"});for(let a of["url","textureAssetId"]){let i=t[a];i!==void 0&&(typeof i!="string"||!i.trim())&&n.push({path:`${r}.${a}`,message:"must be a non-empty string"})}}function qA(e,t,r,n,o){if(!Gh(e)){n.push({path:t,message:`must be ${o}`});return}Object.keys(e).some(a=>!r.includes(a))&&n.push({path:t,message:`must contain only ${r.join(", ")}`});for(let a of r)(typeof e[a]!="number"||!Number.isFinite(e[a]))&&n.push({path:`${t}.${a}`,message:"must be a finite number"})}function ZA(e){if(e&&typeof e=="object"&&!Object.isFrozen(e)){Object.freeze(e);for(let t of Object.values(e))ZA(t)}return e}function Gh(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Ns(e,t={}){let r=new Map;for(let n of t.builtInMarkerTypes??[])r.set(n.type,nF(n));for(let n of Sd(e)){let o=r.get(n.type)??null;r.set(n.type,oF(o,n))}return[...r.values()]}function Vh(e){return structuredClone(e)}function nF(e){return{...Vh(e),metadata:{...e.metadata??{},builtIn:!0}}}function oF(e,t){let r=e??null;return{...r??{},...Vh(t),type:t.type,label:t.label||r?.label||t.type,metadata:{...r?.metadata??{},...t.metadata??{},builtIn:r?.metadata?.builtIn===!0}}}function aF(e,t,r={}){if(!nP(t)||Kh(t.type,r))return e;let n=Sd(e);return n.some(o=>o.type===t.type)?e:Hh(e,[...n,Uh(t,!1)])}function iF(e,t,r,n={}){let o=t.trim();if(!o)return e;let a=Kh(o,n),i=Sd(e),s=i.find(u=>u.type===o)??null;if(!a&&!s)return e;let c=s??a;if(!c)return e;let d=Uh({...c,...r,type:o,label:typeof r.label=="string"&&r.label.trim()?r.label.trim():c.label||o},!!a);return Hh(e,[...i.filter(u=>u.type!==o),d])}function sF(e,t,r={}){let n=t.trim();if(!n||oP(n,r)||e.markers.some(i=>i.markerType===n))return e;let o=Sd(e),a=o.filter(i=>i.type!==n);return a.length===o.length?e:Hh(e,a)}function Uh(e,t){return{type:e.type.trim(),label:e.label.trim()||e.type.trim(),...e.kind?{kind:e.kind}:{},...e.description!==void 0?{description:e.description}:{},...e.defaultTags?{defaultTags:[...e.defaultTags]}:{},metadata:{...e.metadata??{},builtIn:!1,...t?{overridesBuiltIn:!0}:{}}}}function Sd(e){let t=e?.metadata?.markerTypes;return Array.isArray(t)?t.map(cF).filter(r=>!!r):[]}function Hh(e,t){let r=e.metadata?structuredClone(e.metadata):{};return t.length===0?delete r.markerTypes:r.markerTypes=t.map(Vh),{...e,metadata:Object.keys(r).length>0?r:void 0}}function cF(e){if(!e||typeof e!="object")return null;let t=e;return typeof t.type!="string"||!t.type.trim()||typeof t.label!="string"||!t.label.trim()?null:Uh({type:t.type.trim(),label:t.label.trim(),...typeof t.kind=="string"&&t.kind?{kind:t.kind}:{},...typeof t.description=="string"?{description:t.description}:{},...Array.isArray(t.defaultTags)?{defaultTags:t.defaultTags.filter(r=>typeof r=="string")}:{},...t.metadata&&typeof t.metadata=="object"?{metadata:t.metadata}:{}},t.metadata?.overridesBuiltIn===!0)}function nP(e){return!!e.type.trim()&&!!e.label.trim()}function Kh(e,t={}){let r=e.trim();return t.builtInMarkerTypes?.find(n=>n.type===r)??null}function oP(e,t={}){return!!Kh(e,t)}function xo(e){let{spatial:t,...r}=structuredClone(e);return r}function im(e){return structuredClone(e)}function aP(e,t){return{...im(e),from:eP(e.from,t),to:eP(e.to,t)}}function iP(e,t){return{...xo(e),...e.target?{target:zh(e.target,t)}:{},geometry:dF(e.geometry,t)}}function dF(e,t){switch(e.kind){case"point":return{...structuredClone(e),...e.target?{target:zh(e.target,t)}:{}};case"object-bounds":return{...structuredClone(e),target:zh(e.target,t)};case"box":case"polyhedron":return structuredClone(e)}}function zh(e,t){return e.kind!=="marker"?structuredClone(e):{...structuredClone(e),id:t.get(e.id)??e.id}}function eP(e,t){return e.kind!=="marker"?{...e}:{...e,id:t.get(e.id)??e.id}}function sP(e,t){let r=new Set([t]),n=!0;for(;n;){n=!1;for(let o of e.scene.gameObjects)!o.parentId||!r.has(o.parentId)||r.has(o.id)||(r.add(o.id),n=!0)}return r}function Wh(e,t){return(e.kind==="marker"||e.kind==="scene-object")&&t.has(e.id)}function Id(e,t){return!e||e.kind!=="scene-object"||t.has(e.id)}function qh(e,t,r){return e.kind==="marker"?r.has(e.id):e.kind==="scene-object"?t.has(e.id):!0}function tP(e,t){return e.kind==="marker"&&e.id===t}function Mo(e){return e?{schemaVersion:1,markers:e.markers.map(xo),relations:e.relations.map(im),metadata:e.metadata?structuredClone(e.metadata):void 0}:{schemaVersion:1,markers:[],relations:[]}}function Yh(e,t){return{...e,scene:{...e.scene,markerGraph:t}}}function lF(e,t){let r=xo(t),n=e.markers.some(o=>o.id===r.id);return{...e,markers:n?e.markers.map(o=>o.id===r.id?r:o):[...e.markers,r]}}function uF(e,t,r){let n=!1,o=e.markers.map(a=>a.id!==t?a:(n=!0,xo({...a,...r,id:a.id})));return n?{...e,markers:o}:e}function mF(e,t){return{...e,markers:e.markers.filter(r=>r.id!==t),relations:e.relations.filter(r=>!tP(r.from,t)&&!tP(r.to,t))}}function rP(e,t){let r=im(t),n=e.relations.some(o=>o.id===r.id);return{...e,relations:n?e.relations.map(o=>o.id===r.id?r:o):[...e.relations,r]}}function pF(e,t){let r=!1,n=e.relations.map(o=>o.id!==t?o:(r=!0,{...im(o),from:{...o.to},to:{...o.from}}));return r?{...e,relations:n}:e}function cP(e,t,r={}){switch(t.type){case"marker.create-box":return lF(e,t.marker);case"marker.update":return uF(e,t.markerId,t.patch);case"marker.delete":return mF(e,t.markerId);case"relation.create":return rP(e,t.relation);case"relation.create-many":return t.relations.reduce((n,o)=>rP(n,o),e);case"relation.delete":return{...e,relations:e.relations.filter(n=>n.id!==t.relationId)};case"relation.delete-many":{let n=new Set(t.relationIds);return{...e,relations:e.relations.filter(o=>!n.has(o.id))}}case"relation.reverse":return pF(e,t.relationId);case"marker.sync-from-scene":return e;case"marker-type.create":return aF(e,t.definition,r);case"marker-type.update":return iF(e,t.typeId,t.patch,r);case"marker-type.delete":return sF(e,t.typeId,r)}}function dP(e,t,r={}){if(t.type!=="marker.create-box")return t;let n=xo(t.marker),o=new Set(e.scene.gameObjects.map(i=>i.id)),a=new Set(e.scene.gameObjects.map(i=>(i.name??"").trim()).filter(Boolean));return o.has(n.id)&&(n.id=fF(n.id,o,r.sanitizeMarkerGameObjectId)),(!n.label.trim()||a.has(n.label.trim()))&&(n.label=hF(n.label||n.id,a)),{...t,marker:n}}function fF(e,t,r){let o=(r??gF)(e).replace(/-\d+$/,"")||"marker";if(!t.has(o))return o;let a=2;for(;t.has(`${o}-${a}`);)a+=1;return`${o}-${a}`}function gF(e){return e.trim().toLowerCase().replace(/[^a-z0-9_-]+/g,"-").replace(/^-+|-+$/g,"")}function hF(e,t){let n=(e.trim()||"Marker").replace(/\s+\d+$/,"")||"Marker";if(!t.has(n))return n;let o=2;for(;t.has(`${n} ${o}`);)o+=1;return`${n} ${o}`}function lP(e,t,r,n={}){switch(t.type){case"marker.create-box":return bF(e,t.marker.geometry)&&!!t.marker.id.trim()&&!e.scene.gameObjects.some(o=>o.id===t.marker.id)&&yF(e,t.parentId??null,n);case"relation.create-many":return t.relations.length>0;case"relation.delete-many":return t.relationIds.length>0;case"relation.reverse":return r.relations.some(o=>o.id===t.relationId);case"marker-type.create":return nP(t.definition)&&!Ns(e.scene.markerGraph,n).some(o=>o.type===t.definition.type);case"marker-type.update":return!!t.typeId.trim()&&Ns(e.scene.markerGraph,n).some(o=>o.type===t.typeId);case"marker-type.delete":{let o=t.typeId.trim();return!o||oP(o,n)?!1:!r.markers.some(a=>a.markerType===o)&&Sd(r).some(a=>a.type===o)}default:return!0}}function bF(e,t){switch(t.kind){case"box":case"point":return!0;case"object-bounds":return Id(t.target,new Set(e.scene.gameObjects.map(r=>r.id)));case"polyhedron":return!1}}function yF(e,t,r){if(!t)return!0;let n=e.scene.gameObjects.find(o=>o.id===t)??null;return!!n&&!(r.isMarkerGameObject?.(n)??!!n.marker)}function uP(e){switch(e.type){case"marker.create-box":return`Create marker ${e.marker.label}`;case"marker.update":return`Update marker ${e.markerId}`;case"marker.delete":return`Delete marker ${e.markerId}`;case"relation.create":return`Create relation ${e.relation.type}`;case"relation.create-many":return`Create ${e.relations.length} relations`;case"relation.delete":return`Delete relation ${e.relationId}`;case"relation.delete-many":return`Delete ${e.relationIds.length} relations`;case"relation.reverse":return`Reverse relation ${e.relationId}`;case"marker.sync-from-scene":return"Sync marker graph";case"marker-type.create":return`Create marker type ${e.definition.label}`;case"marker-type.update":return`Update marker type ${e.typeId}`;case"marker-type.delete":return`Delete marker type ${e.typeId}`}}function mP(e){switch(e.type){case"marker.create-box":return{changedId:e.marker.id,changedIds:[e.marker.id],selectId:e.marker.id};case"marker.update":case"marker.delete":return{changedId:e.markerId,changedIds:[e.markerId]};case"relation.create":return{changedIds:[e.relation.from.id,e.relation.to.id]};case"relation.create-many":return{changedIds:[...new Set(e.relations.flatMap(t=>[t.from.id,t.to.id]))]};case"relation.delete":case"relation.delete-many":case"relation.reverse":case"marker.sync-from-scene":case"marker-type.create":case"marker-type.update":case"marker-type.delete":return{}}}function pP(e){let t=structuredClone(e);if(t.type==="marker.create-box"&&(t.marker=xo(t.marker)),t.type==="marker.update"){let{spatial:r,...n}=t.patch;t.patch=n}return t}function Ed(e,t){return JSON.stringify(e)===JSON.stringify(t)}function fP(e,t,r,n={}){let o=t.find(a=>a.path===r.path);if(!o)throw new Error(`Serialized property descriptor not found: ${r.path}`);if(o.readOnly===!0||typeof o.setValue!="function")throw new Error(`Serialized property is read-only: ${r.path}`);return o.setValue(e,r.value,{...n,targetId:r.targetId})}var sm="summary",gP="body";function dn(){return{position:{x:0,y:0,z:0},rotation:{x:0,y:0,z:0},scale:{x:1,y:1,z:1}}}function SF(){return[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]}function dm(e){let t=EP(e);return t&&IF(t)?{mode:"matrix",matrix:t}:null}function hP(e){return Lr(e)?{mode:"matrix",matrix:rb(e.matrix)}:{...e.mode==="trs"?{mode:"trs"}:{},position:cm(e.position),rotation:cm(e.rotation),scale:cm(e.scale)}}function Lr(e){return e.mode==="matrix"}function ln(e){return e.mode!=="matrix"}function bP(e){return Lr(e)?{x:e.matrix[12],y:e.matrix[13],z:e.matrix[14]}:cm(e.position)}function IF(e){return!!EP(e)&&Math.abs(e[3])<=1e-6&&Math.abs(e[7])<=1e-6&&Math.abs(e[11])<=1e-6&&Math.abs(e[15]-1)<=1e-6&&!!yP(e)}function Gr(e){if(Lr(e))return rb(e.matrix);let t=EF(e.rotation),r=t.x,n=t.y,o=t.z,a=t.w,i=r+r,s=n+n,c=o+o,d=r*i,u=r*s,l=r*c,m=n*s,p=n*c,h=o*c,g=a*i,f=a*s,y=a*c,A=e.scale.x,T=e.scale.y,D=e.scale.z;return[(1-(m+h))*A,(u+y)*A,(l-f)*A,0,(u-y)*T,(1-(d+h))*T,(p+g)*T,0,(l+f)*D,(p-g)*D,(1-(d+m))*D,0,e.position.x,e.position.y,e.position.z,1]}function Zh(e,t){return[e[0]*t[0]+e[1]*t[4]+e[2]*t[8]+e[3]*t[12],e[0]*t[1]+e[1]*t[5]+e[2]*t[9]+e[3]*t[13],e[0]*t[2]+e[1]*t[6]+e[2]*t[10]+e[3]*t[14],e[0]*t[3]+e[1]*t[7]+e[2]*t[11]+e[3]*t[15],e[4]*t[0]+e[5]*t[4]+e[6]*t[8]+e[7]*t[12],e[4]*t[1]+e[5]*t[5]+e[6]*t[9]+e[7]*t[13],e[4]*t[2]+e[5]*t[6]+e[6]*t[10]+e[7]*t[14],e[4]*t[3]+e[5]*t[7]+e[6]*t[11]+e[7]*t[15],e[8]*t[0]+e[9]*t[4]+e[10]*t[8]+e[11]*t[12],e[8]*t[1]+e[9]*t[5]+e[10]*t[9]+e[11]*t[13],e[8]*t[2]+e[9]*t[6]+e[10]*t[10]+e[11]*t[14],e[8]*t[3]+e[9]*t[7]+e[10]*t[11]+e[11]*t[15],e[12]*t[0]+e[13]*t[4]+e[14]*t[8]+e[15]*t[12],e[12]*t[1]+e[13]*t[5]+e[14]*t[9]+e[15]*t[13],e[12]*t[2]+e[13]*t[6]+e[14]*t[10]+e[15]*t[14],e[12]*t[3]+e[13]*t[7]+e[14]*t[11]+e[15]*t[15]]}function yP(e){let t=e[0],r=e[1],n=e[2],o=e[3],a=e[4],i=e[5],s=e[6],c=e[7],d=e[8],u=e[9],l=e[10],m=e[11],p=e[12],h=e[13],g=e[14],f=e[15],y=t*i-r*a,A=t*s-n*a,T=t*c-o*a,D=r*s-n*i,P=r*c-o*i,C=n*c-o*s,E=d*h-u*p,S=d*g-l*p,w=d*f-m*p,M=u*g-l*h,_=u*f-m*h,B=l*f-m*g,re=y*B-A*_+T*M+D*w-P*S+C*E;if(!Number.isFinite(re)||Math.abs(re)<1e-6)return null;let U=1/re;return[(i*B-s*_+c*M)*U,(n*_-r*B-o*M)*U,(h*C-g*P+f*D)*U,(l*P-u*C-m*D)*U,(s*w-a*B-c*S)*U,(t*B-n*w+o*S)*U,(g*T-p*C-f*A)*U,(d*C-l*T+m*A)*U,(a*_-i*w+c*E)*U,(r*w-t*_-o*E)*U,(p*P-h*T+f*y)*U,(u*T-d*P-m*y)*U,(i*S-a*M-s*E)*U,(t*M-r*S+n*E)*U,(h*A-p*D-g*y)*U,(d*D-u*A+l*y)*U]}function eb(e){let t={x:e[12],y:e[13],z:e[14]},r={x:Jh(e[0],e[1],e[2]),y:Jh(e[4],e[5],e[6]),z:Jh(e[8],e[9],e[10])};if(xF(e)<=0&&(r.y*=-1),!Qh(t)||!Qh(r)||Math.abs(r.x)<1e-6||Math.abs(r.y)<1e-6||Math.abs(r.z)<1e-6)return null;let n=1/r.x,o=1/r.y,a=1/r.z,i=[e[0]*n,e[1]*n,e[2]*n,0,e[4]*o,e[5]*o,e[6]*o,0,e[8]*a,e[9]*a,e[10]*a,0,0,0,0,1];if(!MF(i))return null;let s=PF(AF(i));if(!s)return null;let c=TF(s);if(!Qh(c))return null;let d={position:t,rotation:c,scale:r};return Td(Gr(d),e,1e-5)?d:null}function tb(e,t={}){let r=eb(e);return r||(t.allowMatrixFallback?dm(e):null)}function SP(e){let t=SF();for(let r of e)t=Zh(Gr(r),t);return tb(t,{allowMatrixFallback:!0})}function IP(e,t){return tb(Zh(Gr(t),Gr(e)),{allowMatrixFallback:!0})}function Gs(e,t,r={}){let n=yP(Gr(e));return n?tb(Zh(Gr(t),n),r):null}function Td(e,t,r=1e-6){return e.length===t.length&&e.every((n,o)=>Math.abs(n-t[o])<=r)}function rb(e){return[e[0],e[1],e[2],e[3],e[4],e[5],e[6],e[7],e[8],e[9],e[10],e[11],e[12],e[13],e[14],e[15]]}function EP(e){return e.length!==16||!e.every(Number.isFinite)?null:rb(e)}function cm(e){return{x:e.x,y:e.y,z:e.z}}function EF(e){let t=e.z*.5,r=e.x*.5,n=e.y*.5,o=Math.sin(t),a=Math.cos(t),i=Math.sin(r),s=Math.cos(r),c=Math.sin(n),d=Math.cos(n);return{x:d*i*a+c*s*o,y:c*s*a-d*i*o,z:d*s*o-c*i*a,w:d*s*a+c*i*o}}function TF(e){let t=e.z,r=e.x,n=e.y,o=e.w,a=n*t-r*o,i=.4999999;if(a<-i)return{x:Math.PI/2,y:2*Math.atan2(n,o),z:0};if(a>i)return{x:-Math.PI/2,y:2*Math.atan2(n,o),z:0};let s=o*o,c=t*t,d=r*r,u=n*n;return{z:Math.atan2(2*(r*n+t*o),-c-d+u+s),x:Math.asin(-2*a),y:Math.atan2(2*(t*r+n*o),c-d-u+s)}}function AF(e){let t=e[0],r=e[4],n=e[8],o=e[1],a=e[5],i=e[9],s=e[2],c=e[6],d=e[10],u=t+a+d;if(u>0){let m=.5/Math.sqrt(u+1);return{w:.25/m,x:(c-i)*m,y:(n-s)*m,z:(o-r)*m}}if(t>a&&t>d){let m=2*Math.sqrt(1+t-a-d);return{w:(c-i)/m,x:.25*m,y:(r+o)/m,z:(n+s)/m}}if(a>d){let m=2*Math.sqrt(1+a-t-d);return{w:(n-s)/m,x:(r+o)/m,y:.25*m,z:(i+c)/m}}let l=2*Math.sqrt(1+d-t-a);return{w:(o-r)/l,x:(n+s)/l,y:(i+c)/l,z:.25*l}}function PF(e){let t=Math.sqrt(e.x*e.x+e.y*e.y+e.z*e.z+e.w*e.w);return!Number.isFinite(t)||t<1e-6?null:{x:e.x/t,y:e.y/t,z:e.z/t,w:e.w/t}}function xF(e){let t=e[0],r=e[1],n=e[2],o=e[3],a=e[4],i=e[5],s=e[6],c=e[7],d=e[8],u=e[9],l=e[10],m=e[11],p=e[12],h=e[13],g=e[14],f=e[15],y=l*f-g*m,A=u*f-h*m,T=u*g-h*l,D=d*f-p*m,P=d*g-l*p,C=d*h-p*u,E=+(i*y-s*A+c*T),S=-(a*y-s*D+c*P),w=+(a*A-i*D+c*C),M=-(a*T-i*P+s*C);return t*E+r*S+n*w+o*M}function Jh(e,t,r){return Math.sqrt(e*e+t*t+r*r)}function MF(e){let t={x:e[0],y:e[1],z:e[2]},r={x:e[4],y:e[5],z:e[6]},n={x:e[8],y:e[9],z:e[10]};return Math.abs(Xh(t,r))<1e-6&&Math.abs(Xh(t,n))<1e-6&&Math.abs(Xh(r,n))<1e-6}function Xh(e,t){return e.x*t.x+e.y*t.y+e.z*t.z}function Qh(e){return Number.isFinite(e.x)&&Number.isFinite(e.y)&&Number.isFinite(e.z)}var DF={supportsShear:!0,supportsMatrixTransform:!0};function lm(e={}){let t={...DF,...e.storageCapabilities};return{allowMatrixFallback:(e.allowMatrixFallback??!0)&&t.supportsMatrixTransform&&t.supportsShear,storageCapabilities:t}}function q(e){return typeof e=="number"&&Number.isFinite(e)}function ui(e){return e==null||typeof e=="string"}function mi(e){return e==null||typeof e=="string"&&e.trim().length>0}function um(e){return Array.isArray(e)&&e.every(t=>typeof t=="string")}function mm(e){return e==null||typeof e=="boolean"}function gr(e){if(!e||typeof e!="object")return!1;let t=e;return q(t.x)&&q(t.y)&&q(t.z)}function pm(e){if(!e||typeof e!="object")return!1;let t=e;return q(t.x)&&q(t.y)}function Ad(e){if(q(e))return e>=0;if(!e||typeof e!="object")return!1;let t=e;return q(t.x)&&t.x>=0&&q(t.y)&&t.y>=0&&q(t.z)&&t.z>=0}function $n(e){if(!e||typeof e!="object")return!1;let t=e;return q(t.r)&&q(t.g)&&q(t.b)}function Bn(e){return q(e)&&e>0}function Pd(e){return q(e)&&e>=0}function fm(e){return q(e)&&e>=0&&e<=1}function gm(e){if(!e||typeof e!="object")return!1;let t=e;return!(t.position!==void 0&&!gr(t.position)||t.rotation!==void 0&&!gr(t.rotation)||t.rotationDeg!==void 0&&!gr(t.rotationDeg)||t.scale!==void 0&&!Ad(t.scale))}function hm(e){return e==="orthographic"||e==="perspective"}function bm(e){return e==="hemispheric"||e==="directional"}var zn=["group","instance","transform","primitive"],TP=["instance","transform","primitive"],OF=["position","rotation","scale"],RF=["x","y","z"];function CF(e){return{path:`transform.${e}`,appliesTo:zn,validate:t=>t==null||(e==="scale"?Ad(t):gr(t))}}function wF(e,t){return{path:`transform.${e}.${t}`,appliesTo:zn,...e==="scale"?{allowDelete:!1}:{},validate:r=>r==null||(e==="scale"?Pd(r):q(r))}}function vF(e){return[CF(e),...RF.map(t=>wF(e,t))]}var nb=[{path:"name",appliesTo:zn,validate:ui},{path:"parentId",appliesTo:zn,validate:ui},{path:"enabled",appliesTo:zn,validate:mm},{path:"shadow.cast",appliesTo:TP,validate:e=>typeof e=="boolean"},{path:"shadow.receive",appliesTo:TP,validate:e=>typeof e=="boolean"},{path:"transform",appliesTo:zn,validate:e=>e==null||gm(e)},...OF.flatMap(vF),{path:"transform.rotationDeg",appliesTo:zn,validate:e=>e==null||gr(e)},{path:"transform.rotationDeg.x",appliesTo:zn,validate:e=>e==null||q(e)},{path:"transform.rotationDeg.y",appliesTo:zn,validate:e=>e==null||q(e)},{path:"transform.rotationDeg.z",appliesTo:zn,validate:e=>e==null||q(e)},{path:"instance.assetId",appliesTo:["instance"],validate:e=>typeof e=="string"&&e.trim().length>0,allowDelete:!1},{path:"primitive.shape",appliesTo:["primitive"],validate:e=>e==="cube"||e==="sphere"||e==="plane"||e==="capsule",allowDelete:!1},{path:"camera.projection",appliesTo:["transform"],validate:hm,allowDelete:!1},{path:"camera.alpha",appliesTo:["transform"],validate:q,allowDelete:!1},{path:"camera.beta",appliesTo:["transform"],validate:q,allowDelete:!1},{path:"camera.radius",appliesTo:["transform"],validate:Bn,allowDelete:!1},{path:"camera.orthoSize",appliesTo:["transform"],validate:Bn,allowDelete:!1},{path:"camera.fov",appliesTo:["transform"],validate:Bn,allowDelete:!1},{path:"camera.targetOffset",appliesTo:["transform"],validate:e=>e==null||gr(e)},{path:"camera.targetOffset.x",appliesTo:["transform"],validate:q,allowDelete:!1},{path:"camera.targetOffset.y",appliesTo:["transform"],validate:q,allowDelete:!1},{path:"camera.targetOffset.z",appliesTo:["transform"],validate:q,allowDelete:!1},{path:"camera.minZ",appliesTo:["transform"],validate:Bn,allowDelete:!1},{path:"camera.maxZ",appliesTo:["transform"],validate:Bn,allowDelete:!1},{path:"camera.lowerBetaLimit",appliesTo:["transform"],validate:q,allowDelete:!1},{path:"camera.upperBetaLimit",appliesTo:["transform"],validate:q,allowDelete:!1},{path:"camera.lowerRadiusLimit",appliesTo:["transform"],validate:Bn,allowDelete:!1},{path:"camera.upperRadiusLimit",appliesTo:["transform"],validate:Bn,allowDelete:!1},{path:"camera.inertia",appliesTo:["transform"],validate:fm,allowDelete:!1},{path:"camera.targetScreenOffset",appliesTo:["transform"],validate:e=>e==null||pm(e)},{path:"camera.targetScreenOffset.x",appliesTo:["transform"],validate:q,allowDelete:!1},{path:"camera.targetScreenOffset.y",appliesTo:["transform"],validate:q,allowDelete:!1},{path:"light.type",appliesTo:["transform"],validate:bm,allowDelete:!1},{path:"light.intensity",appliesTo:["transform"],validate:Pd,allowDelete:!1},{path:"light.direction",appliesTo:["transform"],validate:gr,allowDelete:!1},{path:"light.direction.x",appliesTo:["transform"],validate:q,allowDelete:!1},{path:"light.direction.y",appliesTo:["transform"],validate:q,allowDelete:!1},{path:"light.direction.z",appliesTo:["transform"],validate:q,allowDelete:!1},{path:"light.diffuseColor",appliesTo:["transform"],validate:e=>e==null||$n(e)},{path:"light.groundColor",appliesTo:["transform"],validate:e=>e==null||$n(e)},{path:"marker.type",appliesTo:["transform"],validate:ui,allowDelete:!1},{path:"marker.kind",appliesTo:["transform"],validate:mi},{path:"marker.tags",appliesTo:["transform"],validate:e=>e==null||um(e)},{path:"marker.note",appliesTo:["transform"],validate:ui},{path:"marker.color",appliesTo:["transform"],validate:e=>e==null||$n(e)},{path:"marker.color.r",appliesTo:["transform"],validate:e=>e==null||q(e),allowDelete:!1},{path:"marker.color.g",appliesTo:["transform"],validate:e=>e==null||q(e),allowDelete:!1},{path:"marker.color.b",appliesTo:["transform"],validate:e=>e==null||q(e),allowDelete:!1}];var ot=["instance","transform","primitive"];function hr(e){return{path:e,appliesTo:ot,validate:t=>t==null||$n(t)}}function Re(e){return{path:e,appliesTo:ot,validate:t=>t==null||q(t)}}function AP(e){return{path:e,appliesTo:ot,validate:t=>t==null||typeof t=="boolean"}}function pt(e){return{path:e,appliesTo:ot,validate:mi}}function kF(e){return{path:e,appliesTo:ot,validate:t=>t==null||t==="opaque"||t==="mask"||t==="blend"}}function jF(e){return{path:e,appliesTo:ot,validate:t=>t==null||t==="lit"||t==="unlit"}}var NF=[{path:"transformType",appliesTo:["transform"],validate:e=>e==null||typeof e=="string"},{path:"rendering.renderingGroupId",appliesTo:ot,validate:e=>e==null||e===0||e===1||e===2||e===3},{path:"rendering.alphaIndex",appliesTo:ot,validate:e=>e==null||q(e)},hr("overrides.material.albedoColor"),hr("overrides.material.diffuseColor"),hr("overrides.material.emissiveColor"),Re("overrides.material.metallic"),Re("overrides.material.roughness"),Re("overrides.material.contrast"),Re("overrides.material.brightness"),Re("overrides.material.saturation"),Re("overrides.material.hue"),Re("overrides.material.colorDensity"),Re("overrides.material.alpha"),Re("overrides.material.alphaCutOff"),Re("overrides.material.transparencyMode"),AP("overrides.material.backFaceCulling"),pt("overrides.material.albedoTexture.url"),pt("overrides.material.normalTexture.url"),Re("overrides.material.normalTexture.level"),pt("overrides.material.metallicTexture.url"),pt("overrides.material.occlusionTexture.url"),pt("overrides.material.emissiveTexture.url"),pt("overrides.material.opacityTexture.url"),hr("overrides.material.pbr.albedoColor"),Re("overrides.material.pbr.baseWeight"),hr("overrides.material.pbr.reflectivityColor"),Re("overrides.material.pbr.microSurface"),hr("overrides.material.pbr.emissiveColor"),hr("overrides.material.pbr.ambientColor"),Re("overrides.material.pbr.lightFalloff"),Re("overrides.material.pbr.directIntensity"),Re("overrides.material.pbr.emissiveIntensity"),Re("overrides.material.pbr.environmentIntensity"),Re("overrides.material.pbr.specularIntensity"),Re("overrides.material.pbr.metallicF0Factor"),Re("overrides.material.pbr.indexOfRefraction"),hr("overrides.material.standard.diffuseColor"),hr("overrides.material.standard.specularColor"),Re("overrides.material.standard.specularPower"),hr("overrides.material.standard.emissiveColor"),hr("overrides.material.standard.ambientColor"),AP("overrides.material.standard.useSpecularOverAlpha"),{path:"overrides.materialBinding.materialAssetId",appliesTo:ot,validate:mi},jF("overrides.materialBinding.override.lightingModel"),hr("overrides.materialBinding.override.baseColor.color"),{path:"overrides.materialBinding.override.baseColor.color.r",appliesTo:ot,validate:e=>e==null||q(e),allowDelete:!1},{path:"overrides.materialBinding.override.baseColor.color.g",appliesTo:ot,validate:e=>e==null||q(e),allowDelete:!1},{path:"overrides.materialBinding.override.baseColor.color.b",appliesTo:ot,validate:e=>e==null||q(e),allowDelete:!1},pt("overrides.materialBinding.override.baseColor.texture.url"),pt("overrides.materialBinding.override.baseColor.texture.textureAssetId"),Re("overrides.materialBinding.override.baseColor.brightness"),Re("overrides.materialBinding.override.baseColor.saturation"),Re("overrides.materialBinding.override.baseColor.contrast"),Re("overrides.materialBinding.override.baseColor.hue"),pt("overrides.materialBinding.override.normal.texture.url"),pt("overrides.materialBinding.override.normal.texture.textureAssetId"),Re("overrides.materialBinding.override.normal.strength"),Re("overrides.materialBinding.override.metallic"),Re("overrides.materialBinding.override.roughness"),pt("overrides.materialBinding.override.metallicRoughness.texture.url"),pt("overrides.materialBinding.override.metallicRoughness.texture.textureAssetId"),pt("overrides.materialBinding.override.occlusion.texture.url"),pt("overrides.materialBinding.override.occlusion.texture.textureAssetId"),Re("overrides.materialBinding.override.occlusion.strength"),hr("overrides.materialBinding.override.emission.color"),{path:"overrides.materialBinding.override.emission.color.r",appliesTo:ot,validate:e=>e==null||q(e),allowDelete:!1},{path:"overrides.materialBinding.override.emission.color.g",appliesTo:ot,validate:e=>e==null||q(e),allowDelete:!1},{path:"overrides.materialBinding.override.emission.color.b",appliesTo:ot,validate:e=>e==null||q(e),allowDelete:!1},Re("overrides.materialBinding.override.emission.intensity"),pt("overrides.materialBinding.override.emission.texture.url"),pt("overrides.materialBinding.override.emission.texture.textureAssetId"),pt("overrides.materialBinding.override.emission.maskTexture.url"),pt("overrides.materialBinding.override.emission.maskTexture.textureAssetId"),kF("overrides.materialBinding.override.alpha.mode"),Re("overrides.materialBinding.override.alpha.opacity"),Re("overrides.materialBinding.override.alpha.cutoff"),pt("overrides.materialBinding.override.alpha.texture.url"),pt("overrides.materialBinding.override.alpha.texture.textureAssetId"),{path:"overrides.outline",appliesTo:ot,validate:e=>e==null||GF(e)},{path:"overrides.outline.strategy",appliesTo:ot,validate:e=>e==null||e==="babylon-default"},{path:"overrides.outline.renderOutline",appliesTo:ot,validate:e=>e==null||typeof e=="boolean"},Re("overrides.outline.outlineWidth"),{path:"overrides.outline.outlineColor",appliesTo:ot,validate:e=>e==null||$n(e)},{path:"overrides.outline.outlineColor.r",appliesTo:ot,validate:e=>e==null||q(e),allowDelete:!1},{path:"overrides.outline.outlineColor.g",appliesTo:ot,validate:e=>e==null||q(e),allowDelete:!1},{path:"overrides.outline.outlineColor.b",appliesTo:ot,validate:e=>e==null||q(e),allowDelete:!1}],PP=[...nb,...NF];function GF(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let t=e;return(t.strategy==null||t.strategy==="babylon-default")&&(t.renderOutline==null||typeof t.renderOutline=="boolean")&&(t.outlineWidth==null||q(t.outlineWidth))&&(t.outlineColor==null||$n(t.outlineColor))}function ob(e,t){let r=PP.find(n=>n.path===e)??null;return!r||!r.appliesTo.includes(t)?null:r}var Do="scene.materialAssets.",ab="__fps_duplicate_material_asset__:",LF="mat_";function FF(e){return String(e??"").trim().toLowerCase().replace(/[^a-z0-9]+/g,"")}function Ls(e){let t=FF(e);return`${LF}${t||"material"}`}function sb(){let e=globalThis.crypto?.randomUUID?.();if(e)return e;let t=Math.random().toString(36).slice(2,12);return`${Date.now().toString(36)}-${t}`}function xP(e,t=Do){if(!e.startsWith(t))return null;let r=e.slice(t.length);if(!r)return null;if(r.endsWith(".name")){let s=r.slice(0,-5);return s?{materialAssetId:s,fieldPath:"name"}:null}let n=".properties.",o=r.lastIndexOf(n);if(o<0)return null;let a=r.slice(0,o),i=r.slice(o+n.length);return!a||!i?null:{materialAssetId:a,fieldPath:`properties.${i}`}}function da(e){return e==="overrides.materialBinding.materialAssetId"||Vn(e,"materialAssetId")!=null}function cb(e){if(da(e))return!0;let t="overrides.materialBinding.override.";if(e.startsWith(t))return ib(`properties.${e.slice(t.length)}`);let r=$F(e);return r?ib(`properties.${r}`):!1}function ym(e){return e==="overrides.materialBinding.materialAssetId"||e.startsWith("overrides.materialBinding.override.")||Vn(e,"materialAssetId")!=null||Vn(e,"override")!=null}function Vn(e,t){let r="overrides.materialSlotBindings.";if(!e.startsWith(r))return null;let n=e.slice(r.length);if(t==="materialAssetId"){let c=".materialAssetId";if(!n.endsWith(c))return null;let d=n.slice(0,-c.length);return d||null}let o=".override.",a=n.lastIndexOf(o);if(a<0)return null;let i=n.slice(0,a),s=n.slice(a+o.length);return i&&s?i:null}function $F(e){let t="overrides.materialSlotBindings.";if(!e.startsWith(t))return null;let r=e.slice(t.length),n=".override.",o=r.lastIndexOf(n);if(o<0)return null;let a=r.slice(0,o),i=r.slice(o+n.length);return a&&i?i:null}function ib(e){return e.endsWith(".texture.url")||e.endsWith(".maskTexture.url")||e.endsWith(".texture.textureAssetId")||e.endsWith(".maskTexture.textureAssetId")}function Fr(e,t){if(e==="name"&&typeof t=="string")return t.trim();if(ib(e)&&typeof t=="string"){let r=t.trim();return r||null}return(e==="properties.alpha.mode"||e==="properties.lightingModel")&&typeof t=="string"?t.trim():t}function Oo(e,t,r,n=ca){let o=Fr(e,t);if(e==="name")return typeof o=="string"&&o.length>0;let a=BF(e,r,n);return a?zF(a,o):!1}function BF(e,t,r){if(t!=null)return yd(t,e,r);for(let n of r.list()){let o=yd(n.shaderId,e,r);if(o)return o}return null}function zF(e,t){if(t==null)return e.kind==="texture"||e.kind==="string"&&e.nullable===!0;if(e.kind==="number")return!(!q(t)||e.min!=null&&t<e.min||e.max!=null&&t>e.max);if(e.kind==="boolean")return typeof t=="boolean";if(e.kind==="string")return typeof t=="string"&&t.trim().length>0;if(e.kind==="enum")return typeof t=="string"&&e.values.includes(t);if(e.kind==="color")return e.channels===4?UF(t):VF(t);if(e.kind==="vec2"||e.kind==="vec3"){if(!t||typeof t!="object"||Array.isArray(t))return!1;let r=t,n=e.kind==="vec2"?["x","y"]:["x","y","z"];return Object.keys(r).every(o=>n.includes(o))&&n.every(o=>q(r[o]))}if(e.kind==="texture"){if(!t||typeof t!="object"||Array.isArray(t))return!1;let r=t;return Object.keys(r).every(n=>n==="url"||n==="textureAssetId")&&["url","textureAssetId"].every(n=>r[n]===void 0||typeof r[n]=="string"&&r[n].trim().length>0)}return!1}function Sm(e){return typeof e!="string"||!e.startsWith(ab)?null:e.slice(ab.length).trim()||null}function MP(e){return e.trim().replace(/^\/+|\/+$/g,"")}function VF(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let t=e;return Object.keys(t).every(r=>r==="r"||r==="g"||r==="b")&&q(t.r)&&q(t.g)&&q(t.b)}function UF(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let t=e;return Object.keys(t).every(r=>r==="r"||r==="g"||r==="b"||r==="a")&&q(t.r)&&q(t.g)&&q(t.b)&&q(t.a)}var HF={r:.78,g:.78,b:.78};function Un(e,t={}){let r=e??{},n=qF(r.baseColor?.texture,t),o=WF(r,t),a=KF(r,t);return{kind:"material-sphere",baseColor:YF(r),metallic:xd(r.metallic??0),roughness:xd(r.roughness??1),...r.emission?.color?{emissionColor:RP(r.emission.color)}:{},emissionIntensity:JF(r.emission?.intensity,0),textureUrl:n,profile:o,properties:structuredClone(e??{}),...a.length>0?{textureResources:a}:{}}}function KF(e,t){return[["baseColor",e.baseColor?.texture],["normal",e.normal?.texture],["metallicRoughness",e.metallicRoughness?.texture],["occlusion",e.occlusion?.texture],["emission",e.emission?.texture],["emissionMask",e.emission?.maskTexture],["alpha",e.alpha?.texture]].flatMap(([n,o])=>{let a=db(o,t);return a?[{channel:n,...a}]:[]})}function WF(e,t){let r=structuredClone(e),n=pi(r.baseColor?.texture,t);n&&(r.baseColor={...r.baseColor??{},texture:n});let o=pi(r.normal?.texture,t);o&&(r.normal={...r.normal??{},texture:o});let a=pi(r.metallicRoughness?.texture,t);a&&(r.metallicRoughness={...r.metallicRoughness??{},texture:a});let i=pi(r.occlusion?.texture,t);i&&(r.occlusion={...r.occlusion??{},texture:i});let s=pi(r.emission?.texture,t),c=pi(r.emission?.maskTexture,t);(s||c)&&(r.emission={...r.emission??{},...s?{texture:s}:{},...c?{maskTexture:c}:{}});let d=pi(r.alpha?.texture,t);return d&&(r.alpha={...r.alpha??{},texture:d}),r}function pi(e,t){if(!e)return;let r=db(e,t);if(r?.state==="missing")return{...e,url:null};let n=r?.url;return{...e,...n?{url:n}:{}}}function qF(e,t){let r=db(e,t);return r?.state==="ready"?r.url:void 0}function db(e,t){let r=typeof e?.textureAssetId=="string"?e.textureAssetId.trim():"";if(r){let o=t.resolveTextureAssetUrl?.(r)?.trim();if(o)return{reference:r,state:"ready",url:o};let a=t.textureAssets?.find(i=>i.id===r)?.url?.trim();if(a)return{reference:r,state:"ready",url:a};if(t.resolveTextureAssetUrl||Array.isArray(t.textureAssets))return{reference:r,state:"missing"}}let n=typeof e?.url=="string"?e.url.trim():"";return n?{reference:r||n,state:"ready",url:n}:null}function OP(e,t){let r=e??{},n=DP(r.metallic??0),o=DP(r.roughness??1);return`M ${n} / R ${o} - ${t}`}function YF(e){let r=(e.baseColor??{}).color??HF;return RP(r)}function RP(e){return{r:xd(e.r),g:xd(e.g),b:xd(e.b)}}function xd(e){return Number.isFinite(e)?Math.min(1,Math.max(0,e)):0}function DP(e){return Number.isFinite(e)?Number.isInteger(e)?String(e):e.toFixed(2).replace(/0+$/,"").replace(/\.$/,""):"0"}function JF(e,t){return typeof e=="number"&&Number.isFinite(e)?e:t}function Xe(e,t){return t?e.scene.materialAssets?.find(r=>r.id===t)??null:null}function Hn(e,t){return!!Xe(e,t)}function GP(e,t){return t?{state:"asset",materialAssetId:t.id,materialAsset:t}:e?.materialAssetId?{state:"missing-asset",materialAssetId:e.materialAssetId}:e?.override?{state:"override"}:{state:"inherit"}}function Md(e,t){let r=new Set;for(let n of lb(e,t))r.add(n.gameObjectId);return[...r]}function lb(e,t){let r=t.trim();return r?fi(e).filter(n=>n.materialAssetId===r):[]}function fi(e){let t=[],r=new Map(e.assets.map(n=>[n.id,n]));for(let n of e.scene.gameObjects){let o=o$(n),a=Im(n.overrides?.materialBinding);a&&t.push({kind:"root",scope:"scene",gameObjectId:n.id,gameObjectName:n.name,materialAssetId:a,bindingPath:"overrides.materialBinding.materialAssetId",label:o});let i=Ro(e,n,r),s=new Map(i.filter(d=>!!d.slotId).map(d=>[d.slotId,d])),c=n.overrides?.materialSlotBindings??{};for(let[d,u]of Object.entries(c)){let l=Im(u);if(!l)continue;let m=s.get(d),p=a$(m,d);t.push({kind:"slot",scope:"scene",gameObjectId:n.id,gameObjectName:n.name,materialAssetId:l,bindingPath:`overrides.materialSlotBindings.${d}.materialAssetId`,label:`${o} / ${p}`,slotId:d,ownerNodePath:Kn(m)??d})}}for(let n of e.assets)if(!(n.type!=="prefab"||!n.prefab)){CP(t,{ownerId:n.id,ownerName:n.displayName??n.id,prefabAssetId:n.id,path:`assets.${n.id}.prefab.overrides`,overrides:n.prefab.overrides});for(let o of n.prefab.nodes??[])CP(t,{ownerId:`${n.id}:${o.id}`,ownerName:`${n.displayName??n.id} / ${o.name??o.id}`,prefabAssetId:n.id,prefabNodeId:o.id,path:`assets.${n.id}.prefab.nodes.${o.id}.overrides`,overrides:o.overrides})}return t}function CP(e,t){let r=Im(t.overrides?.materialBinding);r&&e.push({kind:"root",scope:"prefab",gameObjectId:t.ownerId,gameObjectName:t.ownerName,materialAssetId:r,bindingPath:`${t.path}.materialBinding.materialAssetId`,label:t.ownerName,prefabAssetId:t.prefabAssetId,...t.prefabNodeId?{prefabNodeId:t.prefabNodeId}:{}});for(let[n,o]of Object.entries(t.overrides?.materialSlotBindings??{})){let a=Im(o);a&&e.push({kind:"slot",scope:"prefab",gameObjectId:t.ownerId,gameObjectName:t.ownerName,materialAssetId:a,bindingPath:`${t.path}.materialSlotBindings.${n}.materialAssetId`,label:`${t.ownerName} / ${n}`,slotId:n,ownerNodePath:n,prefabAssetId:t.prefabAssetId,...t.prefabNodeId?{prefabNodeId:t.prefabNodeId}:{}})}}function Tm(e){let t=[...new Set((e.scene.materialAssets??[]).map(s=>s.id?.trim()).filter(s=>!!s))],r=new Set(t),n=fi(e),o=n.filter(s=>!r.has(s.materialAssetId)),a=new Map;for(let s of o){let c=a.get(s.materialAssetId)??[];c.push(s),a.set(s.materialAssetId,c)}let i=[...a.entries()].map(([s,c])=>({kind:"missing-material-asset",materialAssetId:s,usages:c}));return{ok:i.length===0,materialAssetIds:t,references:n,missingMaterialAssetIds:i.map(s=>s.materialAssetId),missingReferences:o,issues:i}}function Ro(e,t,r){let n=new Map;for(let o of Fs(e,t,r))n.set(o.slotId,o);return[...n.values()].sort((o,a)=>(o.label??o.slotId).localeCompare(a.label??a.slotId)||o.slotId.localeCompare(a.slotId))}function LP(e,t){return Fs(e,t).length>0}function $r(e){return[...new Set(e.sourceSurfaces.map(t=>t.sourceMaterialIndex).filter(t=>Number.isInteger(t)))].sort((t,r)=>t-r)}function Kn(e){return e?.sourceSurfaces[0]?.ownerNodePath??null}function FP(e){return e.slotId}function Am(e){return`overrides.materialSlotBindings.${e.slotId}.materialAssetId`}function ub(e,t){return e.overrides?.materialSlotBindings?.[t.slotId]}function $P(e){let t=BP(e);if(!t)return;let r={},n=n$(t.materialAssetId);return n&&(r.materialAssetId=n),t.override&&typeof t.override=="object"&&!Array.isArray(t.override)&&(r.override=t.override),Object.keys(r).length>0?r:void 0}function Fs(e,t,r){let n=ct(t);if(!n)return[];let a=(r?.get(n.assetId)??e.assets.find(s=>s.id===n.assetId))?.metadata?.materialSlots;if(!Array.isArray(a))return[];let i=[];for(let s of a){let c=$s(s);c&&i.push(c)}return i}function $s(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e,r=typeof t.slotId=="string"&&t.slotId.trim()?t.slotId.trim():"",n=Array.isArray(t.sourceSurfaces)?t.sourceSurfaces:null,o=XF(n);if(!r||!n||o.length===0||o.length!==n.length)return null;let a=typeof t.label=="string"&&t.label.trim()?t.label.trim():o[0].ownerNodePath,i=typeof t.materialName=="string"&&t.materialName.trim()?t.materialName.trim():"",s=Array.isArray(t.materialNames)?t.materialNames.filter(d=>typeof d=="string"&&!!d.trim()).map(d=>d.trim()):void 0,c=ZF(t.sourceMaterialProfiles);return{slotId:r,label:a,sourceSurfaces:o,...i?{materialName:i}:{},...s&&s.length>0?{materialNames:s}:{},...c&&c.length>0?{sourceMaterialProfiles:c}:{}}}function XF(e){return Array.isArray(e)?e.flatMap(t=>{let r=BP(t);if(!r)return[];let n=MP(typeof r.ownerNodePath=="string"?r.ownerNodePath:""),o=Number.isInteger(r.meshIndex)&&r.meshIndex>=0?r.meshIndex:void 0,a=Number.isInteger(r.primitiveIndex)&&r.primitiveIndex>=0?r.primitiveIndex:void 0;if(!n||o==null||a==null)return[];let i=Number.isInteger(r.nodeIndex)&&r.nodeIndex>=0?r.nodeIndex:void 0,s=Array.isArray(r.nodeIndexPath)?r.nodeIndexPath.filter(m=>Number.isInteger(m)&&m>=0):void 0,c=Number.isInteger(r.sourceMaterialIndex)&&r.sourceMaterialIndex>=0?r.sourceMaterialIndex:void 0,d=typeof r.sourceMeshName=="string"&&r.sourceMeshName.trim()?r.sourceMeshName.trim():void 0,u=typeof r.triangleCount=="number"&&Number.isFinite(r.triangleCount)&&r.triangleCount>=0?r.triangleCount:void 0,l=QF(r.boundingBox);return[{ownerNodePath:n,...i!=null?{nodeIndex:i}:{},...s&&s.length>0?{nodeIndexPath:s}:{},meshIndex:o,primitiveIndex:a,...c!=null?{sourceMaterialIndex:c}:{},...d?{sourceMeshName:d}:{},...u!=null?{triangleCount:u}:{},...l?{boundingBox:l}:{}}]}):[]}function QF(e){if(!e||typeof e!="object"||Array.isArray(e))return;let t=e,r=wP(t.min),n=wP(t.max);if(!(!r&&!n))return{...r?{min:r}:{},...n?{max:n}:{}}}function wP(e){if(!Array.isArray(e)||e.length<3)return null;let[t,r,n]=e;return typeof t=="number"&&Number.isFinite(t)&&typeof r=="number"&&Number.isFinite(r)&&typeof n=="number"&&Number.isFinite(n)?[t,r,n]:null}function ZF(e){if(!Array.isArray(e))return;let t=e.map(e$).filter(r=>!!r);return t.length>0?t:void 0}function e$(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e;if(!Number.isInteger(t.sourceMaterialIndex))return null;let r=typeof t.materialName=="string"&&t.materialName.trim()?t.materialName.trim():"",n=t.profile&&typeof t.profile=="object"&&!Array.isArray(t.profile)?t.profile:void 0,o=t$(t.textureHints);return{sourceMaterialIndex:t.sourceMaterialIndex,...r?{materialName:r}:{},...n?{profile:n}:{},...o&&o.length>0?{textureHints:o}:{}}}function t$(e){if(!Array.isArray(e))return;let t=e.map(r$).filter(r=>!!r);return t.length>0?t:void 0}function r$(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e,r=typeof t.profilePath=="string"&&t.profilePath.trim()?t.profilePath.trim():"",n=typeof t.reason=="string"&&t.reason.trim()?t.reason.trim():"";return!r||!n?null:{profilePath:r,reason:n,...Number.isInteger(t.textureIndex)?{textureIndex:t.textureIndex}:{},...Number.isInteger(t.imageIndex)?{imageIndex:t.imageIndex}:{},...Number.isInteger(t.bufferView)?{bufferView:t.bufferView}:{},...typeof t.mimeType=="string"&&t.mimeType.trim()?{mimeType:t.mimeType.trim()}:{},...typeof t.uri=="string"&&t.uri.trim()?{uri:t.uri.trim()}:{}}}function BP(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function n$(e){return typeof e=="string"&&e.trim()?e.trim():null}function o$(e){return e.name?.trim()||e.id}function Im(e){return typeof e?.materialAssetId=="string"?e.materialAssetId.trim():""}function a$(e,t){return e?.label?.trim()||Kn(e)?.trim()||e?.slotId?.trim()||t}var Em=class{constructor(t){this.byMaterialId=new Map;this.byOwnerId=new Map;for(let r of fi(t)){let n=this.byMaterialId.get(r.materialAssetId)??[];n.push(r),this.byMaterialId.set(r.materialAssetId,n);let o=this.byOwnerId.get(r.gameObjectId)??[];o.push(r),this.byOwnerId.set(r.gameObjectId,o)}}forMaterial(t){return this.byMaterialId.get(t.trim())??[]}forOwner(t){return this.byOwnerId.get(t)??[]}},vP=new WeakMap;function i$(e){let t=vP.get(e);return t||(t=new Em(e),vP.set(e,t)),t}function mb(e){return e?.system?.preset}function _P(e,t){let r=mb(e);return r==="default-pbr"?t.defaultMaterial:r==="default-standard"?t.defaultStandardMaterial:e.name||e.id}function kP(e,t){let r=mb(e);return r==="default-pbr"?t.defaultMaterialMeta:r==="default-standard"?t.defaultStandardMaterialMeta:t.formatMaterialMeta(e.id)}function s$(e,t){let r=e.currentAsset??null,n=!!r&&!e.currentValue,o=r&&!n?jP(e.document,r.id,e.ownershipText,t):null,a=r?kP(r,e.displayText):e.currentValue?e.pickerText.summaryMissingAsset:e.pickerText.summaryInherit,i=o?NP(a,o):a;return{pickerKind:"material",pickerTitle:e.pickerText.materialPickerTitle,pickerTrigger:"preview",placeholder:e.currentValue?e.pickerText.summaryMissingAsset:e.pickerText.inheritNone,...r?{currentMaterialAssetId:r.id,currentMaterialShaderId:r.shaderId,...r.definitionVersion!=null?{currentMaterialDefinitionVersion:r.definitionVersion}:{}}:{},currentLabel:r?_P(r,e.displayText):e.currentValue?e.currentValue:e.pickerText.inheritNone,currentMeta:i,...o?.usageLabel?{currentUsageLabel:o.usageLabel}:{},...o?.editImpactLabel?{currentEditImpactLabel:o.editImpactLabel}:{},...o?{currentOwnership:o}:{},currentPreview:r?Un(r.properties,e.previewContext):void 0,candidates:[{label:e.pickerText.inheritNone,value:"",meta:e.pickerText.summaryInherit},...e.materialAssets.map(s=>{let c=jP(e.document,s.id,e.ownershipText,t);return{label:_P(s,e.displayText),value:s.id,meta:NP(kP(s,e.displayText),c),kind:"material",preview:Un(s.properties,e.previewContext),...c?.usageLabel?{usageLabel:c.usageLabel}:{},...c?{ownership:c}:{}}})]}}function jP(e,t,r,n){if(!e||!n)return null;let o=t.trim(),a=n.forMaterial(o),i=a.length;return{materialAssetId:o,usage:{count:i,items:a.map(s=>structuredClone(s))},usageCount:i,used:i>0,shared:i>1,...r?{usageLabel:r.formatUsageCount(i),editImpactLabel:r.formatEditImpact(i),duplicateImpactLabel:r.formatDuplicateImpact(i)}:{}}}function NP(e,t){return[e,t?.usageLabel].filter(Boolean).join(" \xB7 ")}function c$(e,t,r={}){return(e.scene.materialAssets??[]).map(n=>{let o=t.forMaterial(n.id);return{id:`material:${n.id}`,assetId:n.id,kind:"material",label:n.name||n.id,meta:OP(n.properties,n.id),preview:Un(n.properties,r),material:{id:n.id,name:n.name||n.id,shaderId:n.shaderId,...n.definitionVersion!=null?{definitionVersion:n.definitionVersion}:{},readonly:n.system?.readonly===!0||mb(n)!=null,usage:{count:o.length,items:o.map(a=>structuredClone(a))},properties:structuredClone(n.properties)},placeable:!1}})}var d$={createUsageIndex(e){return new Em(e)},getCachedUsageIndex:i$,createPickerControlOptions:s$,createBrowserAssetItems:c$},rr=d$;var gi=1;var fb="prefab.";function Od(e){let t=structuredClone(e),r={ordinaryObjects:0,prefabRoots:0,discardedFields:0},n=nr(t.scene);return n&&(zt(n,"shadowMapExperiment",r),Array.isArray(n.gameObjects)&&n.gameObjects.forEach(o=>l$(o,r))),Array.isArray(t.assets)&&t.assets.forEach(o=>u$(o,r)),{document:t,summary:r}}function bi(e){let t=nr(e);return!t||t.prefab!=null||t.transformType==="camera"||t.transformType==="light"||t.camera!=null||t.light!=null?!1:t.kind==="primitive"||nr(t.primitive)?!0:Array.isArray(t.components)&&t.components.some(r=>{let n=nr(r)?.type;return n==="ModelRenderer"||n==="ImageRenderer"})}function l$(e,t){let r=nr(e);if(!r)return;let n=nr(r.shadow);zt(r,"shadowMode",t),zt(r,"shadowMapExperiment",t),bi(r)?(r.shadow=VP(n),t.ordinaryObjects+=1):zt(r,"shadow",t)}function u$(e,t){let r=nr(e);if(!r)return;let n=nr(r.defaults);n&&(zt(n,"shadowMode",t),zt(n,"shadow",t),zt(n,"shadowMapExperiment",t));let o=nr(r.prefab);if(!o)return;let a=nr(o.defaults);a&&zt(a,"shadowMode",t),o.defaults={...a??{},shadow:VP(a?.shadow)},t.prefabRoots+=1;let i=nr(o.defaults);if(zt(i,"shadowMapExperiment",t),Array.isArray(o.nodes))for(let s of o.nodes){let c=nr(s);if(!c)continue;zt(c,"shadowMode",t),zt(c,"shadow",t),zt(c,"shadowMapExperiment",t);let d=nr(c.defaults);d&&(zt(d,"shadowMode",t),zt(d,"shadow",t),zt(d,"shadowMapExperiment",t))}}function VP(e){let t=nr(e);return{cast:t?.cast==="enabled"?"enabled":"none",receive:t?.receive==="enabled"?"enabled":"none"}}function zt(e,t,r){Object.prototype.hasOwnProperty.call(e,t)&&(delete e[t],r.discardedFields+=1)}function nr(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}var Ate=Symbol("unsupported-editor-scene-authored-clone-value");function ie(e){return e.components.find(g$)??null}function ct(e){return e.components.find(h$)??null}function la(e){return e.components.find(b$)??null}function br(e){return e?.type==="prefab"&&Qe(e.prefab?.sourceAssetId)!=null}function or(e,t){let r=e.assets.find(n=>n.id===t);return r&&br(r)?r:null}function Pm(e){return Qe(e?.prefab?.prefabId)!=null}function Dd(e){return Qe(e?.prefab?.sourceAssetId)}function yr(e){if(!e?.prefab)return null;let t=hb(e.prefab),r=Qe(e.prefab.rootNodeId);if(r&&t.some(o=>o.id===r))return r;let n=t.find(o=>o.kind==="root"&&!o.parentId);return n?n.id:null}function un(e){return e?.prefab?hb(e.prefab):[]}function Bs(e,t){let r=Qe(t);return r?un(e).find(n=>n.id===r)??null:null}function gb(e,t){let r=Qe(t);return un(e).filter(n=>{let o=Qe(n.parentId);return r?o===r:!o})}function UP(e){if(!br(e))return pb(e,!1,null,[{code:"prefab.invalidDefinition",severity:"error",message:`Asset "${e.id}" is not a valid prefab definition.`,assetId:e.id}]);let t=hb(e.prefab),r=yr(e);if(e.prefab.compositionVersion!==gi||t.length===0||!r)return pb(e,!1,null,[{code:"schema.unsupportedVersion",severity:"error",message:`Prefab asset "${e.id}" must use composition version ${gi} with an explicit root node.`,assetId:e.id}]);let n=m$(e);return pb(n,JSON.stringify(n.prefab)!==JSON.stringify(e.prefab))}function pb(e,t,r=null,n=[],o={}){return{ok:n.every(a=>a.severity!=="error"),changed:t,prefabAsset:e,...o.selectedNodeId?{selectedNodeId:o.selectedNodeId}:{},...o.createdNodeId?{createdNodeId:o.createdNodeId}:{},...o.deletedNodeIds?{deletedNodeIds:[...o.deletedNodeIds]}:{},...r?{node:structuredClone(r)}:{},diagnostics:n.map(a=>({...a}))}}function m$(e){let t=structuredClone(e),r=un(e);t.prefab=structuredClone(t.prefab),t.prefab.compositionVersion=gi,t.prefab.nodes=r;let n=yr({...e,prefab:{...e.prefab,nodes:r}});return n?t.prefab.rootNodeId=n:delete t.prefab.rootNodeId,t}function hb(e){if(!Array.isArray(e.nodes))return[];let t=[];for(let r of e.nodes){let n=p$(r);n&&!t.some(o=>o.id===n.id)&&t.push(n)}return structuredClone(t)}function p$(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e,r=Qe(t.id);return!r||!f$(t.kind)?null:{id:r,...Qe(t.guid)?{guid:Qe(t.guid)}:{},...Qe(t.name)?{name:Qe(t.name)}:{},...Qe(t.parentId)?{parentId:Qe(t.parentId)}:{},kind:t.kind,...t.transform?{transform:structuredClone(t.transform)}:{},...Qe(t.sourceAssetId)?{sourceAssetId:Qe(t.sourceAssetId)}:{},...Qe(t.sourceNodePath)?{sourceNodePath:Qe(t.sourceNodePath)}:{},...Qe(t.childPrefabId)?{childPrefabId:Qe(t.childPrefabId)}:{},...t.primitive?{primitive:structuredClone(t.primitive)}:{},...t.light?{light:structuredClone(t.light)}:{},...t.marker?{marker:structuredClone(t.marker)}:{},...t.defaults?{defaults:structuredClone(t.defaults)}:{},...t.overrides?{overrides:structuredClone(t.overrides)}:{},...t.metadata?{metadata:structuredClone(t.metadata)}:{}}}function f$(e){return e==="root"||e==="group"||e==="model"||e==="primitive"||e==="light"||e==="prefabInstance"||e==="marker"||e==="collision"}function HP(e){let t=Dd(e.prefabAsset);if(!t)throw new Error(`Prefab asset "${e.prefabAsset.id}" does not define a source asset.`);let r=e.prefabAsset.prefab?.defaults;return{id:e.id,...e.guid?{guid:e.guid}:{},name:e.name??e.prefabAsset.displayName??e.prefabAsset.id,kind:"instance",...e.parentId?{parentId:e.parentId}:{},active:e.active??r?.active??!0,prefab:{prefabId:e.prefabAsset.id,...e.prefabAsset.guid?{prefabGuid:e.prefabAsset.guid}:{},sourceAssetId:t},...e.metadata?{metadata:{...e.metadata}}:{},...e.overrides!==void 0?{overrides:e.overrides}:{},components:[e.transform,{type:"ModelRenderer",assetId:t}]}}function KP(e){if(!e.startsWith(fb))return null;let t=e.slice(fb.length);return ym(t)?t:null}function bb(e){return KP(e)?.endsWith(".materialAssetId")===!0}function WP(e){return e.startsWith(fb)&&e.endsWith(".materialAssetId")&&bb(e)}function qP(e,t){if(t.slotId)return $P(e.prefab?.overrides?.materialSlotBindings?.[t.slotId])}function Rd(e,t,r){let n=KP(t);if(!n||!br(e))return e;let o=S$(n);if(!o)return e;let a=structuredClone(e);a.prefab=structuredClone(a.prefab??e.prefab),E$(a.prefab,o,r);let i=ZP(a.prefab?.overrides);return i?a.prefab.overrides=i:delete a.prefab.overrides,JSON.stringify(a)===JSON.stringify(e)?e:a}function YP(e,t){let r=Qe(e?.materialAssetId),n=Qe(t?.materialAssetId),o=Cs(e?.override,t?.override);return Sb({...n??r?{materialAssetId:n??r}:{},...hi(o)?{override:o}:{}})}function xm(e,t){let r={},n=YP(e?.materialBinding,t?.materialBinding);n&&(r.materialBinding=n);let o=A$(e?.materialSlotBindings,t?.materialSlotBindings);return o&&(r.materialSlotBindings=o),hi(r)?r:void 0}function Mm(e,t){let r=yi(e,t);if(!(!r.gameObject||!r.prefab))return xm(r.definition?.prefab?.overrides,P$(r.gameObject.overrides))}function yi(e,t){let r=typeof t=="string"?y$(e,t):t,n=typeof t=="string"?t:t.id,o=[],a=Pm(r)?r.prefab:null;if(!r||!a)return o.push({code:"not-prefab-instance",severity:"info",message:r?`GameObject "${r.id}" is not a prefab instance.`:`GameObject "${n}" was not found.`}),{gameObject:r,prefab:null,definition:null,sourceAsset:null,diagnostics:o};let i=e.assets.find(d=>d.id===a.prefabId&&br(d));i||o.push({code:"missing-prefab-definition",severity:"error",message:`Prefab definition "${a.prefabId}" was not found.`,prefabId:a.prefabId});let s=Dd(i)??Qe(a.sourceAssetId);i&&a.sourceAssetId&&s&&a.sourceAssetId!==s&&o.push({code:"source-asset-mismatch",severity:"warning",message:`Prefab instance source "${a.sourceAssetId}" does not match definition source "${s}".`,prefabId:a.prefabId,expectedSourceAssetId:s,actualSourceAssetId:a.sourceAssetId});let c=s?e.assets.find(d=>d.id===s):void 0;if(s&&!c&&o.push({code:"missing-source-asset",severity:"error",message:`Prefab source asset "${s}" was not found.`,prefabId:a.prefabId,sourceAssetId:s}),s){let d=e.assets.filter(u=>br(u)&&Dd(u)===s).map(u=>u.id);d.length>1&&o.push({code:"duplicate-source-prefab",severity:"info",message:`Source asset "${s}" is referenced by ${d.length} prefab definitions.`,prefabId:a.prefabId,sourceAssetId:s})}return{gameObject:r,prefab:a,definition:i??null,sourceAsset:c??null,diagnostics:o}}function We(e){return e.kind==="group"||e.kind==="instance"||e.kind==="transform"||e.kind==="primitive"?e.kind:Pm(e)?"instance":e.primitive?"primitive":ct(e)?"instance":la(e)||e.transformType?"transform":"group"}function JP(e){let t=e.rendering&&typeof e.rendering=="object"&&!Array.isArray(e.rendering)?e.rendering:void 0,r=yb(t?.renderingGroupId),n=QP(t?.alphaIndex),o={};return r!=null&&(o.renderingGroupId=r),n!=null&&(o.alphaIndex=n),Object.keys(o).length>0?o:void 0}function yb(e){return e===0||e===1||e===2||e===3?e:null}function XP(e){return QP(e)}function g$(e){return e.type==="Transform"}function h$(e){return e.type==="ModelRenderer"}function b$(e){return e.type==="ImageRenderer"}function QP(e){return typeof e=="number"&&Number.isFinite(e)?e:null}function Qe(e){return typeof e=="string"&&e.trim().length>0?e.trim():null}function y$(e,t){return e.scene.gameObjects.find(r=>r.id===t)??null}function S$(e){if(e==="overrides.materialBinding.materialAssetId")return["overrides","materialBinding","materialAssetId"];let t="overrides.materialBinding.override.";if(e.startsWith(t)){let o=e.slice(t.length);return zP(["overrides","materialBinding","override"],o)}let r=Vn(e,"materialAssetId");if(r)return["overrides","materialSlotBindings",r,"materialAssetId"];let n=Vn(e,"override");if(n){let o=I$(e);return o?zP(["overrides","materialSlotBindings",n,"override"],o):null}return null}function I$(e){let t=".override.",r=e.lastIndexOf(t);if(r<0)return null;let n=e.slice(r+t.length);return n||null}function zP(e,t){let r=t.split(".").filter(Boolean);return r.length===0||r.some(ex)?null:[...e,...r]}function E$(e,t,r){if(t.some(ex))return;let n=e;for(let a of t.slice(0,-1)){let i=n[a];(!i||typeof i!="object"||Array.isArray(i))&&(n[a]={}),n=n[a]}let o=t[t.length-1];o&&(r==null?delete n[o]:n[o]=structuredClone(r))}function ZP(e){if(!e||typeof e!="object"||Array.isArray(e))return;let t=e,r={},n=Sb(t.materialBinding);n&&(r.materialBinding=n);let o=T$(t.materialSlotBindings);return o&&(r.materialSlotBindings=o),hi(r)?r:void 0}function Sb(e){if(!e||typeof e!="object"||Array.isArray(e))return;let t=e,r=Qe(t.materialAssetId),n=Cs(t.override),o={...r?{materialAssetId:r}:{},...hi(n)?{override:n}:{}};return hi(o)?o:void 0}function T$(e){if(!e||typeof e!="object"||Array.isArray(e))return;let t={};for(let[r,n]of Object.entries(e)){let o=Qe(r);if(!o)continue;let a=Sb(n);a&&(t[o]=a)}return hi(t)?t:void 0}function A$(e,t){let r=new Set([...Object.keys(e??{}),...Object.keys(t??{})]),n={};for(let o of r){let a=YP(e?.[o],t?.[o]);a&&(n[o]=a)}return hi(n)?n:void 0}function P$(e){return ZP(e)}function hi(e){return!!e&&typeof e=="object"&&!Array.isArray(e)&&Object.keys(e).length>0}function ex(e){return e==="__proto__"||e==="prototype"||e==="constructor"}var x$=new Set(["id","guid","name","parentId","kind","transform","marker","metadata"]);function tx(e,t,r){if(e.kind!=="marker"){Object.prototype.hasOwnProperty.call(e,"marker")&&pe("schema.invalidValue",`${r}.marker`);return}for(let s of Object.keys(e))x$.has(s)||pe("schema.invalidValue",`${r}.${s}`);Cd(e.parentId)||pe("schema.invalidReference",`${r}.parentId`),R$(e.transform,`${r}.transform`),M$(e.marker,`${r}.marker`);let n=Cd(e.id),o=e.marker,a=D$(o,`${r}.marker`),i=a[0]??null;for(let s of a){s.target.id===n&&pe("schema.invalidReference",`${s.path}.id`),i&&(s.target.kind!==i.target.kind||s.target.id!==i.target.id)&&pe("schema.invalidReference",s.path);let c=t.get(s.target.id);c&&(s.target.kind==="marker"&&c.kind!=="marker"&&pe("schema.invalidReference",`${s.path}.kind`),s.target.kind==="scene-object"&&c.kind==="marker"&&pe("schema.invalidReference",`${s.path}.kind`))}}function M$(e,t){let r=ma(e);r||pe("schema.invalidType",t),mn(r,["schemaVersion","type","kind","tags","note","color","target","semanticFrame","geometry","metadata"],t),r.schemaVersion!==1&&pe("schema.unsupportedVersion",`${t}.schemaVersion`),Cd(r.type)||pe("schema.invalidValue",`${t}.type`),r.kind!==void 0&&!Cd(r.kind)&&pe("schema.invalidValue",`${t}.kind`),r.tags!==void 0&&v$(r.tags,`${t}.tags`),r.note!==void 0&&typeof r.note!="string"&&pe("schema.invalidType",`${t}.note`),r.color!==void 0&&w$(r.color,`${t}.color`),r.target!==void 0&&Ib(r.target,`${t}.target`),r.semanticFrame!==void 0&&C$(r.semanticFrame,`${t}.semanticFrame`),O$(r.geometry,`${t}.geometry`),r.metadata!==void 0&&_$(r.metadata,`${t}.metadata`)}function D$(e,t){let r=[];return e.target&&r.push({target:e.target,path:`${t}.target`}),e.geometry.kind==="point"&&e.geometry.target&&r.push({target:e.geometry.target,path:`${t}.geometry.target`}),e.geometry.kind==="object-bounds"&&r.push({target:e.geometry.target,path:`${t}.geometry.target`}),r}function O$(e,t){let r=ma(e);if(r||pe("schema.invalidType",t),r.kind==="box"){mn(r,["kind"],t);return}if(r.kind==="point"){mn(r,["kind","coordinateSpace","position","offset","target"],t),r.coordinateSpace!==void 0&&r.coordinateSpace!=="world"&&r.coordinateSpace!=="local"&&pe("schema.invalidValue",`${t}.coordinateSpace`),r.position!==void 0&&ua(r.position,`${t}.position`),r.offset!==void 0&&ua(r.offset,`${t}.offset`),r.target!==void 0&&Ib(r.target,`${t}.target`);return}if(r.kind==="object-bounds"){mn(r,["kind","target"],t),Ib(r.target,`${t}.target`);return}if(r.kind==="polyhedron"){mn(r,["kind","coordinateSpace","vertices","faces"],t),r.coordinateSpace!==void 0&&r.coordinateSpace!=="world"&&pe("schema.invalidValue",`${t}.coordinateSpace`),Array.isArray(r.vertices)||pe("schema.invalidType",`${t}.vertices`),r.vertices.forEach((n,o)=>ua(n,`${t}.vertices[${o}]`)),r.faces!==void 0&&(Array.isArray(r.faces)||pe("schema.invalidType",`${t}.faces`),r.faces.forEach((n,o)=>{Array.isArray(n)||pe("schema.invalidType",`${t}.faces[${o}]`),n.forEach((a,i)=>{(!Number.isInteger(a)||a<0)&&pe("schema.invalidValue",`${t}.faces[${o}][${i}]`)})}));return}pe("schema.invalidValue",`${t}.kind`)}function Ib(e,t){let r=ma(e);r||pe("schema.invalidType",t),mn(r,["kind","id","label"],t),r.kind!=="marker"&&r.kind!=="scene-object"&&pe("schema.invalidValue",`${t}.kind`),Cd(r.id)||pe("schema.invalidValue",`${t}.id`),r.label!==void 0&&typeof r.label!="string"&&pe("schema.invalidType",`${t}.label`)}function R$(e,t){let r=ma(e);if(r||pe("schema.invalidType",t),r.type!=="Transform"&&pe("schema.invalidValue",`${t}.type`),r.mode==="matrix"){mn(r,["type","mode","matrix"],t),(!Array.isArray(r.matrix)||r.matrix.length!==16)&&pe("schema.invalidType",`${t}.matrix`),r.matrix.forEach((n,o)=>Dm(n,`${t}.matrix[${o}]`));return}mn(r,["type","mode","position","rotation","scale"],t),r.mode!==void 0&&r.mode!=="trs"&&pe("schema.invalidValue",`${t}.mode`),ua(r.position,`${t}.position`),ua(r.rotation,`${t}.rotation`),r.scale!==void 0&&ua(r.scale,`${t}.scale`)}function C$(e,t){let r=ma(e);r||pe("schema.invalidType",t),mn(r,["origin","forward","right","up","label","description"],t),ua(r.origin,`${t}.origin`);for(let n of["forward","right","up"])r[n]!==void 0&&ua(r[n],`${t}.${n}`);for(let n of["label","description"])r[n]!==void 0&&typeof r[n]!="string"&&pe("schema.invalidType",`${t}.${n}`)}function w$(e,t){let r=ma(e);r||pe("schema.invalidType",t),mn(r,["r","g","b"],t);for(let n of["r","g","b"])Dm(r[n],`${t}.${n}`),(r[n]<0||r[n]>1)&&pe("schema.invalidValue",`${t}.${n}`)}function ua(e,t){let r=ma(e);r||pe("schema.invalidType",t),mn(r,["x","y","z"],t);for(let n of["x","y","z"])Dm(r[n],`${t}.${n}`)}function v$(e,t){Array.isArray(e)||pe("schema.invalidType",t),e.forEach((r,n)=>{typeof r!="string"&&pe("schema.invalidType",`${t}[${n}]`)})}function _$(e,t){let r=ma(e);r||pe("schema.invalidType",t),Eb(r,t,new Set)}function Eb(e,t,r){if(e===null||typeof e=="string"||typeof e=="boolean")return;if(typeof e=="number"){Dm(e,t);return}(!e||typeof e!="object")&&pe("schema.invalidType",t),r.has(e)&&pe("schema.invalidValue",t);let n=Object.getPrototypeOf(e);Array.isArray(e)?n!==Array.prototype&&pe("schema.invalidType",t):n!==Object.prototype&&n!==null&&pe("schema.invalidType",t),r.add(e);try{if(Array.isArray(e))e.forEach((o,a)=>Eb(o,`${t}[${a}]`,r));else for(let[o,a]of Object.entries(e))Eb(a,`${t}.${o}`,r)}finally{r.delete(e)}}function mn(e,t,r){let n=new Set(t);for(let o of Object.keys(e))n.has(o)||pe("schema.invalidValue",`${r}.${o}`)}function Dm(e,t){(typeof e!="number"||!Number.isFinite(e))&&pe("schema.invalidValue",t)}function ma(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function Cd(e){return typeof e=="string"&&e.trim()?e.trim():null}function pe(e,t){throw new Error(`${e}: ${t}`)}function zs(e,t){return t===e.rootNodeId?e.instanceId:`${e.instanceId}:${k$(t)}`}function k$(e){return encodeURIComponent(e)}function Tb(e,t){return{...structuredClone(e),id:zs(t,e.id)}}function wd(e,t){let r=structuredClone(e);return r.target&&(r.target=Tb(r.target,t)),r.geometry.kind==="point"&&r.geometry.target&&(r.geometry.target=Tb(r.geometry.target,t)),r.geometry.kind==="object-bounds"&&(r.geometry.target=Tb(r.geometry.target,t)),r}function Pe(e,t){if(rx(e))try{return e[t]}catch{return}}function dt(e,t){let r=Pe(e,t);return typeof r=="string"&&r.trim()?r:null}function Ze(e,t){let r=Pe(e,t);return typeof r=="number"&&Number.isFinite(r)?r:null}function Lt(e,t){let r=Pe(e,t);return typeof r=="boolean"?r:null}function Vt(e,t,r=[]){let n=Pe(e,t);if(typeof n=="function")try{return n.apply(e,r)}catch{return}}function Wn(e){if(!rx(e))return null;let t=Vt(e,"getClassName");if(typeof t=="string"&&t.trim())return t;let r=Pe(e,"constructor"),n=r&&typeof r=="function"?r.name:"";return n&&n!=="Object"?n:null}function Si(e){let t=Wn(e),r=dt(e,"name");return t&&r?`${t} \xB7 ${r}`:t??r}function rx(e){return!!e&&(typeof e=="object"||typeof e=="function")}function Om(e,t=new WeakSet,r=0){if(e==null||typeof e=="string"||typeof e=="boolean")return e;if(typeof e=="number")return Number.isFinite(e)?j$(e):"[NonFiniteNumber]";if(typeof e=="bigint")return String(e);if(typeof e=="function")return`[Function ${e.name||"anonymous"}]`;if(typeof e=="symbol"||typeof e!="object")return String(e);if(t.has(e))return"[Circular]";if(r>6)return"[MaxDepth]";if(t.add(e),Array.isArray(e))return e.map(a=>Om(a,t,r+1));let n=e,o={};for(let a of Object.keys(n).sort())o[a]=Om(Pe(n,a),t,r+1);return o}function j$(e){return Math.round(e*1e6)/1e6}function pa(e){let t=e.properties.filter(r=>!!r).map((r,n)=>r.order==null?{...r,order:n}:r);return t.length===0&&e.omitWhenEmpty!==!1?null:{id:e.id,title:e.title,order:e.order,placement:"body",summary:e.summary,persistence:e.persistence??(e.runtimeOnly?"runtime":"readonly"),runtimeOnly:e.runtimeOnly,effect:e.effect??(e.runtimeOnly?"runtime":void 0),disabledReason:e.disabledReason,collapsedByDefault:e.collapsedByDefault,tags:e.tags,properties:t}}function le(e){if(!N$(e.value))return null;let t=Om(e.value);return{path:e.path,label:e.label,valueType:e.valueType??G$(t),control:"readonly",value:t,readOnly:!0,persistence:e.persistence??"readonly",commitMode:"blur",order:e.order,tags:F$(e.source,e.tags),tooltip:e.tooltip,effect:e.effect??L$(e.source,e.persistence),disabledReason:e.disabledReason}}function Ab(e,t){let r=le(t);r&&e.push(r)}function Vs(e){let t=Object.fromEntries(Object.entries(e.params).filter(r=>typeof r[1]=="string"&&r[1].length>0));return{path:e.path,label:e.label,valueType:"string",control:"custom",customControl:"inspector-action-button",controlOptions:{actionId:e.actionId,label:e.buttonLabel??e.label,icon:e.icon,params:t,...e.disabled?{disabled:!0}:{},...e.disabledReason?{disabledReason:e.disabledReason}:{}},value:e.actionId,readOnly:!1,persistence:"readonly",commitMode:"immediate",order:e.order,tooltip:e.disabledReason??e.tooltip,effect:e.effect,disabledReason:e.disabled?e.disabledReason:void 0}}function Pb(e){let t=Ii(e.value);if(!t)return[];let r=e.order??0;return["x","y","z"].map((n,o)=>le({path:`${e.basePath}.${n}`,label:`${e.label}.${n}`,value:t[n],order:r+o,persistence:e.persistence,source:e.source,tags:e.tags,effect:e.effect,disabledReason:e.disabledReason,valueType:"number"})).filter(n=>!!n)}function Ii(e){if(!e||typeof e!="object")return null;let t=Ze(e,"x"),r=Ze(e,"y"),n=Ze(e,"z");return t==null||r==null||n==null?null:{x:t,y:r,z:n}}function N$(e){return e!=null&&!(typeof e=="number"&&!Number.isFinite(e))}function G$(e){return typeof e=="string"?"string":typeof e=="number"?"number":typeof e=="boolean"?"boolean":e&&typeof e=="object"?"object":"unknown"}function L$(e,t){if(t==="runtime"||e==="Runtime")return"runtime";if(e==="Derived")return"derived"}function F$(e,t){let r=[...e?[e]:[],...t??[]];return r.length>0?[...new Set(r)]:void 0}function vd(e){let t=e.projectedRoot??e.root??null,r=ox(t),n=r.find(o=>!!Pe(o,"material"))??r[0]??null;return{root:t,projectionNode:e.projectionNode??null,childNodes:ax(t),meshes:r,primaryMesh:n,material:$$(t)}}function Rm(e){let t=Vt(e,"getHierarchyBoundingVectors"),r=Ii(Pe(t,"min")),n=Ii(Pe(t,"max"));if(r&&n)return nx(r,n);let o=Vt(e,"getBoundingInfo"),a=Pe(o,"boundingBox"),i=Ii(Pe(a,"minimumWorld")),s=Ii(Pe(a,"maximumWorld"));return i&&s?nx(i,s):null}function ox(e){let t=Vt(e,"getChildMeshes",[!1]),r=Array.isArray(t)?[...t]:[];return ix(e)&&r.unshift(e),[...new Set(r)]}function ax(e){let t=Vt(e,"getChildren");return Array.isArray(t)?t:[]}function ix(e){return!!e&&(!!Pe(e,"material")||typeof Pe(e,"getTotalVertices")=="function"||typeof Pe(e,"getBoundingInfo")=="function")}function Cm(e,t){let r=0,n=0;for(let o of e){let a=Vt(o,t);typeof a!="number"||!Number.isFinite(a)||(r+=a,n+=1)}return n>0?r:"not available"}function Us(e,t){let r=Pe(e,t);return Array.isArray(r)?r.length:0}function wm(e,t){let r=Vt(e,t);return Array.isArray(r)?r.length:"not available"}function xb(e){let t=Vt(e,"isEnabled");return typeof t=="boolean"?t:null}function _d(e,t){let r=Ze(e,t);if(r!=null)return r;let n=Vt(e,"getParam",[t]);return typeof n=="number"&&Number.isFinite(n)?n:null}function nx(e,t){return{min:e,max:t,center:{x:(e.x+t.x)/2,y:(e.y+t.y)/2,z:(e.z+t.z)/2},size:{x:t.x-e.x,y:t.y-e.y,z:t.z-e.z}}}function $$(e){let t=Pe(e,"material");if(t)return t;let r=Vt(e,"getChildMeshes",[!1]);if(Array.isArray(r)){let n=r.find(o=>!!Pe(o,"material"));if(n)return Pe(n,"material")}return null}var _m={x:-.3,y:-1,z:-.2},sx=-180,cx=180,kd=-90,jd=90;function Nd(e,t=_m){let r=e&&V$(e)?e:t,n=Math.hypot(r.x,r.y,r.z);if(!Number.isFinite(n)||n<=1e-6){let o=Math.hypot(t.x,t.y,t.z)||1;return{x:t.x/o,y:t.y/o,z:t.z/o}}return{x:r.x/n,y:r.y/n,z:r.z/n}}function Db(e,t){let r=fa(jm(e)),n=fa(fx(t,kd,jd)),o=Math.cos(n);return{x:Mb(o*Math.cos(r)),y:Mb(-Math.sin(n)),z:Mb(o*Math.sin(r))}}function Ob(e){if(!Nm(e.light))return null;let t=ie(e),r=t&&"rotation"in t?t.rotation:void 0,n=mx({direction:e.light.direction,rotation:r}),o=Db(n.horizontalAngleDeg,n.elevationAngleDeg);return{horizontalAngleDeg:n.horizontalAngleDeg,elevationAngleDeg:n.elevationAngleDeg,rotation:{x:fa(n.elevationAngleDeg),y:fa(n.horizontalAngleDeg),z:Hs(r?.z)?r.z:0},direction:o,source:r?"transform.rotation":"light.direction"}}function dx(e,t){if(!Nm(e.light))return e;let r=Ob(e);if(!r)return e;let n=Hs(t.horizontalAngleDeg)?t.horizontalAngleDeg:r.horizontalAngleDeg,o=Hs(t.elevationAngleDeg)?t.elevationAngleDeg:r.elevationAngleDeg,a=Db(n,o),i={...r.rotation,x:fa(o),y:fa(n)};return{...e,light:{...e.light,direction:a},components:e.components.map(s=>s===ie(e)&&"rotation"in s?{...s,rotation:i}:s)}}function B$(e,t=_m){let{horizontalAngleDeg:r,elevationAngleDeg:n}=mx({direction:t,rotation:e});return Db(r,n)}function z$(e,t){let r=ux(e);return{x:fa(r.elevationAngleDeg),y:fa(r.horizontalAngleDeg),z:Hs(t?.z)?t.z:0}}function Ks(e){if(!Nm(e.light))return e;let t=ie(e);if(!t||!("rotation"in t))return e;let r=B$(t.rotation,e.light.direction);return px(r,Nd(e.light.direction))?e:{...e,light:{...e.light,direction:r}}}function km(e){if(!Nm(e.light))return e;let t=ie(e);if(!t||!("rotation"in t))return e;let r=z$(e.light.direction,t.rotation);return px(r,t.rotation)?e:{...e,components:e.components.map(n=>n===t?{...t,rotation:r}:n)}}function lx(e){let t=Nd(e),r=Math.abs(t.y);return r<=1e-6?999:Math.min(999,Math.hypot(t.x,t.z)/r)}function jm(e){let t=((e+180)%360+360)%360-180;return t===-180?180:t}function V$(e){return typeof e.x=="number"&&Number.isFinite(e.x)&&typeof e.y=="number"&&Number.isFinite(e.y)&&typeof e.z=="number"&&Number.isFinite(e.z)}function Nm(e){return e?.type==="directional"}function ux(e){let t=Nd(e);return{horizontalAngleDeg:jm(vm(Math.atan2(t.z,t.x))),elevationAngleDeg:vm(Math.asin(fx(-t.y,-1,1)))}}function mx(e){let t=ux(e.direction);return{horizontalAngleDeg:Hs(e.rotation?.y)?vm(e.rotation.y):t.horizontalAngleDeg,elevationAngleDeg:Hs(e.rotation?.x)?vm(e.rotation.x):t.elevationAngleDeg}}function Hs(e){return typeof e=="number"&&Number.isFinite(e)}function px(e,t,r=1e-6){return Math.abs(e.x-t.x)<=r&&Math.abs(e.y-t.y)<=r&&Math.abs(e.z-t.z)<=r}function vm(e){return e*180/Math.PI}function fa(e){return e*Math.PI/180}function Mb(e){return Math.round(e*1e6)/1e6}function fx(e,t,r){return Math.min(r,Math.max(t,e))}var Ei="light.directionHorizontalAngleDeg",Ti="light.directionElevationAngleDeg";function Ws(e){return e===Ei||e===Ti}function gx(e,t){if(t==null||typeof t=="string"&&!t.trim())return null;let r=U$(t);return r==null?t:e===Ei?Math.round(jm(r)):e===Ti?Math.round(H$(r,kd,jd)):t}function U$(e){if(typeof e!="number"&&typeof e!="string"||typeof e=="string"&&!e.trim())return null;let t=typeof e=="number"?e:Number(e);return Number.isFinite(t)?t:null}function H$(e,t,r){return Math.min(r,Math.max(t,e))}function Ai(e){return t=>qs({...e,value:t})}function qs(e){let t=K$(e);if(t)return t;let r=ob(e.path,e.nodeKind);return r?e.value==null&&r.allowDelete===!1?{ok:!1,message:`Scene node field cannot be deleted: ${e.path}.`}:r.validate(e.value)?{ok:!0,value:e.value}:{ok:!1,message:`Invalid value for scene node field: ${e.path}.`}:{ok:!1,message:`Unsupported scene node field: ${e.path}.`}}function Pi(e,t){return/^overrides\.material\.(albedoTexture|normalTexture|metallicTexture)\.url$/.test(e)&&typeof t=="string"?hx(t):t}function Gm(e,t,r={}){if((r.isDirectionalLightAnglePath??bx)(e))return gx(e,t);if(e==="marker.type"&&typeof t=="string"||e==="marker.target.objectId"&&typeof t=="string")return t.trim();if(e==="marker.tags")return q$(t);if(e==="marker.note"&&typeof t=="string"){let n=t.trim();return n||null}return cb(e)&&typeof t=="string"?hx(t):Pi(e,t)}function Rb(e){return t=>W$(t,e)}function K$(e){for(let t of e.extraValidators??[]){let r=t({path:e.path,nodeKind:e.nodeKind,value:e.value,document:e.document});if(r)return r}return null}function W$(e,t){if(e.path==="camera.inspectorLanguage")return e.value==="zh"||e.value==="en"?{ok:!0,value:e.value}:{ok:!1,message:"Invalid value for scene node field: camera.inspectorLanguage."};if(e.path==="light.inspectorLanguage")return e.value==="zh"||e.value==="en"?{ok:!0,value:e.value}:{ok:!1,message:"Invalid value for scene node field: light.inspectorLanguage."};if((t.isDirectionalLightAnglePath??bx)(e.path))return typeof e.value=="number"&&Number.isFinite(e.value)?{ok:!0,value:e.value}:{ok:!1,message:`Invalid value for scene node field: ${e.path}.`};if(e.path==="metadata.artistMaterialInspectorLanguage")return e.value==="zh"||e.value==="en"?{ok:!0,value:e.value}:{ok:!1,message:`Invalid value for scene node field: ${e.path}.`};if(e.path==="instance.assetId"&&e.document&&typeof e.value=="string"&&!(e.document.assets??[]).some(r=>r.id===e.value))return{ok:!1,message:`Asset not found: ${e.value}.`};if(da(e.path)&&e.document&&typeof e.value=="string"&&e.value&&!t.hasMaterialAsset(e.document,e.value))return{ok:!1,message:`Material asset not found: ${e.value}.`};if(da(e.path))return e.value==null||typeof e.value=="string"&&e.value.trim().length>0?{ok:!0,value:e.value}:{ok:!1,message:`Invalid value for scene node field: ${e.path}.`};if(cb(e.path))return e.value==null||typeof e.value=="string"&&e.value.trim().length>0?{ok:!0,value:e.value}:{ok:!1,message:`Invalid value for scene node field: ${e.path}.`};if(e.path==="marker.target.objectId"){if(typeof e.value!="string")return{ok:!1,message:"Marker target must be a scene object id."};let r=e.value.trim();if(!r)return{ok:!0,value:""};let n=e.document?.scene?.gameObjects?.find(o=>o.id===r)??null;return n&&!t.isMarkerGameObject(n)?{ok:!0,value:r}:{ok:!1,message:`Marker target object not found: ${r}.`}}return null}function hx(e){let t=e.trim();return t||null}function q$(e){let r=(Array.isArray(e)?e:typeof e=="string"?e.split(","):[]).map(n=>typeof n=="string"?n.trim():"").filter((n,o,a)=>n.length>0&&a.indexOf(n)===o);return r.length>0?r:null}function bx(e){return e===Ei||e===Ti}function Gd(e){return{...e.property,readOnly:!1,persistence:"document",document:e.document??void 0,validate:Ai({path:e.property.path,nodeKind:e.nodeKind,document:e.document,extraValidators:e.extraValidators})}}function Br(e,t){return t==="scale"?e.scale??{x:1,y:1,z:1}:e[t]}function pn(e){return e*180/Math.PI}function qn(e){return e*Math.PI/180}function zr(e){return Math.round(e*1e6)/1e6}var yx={zh:{title:"\u6444\u50CF\u673A",summaryOrthographic:"ArcRotate \u6B63\u4EA4",summaryPerspective:"ArcRotate \u900F\u89C6",language:"\u8BED\u8A00",projection:"\u6295\u5F71\u6A21\u5F0F",projectionOrthographic:"\u6B63\u4EA4",projectionPerspective:"\u900F\u89C6",alpha:"Alpha",beta:"Beta",radius:"\u534A\u5F84",orthoSize:"\u6B63\u4EA4\u5C3A\u5BF8",fov:"\u89C6\u91CE\u89D2\u5EA6",targetOffset:"\u76EE\u6807\u504F\u79FB",nearClip:"\u8FD1\u88C1\u526A",farClip:"\u8FDC\u88C1\u526A",minBeta:"\u6700\u5C0F Beta",maxBeta:"\u6700\u5927 Beta",minRadius:"\u6700\u5C0F\u534A\u5F84",maxRadius:"\u6700\u5927\u534A\u5F84",inertia:"\u60EF\u6027",screenOffset:"\u5C4F\u5E55\u504F\u79FB",rawCamera:"\u539F\u59CB\u6444\u50CF\u673A"},en:{title:"Camera",summaryOrthographic:"ArcRotate Orthographic",summaryPerspective:"ArcRotate Perspective",language:"Language",projection:"Projection",projectionOrthographic:"Orthographic",projectionPerspective:"Perspective",alpha:"Alpha",beta:"Beta",radius:"Radius",orthoSize:"Ortho Size",fov:"FOV",targetOffset:"Target Offset",nearClip:"Near Clip",farClip:"Far Clip",minBeta:"Min Beta",maxBeta:"Max Beta",minRadius:"Min Radius",maxRadius:"Max Radius",inertia:"Inertia",screenOffset:"Screen Offset",rawCamera:"Raw Camera"}},Sx=[{label:"\u4E2D\u6587",value:"zh"},{label:"English",value:"en"}];function Cb(e){return yx[e]??yx.zh}function Y$(e){return[{label:e.projectionOrthographic,value:"orthographic"},{label:e.projectionPerspective,value:"perspective"}]}function Ix(e){let{camera:t,createDocumentInspectorProperty:r,nodeKind:n,rig:o}=e,a=o.inspectorLanguage??"zh",i=Cb(a),s=[],c=0;s.push(r(null,n,{path:"camera.inspectorLanguage",label:i.language,valueType:"enum",control:"enum",value:a,commitMode:"immediate",order:c,options:Sx,controlOptions:{variant:"segmented"}})),c+=1,s.push(r(null,n,{path:"camera.projection",label:i.projection,valueType:"enum",control:"enum",value:o.projection??"orthographic",commitMode:"immediate",order:c,options:Y$(i),controlOptions:{variant:"segmented"}})),c+=1,s.push(ar(n,r,{path:"camera.alpha",label:i.alpha,value:o.alpha,order:c,step:.01})),c+=1,s.push(ar(n,r,{path:"camera.beta",label:i.beta,value:o.beta,order:c,step:.01})),c+=1,s.push(ar(n,r,{path:"camera.radius",label:i.radius,value:o.radius,order:c,min:.001,step:.1})),c+=1,(o.projection??"orthographic")==="perspective"?s.push(ar(n,r,{path:"camera.fov",label:i.fov,value:zr(pn(o.fov??.85)),order:c,min:1,max:179,step:1,coerce:d=>typeof d=="number"&&Number.isFinite(d)?qn(d):d})):s.push(ar(n,r,{path:"camera.orthoSize",label:i.orthoSize,value:o.orthoSize??6,order:c,min:.001,step:.1})),c+=1;for(let d of["x","y","z"])s.push(ar(n,r,{path:`camera.targetOffset.${d}`,label:`${i.targetOffset} ${d.toUpperCase()}`,value:o.targetOffset?.[d]??0,order:c,step:.05})),c+=1;s.push(ar(n,r,{path:"camera.minZ",label:i.nearClip,value:o.minZ??1,order:c,min:.001,step:.1})),c+=1,s.push(ar(n,r,{path:"camera.maxZ",label:i.farClip,value:o.maxZ??1e4,order:c,min:.001,step:1})),c+=1,s.push(ar(n,r,{path:"camera.lowerBetaLimit",label:i.minBeta,value:o.lowerBetaLimit??o.beta,order:c,step:.01})),c+=1,s.push(ar(n,r,{path:"camera.upperBetaLimit",label:i.maxBeta,value:o.upperBetaLimit??o.beta,order:c,step:.01})),c+=1,s.push(ar(n,r,{path:"camera.lowerRadiusLimit",label:i.minRadius,value:o.lowerRadiusLimit??o.radius,order:c,min:.001,step:.1})),c+=1,s.push(ar(n,r,{path:"camera.upperRadiusLimit",label:i.maxRadius,value:o.upperRadiusLimit??o.radius,order:c,min:.001,step:.1})),c+=1,s.push(ar(n,r,{path:"camera.inertia",label:i.inertia,value:o.inertia??.9,order:c,min:0,max:1,step:.05})),c+=1;for(let d of["x","y"])s.push(ar(n,r,{path:`camera.targetScreenOffset.${d}`,label:`${i.screenOffset} ${d.toUpperCase()}`,value:o.targetScreenOffset?.[d]??0,order:c,step:.01})),c+=1;return Ab(s,{path:"camera.raw",label:i.rawCamera,value:t??"defaults",order:s.length,source:"Document",tags:["Raw"]}),s}function wb(e){let t=Cb(e.rig.inspectorLanguage??"zh");return{id:"camera",title:t.title,order:42,placement:"body",summary:e.rig.projection==="perspective"?t.summaryPerspective:t.summaryOrthographic,persistence:"document",collapsedByDefault:!1,properties:Ix(e)}}function ar(e,t,r){return t(null,e,{path:r.path,label:r.label,valueType:"number",control:"number",value:r.value,commitMode:"live",order:r.order,min:r.min,max:r.max,step:r.step??.05,coerce:r.coerce})}var Lm="scene.main",Fm="scene";function Yn(e){let t=e.meta?.authoringSource;return{sourceId:t?.sourceId||Lm,sourceType:t?.sourceType||Fm,revision:typeof t?.revision=="number"?t.revision:1}}function Ex(e){let t=Yn(e);return{...e,meta:{...e.meta,authoringSource:{sourceId:Lm,sourceType:Fm,revision:t.revision??1}}}}function Tx(e){let t=Yn(e);return{...e,meta:{...e.meta,authoringSource:{sourceId:Lm,sourceType:Fm,revision:(t.revision??0)+1}}}}function Ax(e,t){let r=Yn(e),n=J$(t),o=r.revision??null;if(!n)return{detected:!0,sourceId:r.sourceId,sourceType:r.sourceType,sourceRevision:o,generatedRevision:null,reason:"missing-generated-from"};let a=typeof n.revision=="number"?n.revision:null;return n.sourceId!==r.sourceId||n.sourceType!==r.sourceType?{detected:!0,sourceId:r.sourceId,sourceType:r.sourceType,sourceRevision:o,generatedRevision:a,reason:"source-mismatch"}:o!==a?{detected:!0,sourceId:r.sourceId,sourceType:r.sourceType,sourceRevision:o,generatedRevision:a,reason:"revision-mismatch"}:{detected:!1,sourceId:r.sourceId,sourceType:r.sourceType,sourceRevision:o,generatedRevision:a}}function J$(e){if(!e||typeof e!="object")return null;let t=e.meta;if(!t||typeof t!="object")return null;let r=t.generatedFrom;if(!r||typeof r!="object")return null;let n=r.sourceId,o=r.sourceType;return typeof n!="string"||typeof o!="string"?null:{sourceId:n,sourceType:o,revision:typeof r.revision=="number"?r.revision:void 0}}var X$="sun_light";function $m(e){let t=Q$(e);return t.shadows.planar.enabled?"planar":t.shadows.blob.enabled?"blob":t.shadows.staticProjected.enabled?"static":t.shadows.enabled?"dynamic":"none"}function Q$(e){return e&&typeof e=="object"&&"environment"in e&&"postProcess"in e&&"shadows"in e&&"renderingGroups"in e&&"shadowMeshes"in e?e:mt(e)}function Z$(e,t){let r=typeof t.prefab?.prefabId=="string"?t.prefab.prefabId:null,n=r?e.assets.find(a=>a.id===r)?.prefab?.defaults?.shadow:void 0,o=Tt(n??t.shadow);return{settings:o.shadow,diagnostics:o.diagnostics}}function eB(e){let t=new Map,r=e.casterId;for(let n of e.explicitReceiverIds??[]){let o=zm(e.document,n);!o||o.id===r||o.active===!1||t.set(o.id,{receiverId:o.id,source:"explicit",score:120,...vb(o,"explicit",120,["explicit receiver id"])})}for(let n of e.document.scene.gameObjects){if(n.id===r||n.active===!1)continue;Tt(n.shadow).shadow?.receive==="enabled"&&nB(t,{receiverId:n.id,source:"explicit",score:100,...vb(n,"explicit",100,["shadow.receive enabled"])})}return[...t.values()].sort((n,o)=>o.score-n.score||n.receiverId.localeCompare(o.receiverId))}function Bm(e){let t=e.caster?.id===e.casterId?e.caster:zm(e.document,e.casterId),r=[];if(!t)return{casterId:e.casterId,receiverIds:[],backend:"none",mode:"none",quality:e.fallbackQuality??"medium",params:ku(e.fallbackQuality??"medium"),diagnostics:[{code:"shadow.invalidTarget",severity:"error",message:`Shadow caster "${e.casterId}" was not found.`,casterId:e.casterId}]};let n=e.resolvedSettings!==void 0?(()=>{let p=Tt(e.resolvedSettings);return{settings:p.shadow,diagnostics:p.diagnostics}})():Z$(e.document,t);r.push(...n.diagnostics);let a=n.settings?.cast==="enabled"?Bu(n.settings,e.fallbackMode??"none"):"none",i=zu(n.settings,e.fallbackQuality??"medium"),s=ku(i,n.settings?.params),c=tB(a),d=oB(e.explicitReceiverIds),u=c==="none"?{candidates:[],diagnostics:[]}:d.length>0&&e.strictExplicitReceivers===!0?aB(e.document,t.id,d):{candidates:eB({document:e.document,casterId:t.id,explicitReceiverIds:d.length>0?d:void 0}),diagnostics:[]};r.push(...u.diagnostics);let l=u.candidates;c!=="none"&&l.length===0&&r.push({code:"shadow.receiverNotFound",severity:"warning",message:`No shadow receiver was found for caster "${t.id}".`,casterId:t.id});let m=c==="none"?null:rB(e.document,n.settings??void 0,e.defaultLightId);return m?.diagnostic&&r.push(m.diagnostic),{casterId:t.id,receiverIds:l.map(p=>p.receiverId),...m?.lightId?{lightId:m.lightId}:{},backend:c,mode:a,quality:i,params:s,diagnostics:r}}function tB(e){return e==="dynamic"?"dynamic-map":e==="static"?"static-baked":e==="blob"?"blob":e==="projected"?"projected":"none"}function rB(e,t,r){if(t?.light?.mode==="explicit"){let a=t?.light?.lightId;return a&&Px(e,a)?{lightId:a}:{diagnostic:{code:"shadow.lightNotFound",severity:"warning",message:a?`Explicit shadow light "${a}" was not found.`:"Shadow light mode is explicit, but no lightId was configured.",...a?{lightId:a}:{}}}}let n=r??X$;if(Px(e,n))return{lightId:n};let o=e.scene.gameObjects.find(a=>xx(a)&&a.active!==!1);return o?{lightId:o.id}:{diagnostic:{code:"shadow.lightNotFound",severity:"warning",message:"No directional shadow light was found."}}}function Px(e,t){let r=zm(e,t);return!!r&&r.active!==!1&&xx(r)}function xx(e){return We(e)==="transform"&&e.light?.type==="directional"}function nB(e,t){let r=e.get(t.receiverId);(!r||t.score>r.score)&&e.set(t.receiverId,t)}function oB(e){let t=new Set,r=[];for(let n of e??[]){let o=typeof n=="string"?n.trim():"";!o||t.has(o)||(t.add(o),r.push(o))}return r}function aB(e,t,r){let n=[],o=[];for(let a of r){let i=zm(e,a);if(!i){o.push({code:"shadow.receiverNotFound",severity:"warning",message:`Explicit shadow receiver "${a}" was not found.`,casterId:t,receiverId:a,details:{source:"explicit"}});continue}if(i.id===t){o.push({code:"shadow.receiverNotFound",severity:"warning",message:`Shadow caster "${t}" cannot be used as its own receiver.`,casterId:t,receiverId:a,details:{source:"explicit",reason:"self"}});continue}if(i.active===!1){o.push({code:"shadow.receiverNotFound",severity:"warning",message:`Explicit shadow receiver "${a}" is inactive.`,casterId:t,receiverId:a,details:{source:"explicit",reason:"inactive"}});continue}n.push({receiverId:i.id,source:"explicit",score:120,...vb(i,"explicit",120,["explicit receiver id"])})}return{candidates:n,diagnostics:o}}function vb(e,t,r,n){let o=Tt(e.shadow).shadow;return{active:e.active!==!1,visible:e.active!==!1,...o?.receive?{receive:o.receive}:{},suitability:{score:r,material:We(e)==="primitive"?"primitive":t,reasons:n}}}function zm(e,t){return e.scene.gameObjects.find(r=>r.id===t)??null}var iB="main_camera",sB="environment_light",cB="sun_light";function _b(e){return We(e)==="group"}function fn(e){return!!ie(e)}function gn(e){return We(e)==="transform"&&(e.transformType==="camera"||!!e.camera)}function Ys(e){return We(e)==="transform"&&(e.transformType==="light"||!!e.light)}function hn(e){return e.id===iB||e.id===sB||e.id===cB||gn(e)||Ys(e)}function kb(e,t){if(!t)return!1;let r=e.scene.gameObjects.find(n=>n.id===t);return!!r&&hn(r)}var ga="root",dB="go_",jb="GameObject";function ft(e){return e===ga}function qe(e){return ft(e.id)}function Gb(e){let t=new Set,r=!1,n=e.scene.gameObjects.map(o=>{let a=uB(o,t);return r=r||a!==o,a});return r?{...e,scene:{...e.scene,gameObjects:n}}:e}function kt(){let e=globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;return`${dB}${e}`}function Vr(e,t){let r=new Set(e),n=Vm(t)||"game_object";if(!r.has(n))return n;let o=2;for(;r.has(`${n}_${o}`);)o+=1;return`${n}_${o}`}function Mx(e,t=jb){return Nb(e)??Nb(t)??jb}function Ur(e,t,r={}){let n=Mx(t,r.fallbackName??jb),o=new Set(e.map(s=>Nb(s)).filter(s=>!!s));if(!r.alwaysAppendSuffix&&!o.has(n))return n;let a=1,i=`${n}_${a}`;for(;o.has(i);)a+=1,i=`${n}_${a}`;return i}function Nb(e){let t=String(e??"").trim();return t&&t.replace(/\s+/g,"_").replace(/_+/g,"_").replace(/^_+|_+$/g,"")||null}function Vm(e){return e.trim().toLowerCase().replace(/[^a-z0-9_]+/g,"_").replace(/^_+|_+$/g,"")||"asset"}function lB(e){return typeof e.guid=="string"&&e.guid.trim()?e.guid.trim():null}function uB(e,t){let r=lB(e);if(r&&!t.has(r))return t.add(r),r===e.guid?e:{...e,guid:r};let n=kt();for(;t.has(n);)n=kt();return t.add(n),{...e,guid:n}}var ha=dn();function Sr(e,t){if(ft(t))return dn();let r=he(e,t);if(!r)return null;let n=[],o=Lb(e),a=new Set,i=r;for(;i&&!a.has(i.id);)a.add(i.id),n.unshift(i),i=i.parentId?o.get(i.parentId):void 0;return SP(n.map(Jn))}function he(e,t){return e.scene.gameObjects.find(r=>r.id===t)??null}function Lb(e){return new Map(e.scene.gameObjects.map(t=>[t.id,t]))}function Co(e,t,r,n){let o=t?Sr(e,t):dn();return o?Gs(o,r,n):null}function Ld(e,t,r,n={}){let o=lm(n);return Co(e,t,r,{allowMatrixFallback:o.allowMatrixFallback})}function Jn(e){return qe(e)?dn():Xs(e)}function Fd(e,t={}){let r=e.scene.gameObjects.find(qe);if(!r)return e;let n=Xs(r),o=!!ie(r)&&!pB(n,ha),a=!1,i=e.scene.gameObjects.map(s=>{if(qe(s)){let l=Dx(s,t);return a=a||l!==s,l}if(!o||s.parentId!==ga||!ie(s))return s;let d=IP(n,Xs(s));if(!d)return s;let u=Fb(s,d);return a=!0,u});return a?{...e,scene:{...e.scene,gameObjects:i}}:e}function Dx(e,t={}){let r=!1,n=e.parentId!==void 0||t.normalizeRootActive===!0&&e.active!==!0,o=e.components.map(i=>{if(i.type!=="Transform")return i;r=!0;let s=i;return Hm(s)&&Js(s.position,ha.position)&&Js(s.rotation,ha.rotation)&&Js(Ox(s,"scale"),ha.scale)?i:(n=!0,Um())});if(r||(n=!0,o.unshift(Um())),!n)return e;let a={...e,...t.normalizeRootActive===!0?{active:!0}:{},components:o};return delete a.parentId,a}function Um(){return bn(ha)}function Xs(e){let t=ie(e);return t?jt(t)?dm(t.matrix)??dn():{position:{...t.position},rotation:{...t.rotation},scale:{...Ox(t,"scale")}}:dn()}function Fb(e,t){return{...e,components:e.components.map(r=>r.type!=="Transform"?r:wo(t)??r)}}function wo(e){let t=xi(e);return t?Lr(t)?{type:"Transform",mode:"matrix",matrix:t.matrix}:{type:"Transform",...t.mode==="trs"?{mode:"trs"}:{},position:{...t.position},rotation:{...t.rotation},scale:{...t.scale}}:null}function xi(e){return Lr(e)?dm(e.matrix):hP(e)}function bn(e){let t=wo(e);if(!t)throw new Error("Invalid matrix Transform component.");return t}function jt(e){return e.mode==="matrix"}function Hm(e){return e.mode!=="matrix"}function Ox(e,t){return mB(e)?t==="scale"?e.scale??{x:1,y:1,z:1}:e[t]:t==="scale"?{x:1,y:1,z:1}:{x:0,y:0,z:0}}function mB(e){return!!e.position&&!!e.rotation}function pB(e,t){return!ln(e)||!ln(t)?Td(Gr(e),Gr(t)):Js(e.position,t.position)&&Js(e.rotation,t.rotation)&&Js(e.scale,t.scale)}function Js(e,t){return Math.abs(e.x-t.x)<1e-6&&Math.abs(e.y-t.y)<1e-6&&Math.abs(e.z-t.z)<1e-6}function gt(e){return e.scene.gameObjects.find(t=>t.id===ga&&!!ie(t))?.id??e.scene.gameObjects.find(t=>!t.parentId&&!!ie(t))?.id}function Km(e,t){return ft(e)&&/^transform(?:\.(position|rotation|scale)(?:\.(x|y|z))?)?$/.test(t)}function $b(e,t){return!t||t===ga?!1:!!he(e,t)}function vo(e){let t=gt(e),r=new Map(e.scene.gameObjects.map(n=>[n.id,n]));return e.scene.gameObjects.filter(n=>n.id!==ga).map(n=>{let o=hn(n),a=fn(n),i=n.active!==!1;return{id:n.id,label:n.name??n.id,parentId:n.parentId===t?null:n.parentId??null,depth:Math.max(0,fB(r,n)-(t?1:0)),role:a&&_b(n)?"group":"object",...Pm(n)?{icon:"prefab"}:{},selectable:!0,enabled:i&&gB(r,n.parentId,t),directEnabled:i,canToggleEnabled:!o,enableToggleDisabledReason:o?"Protected system objects cannot be hidden from Hierarchy.":void 0,protected:o,canHaveChildren:!o&&a,renamable:!o,deletable:!o,draggable:!o}})}function fB(e,t){let r=new Set,n=0,o=t.parentId??null;for(;o;){if(r.has(o))return n;r.add(o);let a=e.get(o);if(!a)return n;n+=1,o=a.parentId??null}return n}function gB(e,t,r){let n=new Set,o=t??null;for(;o;){if(n.has(o))return!0;n.add(o);let a=e.get(o);if(!a)return!0;if(a.id!==r&&a.active===!1)return!1;o=a.parentId??null}return!0}function Bb(e){let t=Fd(e,{normalizeRootActive:!0}),r=gt(t);if(!r)return t;let n=t.scene.gameObjects.find(s=>s.id===r);if(!n)return t;let o=qe(n)?null:Sr(t,r);if(!qe(n)&&!o)return t;let a=!1,i=t.scene.gameObjects.map(s=>{if(s.id===r||s.parentId)return s;let c=Jn(s),d=o?Gs(o,c,{allowMatrixFallback:!0}):c;return a=!0,{...s,parentId:r,components:d?s.components.map(u=>u.type!=="Transform"?u:bn(d)):s.components}});return a?{...t,scene:{...t.scene,gameObjects:i}}:t}function _o(e,t){return[...yn(e,t)]}function yn(e,t){let r=new Set,n=new Map;for(let i of e.scene.gameObjects){r.add(i.id);let s=i.parentId;if(!s)continue;let c=n.get(s);c?c.push(i.id):n.set(s,[i.id])}let o=new Set,a=[];for(let i of t)!r.has(i)||o.has(i)||(o.add(i),a.push(i));for(let i=0;i<a.length;i+=1)for(let s of n.get(a[i])??[])o.has(s)||(o.add(s),a.push(s));return o}function Ub(e){let t=[Rx(e)],r=wx(e);r&&t.push(r);let n=kx(e);n&&t.push(n);let o=Gx(e);o&&t.push(o);let a=$x(e);a&&t.push(a);let i=yB(e);i&&t.push(i);let s=zx(e);s&&t.push(s);let c=Vx(e);c&&t.push(c);let d=Hx(e);return d&&t.push(d),t}function Rx(e){return{id:"common",title:"Common",order:10,placement:"body",summary:Ym(e),persistence:"document",collapsedByDefault:!1,properties:Cx(e)}}function Cx(e){let{document:t,gameObject:r}=e,n=Ym(e),o=[Ir("id","ID",r.id,0),Xn(e,{document:t,path:"name",label:"Name",valueType:"string",control:"string",value:r.name??r.id,commitMode:"blur",order:1}),Xn(e,{document:t,path:"enabled",label:"Enabled",valueType:"boolean",control:"boolean",value:r.active!==!1,commitMode:"immediate",order:2}),Ir("kind.resolved","Resolved Kind",n,3),Ir("kind.explicit","Explicit Kind",r.kind??"inferred",4),Ir("common.activeField","Active Field",r.active??"default:true",5)];return n==="transform"?o.push(Xn(e,{document:t,path:"transformType",label:"Transform Type",valueType:"enum",control:"enum",value:r.transformType??"plain",commitMode:"immediate",order:6,options:e.transformTypeOptions??Bd})):o.push(Ir("common.transformType","Transform Type",r.transformType??"none",6)),o}function wx(e){return pa({id:"hierarchySource",title:"Hierarchy / Source",order:15,summary:vx(e),collapsedByDefault:!0,tags:["Document","Derived"],properties:_x(e)})}function vx(e){let t=e.gameObject.parentId?he(e.document,e.gameObject.parentId):null;return t?`Parent: ${t.name??t.id}`:"Scene root"}function _x(e){let{document:t,gameObject:r}=e,n=[],o=r.parentId?he(t,r.parentId):null,a=t.scene.gameObjects.filter(d=>d.parentId===r.id),i=Math.max(_o(t,[r.id]).length-1,0),s=Yn(t),c=t.scene.gameObjects.filter(d=>d.parentId===r.parentId).findIndex(d=>d.id===r.id);return tt(n,{path:"hierarchy.parentId",label:"Parent ID",value:r.parentId??"none",order:0,source:"Document"}),tt(n,{path:"hierarchy.parentName",label:"Parent Name",value:o?o.name??o.id:r.parentId?"missing":"none",order:1,source:"Document"}),tt(n,{path:"hierarchy.childCount",label:"Children",value:a.length,order:2,source:"Derived"}),tt(n,{path:"hierarchy.descendantCount",label:"Descendants",value:i,order:3,source:"Derived"}),tt(n,{path:"hierarchy.siblingIndex",label:"Sibling Index",value:c>=0?c:"unknown",order:4,source:"Derived"}),tt(n,{path:"document.gameObjectIndex",label:"Document Index",value:t.scene.gameObjects.findIndex(d=>d.id===r.id),order:5,source:"Derived"}),tt(n,{path:"document.schemaVersion",label:"Schema Version",value:t.schemaVersion,order:6,source:"Document"}),tt(n,{path:"source.sourceId",label:"Source ID",value:s.sourceId,order:7,source:"Document"}),tt(n,{path:"source.sourceType",label:"Source Type",value:s.sourceType,order:8,source:"Document"}),tt(n,{path:"source.revision",label:"Revision",value:s.revision??"none",order:9,source:"Document"}),n}function kx(e){return ie(e.gameObject)?{id:"transform",title:"Transform",order:20,placement:"body",summary:Nx(e),persistence:"document",collapsedByDefault:!1,properties:jx(e)}:null}function jx(e){if(!ie(e.gameObject))return[];let r=Ym(e),n=qe(e.gameObject),o=n?e.rootTransform??dn():Xs(e.gameObject);if(Lr(o))return hB(o,0);let a=!!e.gameObject.parentId,i=[],s=0;for(let c of["position","rotation","scale"]){let d=MB(o,c);for(let u of["x","y","z"]){let l=`transform.${c}.${u}`,m=c==="rotation"?zr(pn(d[u])):d[u];n?i.push(Ir(l,`${Vb(c)}.${u}`,m,s)):i.push(Xn(e,{document:null,path:l,label:`${a?`Local ${Vb(c)}`:Vb(c)}.${u}`,valueType:"number",control:"number",value:m,commitMode:"live",order:s,displayPrecision:c==="rotation"?2:3,precision:4,step:c==="rotation"?1:c==="scale"?.01:.1,stepPrecision:c==="rotation"?.1:c==="scale"?.001:.01},r)),s+=1}}if(a){let c=Sr(e.document,e.gameObject.id);if(c&&!Lr(c))for(let d of["x","y","z"])i.push(Ir(`transform.worldPosition.${d}`,`World Position.${d}`,c.position[d],s)),s+=1}return i}function Nx(e){let t=e.gameObject.parentId?he(e.document,e.gameObject.parentId):null;if(qe(e.gameObject))return"Identity Root";let r=ie(e.gameObject);return r&&jt(r)?"Matrix Transform":`Relative to: ${t?t.name??t.id:"Scene"}`}function hB(e,t){if(!Lr(e))return[];let r=[Ir("transform.mode","Mode","Matrix Transform",t)],n=t+1;for(let a=0;a<4;a+=1)r.push(Ir(`transform.matrix.row${a}`,`Matrix Row ${a+1}`,e.matrix.slice(a*4,a*4+4).map(Wm).join(", "),n)),n+=1;let o=eb(e.matrix);return r.push(Ir("transform.matrix.trsApproximation","TRS Approximation",o?[`P ${zb(o.position)}`,`R ${zb({x:pn(o.rotation.x),y:pn(o.rotation.y),z:pn(o.rotation.z)})}`,`S ${zb(o.scale)}`].join(" | "):"Not representable as TRS",n)),r}function Gx(e){let t=ct(e.gameObject),r=la(e.gameObject),n=t?.assetId??r?.assetId;return n?{id:"renderer",title:r?"Image Renderer / Asset":"Renderer / Asset",order:30,placement:"body",summary:Fx(e.document,n),persistence:"document",collapsedByDefault:!0,properties:r?bB(e,r):Lx(e)}:null}function bB(e,t){let r=$d(e.document,t.assetId);return[Ir("imageRenderer.assetId","Texture Asset",r?.displayName??t.assetId,0),Ir("imageRenderer.size","Image Size",`${t.size.width} \xD7 ${t.size.height}`,1),Ir("imageRenderer.assetType","Asset Type",r?.type??"texture",2)]}function Lx(e){let t=ct(e.gameObject);if(!t)return[];let{document:r}=e,n=$d(r,t.assetId),o=[Xn(e,{document:r,path:"instance.assetId",label:"Asset",valueType:"enum",control:"enum",value:t.assetId,commitMode:"immediate",order:0,options:r.assets.map(a=>({label:a.displayName??a.id,value:a.id}))})];return tt(o,{path:"renderer.assetId",label:"Renderer Asset ID",value:t.assetId,order:1,source:"Document"}),tt(o,{path:"asset.id",label:"Asset ID",value:n?.id??"missing",order:2,source:"Asset"}),tt(o,{path:"asset.type",label:"Asset Type",value:n?.type??"missing",order:3,source:"Asset"}),tt(o,{path:"asset.guid",label:"GUID",value:n?.guid??"missing",order:4,source:"Asset"}),tt(o,{path:"asset.displayName",label:"Display Name",value:n?.displayName??"none",order:5,source:"Asset"}),tt(o,{path:"asset.category",label:"Category",value:n?.category??"none",order:6,source:"Asset"}),tt(o,{path:"asset.materialMode",label:"Material Mode",value:n?.materialMode??"none",order:7,source:"Asset"}),tt(o,{path:"asset.defaults",label:"Defaults",value:n?.defaults??"none",order:8,source:"Asset",tags:["Raw"]}),o}function Fx(e,t){let r=$d(e,t);return r?r.displayName??r.id:`Missing asset: ${t}`}function $x(e){let t=e.gameObject.primitive;return t?{id:"primitive",title:"Primitive",order:32,placement:"body",summary:t.shape,persistence:"document",collapsedByDefault:!1,properties:Bx(e)}:null}function Bx(e){let t=e.gameObject.primitive;return t?[Xn(e,{document:e.document,path:"primitive.shape",label:"Shape",valueType:"enum",control:"enum",value:t.shape,commitMode:"immediate",order:0,options:e.primitiveShapeOptions??DB})]:[]}function yB(e){if(e.gameObject.prefab)return SB(e);if(!Qs(e))return null;let t=Tt(e.gameObject.shadow).shadow,r=Xn(e,{document:e.document,path:"shadow.cast",label:"\u6295\u5C04\u9634\u5F71",valueType:"boolean",control:"boolean",value:t?.cast==="enabled",commitMode:"immediate",order:0,tooltip:"\u5F00\u542F\u540E\u8BE5\u7269\u4F53\u6295\u5C04\u9634\u5F71\uFF1B\u5173\u95ED\u540E\u8BE5\u7269\u4F53\u4E0D\u8FDB\u5165\u9634\u5F71\u6295\u5C04\u5019\u9009\u96C6\u3002"}),n=Xn(e,{document:e.document,path:"shadow.receive",label:"\u63A5\u6536\u9634\u5F71",valueType:"boolean",control:"boolean",value:t?.receive==="enabled",commitMode:"immediate",order:1,tooltip:"\u5F00\u542F\u540E\u8BE5\u7269\u4F53\u63A5\u6536\u9634\u5F71\uFF1B\u5173\u95ED\u540E\u6750\u8D28\u4E0D\u91C7\u6837\u9634\u5F71\u7ED3\u679C\u3002"}),o=qm(e.renderingProfile),a=e.renderingProfile!==void 0&&$m(o)==="none";return{id:"shadow",title:"\u9634\u5F71",order:34,placement:"body",...a?{summary:"\u9879\u76EE\u9634\u5F71\u540E\u7AEF\u5F53\u524D\u5DF2\u5173\u95ED\uFF1B\u53C2\u4E0E\u8D44\u683C\u4ECD\u4F1A\u4FDD\u5B58\u3002"}:{},persistence:"document",collapsedByDefault:!1,properties:[r,n,...a?[Hb()]:[]]}}function SB(e){let t=e.gameObject.prefab?.prefabId,r=t?e.document.assets.find(i=>i.id===t)?.prefab?.defaults?.shadow:void 0,n=Tt(r).shadow,o=!!t,a=[{path:"shadow.cast",label:"\u6295\u5C04\u9634\u5F71",valueType:"boolean",control:"boolean",value:n?.cast==="enabled",readOnly:!o,persistence:o?"document":"readonly",commitMode:"immediate",order:0,tooltip:o?"\u4FEE\u6539\u4F1A\u5F71\u54CD\u8BE5 Prefab \u7684\u5168\u90E8\u5B9E\u4F8B\uFF1B\u8BBE\u7F6E\u4FDD\u5B58\u5728 Prefab definition root\u3002":"\u53EA\u8BFB\uFF1A\u7F3A\u5C11 Prefab definition\uFF0C\u65E0\u6CD5\u4FEE\u6539\u9634\u5F71\u53C2\u4E0E\u8D44\u683C\u3002"},{path:"shadow.receive",label:"\u63A5\u6536\u9634\u5F71",valueType:"boolean",control:"boolean",value:n?.receive==="enabled",readOnly:!o,persistence:o?"document":"readonly",commitMode:"immediate",order:1,tooltip:o?"\u4FEE\u6539\u4F1A\u5F71\u54CD\u8BE5 Prefab \u7684\u5168\u90E8\u5B9E\u4F8B\uFF1B\u8BBE\u7F6E\u4FDD\u5B58\u5728 Prefab definition root\u3002":"\u53EA\u8BFB\uFF1A\u7F3A\u5C11 Prefab definition\uFF0C\u65E0\u6CD5\u4FEE\u6539\u9634\u5F71\u53C2\u4E0E\u8D44\u683C\u3002"},...t?[Vs({path:"prefab.edit-definition",label:"\u8FDB\u5165 Prefab",buttonLabel:"Edit Prefab",actionId:"asset.edit-prefab",order:2,icon:"box",tooltip:"\u5728 Prefab Stage \u4E2D\u7F16\u8F91 definition root \u7684\u9634\u5F71\u53C2\u4E0E\u8D44\u683C\u3002",params:{assetId:t,browserAssetId:`prefab:${t}`,assetKind:"prefab"},disabled:!1})]:[]];return{id:"shadow",title:"\u9634\u5F71",order:34,summary:o?"\u4FEE\u6539\u4F1A\u5F71\u54CD\u8BE5 Prefab \u7684\u5168\u90E8\u5B9E\u4F8B":"\u7531 Prefab definition root \u7BA1\u7406",persistence:o?"document":"readonly",collapsedByDefault:!1,properties:a}}function Hb(){return{path:"rendering.shadows.open",label:"\u6253\u5F00 Rendering / Shadows",valueType:"string",control:"custom",customControl:"open-right-dock-tab",controlOptions:{targetTab:"rendering",label:"\u6253\u5F00 Rendering / Shadows",icon:"world"},value:"\u6253\u5F00 Rendering / Shadows",readOnly:!0,persistence:"readonly",commitMode:"immediate",order:2,tags:["Rendering"],effect:"active"}}function qm(e){return e&&typeof e=="object"&&"environment"in e&&"postProcess"in e&&"shadows"in e&&"renderingGroups"in e&&"shadowMeshes"in e?e:mt(e)}function zx(e){if(!IB(e))return null;let t=qm(e.renderingProfile),r=EB(e.gameObject.rendering?.renderingGroupId),n=t.renderingGroups.slots.find(a=>a.renderingGroupId===r)??t.renderingGroups.slots[0],o=TB(e.gameObject)??null;return{id:"rendering",title:"Rendering",order:36,placement:"body",summary:AB(n,o),persistence:"document",collapsedByDefault:!1,properties:[Xn(e,{document:e.document,path:"rendering.renderingGroupId",label:"Rendering Group",valueType:"enum",control:"enum",value:r,commitMode:"immediate",order:0,options:t.renderingGroups.slots.map(a=>({label:`${a.renderingGroupId}: ${a.name}`,value:a.renderingGroupId}))}),Xn(e,{document:e.document,path:"rendering.alphaIndex",label:"Alpha Order",valueType:"enum",control:"enum",value:o,commitMode:"immediate",order:1,options:PB(n,o)})]}}function Vx(e){return pa({id:"components",title:"Scripts / Components",order:65,summary:Kb(e.gameObject),collapsedByDefault:!0,tags:["Document"],properties:Ux(e.gameObject)})}function Kb(e){return e.components.map(t=>t.type).join(", ")||"none"}function Ux(e){let t=[];return tt(t,{path:"components.count",label:"Count",value:e.components.length,order:0,source:"Document"}),tt(t,{path:"components.types",label:"Types",value:Kb(e),order:1,source:"Document"}),e.components.forEach((r,n)=>{tt(t,{path:`components.${n}`,label:`${r.type} ${n}`,value:r,order:n+2,source:"Document",tags:["Component","Raw"]})}),t}function Hx(e){let t=e.assetId??ct(e.gameObject)?.assetId??la(e.gameObject)?.assetId??null,r=Kx({document:e.document,gameObject:e.gameObject,assetId:t});return r.length===0?null:{id:"metadata",title:"Metadata",order:80,placement:"body",summary:Wx({document:e.document,gameObject:e.gameObject,assetId:t}),persistence:"readonly",collapsedByDefault:!0,tags:["Document","Asset"],properties:r}}function Kx(e){let t=[],r=e.assetId?$d(e.document,e.assetId):null;return tt(t,{path:"metadata.document",label:"Document Meta",value:e.document.meta??"none",order:0,source:"Document",tags:["Raw"]}),tt(t,{path:"metadata.gameObject",label:"GameObject Metadata",value:e.gameObject.metadata??"none",order:1,source:"Document",tags:["Raw"]}),tt(t,{path:"metadata.asset",label:"Asset Metadata",value:r?.metadata??"none",order:2,source:"Asset",tags:["Raw"]}),t}function Wx(e){let t=e.assetId?$d(e.document,e.assetId):null,r=[e.document.meta?"Document":null,e.gameObject.metadata?"GameObject":null,t?.metadata?"Asset":null].filter(n=>!!n);return r.length>0?r.join(" + "):"none"}function Xn(e,t,r=Ym(e)){let{document:n,...o}=t;return Gd({document:n??null,nodeKind:r,property:o,extraValidators:e.extraValidators})}function tt(e,t){let r=le(t);r&&e.push(r)}function Ir(e,t,r,n){return le({path:e,label:t,value:r,order:n,persistence:"readonly",source:"Document"})}function Ym(e){return e.nodeKind??We(e.gameObject)}function Qs(e){let t=e.gameObject;return qe(t)?!1:bi(t)}function IB(e){let t=e.gameObject;if(qe(t)||t.transformType==="camera"||t.transformType==="light"||t.camera||t.light)return!1;let r=e.nodeKind??We(t);return r==="instance"||r==="primitive"||r==="transform"}function EB(e){return e===1||e===2||e===3?e:0}function TB(e){let t=e.rendering?.alphaIndex;if(typeof t=="number"&&Number.isFinite(t))return t}function AB(e,t){return t==null?`${e.name} \xB7 Babylon \u9ED8\u8BA4`:`${e.name} \xB7 ${xB(e,t)}`}function PB(e,t){let r=[{label:"Babylon \u9ED8\u8BA4",value:null},...e.alphaIndexPresets.map(n=>({label:`${n.name} (${n.alphaIndex})`,value:n.alphaIndex}))];return t!=null&&!e.alphaIndexPresets.some(n=>n.alphaIndex===t)&&r.push({label:`\u672A\u547D\u540D\u503C ${t}`,value:t,batchCompatibility:"ignore"}),r}function xB(e,t){let r=e.alphaIndexPresets.find(n=>n.alphaIndex===t);return r?r.name:`\u672A\u547D\u540D\u503C ${t}`}function MB(e,t){return t==="scale"?e.scale??{x:1,y:1,z:1}:e[t]}function zb(e){return`${Wm(e.x)}, ${Wm(e.y)}, ${Wm(e.z)}`}function Wm(e){return zr(e).toString()}function Vb(e){return e==="position"?"Position":e==="rotation"?"Rotation":"Scale"}function $d(e,t){return e.assets.find(r=>r.id===t)??null}var Bd=[{label:"Plain",value:"plain"},{label:"Light",value:"light"},{label:"Camera",value:"camera"}],DB=[{label:"Cube",value:"cube"},{label:"Sphere",value:"sphere"},{label:"Plane",value:"plane"},{label:"Capsule",value:"capsule"}];function qx(e){return[Xx(e),Qx(e.runtime),Zx(e.runtime),eM(e.runtime),tM(e.runtime),rM(e.runtime),nM(e.runtime),oM(e.runtime),aM(e.runtime),iM(e.runtime),sM(e.runtime),cM(e.runtime),dM(e)].filter(t=>!!t)}function Wb(e,t){if(!e.activeId)return[];let r=t.findGameObject(e.document,e.activeId);if(!r||e.targetIds&&e.targetIds.length!==1)return[];let n=vd({projectedRoot:e.projectedRoot,projectionNode:e.projectionNode??null});return qx({runtime:n,binding:{sourceId:e.sourceRef.sourceId,sourceType:e.sourceRef.sourceType,objectId:e.activeId,component:t.hasModelRenderer(r)?"ModelRenderer":t.hasImageRenderer(r)?"ImageRenderer":t.readNodeKind(r)==="transform"?"Transform":"GameObject",projectionNodeId:dt(e.projectionNode,"id")??null,projectionName:dt(e.projectionNode,"name")??null,projectionParentId:dt(e.projectionNode,"parentId")??null,projectionAssetId:Yx(e.projectionNode)},projectionAssetMetadata:Jx(e.projectionNode)})}function Yx(e){let t=Pe(e,"asset");return dt(t,"assetId")??dt(t,"id")}function Jx(e){return Pe(Pe(e,"asset"),"metadata")}function Xx(e){let{binding:t,runtime:r}=e,n=[];return F(n,{path:"runtime.binding.sourceId",label:"Source ID",value:t?.sourceId??"none",order:0,source:"Document"}),F(n,{path:"runtime.binding.sourceType",label:"Source Type",value:t?.sourceType??"none",order:1,source:"Document"}),F(n,{path:"runtime.binding.objectId",label:"Object ID",value:t?.objectId??"none",order:2,source:"Document"}),F(n,{path:"runtime.binding.component",label:"Component",value:t?.component??"GameObject",order:3,source:"Derived"}),F(n,{path:"runtime.projection.nodeId",label:"Projection Node ID",value:t?.projectionNodeId??"none",order:4,source:"Derived"}),F(n,{path:"runtime.projection.name",label:"Projection Name",value:t?.projectionName??"none",order:5,source:"Derived"}),F(n,{path:"runtime.projection.parentId",label:"Projection Parent",value:t?.projectionParentId??"none",order:6,source:"Derived"}),F(n,{path:"runtime.projection.assetId",label:"Projection Asset ID",value:t?.projectionAssetId??"none",order:7,source:"Asset"}),F(n,{path:"runtime.root.status",label:"Projected Root",value:r.root?"available":"not projected",order:8,source:"Runtime"}),F(n,{path:"runtime.root.className",label:"Runtime Class",value:Wn(r.root)??"none",order:9,source:"Runtime"}),F(n,{path:"runtime.root.name",label:"Runtime Name",value:dt(r.root,"name")??"none",order:10,source:"Runtime"}),F(n,{path:"runtime.binding.primaryMesh",label:"Primary Mesh",value:Si(r.primaryMesh)??"none",order:11,source:"Derived"}),F(n,{path:"runtime.binding.primaryMaterial",label:"Primary Material",value:Si(r.material)??"none",order:12,source:"Derived"}),F(n,{path:"runtime.material.kind",label:"Material Kind",value:fM(r.material)??"none",order:13,source:"Runtime"}),ir({id:"runtimeBinding",title:"Runtime Binding",order:910,summary:r.root?Si(r.root)??"Runtime":"not projected",collapsedByDefault:!0,properties:n})}function Qx(e){let t=[],r=Rm(e.root)??Rm(e.primaryMesh);return r?(Mi(t,"runtime.bounds.min","Bounds Min",r.min,t.length,"Derived"),Mi(t,"runtime.bounds.max","Bounds Max",r.max,t.length,"Derived"),Mi(t,"runtime.bounds.center","Bounds Center",r.center,t.length,"Derived"),Mi(t,"runtime.bounds.size","Bounds Size",r.size,t.length,"Derived")):F(t,{path:"runtime.bounds.status",label:"Bounds",value:"not available",source:"Derived"}),F(t,{path:"runtime.geometry.meshCount",label:"Mesh Count",value:e.meshes.length,source:"Derived"}),F(t,{path:"runtime.geometry.childNodeCount",label:"Child Nodes",value:e.childNodes.length,source:"Derived"}),F(t,{path:"runtime.geometry.totalVertices",label:"Total Vertices",value:Cm(e.meshes,"getTotalVertices"),source:"Derived"}),F(t,{path:"runtime.geometry.totalIndices",label:"Total Indices",value:Cm(e.meshes,"getTotalIndices"),source:"Derived"}),F(t,{path:"runtime.geometry.subMeshCount",label:"SubMeshes",value:e.meshes.reduce((n,o)=>n+Us(o,"subMeshes"),0),source:"Derived"}),ir({id:"geometryBox",title:"Geometry / Box",order:920,summary:r?`${e.meshes.length} mesh${e.meshes.length===1?"":"es"}`:"no bounds",collapsedByDefault:!1,properties:t})}function Zx(e){let t=e.primaryMesh??e.root,r=[];return F(r,{path:"runtime.rendering.nodeClass",label:"Node Class",value:Wn(t)??"none"}),F(r,{path:"runtime.rendering.nodeName",label:"Node Name",value:dt(t,"name")??"none"}),F(r,{path:"runtime.rendering.isEnabled",label:"Enabled",value:xb(t)??"not available"}),F(r,{path:"runtime.rendering.isVisible",label:"Is Visible",value:Lt(t,"isVisible")??"not available"}),F(r,{path:"runtime.rendering.visibility",label:"Visibility",value:Ze(t,"visibility")??"not available"}),F(r,{path:"runtime.rendering.layerMask",label:"Layer Mask",value:Ze(t,"layerMask")??"not available"}),F(r,{path:"runtime.rendering.renderingGroupId",label:"Rendering Group",value:Ze(t,"renderingGroupId")??"not available"}),F(r,{path:"runtime.rendering.alphaIndex",label:"Alpha Index",value:Ze(t,"alphaIndex")??"not available"}),F(r,{path:"runtime.rendering.alwaysSelectAsActiveMesh",label:"Always Active Mesh",value:Lt(t,"alwaysSelectAsActiveMesh")??"not available"}),F(r,{path:"runtime.rendering.billboardMode",label:"Billboard Mode",value:Ze(t,"billboardMode")??"not available"}),ir({id:"rendering",title:"Rendering",order:930,summary:dt(t,"name")??Wn(t)??"not available",collapsedByDefault:!0,properties:r})}function eM(e){let t=e.primaryMesh??e.root,r=[];return F(r,{path:"runtime.collisions.checkCollisions",label:"Check Collisions",value:Lt(t,"checkCollisions")??"not configured"}),F(r,{path:"runtime.collisions.collisionMask",label:"Collision Mask",value:Ze(t,"collisionMask")??"not configured"}),F(r,{path:"runtime.collisions.collisionGroup",label:"Collision Group",value:Ze(t,"collisionGroup")??"not configured"}),F(r,{path:"runtime.collisions.collisionResponse",label:"Collision Response",value:Lt(t,"collisionResponse")??"not configured"}),F(r,{path:"runtime.collisions.moveWithCollisions",label:"Move With Collisions",value:typeof Pe(t,"moveWithCollisions")=="function"?"available":"not available"}),Mi(r,"runtime.collisions.ellipsoid","Ellipsoid",Pe(t,"ellipsoid"),r.length,"Runtime","not configured"),Mi(r,"runtime.collisions.ellipsoidOffset","Ellipsoid Offset",Pe(t,"ellipsoidOffset"),r.length,"Runtime","not configured"),ir({id:"collisions",title:"Collisions",order:940,summary:Lt(t,"checkCollisions")===!0?"enabled":"not configured",collapsedByDefault:!0,properties:r})}function tM(e){let t=e.primaryMesh??e.root,r=Pe(t,"physicsBody"),n=Pe(t,"physicsImpostor"),o=r??n,a=[];return F(a,{path:"runtime.physics.status",label:"Physics",value:o?"configured":"not configured"}),F(a,{path:"runtime.physics.bodyClass",label:"Body Class",value:Wn(o)??"none"}),F(a,{path:"runtime.physics.bodyName",label:"Body Name",value:dt(o,"name")??dt(o,"id")??"none"}),F(a,{path:"runtime.physics.mass",label:"Mass",value:_d(o,"mass")??"not available"}),F(a,{path:"runtime.physics.friction",label:"Friction",value:_d(o,"friction")??"not available"}),F(a,{path:"runtime.physics.restitution",label:"Restitution",value:_d(o,"restitution")??"not available"}),F(a,{path:"runtime.physics.disablePreStep",label:"Disable Pre Step",value:Lt(o,"disablePreStep")??"not available"}),ir({id:"physics",title:"Physics",order:950,summary:o?Si(o)??"configured":"not configured",collapsedByDefault:!0,properties:a})}function rM(e){let t=e.primaryMesh??e.root,r=[];return F(r,{path:"runtime.shadows.receiveShadows",label:"Receive Shadows",value:Lt(t,"receiveShadows")??"not configured"}),F(r,{path:"runtime.shadows.shadowEnabled",label:"Shadow Enabled",value:Vt(t,"isShadowEnabled")??"not available"}),F(r,{path:"runtime.shadows.shadowDepthWrapper",label:"Shadow Depth Wrapper",value:Si(Pe(e.material,"shadowDepthWrapper"))??"none"}),F(r,{path:"runtime.shadows.receivingMeshCount",label:"Receiving Meshes",value:e.meshes.filter(n=>Lt(n,"receiveShadows")===!0).length,source:"Derived"}),ir({id:"shadows",title:"Shadows",order:960,summary:Lt(t,"receiveShadows")===!0?"receiving":"not configured",collapsedByDefault:!0,properties:r})}function nM(e){let t=e.material,r=[];return F(r,{path:"runtime.material.status",label:"Material",value:t?"available":"none"}),F(r,{path:"runtime.material.className",label:"Class",value:Wn(t)??"none"}),F(r,{path:"runtime.material.name",label:"Name",value:dt(t,"name")??"none"}),F(r,{path:"runtime.material.id",label:"ID",value:dt(t,"id")??"none"}),F(r,{path:"runtime.material.uniqueId",label:"Unique ID",value:Ze(t,"uniqueId")??"not available"}),F(r,{path:"runtime.material.alpha",label:"Alpha",value:Ze(t,"alpha")??"not available"}),F(r,{path:"runtime.material.backFaceCulling",label:"Back Face Culling",value:Lt(t,"backFaceCulling")??"not available"}),F(r,{path:"runtime.material.twoSidedLighting",label:"Two Sided Lighting",value:Lt(t,"twoSidedLighting")??"not available"}),F(r,{path:"runtime.material.disableLighting",label:"Disable Lighting",value:Lt(t,"disableLighting")??"not available"}),F(r,{path:"runtime.material.wireframe",label:"Wireframe",value:Lt(t,"wireframe")??"not available"}),F(r,{path:"runtime.material.pointsCloud",label:"Points Cloud",value:Lt(t,"pointsCloud")??"not available"}),F(r,{path:"runtime.material.fillMode",label:"Fill Mode",value:Ze(t,"fillMode")??"not available"}),F(r,{path:"runtime.material.activeTextureCount",label:"Active Textures",value:wm(t,"getActiveTextures"),source:"Derived"}),ir({id:"material",title:"Material",order:970,summary:Si(t)??"none",collapsedByDefault:!0,properties:r})}function oM(e){let t=e.material,r=[];F(r,{path:"runtime.material.textures.activeCount",label:"Active Texture Count",value:wm(t,"getActiveTextures"),source:"Derived"});let n=0;for(let o of gM){let a=Pe(t,o);a&&(n+=1,uM(r,`runtime.material.textures.${o}`,zd(o),a))}return n===0&&F(r,{path:"runtime.material.textures.status",label:"Textures",value:"none"}),ir({id:"materialTextures",title:"Material Textures",order:980,summary:n>0?`${n} slot${n===1?"":"s"}`:"none",collapsedByDefault:!0,properties:r})}function aM(e){let t=[],r=0;for(let n of hM){let o=Pe(e.material,n);lM(t,`runtime.material.colors.${n}`,zd(n),o,t.length)&&(r+=1)}return r===0&&F(t,{path:"runtime.material.colors.status",label:"Colors",value:"none"}),ir({id:"materialColors",title:"Material Colors",order:990,summary:r>0?`${r} color${r===1?"":"s"}`:"none",collapsedByDefault:!0,properties:t})}function iM(e){let t=[];for(let r of bM)F(t,{path:`runtime.material.metallicRoughness.${r}`,label:zd(r),value:Ze(e.material,r)??"not available"});return ir({id:"metallicRoughness",title:"Metallic / Roughness",order:1e3,summary:e.material?"runtime material":"none",collapsedByDefault:!0,properties:t})}function sM(e){let t=[];for(let r of yM)F(t,{path:`runtime.material.intensity.${r}`,label:zd(r),value:Ze(e.material,r)??"not available"});return ir({id:"intensityProperties",title:"Intensity Properties",order:1010,summary:e.material?"runtime material":"none",collapsedByDefault:!0,properties:t})}function cM(e){let t=e.primaryMesh??e.root,r=Pe(t,"skeleton"),n=[];return F(n,{path:"runtime.animation.rootAnimationCount",label:"Root Animations",value:Us(e.root,"animations"),source:"Derived"}),F(n,{path:"runtime.animation.meshAnimationCount",label:"Mesh Animations",value:Us(t,"animations"),source:"Derived"}),F(n,{path:"runtime.skeleton.status",label:"Skeleton",value:r?"available":"none"}),F(n,{path:"runtime.skeleton.className",label:"Skeleton Class",value:Wn(r)??"none"}),F(n,{path:"runtime.skeleton.name",label:"Skeleton Name",value:dt(r,"name")??"none"}),F(n,{path:"runtime.skeleton.id",label:"Skeleton ID",value:dt(r,"id")??"none"}),F(n,{path:"runtime.skeleton.boneCount",label:"Bones",value:Us(r,"bones"),source:"Derived"}),ir({id:"animationSkeleton",title:"Animation / Skeleton",order:1020,summary:r?dt(r,"name")??"skeleton":"none",collapsedByDefault:!0,properties:n})}function dM(e){let{runtime:t}=e,r=[];return F(r,{path:"runtime.raw.rootMetadata",label:"Root Metadata",value:Pe(t.root,"metadata")??"none",tags:["Raw"]}),F(r,{path:"runtime.raw.primaryMeshMetadata",label:"Mesh Metadata",value:Pe(t.primaryMesh,"metadata")??"none",tags:["Raw"]}),F(r,{path:"runtime.raw.materialMetadata",label:"Material Metadata",value:Pe(t.material,"metadata")??"none",tags:["Raw"]}),F(r,{path:"runtime.raw.projectionAssetMetadata",label:"Projection Asset Metadata",value:e.projectionAssetMetadata??"none",source:"Asset",tags:["Raw"]}),F(r,{path:"runtime.misc.isDisposed",label:"Root Disposed",value:Vt(t.root,"isDisposed")??"not available"}),ir({id:"rawMisc",title:"Raw / Misc",order:1030,summary:"metadata",collapsedByDefault:!0,properties:r})}function ir(e){return pa({id:e.id,title:e.title,order:e.order,summary:e.summary,persistence:"runtime",runtimeOnly:!0,collapsedByDefault:e.collapsedByDefault,omitWhenEmpty:!1,tags:["Runtime"],properties:e.properties})}function F(e,t){let r=le({...t,persistence:"runtime",source:t.source??"Runtime"});r&&e.push(r)}function Mi(e,t,r,n,o,a="Runtime",i){let s=Pb({basePath:t,label:r,value:n,order:o,persistence:"runtime",source:a});s.length>0?e.push(...s):i&&F(e,{path:`${t}.status`,label:r,value:i,order:o,source:a})}function lM(e,t,r,n,o){let a=pM(n);return a?(F(e,{path:`${t}.r`,label:`${r}.r`,value:a.r,order:o,valueType:"number"}),F(e,{path:`${t}.g`,label:`${r}.g`,value:a.g,order:o+1,valueType:"number"}),F(e,{path:`${t}.b`,label:`${r}.b`,value:a.b,order:o+2,valueType:"number"}),a.a!=null&&F(e,{path:`${t}.a`,label:`${r}.a`,value:a.a,order:o+3,valueType:"number"}),!0):!1}function uM(e,t,r,n){let o=e.length;F(e,{path:`${t}.className`,label:`${r} Class`,value:Wn(n)??"Texture",order:o}),F(e,{path:`${t}.name`,label:`${r} Name`,value:dt(n,"name")??"none",order:o+1}),F(e,{path:`${t}.url`,label:`${r} URL`,value:mM(n)??"none",order:o+2}),F(e,{path:`${t}.level`,label:`${r} Level`,value:Ze(n,"level")??"not available",order:o+3}),F(e,{path:`${t}.coordinatesIndex`,label:`${r} UV Set`,value:Ze(n,"coordinatesIndex")??"not available",order:o+4}),F(e,{path:`${t}.hasAlpha`,label:`${r} Has Alpha`,value:Lt(n,"hasAlpha")??"not available",order:o+5})}function mM(e){return dt(e,"url")??dt(e,"name")??dt(Vt(e,"getInternalTexture"),"url")}function pM(e){if(!e||typeof e!="object")return null;let t=Ze(e,"r"),r=Ze(e,"g"),n=Ze(e,"b");if(t==null||r==null||n==null)return null;let o=Ze(e,"a");return o==null?{r:t,g:r,b:n}:{r:t,g:r,b:n,a:o}}function fM(e){let t=Wn(e);return t?t.includes("PBR")?"pbr":t.includes("Standard")?"standard":t:null}function zd(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/^./,t=>t.toUpperCase())}var gM=["albedoTexture","diffuseTexture","emissiveTexture","ambientTexture","opacityTexture","bumpTexture","normalTexture","metallicTexture","reflectionTexture","refractionTexture","lightmapTexture","specularTexture","roughnessTexture"],hM=["albedoColor","diffuseColor","emissiveColor","ambientColor","specularColor","reflectivityColor"],bM=["metallic","roughness","microSurface","specularPower","baseWeight","indexOfRefraction"],yM=["directIntensity","emissiveIntensity","environmentIntensity","specularIntensity","cameraExposure","cameraContrast"];var IM=[{label:"\u4E2D\u6587",value:"zh"},{label:"English",value:"en"}],SM={zh:{hemisphericTitle:"\u73AF\u5883\u5149",directionalTitle:"\u76F4\u5C04\u5149",hemisphericSummary:"Hemispheric",directionalSummary:"Directional",language:"\u8BED\u8A00",type:"\u7C7B\u578B",typeHemispheric:"\u73AF\u5883\u5149",typeDirectional:"\u76F4\u5C04\u5149",intensity:"\u5F3A\u5EA6",skyLightColor:"\u5929\u7A7A\u5149\u989C\u8272",groundColor:"\u5730\u9762\u989C\u8272",lightColor:"\u5149\u7167\u989C\u8272",horizontalAngle:"\u6C34\u5E73\u89D2",elevationAngle:"\u9AD8\u5EA6\u89D2",shadowsTitle:"\u9634\u5F71",shadowsSummary:"Planar Main / \u8DDF\u968F\u76F4\u5C04\u5149",shadowSystem:"\u7CFB\u7EDF",shadowEnabled:"\u542F\u7528",shadowOpacity:"\u4E0D\u900F\u660E\u5EA6",shadowLength:"\u9634\u5F71\u957F\u5EA6",shadowFollowDirectional:"Planar Main / \u8DDF\u968F\u76F4\u5C04\u5149",openShadows:"\u6253\u5F00\u9634\u5F71\u8BBE\u7F6E",rawLight:"\u539F\u59CB\u5149\u6E90\u6570\u636E",tooltips:{language:"\u5207\u6362\u6B64\u5149\u6E90\u68C0\u67E5\u5668\u7684\u5C5E\u6027\u663E\u793A\u8BED\u8A00\u3002\u8BE5\u5B57\u6BB5\u53EA\u7528\u4E8E\u7F16\u8F91\u5668\uFF0C\u4E0D\u4F1A\u5BFC\u51FA\u5230\u8FD0\u884C\u65F6\u3002",type:"\u7CFB\u7EDF\u5149\u6E90\u7C7B\u578B\u53EA\u8BFB\u3002\u5BF9\u5E94 BabylonJS \u7684 HemisphericLight \u6216 DirectionalLight\u3002",intensity:"\u5149\u6E90\u5F3A\u5EA6\uFF0C\u5FC5\u987B\u662F\u975E\u8D1F\u6570\u3002BabylonJS \u4E0D\u8BBE\u7F6E\u786C\u4E0A\u9650\uFF1B\u767D\u8272\u6750\u8D28\u5728\u8F83\u9AD8\u5F3A\u5EA6\u4E0B\u901A\u5E38\u5DF2\u7ECF\u63A5\u8FD1\u663E\u793A\u9971\u548C\uFF0C\u7EE7\u7EED\u589E\u5927\u89C6\u89C9\u53D8\u5316\u4F1A\u4E0D\u660E\u663E\u3002",skyLightColor:"\u73AF\u5883\u5149\u6765\u81EA\u5929\u7A7A\u65B9\u5411\u7684\u6F2B\u53CD\u5C04\u989C\u8272\uFF0C\u5BF9\u5E94 BabylonJS HemisphericLight.diffuse\u3002",groundColor:"\u73AF\u5883\u5149\u6765\u81EA\u5730\u9762\u53CD\u5C04\u65B9\u5411\u7684\u989C\u8272\uFF0C\u5BF9\u5E94 BabylonJS HemisphericLight.groundColor\u3002",lightColor:"\u76F4\u5C04\u5149\u989C\u8272\uFF0C\u5BF9\u5E94 BabylonJS DirectionalLight.diffuse\u3002",horizontalAngle:"\u76F4\u5C04\u5149\u5728 XZ \u5E73\u9762\u5185\u7684\u671D\u5411\u89D2\u5EA6\u3002\u7F16\u8F91\u5668\u4F1A\u628A\u5B83\u8F6C\u6362\u4E3A BabylonJS DirectionalLight.direction\u3002",elevationAngle:"\u76F4\u5C04\u5149\u76F8\u5BF9\u5730\u5E73\u7EBF\u7684\u9AD8\u5EA6\u89D2\uFF1B90 \u5EA6\u8868\u793A\u4ECE\u6B63\u4E0A\u65B9\u7167\u4E0B\u3002\u7F16\u8F91\u5668\u4F1A\u628A\u5B83\u8F6C\u6362\u4E3A BabylonJS DirectionalLight.direction\u3002",shadowSystem:"\u9634\u5F71\u7CFB\u7EDF\u53EA\u8BFB\u6458\u8981\u3002Planar \u9634\u5F71\u65B9\u5411\u6765\u81EA\u5F53\u524D\u76F4\u5C04\u5149\uFF0C\u5B8C\u6574\u53C2\u6570\u5728 Rendering \u9762\u677F\u8C03\u6574\u3002",shadowEnabled:"\u5F53\u524D\u9879\u76EE\u7EA7 Planar \u9634\u5F71\u662F\u5426\u542F\u7528\u3002\u8FD9\u91CC\u4EC5\u663E\u793A\u6458\u8981\uFF0C\u4E0D\u5728\u5149\u6E90 Inspector \u4E2D\u7F16\u8F91\u3002",shadowOpacity:"\u5F53\u524D\u9879\u76EE\u7EA7 Planar \u9634\u5F71\u4E0D\u900F\u660E\u5EA6\u3002\u5B8C\u6574\u53C2\u6570\u5728 Rendering \u9762\u677F\u8C03\u6574\u3002",shadowLength:"\u6839\u636E\u76F4\u5C04\u5149\u65B9\u5411\u4F30\u7B97\u7684\u5E73\u9762\u9634\u5F71\u957F\u5EA6\u500D\u7387\uFF1B\u9AD8\u5EA6\u89D2\u8D8A\u4F4E\uFF0C\u9634\u5F71\u8D8A\u957F\u3002",openShadows:"\u5207\u6362\u5230\u53F3\u4FA7 Rendering \u9762\u677F\uFF0C\u7F16\u8F91\u9879\u76EE\u7EA7\u9634\u5F71\u8BBE\u7F6E\u3002",rawLight:"\u7F16\u8F91\u5668\u6587\u6863\u4E2D\u7684\u5149\u6E90\u539F\u59CB\u6570\u636E\uFF0C\u53EA\u8BFB\u663E\u793A\u3002"}},en:{hemisphericTitle:"Environment Light",directionalTitle:"Directional Light",hemisphericSummary:"Hemispheric",directionalSummary:"Directional",language:"Language",type:"Type",typeHemispheric:"Environment Light",typeDirectional:"Directional Light",intensity:"Intensity",skyLightColor:"Sky Light Color",groundColor:"Ground Color",lightColor:"Light Color",horizontalAngle:"Horizontal Angle",elevationAngle:"Elevation Angle",shadowsTitle:"Shadows",shadowsSummary:"Planar Main / Follow Directional Light",shadowSystem:"System",shadowEnabled:"Enabled",shadowOpacity:"Opacity",shadowLength:"Shadow Length",shadowFollowDirectional:"Planar Main / Follow Directional Light",openShadows:"Open Shadows",rawLight:"Raw Light Data",tooltips:{language:"Switches the display language for this light inspector. This editor-only field is not exported to runtime.",type:"Read-only system light type. Maps to BabylonJS HemisphericLight or DirectionalLight.",intensity:"Light intensity. Must be a non-negative number. BabylonJS does not impose a hard upper limit; white surfaces often saturate at high intensity, so further increases may look subtle.",skyLightColor:"Diffuse sky color for the environment light. Maps to BabylonJS HemisphericLight.diffuse.",groundColor:"Ground bounce color for the environment light. Maps to BabylonJS HemisphericLight.groundColor.",lightColor:"Directional light color. Maps to BabylonJS DirectionalLight.diffuse.",horizontalAngle:"Directional light heading in the XZ plane. The editor converts it to BabylonJS DirectionalLight.direction.",elevationAngle:"Directional light elevation above the horizon; 90 degrees points straight down. The editor converts it to BabylonJS DirectionalLight.direction.",shadowSystem:"Read-only shadow system summary. Planar shadow direction follows this Directional Light; edit full settings in Rendering.",shadowEnabled:"Whether the project-level planar shadow system is enabled. This is summary-only in the light Inspector.",shadowOpacity:"Current project-level planar shadow opacity. Edit full settings in Rendering.",shadowLength:"Estimated planar shadow length multiplier from this light direction. Lower elevation makes longer shadows.",openShadows:"Switches the right dock to the Rendering panel for project-level shadow settings.",rawLight:"Read-only raw light data from the editor document."}}};function qb(e){return SM[e]??SM.zh}function Yb(e){return e.inspectorLanguage==="en"?"en":"zh"}function EM(e){let{createDocumentInspectorProperty:t,gameObject:r,light:n,nodeKind:o,normalizeValue:a}=e,i=Yb(n),s=qb(i),c=[t(null,o,{path:"light.inspectorLanguage",label:s.language,valueType:"enum",control:"enum",value:i,commitMode:"immediate",order:0,options:IM,controlOptions:{variant:"segmented"},tooltip:s.tooltips.language}),le({path:"light.type",label:s.type,value:n.type==="hemispheric"?s.typeHemispheric:s.typeDirectional,order:1,source:"Document",tooltip:s.tooltips.type}),t(null,o,{path:"light.intensity",label:s.intensity,valueType:"number",control:"number",value:n.intensity,commitMode:"live",order:2,min:0,step:.05,tooltip:s.tooltips.intensity})],d=3;if(n.type==="hemispheric")c.push(t(null,o,{path:"light.diffuseColor",label:s.skyLightColor,valueType:"color",control:"color",value:n.diffuseColor??{r:1,g:1,b:1},commitMode:"immediate",order:d,tooltip:s.tooltips.skyLightColor})),d+=1,c.push(t(null,o,{path:"light.groundColor",label:s.groundColor,valueType:"color",control:"color",value:n.groundColor??e.defaultEnvironmentGroundColor??{r:.48,g:.52,b:.62},commitMode:"immediate",order:d,tooltip:s.tooltips.groundColor})),d+=1;else{let l=Ob(r)??{horizontalAngleDeg:0,elevationAngleDeg:90};c.push(t(null,o,{path:Ei,label:s.horizontalAngle,valueType:"number",control:"number",value:l.horizontalAngleDeg,commitMode:"live",order:d,min:sx,max:cx,step:1,coerce:m=>a(Ei,m),tooltip:s.tooltips.horizontalAngle})),d+=1,c.push(t(null,o,{path:Ti,label:s.elevationAngle,valueType:"number",control:"number",value:l.elevationAngleDeg,commitMode:"live",order:d,min:kd,max:jd,step:1,coerce:m=>a(Ti,m),tooltip:s.tooltips.elevationAngle})),d+=1,c.push(t(null,o,{path:"light.diffuseColor",label:s.lightColor,valueType:"color",control:"color",value:n.diffuseColor??{r:1,g:1,b:1},commitMode:"immediate",order:d,tooltip:s.tooltips.lightColor})),d+=1}return RB(c,{path:"light.raw",label:s.rawLight,value:n??"defaults",order:c.length,source:"Document",tags:["Raw"],tooltip:s.tooltips.rawLight}),c}function TM(e){let t=e.renderingProfile.shadows.planar;return pa({id:"lightShadows",title:e.text.shadowsTitle,order:46,summary:e.text.shadowsSummary,collapsedByDefault:!1,tags:["Rendering","Derived"],properties:[le({path:"rendering.shadows.summary.system",label:e.text.shadowSystem,value:e.text.shadowFollowDirectional,order:0,source:"Document",tags:["Rendering"],tooltip:e.text.tooltips.shadowSystem,effect:"derived"}),le({path:"rendering.shadows.summary.enabled",label:e.text.shadowEnabled,value:t.enabled,order:1,source:"Document",tags:["Rendering"],tooltip:e.text.tooltips.shadowEnabled,effect:"derived"}),le({path:"rendering.shadows.summary.opacity",label:e.text.shadowOpacity,value:zr(t.appearance.color.a),order:2,source:"Document",tags:["Rendering"],tooltip:e.text.tooltips.shadowOpacity,effect:"derived"}),le({path:"rendering.shadows.summary.length",label:e.text.shadowLength,value:wB(lx(e.light.direction)),order:3,source:"Document",tags:["Rendering"],tooltip:e.text.tooltips.shadowLength,effect:"derived"}),CB(e.text)]})}function Jb(e){let t=qb(Yb(e.light)),r=[{id:"light",title:e.light.type==="hemispheric"?t.hemisphericTitle:t.directionalTitle,order:44,placement:"body",summary:e.light.type==="hemispheric"?t.hemisphericSummary:t.directionalSummary,persistence:"document",collapsedByDefault:!1,properties:EM(e)}];return e.light.type==="directional"&&r.push(TM({light:e.light,text:t,renderingProfile:OB(e.renderingProfile)})),r}function OB(e){return e&&typeof e=="object"&&"environment"in e&&"postProcess"in e&&"shadows"in e&&"renderingGroups"in e&&"shadowMeshes"in e?e:mt(e)}function RB(e,t){let r=le(t);r&&e.push(r)}function CB(e){return{path:"rendering.shadows.summary.open",label:e.openShadows,valueType:"string",control:"custom",customControl:"open-right-dock-tab",controlOptions:{targetTab:"rendering",label:e.openShadows,icon:"world"},value:e.openShadows,readOnly:!0,persistence:"readonly",commitMode:"immediate",order:4,tags:["Rendering"],tooltip:e.tooltips.openShadows,effect:"active"}}function wB(e){return`x${zr(e)}`}function Ut(e,t,r){let n=t.split(".").filter(Boolean);if(n.some(vB))return;let o=e;for(let i of n.slice(0,-1)){let s=o[i];(!s||typeof s!="object"||Array.isArray(s))&&(o[i]={}),o=o[i]}let a=n[n.length-1];a&&(r==null?delete o[a]:o[a]=structuredClone(r))}function vB(e){return e==="__proto__"||e==="prototype"||e==="constructor"}function Xb(e){let t=ba(e.overrides);if(!t)return;let r=AM(t.material);r?t.material=r:delete t.material;let n=ba(t.materialSlotBindings);if(n){for(let[i,s]of Object.entries(n)){let c=ba(s);if(!c){delete n[i];continue}let d=AM(c.override);d?c.override=d:delete c.override,Object.keys(c).length===0&&delete n[i]}Object.keys(n).length===0&&delete t.materialSlotBindings}let o=ba(t.childTransforms);o&&Object.keys(o).length===0&&delete t.childTransforms;let a=ba(t.childOutlines);a&&Object.keys(a).length===0&&delete t.childOutlines,Object.keys(t).length===0&&delete e.overrides}function AM(e){let t=ba(e);if(!t)return;let r=structuredClone(t);for(let n of["albedoTexture","normalTexture","metallicTexture"]){let o=ba(r[n]);o&&Object.keys(o).length===0&&delete r[n]}for(let n of["pbr","standard"]){let o=ba(r[n]);o&&Object.keys(o).length===0&&delete r[n]}return Object.keys(r).length>0?r:void 0}function ba(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function Di(e,t,r){let n=e.scene.gameObjects.find(a=>a.id===t);if(!n)return e;let o=_B(n,r);return JSON.stringify(o)===JSON.stringify(n)?e:{...e,scene:{...e.scene,gameObjects:e.scene.gameObjects.map(a=>a.id===t?o:a)}}}function _B(e,t){let r=PM(e),n=kB(e,t),o=PM(n);return r&&o&&!jB(r,o)?Ks(n):n}function kB(e,t){return ie(e)?{...e,components:e.components.map(r=>{if(r.type!=="Transform")return r;let n=r;return t.transform?wo(t.transform)??n:jt(n)?n:{...n,position:t.position??n.position,rotation:t.rotation??n.rotation,scale:t.scale??n.scale}})}:e}function PM(e){let t=ie(e);return t&&"rotation"in t?t.rotation:null}function jB(e,t,r=1e-6){return Math.abs(e.x-t.x)<=r&&Math.abs(e.y-t.y)<=r&&Math.abs(e.z-t.z)<=r}function xM(e){let t=new Set(e.targetIds);if(t.size===0||!Number.isFinite(e.fromAlphaIndex)||!Number.isFinite(e.toAlphaIndex)||e.fromAlphaIndex===e.toAlphaIndex)return e.gameObjects;let r=!1,n=e.gameObjects.map(o=>!t.has(o.id)||!NB(o,e)?o:(r=!0,{...o,rendering:{...o.rendering??{},alphaIndex:e.toAlphaIndex}}));return r?n:e.gameObjects}function Qb(e){let t=xM({gameObjects:e.document.scene.gameObjects,targetIds:e.targetIds,renderingGroupId:e.renderingGroupId,fromAlphaIndex:e.fromAlphaIndex,toAlphaIndex:e.toAlphaIndex});return t===e.document.scene.gameObjects?e.document:{...e.document,scene:{...e.document.scene,gameObjects:t}}}function NB(e,t){return(yb(e.rendering?.renderingGroupId)??0)===t.renderingGroupId&&XP(e.rendering?.alphaIndex)===t.fromAlphaIndex}var Zs=Vr,ec=Vm;function Zb(e){let t=Ur(e.document.scene.gameObjects.map(n=>n.name??n.id),e.name??e.asset.displayName,{fallbackName:e.asset.assetId}),r=Zs(e.document.scene.gameObjects.map(n=>n.id),ec(t));return{label:`Place ${e.asset.displayName}`,patch:{kind:"game-object.create-from-asset",assetItem:e.asset,...e.name?{name:e.name}:{},placement:{position:{...e.hit.position},rotation:{x:0,y:0,z:0},scale:{x:1,y:1,z:1}}},createdId:r,changedIds:[r]}}function MM(e){let t=e.scene.gameObjects.filter(r=>!!ct(r)||!!la(r)||!!r.primitive).length;return{x:t%5*1.8-3.6,y:0,z:Math.floor(t/5)*1.8+1.8}}function ey(e,t){let r=t&&ln(t)?t:null;return{position:r?.position?{...r.position}:MM(e),rotation:r?.rotation?{...r.rotation}:{x:0,y:0,z:0},scale:r?.scale?{...r.scale}:{x:1,y:1,z:1}}}function ty(e){return e.filter(t=>zB(t.kind)&&ny(t)).map(ry).sort(oy)}function Ud(e){return e.filter(t=>t.kind==="model"||t.kind==="texture").map(ry).sort(oy)}function ry(e){let t=e.kind==="texture"?"texture":e.kind==="prefab"?"prefab":"glb",r=Oi(e.guid),n=LB(e);return{id:e.assetId,...r?{guid:r}:{},assetId:e.assetId,type:t,kind:e.kind==="texture"?"texture":e.kind==="prefab"?"prefab":"model",displayName:e.displayName,category:e.category??GB(e),warmupCount:e.warmupCount,singleton:e.singleton,materialMode:e.materialMode,defaults:Xm(e.defaults),prefab:Xm(e.prefab),external:Xm(e.external),metadata:n,origin:e.origin??"project",dedupeKey:e.dedupeKey??r??BB(e.external)??e.assetId,placeable:ny(e)}}function OM(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let t=e;return t.kind==="texture"||t.type==="texture"}function ny(e){return OM(e)?!0:!e||typeof e!="object"||Array.isArray(e)||e.placeable!==!1}function oy(e,t){return(e.category??"").localeCompare(t.category??"")||e.displayName.localeCompare(t.displayName)||e.assetId.localeCompare(t.assetId)||e.type.localeCompare(t.type)}function GB(e){return e.kind==="prefab"?"Prefab":e.kind==="texture"?"Texture":e.kind==="image"?"Image":e.kind==="sound"?"Sound":"Model"}function LB(e){return FB({originalFileName:e.originalFileName,relativePath:e.relativePath,codeKey:e.codeKey,contentHash:e.contentHash,byteSize:e.byteSize,...Xm(e.metadata)})}function FB(e){if(!Array.isArray(e.materialSlots))return e;let t=Jm(e.assetAnalysis),r=Array.isArray(t?.meshes)?t.meshes:[],n=Array.isArray(t?.nodes)?t.nodes:[],o=new Map(r.flatMap(c=>{let d=Jm(c),u=Vd(d?.meshIndex),l=Oi(d?.name);return u==null||!l?[]:[[u,l]]})),a=new Map(n.flatMap(c=>{let d=Jm(c),u=Vd(d?.nodeIndex),l=Oi(d?.meshName);return u==null||!l?[]:[[u,l]]})),i=DM(t,"meshCount",r.length)||DM(t,"nodeCount",n.length),s=e.materialSlots.map(c=>{let d=Jm(c);if(!d||Oi(d.sourceMeshName))return c;let u=Vd(d.meshIndex);if(u==null)return c;let l=Vd(d.nodeIndex),m=o.get(u)??(l==null?void 0:a.get(l))??(i?$B(d):void 0);return m?{...d,sourceMeshName:m}:c});return{...e,materialSlots:s}}function $B(e){let t=Oi(e.label);if(t){let r=t.replace(/\s+\/\s+Primitive\s+\d+$/,"").trim();if(r)return r}return Oi(e.ownerNodePath)?.split("/").filter(Boolean).pop()}function DM(e,t,r){let n=Vd(e?.[t]);return n!=null&&n>r}function BB(e){return!e||typeof e!="object"||Array.isArray(e)?null:Oi(e.platformAssetId)}function Oi(e){return typeof e=="string"&&e.trim()?e.trim():null}function Vd(e){return Number.isInteger(e)&&e>=0?e:null}function Jm(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:void 0}function Xm(e){return e==null?void 0:structuredClone(e)}function zB(e){return e==="model"||e==="prefab"||e==="texture"}function ay(e,t){let r=new Map(t.filter(a=>a.type==="glb").map(a=>[a.assetId,a])),n=e.assets.map(a=>{if(a.type!=="glb")return a;let i=r.get(a.id);return i?ya(a,i):a}),o=new Set(e.assets.map(a=>a.id));for(let a of VB(e)){if(o.has(a))continue;let i=r.get(a);i&&(n.push(ya({id:a,type:"glb"},i)),o.add(a))}return{...e,assets:n}}function VB(e){let t=[],r=new Set,n=o=>{let a=Hr(o);!a||r.has(a)||(r.add(a),t.push(a))};for(let o of e.assets)if(o.type==="prefab"){n(o.prefab?.sourceAssetId);for(let a of o.prefab?.nodes??[])n(a.sourceAssetId)}for(let o of e.scene.gameObjects){for(let i of o.components)i.type==="ModelRenderer"&&n(i.assetId);n(o.prefab?.sourceAssetId);let a=Sn(Sn(o)?.instance);n(a?.assetId)}return t}function iy(e,t){Hd(e,t);let r=new Map(t.filter(n=>n.type==="glb").map(n=>[n.assetId,n]));return{...e,assets:e.assets.map(n=>{if(n.type!=="glb")return structuredClone(n);let o=r.get(n.id);if(!o)throw new Error(`asset.catalog.missing: ${n.id}`);let a=o.guid??n.guid;return{id:n.id,...a?{guid:a}:{},type:"glb"}})}}function Hd(e,t){let r=new Map(t.filter(n=>n.type==="glb").map(n=>[n.assetId,n]));for(let n of e.assets){if(n.type!=="glb")continue;let o=r.get(n.id);if(!o)throw new Error(`asset.catalog.missing: ${n.id}`);KB(n,o),HB(n,o),UB(o)}}function UB(e){let t=Sn(e.metadata),r=Sn(e.external);if(!(Hr(t?.url)??Hr(t?.relativePath)??Hr(r?.assetUrl)))throw new Error(`asset.catalog.incomplete: ${e.assetId}.url`);let o=Sn(t?.assetAnalysis),a=t?.assetAnalysisStatus==="unavailable";if(!o&&!a)throw new Error(`asset.catalog.incomplete: ${e.assetId}.metadata.assetAnalysisStatus`);let i=new Map((Array.isArray(o?.meshes)?o.meshes:[]).flatMap(c=>{let d=Sn(c),u=d?.meshIndex,l=Number.isInteger(u)?u:void 0,m=Hr(d?.name);return l==null||!m?[]:[[l,m]]})),s=Array.isArray(t?.materialSlots)?t.materialSlots:[];for(let[c,d]of s.entries()){let u=Sn(d);if(!u)throw new Error(`asset.catalog.incomplete: ${e.assetId}.metadata.materialSlots[${c}]`);let l=Number.isInteger(u.meshIndex)?u.meshIndex:void 0;if(l!=null&&!Hr(u.sourceMeshName)&&!i.has(l))throw new Error(`asset.catalog.incomplete: ${e.assetId}.metadata.materialSlots[${c}].sourceMeshName`)}}function HB(e,t){let r=Sn(e.metadata),n=Sn(t.metadata),o=Sn(e.external),a=Sn(t.external),i=Hr(r?.url)??Hr(r?.relativePath)??Hr(o?.assetUrl),s=Hr(n?.url)??Hr(n?.relativePath)??Hr(a?.assetUrl);if(i&&!s)throw new Error(`asset.catalog.incomplete: ${e.id}.url`);for(let c of["materialSlots","assetAnalysis"])if(r?.[c]!==void 0&&n?.[c]===void 0)throw new Error(`asset.catalog.incomplete: ${e.id}.metadata.${c}`)}function KB(e,t){for(let r of["materialMode","defaults","external","warmupCount","singleton"])if(e[r]!==void 0&&t[r]===void 0)throw new Error(`asset.catalog.incomplete: ${e.id}.${r}`)}function ya(e,t){return{...e,guid:t.guid??e.guid,displayName:t.displayName||e.displayName,category:t.category??e.category,warmupCount:t.warmupCount??e.warmupCount,singleton:t.singleton??e.singleton,materialMode:t.materialMode??e.materialMode,defaults:Qm(t.defaults??e.defaults),prefab:Qm(t.prefab??e.prefab),external:Qm(t.external??e.external),metadata:Qm(t.metadata??e.metadata)}}function Qm(e){return e==null?void 0:structuredClone(e)}function Sn(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:void 0}function Hr(e){return(typeof e=="string"?e.trim():"")||void 0}function Kd(e,t=[]){return e?.system?.readonly===!0||e?.system?.preset==="default-pbr"||e?.system?.preset==="default-standard"||!!e&&t.includes(e.id)}function WB(e){let t=structuredClone(e??{});return Ri(t.baseColor,"texture"),t.baseColor&&Object.keys(t.baseColor).length===0&&delete t.baseColor,Ri(t.normal,"texture"),t.normal&&Object.keys(t.normal).length===0&&delete t.normal,Ri(t.metallicRoughness,"texture"),t.metallicRoughness&&Object.keys(t.metallicRoughness).length===0&&delete t.metallicRoughness,Ri(t.occlusion,"texture"),t.occlusion&&Object.keys(t.occlusion).length===0&&delete t.occlusion,t.emission&&(Ri(t.emission,"texture"),Ri(t.emission,"maskTexture"),Object.keys(t.emission).length===0&&delete t.emission),Ri(t.alpha,"texture"),t.alpha&&Object.keys(t.alpha).length===0&&delete t.alpha,t}function Ri(e,t){if(!e)return;let r=e,n=r[t];if(n===null||!n||typeof n!="object"||Array.isArray(n))return;let o=n,a=typeof o.url=="string"?o.url.trim():"",i=typeof o.textureAssetId=="string"?o.textureAssetId.trim():"";a?o.url=a:delete o.url,i?o.textureAssetId=i:delete o.textureAssetId,Object.keys(o).length===0&&delete r[t]}function RM(e,t,r,n){if(e.system?.readonly===!0)return e;let o=Fr(t,r);if(!Oo(t,o,e.shaderId,n))return e;let a=structuredClone(e);if(t==="name")return typeof o!="string"?e:(a.name=o.trim(),a.name===e.name?e:a);if(!t.startsWith("properties."))return e;let i=t.slice(11);return!i||(a.properties=structuredClone(a.properties),qB(a.properties,i,o)||Ut(a.properties,i,o),fr(a.shaderId)&&(a.properties=WB(a.properties)),js(a.shaderId,a.properties,"properties",n).length>0)||JSON.stringify(a)===JSON.stringify(e)?e:a}function qB(e,t,r){let n=t.endsWith(".textureAssetId")?"textureAssetId":t.endsWith(".url")?"url":null;if(!n)return!1;let o=t.slice(0,-`.${n}`.length);if(!o.endsWith(".texture")&&!o.endsWith(".maskTexture"))return!1;let a=o.split(".").filter(Boolean);if(a.length<2)return!1;let i=a[a.length-1],s=e;for(let u of a.slice(0,-1)){let l=s[u];if(!l||typeof l!="object"||Array.isArray(l)){if(r==null)return!0;let m={};s[u]=m,s=m;continue}s=l}if(r==null)return s[i]=null,!0;let c=s[i],d=c&&typeof c=="object"&&!Array.isArray(c)?{...c}:{};return d[n]=r,delete d[n==="url"?"textureAssetId":"url"],s[i]=d,!0}var Ci="mat_default_pbr",tc="mat_default_standard",YB="00000000-0000-4000-8000-000000000001",JB="00000000-0000-4000-8000-000000000002",wi=Ci,sy={id:Ci,guid:YB,name:"Default PBR Material",shaderId:"fps.builtin.pbr",definitionVersion:1,system:{readonly:!0,preset:"default-pbr"},origin:{type:"preset"},properties:Fh("fps.builtin.pbr")},XB={id:tc,guid:JB,name:"Default Standard Material",shaderId:"fps.builtin.standard",definitionVersion:1,system:{readonly:!0,preset:"default-standard"},origin:{type:"preset"},properties:Fh("fps.builtin.standard")};function QB(){return structuredClone(sy)}function ZB(){return structuredClone(XB)}function CM(e){let t=[QB(),ZB()],r=new Set(t.map(o=>o.id)),n=[...t,...e.filter(o=>!r.has(o.id))];return JSON.stringify(n)===JSON.stringify(e)?e:n}function wM(e){return e?.system?.preset==="default-pbr"||e?.id===Ci?"default-pbr":e?.system?.preset==="default-standard"||e?.id===tc?"default-standard":null}function cy(e){let t=structuredClone(sy.properties);if(!e||typeof e!="object")return t;let r={...t,...structuredClone(e)};return r.baseColor={...t.baseColor??{},...e.baseColor??{}},(t.normal||e.normal)&&(r.normal={...t.normal??{},...e.normal??{}}),(t.metallicRoughness||e.metallicRoughness)&&(r.metallicRoughness={...t.metallicRoughness??{},...e.metallicRoughness??{}}),(t.occlusion||e.occlusion)&&(r.occlusion={...t.occlusion??{},...e.occlusion??{}}),r.emission={...t.emission??{},...e.emission??{}},(t.alpha||e.alpha)&&(r.alpha={...t.alpha??{},...e.alpha??{}}),r}function vi(e,t){let r=[...new Set(e.sourceSurfaces.map(s=>s.sourceMaterialIndex).filter(s=>Number.isInteger(s)))],n=e.materialNames??[],o=r.findIndex(s=>s===t),a=o>=0?n[o]??(r.length===1?e.materialName:null):null;if(typeof a=="string"&&a.trim())return a.trim();let i=rc(e,t)?.materialName;return typeof i=="string"&&i.trim()?i.trim():null}function rc(e,t){return e.sourceMaterialProfiles?.find(r=>r.sourceMaterialIndex===t)??null}var dy=[Ci,tc],ez="New Material";function vM(e,t,r=`${t.displayName} Material`){let n=ly(e);return{id:Ls(n),guid:n,name:jM(e,r),shaderId:t.shaderId,definitionVersion:t.version,origin:{type:"created"},properties:structuredClone(t.defaultProperties)}}function tz(e,t,r){let n=t.name?.trim()||t.id,o=r.name?.trim()||r.id,a=ly(e);return{id:Ls(a),guid:a,name:`${n} - ${o}`,shaderId:r.shaderId,...r.definitionVersion!=null?{definitionVersion:r.definitionVersion}:{},origin:{type:"duplicated",sourceMaterialAssetId:r.id},properties:structuredClone(r.properties)}}function _M(e,t,r){let n=t.name?.trim()||t.id,o=ly(e);return{id:Ls(o),guid:o,name:jM(e,r??`${n} Copy`),shaderId:t.shaderId,...t.definitionVersion!=null?{definitionVersion:t.definitionVersion}:{},origin:{type:"duplicated",sourceMaterialAssetId:t.id},properties:structuredClone(t.properties)}}function kM(e,t,r){let n=t.trim(),o=e.scene.materialAssets?.findIndex(s=>s.id===n)??-1;if(o<0||r.id!==n)return e;let a=e.scene.materialAssets[o];if(JSON.stringify(a)===JSON.stringify(r))return e;let i=[...e.scene.materialAssets];return i[o]=structuredClone(r),{...e,scene:{...e.scene,materialAssets:i}}}function ly(e){let t=new Set((e.scene.materialAssets??[]).map(o=>o.id)),r=sb(),n=Ls(r);for(;t.has(n);)r=sb(),n=Ls(r);return r}function jM(e,t){let r=Fr("name",t),n=typeof r=="string"&&Oo("name",r)?r:ez,o=new Set((e.scene.materialAssets??[]).map(s=>s.name?.trim()).filter(s=>!!s).map(s=>s.toLocaleLowerCase()));if(!o.has(n.toLocaleLowerCase()))return n;let a=2,i=`${n} ${a}`;for(;o.has(i.toLocaleLowerCase());)a+=1,i=`${n} ${a}`;return i}function NM(e){let t=Xe(e.document,e.sourceMaterialAssetId);if(!t||e.isBindingPathAllowed&&!e.isBindingPathAllowed(e.bindingPath))return null;let r=tz(e.document,e.gameObject,t);return{patch:{kind:"scene.material-asset.create-and-bind",targetId:e.gameObject.id,bindingPath:e.bindingPath,materialAsset:r},changedId:e.gameObject.id,changedIds:[e.gameObject.id],createdId:r.id,reprojectIds:[e.gameObject.id]}}function uy(e,t,r,n,o){let a=e.scene.materialAssets??[],i=!1,s=a.map(c=>{if(c.id!==t)return c;let d=RM(c,r,Fr(r,n),o);return i=i||d!==c,d});return i?{...e,scene:{...e.scene,materialAssets:s}}:e}function GM(e,t,r=[]){let n=Xe(e,t),o=lb(e,t);return n?Kd(n,r)?{ok:!1,reason:"readonly",materialAsset:n,usages:o}:o.length>0?{ok:!1,reason:"in-use",materialAsset:n,usages:o}:{ok:!0,materialAsset:n,usages:o}:{ok:!1,reason:"missing",usages:o}}function LM(e,t){return GM(e,t,dy)}function rz(e,t,r=[]){return GM(e,t,r).ok?{...e,scene:{...e.scene,materialAssets:(e.scene.materialAssets??[]).filter(o=>o.id!==t)}}:e}function my(e){return Kd(e,dy)}function FM(e,t){return rz(e,t,dy)}function Zm(e,t){return Hn(e,t.id)?e:{...e,scene:{...e.scene,materialAssets:[...e.scene.materialAssets??[],structuredClone(t)]}}}function $M(e,t,r,n){return Hn(e,n.id)?e:nz({...e,scene:{...e.scene,materialAssets:[...e.scene.materialAssets??[],structuredClone(n)]}},t,r,n.id)}function nz(e,t,r,n){return{...e,scene:{...e.scene,gameObjects:e.scene.gameObjects.map(o=>{if(o.id!==t)return o;let a=structuredClone(o);return oz(a,r,n),a})}}}function oz(e,t,r){let n=az(t)??t.split(".").filter(Boolean);if(n.some(iz))return;let o=e;for(let i of n.slice(0,-1)){let s=o[i];(!s||typeof s!="object"||Array.isArray(s))&&(o[i]={}),o=o[i]}let a=n[n.length-1];a&&(r==null?delete o[a]:o[a]=structuredClone(r))}function az(e){let t=Vn(e,"materialAssetId");return t?["overrides","materialSlotBindings",t,"materialAssetId"]:null}function iz(e){return e==="__proto__"||e==="prototype"||e==="constructor"}function tp(e,t){let r=ct(t),n=r?e.assets.find(g=>g.id===r.assetId):null,o=typeof n?.guid=="string"&&n.guid.trim()?n.guid.trim():n?.id,a=Fs(e,t),i=new Map(a.filter(g=>!!g.slotId).map(g=>[g.slotId,g])),s=t.overrides?.materialSlotBindings??{},c=sz({document:e,assetId:n?.id,assetGuid:o,currentSlots:a,materialSlotBindings:s}),d=c.remaps,u=new Map(d.map(g=>[g.toSlotId,g])),l=new Set([...d.map(g=>g.fromSlotId),...c.coalescedSourceSlotIds]),m=new Map;for(let[g,f]of Object.entries(s))!f||l.has(g)||m.set(g,f);for(let g of d){let f=s[g.fromSlotId];f&&m.set(g.toSlotId,f)}let p=[];for(let[g,f]of a.entries()){let y=f.slotId?m.get(f.slotId):void 0,A=nc(y),T=A?Xe(e,A):null,D=zM(f),P=D[0],C=f.slotId?u.get(f.slotId):void 0;if(C){p.push({status:"changed",reason:"slot-remapped",...f.slotId?{slotId:f.slotId}:{},previousSlotId:C.fromSlotId,ownerNodePath:Kn(f)??void 0,label:ep(f,g),...P==null?{}:{sourceMaterialIndex:P},...D.length>0?{sourceMaterialIndices:D}:{},materialAssetId:A,bindingPath:`overrides.materialSlotBindings.${f.slotId}.materialAssetId`,conflict:!1});continue}let E=VM(T,o,n?.id)?.sourceMaterialIndex;if(E!=null&&D.length>0&&!D.includes(E)){p.push(BM({status:"changed",reason:"source-material-changed",...f.slotId?{slotId:f.slotId}:{},ownerNodePath:Kn(f)??void 0,label:ep(f,g),...P==null?{}:{sourceMaterialIndex:P},...D.length>0?{sourceMaterialIndices:D}:{},previousSourceMaterialIndex:E,...A?{materialAssetId:A}:{},bindingPath:f.slotId?`overrides.materialSlotBindings.${f.slotId}.materialAssetId`:""}));continue}if(!A&&D.length>0){p.push({status:"unchanged",reason:"slot-current",...f.slotId?{slotId:f.slotId}:{},ownerNodePath:Kn(f)??void 0,label:ep(f,g),...P==null?{}:{sourceMaterialIndex:P},...D.length>0?{sourceMaterialIndices:D}:{},bindingPath:f.slotId?`overrides.materialSlotBindings.${f.slotId}.materialAssetId`:"",conflict:!1});continue}p.push({status:"unchanged",reason:"slot-current",...f.slotId?{slotId:f.slotId}:{},ownerNodePath:Kn(f)??void 0,label:ep(f,g),...P==null?{}:{sourceMaterialIndex:P},...D.length>0?{sourceMaterialIndices:D}:{},...A?{materialAssetId:A}:{},bindingPath:f.slotId?`overrides.materialSlotBindings.${f.slotId}.materialAssetId`:"",conflict:!1})}for(let[g,f]of Object.entries(s))!f||i.has(g)||l.has(g)||p.push(BM({status:"removed",reason:"slot-removed",slotId:g,...nc(f)?{materialAssetId:nc(f)}:{},bindingPath:`overrides.materialSlotBindings.${g}.materialAssetId`}));let h=p.filter(dz);return{gameObjectId:t.id,...t.name?{gameObjectName:t.name}:{},...n?.id?{assetId:n.id}:{},...o?{assetGuid:o}:{},ok:h.length===0,items:p,issues:h,bindingRemaps:d,bindingRemapIssues:c.issues,counts:lz(p)}}function sz(e){let t=new Set(e.currentSlots.map(d=>d.slotId).filter(d=>!!d)),r=new Set(Object.keys(e.materialSlotBindings).filter(d=>t.has(d))),n=[],o=[],a=new Map;for(let[d,u]of Object.entries(e.materialSlotBindings)){if(!u||t.has(d))continue;let l=nc(u),m=l?Xe(e.document,l):null,p=VM(m,e.assetGuid,e.assetId);if(!p){o.push({fromSlotId:d,materialAssetId:l,reason:"binding-unmatched",candidateSlotIds:[]});continue}let h=e.currentSlots.filter(g=>!!g.slotId&&zM(g).includes(p.sourceMaterialIndex)).map(g=>g.slotId);a.set(d,{materialAssetId:l,candidateSlotIds:h,binding:u,anchored:p.sourceSlotId===d})}let i=new Map;for(let[d,u]of a){if(u.candidateSlotIds.length!==1)continue;let[l]=u.candidateSlotIds,m=i.get(l)??[];m.push(d),i.set(l,m)}let s=new Set,c=new Set;for(let[d,u]of i){u.forEach(g=>c.add(g));let l=u.filter(g=>a.get(g)?.anchored).sort((g,f)=>g.localeCompare(f));if(l.length===0){for(let g of u){let f=a.get(g);o.push({fromSlotId:g,materialAssetId:f.materialAssetId,reason:"binding-unmatched",candidateSlotIds:[]})}continue}let m=l[0],p=a.get(m);if(!u.every(g=>cz(p.binding,a.get(g).binding))||r.has(d)){for(let g of u){let f=a.get(g);o.push({fromSlotId:g,materialAssetId:f.materialAssetId,reason:"binding-ambiguous",candidateSlotIds:[d]})}continue}r.add(d),n.push({fromSlotId:m,toSlotId:d,materialAssetId:p.materialAssetId,reason:"source-material-index"});for(let g of u)g!==m&&s.add(g)}for(let[d,u]of a)c.has(d)||o.push({fromSlotId:d,materialAssetId:u.materialAssetId,reason:u.anchored&&u.candidateSlotIds.length>0?"binding-ambiguous":"binding-unmatched",candidateSlotIds:u.anchored?u.candidateSlotIds:[]});return{remaps:n,issues:o,coalescedSourceSlotIds:[...s].sort((d,u)=>d.localeCompare(u))}}function cz(e,t){return nc(e)===nc(t)&&py(e.override,t.override)}function py(e,t){if(Object.is(e,t))return!0;if(Array.isArray(e)||Array.isArray(t))return Array.isArray(e)&&Array.isArray(t)&&e.length===t.length&&e.every((i,s)=>py(i,t[s]));if(!e||!t||typeof e!="object"||typeof t!="object")return!1;let r=e,n=t,o=Object.keys(r).sort(),a=Object.keys(n).sort();return o.length===a.length&&o.every((i,s)=>i===a[s]&&py(r[i],n[i]))}function zM(e){return $r(e)}function VM(e,t,r){if(e?.origin?.type!=="imported")return null;let n=e.origin.sourceMaterialIndex;if(typeof n!="number"||!Number.isInteger(n))return null;let o=e.origin.sourceAssetGuid,a=e.origin.sourceAssetId;if((o||a)&&!(!!t&&!!o&&o===t)&&!(!!r&&!!a&&a===r)||!o&&!a&&(t||r))return null;let c=typeof e.origin.sourceSlotId=="string"&&e.origin.sourceSlotId.trim()?e.origin.sourceSlotId.trim():void 0;return{sourceMaterialIndex:n,...c?{sourceSlotId:c}:{}}}function ep(e,t){return e.label?.trim()||Kn(e)?.trim()||e.slotId?.trim()||`Slot ${t+1}`}function nc(e){return typeof e?.materialAssetId=="string"?e.materialAssetId.trim():""}function BM(e){return{...e,conflict:!0}}function dz(e){return e.conflict}function lz(e){return e.reduce((t,r)=>(t[r.status]+=1,t),{unchanged:0,added:0,removed:0,changed:0,conflict:0})}function rp(e){let t=Tm(e);if(t.ok)return;let r=new Error(`editor_scene_material_assets_missing: ${t.missingMaterialAssetIds.join(", ")}`);throw r.details={missingMaterialAssetIds:t.missingMaterialAssetIds,missingReferences:t.missingReferences.map(n=>({materialAssetId:n.materialAssetId,gameObjectId:n.gameObjectId,bindingPath:n.bindingPath,label:n.label,kind:n.kind,...n.slotId?{slotId:n.slotId}:{},...n.ownerNodePath?{ownerNodePath:n.ownerNodePath}:{}}))},r}function uz(e,t){let r=!1;return{gameObjects:t.map(o=>{let a=tp(e,o),i=ct(o),s=i?e.assets.find(u=>u.id===i.assetId):null,c=Array.isArray(s?.metadata?.materialSlots)?Fs(e,o):null;if(a.bindingRemaps.length===0&&c==null)return o;let d=o;for(let u of a.bindingRemaps){let l=d.overrides?.materialSlotBindings?.[u.fromSlotId];!l||d.overrides?.materialSlotBindings?.[u.toSlotId]||(d=structuredClone(d),d.overrides=d.overrides??{},d.overrides.materialSlotBindings=d.overrides.materialSlotBindings??{},d.overrides.materialSlotBindings[u.toSlotId]=structuredClone(l),delete d.overrides.materialSlotBindings[u.fromSlotId],Object.keys(d.overrides.materialSlotBindings).length===0&&delete d.overrides.materialSlotBindings,r=!0)}if(c!=null){let u=new Set(c.map(l=>l.slotId).filter(l=>!!l));for(let l of Object.keys(d.overrides?.materialSlotBindings??{}))u.has(l)||(d===o&&(d=structuredClone(o)),d.overrides?.materialSlotBindings&&(delete d.overrides.materialSlotBindings[l],Object.keys(d.overrides.materialSlotBindings).length===0&&delete d.overrides.materialSlotBindings,r=!0))}return d}),changed:r}}function mz(e,t,r){let n=!1,o=new Map(t.filter(l=>l.origin?.type==="imported").map(l=>[l.id,l]));if(o.size===0)return{materialAssets:t,gameObjects:r,changed:!1};let a=new Map(e.assets.map(l=>[l.id,l])),i={...e,scene:{...e.scene,materialAssets:t,gameObjects:r}},s=r.map(l=>{let m=ct(l);if(!m)return l;let p=a.get(m.assetId);if(!p)return l;let h=Ro(i,l,a),g=l;for(let f of h){let y=g.overrides?.materialSlotBindings?.[f.slotId],A=y?.materialAssetId?o.get(y.materialAssetId):null;if(!A||!pz(A,p))continue;let T=A.origin?.sourceMaterialIndex;if(!Number.isInteger(T)||!$r(f).includes(T))continue;g===l&&(g=structuredClone(l));let D=g.overrides?.materialSlotBindings;D&&(delete D[f.slotId],Object.keys(D).length===0&&delete g.overrides.materialSlotBindings,Object.keys(g.overrides??{}).length===0&&delete g.overrides,n=!0)}return g}),c={...i,scene:{...i.scene,gameObjects:s}},d=new Set(fi(c).map(l=>l.materialAssetId)),u=t.filter(l=>l.origin?.type!=="imported"||d.has(l.id));return n=n||u.length!==t.length,{materialAssets:u,gameObjects:s,changed:n}}function UM(e,t,r){let n=uz({...e,scene:{...e.scene,materialAssets:t,gameObjects:r}},r),o=mz(e,t,n.gameObjects);return{materialAssets:o.materialAssets,gameObjects:o.gameObjects,changed:n.changed||o.changed}}function pz(e,t){let r=e.origin;return r?.type!=="imported"?!1:r.sourceAssetId===t.id||!!r.sourceAssetGuid&&!!t.guid&&r.sourceAssetGuid===t.guid}function HM(e,t){let r=new Set,n=e.properties,o=_i(n)?n:{},a=_i(t.defaultProperties)?t.defaultProperties:{},i=KM(t.propertiesSchema,o,a,"properties",r),s=new Set;WM(o,"properties",s);let c=[...s].filter(d=>!r.has(d)).sort();return{materialAsset:{...structuredClone(e),shaderId:t.shaderId,definitionVersion:t.version,properties:i},preservedPaths:[...r].sort(),resetPaths:c}}function KM(e,t,r,n,o){if(e.kind!=="object")return fz(e,t)?(o.add(n),structuredClone(t)):structuredClone(r);let a=_i(t)?t:{},i=_i(r)?r:{},s={};for(let[c,d]of Object.entries(e.properties)){let u=Object.prototype.hasOwnProperty.call(a,c),l=Object.prototype.hasOwnProperty.call(i,c);if(!u&&!l)continue;let m=KM(d,u?a[c]:void 0,l?i[c]:void 0,`${n}.${c}`,o);m!==void 0&&(s[c]=m)}return s}function fz(e,t){if(e.kind==="number")return typeof t=="number"&&Number.isFinite(t)&&(e.min==null||t>=e.min)&&(e.max==null||t<=e.max);if(e.kind==="boolean")return typeof t=="boolean";if(e.kind==="string")return typeof t=="string"||t===null&&e.nullable===!0;if(e.kind==="enum")return typeof t=="string"&&e.values.includes(t);if(e.kind==="color")return fy(t,e.channels===4?["r","g","b","a"]:["r","g","b"]);if(e.kind==="vec2")return fy(t,["x","y"]);if(e.kind==="vec3")return fy(t,["x","y","z"]);if(t===null)return!0;if(!_i(t))return!1;let r=Object.keys(t);return r.every(n=>n==="url"||n==="textureAssetId")&&r.every(n=>typeof t[n]=="string"&&!!t[n].trim())}function WM(e,t,r){for(let[n,o]of Object.entries(e)){let a=`${t}.${n}`;_i(o)&&!gz(o)?WM(o,a,r):r.add(a)}}function gz(e){let t=Object.keys(e);return t.length===0?!0:t.every(r=>["r","g","b","a"].includes(r))||t.every(r=>["x","y","z"].includes(r))||t.every(r=>r==="url"||r==="textureAssetId")}function fy(e,t){return _i(e)&&Object.keys(e).length===t.length&&t.every(r=>typeof e[r]=="number"&&Number.isFinite(e[r]))}function _i(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function hz(e){return e?.system?.preset}function YM(e,t){let r=hz(e);return r==="default-pbr"?t.defaultMaterial:r==="default-standard"?t.defaultStandardMaterial:e.name||e.id}function np(e,t){let r=t.trim();return r?e?.find(n=>n.url===r||n.id===r)??null:null}function qM(e,t){return{kind:"image",url:e.url,alt:e.label,fit:"contain",...t?{resourceStatusText:{loading:t.loadingTexture,failed:t.failedTexture}}:{}}}function JM(e){let t=e.currentTexture??np(e.textureAssets,e.currentValue),r=e.currentValue.trim(),n=!!r&&!t,o=!!t&&!t.disabled&&!!t.url.trim(),a=n?"missing":t?o?"ready":"failed":void 0,i=e.candidateValue??"url",s=(e.textureAssets??[]).filter(bz);return{pickerKind:"texture",pickerTitle:e.pickerText.texturePickerTitle,pickerTrigger:"preview",placeholder:e.pickerText.emptyTexture,currentLabel:n?e.pickerText.missingTexture:t?.label??(r||e.pickerText.emptyTexture),currentMeta:n?`${e.pickerText.missingTextureMeta} \xB7 ${r}`:t?.previewUnavailableReason??t?.meta??(r||e.pickerText.emptyTextureMeta),...a?{currentResourceState:a}:{},...r?{currentResourceReference:r}:{},resourceStatusText:{missing:e.pickerText.missingTexture,loading:e.pickerText.loadingTexture,failed:e.pickerText.failedTexture},currentPreview:o?qM(t,e.pickerText):void 0,candidates:[{label:e.pickerText.clearTexture,value:"",meta:e.pickerText.clearTextureMeta},...s.map(c=>({label:c.label,value:i==="assetId"?c.id:c.url,meta:c.meta??c.id,kind:"texture",...typeof c.width=="number"?{width:c.width}:{},...typeof c.height=="number"?{height:c.height}:{},...!c.disabled&&c.url.trim()?{preview:qM(c,e.pickerText)}:{},...c.disabled?{disabled:!0,disabledReason:c.disabledReason}:{}}))]}}function bz(e){return e.capabilities?.materialTexture===!0?!0:e.capabilities?.materialTexture===!1?!1:e.usage!=="environment"}function XM(e){return{path:`${e.pathPrefix??Do}${e.materialAsset.id}.${e.fieldPath}`,label:e.label,valueType:e.valueType,control:e.control,value:e.value,readOnly:!1,persistence:"document",commitMode:e.commitMode,order:e.order,tooltip:e.tooltip,tags:e.tags??["ArtistMaterial","MaterialAsset"],document:e.document}}var QM={zh:{title:"\u7F8E\u672F\u6750\u8D28",slotTitle:"\u6750\u8D28\u63D2\u69FD",language:"\u8BED\u8A00",materialAsset:"\u6750\u8D28\u8D44\u4EA7",materialCard:"\u5F53\u524D\u6750\u8D28",inheritNone:"\u7EE7\u627F / \u65E0",defaultMaterial:"\u9ED8\u8BA4 PBR \u6750\u8D28",defaultMaterialMeta:"BabylonJS \u9ED8\u8BA4 PBR \u6750\u8D28",defaultStandardMaterial:"\u9ED8\u8BA4 Standard \u6750\u8D28",defaultStandardMaterialMeta:"BabylonJS \u9ED8\u8BA4 Standard \u6750\u8D28",defaultMaterialReadOnly:"\u7CFB\u7EDF\u9ED8\u8BA4\u6750\u8D28\u4E3A\u53EA\u8BFB\uFF1B\u8BF7\u9009\u62E9\u53EF\u7F16\u8F91\u6750\u8D28\u7403\u540E\u8C03\u6574\u53C2\u6570\u3002",replace:"\u66FF\u6362",batchReplaceUnsupported:"\u591A\u9009\u7EDF\u4E00\u66FF\u6362\u6750\u8D28\u6682\u672A\u63A5\u5165\uFF1B\u8BF7\u5148\u5355\u9009\u5BF9\u8C61\u66FF\u6362\u6750\u8D28\u3002",duplicateForObject:"\u590D\u5236",materialPickerTitle:"\u9009\u62E9\u6750\u8D28\u8D44\u4EA7",texturePickerTitle:"\u9009\u62E9\u8D34\u56FE\u8D44\u4EA7",emptyTexture:"\u9009\u62E9\u8D34\u56FE",emptyTextureMeta:"\u70B9\u51FB\u9009\u62E9\u8D34\u56FE\u8D44\u4EA7",clearTexture:"\u6E05\u9664\u8D34\u56FE",clearTextureMeta:"\u4E0D\u4F7F\u7528\u8D34\u56FE",missingTexture:"\u8D34\u56FE\u8D44\u4EA7\u7F3A\u5931",missingTextureMeta:"\u5F53\u524D\u5F15\u7528\u65E0\u6CD5\u5728\u9879\u76EE\u8D44\u4EA7\u5E93\u4E2D\u89E3\u6790",loadingTexture:"\u6B63\u5728\u52A0\u8F7D\u8D34\u56FE",failedTexture:"\u8D34\u56FE\u52A0\u8F7D\u5931\u8D25",assetProfile:"\u8D44\u4EA7\u53C2\u6570",assetProfileEmpty:"\u9009\u62E9\u6750\u8D28\u8D44\u4EA7\u540E\u53EF\u7F16\u8F91\u8D44\u4EA7\u53C2\u6570",assetName:"\u8D44\u4EA7\u540D\u79F0",assetKind:"Shader",assetKindPbr:"PBR \u6807\u51C6\u6750\u8D28\u7403",assetKindStandard:"Standard \u6807\u51C6\u6750\u8D28\u7403",assetLightingModel:"\u5149\u7167\u6A21\u578B",assetLightingModelLit:"\u53D7\u5149\u7167",assetLightingModelUnlit:"\u4E0D\u53D7\u5149\u7167",assetBaseColor:"\u57FA\u7840\u8272",assetBaseTexture:"\u57FA\u7840\u8D34\u56FE",assetBrightness:"\u8D34\u56FE\u4EAE\u5EA6",assetSaturation:"\u8D34\u56FE\u9971\u548C\u5EA6",assetContrast:"\u8D34\u56FE\u5BF9\u6BD4\u5EA6",assetHue:"\u8D34\u56FE\u8272\u76F8",assetNormalTexture:"\u6CD5\u7EBF\u8D34\u56FE",assetNormalStrength:"\u6CD5\u7EBF\u5F3A\u5EA6",assetMetallic:"\u91D1\u5C5E\u5EA6",assetRoughness:"\u7C97\u7CD9\u5EA6",assetMetallicRoughnessTexture:"\u91D1\u5C5E\u7C97\u7CD9\u8D34\u56FE",assetOcclusionTexture:"AO \u8D34\u56FE",assetOcclusionStrength:"AO \u5F3A\u5EA6",resetValue:"\u6062\u590D Shader \u9ED8\u8BA4\u503C",modifiedValue:"\u5DF2\u504F\u79BB Shader \u9ED8\u8BA4\u503C",inactiveReasons:{baseTexture:"\u4EC5\u5728\u5DF2\u9009\u62E9\u57FA\u7840\u8D34\u56FE\u65F6\u751F\u6548\u3002",litMaterial:"\u4EC5\u5728\u201C\u53D7\u5149\u7167\u201D\u6A21\u5F0F\u4E0B\u751F\u6548\u3002",normalTexture:"\u4EC5\u5728\u5DF2\u9009\u62E9\u6CD5\u7EBF\u8D34\u56FE\u65F6\u751F\u6548\u3002",occlusionTexture:"\u4EC5\u5728\u5DF2\u9009\u62E9 AO \u8D34\u56FE\u65F6\u751F\u6548\u3002",alphaBlend:"\u4EC5\u5728\u201C\u534A\u900F\u660E\u201D\u6A21\u5F0F\u4E0B\u751F\u6548\u3002",alphaMask:"\u4EC5\u5728\u201C\u906E\u7F69\u201D\u6A21\u5F0F\u4E0B\u751F\u6548\u3002",alphaTransparency:"\u4EC5\u5728\u201C\u906E\u7F69\u201D\u6216\u201C\u534A\u900F\u660E\u201D\u6A21\u5F0F\u4E0B\u751F\u6548\u3002"},assetEmissionColor:"\u81EA\u53D1\u5149\u8272",assetEmissionIntensity:"\u81EA\u53D1\u5149\u5F3A\u5EA6",assetEmissionTexture:"\u81EA\u53D1\u5149\u8D34\u56FE",assetEmissionMaskUrl:"\u906E\u7F69\u8D34\u56FE",assetAlphaMode:"\u900F\u660E\u6A21\u5F0F",assetAlphaModeOpaque:"\u4E0D\u900F\u660E",assetAlphaModeMask:"\u906E\u7F69",assetAlphaModeBlend:"\u534A\u900F\u660E",assetAlphaOpacity:"\u4E0D\u900F\u660E\u5EA6",assetAlphaCutoff:"Alpha \u9608\u503C",assetAlphaTexture:"Alpha \u8D34\u56FE",createSlotMaterial:"\u6DFB\u52A0\u6750\u8D28\u69FD",slotList:"\u69FD\u5217\u8868",slotId:"\u69FD ID",slotOwnerPath:"\u69FD\u8282\u70B9\u8DEF\u5F84",slotMaterialAsset:"\u69FD\u6750\u8D28\u8D44\u4EA7",slotSourceMaterial:"\u6E90\u6750\u8D28",slotBindingPath:"\u7ED1\u5B9A\u8DEF\u5F84",reimportConflicts:"\u91CD\u5BFC\u5165\u6750\u8D28\u51B2\u7A81",summaryAsset:e=>`\u8D44\u4EA7\uFF1A${e}`,summaryMissingAsset:"\u8D44\u4EA7\u7F3A\u5931",summaryCustomOverride:"\u81EA\u5B9A\u4E49\u53C2\u6570",summaryInherit:"\u7EE7\u627F",summaryAddSlot:"\u6DFB\u52A0\u69FD",summarySlotCount:e=>`${e} \u4E2A\u69FD`,formatUsageCount:e=>e>0?`\u88AB ${e} \u5904\u4F7F\u7528`:"\u672A\u88AB\u4F7F\u7528",formatMaterialEditImpact:e=>e<=0?"\u5F53\u524D\u672A\u88AB\u573A\u666F\u4F7F\u7528\uFF0C\u4FEE\u6539\u53EA\u4F1A\u6539\u53D8\u6750\u8D28\u8D44\u4EA7\u672C\u8EAB\u3002":e===1?"\u4FEE\u6539\u4F1A\u5F71\u54CD\u5F53\u524D\u7ED1\u5B9A\u3002":`\u5171\u4EAB\u6750\u8D28\uFF0C\u4FEE\u6539\u4F1A\u5F71\u54CD ${e} \u5904\u7ED1\u5B9A\u3002`,formatDuplicateMaterialImpact:e=>e<=0?"\u590D\u5236\u540E\u521B\u5EFA\u4E00\u4E2A\u53EF\u72EC\u7ACB\u7F16\u8F91\u7684\u6750\u8D28\u8D44\u4EA7\u3002":e===1?"\u590D\u5236\u540E\u5F53\u524D\u5BF9\u8C61\u6216\u69FD\u4F1A\u4F7F\u7528\u72EC\u7ACB\u6750\u8D28\u3002":`\u590D\u5236\u540E\u5F53\u524D\u5BF9\u8C61\u6216\u69FD\u4F1A\u4F7F\u7528\u72EC\u7ACB\u6750\u8D28\uFF0C\u539F ${e} \u5904\u5171\u4EAB\u7ED1\u5B9A\u4E0D\u88AB\u7EE7\u7EED\u4FEE\u6539\u3002`,formatReimportConflictSummary:e=>`\u68C0\u6D4B\u5230 ${e} \u4E2A\u6750\u8D28\u69FD\u91CD\u5BFC\u5165\u5DEE\u5F02\uFF1B\u5DF2\u4FDD\u7559\u73B0\u6709\u7ED1\u5B9A\uFF0C\u9700\u4EBA\u5DE5\u786E\u8BA4\u4E0D\u53EF\u5339\u914D\u9879\u3002`,tooltips:{language:"\u5207\u6362\u7F8E\u672F\u6750\u8D28 Inspector \u7684\u663E\u793A\u8BED\u8A00\u3002",materialAsset:"\u9009\u62E9\u9879\u76EE\u7EA7\u5171\u4EAB\u6750\u8D28\u8D44\u4EA7\uFF0C\u6216\u4F7F\u7528\u53EA\u8BFB\u7684\u9ED8\u8BA4 PBR \u6750\u8D28\u3002",slotMaterialAsset:"\u672A\u9009\u62E9\u6750\u8D28\u8D44\u4EA7\u65F6\u4FDD\u7559 GLB \u539F\u59CB\u6750\u8D28\uFF1B\u9009\u62E9\u540E\u53EA\u8986\u76D6\u5F53\u524D\u6750\u8D28\u63D2\u69FD\u3002",baseTexture:"\u9009\u62E9\u9879\u76EE\u8D34\u56FE\u4F5C\u4E3A\u57FA\u7840\u8D34\u56FE\u3002\u8D34\u56FE\u8C03\u8272\u53C2\u6570\u4F1A\u5148\u4F5C\u7528\u4E8E\u8FD9\u5F20\u8D34\u56FE\u3002",assetProfile:"\u5171\u4EAB\u6750\u8D28\u8D44\u4EA7\u7684\u53C2\u6570\u4F1A\u5F71\u54CD\u6240\u6709\u7ED1\u5B9A\u8BE5\u8D44\u4EA7\u7684\u8282\u70B9\u3002",assetName:"\u6750\u8D28\u8D44\u4EA7\u540D\u79F0\u53EA\u7528\u4E8E\u5C55\u793A\uFF1B\u7ED1\u5B9A\u4F7F\u7528\u7A33\u5B9A\u6750\u8D28 ID\uFF0C\u4E0D\u53D7\u91CD\u547D\u540D\u5F71\u54CD\u3002",assetKind:"\u9009\u62E9\u8BE5\u6750\u8D28\u5F15\u7528\u7684 Shader Definition\uFF1B\u5207\u6362\u65F6\u4F1A\u4FDD\u7559\u517C\u5BB9\u53C2\u6570\u3002",lightingModel:"\u53D7\u5149\u7167\u6750\u8D28\u4F1A\u54CD\u5E94\u73AF\u5883\u5149\u548C\u76F4\u5C04\u5149\uFF1B\u4E0D\u53D7\u5149\u7167\u6750\u8D28\u9002\u5408 UI\u3001\u7279\u6548\u3001\u56FE\u6807\u548C\u5BFC\u89C6\u6807\u8BB0\u3002",baseColor:"\u57FA\u7840\u8272\u4F5C\u4E3A\u989C\u8272\u56E0\u5B50\uFF0C\u4F1A\u5728\u57FA\u7840\u8D34\u56FE\u5B8C\u6210\u8C03\u8272\u540E\u53C2\u4E0E\u76F8\u4E58\u3002\u4FEE\u6539\u5171\u4EAB\u6750\u8D28\u8D44\u4EA7\u4F1A\u5F71\u54CD\u6240\u6709\u7ED1\u5B9A\u8BE5\u6750\u8D28\u7403\u7684\u8282\u70B9\u3002",duplicateForObject:"\u590D\u5236\u5F53\u524D\u6750\u8D28\u7403\u4E3A\u8FD9\u4E2A\u5BF9\u8C61\u6216\u69FD\u7684\u72EC\u7ACB\u6750\u8D28\uFF0C\u7136\u540E\u81EA\u52A8\u66FF\u6362\u7ED1\u5B9A\u3002",brightness:"\u57FA\u7840\u8D34\u56FE\u4EAE\u5EA6\u500D\u7387\uFF0C1 \u4E3A\u4E0D\u6539\u53D8\uFF1B\u4EC5\u5728\u6709\u57FA\u7840\u8D34\u56FE\u65F6\u5F71\u54CD\u8D34\u56FE\u3002",saturation:"\u57FA\u7840\u8D34\u56FE\u9971\u548C\u5EA6\u500D\u7387\uFF0C1 \u4E3A\u4E0D\u6539\u53D8\uFF1B\u4EC5\u5728\u6709\u57FA\u7840\u8D34\u56FE\u65F6\u5F71\u54CD\u8D34\u56FE\u3002",contrast:"\u57FA\u7840\u8D34\u56FE\u5BF9\u6BD4\u5EA6\u500D\u7387\uFF0C1 \u4E3A\u4E0D\u6539\u53D8\uFF1B\u4EC5\u5728\u6709\u57FA\u7840\u8D34\u56FE\u65F6\u5F71\u54CD\u8D34\u56FE\u3002",hue:"\u57FA\u7840\u8D34\u56FE\u8272\u76F8\u504F\u79FB\uFF0C\u5355\u4F4D\u4E3A\u5EA6\uFF1B\u4EC5\u5728\u6709\u57FA\u7840\u8D34\u56FE\u65F6\u5F71\u54CD\u8D34\u56FE\u3002",normalTexture:"\u9009\u62E9\u6CD5\u7EBF\u8D34\u56FE\uFF0C\u8FD0\u884C\u65F6\u5E94\u7528\u5230 PBR/Standard \u6750\u8D28\u7684 bump/normal \u901A\u9053\u3002",normalStrength:"\u6CD5\u7EBF\u5F3A\u5EA6\uFF0C1 \u4E3A\u8D34\u56FE\u539F\u59CB\u5F3A\u5EA6\u3002",metallic:"\u91D1\u5C5E\u5EA6\uFF0C\u8303\u56F4 0 \u5230 1\u3002",roughness:"\u7C97\u7CD9\u5EA6\uFF0C\u8303\u56F4 0 \u5230 1\u3002",metallicRoughnessTexture:"\u9009\u62E9\u91D1\u5C5E\u7C97\u7CD9\u8D34\u56FE\u3002PBR \u8FD0\u884C\u65F6\u6309 GLB \u5E38\u7528\u7EA6\u5B9A\u8BFB\u53D6\u84DD\u8272\u91D1\u5C5E\u5EA6\u3001\u7EFF\u8272\u7C97\u7CD9\u5EA6\u3002",occlusionTexture:"\u9009\u62E9\u73AF\u5883\u906E\u853D AO \u8D34\u56FE\uFF0C\u53EA\u5BF9 PBR \u6750\u8D28\u751F\u6548\u3002",occlusionStrength:"AO \u5F3A\u5EA6\uFF0C1 \u4E3A\u8D34\u56FE\u539F\u59CB\u5F3A\u5EA6\u3002",emissionColor:"\u81EA\u53D1\u5149\u989C\u8272\uFF0C\u4F1A\u4E0E\u5F3A\u5EA6\u76F8\u4E58\u3002",emissionIntensity:"\u81EA\u53D1\u5149\u5F3A\u5EA6\uFF0C0 \u8868\u793A\u65E0\u81EA\u53D1\u5149\u3002",emissionTexture:"\u9009\u62E9\u81EA\u53D1\u5149\u8D34\u56FE\uFF1B\u82E5\u672A\u8BBE\u7F6E\u5219\u517C\u5BB9\u4F7F\u7528\u65E7\u906E\u7F69\u8D34\u56FE\u3002",emissionMaskUrl:"\u9009\u62E9\u7070\u5EA6\u8D34\u56FE\u4F5C\u4E3A\u81EA\u53D1\u5149\u5F3A\u5EA6\u906E\u7F69\u3002",alphaMode:"\u900F\u660E\u6A21\u5F0F\uFF1A\u4E0D\u900F\u660E\u3001Alpha Test \u906E\u7F69\u6216 Alpha Blend \u534A\u900F\u660E\u3002",alphaOpacity:"\u6750\u8D28\u6574\u4F53\u4E0D\u900F\u660E\u5EA6\uFF0C1 \u4E3A\u5B8C\u5168\u4E0D\u900F\u660E\u3002",alphaCutoff:"\u906E\u7F69\u6A21\u5F0F\u7684 Alpha \u622A\u65AD\u9608\u503C\u3002",alphaTexture:"\u9009\u62E9 Alpha/Opacity \u8D34\u56FE\u3002",createSlotMaterial:"\u8F93\u5165 GLB \u5B50\u8282\u70B9\u6216 mesh \u7684 ownerNodePath \u6765\u6DFB\u52A0\u69FD\u7ED1\u5B9A\uFF0C\u521D\u59CB\u4F7F\u7528\u9ED8\u8BA4 PBR \u6750\u8D28\u3002",slotList:"\u6839\u8282\u70B9\u4E0A\u7684\u6750\u8D28\u69FD\u4E3A\u53EA\u8BFB\u603B\u89C8\u3002",slotOwnerPath:"\u6750\u8D28\u69FD\u5B9A\u4F4D\u5230\u7684\u5B50\u8282\u70B9\u6216 mesh \u8DEF\u5F84\u3002",reimportConflicts:"\u6A21\u578B\u91CD\u5BFC\u5165\u540E\u65E0\u6CD5\u81EA\u52A8\u5339\u914D\u6216\u6E90\u6750\u8D28\u53D8\u5316\u7684\u69FD\u3002\u73B0\u6709\u7ED1\u5B9A\u4F1A\u4FDD\u7559\uFF0C\u4E0D\u4F1A\u9759\u9ED8\u5220\u9664\u6216\u8986\u76D6\u3002"}},en:{title:"Artist Material",slotTitle:"Material Slots",language:"Language",materialAsset:"Material Asset",materialCard:"Current Material",inheritNone:"Inherit / None",defaultMaterial:"Default PBR Material",defaultMaterialMeta:"BabylonJS-style default PBR material",defaultStandardMaterial:"Default Standard Material",defaultStandardMaterialMeta:"BabylonJS-style default Standard material",defaultMaterialReadOnly:"The system default material is read-only. Choose an editable material asset to adjust parameters.",replace:"Replace",batchReplaceUnsupported:"Batch material replacement is not wired yet. Select one object to replace its material.",duplicateForObject:"Copy",materialPickerTitle:"Select Material Asset",texturePickerTitle:"Select Texture Asset",emptyTexture:"Select Texture",emptyTextureMeta:"Choose a texture asset",clearTexture:"Clear Texture",clearTextureMeta:"Do not use a texture",missingTexture:"Missing texture asset",missingTextureMeta:"The current reference cannot be resolved in the project asset library",loadingTexture:"Loading texture",failedTexture:"Texture failed to load",assetProfile:"Asset Profile",assetProfileEmpty:"Select a material asset to edit asset parameters",assetName:"Asset Name",assetKind:"Shader",assetKindPbr:"PBR standard material",assetKindStandard:"Standard material",assetLightingModel:"Lighting Model",assetLightingModelLit:"Lit",assetLightingModelUnlit:"Unlit",assetBaseColor:"Base Color",assetBaseTexture:"Base Texture",assetBrightness:"Texture Brightness",assetSaturation:"Texture Saturation",assetContrast:"Texture Contrast",assetHue:"Texture Hue",assetNormalTexture:"Normal Texture",assetNormalStrength:"Normal Strength",assetMetallic:"Metallic",assetRoughness:"Roughness",assetMetallicRoughnessTexture:"Metallic-Roughness Texture",assetOcclusionTexture:"AO Texture",assetOcclusionStrength:"AO Strength",resetValue:"Reset to shader default",modifiedValue:"Modified from shader default",inactiveReasons:{baseTexture:"Available after assigning a base texture.",litMaterial:"Available only when the lighting model is Lit.",normalTexture:"Available after assigning a normal texture.",occlusionTexture:"Available after assigning an AO texture.",alphaBlend:"Available only in Blend alpha mode.",alphaMask:"Available only in Mask alpha mode.",alphaTransparency:"Available only in Mask or Blend alpha mode."},assetEmissionColor:"Emission Color",assetEmissionIntensity:"Emission Intensity",assetEmissionTexture:"Emission Texture",assetEmissionMaskUrl:"Mask Texture",assetAlphaMode:"Alpha Mode",assetAlphaModeOpaque:"Opaque",assetAlphaModeMask:"Mask",assetAlphaModeBlend:"Blend",assetAlphaOpacity:"Opacity",assetAlphaCutoff:"Alpha Cutoff",assetAlphaTexture:"Alpha Texture",createSlotMaterial:"Add Material Slot",slotList:"Slot List",slotId:"Slot ID",slotOwnerPath:"Slot Owner Path",slotMaterialAsset:"Slot Material Asset",slotSourceMaterial:"Source Material",slotBindingPath:"Binding Path",reimportConflicts:"Reimport Material Conflicts",summaryAsset:e=>`Asset: ${e}`,summaryMissingAsset:"Missing asset",summaryCustomOverride:"Custom override",summaryInherit:"Inherit",summaryAddSlot:"Add slot",summarySlotCount:e=>`${e} slot${e===1?"":"s"}`,formatUsageCount:e=>e>0?`Used in ${e} place${e===1?"":"s"}`:"Unused",formatMaterialEditImpact:e=>e<=0?"This material is not used in the scene; edits only change the asset.":e===1?"Edits affect the current binding.":`Shared material: edits affect ${e} bindings.`,formatDuplicateMaterialImpact:e=>e<=0?"Copying creates an independently editable material asset.":e===1?"After copying, the current object or slot uses an independent material.":`After copying, the current object or slot uses an independent material; the original ${e} shared bindings are left unchanged.`,formatReimportConflictSummary:e=>`${e} material slot reimport difference${e===1?"":"s"} detected. Existing bindings are preserved until unmatched items are resolved.`,tooltips:{language:"Switch the artist material Inspector language.",materialAsset:"Choose a project-level shared material asset, or use the read-only Default PBR material.",slotMaterialAsset:"Leave this unset to preserve the original GLB material, or choose a material asset to override only this slot.",baseTexture:"Choose a project texture as the base texture. Texture adjustment parameters are applied to this texture first.",assetProfile:"Shared asset parameters affect every node bound to this material asset.",assetName:"Material asset names are display-only for bindings; stable material IDs survive renames.",assetKind:"Select the Shader Definition referenced by this material; compatible values survive a change.",lightingModel:"Lit materials respond to environment and directional lights; unlit materials are useful for UI, VFX, icons, and markers.",baseColor:"Base color is the final color factor multiplied after base texture adjustment. Editing the shared material asset affects every bound node.",duplicateForObject:"Copy the current material as an independent material for this object or slot, then bind it automatically.",brightness:"Base texture brightness multiplier. It only affects materials with a base texture; 1 leaves the texture unchanged.",saturation:"Base texture saturation multiplier. It only affects materials with a base texture; 1 leaves the texture unchanged.",contrast:"Base texture contrast multiplier. It only affects materials with a base texture; 1 leaves the texture unchanged.",hue:"Base texture hue offset in degrees. It only affects materials with a base texture.",normalTexture:"Choose a normal map applied to the runtime bump/normal channel for PBR and Standard materials.",normalStrength:"Normal strength. 1 keeps the texture at original strength.",metallic:"Metallic value from 0 to 1.",roughness:"Roughness value from 0 to 1.",metallicRoughnessTexture:"Choose a metallic-roughness texture. PBR runtime reads blue as metallic and green as roughness by the common GLB convention.",occlusionTexture:"Choose an ambient occlusion texture. Applies to PBR materials.",occlusionStrength:"Ambient occlusion strength. 1 keeps the texture at original strength.",emissionColor:"Emission color multiplied by emission intensity.",emissionIntensity:"Emission intensity. 0 means no emission.",emissionTexture:"Choose an emissive texture. If empty, the mask texture remains the fallback.",emissionMaskUrl:"Choose a grayscale texture to modulate emission intensity.",alphaMode:"Alpha mode: opaque, alpha-test mask, or alpha-blend transparency.",alphaOpacity:"Overall material opacity. 1 is fully opaque.",alphaCutoff:"Alpha-test cutoff threshold for mask mode.",alphaTexture:"Choose an alpha/opacity texture.",createSlotMaterial:"Enter a GLB child node or mesh ownerNodePath to add a slot binding with the Default PBR material.",slotList:"Material slots on the root object are a readonly overview.",slotOwnerPath:"Child node or mesh path targeted by this material slot.",reimportConflicts:"Slots whose source material changed or could not be matched after model reimport. Existing bindings are preserved instead of being silently deleted or overwritten."}}};function ko(e){return QM[e]??QM.zh}function op(e){return e.metadata?.artistMaterialInspectorLanguage==="en"?"en":"zh"}var yz={},ZM=new WeakMap;function eD(e,t,r,n,o){return le({path:e,label:t,value:r,order:n,persistence:"readonly",source:"Document",tooltip:o})}function tD(e,t){return YM(e,oD(t))}function Sz(e){return{materialPickerTitle:e.materialPickerTitle,replace:e.replace,duplicateForObject:e.duplicateForObject,duplicateForObjectTooltip:e.tooltips.duplicateForObject,summaryMissingAsset:e.summaryMissingAsset,summaryInherit:e.summaryInherit,inheritNone:e.inheritNone}}function Iz(e){return{formatUsageCount:e.formatUsageCount,formatEditImpact:e.formatMaterialEditImpact,formatDuplicateImpact:e.formatDuplicateMaterialImpact}}function oD(e){return{defaultMaterial:e.defaultMaterial,defaultStandardMaterial:e.defaultStandardMaterial,defaultMaterialMeta:e.defaultMaterialMeta,defaultStandardMaterialMeta:e.defaultStandardMaterialMeta,formatMaterialMeta:t=>`Material - ${t}`}}function aD(e,t,r,n,o={}){if(!t)return[];let a=o.materialShaderDefinitions?.get(t.shaderId)??fr(t.shaderId),i=Mz(e,t,r,n,o,a??void 0);if(sD(t,o))return[...i,le({path:`scene.materialAssets.${t.id}.properties`,label:r.assetProfile,value:r.defaultMaterialReadOnly,order:n+2,source:"Document",effect:"default",disabledReason:r.defaultMaterialReadOnly,tags:["ArtistMaterial","MaterialAsset"],tooltip:r.tooltips.assetProfile})];if(!a)return i;let s=[...a.inspector.fields].sort((c,d)=>c.order-d.order||c.path.localeCompare(d.path)).map(c=>Ez({document:e,materialAsset:t,definition:a,fieldDefinition:c,text:r,context:o,orderOffset:n}));return[...i,...s]}function Ez(e){let{fieldDefinition:t}=e,r=rD(e.text,t.labelKey,t.label??t.path),n=Az(e.text,t.tooltipKey,t.tooltip),o=iD(e.materialAsset.properties,t),a;if(t.control==="texture")a=Dz({path:`${Do}${e.materialAsset.id}.${t.path}`,label:r,value:typeof o=="string"?o:"",order:e.orderOffset+t.order,text:e.text,context:e.context,tooltip:n});else if(t.control==="number")a=Rz(e.document,e.materialAsset,t.path,r,typeof o=="number"?o:Number(t.defaultValue),e.orderOffset+t.order,t,n,e.context.materialShaderDefinitions);else if(t.control==="enum")a=Cz(e.document,e.materialAsset,t.path,r,String(o),e.orderOffset+t.order,(t.options??[]).map(c=>({value:c.value,label:rD(e.text,c.labelKey,c.label??c.value)})),n,e.context.materialShaderDefinitions);else{let c=t.control;a=sp(e.document,e.materialAsset,t.path,r,o,e.orderOffset+t.order,c,c,"immediate",n,e.context.materialShaderDefinitions)}let i=t.control==="color"?yd(e.definition.shaderId,t.path,e.context.materialShaderDefinitions):null;a={...a,displayPrecision:t.displayPrecision,precision:t.precision,controlOptions:{...a.controlOptions,...t.control==="color"?{colorChannels:i?.kind==="color"&&i.channels===4?4:3}:{},materialShaderSectionId:t.sectionId,materialShaderUpdateClass:t.updateClass,materialShaderBinding:t.binding}};let s=t.conditions?.find(c=>!Tz(e.definition,e.materialAsset.properties,c));return s&&(a=_z(a,!1,Pz(e.text,s))),wz(a,e.text,t.defaultValue)}function iD(e,t){if(t.control==="texture"){let n=gy(e,t.schemaPath??t.path);return cD(n)}let r=gy(e,t.path);return r===void 0?structuredClone(t.defaultValue):r}function gy(e,t){let r=t.replace(/^properties\./,"").split(".").filter(Boolean),n=e;for(let o of r){if(!n||typeof n!="object"||Array.isArray(n))return;n=n[o]}return n}function Tz(e,t,r){let n=e.inspector.fields.find(i=>i.path===r.path),o=n?iD(t,n):gy(t,r.path);if(r.operator==="truthy")return!!o;let a=JSON.stringify(o??null)===JSON.stringify(r.value??null);return r.operator==="equals"?a:!a}function rD(e,t,r){let n=t?e[t]:void 0;return typeof n=="string"?n:r}function Az(e,t,r){let n=t?e.tooltips[t]:void 0;return typeof n=="string"?n:r}function Pz(e,t){let r=t.inactiveReasonKey?e.inactiveReasons[t.inactiveReasonKey]:void 0;return typeof r=="string"?r:t.inactiveReason??"This field is inactive for the current material state."}function xz(e){return e.defaultMaterialAssetIds??[Ci,tc]}function sD(e,t){return Kd(e,xz(t))||e.system?.preset==="default-pbr"||e.system?.preset==="default-standard"}function Mz(e,t,r,n,o,a){if(!sD(t,o)){let i=o.materialShaderDefinitions??ca;return[sp(e,t,"name",r.assetName,tD(t,r),n,"string","string","change",r.tooltips.assetName,i),{path:`${Do}${t.id}.shaderId`,label:r.assetKind,valueType:"string",control:"enum",value:t.shaderId,readOnly:!1,persistence:"document",commitMode:"immediate",order:n+1,tooltip:r.tooltips.assetKind,tags:["ArtistMaterial","MaterialAsset","ShaderDefinition"],options:i.list().map(s=>({value:s.shaderId,label:s.displayName})),controlOptions:{materialShaderSelector:!0,shaderId:t.shaderId,shaderVersion:a?.version,shaderRuntimeKind:a?.runtimeKind,...a?.sourceFile?{shaderSourceFile:a.sourceFile}:{}},validate:s=>typeof s=="string"&&i.get(s)?{ok:!0,value:s}:{ok:!1,message:"Unknown Shader Definition."},coerce:s=>typeof s=="string"?s.trim():""}]}return[eD(`${Do}${t.id}.name`,r.assetName,tD(t,r),n,r.tooltips.assetName),eD(`${Do}${t.id}.shaderId`,r.assetKind,a?.displayName??t.shaderId,n+1,r.tooltips.assetKind)]}function Dz(e){let t=hy(e.context,e.value);return{path:e.path,label:e.label,valueType:"string",control:"custom",customControl:"asset-picker-card",value:e.value,readOnly:!1,persistence:"document",commitMode:"change",order:e.order,tooltip:e.tooltip,tags:["ArtistMaterial","TextureAsset"],controlOptions:ip(e.context,e.text,e.value,t),validate:r=>{let n=nD(e.context,e.path,r);return n.ok?{ok:!0,value:n.value}:{ok:!1,message:"Invalid texture selection."}},coerce:r=>{let n=nD(e.context,e.path,r);return n.ok?n.value:null}}}function ip(e,t,r,n){return{...JM({textureAssets:e.textureAssets,currentTexture:n,currentValue:r,pickerText:Oz(t),candidateValue:"assetId"})}}function hy(e,t){return np(e.textureAssets,t)}function cD(e){let t=typeof e?.textureAssetId=="string"?e.textureAssetId.trim():"";return t||(typeof e?.url=="string"?e.url.trim():"")}function nD(e,t,r){if(r==null||r==="")return{ok:!0,value:null};if(typeof r!="string")return{ok:!1};let n=r.trim();if(!n)return{ok:!0,value:null};if(!t.endsWith(".textureAssetId"))return{ok:!0,value:n};let o=np(e.textureAssets,n);return o?{ok:!0,value:o.id}:/^[A-Za-z0-9_-]+$/.test(n)?{ok:!0,value:n}:{ok:!0,value:null}}function Oz(e){return{texturePickerTitle:e.texturePickerTitle,replace:e.replace,emptyTexture:e.emptyTexture,emptyTextureMeta:e.emptyTextureMeta,clearTexture:e.clearTexture,clearTextureMeta:e.clearTextureMeta,missingTexture:e.missingTexture,missingTextureMeta:e.missingTextureMeta,loadingTexture:e.loadingTexture,failedTexture:e.failedTexture}}function Rz(e,t,r,n,o,a,i={},s,c){return{...sp(e,t,r,n,o,a,"number","number","live",s,c),...i.min!=null?{min:i.min}:{},...i.max!=null?{max:i.max}:{},...i.softMin!=null?{softMin:i.softMin}:{},...i.softMax!=null?{softMax:i.softMax}:{},step:i.step??.05}}function Cz(e,t,r,n,o,a,i,s,c){return{...sp(e,t,r,n,o,a,"enum","enum","immediate",s,c),options:i,controlOptions:{variant:"segmented"}}}function sp(e,t,r,n,o,a,i,s,c,d,u){return{...XM({document:e,materialAsset:t,fieldPath:r,label:n,value:o,order:a,valueType:i,control:s,commitMode:c,tooltip:d,pathPrefix:Do}),validate:l=>{let m=Fr(r,l);return Oo(r,m,t.shaderId,u)?{ok:!0,value:m}:{ok:!1,message:`Invalid material asset field: ${r}.`}},coerce:l=>Fr(r,l)}}function wz(e,t,r){return e.readOnly?e:{...e,controlOptions:{...e.controlOptions,resetValue:structuredClone(r),modified:!vz(e.value,r),resetLabel:t.resetValue,modifiedLabel:t.modifiedValue}}}function vz(e,t){return JSON.stringify(e??null)===JSON.stringify(t??null)}function _z(e,t,r){return t?e:{...e,controlOptions:{...e.controlOptions,conditionalInactive:!0,conditionalInactiveReason:r}}}function dD(e,t,r,n){let o=r.currentAsset??Xe(e,r.value);return{path:r.path,label:r.label,valueType:"string",control:"custom",customControl:"asset-picker-card",value:r.value,readOnly:!1,persistence:"document",commitMode:"change",order:r.order,controlOptions:Nz(ap(e,o,r.text,r.value,n,r.previewContext),r.currentAction),tooltip:r.text.tooltips.materialAsset,tags:["ArtistMaterial","MaterialAsset"],document:e,validate:a=>{let i=Sm(a);return i&&Hn(e,i)?{ok:!0,value:a}:a==null||a===""?{ok:!0,value:a}:typeof a=="string"&&Hn(e,a)?{ok:!0,value:a}:{ok:!1,message:`Material asset not found: ${String(a)}`}},coerce:a=>typeof a=="string"?a.trim():a,effect:kz(t,r.value),validation:jz(r.value,o,r.text),disabledReason:t==="group"?"Groups do not own materials.":void 0}}function kz(e,t){return e==="group"?"unsupported":t.trim()?"override":void 0}function jz(e,t,r){let n=e.trim();if(!(!n||t))return{status:"error",code:"material.asset.missing",message:`${r.summaryMissingAsset}: ${n}`}}function Nz(e,t){return t?{...e,currentActionId:t.actionId,currentActionParams:Object.fromEntries(Object.entries(t.params).filter(r=>typeof r[1]=="string"&&r[1].length>0))}:e}function Gz(e,t,r){return dD(e,t,r,rr.getCachedUsageIndex(e))}function ap(e,t,r,n,o,a={}){return{...rr.createPickerControlOptions({materialAssets:e.scene.materialAssets??[],currentAsset:t,currentValue:n,pickerText:Sz(r),displayText:oD(r),document:e,ownershipText:Iz(r),previewContext:a},o),actionDisabledReason:r.batchReplaceUnsupported}}function Lz(e,t,r,n,o={}){if(o.textureAssets?.length||o.resolveTextureAssetUrl)return ap(e,t,r,n,rr.getCachedUsageIndex(e),o);let a=ZM.get(e);a||(a=new WeakMap,ZM.set(e,a));let i=a.get(r);i||(i=new WeakMap,a.set(r,i));let s=t??yz,c=i.get(s);c||(c=new Map,i.set(s,c));let d=c.get(n);if(d)return d;let u=ap(e,t,r,n,rr.getCachedUsageIndex(e),o);return c.set(n,u),u}var Fz={createSelectorInspectorPropertyWithUsage:dD,createSelectorInspectorPropertyWithCachedUsage:Gz,createPickerControlOptionsWithUsage:ap,createPickerControlOptionsWithCachedUsage:Lz},ki=Fz;function lD(e,t,r){let n=GP(e,t);if(n.state==="asset"&&n.materialAsset){let o=wM(n.materialAsset),a=o==="default-pbr"?r.defaultMaterial:o==="default-standard"?r.defaultStandardMaterial:n.materialAsset.name??n.materialAsset.id;return r.summaryAsset(a)}return n.state==="missing-asset"?r.summaryMissingAsset:n.state==="override"?r.summaryCustomOverride:r.summaryInherit}function uD(e,t,r){let n=Ro(e,t).length;return n>0?r.summarySlotCount(n):r.summaryAddSlot}function $z(e,t,r,n,o,a={}){let i=ko(op(t)),s=[];return Ro(e,t).forEach((d,u)=>{let l=Kn(d)??d.slotId,m=ub(t,d),p=o?.materialSlotBindings?.[d.slotId]??m,h=p?.materialAssetId?Xe(e,p.materialAssetId):null,g=(u+1)*100,f=Am(d),y=$r(d)[0],A=y==null?null:rc(d,y)?.profile,T=ki.createSelectorInspectorPropertyWithUsage(e,r,{path:f,label:d.label||by(l,u,i),value:m?.materialAssetId??"",order:g,text:i,currentAsset:h,currentAction:h?{actionId:"material.open-asset",params:{materialAssetId:h.id,browserAssetId:`material:${h.id}`,sourceObjectId:t.id,sourceBindingPath:f}}:A?{actionId:"material.create-from-source",params:{sourceObjectId:t.id,sourceBindingPath:f}}:void 0,previewContext:a},n);s.push(Bz(T,d,p,i,a))}),s}function Bz(e,t,r,n,o){let a=$r(t)[0],i=a==null?t.materialNames?.[0]??t.materialName??null:vi(t,a),s=a==null?null:rc(t,a)?.profile,c=s?Un(cy(s),o):void 0,d=i?`GLB \u6E90\u6750\u8D28\uFF1A${i}`:"GLB \u6E90\u6750\u8D28",u=e.controlOptions??{},l=Array.isArray(u.candidates)?u.candidates.map(p=>p&&typeof p=="object"&&!Array.isArray(p)&&p.value===""?{...p,label:"\u6062\u590D\u7EE7\u627F",meta:d,...c?{preview:c}:{}}:p):void 0,m=r?.materialAssetId&&typeof u.currentMeta=="string"&&u.currentMeta?`${u.currentMeta} \xB7 ${d}`:d;return{...e,tooltip:n.tooltips.slotMaterialAsset,controlOptions:{...u,...r?.materialAssetId?{}:{currentLabel:i?`\u7EE7\u627F GLB\uFF1A${i}`:"\u7EE7\u627F GLB \u539F\u6750\u8D28",...c?{currentPreview:c}:{}},currentMeta:m,...l?{candidates:l}:{},...i?{sourceMaterialName:i}:{}}}}function zz(e,t,r,n){let o=Ro(e,t);if(o.length===0)return[];let a=[],i=tp(e,t),s=Mm(e,t.id)??t.overrides;i.issues.length>0&&a.push(Kz("asset.materialSlots.reimportConflicts",r.reimportConflicts,Vz(i.issues,r),-1,r.tooltips.reimportConflicts));let c=o.map((d,u)=>Uz(e,t,d,u,r,n,s));return a.push({path:"asset.materialSlots",label:r.slotList,valueType:"object",control:"custom",customControl:"material-slot-list",value:{count:o.length,slots:c},readOnly:!0,persistence:"readonly",commitMode:"immediate",order:0,controlOptions:{labels:{material:r.slotMaterialAsset,slotId:r.slotId,ownerNodePath:r.slotOwnerPath,sourceMaterial:r.slotSourceMaterial,primitive:"Primitive",triangles:"Triangles",bounds:"Bounds",bindingPath:r.slotBindingPath},slots:c},tags:["ArtistMaterial","MaterialSlot","Readonly"],tooltip:r.tooltips.slotList,document:e}),a}function Vz(e,t){let r=e.map(n=>{let o=n.label||n.ownerNodePath||n.slotId||n.previousSlotId||n.bindingPath||"slot";if(n.reason==="source-material-changed"){let a=n.previousSourceMaterialIndex==null?"?":`#${n.previousSourceMaterialIndex}`,i=n.sourceMaterialIndex==null?"?":`#${n.sourceMaterialIndex}`;return`${o}: source material ${a} -> ${i}; ${n.materialAssetId??t.inheritNone}`}return n.reason==="slot-removed"?`${o}: removed slot; ${n.materialAssetId??t.inheritNone}`:`${o}: ${n.status}`});return[t.formatReimportConflictSummary(e.length),...r].join(`
|
|
3
|
+
`)}function Uz(e,t,r,n,o,a,i){let s=ub(t,r),c=i?.materialSlotBindings?.[r.slotId]??s,d=Xe(e,c?.materialAssetId??wi),u=ki.createPickerControlOptionsWithUsage(e,d,o,s?.materialAssetId??"",a),l=$r(r),m=l[0],p=m==null?null:vi(r,m),h=r.sourceSurfaces[0],g=h.ownerNodePath;return{key:FP(r),label:r.label||by(g,n,o),slotId:r.slotId,sourceSurfaces:structuredClone(r.sourceSurfaces),ownerNodePath:g,materialAssetId:s?.materialAssetId??"",materialLabel:u.currentLabel??o.inheritNone,materialMeta:u.currentMeta??o.summaryInherit,...u.currentPreview?{materialPreview:u.currentPreview}:{},...m==null?{}:{sourceMaterialIndex:m},...l.length?{sourceMaterialIndices:l}:{},...p?{sourceMaterialName:p}:{},...r.materialNames?.length?{materialNames:r.materialNames}:{},...r.sourceSurfaces.length===1&&typeof h.triangleCount=="number"?{triangleCount:h.triangleCount}:{},...r.sourceSurfaces.length===1&&h.boundingBox?{boundingBox:h.boundingBox}:{},bindingPath:Am(r)}}var Hz={createChildMaterialBindingInspectorPropertiesWithUsage:$z,createReadonlyMaterialSlotListInspectorPropertiesWithUsage:zz},mD=Hz;function by(e,t,r){let n=e.split("/").filter(Boolean).pop()??e;return`${r.slotMaterialAsset} ${t+1}: ${n}`}function Kz(e,t,r,n,o){return le({path:e,label:t,value:r,order:n,persistence:"readonly",source:"Document",tooltip:o})}var pD="materialAsset::",Wz=5;function qz(e){return e.startsWith(pD)&&e.slice(pD.length).trim()||null}function Yz(e,t,r,n,o,a){let i=[],s=op(t),c=ko(s),d=t.overrides?.materialBinding,u=Mm(e,t.id)??t.overrides,l=u?.materialBinding??d,m=l?.materialAssetId??wi,p=Xe(e,m),h=l?.materialAssetId?l:{...l,materialAssetId:wi};if(!LP(e,t)){let y="overrides.materialBinding.materialAssetId";i.push({id:"artistMaterial",title:c.title,order:46,placement:"body",summary:lD(h,p,c),persistence:"document",collapsedByDefault:!1,properties:[ki.createSelectorInspectorPropertyWithUsage(e,r,{path:y,label:c.materialCard,value:d?.materialAssetId??"",order:0,text:c,currentAsset:p,currentAction:{actionId:"material.open-asset",params:{materialAssetId:p?.id,browserAssetId:p?`material:${p.id}`:void 0,sourceObjectId:t.id,sourceBindingPath:y}},previewContext:n},a)]})}let f=r==="primitive"?[]:mD.createChildMaterialBindingInspectorPropertiesWithUsage(e,t,r,a,u,n);return f.length>0&&i.push({id:"artistMaterialSlots",title:c.slotTitle,order:48,placement:"body",summary:uD(e,t,c),persistence:"document",collapsedByDefault:!1,properties:f}),i}function Jz(e,t,r,n){let o=qz(t),a=o?Xe(e,o):null;if(!a)return null;let i=ko("zh"),s=n.forMaterial(a.id),c=aD(e,a,i,0,r),d=`scene.materialAssets.${a.id}.properties`,u=`${d}.`,l=T=>T.path===d||T.path.startsWith(u),m=c.filter(T=>!l(T)),p=c.filter(l),h=[{path:`scene.materialAssets.${a.id}.preview`,label:a.name||a.id,valueType:"object",control:"custom",customControl:"asset-picker-card",value:a.id,readOnly:!0,persistence:"readonly",commitMode:"immediate",order:-10,controlOptions:{currentMaterialAssetId:a.id,currentMaterialShaderId:a.shaderId,...a.definitionVersion!=null?{currentMaterialDefinitionVersion:a.definitionVersion}:{},currentLabel:a.name||a.id,currentMeta:a.shaderId,currentPreview:Un(a.properties,r)},document:e},...m,e1(`scene.materialAssets.${a.id}.usageCount`,"\u5F15\u7528",i.formatUsageCount(s.length),10)],g=[Vs({path:`scene.materialAssets.${a.id}.actions.locate`,label:"\u5728 Assets \u4E2D\u5B9A\u4F4D",actionId:"material.locate-asset",icon:"asset",params:{materialAssetId:a.id,browserAssetId:`material:${a.id}`},order:20,tooltip:"\u5728 Assets \u9762\u677F\u4E2D\u5B9A\u4F4D\u5F53\u524D\u6750\u8D28\u3002",disabled:!1}),Vs({path:`scene.materialAssets.${a.id}.actions.back`,label:"\u8FD4\u56DE\u6765\u6E90",actionId:"material.back-to-owner",icon:"chevron-left",params:{materialAssetId:a.id},order:21,tooltip:"\u8FD4\u56DE\u6253\u5F00\u5F53\u524D\u6750\u8D28\u524D\u7684\u5BF9\u8C61\u6216 Prefab Inspector\u3002",disabled:!1})],f=[{id:"materialAssetSummary",title:"Material",order:10,regionId:sm,persistence:"readonly",collapsedByDefault:!1,properties:h}];f.push({id:"materialAssetNavigation",title:"\u5BFC\u822A",order:15,placement:"body",persistence:"readonly",collapsedByDefault:!1,properties:g}),f.push({id:"materialReferences",title:`\u4F7F\u7528\u4F4D\u7F6E (${s.length})`,order:20,placement:"body",persistence:"readonly",collapsedByDefault:s.length===0,properties:[{path:`scene.materialAssets.${a.id}.references.browser`,label:"\u4F7F\u7528\u4F4D\u7F6E",valueType:"object",control:"custom",customControl:"material-reference-list",controlOptions:{previewLimit:Wz,items:s.map((T,D)=>({key:`${T.scope}:${T.gameObjectId}:${T.bindingPath}:${D}`,label:T.label,scope:T.scope,actionId:"material.open-owner",params:Object.fromEntries(Object.entries({materialAssetId:a.id,ownerScope:T.scope,sourceObjectId:T.gameObjectId,sourceBindingPath:T.bindingPath,slotId:T.slotId,ownerNodePath:T.ownerNodePath,prefabAssetId:T.prefabAssetId,prefabNodeId:T.prefabNodeId}).filter(P=>typeof P[1]=="string"&&P[1].length>0))}))},value:s.length,readOnly:!1,persistence:"readonly",commitMode:"immediate",order:0,tooltip:s.length>0?"\u67E5\u770B\u4F7F\u7528\u5F53\u524D\u6750\u8D28\u7684 Scene \u5BF9\u8C61\u548C Prefab \u8282\u70B9\u3002":"\u5F53\u524D\u672A\u88AB\u4EFB\u4F55\u5BF9\u8C61\u6216 Prefab \u4F7F\u7528\u3002",document:e}]});let y=r.materialShaderDefinitions?.get(a.shaderId)??fr(a.shaderId);for(let[T,D]of[...y?.inspector.sections??[]].sort((P,C)=>P.order-C.order||P.id.localeCompare(C.id)).entries())fD(f,{id:`material${D.id.charAt(0).toUpperCase()}${D.id.slice(1)}`,title:D.title,order:D.order,properties:[...T===0?p.filter(P=>P.path===d):[],...p.filter(P=>P.controlOptions?.materialShaderSectionId===D.id)]});let A=new Set(f.flatMap(T=>T.properties.map(D=>D.path)));return fD(f,{id:"materialAdvanced",title:"Advanced",order:80,properties:p.filter(T=>!A.has(T.path))}),{targetIds:[t],activeId:t,label:a.name||a.id,document:e,selection:{targetIds:[t],activeId:t,scopeType:"scene",targetKind:"materialAsset",capabilities:["material"],document:e},sections:f}}function Xz(e,t,r,n={},o){return Yz(e,t,r,n,o,rr.getCachedUsageIndex(e))}function Qz(e,t,r={}){return Jz(e,t,r,rr.getCachedUsageIndex(e))}var Zz={createArtistMaterialInspectorSectionsWithCachedUsage:Xz,createEditorSceneMaterialAssetInspectorObjectWithCachedUsage:Qz},yy=Zz;function fD(e,t){t.properties.length!==0&&e.push({...t,placement:"body",persistence:t.properties.some(r=>r.persistence==="document")?"document":"readonly",collapsedByDefault:!1})}function e1(e,t,r,n,o){return le({path:e,label:t,value:r,order:n,persistence:"readonly",source:"Document",tooltip:o})}var gD="modelAsset::";function t1(e){return e.startsWith(gD)&&e.slice(gD.length).trim()||null}function hD(e,t,r={}){let n=t1(t),o=n?r1(e,n,r.modelAssets):null;if(!o)return null;let a=i1(o),i=[n1(o)];return i.push(o1(e,o,a,r)),{targetIds:[t],activeId:t,label:o.displayName??o.id,document:e,selection:{targetIds:[t],activeId:t,scopeType:"scene",targetKind:"modelAsset",capabilities:["asset","materialSlots"],document:e},sections:i}}function r1(e,t,r){let n=e.assets.find(a=>a.id===t);if(n&&n.type!=="glb")return null;let o=r?.find(a=>a.assetId===t&&a.type==="glb");return o?ya(n??{id:t,type:"glb"},o):n??null}function n1(e){let t=s1(e.metadata?.relativePath);return{id:"modelAssetSummary",title:"Model Asset",order:10,regionId:sm,persistence:"readonly",collapsedByDefault:!1,properties:[Wd(`assets.${e.id}.displayName`,"\u540D\u79F0",e.displayName??e.id,0),Wd(`assets.${e.id}.id`,"Asset ID",e.id,1),Wd(`assets.${e.id}.type`,"\u683C\u5F0F","GLB / glTF",2),...t?[Wd(`assets.${e.id}.relativePath`,"\u6E90\u6587\u4EF6",t,3)]:[]]}}function o1(e,t,r,n){let o=`\u6750\u8D28\u63D2\u69FD (${r.length})`;if(r.length===0)return{id:"modelAssetMaterialSlots",title:o,order:20,placement:"body",summary:"\u672A\u68C0\u6D4B\u5230\u6750\u8D28\u63D2\u69FD",persistence:"readonly",collapsedByDefault:!1,properties:[Wd(`assets.${t.id}.materialSlots.empty`,"\u89E3\u6790\u7ED3\u679C","\u672A\u68C0\u6D4B\u5230\u6750\u8D28\u63D2\u69FD",0)]};let a=r.map((s,c)=>a1(s,c,n)),i={path:`assets.${t.id}.materialSlots`,label:"GLB \u6E90\u6750\u8D28",valueType:"object",control:"custom",customControl:"material-slot-list",value:{count:r.length,slots:a},readOnly:!0,persistence:"readonly",commitMode:"immediate",order:0,controlOptions:{labels:{material:"\u5F53\u524D\u6765\u6E90",slotId:"Slot ID",ownerNodePath:"\u8282\u70B9\u8DEF\u5F84",sourceMaterial:"\u6E90\u6750\u8D28",primitive:"Primitive",triangles:"\u4E09\u89D2\u9762",bounds:"Bounds",bindingPath:"\u7ED1\u5B9A\u8DEF\u5F84"},slots:a},tags:["Asset","MaterialSlot","Readonly"],tooltip:"GLB / glTF \u6587\u4EF6\u4E2D\u89E3\u6790\u51FA\u7684\u53EA\u8BFB\u6750\u8D28\u63D2\u69FD\u3002",document:e};return{id:"modelAssetMaterialSlots",title:o,order:20,placement:"body",summary:`${r.length} \u4E2A\u5DF2\u89E3\u6790\u6E90\u63D2\u69FD`,persistence:"readonly",collapsedByDefault:!1,properties:[i]}}function a1(e,t,r){let n=e.sourceSurfaces[0],o=$r(e),a=n.sourceMaterialIndex??o[0],i=a==null?e.materialNames?.[0]??e.materialName??null:vi(e,a),s=a==null?null:rc(e,a)?.profile??null,c=e.label||i||`Material Slot ${t+1}`;return{key:e.slotId,label:c,slotId:e.slotId,sourceSurfaces:structuredClone(e.sourceSurfaces),ownerNodePath:n.ownerNodePath,materialLabel:i??c,materialMeta:"\u7EE7\u627F GLB \u6E90\u6750\u8D28",...s?{materialPreview:Un(s,r)}:{},...a==null?{}:{sourceMaterialIndex:a},...o.length>0?{sourceMaterialIndices:o}:{},...i?{sourceMaterialName:i}:{},...e.materialNames?.length?{materialNames:e.materialNames}:{},...e.sourceSurfaces.length===1&&typeof n.triangleCount=="number"?{triangleCount:n.triangleCount}:{},...e.sourceSurfaces.length===1&&n.boundingBox?{boundingBox:n.boundingBox}:{}}}function i1(e){return(Array.isArray(e.metadata?.materialSlots)?e.metadata.materialSlots:[]).map($s).filter(r=>!!r)}function Wd(e,t,r,n){return le({path:e,label:t,value:r,order:n,persistence:"readonly",source:"Document"})}function s1(e){return typeof e=="string"&&e.trim()?e.trim():""}function qd(e,t,r,n={}){if(t.type==="prefab"){let s=bD(e,t),c=s?ya(s,t):Sy(t),d=SD(e,t,c,r,n),u=d1(s?e.assets.map(l=>l.id===c.id?c:l):[...e.assets,c],c);return{document:{...e,assets:u,scene:{...e.scene,gameObjects:[...e.scene.gameObjects,d]}},gameObject:d}}let o=bD(e,t),a=o?ya(o,t):Sy(t),i=t.type==="texture"?c1(e,t,a.id,r,n):yD(e,t,a.id,r,n);return{document:{...e,assets:o?e.assets.map(s=>s.id===a.id?a:s):[...e.assets,a],scene:{...e.scene,gameObjects:[...e.scene.gameObjects,i]}},gameObject:i}}function c1(e,t,r,n,o={}){let a=e.scene.gameObjects.map(u=>u.id),i=Ur(Iy(e),o.name??t.displayName,{fallbackName:t.assetId}),s=Zs(a,ec(i)),c=gt(e),d=Ey(e,c,n,o);return{id:s,guid:(o.createGameObjectGuid??kt)(),name:i,kind:"transform",...c?{parentId:c}:{},active:!0,shadow:{cast:"none",receive:"none"},metadata:{...t.metadata??{},assetId:t.assetId,assetType:"texture"},components:[bn(d),{type:"ImageRenderer",assetId:r,size:{width:1,height:1}}]}}function Sy(e){return{id:e.assetId,guid:e.guid,type:e.type,displayName:e.displayName,category:e.category,warmupCount:e.warmupCount,singleton:e.singleton,materialMode:e.materialMode,defaults:cp(e.defaults),prefab:cp(e.prefab),external:cp(e.external),metadata:cp(e.metadata)}}function yD(e,t,r,n,o={}){let a=e.scene.gameObjects.map(u=>u.id),i=Ur(Iy(e),o.name??t.displayName,{fallbackName:t.assetId}),s=Zs(a,ec(i)),c=gt(e),d=Ey(e,c,n,o);return{id:s,guid:(o.createGameObjectGuid??kt)(),name:i,...c?{parentId:c}:{},active:!0,shadow:{cast:"none",receive:"none"},components:[bn(d),{type:"ModelRenderer",assetId:r}]}}function SD(e,t,r,n,o={}){let a=e.scene.gameObjects.map(u=>u.id),i=Ur(Iy(e),o.name??t.displayName,{fallbackName:t.assetId}),s=Zs(a,ec(i)),c=gt(e),d=Ey(e,c,n,o);return HP({id:s,guid:(o.createGameObjectGuid??kt)(),name:i,...c?{parentId:c}:{},prefabAsset:r,transform:bn(d),metadata:{...t.metadata??{},assetId:t.assetId,assetType:"prefab"}})}function Iy(e){return e.scene.gameObjects.map(t=>t.name??t.id)}function bD(e,t){return e.assets.find(r=>r.id===t.assetId||r.guid&&r.guid===t.guid)}function d1(e,t){let r=Dd(t);if(!r||e.some(a=>a.id===r))return[...e];let n=t.prefab?.sourceAssetGuid,o=!!n&&!e.some(a=>a.guid===n);return[...e,{id:r,...o?{guid:n}:{},type:"glb",displayName:r,category:"Model",metadata:{sourcePrefabId:t.id}}]}function Ey(e,t,r,n){let o=ey(e,r);return t?n.resolveLocalTransform?.({document:e,parentId:t,worldTransform:o})??Co(e,t,o)??o:o}function cp(e){return e==null?void 0:structuredClone(e)}function l1(e){return!!e&&Lr(e)}function Py(e,t,r={}){let n=t.type==="document.replace"?t.document:ED({document:e,patch:t.patch,options:r});return r.normalizeDocument?.(n,t)??n}function ED(e){let{document:t,patch:r,options:n={}}=e;if(r.kind==="serialized-property")return Jd({document:t,patch:r,validateField:n.serializedProperty?.validateField});if(r.kind==="game-object.field")return ji(t,r.targetId,r.path,r.value,n.field);if(r.kind==="game-object.field-batch")return Yd(t,r.targetIds,r.path,r.value,n.field);if(r.kind==="game-object.create-from-asset")return qd(t,r.assetItem,r.placement,{...n.assetPlacement??{},...r.name?{name:r.name}:{}}).document;if(r.kind==="game-object.transform")return ft(r.targetId)?t:Di(t,r.targetId,{transform:r.transform});if(r.kind==="game-object.transform-batch")return r.targets.reduce((o,a)=>{if(ft(a.targetId))return o;let i=he(o,a.targetId),s=i?ie(i):null;if(!s)return o;if(l1(a.transform))return Di(o,a.targetId,{transform:a.transform});if(jt(s))return o;let c=a.transform;return Di(o,a.targetId,{position:c.position?{...s.position,...c.position}:void 0,rotation:c.rotation?{...s.rotation,...c.rotation}:void 0,scale:c.scale?{...Br(s,"scale"),...c.scale}:void 0})},t);if(r.kind==="game-object.duplicate-selection"){let o=new Set(t.scene.gameObjects.map(l=>l.id)),a=n.isProtectedDuplicateSource??u1,i=new Set(t.scene.gameObjects.filter(l=>a(l,t)).map(l=>l.id)),s=new Set,c=[];for(let l of r.gameObjects)o.has(l.id)||s.has(l.id)||qe(l)||a(l,t)||(s.add(l.id),c.push(l));let d=p1(c,o,i);if(d.length===0)return t;let u=[...t.scene.gameObjects,...d];return{...t,scene:{...t.scene,gameObjects:r.order?Ty(u,r.order):u}}}if(r.kind==="game-object.rename"){let o=r.name.trim();if(!o)return t;let a=t.scene.gameObjects.find(i=>i.id===r.targetId);return!a||a.name===o?t:{...t,scene:{...t.scene,gameObjects:t.scene.gameObjects.map(i=>i.id===r.targetId?{...i,name:o}:i)}}}if(r.kind==="game-object.create-group"||r.kind==="game-object.create-primitive")return t.scene.gameObjects.some(o=>o.id===r.gameObject.id)?t:{...t,scene:{...t.scene,gameObjects:[...t.scene.gameObjects,r.gameObject]}};if(r.kind==="game-object.delete-subtree"){if(r.targetIds.some(ft))return t;let o=yn(t,r.targetIds);if(o.size===0)return t;let a=n.isProtectedDeleteTarget??m1;return t.scene.gameObjects.some(i=>o.has(i.id)&&a(i,t))?t:{...t,scene:{...t.scene,gameObjects:t.scene.gameObjects.filter(i=>!o.has(i.id))}}}if(r.kind==="game-object.reparent"){if(ft(r.targetId))return t;let o=t.scene.gameObjects.find(c=>c.id===r.targetId);if(!o)return t;let a=r.transform?wo(r.transform):null;if(r.transform&&!a)return t;let i=!!a&&!ID(ie(o),a);if(o.parentId===r.parentId&&!i)return t;let s={...o,parentId:r.parentId,components:i?o.components.map(c=>c.type==="Transform"?a:c):o.components};return{...t,scene:{...t.scene,gameObjects:t.scene.gameObjects.map(c=>c.id===r.targetId?s:c)}}}if(r.kind==="game-object.hierarchy-move"){let o=r.moves.filter(l=>!ft(l.targetId)),a=new Map;for(let l of o){let m=wo(l.transform);if(!m)return t;a.set(l.targetId,m)}let i=new Map(o.map(l=>[l.targetId,l]));if(i.size===0)return t;let s=!1,c=t.scene.gameObjects.map(l=>{let m=i.get(l.id);if(!m)return l;let p=a.get(m.targetId),h=!ID(ie(l),p);if(l.parentId===m.parentId&&!h)return l;let g={...l,parentId:m.parentId,components:h?l.components.map(f=>f.type==="Transform"?p:f):l.components};return s=!0,g}),d=Ty(c,r.order),u=d.some((l,m)=>l!==t.scene.gameObjects[m]);return!s&&!u?t:{...t,scene:{...t.scene,gameObjects:d}}}if(r.kind==="game-object.group-selection"){if(qe(r.gameObject)||t.scene.gameObjects.some(s=>s.id===r.gameObject.id))return t;let o=new Set(r.childIds.filter(s=>!ft(s)));if(o.size===0)return t;let a=new Map;for(let[s,c]of Object.entries(r.childTransforms)){if(!o.has(s))continue;let d=wo(c);if(!d)return t;a.set(s,d)}let i=t.scene.gameObjects.map(s=>{if(!o.has(s.id))return s;let c=a.get(s.id);return{...s,parentId:r.gameObject.id,components:c?s.components.map(d=>d.type!=="Transform"?d:c):s.components}});return{...t,scene:{...t.scene,gameObjects:Ty([...i,r.gameObject],r.order)}}}return t}function u1(e){return hn(e)}function m1(e){return gn(e)}function p1(e,t,r){let n=new Map(e.map(a=>[a.id,a])),o=!0;for(;o;){o=!1;for(let a of[...n.values()])!a.parentId||n.has(a.parentId)||t.has(a.parentId)&&!r.has(a.parentId)||(n.delete(a.id),o=!0)}return e.filter(a=>n.has(a.id))}function Ty(e,t){let r=new Map(e.map(a=>[a.id,a])),n=[],o=new Set;for(let a of t){if(o.has(a))continue;let i=r.get(a);i&&(n.push(i),o.add(a))}return[...n,...e.filter(a=>!o.has(a.id))]}function ID(e,t){if(!e)return!1;let r=jt(e),n=jt(t);return r||n?r&&n&&e.matrix.every((o,a)=>o===t.matrix[a]):Ay(e.position,t.position)&&Ay(e.rotation,t.rotation)&&Ay(Br(e,"scale"),Br(t,"scale"))}function Ay(e,t){return e.x===t.x&&e.y===t.y&&e.z===t.z}var f1="main_camera",g1="environment_light",h1="sun_light",dp={projection:"orthographic",alpha:3.9269908169872414,beta:.8,radius:14,orthoSize:6,fov:.85,targetOffset:{x:0,y:0,z:0},minZ:1,maxZ:1e4,lowerBetaLimit:.8,upperBetaLimit:.8,lowerRadiusLimit:14,upperRadiusLimit:14,inertia:.9,targetScreenOffset:{x:0,y:0},inspectorLanguage:"zh"},Zd={type:"directional",intensity:2,direction:{..._m},diffuseColor:{r:1,g:1,b:1},inspectorLanguage:"zh"},Ni={type:"hemispheric",intensity:.8,diffuseColor:{r:1,g:1,b:1},groundColor:{r:.48,g:.52,b:.62},inspectorLanguage:"zh"};function AD(){return{type:"Transform",position:{x:0,y:0,z:0},rotation:{x:0,y:0,z:0},scale:{x:1,y:1,z:1}}}function PD(e){let t=Oy({...e,kind:"transform",transformType:"camera",camera:el(e.camera)});return delete t.light,delete t.primitive,Ry(t,e)?e:t}function Dy(e,t){let r=Oy({...e,name:t==="hemispheric"?"Environment Light":"Directional Light",kind:"transform",transformType:"light",light:Gi(e.light,t)});return delete r.camera,delete r.primitive,Ry(r,e)?e:r}function xD(e){let t=Oy({...e,kind:"transform",transformType:"plain"});return delete t.camera,delete t.light,delete t.primitive,Ry(t,e)?e:t}function Oy(e){return ie(e)?e:{...e,components:[{type:"Transform",position:{x:0,y:0,z:0},rotation:{x:0,y:0,z:0},scale:{x:1,y:1,z:1}},...e.components]}}function el(e){let t=dp;return{...t,...e??{},projection:b1(e?.projection),fov:Xd(e?.fov,t.fov??.85),targetOffset:E1(e?.targetOffset)?{...e.targetOffset}:{...t.targetOffset??{x:0,y:0,z:0}},minZ:Xd(e?.minZ,t.minZ??1),maxZ:Xd(e?.maxZ,t.maxZ??1e4),lowerBetaLimit:Qd(e?.lowerBetaLimit,t.lowerBetaLimit??t.beta),upperBetaLimit:Qd(e?.upperBetaLimit,t.upperBetaLimit??t.beta),lowerRadiusLimit:Xd(e?.lowerRadiusLimit,t.lowerRadiusLimit??t.radius),upperRadiusLimit:Xd(e?.upperRadiusLimit,t.upperRadiusLimit??t.radius),inertia:S1(e?.inertia,t.inertia??.9),targetScreenOffset:I1(e?.targetScreenOffset)?{...e.targetScreenOffset}:{...t.targetScreenOffset??{x:0,y:0}},inspectorLanguage:y1(e?.inspectorLanguage)}}function MD(e,t){return TD(e,t,{valueField:"beta",lowerField:"lowerBetaLimit",upperField:"upperBetaLimit",minValue:Number.NEGATIVE_INFINITY}),TD(e,t,{valueField:"radius",lowerField:"lowerRadiusLimit",upperField:"upperRadiusLimit",minValue:.001}),e}function TD(e,t,r){let n=`camera.${r.valueField}`,o=`camera.${r.lowerField}`,a=`camera.${r.upperField}`,i=Qd(e[r.valueField],dp[r.valueField]),s=Qd(e[r.lowerField],i),c=Qd(e[r.upperField],i);Number.isFinite(r.minValue)&&(i=Math.max(r.minValue,i),s=Math.max(r.minValue,s),c=Math.max(r.minValue,c)),c<s&&(t===a?s=c:c=s),t===o||t===a?i=Math.min(c,Math.max(s,i)):t===n&&(i<s&&(s=i),i>c&&(c=i)),e[r.valueField]=i,e[r.lowerField]=s,e[r.upperField]=c}function b1(e){return e==="perspective"?"perspective":"orthographic"}function y1(e){return e==="en"?"en":"zh"}function DD(e){return e==="en"?"en":"zh"}function Qd(e,t){return typeof e=="number"&&Number.isFinite(e)?e:t}function Xd(e,t){return typeof e=="number"&&Number.isFinite(e)&&e>0?e:t}function S1(e,t){return typeof e=="number"&&Number.isFinite(e)&&e>=0&&e<=1?e:t}function I1(e){if(!e||typeof e!="object")return!1;let t=e;return typeof t.x=="number"&&Number.isFinite(t.x)&&typeof t.y=="number"&&Number.isFinite(t.y)}function E1(e){if(!e||typeof e!="object")return!1;let t=e;return typeof t.x=="number"&&Number.isFinite(t.x)&&typeof t.y=="number"&&Number.isFinite(t.y)&&typeof t.z=="number"&&Number.isFinite(t.z)}function OD(e){return e.maxZ!=null&&e.minZ!=null&&e.maxZ<=e.minZ||e.upperBetaLimit!=null&&e.lowerBetaLimit!=null&&e.upperBetaLimit<e.lowerBetaLimit||e.upperRadiusLimit!=null&&e.lowerRadiusLimit!=null&&e.upperRadiusLimit<e.lowerRadiusLimit}function T1(e,t){return e?.type==="hemispheric"?"hemispheric":e?.type==="directional"?"directional":t}function Gi(e,t="directional"){return T1(e,t)==="hemispheric"?P1(e):A1(e)}function A1(e){let t=Zd,r=e?.type==="directional"?e:void 0;return{...t,...r??{},type:"directional",direction:{...t.direction,...r?.direction??{}},diffuseColor:r?.diffuseColor?{...t.diffuseColor,...r.diffuseColor}:t.diffuseColor,inspectorLanguage:DD(RD(r))}}function P1(e){let t=Ni,r=e?.type==="hemispheric"?e:void 0;return{...t,...r??{},type:"hemispheric",diffuseColor:r?.diffuseColor?{...t.diffuseColor,...r.diffuseColor}:t.diffuseColor,groundColor:r?.groundColor?{...t.groundColor,...r.groundColor}:t.groundColor,inspectorLanguage:DD(RD(r))}}function RD(e){return e&&typeof e=="object"?e.inspectorLanguage:void 0}function Ry(e,t){return JSON.stringify(e)===JSON.stringify(t)}function CD(e,t,r){return{id:Cy(t,f1,r),guid:r.createGameObjectGuid(),name:"Main Camera",kind:"transform",...e?{parentId:e}:{},active:!0,transformType:"camera",camera:el(void 0),components:[{type:"Transform",position:{x:0,y:5,z:-8},rotation:{x:0,y:0,z:0},scale:{x:1,y:1,z:1}}]}}function wD(e,t,r){return{id:Cy(t,h1,r),guid:r.createGameObjectGuid(),name:"Directional Light",kind:"transform",...e?{parentId:e}:{},active:!0,transformType:"light",light:Gi(void 0,"directional"),components:[{type:"Transform",position:{x:0,y:4,z:-3},rotation:{x:0,y:0,z:0},scale:{x:1,y:1,z:1}}]}}function vD(e,t,r){return{id:Cy(t,g1,r),guid:r.createGameObjectGuid(),name:"Environment Light",kind:"transform",...e?{parentId:e}:{},active:!0,transformType:"light",light:Gi(void 0,"hemispheric"),components:[{type:"Transform",position:{x:0,y:3,z:0},rotation:{x:0,y:0,z:0},scale:{x:1,y:1,z:1}}]}}function Cy(e,t,r){let n=r.createUniqueId([...e],t);return e.add(n),n}function kD(e,t){let r=t.name.trim();if(!r)return null;let n=he(e,t.id);return!n||n.name===r?null:{label:`Rename ${n.name??n.id} to ${r}`,patch:{kind:"game-object.rename",targetId:t.id,name:r},changedId:t.id}}function jD(e,t){let r=VD(e,t);if(r===null)return null;let n=Ur(mp(e),t.name,{fallbackName:"Empty"}),o=GD(e.scene.gameObjects.map(i=>i.id),t.objectId,n);if(!o)return null;let a={id:o,guid:kt(),name:n,kind:"transform",transformType:"plain",...r?{parentId:r}:{},active:!0,components:[{type:"Transform",position:{x:0,y:0,z:0},rotation:{x:0,y:0,z:0},scale:{x:1,y:1,z:1}}]};return{label:`Create empty ${n}`,patch:{kind:"game-object.create-group",gameObject:a},createdId:o,changedIds:[o]}}function ND(e,t){let r=N1(t.shape);if(!r)return null;let n=C1(e,t);if(n===null)return null;let o=Ur(mp(e),t.name,{fallbackName:G1(r)}),a=GD(e.scene.gameObjects.map(c=>c.id),t.objectId,o);if(!a)return null;let i=L1(r),s={id:a,guid:kt(),name:o,kind:"primitive",...n?{parentId:n}:{},active:!0,primitive:{shape:r},shadow:{cast:"none",receive:"none"},components:[bn(i)]};return{label:`Create ${o}`,patch:{kind:"game-object.create-primitive",gameObject:s},createdId:a,changedIds:[a]}}function GD(e,t,r){return t===void 0?Vr(e,r):Vr([],t)===t&&!e.includes(t)?t:null}function LD(e,t){if(t.ids.some(ft))return null;let r=yn(e,t.ids);if(r.size===0||e.scene.gameObjects.some(a=>r.has(a.id)&&gn(a)))return null;let n=k1(e,r,t.activeId??null),o=[...r];return{label:`Delete ${o.length} GameObject${o.length===1?"":"s"}`,patch:{kind:"game-object.delete-subtree",targetIds:t.ids},deletedIds:o,fallbackSelectionId:n}}function vy(e,t,r={}){if(t.placement!=="inside")return{ok:!1,reason:"Only inside reparent is supported."};let n=he(e,t.draggedId),o=he(e,t.targetId);return n?qe(n)?{ok:!1,reason:"Root GameObject cannot be reparented."}:o?ie(n)?fn(o)?n.id===o.id?{ok:!1,reason:"GameObject cannot be parented to itself."}:j1(e,n.id,o.id)?{ok:!1,reason:"GameObject cannot be parented to its descendant."}:t.preserveWorldTransform!==!1&&!up(e,n.id,o.id,void 0,{preserveWorldPolicy:r})?{ok:!1,reason:"Cannot preserve world transform under the target parent."}:{ok:!0}:{ok:!1,reason:`${t.targetId} cannot have children.`}:{ok:!1,reason:`${t.draggedId} has no Transform to preserve.`}:{ok:!1,reason:`Parent GameObject not found: ${t.targetId}`}:{ok:!1,reason:`GameObject not found: ${t.draggedId}`}}function FD(e,t,r={}){if(!vy(e,t,r).ok)return null;let o=he(e,t.draggedId);if(!o||!ie(o))return null;let a=t.targetId,i=t.preserveWorldTransform===!1?Jn(o):up(e,o.id,a,void 0,{preserveWorldPolicy:r});return!i||o.parentId===a&&YD(Jn(o),i)?null:{label:`Reparent ${o.name??o.id}`,patch:{kind:"game-object.reparent",targetId:o.id,parentId:a,transform:i},changedIds:[o.id]}}function _y(e,t,r={}){let n=vo(e),o=BA(n,t);if(!o.ok)return o;let a=an(n,t.ids);if(a.some(ft))return{ok:!1,reason:"Root GameObject cannot be moved."};let i=Ny(e,t);if(i&&!Gy(e,i))return{ok:!1,reason:`${i} cannot have children.`};if(t.preserveWorldTransform!==!1)for(let s of a){let c=he(e,s);if(!c)return{ok:!1,reason:`GameObject not found: ${s}`};if(!ie(c))return{ok:!1,reason:`${s} has no Transform to preserve.`};if(!up(e,s,i,t,r))return{ok:!1,reason:"Cannot preserve world transform under the target parent."}}return{ok:!0}}function $D(e,t,r={}){if(!_y(e,t,r).ok)return null;let o=vo(e),a=an(o,t.ids),i=Ny(e,t),s=a.map(l=>{let m=he(e,l);if(!m||!ie(m))return null;let p=t.preserveWorldTransform===!1?Jn(m):up(e,l,i,t,r),h=p?xi(p):null;return h?i?{targetId:l,parentId:i,transform:h}:{targetId:l,transform:h}:null}).filter(l=>!!l);if(s.length!==a.length)return null;let c=w1(e,a,t),d=e.scene.gameObjects.map(l=>l.id);return!s.some(l=>{let m=he(e,l.targetId);return!m||m.parentId!==l.parentId||!YD(Jn(m),l.transform)})&&F1(d,c)?null:{label:`Move ${a.length} GameObject${a.length===1?"":"s"}`,patch:{kind:"game-object.hierarchy-move",moves:s,order:c},changedIds:a}}function ky(e,t,r={}){let n=vo(e),o=zA(n,t);if(!o.ok)return o;let a=an(n,t.ids);if(a.some(ft))return{ok:!1,reason:"Root GameObject cannot be grouped."};let i=UD(e,t.parentId??null);if(i&&!Gy(e,i))return{ok:!1,reason:`${i} cannot have children.`};if(t.preserveWorldTransform!==!1){let s=qD(e,a),c=s?{position:s,rotation:{x:0,y:0,z:0},scale:{x:1,y:1,z:1}}:null;if(!c||!Ld(e,i,c,r))return{ok:!1,reason:"Cannot preserve world transform under the target parent."};for(let d of a){let u=he(e,d);if(!u)return{ok:!1,reason:`GameObject not found: ${d}`};if(!ie(u))return{ok:!1,reason:`${d} has no Transform to preserve.`};let l=Sr(e,d);if(!l||!HD(c,l,r))return{ok:!1,reason:"Cannot preserve world transform under the target parent."}}}return{ok:!0}}function BD(e,t,r={}){if(!ky(e,t,r).ok)return null;let o=vo(e),a=an(o,t.ids);if(a.length===0)return null;let i=UD(e,t.parentId??null),s=qD(e,a);if(!s)return null;let c={position:s,rotation:{x:0,y:0,z:0},scale:{x:1,y:1,z:1}},d=Ld(e,i,c,r);if(!d)return null;let u=Ur(mp(e),t.name,{fallbackName:"Parent"}),l=Vr(e.scene.gameObjects.map(g=>g.id),u),m={id:l,guid:kt(),name:u,kind:"transform",transformType:"plain",...i?{parentId:i}:{},active:!0,components:[bn(d)]},p={};for(let g of a){let f=he(e,g);if(!f)return null;if(t.preserveWorldTransform===!1){p[g]=Jn(f);continue}let y=Sr(e,g);if(!y)return null;let A=HD(c,y,r);if(!A)return null;p[g]=A}let h=v1(e,l,a,t.insertBeforeId??null);return{label:`Create Parent for ${a.length} GameObject${a.length===1?"":"s"}`,patch:{kind:"game-object.group-selection",gameObject:m,childIds:a,childTransforms:p,order:h},createdId:l,changedIds:[l,...a]}}function zD(e){let t=e.isProtectedDuplicateSource??x1,r=vo(e.document),n=new Set(an(r,e.targetIds).filter(f=>{let y=he(e.document,f);return!!y&&!qe(y)&&!t(y,e.document)&&!D1(e.document,y.id,t)})),o=jy(e.document).filter(f=>n.has(f));if(o.length===0)return null;let a=yn(e.document,o),i=new Map,s=new Set(e.document.scene.gameObjects.map(f=>f.id)),c=new Map,d=mp(e.document),u=O1(e.document,o,a,t);for(let f of u){let y=he(e.document,f),A=Ur(d,y.name,{alwaysAppendSuffix:!0,fallbackName:y.id});d.push(A);let T=Vr([...s],A);s.add(T),i.set(y.id,T),c.set(y.id,A)}let l=u.map(f=>he(e.document,f)).filter(f=>!!f&&i.has(f.id)).map(f=>{let y=structuredClone(f);return y.id=i.get(f.id),y.guid=kt(),y.name=c.get(f.id),y.parentId&&i.has(y.parentId)&&(y.parentId=i.get(y.parentId)),y});if(l.length===0)return null;let m=l.map(f=>f.id),p=o.map(f=>i.get(f)).filter(f=>!!f),h=M1(e.document,o,e.activeId),g=h&&i.has(h)?i.get(h):p[p.length-1]??m[m.length-1]??null;return{label:`Duplicate ${m.length} object${m.length===1?"":"s"}`,patch:{kind:"game-object.duplicate-selection",gameObjects:l,order:R1(e.document,o,i)},createdIds:m,selectedIds:p,activeId:g,changedIds:m}}function x1(e){return hn(e)}function M1(e,t,r){if(r&&t.includes(r))return r;if(r){for(let n of t)if(yn(e,[n]).has(r))return n}return t[t.length-1]??null}function D1(e,t,r){let n=new Map(e.scene.gameObjects.map(i=>[i.id,i])),o=new Set,a=n.get(t);for(;a?.parentId;){if(o.has(a.parentId))return!0;o.add(a.parentId);let i=n.get(a.parentId);if(!i)return!1;if(r(i,e))return!0;a=i}return!1}function O1(e,t,r,n){let o=jy(e),a=new Map(o.map((l,m)=>[l,m])),i=new Map(e.scene.gameObjects.map(l=>[l.id,l])),s=new Map;for(let l of e.scene.gameObjects){let m=l.parentId&&i.has(l.parentId)?l.parentId:null,p=s.get(m)??[];p.push(l.id),s.set(m,p)}for(let l of s.values())l.sort((m,p)=>(a.get(m)??Number.MAX_SAFE_INTEGER)-(a.get(p)??Number.MAX_SAFE_INTEGER));let c=[],d=new Set,u=l=>{if(d.has(l)||!r.has(l))return;d.add(l);let m=he(e,l);if(!(!m||qe(m)||n(m,e))){c.push(m.id);for(let p of s.get(m.id)??[])u(p)}};for(let l of t)u(l);return c}function R1(e,t,r){let n=jy(e),o=new Map;for(let i of t){let s=yn(e,[i]),c=n.filter(l=>s.has(l)),d=c.map(l=>r.get(l)).filter(l=>!!l),u=c[c.length-1];u&&d.length>0&&o.set(u,d)}let a=[];for(let i of n){a.push(i);let s=o.get(i);s&&a.push(...s)}return a}function jy(e){let t=e.scene.gameObjects,r=new Map(t.map(c=>[c.id,c])),n=new Map;for(let c of t){let d=c.parentId&&r.has(c.parentId)?c.parentId:null,u=n.get(d)??[];u.push(c.id),n.set(d,u)}let o=[],a=new Set,i=c=>{if(!(a.has(c)||!r.has(c))){a.add(c),o.push(c);for(let d of n.get(c)??[])i(d)}},s=gt(e);s&&i(s);for(let c of n.get(null)??[])i(c);for(let c of t)i(c.id);return o}function VD(e,t){if(t.parentId){let n=he(e,t.parentId);return n&&fn(n)?n.id:null}let r=t.activeId?he(e,t.activeId):null;if(r&&fn(r))return r.id;if(r?.parentId){let n=he(e,r.parentId);if(n&&fn(n))return n.id}return gt(e)}function C1(e,t){return t.parentId===null?gt(e):VD(e,t)}function Ny(e,t){if(t.placement==="root")return gt(e);if(t.placement==="inside"&&t.targetId)return t.targetId;let r=t.targetId?he(e,t.targetId):null;return t.parentId??r?.parentId??gt(e)}function UD(e,t){return t&&Gy(e,t)?t:gt(e)}function Gy(e,t){let r=he(e,t);return!!r&&fn(r)}function up(e,t,r,n,o={}){let a=Sr(e,t);if(!a)return null;let i=he(e,t);if(!i)return null;let s=n?o.resolveLocalTransform?.({document:e,intent:n,gameObject:i,parentId:r,worldTransform:a}):null;if(s)return xi(s);let c=Ld(e,r,a,o.preserveWorldPolicy);return c?xi(c):null}function HD(e,t,r={}){let n=lm(r),o=Gs(e,t,{allowMatrixFallback:n.allowMatrixFallback});return o?xi(o):null}function w1(e,t,r){let n=KD(e,t),o=new Set(n),a=e.scene.gameObjects.map(s=>s.id).filter(s=>!o.has(s)),i=_1(e,a,{placement:r.placement,targetId:r.targetId??null,beforeId:r.beforeId??null,afterId:r.afterId??null,parentId:Ny(e,r)});return WD(a,n,i)}function v1(e,t,r,n){let o=KD(e,r),a=new Set(o),i=e.scene.gameObjects.map(l=>l.id),s=i.filter(l=>!a.has(l)),c=Math.min(...r.map(l=>i.indexOf(l)).filter(l=>l>=0)),d=Number.isFinite(c)?s.filter(l=>i.indexOf(l)<c).length:s.length,u=n?Math.max(0,s.indexOf(n)):d;return WD(s,[t,...o],u)}function KD(e,t){let r=yn(e,[...t]);return e.scene.gameObjects.map(n=>n.id).filter(n=>r.has(n))}function _1(e,t,r){return r.beforeId?_D(t.indexOf(r.beforeId),t.length):r.afterId?lp(e,t,r.afterId):r.placement==="before"&&r.targetId?_D(t.indexOf(r.targetId),t.length):r.placement==="after"&&r.targetId||r.placement==="inside"&&r.targetId?lp(e,t,r.targetId):r.placement==="root"?t.length:r.parentId?lp(e,t,r.parentId):t.length}function lp(e,t,r){let n=yn(e,[r]),o=t.indexOf(r);if(o<0)return t.length;for(let a=o+1;a<t.length&&n.has(t[a]);a+=1)o=a;return o+1}function WD(e,t,r){let n=Math.max(0,Math.min(r,e.length));return[...e.slice(0,n),...t,...e.slice(n)]}function _D(e,t){return e>=0?e:t}function qD(e,t){let r=t.map(o=>Sr(e,o)).filter(o=>!!o);if(r.length===0)return null;let n=r.map(bP);return{x:n.reduce((o,a)=>o+a.x,0)/n.length,y:n.reduce((o,a)=>o+a.y,0)/n.length,z:n.reduce((o,a)=>o+a.z,0)/n.length}}function k1(e,t,r){let n=r?he(e,r):null;if(n?.parentId&&!t.has(n.parentId)&&he(e,n.parentId))return n.parentId;for(let o=e.scene.gameObjects.length-1;o>=0;o-=1){let a=e.scene.gameObjects[o];if(!t.has(a.id))return a.id}return null}function j1(e,t,r){let n=Lb(e),o=new Set,a=n.get(r);for(;a?.parentId&&!o.has(a.parentId);){if(a.parentId===t)return!0;o.add(a.parentId),a=n.get(a.parentId)}return!1}function N1(e){return e==="cube"||e==="sphere"||e==="plane"||e==="capsule"?e:null}function G1(e){return e[0].toUpperCase()+e.slice(1)}function L1(e){return{position:{x:0,y:0,z:0},rotation:{x:0,y:0,z:0},scale:{x:1,y:1,z:1}}}function mp(e){return e.scene.gameObjects.map(t=>t.name??t.id)}function YD(e,t){return!ln(e)||!ln(t)?Td(Gr(e),Gr(t)):wy(e.position,t.position)&&wy(e.rotation,t.rotation)&&wy(e.scale,t.scale)}function wy(e,t){return Math.abs(e.x-t.x)<1e-6&&Math.abs(e.y-t.y)<1e-6&&Math.abs(e.z-t.z)<1e-6}function F1(e,t){return e.length===t.length&&e.every((r,n)=>r===t[n])}function Fy(e){return{getHierarchyItems(t){return Ly(t,e)},normalizeHierarchyDocument(t){return Bb(t)},createRenamePatch(t,r){return jo(kD(t,r))},createCreateGroupPatch(t,r){return jo(jD(t,r))},createCreatePrimitivePatch(t,r){return jo(ND(t,r))},createDeleteSubtreePatch(t,r){let n=LD(t,r);if(!n)return null;let o=new Set(n.deletedIds);return t.scene.gameObjects.some(a=>o.has(a.id)&&e.isProtectedSystemGameObject(a))?null:jo(n)},collectSubtreeIdList(t,r){return _o(t,r)},validateReparent(t,r){let n=e.findGameObject(t,r.draggedId),o=e.findGameObject(t,r.targetId);return n&&e.isProtectedSystemGameObject(n)?{ok:!1,reason:"Protected system GameObject cannot be reparented."}:o&&e.isProtectedSystemGameObject(o)?{ok:!1,reason:"Protected system GameObject cannot have children."}:vy(t,r)},createReparentPatch(t,r){return jo(FD(t,r))},validateHierarchyMove(t,r){let n=Ly(t,e);if(an(n,r.ids).some(i=>e.isProtectedSystemGameObjectId(t,i)))return{ok:!1,reason:"Protected system GameObject cannot be moved."};let a=$1(t,r,e);return e.isProtectedSystemGameObjectId(t,a)?{ok:!1,reason:"Protected system GameObject cannot have children."}:_y(t,r)},createHierarchyMovePatch(t,r){return jo($D(t,r))},validateGroupSelection(t,r){let n=Ly(t,e);if(an(n,r.ids).some(i=>e.isProtectedSystemGameObjectId(t,i)))return{ok:!1,reason:"Protected system GameObject cannot be grouped."};let a=B1(t,r.parentId??null,e);return e.isProtectedSystemGameObjectId(t,a)?{ok:!1,reason:"Protected system GameObject cannot have children."}:ky(t,r)},createGroupSelectionPatch(t,r){return jo(BD(t,r))},createDuplicateSelectionPatch(t){let r=t.targetIds.filter(n=>{let o=e.findGameObject(t.document,n);return!!o&&!e.isProtectedSystemGameObject(o)});return jo(zD({...t,targetIds:r,isProtectedDuplicateSource:n=>e.isProtectedSystemGameObject(n)}))},createPlacedAssetPatch(t){return jo(Zb(t))}}}function Ly(e,t){let r=vo(e),n=new Map(e.scene.gameObjects.map(a=>[a.id,a])),o=[];for(let a of r){let i=n.get(a.id)??null;o.push(t.decorateHierarchyItem?.({item:a,gameObject:i,document:e})??a),i&&o.push(...t.collectHierarchyItemChildren?.({item:a,gameObject:i,document:e})??[])}return o}function $1(e,t,r){if(t.placement==="root")return r.resolveRootContainerId(e);if(t.placement==="inside"&&t.targetId)return t.targetId;let n=t.targetId?r.findGameObject(e,t.targetId):null;return t.parentId??n?.parentId??r.resolveRootContainerId(e)}function B1(e,t,r){let n=t?r.findGameObject(e,t):null;return n&&fn(n)?n.id:r.resolveRootContainerId(e)}function jo(e){return e?{...e,patch:e.patch}:null}function $y(e,t){let r=t.ensureGameObjectGuids(e),n=t.resolveRootContainerId(r),o=!1,a=!1,i=!1,s=r!==e,c=t.ensureDefaultMaterialAssets(r.scene.materialAssets??[]);s=s||c!==r.scene.materialAssets;let d=r.scene.gameObjects.map(h=>{if(h.id===t.systemDefaults.environmentLightId){a=!0;let g=t.systemDefaults.normalizeEnvironmentLightGameObject(h);return s=s||g!==h,g}if(h.id===t.systemDefaults.sunLightId){i=!0;let g=t.systemDefaults.normalizeSunLightGameObject(h);return s=s||g!==h,g}if(t.isCameraGameObject(h)){if(!o){o=!0;let g=t.systemDefaults.normalizeCameraGameObject(h);return s=s||g!==h,g}return s=!0,t.systemDefaults.normalizePlainTransformGameObject(h)}if(t.isLightGameObject(h)){let g=t.systemDefaults.normalizePlainTransformGameObject(h);return s=!0,g}if(!t.isCustomTransformType?.(h.transformType)&&z1(h)){let g=t.systemDefaults.normalizePlainTransformGameObject(h);return s=s||g!==h,g}return h}),u={createGameObjectGuid:t.createGameObjectGuid,createUniqueId:t.createUniqueId},l=new Set(d.map(h=>h.id));o||(s=!0,d.push(t.systemDefaults.createDefaultCameraGameObject(n,l,u))),a||(s=!0,d.push(t.systemDefaults.createDefaultEnvironmentLightGameObject(n,l,u))),i||(s=!0,d.push(t.systemDefaults.createDefaultSunLightGameObject(n,l,u)));let m=t.normalizeMaterialBindings({...r,scene:{...r.scene,gameObjects:d,materialAssets:c}},c,d);c=m.materialAssets,d=m.gameObjects,s=s||m.changed;let p=s?{...r,scene:{...r.scene,gameObjects:d,materialAssets:c}}:r;return t.syncMarkerGraphDocument(p)}function z1(e){return(e.kind==="transform"||e.transformType==="plain")&&!e.camera&&!e.light&&!e.primitive&&!e.prefab&&!e.marker&&!e.components.some(t=>t.type==="ModelRenderer"||t.type==="ImageRenderer")}function By(e,t,r){let n=r.normalizeRootTransformDocument(V1(e,t,r));return r.syncMarkerGraphDocument(r.ensureGameObjectGuids(r.normalizeDocumentAfterCommand(n,t)))}function pp(e){return{normalizeFieldValue:e.normalizeFieldValue,validateField:({document:t,gameObject:r,path:n,value:o})=>e.validateField(t,r,n,o),blockFieldPatch:({document:t,targetId:r,path:n,value:o})=>fp(t,r,n,o,e),normalizePrimitiveShape:e.normalizePrimitiveShape,mergeCameraDefaults:e.systemDefaults.mergeCameraDefaults,normalizeCameraAfterFieldPatch:(t,r)=>t&&e.systemDefaults.normalizeCameraAfterFieldPatch(t,r),mergeLightDefaults:e.systemDefaults.mergeLightDefaults,isCustomTransformType:e.isCustomTransformType,applyCustomTransformType:e.applyCustomTransformType,clearCustomTransformState:e.clearCustomTransformState,patchCustomTransformField:e.patchCustomTransformField}}function zy(e,t,r,n,o){let a=o.findGameObject(e,t);if(!a)return e;let i=dx(a,{...r===o.systemDefaults.horizontalLightAnglePath?{horizontalAngleDeg:n}:{},...r===o.systemDefaults.elevationLightAnglePath?{elevationAngleDeg:n}:{}});return i===a?e:{...e,scene:{...e.scene,gameObjects:e.scene.gameObjects.map(s=>s.id===t?i:s)}}}function fp(e,t,r,n,o){let a=o.findGameObject(e,t);if(!a)return!1;let i=o.isCameraGameObject(a),s=o.isLightGameObject(a),c=o.isProtectedSystemGameObject(a),d=a.id===o.systemDefaults.sunLightId&&a.light?.type==="directional"&&(r==="transform.rotation"||r.startsWith("transform.rotation."));if(r.startsWith("transform.")&&c&&!d||r.startsWith("camera.")&&!i)return!0;if(r.startsWith("camera.")&&i){let u={camera:o.systemDefaults.mergeCameraDefaults(a.camera)};if(Ut(u,r,n),u.camera&&(u.camera=o.systemDefaults.normalizeCameraAfterFieldPatch(u.camera,r),o.systemDefaults.hasInvalidCameraRelationships(u.camera)))return!0}return!!(r.startsWith("light.")&&!s||r==="light.type"&&(a.id===o.systemDefaults.environmentLightId&&n!=="hemispheric"||a.id===o.systemDefaults.sunLightId&&n!=="directional")||r==="transformType"&&(i&&n!=="camera"||s&&n!=="light"||!s&&n==="light"||n==="camera"&&!i&&o.hasCamera(e,t)))}function V1(e,t,r){let n=t.type==="document.replace"?null:t.patch;if(n){if(n.kind==="scene.material-asset.field")return r.patchMaterialAssetField(e,n.materialAssetId,n.path,n.value);if(n.kind==="scene.material-asset.replace")return r.replaceMaterialAsset(e,n.materialAssetId,n.materialAsset);if(n.kind==="scene.material-asset.create")return r.addMaterialAsset(e,n.materialAsset);if(n.kind==="scene.material-asset.delete")return r.deleteMaterialAsset(e,n.materialAssetId);if(n.kind==="scene.material-asset.create-and-bind")return r.addMaterialAssetAndBind(e,n.targetId,n.bindingPath,n.materialAsset);if(n.kind==="scene.prefab-asset.create")return r.addPrefabAsset(e,n.prefabAsset,n.sourceAsset);if(n.kind==="scene.prefab-asset.create-from-game-object"||n.kind==="scene.prefab-asset.duplicate")return r.addPrefabAsset(e,n.prefabAsset);if(n.kind==="scene.prefab-asset.field")return r.patchPrefabAssetField(e,n.assetId,n.path,n.value);if(n.kind==="scene.prefab-asset.replace")return r.replacePrefabAsset(e,n.assetId,n.prefabAsset,n.sourceAsset);if(n.kind==="scene.prefab-material-asset.duplicate-and-bind")return r.addMaterialAssetAndBindPrefabOverride(e,n.assetId,n.bindingPath,n.materialAsset);let o=r.reduceExtensionPatch?.({document:e,patch:n,command:t});if(o)return o;if(n.kind==="game-object.field"&&r.isDirectionalLightAnglePath(n.path)||n.kind==="game-object.field"&&r.isCustomFieldPatchPath?.(n.path))return r.patchGameObjectField(e,n.targetId,n.path,n.value);if(n.kind==="game-object.rendering-alpha-index-migration")return H1(e,n);if(n.kind==="scene.marker-graph")return r.reduceMarkerGraphPatch(e,n.command)}return Py(e,t,U1(r))}function U1(e){return{field:pp(e),serializedProperty:{validateField:e.validateSerializedPropertyField},assetPlacement:{createGameObjectGuid:e.createGameObjectGuid,resolveLocalTransform:({document:t,parentId:r,worldTransform:n})=>e.resolveLocalTransform({document:t,parentId:r,worldTransform:n})},isProtectedDuplicateSource:t=>e.isProtectedSystemGameObject(t),isProtectedDeleteTarget:t=>e.isProtectedSystemGameObject(t)}}function H1(e,t){return Qb({document:e,targetIds:t.targetIds,renderingGroupId:t.renderingGroupId,fromAlphaIndex:t.fromAlphaIndex,toAlphaIndex:t.toAlphaIndex})}function oc(e,t){let r=e.path,n=t.normalizeValue(r,e.value),o=t.parseMaterialAssetFieldPath(r);if(o){let l=t.normalizeMaterialAssetValue(o.fieldPath,n);if(!t.hasMaterialAsset(e.document,o.materialAssetId)||!t.validateMaterialAssetFieldValue(e.document,o.materialAssetId,o.fieldPath,l))return null;let m=t.collectMaterialAssetBindingIds(e.document,o.materialAssetId);return{label:`Patch material asset ${o.materialAssetId} ${o.fieldPath}`,patch:t.createMaterialAssetFieldPatch(o.materialAssetId,o.fieldPath,l),changedId:m[0]??e.targetId,changedIds:m,...o.fieldPath.startsWith("properties.")?{reprojectIds:m}:{}}}let a=t.findGameObject(e.document,e.targetId);if(!a)return null;let i=a.id,s=t.parseDuplicateMaterialAssetValue(n);if(s&&t.isMaterialBindingPath(r))return K1(e.document,a,r,s,t);if(t.isRootTransformPath(i,r))return null;if(r==="marker.target.objectId"&&t.isMarkerGameObject(a)&&typeof n=="string"){let l=t.createMarkerTargetUpdateCommand(e.document,i,n);return l?JD(i,"marker.target",l,t):null}if(!t.validateValue(e.document,a,r,n).ok||t.blockFieldPatch(e.document,i,r,n))return null;if(r==="marker.type"&&t.isMarkerGameObject(a)&&typeof n=="string"){let l=t.createMarkerTypeUpdateCommand(e.document,i,n);return l?JD(i,"marker.type",l,t):null}if(t.isDirectionalLightAnglePath(r)&&typeof n=="number"&&Number.isFinite(n))return{label:`Patch ${i} ${r}`,patch:t.createDirectionalLightPatch(i,r,n),changedId:i,changedIds:[i],reprojectIds:[i]};let c=t.createCustomInspectorPropertyPatch?.({...e,gameObject:a,path:r,value:n});if(c)return c;let d=t.collectChangedIdsForFieldPath(e.document,i,r),u=t.isProjectionShapePath(r)||t.isArtistMaterialPatchPath(r)||t.isCustomProjectionPath?.(r)?[i]:void 0;return{label:`Patch ${i} ${r}`,patch:t.createGameObjectFieldPatch(i,r,n),changedId:i,changedIds:d,...u?{reprojectIds:u}:{}}}function gp(e,t,r,n,o){let a=o.patchCustomGameObjectField?.({document:e,targetId:t,path:r,value:n});if(a)return a;if(r.startsWith("metadata.")||o.isDirectionalLightAnglePath(r)){let s=o.findGameObject(e,t);if(!s)return e;let c=o.normalizeValue(r,n);return!o.validateValue(e,s,r,c).ok||o.blockFieldPatch(e,t,r,c)?e:o.isDirectionalLightAnglePath(r)&&typeof c=="number"&&Number.isFinite(c)?o.patchDirectionalLightAngleField(e,t,r,c):W1(e,t,r,c,o)}let i=ji(e,t,r,n,o.fieldMutationOptions);return o.normalizeAfterFieldPatch(i,t,r,n)}function XD(e,t,r,n,o){let a=Array.from(new Set(t.filter(Boolean)));if(a.length===0)return e;let i=o.patchCustomGameObjectsField?.({document:e,targetIds:a,path:r,value:n,patchSingle:(c,d,u,l)=>gp(c,d,u,l,o)});if(i)return i;if(r.startsWith("metadata."))return q1(e,a,r,n,o);if(o.isDirectionalLightAnglePath(r))return a.reduce((c,d)=>gp(c,d,r,n,o),e);let s=Yd(e,a,r,n,o.fieldMutationOptions);return a.reduce((c,d)=>o.normalizeAfterFieldPatch(c,d,r,n),s)}function JD(e,t,r,n){return{label:`Patch ${e} ${t}`,patch:n.createMarkerGraphPatch(r),changedId:e,changedIds:[e],reprojectIds:[e]}}function K1(e,t,r,n,o){let a=NM({document:e,gameObject:t,bindingPath:r,sourceMaterialAssetId:n,isBindingPathAllowed:s=>o.isMaterialBindingPathAllowed(t,s)});return a?{label:`Duplicate material ${o.findMaterialAssetName(e,n)??n} for ${t.name??t.id}`,patch:a.patch,changedId:a.changedId,changedIds:a.changedIds,createdId:a.createdId,reprojectIds:a.reprojectIds}:null}function W1(e,t,r,n,o){return{...e,scene:{...e.scene,gameObjects:e.scene.gameObjects.map(a=>{if(a.id!==t)return a;let i=structuredClone(a);return Ut(i,r,n),i.metadata&&Object.keys(i.metadata).length===0&&delete i.metadata,i})}}}function q1(e,t,r,n,o){let a=new Set(t),i=o.normalizeValue(r,n),s=!1,c=e.scene.gameObjects.map(d=>{if(!a.has(d.id))return d;let u=d;if(!o.validateValue(e,u,r,i).ok||o.blockFieldPatch(e,d.id,r,i))return d;let l=structuredClone(d);return Ut(l,r,i),l.metadata&&Object.keys(l.metadata).length===0&&delete l.metadata,s=!0,l});return s?{...e,scene:{...e.scene,gameObjects:c}}:e}function ZD(e){return{applySerializedPropertyPatch(t,r){if(e.isRootTransformPath(r.targetId,r.path))return t;let n={...r,value:Pi(r.path,r.value)};return Jd({document:t,patch:n,validateField:e.validateSerializedPropertyField})},canCreateSerializedMultiPropertyPatch(t){return QD({document:t.document,targetIds:t.targetIds,activeId:t.activeId,path:t.path,value:e.getSerializedMultiPropertyProbeValue(t.path),services:e}).length>0},createSerializedMultiPropertyPatch(t){if(!e.isSerializedMultiFieldPath(t.path))return null;let r=Pi(t.path,t.value),n=QD({...t,value:r,services:e});return n.length===0?null:{label:`Patch ${n.length} GameObjects ${t.path}`,patch:e.createFieldBatchPatch(n.map(o=>({targetId:o,path:t.path,value:r}))),changedIds:n,...e.isSerializedMultiProjectionPath(t.path)?{reprojectIds:n}:{}}}}}function QD(e){return e.services.isSerializedMultiFieldPath(e.path)?e.targetIds.filter(t=>{let r=e.services.findGameObject(e.document,t);return e.services.canPatchCustomSerializedMultiField?.({document:e.document,targetId:t,path:e.path,value:e.value})===!1||e.services.isSerializedMultiProjectionPath(e.path)&&(!r||e.services.isCameraGameObject(r)||e.services.isLightGameObject(r))?!1:!!e.services.createInspectorPropertyPatch({document:e.document,targetId:t,path:e.path,value:e.value})}):[]}var Y1=/^transform(?:\.(position|rotation|scale)(?:\.(x|y|z))?)?$/,J1=/^transform\.(position|rotation|scale)$/,X1=/^transform\.(position|rotation|scale)\.(x|y|z)$/;function ji(e,t,r,n,o={}){return Q1({document:e,targetId:t,path:r,value:n,options:o})}function Yd(e,t,r,n,o={}){let a=new Set(t.filter(Boolean));if(a.size===0)return e;let i=o.normalizeFieldValue?.(r,n)??n,s=!1,c=e.scene.gameObjects.map(d=>{if(!a.has(d.id)||Vy(d.id,r))return d;let u=d;if(o.validateField?.({document:e,gameObject:u,path:r,value:i})?.ok===!1||o.blockFieldPatch?.({document:e,gameObject:u,targetId:d.id,path:r,value:i}))return d;let l=My(u,r,i,o);return l===d?d:(s=!0,l)});return s?{...e,scene:{...e.scene,gameObjects:c}}:e}function xy(e,t,r={}){let n=new Map;for(let i of t){if(!i.objectId||i.changes.length===0)continue;let s=n.get(i.objectId)??[];s.push(...i.changes),n.set(i.objectId,s)}if(n.size===0)return e;let o=!1,a=e.scene.gameObjects.map(i=>{let s=n.get(i.id);if(!s?.length)return i;let c;for(let d of s){if(Vy(i.id,d.path))continue;let u=r.normalizeFieldValue?.(d.path,d.value)??d.value;r.validateField?.({document:e,gameObject:c??i,path:d.path,value:u})?.ok!==!1&&(r.blockFieldPatch?.({document:e,gameObject:c??i,targetId:i.id,path:d.path,value:u})||(c??=structuredClone(i),c=nO(c,d.path,u,r,!0)))}return!c||JSON.stringify(c)===JSON.stringify(i)?i:(o=!0,c)});return o?{...e,scene:{...e.scene,gameObjects:a}}:e}function Q1(e){if(Vy(e.targetId,e.path))return e.document;let t=he(e.document,e.targetId);if(!t)return e.document;let r=e.options?.normalizeFieldValue?.(e.path,e.value)??e.value;if(e.options?.validateField?.({document:e.document,gameObject:t,path:e.path,value:r})?.ok===!1||e.options?.blockFieldPatch?.({document:e.document,gameObject:t,targetId:e.targetId,path:e.path,value:r}))return e.document;let n=My(t,e.path,r,e.options);return n===t?e.document:{...e.document,scene:{...e.document.scene,gameObjects:e.document.scene.gameObjects.map(o=>o.id===e.targetId?n:o)}}}function My(e,t,r,n={}){let o=nO(e,t,r,n);return JSON.stringify(o)===JSON.stringify(e)?e:o}function nO(e,t,r,n,o=!1){let a=o?e:structuredClone(e),i=t.startsWith("transform.rotation")?eO(a):null,s=t==="light.direction"||t.startsWith("light.direction.")?tO(a):null;if(t==="name")return typeof r=="string"&&r.trim()?a.name=r.trim():delete a.name,a;if(t==="enabled")return a.active=r!==!1,a;if(t.startsWith("shadow."))return bi(a)&&Z1(a,t,r),a;if(t.startsWith("rendering.")){We(a)==="group"&&(a.kind="instance");let c=tV(t,r);return Ut(a,t,c),rV(a),a}if(t.startsWith("metadata."))return Ut(a,t,r),a.metadata&&Object.keys(a.metadata).length===0&&delete a.metadata,a;if(t==="instance.assetId"){let c=ct(a);return c&&typeof r=="string"&&(c.assetId=r),a.kind="instance",delete a.primitive,a}if(t==="primitive.shape"){let c=(n.normalizePrimitiveShape??iV)(r);return c&&(a.kind="primitive",a.primitive={shape:c}),a}if(t==="transformType")return nV(a,r,n),a;if(oV(a,t,r)){let c=i?eO(a):null;return i&&c&&!rO(i,c)?Ks(a):a}if(n.patchCustomTransformField?.(a,t,r))return a;if(t.startsWith("marker."))return!a.marker||typeof a.marker!="object"||(a.kind="transform",delete a.primitive,Ut(a,t,r)),a;if(t.startsWith("camera."))return a.kind="transform",a.transformType="camera",a.camera=oO(a.camera,n),delete a.light,n.clearCustomTransformState?.(a,"camera"),delete a.primitive,Ut(a,t,r),a.camera=aV(a.camera,t,n),a;if(t.startsWith("light.")){a.kind="transform",a.transformType="light",a.light=aO(a.light,n),delete a.camera,n.clearCustomTransformState?.(a,"light"),delete a.primitive,Ut(a,t,r),(t==="light.direction"||t.startsWith("light.direction."))&&a.light?.type==="directional"&&(a.light.direction=Nd(a.light.direction,s??void 0));let c=s?tO(a):null;return s&&c&&!rO(s,c)?km(a):a}return t.startsWith("overrides.")&&(We(a)==="group"&&(a.kind="instance"),Ut(a,t,r),Xb(a)),a}function eO(e){let t=ie(e);return t&&!jt(t)?{...t.rotation}:null}function tO(e){return e.light?.type==="directional"?{...e.light.direction}:null}function rO(e,t,r=1e-6){return Math.abs(e.x-t.x)<=r&&Math.abs(e.y-t.y)<=r&&Math.abs(e.z-t.z)<=r}function Z1(e,t,r){if(!eV(t,r))return;let n=e.shadow;e.shadow={cast:t==="shadow.cast"?r===!0?"enabled":"none":n?.cast==="enabled"?"enabled":"none",receive:t==="shadow.receive"?r===!0?"enabled":"none":n?.receive==="enabled"?"enabled":"none"}}function eV(e,t){return e==="shadow.cast"||e==="shadow.receive"?typeof t=="boolean":!1}function tV(e,t){return e==="rendering.renderingGroupId"?t===1||t===2||t===3?t:0:e==="rendering.alphaIndex"?q(t)?t:null:t}function rV(e){let t=e.rendering;if(!t||typeof t!="object"||Array.isArray(t)){delete e.rendering;return}Object.keys(t).length===0&&delete e.rendering}function Vy(e,t){return ft(e)&&Y1.test(t)}function nV(e,t,r){let n=t==="plain"||t==="light"||t==="camera",o=!n&&r.isCustomTransformType?.(t)===!0;if(!n&&!o)return;let a=t;e.kind="transform",e.transformType=a,delete e.primitive,a==="camera"?e.camera=oO(e.camera,r):delete e.camera,a==="light"?e.light=aO(e.light,r):delete e.light,o?r.applyCustomTransformType?.(e,a):r.clearCustomTransformState?.(e,a)}function oV(e,t,r){let n=t.match(J1);if(n){let a=ie(e);if(!a||jt(a))return!0;let i=n[1];return i==="scale"?(q(r)?a.scale={x:r,y:r,z:r}:gr(r)&&(a.scale={...r}),!0):(gr(r)&&(a[i]=i==="rotation"?{x:qn(r.x),y:qn(r.y),z:qn(r.z)}:{...r}),!0)}let o=t.match(X1);if(o&&q(r)){let a=ie(e);if(!a||jt(a))return!0;let i=o[1],s=o[2],c=i==="rotation"?qn(r):r;return i==="scale"?a.scale={...Br(a,"scale"),[s]:c}:a[i]={...a[i],[s]:c},!0}return!1}function oO(e,t){return t.mergeCameraDefaults?t.mergeCameraDefaults(e):iO(e)}function aV(e,t,r){return r.normalizeCameraAfterFieldPatch?r.normalizeCameraAfterFieldPatch(e,t):e}function aO(e,t){return t.mergeLightDefaults?t.mergeLightDefaults(e):iO(e)}function iV(e){return e==="cube"||e==="sphere"||e==="plane"||e==="capsule"?e:null}function iO(e){return sV(e)??{}}function sV(e){return e&&typeof e=="object"&&!Array.isArray(e)?structuredClone(e):null}var lO=["position","rotation","scale"],uO=["x","y","z"],cV=1e-6;function Uy(e){let t=[{path:"gameObject.id",label:"ID",valueType:"string",readOnly:!0,getValue:()=>e.gameObject.id},{path:"gameObject.name",label:"Name",valueType:"string",readOnly:!0,getValue:()=>e.gameObject.name??e.gameObject.id}],r=ie(e.gameObject);if(r){let o=qe(e.gameObject),a=o?dn():Hm(r)?r:null;if(!a)return t;for(let i of lO)for(let s of uO)t.push(uV({gameObject:e.gameObject,vectorName:i,axis:s,rootTransform:o,displayTransform:a,validateField:e.validateField}))}let n=ct(e.gameObject);return n&&t.push({path:"modelRenderer.assetId",label:"Asset ID",valueType:"asset",readOnly:!0,getValue:()=>n.assetId}),gO(e.gameObject)&&t.push(...dV({gameObject:e.gameObject,validateField:e.validateField})),t}function mO(e){let t=[];for(let r of lO)for(let n of uO){let o=e.map(d=>{let u=ie(d);return u&&!jt(u)?Br(u,r)[n]:null}).filter(d=>typeof d=="number");if(o.length!==e.length)continue;let a=r==="rotation"?o.map(pn):o,i=a[0]??0,s=a.some(d=>Math.abs(d-i)>cV),c=`transform.${r}.${n}`;t.push({path:c,label:`${r}.${n}`,valueType:"number",value:zr(i),mixed:s,readOnly:!1,descriptor:{path:c,valueType:"number",getValue:()=>i}})}return t}function hp(e){if(e.length===0)return[];let t=e.map(n=>n.active!==!1),r=t[0]??!0;return[{path:"enabled",label:"Enabled",valueType:"boolean",value:r,mixed:t.some(n=>n!==r),readOnly:!1,descriptor:{path:"enabled",label:"Enabled",valueType:"boolean",getValue:()=>r}}]}function tl(e){return e.length===0||e.some(r=>!gO(r))?[]:[cO(e,{path:"shadow.cast",label:"Caster",valueType:"boolean",defaultValue:!1}),cO(e,{path:"shadow.receive",label:"Receiver",valueType:"boolean",defaultValue:!1})]}function dV(e){return[sO({...e,path:"shadow.cast",label:"Caster",valueType:"boolean",defaultValue:!1}),sO({...e,path:"shadow.receive",label:"Receiver",valueType:"boolean",defaultValue:!1})]}function sO(e){return{path:e.path,label:e.label,valueType:e.valueType,...e.options?{options:e.options}:{},getValue:()=>pO(e.gameObject,e.path,e.defaultValue),setValue:(t,r,n)=>{if(!n.targetId)return t;let o=Pi(e.path,r),a=e.validateField?.({document:t,gameObject:e.gameObject,nodeKind:We(e.gameObject),path:e.path,value:o});return a&&!a.ok?t:ji(t,n.targetId,e.path,o)}}}function cO(e,t){let n=e.map(a=>pO(a,t.path,t.defaultValue))[0]??t.defaultValue,o=lV(e,t.path);return{path:t.path,label:t.label,valueType:t.valueType,value:n,mixed:o,readOnly:!1,...t.options?{options:t.options}:{},descriptor:{path:t.path,label:t.label,valueType:t.valueType,...t.options?{options:t.options}:{},getValue:()=>n}}}function lV(e,t){let r=e.map(n=>fO(n)[t.slice(7)]);return r.some(n=>n!==r[0])}function pO(e,t,r){let n=fO(e);return t==="shadow.cast"?dO(n.cast):t==="shadow.receive"?dO(n.receive):r}function dO(e){return e==="enabled"}function fO(e){return Tt(e.shadow).shadow??{}}function gO(e){if(qe(e)||e.transformType==="camera"||e.transformType==="light"||e.camera||e.light)return!1;let t=We(e);return t==="instance"||t==="primitive"||t==="transform"}function uV(e){return{path:`transform.${e.vectorName}.${e.axis}`,label:`${e.vectorName}.${e.axis}`,valueType:"number",readOnly:e.rootTransform,getValue:()=>{let r=Br(e.displayTransform,e.vectorName)[e.axis];return e.vectorName==="rotation"?zr(pn(r)):r},...e.rootTransform?{}:{setValue:(r,n,o)=>mV({document:r,targetId:o.targetId,vectorName:e.vectorName,axis:e.axis,value:n,validateField:e.validateField})}}}function mV(e){let t=Number(e.value);if(!e.targetId||!Number.isFinite(t))return e.document;let r=he(e.document,e.targetId),n=r?ie(r):null;if(!r||!n||jt(n))return e.document;let o=`transform.${e.vectorName}.${e.axis}`,a=e.validateField?.({document:e.document,gameObject:r,nodeKind:We(r),path:o,value:t});if(a&&!a.ok)return e.document;let i=e.vectorName==="rotation"?qn(t):t,s=e.vectorName==="position"?{...n.position,[e.axis]:i}:n.position,c=e.vectorName==="rotation"?{...n.rotation,[e.axis]:i}:n.rotation,d=e.vectorName==="scale"?{...Br(n,"scale"),[e.axis]:i}:Br(n,"scale");return pV(e.document,e.targetId,{position:s,rotation:c,scale:d})}function pV(e,t,r){return{...e,scene:{...e.scene,gameObjects:e.scene.gameObjects.map(n=>n.id===t?Fb(n,r):n)}}}function hO(e){let t=new Map(e.document.scene.gameObjects.map(o=>[o.id,o])),r=e.targetIds.map(o=>t.get(o)??null).filter(o=>!!o&&!qe(o));if(r.length===0)return null;let n=r.map(o=>o.id);return{targetIds:n,activeId:e.activeId&&n.includes(e.activeId)?e.activeId:n[0]??null,label:e.label??`${r.length} GameObjects`,properties:[...hp(r),...mO(r),...tl(r)]}}var Ky="enabled",bO="shadow.",yO=200;function qy(e){let t=fV(e.document,e.selectedIds);if(t.length===0)return null;let r=t.map(l=>l.id),n=e.activeId&&r.includes(e.activeId)?e.activeId:r[0]??null,o=e.largeSelectionThreshold??yO,a=gV(t),i=tl(a),s=t.length>o,c=s?hV({document:e.document,gameObjects:t,shadowGameObjects:a,activeId:n,label:e.label}):hO({document:e.document,targetIds:r,activeId:n,label:e.label});if(!c)return null;let d=c.properties.some(l=>IO(l.path))||i.length===0?c:{...c,properties:[...c.properties,...i]},u=SO({document:e.document,serialized:d,shadowOnly:s,renderingProfile:e.renderingProfile});return u.length===0?null:{targetIds:d.targetIds,activeId:d.activeId,label:d.label,document:e.document,selection:{targetIds:d.targetIds,activeId:d.activeId,document:e.document},sections:u}}function SO(e){let t=bV(e.document,e.serialized,e.serialized.properties.filter(n=>IO(n.path)),e.renderingProfile),r=Hy("common","Common",10,e.serialized.properties.filter(n=>n.path===Ky),e.document);return e.shadowOnly?[r,t].filter(n=>!!n):[r,Hy("transform","Transform",20,e.serialized.properties.filter(n=>n.path.startsWith("transform.")),e.document),t,Hy("properties","Properties",90,e.serialized.properties.filter(n=>!n.path.startsWith("transform.")&&n.path!==Ky&&!n.path.startsWith(bO)),e.document)].filter(n=>!!n)}function fV(e,t){let r=new Map(e.scene.gameObjects.map(a=>[a.id,a])),n=new Set,o=[];for(let a of t){if(!a||n.has(a))continue;n.add(a);let i=r.get(a);i&&(qe(i)||o.push(i))}return o}function gV(e){return e.filter(t=>Qs({gameObject:t,nodeKind:We(t)}))}function hV(e){if(e.gameObjects.length===0)return null;let t=e.shadowGameObjects.length===0?[]:tl(e.shadowGameObjects);return{targetIds:e.gameObjects.map(r=>r.id),activeId:e.activeId,label:e.label??`${e.gameObjects.length} GameObjects`,properties:[...hp(e.gameObjects),...t]}}function bV(e,t,r,n){if(r.length===0)return null;let o=new Map(e.scene.gameObjects.map(f=>[f.id,f])),a=t.targetIds.map(f=>o.get(f)).filter(f=>!!f).filter(f=>Qs({gameObject:f,nodeKind:We(f)})),i=o.get(t.activeId??"")??a[0]??null,s=i&&Qs({gameObject:i,nodeKind:We(i)})?i:a[0]??null;if(!s)return null;let c=We(s),d=r.find(f=>f.path==="shadow.cast"),u=r.find(f=>f.path==="shadow.receive");if(!d||!u)return null;let l=Wy(d,0),m=Wy(u,1),p=Ai({path:d.path,nodeKind:c,document:e}),h=Ai({path:u.path,nodeKind:c,document:e}),g=n!==void 0&&$m(qm(n))==="none";return{id:"shadow",title:"\u9634\u5F71",order:25,placement:"body",...g?{summary:"\u9879\u76EE\u9634\u5F71\u540E\u7AEF\u5F53\u524D\u5DF2\u5173\u95ED\uFF1B\u53C2\u4E0E\u8D44\u683C\u4ECD\u4F1A\u4FDD\u5B58\u3002"}:{},persistence:"document",collapsedByDefault:!1,properties:[{...l,label:"\u6295\u5C04\u9634\u5F71",control:"boolean",value:l.value===!0,mixed:l.mixed===!0,options:void 0,tooltip:"\u5F00\u542F\u540E\u6240\u9009\u7269\u4F53\u6295\u5C04\u9634\u5F71\uFF1B\u5173\u95ED\u540E\u6240\u9009\u7269\u4F53\u4E0D\u8FDB\u5165\u9634\u5F71\u6295\u5C04\u5019\u9009\u96C6\u3002",validate:p},{...m,label:"\u63A5\u6536\u9634\u5F71",control:"boolean",value:m.value===!0,mixed:m.mixed===!0,options:void 0,tooltip:"\u5F00\u542F\u540E\u6240\u9009\u7269\u4F53\u63A5\u6536\u9634\u5F71\uFF1B\u5173\u95ED\u540E\u6750\u8D28\u4E0D\u91C7\u6837\u9634\u5F71\u7ED3\u679C\u3002",validate:h},...g?[Hb()]:[]]}}function IO(e){return e.startsWith(bO)}function Hy(e,t,r,n,o){return n.length===0?null:{id:e,title:t,order:r,placement:"body",persistence:"document",properties:n.map((a,i)=>{let s=Wy(a,i),c=yV(o,a.path);return{...s,step:a.valueType==="number"?a.path.startsWith("transform.rotation.")?1:.1:s.step,validate:c?Ai({path:a.path,nodeKind:c,document:o}):s.validate}})}}function Wy(e,t){let r=e.readOnly===!0;return{path:e.path,label:e.label,valueType:e.valueType,control:r?"readonly":SV(e.valueType),value:e.value,options:e.options,mixed:e.mixed,readOnly:r,persistence:r?"readonly":"document",commitMode:IV(e.valueType),order:t,source:e}}function yV(e,t){if(t.startsWith("transform."))return"transform";if(t===Ky){let r=e.scene.gameObjects.find(n=>!qe(n));return r?We(r):null}return null}function SV(e){return e==="string"||e==="number"||e==="boolean"||e==="enum"||e==="asset"||e==="object"?e:"readonly"}function IV(e){return e==="number"?"live":e==="boolean"||e==="enum"||e==="asset"?"immediate":"blur"}var EV=/^transform\.(position|rotation|scale)\.(x|y|z)$/;function Jd(e){if(ft(e.patch.targetId)&&EV.test(e.patch.path))return e.document;let t=he(e.document,e.patch.targetId);if(!t)return e.document;let r=e.patch.path.startsWith("transform.rotation")?EO(t):null,n=e.patch.path.startsWith("light.direction")?TO(t):null,o=fP(e.document,Uy({gameObject:t,validateField:e.validateField}),e.patch);if(!e.patch.path.startsWith("transform.rotation")&&!e.patch.path.startsWith("light.direction"))return o;let a=he(o,e.patch.targetId);if(!a)return o;let i=r?EO(a):null,s=n?TO(a):null,c=r&&i&&!AO(r,i),d=n&&s&&!AO(n,s);return!c&&!d?o:{...o,scene:{...o.scene,gameObjects:o.scene.gameObjects.map(u=>{if(u.id!==e.patch.targetId)return u;let l=c?Ks(u):u;return d?km(l):l})}}}function EO(e){let t=ie(e);return t&&"rotation"in t?t.rotation:null}function TO(e){return e.light?.type==="directional"?e.light.direction:null}function AO(e,t,r=1e-6){return Math.abs(e.x-t.x)<=r&&Math.abs(e.y-t.y)<=r&&Math.abs(e.z-t.z)<=r}function Jy(e){let t=e.findGameObject(e.document,e.targetId);if(!t)return null;let r=e.isMarkerGameObject(t);return{targetIds:[t.id],activeId:t.id,label:t.name??t.id,document:e.document,selection:{targetIds:[t.id],activeId:t.id,scopeType:"scene",targetKind:r?"marker":e.readNodeKind(t),...r?{capabilities:["markerGraph"]}:{},document:e.document},sections:e.createInspectorSections(e.document,t,e.context)}}function Xy(e){let t=qy({document:e.document,selectedIds:e.selectedIds,activeId:e.activeId,renderingProfile:e.renderingProfile}),r=t?{...t,selection:{...t.selection,scopeType:"scene"}}:null;if(!e.extraSection)return r;if(!r){let n=e.resolveFallbackTargetIds(),o=e.activeId&&n.includes(e.activeId)?e.activeId:n[0]??null;return{targetIds:n,activeId:o,label:e.formatFallbackLabel(n),document:e.document,selection:{targetIds:n,activeId:o,scopeType:"scene",targetKind:e.fallbackSelectionKind??"object",document:e.document},sections:[e.extraSection]}}return{...r,sections:[...r.sections.filter(n=>n.id!==e.extraSection.id),e.extraSection].sort((n,o)=>(n.order??0)-(o.order??0))}}function Qy(e){let t=[...e.createBaseSections()],r=e.isCameraGameObject(e.gameObject),n=e.isLightGameObject(e.gameObject),o=e.isMarkerGameObject(e.gameObject),a=e.nodeKind==="transform";return Yy(t,e.createCustomSections?.({document:e.document,gameObject:e.gameObject,context:e.context,nodeKind:e.nodeKind,isCamera:r,isLight:n,isMarker:o})),rl(t,a&&r?e.createCameraSection?.():null),Yy(t,a&&n?e.createLightSections?.():null),rl(t,a&&o?e.createMarkerSection?.():null),rl(t,e.createPrefabInstanceSection?.()),(e.isMaterialInspectorCandidate?.({nodeKind:e.nodeKind,gameObject:e.gameObject,isCamera:r,isLight:n,isMarker:o})??(e.nodeKind==="instance"||e.nodeKind==="primitive"||a&&!r&&!n&&!o))&&(Yy(t,e.createMaterialSections?.()),rl(t,e.createOutlineSection?.())),t.sort((s,c)=>(s.order??0)-(c.order??0))}function rl(e,t){t&&e.push(t)}function Yy(e,t){if(t)for(let r of t)rl(e,r)}function Zy(e){let t=e.outline,r=t?"active":"default",n=r==="default"?PO:void 0;return{id:"outline",title:"Outline",order:60,placement:"body",summary:t?"Configured":"Defaults",persistence:r==="default"?"readonly":"document",effect:r,disabledReason:n,collapsedByDefault:!0,properties:AV(TV(e),r,n)}}var PO="Outline fields are showing defaults; configure an outline override before edits affect this object.";function TV(e){let t=e.outline,r=[e.createDocumentInspectorProperty(null,e.nodeKind,{path:"overrides.outline.renderOutline",label:"Render Outline",valueType:"boolean",control:"boolean",value:t?.renderOutline??!1,commitMode:"immediate",order:0}),e.createDocumentInspectorProperty(null,e.nodeKind,{path:"overrides.outline.outlineWidth",label:"Width",valueType:"number",control:"number",value:t?.outlineWidth??.04,commitMode:"live",order:1,min:0,step:.005,displayPrecision:3,precision:3,stepPrecision:.001}),e.createDocumentInspectorProperty(null,e.nodeKind,{path:"overrides.outline.outlineColor",label:"Color",valueType:"color",control:"color",value:t?.outlineColor??{r:.03,g:.03,b:.03},commitMode:"immediate",order:2})],n=le({path:"overrides.outline.raw",label:"Raw Override",value:t??"not configured",order:r.length,source:"Document",tags:["Raw"]});return n&&r.push(n),r}function AV(e,t,r){return!t||t==="active"?e:e.map(n=>({...n,readOnly:!0,persistence:n.persistence==="runtime"?"runtime":"readonly",control:n.control==="custom"?n.control:"readonly",effect:n.effect??t,disabledReason:n.disabledReason??r}))}var PV={title:"\u6807\u8BB0",typeLabel:"\u6807\u8BB0\u7C7B\u578B",kindLabel:"\u7A7A\u95F4\u7C7B\u522B",tagsLabel:"\u6807\u7B7E",colorLabel:"\u989C\u8272",noteLabel:"\u5907\u6CE8",geometryLabel:"\u51E0\u4F55",targetLabel:"\u7ED1\u5B9A\u5BF9\u8C61",targetStatusLabel:"\u7ED1\u5B9A\u72B6\u6001",emptyTypeOption:"\u672A\u9009\u62E9",emptyTargetOption:"\u672A\u7ED1\u5B9A",tagsPlaceholder:"\u6807\u7B7E, \u53E6\u4E00\u4E2A\u6807\u7B7E",notePlaceholder:"\u53EF\u9009\u6807\u8BB0\u5907\u6CE8",unselectedSummary:"\u672A\u9009\u62E9",missingTargetPrefix:"\u7F3A\u5931",missingTargetStatus:"\u76EE\u6807\u7F3A\u5931",targetStatusUnbound:"\u672A\u7ED1\u5B9A",targetStatusOk:"\u6B63\u5E38",unsupportedTargetPrefix:"\u4E0D\u652F\u6301\u76EE\u6807"},xV={region:"\u533A\u57DF",point:"\u70B9",anchor:"\u951A\u70B9",object:"\u5BF9\u8C61\u7ED1\u5B9A"},MV={box:"\u76D2\u4F53",point:"\u70B9","object-bounds":"\u5BF9\u8C61\u5305\u56F4\u76D2",polyhedron:"\u591A\u9762\u4F53"};function nS(e){let t={...PV,...e.text},r=e.gameObject.marker,n=e.resolveMarkerKind(e.document,r),o=DV(e.markerTypeCatalog,r.type,t,e.formatMarkerTypeLabel),a=vV(r),i=a?.kind==="scene-object"?a.id:"",s=OV(e.document,e.gameObject.id,i,e.isMarkerGameObject,t),c=[e.createDocumentInspectorProperty(e.document,e.nodeKind,{path:"marker.type",label:t.typeLabel,valueType:"enum",control:o.length>0?"enum":"string",value:r.type,options:o.length>0?o:void 0,commitMode:"change",order:0}),tS("marker.kind",t.kindLabel,CV(n,e.formatMarkerKindLabel),1),e.createDocumentInspectorProperty(e.document,e.nodeKind,{path:"marker.tags",label:t.tagsLabel,valueType:"string",control:"string",value:r.tags?.join(", ")??"",commitMode:"blur",placeholder:t.tagsPlaceholder,order:2}),e.createDocumentInspectorProperty(e.document,e.nodeKind,{path:"marker.color",label:t.colorLabel,valueType:"color",control:"color",value:r.color??{r:.1,g:.85,b:1},commitMode:"immediate",order:3}),e.createDocumentInspectorProperty(e.document,e.nodeKind,{path:"marker.note",label:t.noteLabel,valueType:"string",control:"string",value:r.note??"",commitMode:"blur",placeholder:t.notePlaceholder,order:4}),tS("marker.geometry.kind",t.geometryLabel,wV(r.geometry.kind,e.formatMarkerGeometryKindLabel),5),e.createDocumentInspectorProperty(e.document,e.nodeKind,{path:"marker.target.objectId",label:t.targetLabel,valueType:"enum",control:"enum",value:i,options:s,commitMode:"change",order:6}),tS("marker.target.status",t.targetStatusLabel,_V(e.document,a,t),7)];return{id:"marker",title:t.title,order:35,placement:"body",persistence:"document",summary:RV(e.markerTypeCatalog,r.type,t,e.formatMarkerTypeLabel),collapsedByDefault:!1,properties:c}}function DV(e,t,r,n){let o=[{label:r.emptyTypeOption,value:""},...e.map(a=>({label:rS(a.type,a.label||a.type,n),value:a.type}))];return t&&!o.some(a=>a.value===t)&&o.push({label:rS(t,t,n),value:t}),o}function OV(e,t,r,n,o){let a=[{label:o.emptyTargetOption,value:""},...e.scene.gameObjects.filter(i=>i.id!==t&&!n(i)).map(i=>({label:i.name||i.id,value:i.id}))];return r&&!a.some(i=>i.value===r)&&a.push({label:`${o.missingTargetPrefix}: ${r}`,value:r}),a}function RV(e,t,r,n){if(!t.trim())return r.unselectedSummary;let o=e.find(a=>a.type===t);return rS(t,o?.label||t,n)}function rS(e,t,r){return r?.(e,t)??t}function CV(e,t){return t?.(e)??xV[e]??e}function wV(e,t){return t?.(e)??MV[e]??e}function vV(e){return e.target?eS(e.target):e.geometry.kind==="point"&&e.geometry.target||e.geometry.kind==="object-bounds"?eS(e.geometry.target):null}function _V(e,t,r){return t?t.kind!=="scene-object"?`${r.unsupportedTargetPrefix}: ${t.kind}`:e.scene.gameObjects.some(n=>n.id===t.id)?r.targetStatusOk:r.missingTargetStatus:r.targetStatusUnbound}function eS(e){return{...e,...e.metadata?{metadata:{...e.metadata}}:{}}}function tS(e,t,r,n){return le({path:e,label:t,value:r,order:n,source:"Document"})}var nl={r:1,g:1,b:1,a:1};function kV(e){return{...e}}function OO(e){let t=kV(e);return{services:t,normalizeLayoutPatchValue:r=>Tp(r,t),isLayoutPatchCompatibleWithDecal:(r,n)=>kO(r,n,t),canPatchMultiField:(r,n,o,a)=>FV(r,n,o,a,t),patchLayout:(r,n,o)=>$V(r,n,o,t),patchKind:(r,n,o)=>BV(r,n,o,t),patchInspectorField:(r,n,o,a)=>zV(r,n,o,a,t),normalizeGameObject:r=>Li(r,t),replaceUi:(r,n,o)=>UV(r,n,o,t),normalizeScaleAfterFieldPatch:(r,n,o,a)=>bp(r,n,o,a,t),normalizeScalesForCommand:(r,n)=>HV(r,n,t),normalizeScales:(r,n,o)=>Ep(r,t,n,o),mergeDefaults:r=>Kr(r,t.createDefaultGroundDecal,t)}}function RO(e){return{...e.policy,createDocumentInspectorProperty:e.createDocumentInspectorProperty,normalizeValue:e.normalizeValue,findTarget:e.findTarget,getTargetId:e.getTargetId,getTargetNodeKind:e.getTargetNodeKind,getTargetGroundDecal:e.getTargetGroundDecal,canShowTarget:e.canShowTarget,isUiTarget:e.isUiTarget,canPatchMultiField:e.canPatchMultiField,findTextureAsset:e.findTextureAsset,resolveTextureAssetUrl:e.resolveTextureAssetUrl,getMaterialText:e.getMaterialText,createTexturePickerControlOptions:e.createTexturePickerControlOptions}}var jV=75;function oS(e,t){if(e==="transform.scale"){let r=t;return!r||typeof r!="object"?null:NO({x:typeof r.x=="number"?r.x:1,y:typeof r.y=="number"?r.y:1,z:typeof r.z=="number"?r.z:1})}return!/^transform\.scale\.(x|y|z)$/.test(e)||typeof t!="number"||!Number.isFinite(t)?null:Math.max(.001,Math.abs(t))}function Tp(e,t={}){let r=dl(e),n=Array.isArray(e)?e:r&&Array.isArray(r.layers)?r.layers:null;if(!n)return null;let o=n.map((a,i)=>NV(a,i,t)).filter(a=>!!a);return o.length>0?o:null}function NV(e,t,r={}){let n=dl(e);if(!n)return null;let o=hU(n.id)??`layer_${t}`,a=ic(n.rect),i=n.fontSize==null?null:yp(n.fontSize),s=n.rotationDeg==null?null:cc(n.rotationDeg);return!a||n.fontSize!=null&&i==null||n.rotationDeg!=null&&s==null?null:{id:o,rect:a,...s==null?{}:{rotationDeg:s},...i==null?{}:{fontSize:Sa(i)}}}function ic(e){let t=dl(e);if(!t)return null;let r=Qn(t.x),n=Qn(t.z),o=yp(t.width),a=yp(t.depth);return r==null||n==null||o==null||a==null?null:{x:r,z:n,width:o,depth:a}}function Qn(e){return typeof e=="number"&&Number.isFinite(e)?e:null}function yp(e){return typeof e=="number"&&Number.isFinite(e)&&e>0?e:null}function CO(e,t){if(e==="groundDecal.editorPreviewActive")return typeof t=="boolean"?{ok:!0,value:t}:{ok:!1,message:`Invalid value for scene node field: ${e}.`};if(Ap(e))return ic(t)?{ok:!0,value:t}:{ok:!1,message:`Invalid value for scene node field: ${e}.`};if(wO(e)){let r=cc(t);return r!==null?{ok:!0,value:r}:{ok:!1,message:`Invalid value for scene node field: ${e}.`}}if(Pp(e))return typeof t=="string"?{ok:!0,value:t.trim()}:{ok:!1,message:`Invalid value for scene node field: ${e}.`};if(Dp(e))return typeof t=="string"?{ok:!0,value:t}:{ok:!1,message:`Invalid value for scene node field: ${e}.`};if(vO(e)){let r=iS(t);return r!==null?{ok:!0,value:r}:{ok:!1,message:`Invalid value for scene node field: ${e}.`}}if(xp(e)||Cp(e)||Op(e)){let r=ol(t);return r?{ok:!0,value:r}:{ok:!1,message:`Invalid value for scene node field: ${e}.`}}if(Mp(e)||wp(e)||Rp(e)){let r=al(t);return r!==null?{ok:!0,value:r}:{ok:!1,message:`Invalid value for scene node field: ${e}.`}}if(vp(e)){let r=aS(t);return r!==null?{ok:!0,value:r}:{ok:!1,message:`Invalid value for scene node field: ${e}.`}}if(Ia(e)){let r=cl(t);return r!==null?{ok:!0,value:r}:{ok:!1,message:`Invalid value for scene node field: ${e}.`}}return null}function il(e){let t=e.match(/^groundDecal\.layers\.(\d+)\.(rect|rotationDeg|textureId|text\.value|text\.fontSize|color|color\.a|tint|tint\.a|text\.color|text\.color\.a|editorPreviewPercent)$/);if(!t)return null;let r=Number(t[1]);return!Number.isInteger(r)||r<0?null:{index:r,field:t[2]}}function Ap(e){return/^groundDecal\.layers\.\d+\.rect$/.test(e)}function wO(e){return/^groundDecal\.layers\.\d+\.rotationDeg$/.test(e)}function Pp(e){return/^groundDecal\.layers\.\d+\.textureId$/.test(e)}function xp(e){return/^groundDecal\.layers\.\d+\.color$/.test(e)}function Mp(e){return/^groundDecal\.layers\.\d+\.color\.a$/.test(e)}function Dp(e){return/^groundDecal\.layers\.\d+\.text\.value$/.test(e)}function vO(e){return/^groundDecal\.layers\.\d+\.text\.fontSize$/.test(e)}function Op(e){return/^groundDecal\.layers\.\d+\.text\.color$/.test(e)}function Rp(e){return/^groundDecal\.layers\.\d+\.text\.color\.a$/.test(e)}function Cp(e){return/^groundDecal\.layers\.\d+\.tint$/.test(e)}function wp(e){return/^groundDecal\.layers\.\d+\.tint\.a$/.test(e)}function vp(e){return/^groundDecal\.layers\.\d+\.editorPreviewPercent$/.test(e)}function Ia(e){return e==="groundDecal.rendering.textureWidth"||e==="groundDecal.rendering.textureHeight"}function _p(e){return e==="groundDecal.editorPreviewActive"||e==="groundDecal.layers"||!!il(e)||Ia(e)}function sl(e){return e==="groundDecal.size.width"||e==="groundDecal.size.depth"||e==="groundDecal.editorPreviewActive"||e==="groundDecal.layers"||_p(e)}function GV(e,t,r={}){return t==="rect"?sc(e,r):t==="rotationDeg"?jp(e,r):t==="textureId"||t==="tint"||t==="tint.a"?Sp(e,r):t==="text.value"||t==="text.fontSize"||t==="text.color"||t==="text.color.a"?_O(e,r):t==="color"||t==="color.a"?Ip(e,r):t==="editorPreviewPercent"?e.kind==="textureProgress"?Sp(e,r):e.kind==="progress"&&Ip(e,r):!1}function kp(e,t={}){return t.isProjectEditableLayer?.(e)??e.enabled!==!1}function sc(e,t={}){return t.isLayoutEditableLayer?.(e)??e.enabled!==!1}function jp(e,t={}){return t.isRotationEditableLayer?.(e)??!1}function Sp(e,t={}){return t.isEditableTextureLayer?.(e)??(e.kind==="texture"||e.kind==="textureProgress")}function Ip(e,t={}){return t.isEditableColorLayer?.(e)??(e.kind==="color"||e.kind==="progress")}function _O(e,t={}){return t.isEditableTextLayer?.(e)??e.kind==="text"}function kO(e,t,r={}){let n=e.layers.filter(o=>sc(o,r));return t.length!==n.length?!1:n.every((o,a)=>{let i=t[a];return i?.id===o.id&&(i.fontSize==null||o.kind==="text")&&(i.rotationDeg==null||jp(o,r))})}function ol(e){let t=dl(e);if(!t)return null;let r=Qn(t.r),n=Qn(t.g),o=Qn(t.b);if(r==null||n==null||o==null)return null;let a=Qn(t.a);return{r:Sa(Math.max(0,Math.min(1,r))),g:Sa(Math.max(0,Math.min(1,n))),b:Sa(Math.max(0,Math.min(1,o))),...a==null?{}:{a:Sa(Math.max(0,Math.min(1,a)))}}}function al(e){let t=Qn(e);return t==null?null:Sa(Math.max(0,Math.min(1,t)))}function aS(e){let t=Qn(e);return t==null?null:Math.round(Math.max(0,Math.min(100,t)))}function cc(e){let t=Qn(e);if(t==null)return null;let r=t%360;r>180&&(r-=360),r<=-180&&(r+=360);let n=Sa(r);return Object.is(n,-0)?0:n}function iS(e){let t=yp(e);return t==null?null:Sa(t)}function cl(e){let t=Qn(e);return t==null||t<=0?null:Math.max(64,Math.min(2048,Math.round(t)))}function Sa(e){return Math.round(e*1e3)/1e3}function Np(e,t){return e==="groundDecal.editorPreviewActive"?t===!0:e==="groundDecal.layers"?Tp(t)??t:Ap(e)?ic(t)??t:wO(e)?cc(t)??t:Pp(e)&&typeof t=="string"?t.trim():Dp(e)&&typeof t=="string"?t:vO(e)?iS(t)??t:xp(e)||Cp(e)||Op(e)?ol(t)??t:Mp(e)||wp(e)||Rp(e)?al(t)??t:vp(e)?aS(t)??t:Ia(e)?cl(t)??t:t}function jO(e,t,r){if(t==="rect"){let n=ic(r);return n?LV(e.rect,n)?e:{...e,rect:n}:null}if(t==="rotationDeg"){let n=cc(r);if(n==null)return null;if(n===0){if(e.rotationDeg==null)return e;let{rotationDeg:o,...a}=e;return a}return e.rotationDeg===n?e:{...e,rotationDeg:n}}if(t==="textureId"){if(e.kind!=="texture"&&e.kind!=="textureProgress"||typeof r!="string")return null;let n=r.trim();if(!n){if(!e.textureId)return e;let{textureId:o,...a}=e;return a}return e.textureId===n?e:{...e,textureId:n}}if(t==="text.value")return e.kind!=="text"||typeof r!="string"?null:e.text.value===r?e:{...e,text:{...e.text,value:r}};if(t==="text.fontSize"){if(e.kind!=="text")return null;let n=iS(r);return n==null?null:e.text.fontSize===n?e:{...e,text:{...e.text,fontSize:n}}}if(t==="color"){if(e.kind!=="color"&&e.kind!=="progress")return null;let n=ol(r);if(!n)return null;let o={...n,...n.a==null&&e.color.a!=null?{a:e.color.a}:{}};return ac(e.color,o)?e:{...e,color:o}}if(t==="color.a"){if(e.kind!=="color"&&e.kind!=="progress")return null;let n=al(r);if(n===null)return null;let o={...e.color,a:n};return ac(e.color,o)?e:{...e,color:o}}if(t==="editorPreviewPercent"){if(e.kind!=="progress"&&e.kind!=="textureProgress")return null;let n=aS(r);return n===null?null:e.editorPreviewPercent===n?e:{...e,editorPreviewPercent:n}}if(t==="tint"){if(e.kind!=="texture"&&e.kind!=="textureProgress")return null;let n=ol(r);if(!n)return null;let o={...n,...n.a==null&&e.tint?.a!=null?{a:e.tint.a}:{}};return ac(e.tint??nl,o)?e:{...e,tint:o}}if(t==="tint.a"){if(e.kind!=="texture"&&e.kind!=="textureProgress")return null;let n=al(r);if(n===null)return null;let o={...nl,...e.tint??{},a:n};return ac(e.tint??nl,o)?e:{...e,tint:o}}if(t==="text.color"){if(e.kind!=="text")return null;let n=ol(r);if(!n)return null;let o={...n,...n.a==null&&e.text.color.a!=null?{a:e.text.color.a}:{}};return ac(e.text.color,o)?e:{...e,text:{...e.text,color:o}}}if(t==="text.color.a"){if(e.kind!=="text")return null;let n=al(r);if(n===null)return null;let o={...e.text.color,a:n};return ac(e.text.color,o)?e:{...e,text:{...e.text,color:o}}}return null}function Kr(e,t,r={}){let n=e&&typeof e=="object"&&!Array.isArray(e)?e:null,o=typeof n?.uiKind=="string"?n.uiKind.trim():"",a=o&&(r.isKnownUiKind?.(o)??!0)?o:r.defaultUiKind??"default",i=t(a);return n?{...i,...structuredClone(n),uiKind:a,size:{...i.size,...n.size&&typeof n.size=="object"?n.size:{}},layers:Array.isArray(n.layers)&&n.layers.length>0?structuredClone(n.layers):i.layers,mask:n.mask&&typeof n.mask=="object"?{...i.mask??{},...n.mask}:i.mask,rendering:n.rendering&&typeof n.rendering=="object"?{...i.rendering??{},...n.rendering}:i.rendering}:i}function ac(e,t){return e.r===t.r&&e.g===t.g&&e.b===t.b&&(e.a??1)===(t.a??1)}function LV(e,t){return e.x===t.x&&e.z===t.z&&e.width===t.width&&e.depth===t.depth}function NO(e){let t=[e.x,e.y,e.z].filter(n=>Number.isFinite(n));if(t.length===0)return 1;let r=t.reduce((n,o)=>Math.abs(o-1)>Math.abs(n-1)?o:n,t[0]);return Math.max(.001,Math.abs(r))}function FV(e,t,r,n,o){if(!sl(r))return!1;let a=XV(e,t);if(!a||!o.canShowGroundDecalInspector(a))return!1;let i=Kr(a.groundDecal,o.createDefaultGroundDecal,o);if(r==="groundDecal.size.width"||r==="groundDecal.size.depth"||Ia(r)||r==="groundDecal.editorPreviewActive")return!0;if(r==="groundDecal.layers"){let d=Tp(n,o);return d?kO(i,d,o):!1}let s=il(r);if(!s)return!1;let c=i.layers[s.index];return!!c&&kp(c,o)&&GV(c,s.field,o)}function $V(e,t,r,n){let o=Tp(r,n);return o?LO(e,a=>a.id===t?KV(a,o,n):a):e}function BV(e,t,r,n){if(typeof r!="string"||!r.trim())return e;let o=r.trim();return n.isKnownUiKind&&!n.isKnownUiKind(o)?e:LO(e,a=>a.id===t?WV(a,o,n):a)}function zV(e,t,r,n,o){if(r==="groundDecal.editorPreviewActive"){if(typeof n!="boolean")return e;let d=!1,u=e.scene.gameObjects.map(l=>{if(l.id!==t||!o.canShowGroundDecalInspector(l))return l;let m=Kr(l.groundDecal,o.createDefaultGroundDecal,o);return m.editorPreviewActive===n?l:(d=!0,Li({...l,groundDecal:{...m,editorPreviewActive:n}},o))});return d?{...e,scene:{...e.scene,gameObjects:u}}:e}if(Ia(r))return VV(e,t,r,n,o);let a=il(r);if(!a)return null;let i=!1,s=Np(r,n),c=e.scene.gameObjects.map(d=>{if(d.id!==t||!o.canShowGroundDecalInspector(d))return d;let u=Kr(d.groundDecal,o.createDefaultGroundDecal,o),l=u.layers[a.index];if(!l||!kp(l,o)||a.field==="rect"&&!sc(l,o))return d;let m=jO(l,a.field,s);if(!m||m===l)return d;let p=[...u.layers];return p[a.index]=m,i=!0,Li({...d,groundDecal:{...u,layers:p}},o)});return i?{...e,scene:{...e.scene,gameObjects:c}}:e}function VV(e,t,r,n,o){let a=cl(n);if(a===null)return e;let i=r==="groundDecal.rendering.textureWidth"?"textureWidth":"textureHeight",s=!1,c=e.scene.gameObjects.map(d=>{if(d.id!==t||!o.canShowGroundDecalInspector(d))return d;let u=Kr(d.groundDecal,o.createDefaultGroundDecal,o);return u.rendering?.[i]===a?d:(s=!0,Li({...d,groundDecal:{...u,rendering:{...u.rendering,[i]:a}}},o))});return s?{...e,scene:{...e.scene,gameObjects:c}}:e}function UV(e,t,r,n){if(!n.isGroundDecalConfig(r))return e;let o=!1,a=e.scene.gameObjects.map(i=>i.id!==t||!n.isGroundDecalUiGameObject(i)||i.groundDecal.uiKind!==r.uiKind?i:(o=!0,Li({...i,kind:"transform",transformType:"groundDecal",groundDecal:Kr(r,n.createDefaultGroundDecal,n)},n)));return o?{...e,scene:{...e.scene,gameObjects:a}}:e}function bp(e,t,r,n,o){return r.startsWith("transform.scale")?Ep(e,o,t,oS(r,n)):e}function HV(e,t,r){if(t.type==="document.replace")return Ep(e,r);let n=t.patch;return n.kind==="game-object.field"?bp(e,String(n.targetId??""),String(n.path??""),n.value,r):n.kind==="game-object.property-field-batch"&&Array.isArray(n.fields)?n.fields.reduce((o,a)=>{let i=dl(a);return bp(o,String(i?.targetId??""),String(i?.path??""),i?.value,r)},e):n.kind==="game-object.field-batch"?Array.isArray(n.targetIds)?n.targetIds.reduce((o,a)=>bp(o,String(a),String(n.path??""),n.value,r),e):e:Ep(e,r)}function Ep(e,t,r,n){let o=!1,a=e.scene.gameObjects.map(i=>{if(r&&i.id!==r||!t.isGroundDecalUiGameObject(i))return i;let s=ie(i);if(!s||!JV(s)||!s.scale)return i;let c=n??NO(s.scale);return Math.abs(s.scale.x-c)<1e-6&&Math.abs(s.scale.y-c)<1e-6&&Math.abs(s.scale.z-c)<1e-6?i:(o=!0,{...i,components:i.components.map(d=>d===s?{...d,scale:{x:c,y:c,z:c}}:d)})});return o?{...e,scene:{...e.scene,gameObjects:a}}:e}function Li(e,t){let r=qV({...e,kind:"transform",transformType:"groundDecal",groundDecal:Kr(e.groundDecal,t.createDefaultGroundDecal,t)});return delete r.camera,delete r.light,delete r.primitive,r}function GO(e){return e==="groundDecal"||e.startsWith("groundDecal.")}function KV(e,t,r){let n=new Map(t.map(a=>[a.id,a])),o=Kr(e.groundDecal,r.createDefaultGroundDecal,r);return Li({...e,kind:"transform",transformType:"groundDecal",groundDecal:{...o,layers:o.layers.map((a,i)=>{if(!sc(a,r))return a;let s=n.get(a.id)??t[i];if(!s)return a;let c=a.kind==="text"?{...a.rect,x:s.rect.x,z:s.rect.z}:s.rect,d=a.kind==="text"&&s.fontSize!=null?{...a,rect:c,text:{...a.text,fontSize:s.fontSize}}:{...a,rect:c};return s.rotationDeg!=null&&jp(a,r)&&(d=jO(d,"rotationDeg",s.rotationDeg)??d),d})}},r)}function WV(e,t,r){let n=Kr(e.groundDecal,r.createDefaultGroundDecal,r),o=r.createDefaultGroundDecal(t);return Li({...e,kind:"transform",transformType:"groundDecal",groundDecal:{...o,size:n.size,mask:n.mask??o.mask,rendering:n.rendering??o.rendering}},r)}function qV(e){return e.components.some(t=>t.type==="Transform")?e:{...e,components:[YV(),...e.components]}}function YV(){return{type:"Transform",position:{x:0,y:0,z:0},rotation:{x:0,y:0,z:0},scale:{x:1,y:1,z:1}}}function JV(e){return e.type==="Transform"&&e.mode!=="matrix"}function XV(e,t){return t?e.scene.gameObjects.find(r=>r.id===t)??null:null}function LO(e,t){return{...e,scene:{...e.scene,gameObjects:e.scene.gameObjects.map(t)}}}function FO(e,t,r={},n){let o=Kr(t,n.createDefaultGroundDecal,n),a=[gU("groundDecal.uiKind","Type",n.createUiKindLabel?.(o.uiKind)??o.uiKind,0),n.createDocumentInspectorProperty(null,e,{path:"groundDecal.size.width",label:"Width",valueType:"number",control:"number",value:o.size.width,commitMode:"live",order:1,min:.001,step:.1,controlOptions:{refreshInspector:!1}}),n.createDocumentInspectorProperty(null,e,{path:"groundDecal.size.depth",label:"Depth",valueType:"number",control:"number",value:o.size.depth,commitMode:"live",order:2,min:.001,step:.1,controlOptions:{refreshInspector:!1}}),n.createDocumentInspectorProperty(null,e,{path:"groundDecal.rendering.textureWidth",label:"Texture Width",valueType:"number",control:"number",value:o.rendering?.textureWidth??512,commitMode:"change",order:3,min:64,max:2048,step:64}),n.createDocumentInspectorProperty(null,e,{path:"groundDecal.rendering.textureHeight",label:"Texture Height",valueType:"number",control:"number",value:o.rendering?.textureHeight??512,commitMode:"change",order:4,min:64,max:2048,step:64}),n.createDocumentInspectorProperty(null,e,{path:"groundDecal.layers",label:"Layout",valueType:"object",control:"custom",customControl:"ground-decal-layout",value:UO(o,r,n),commitMode:"live",order:5,coerce:s=>n.normalizeValue("groundDecal.layers",s),controlOptions:{aspectRatio:pU(o),aspectRatioUsesDecalSize:mU(o),sizeWidth:o.size.width,sizeDepth:o.size.depth}})],i=10;if((n.canShowActivePreview?.(o)??!1)&&a.push(n.createDocumentInspectorProperty(null,e,{path:"groundDecal.editorPreviewActive",label:"Preview Active Background",valueType:"boolean",control:"boolean",value:o.editorPreviewActive===!0,commitMode:"immediate",order:6,tags:["GroundDecalUI","Preview"],controlOptions:{refreshInspector:!1}})),r.enableGroundDecalUiActions&&(n.canShowLayerPairActions?.(o)??!1)&&n.layerPairActions){let s=n.getLayerPairs?.(o).length??0,c=n.canAddLayerPair?.(o)??!1,d=n.canRemoveLayerPair?.(o)??!1;a.push(DO({path:n.layerPairActions.addPath??"groundDecal.layerPairs.add",label:n.layerPairActions.addLabel??"Add item",actionId:n.layerPairActions.addActionId,order:i,icon:"asset",tooltip:n.layerPairActions.addTooltip??"Add an item.",params:{},disabled:!c,disabledReason:c?void 0:n.createLayerPairDisabledReason?.({decal:o,action:"add",pairCount:s}),effect:c?"active":"unsupported"})),i+=1,a.push(DO({path:n.layerPairActions.removePath??"groundDecal.layerPairs.remove",label:n.layerPairActions.removeLabel??"Remove item",actionId:n.layerPairActions.removeActionId,order:i,icon:"asset",tooltip:n.layerPairActions.removeTooltip??"Remove an item.",params:{},disabled:!d,disabledReason:d?void 0:n.createLayerPairDisabledReason?.({decal:o,action:"remove",pairCount:s}),effect:d?"active":"unsupported"})),i+=1}for(let s=0;s<o.layers.length;s+=1){let c=o.layers[s];if(!c||!kp(c,n))continue;let d=HO(c,n);if(Sp(c,n)){let u=n.resolveImageFit?.(c)??c.imageFit??"contain",l=sU(e,r,c,s,d,i,n);u!=="stretch"&&o.lockAspectToBorder===!0&&o.aspectSourceLayerId===c.id&&(l.controlOptions={...l.controlOptions,groundDecalAspectSizeWidth:o.size.width,groundDecalAspectSizeDepthPath:"groundDecal.size.depth",groundDecalAspectTextureWidth:o.rendering?.textureWidth??512,groundDecalAspectTextureHeight:o.rendering?.textureHeight??512,groundDecalAspectTextureWidthPath:"groundDecal.rendering.textureWidth",groundDecalAspectTextureHeightPath:"groundDecal.rendering.textureHeight"}),a.push(l),i+=1,a.push(lU(e,c,s,d,i,n)),i+=1}(c.kind==="progress"&&Ip(c,n)||c.kind==="textureProgress"&&Sp(c,n))&&(a.push(dU(e,c,s,d,i,n)),i+=1),Ip(c,n)&&(a.push(cU(e,c,s,d,i,n)),i+=1),_O(c,n)&&(a.push(n.createDocumentInspectorProperty(null,e,{path:`groundDecal.layers.${s}.text.value`,label:`${d} Text`,valueType:"string",control:"string",value:c.text.value,commitMode:"blur",order:i,tags:["GroundDecalUI","Text"]})),i+=1,a.push(uU(e,c,s,d,i,n)),i+=1)}return fU(a,{path:"groundDecal.raw",label:"Raw Ground Decal",value:t??o,order:i,source:"Document",tags:["Raw"]}),a}function $O(e,t,r,n){let o=n.getTargetGroundDecal(e),a=Kr(o,n.createDefaultGroundDecal,n),i=FO(t,a,{...r,enableGroundDecalUiActions:n.isUiTarget?.(e)??!1},n),s=i.find(d=>d.path==="groundDecal.layers");if(!s)throw new Error("Ground Decal Inspector requires the canonical layout property.");let c=i.filter(d=>d!==s).map(d=>({...d,controlOptions:{...d.controlOptions,groundDecalWorkbenchChild:!0}}));return{id:"groundDecal",title:"Ground Decal",order:40,placement:"body",summary:ZV(a,n),persistence:"document",collapsedByDefault:!1,properties:[QV(a,[s,...c],n),...c]}}function QV(e,t,r){let n=t.find(a=>a.path==="groundDecal.layers");if(!n||!n.value||typeof n.value!="object"||Array.isArray(n.value))throw new Error("Ground Decal Inspector requires the canonical layout property.");let o={uiKind:e.uiKind,uiKindLabel:r.createUiKindLabel?.(e.uiKind)??e.uiKind,layout:n.value,properties:t.filter(a=>a!==n)};return{...n,label:"Ground Decal Editor",customControl:"ground-decal-workbench",value:o,controlOptions:{...n.controlOptions,refreshInspector:!1}}}function ZV(e,t){let r=t.createUiKindLabel?.(e.uiKind)??e.uiKind,n=Math.max(1,Math.round(e.rendering?.textureWidth??512)),o=Math.max(1,Math.round(e.rendering?.textureHeight??512)),a=n===o?`${n}\xB2`:`${n}\xD7${o}`,i=t.canShowLayerPairActions?.(e)??!1?t.getLayerPairs?.(e).length??0:0;return i>0?`${r} \xB7 ${i} item${i===1?"":"s"} \xB7 ${a}`:`${r} \xB7 ${a}`}function BO(e,t,r,n,o){let a=VO(e,t,o);if(a.length<=1)return null;let i=a.find(l=>o.getTargetId(l.target)===r)??a[0];if(!i)return null;let s=eU(a.map(l=>l.decal),o),c=o.getTargetNodeKind(i.target),d=FO(c,i.decal,{...n,enableGroundDecalUiActions:!1},o).filter(l=>rU(l,s)).filter(l=>a.every(m=>l.readOnly||o.canPatchMultiField(e,o.getTargetId(m.target),l.path,l.value))).map(l=>({...l,mixed:nU(a,l.path,n,o)}));return d.length===0?null:{id:"groundDecal",title:"Ground Decal",order:40,placement:"body",summary:a.some(l=>l.decal.uiKind!==i.decal.uiKind)?"Mixed":`${a.length} ${o.createUiKindLabel?.(i.decal.uiKind)??i.decal.uiKind} UIs`,persistence:"document",collapsedByDefault:!1,properties:d}}function zO(e,t,r){return VO(e,t,r).map(n=>r.getTargetId(n.target))}function VO(e,t,r){let n=new Set,o=[];for(let a of t){if(!a||n.has(a))continue;n.add(a);let i=r.findTarget(e,a);!i||!r.canShowTarget(i)||o.push({target:i,decal:Kr(r.getTargetGroundDecal(i),r.createDefaultGroundDecal,r)})}return o}function eU(e,t={}){if(e.length===0)return!1;let[r,...n]=e.map(o=>tU(o,t));return n.every(o=>o===r)}function tU(e,t={}){return e.layers.map((r,n)=>({layer:r,index:n})).filter(r=>kp(r.layer,t)).map(({layer:r,index:n})=>`${n}:${r.id}:${r.role}:${r.kind}`).join("|")}function rU(e,t){return e.path==="groundDecal.raw"?!1:e.path==="groundDecal.uiKind"||e.path==="groundDecal.size.width"||e.path==="groundDecal.size.depth"||e.path==="groundDecal.editorPreviewActive"||Ia(e.path)?!0:e.path==="groundDecal.layers"||il(e.path)?t:!1}function nU(e,t,r,n){if(e.length<=1)return!1;let[o,...a]=e.map(i=>JSON.stringify(oU(i.decal,t,r,n)));return a.some(i=>i!==o)}function oU(e,t,r,n){if(t==="groundDecal.uiKind")return e.uiKind;if(t==="groundDecal.size.width")return e.size.width;if(t==="groundDecal.size.depth")return e.size.depth;if(t==="groundDecal.editorPreviewActive")return e.editorPreviewActive===!0;if(t==="groundDecal.rendering.textureWidth")return e.rendering?.textureWidth??512;if(t==="groundDecal.rendering.textureHeight")return e.rendering?.textureHeight??512;if(t==="groundDecal.layers")return UO(e,r,n).layers;let o=il(t);if(!o)return;let a=e.layers[o.index];if(a)return aU(a,o.field)}function aU(e,t){if(t==="rect")return e.rect;if(t==="rotationDeg")return e.rotationDeg??0;if(t==="textureId")return e.kind==="texture"||e.kind==="textureProgress"?e.textureId:void 0;if(t==="text.value")return e.kind==="text"?e.text.value:void 0;if(t==="text.fontSize")return e.kind==="text"?e.text.fontSize:void 0;if(t==="color")return e.kind==="color"||e.kind==="progress"?e.color:void 0;if(t==="color.a")return e.kind==="color"||e.kind==="progress"?e.color.a??1:void 0;if(t==="tint")return e.kind==="texture"||e.kind==="textureProgress"?e.tint??nl:void 0;if(t==="tint.a")return e.kind==="texture"||e.kind==="textureProgress"?e.tint?.a??1:void 0;if(t==="text.color")return e.kind==="text"?e.text.color:void 0;if(t==="text.color.a")return e.kind==="text"?e.text.color.a??1:void 0;if(t==="editorPreviewPercent")return e.kind==="progress"||e.kind==="textureProgress"?sS(e):void 0}function UO(e,t,r){let n=om(e),o=e.layers.map((a,i)=>({layer:a,index:i})).filter(a=>sc(a.layer,r));return{textureSize:n,mask:e.mask,layers:o.map(({layer:a,index:i})=>xO(t,a,i,r)),previewLayers:e.layers.map((a,i)=>{let s=xO(t,a,i,r),c=r.getLayerPreviewVisibility?.(a,e);return c?{...s,enabled:s.enabled!==!1&&c.value,previewVisibilityPath:c.path,previewVisibilityBaseEnabled:s.enabled!==!1}:s})}}function xO(e,t,r,n){return{index:r,id:t.id,role:t.role,kind:t.kind,label:HO(t,n),rect:t.rect,rotationDeg:t.rotationDeg??0,rotationEditable:jp(t,n),enabled:t.enabled!==!1,editable:sc(t,n),zOrder:t.zOrder,...typeof t.opacity=="number"?{opacity:t.opacity}:{},...n.useUniformLayoutScaleMode?.(t)?{scaleMode:"uniform"}:{},...t.kind==="progress"||t.kind==="textureProgress"?{previewValuePath:`groundDecal.layers.${r}.editorPreviewPercent`}:{},...t.kind==="text"&&typeof t.text.fontSize=="number"?{fontSize:t.text.fontSize}:{},preview:iU(e,t,n)}}function HO(e,t={}){let r=t.createLayerLabel?.(e);return r||e.role.charAt(0).toUpperCase()+e.role.slice(1)}function iU(e,t,r){if(t.kind==="texture"||t.kind==="textureProgress"){if(!t.textureId)return;let n=r.findTextureAsset?.(e,t.textureId)??null,o=n?.url??e.resolveTextureAssetUrl?.(t.textureId)??r.resolveTextureAssetUrl?.(t.textureId);return o?{kind:t.kind==="textureProgress"?"imageProgress":"image",url:o,alt:n?.label??t.textureId,imageFit:r.resolveImageFit?.(t)??t.imageFit??"contain",...t.tint?{tint:t.tint}:{},...t.kind==="textureProgress"?{value:MO(t),direction:t.direction}:{}}:void 0}if(t.kind==="color")return{kind:"color",color:t.color};if(t.kind==="progress")return{kind:"progress",value:MO(t),direction:t.direction,color:t.color};if(t.kind==="text")return{kind:"text",text:t.text.value,fontFamily:t.text.fontFamily,fontSize:t.text.fontSize,fontWeight:t.text.fontWeight,color:t.text.color,strokeColor:t.text.strokeColor,strokeWidth:t.text.strokeWidth,align:t.text.align,baseline:t.text.baseline}}function sS(e){let t=typeof e.editorPreviewPercent=="number"&&Number.isFinite(e.editorPreviewPercent)?e.editorPreviewPercent:jV;return Math.round(Math.max(0,Math.min(100,t)))}function MO(e){return sS(e)/100}function sU(e,t,r,n,o,a,i){let s=i.getMaterialText?.("zh"),c=i.findTextureAsset?.(t,r.textureId)??null,d=`groundDecal.layers.${n}.textureId`;return i.createDocumentInspectorProperty(null,e,{path:d,label:`${o} PNG`,valueType:"string",control:"custom",customControl:"asset-picker-card",value:r.textureId??"",commitMode:"change",order:a,tags:["GroundDecalUI","TextureAsset"],controlOptions:i.createTexturePickerControlOptions?.(t,s,r.textureId,c)??{currentTextureId:r.textureId,currentTexture:c},coerce:u=>i.normalizeValue(d,u)})}function cU(e,t,r,n,o,a){return a.createDocumentInspectorProperty(null,e,{path:`groundDecal.layers.${r}.color`,label:`${n} Color`,valueType:"color",control:"color",value:t.color,commitMode:"immediate",order:o,tags:["GroundDecalUI","Color"],controlOptions:{refreshInspector:!1,colorChannelDisplay:"normalized",colorChannelPrecision:2}})}function dU(e,t,r,n,o,a){let i=`groundDecal.layers.${r}.editorPreviewPercent`;return a.createDocumentInspectorProperty(null,e,{path:i,label:`${n} Preview %`,valueType:"number",control:"number",value:sS(t),commitMode:"blur",order:o,min:0,max:100,step:1,tags:["GroundDecalUI","Progress"],controlOptions:{refreshInspector:!1},coerce:s=>a.normalizeValue(i,s)})}function lU(e,t,r,n,o,a){let i=t.tint??nl;return a.createDocumentInspectorProperty(null,e,{path:`groundDecal.layers.${r}.tint`,label:`${n} Color`,valueType:"color",control:"color",value:i,commitMode:"immediate",order:o,tags:["GroundDecalUI","Color"],controlOptions:{refreshInspector:!1,colorChannelDisplay:"normalized",colorChannelPrecision:2}})}function uU(e,t,r,n,o,a){return a.createDocumentInspectorProperty(null,e,{path:`groundDecal.layers.${r}.text.color`,label:`${n} Color`,valueType:"color",control:"color",value:t.text.color,commitMode:"immediate",order:o,tags:["GroundDecalUI","Color"],controlOptions:{refreshInspector:!1,colorChannelDisplay:"normalized",colorChannelPrecision:2}})}function mU(e){return e.size.width>0&&e.size.depth>0}function pU(e){return e.size.width>0&&e.size.depth>0?e.size.width/e.size.depth:1}function fU(e,t){let r=le(t);r&&e.push(r)}function gU(e,t,r,n,o){return le({path:e,label:t,value:r,order:n,persistence:"readonly",source:"Document",tooltip:o})}function DO(e){let t=Object.fromEntries(Object.entries(e.params).filter(r=>typeof r[1]=="string"&&r[1].length>0));return{path:e.path,label:e.label,valueType:"string",control:"custom",customControl:"inspector-action-button",controlOptions:{actionId:e.actionId,label:e.label,icon:e.icon,params:t,...e.disabled?{disabled:!0}:{},...e.disabledReason?{disabledReason:e.disabledReason}:{}},value:e.actionId,readOnly:!1,persistence:"readonly",commitMode:"immediate",order:e.order,tooltip:e.disabledReason??e.tooltip,effect:e.effect,disabledReason:e.disabled?e.disabledReason:void 0}}function dl(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function hU(e){return typeof e=="string"&&e.trim()?e.trim():null}var Fi="groundDecal";function bU(e){if(e.id!==Fi||e.scene?.kind!==Fi||!e.config||typeof e.config!="object"||Array.isArray(e.config))return null;let t=e.config;return!Array.isArray(t.uiKinds)||t.uiKinds.length===0||t.uiKinds.some(r=>typeof r!="string"||r.trim().length===0)||!t.documentPolicy||typeof t.documentPolicy!="object"||Array.isArray(t.documentPolicy)||typeof t.documentPolicy.createDefaultGroundDecal!="function"||typeof t.documentPolicy.isGroundDecalConfig!="function"?null:t}function KO(e,t){let r=bU(e);if(!r)return null;let n=r.documentPolicy,o=yU(n),a=s=>s?.transformType===Fi&&o.isGroundDecalConfig(s.groundDecal);return SU({features:[e],documentPolicy:o,createInspectorServices:(s,c)=>RO({policy:{...o,...r.inspectorPolicy??{}},createDocumentInspectorProperty:s,normalizeValue:Np,findTarget:(d,u)=>d.scene.gameObjects.find(l=>l.id===u)??null,getTargetId:d=>d.id,getTargetNodeKind:d=>d.kind??"transform",getTargetGroundDecal:d=>d.groundDecal??null,canShowTarget:a,isUiTarget:a,canPatchMultiField:c.canPatchMultiField,findTextureAsset:(d,u)=>hy(d,u??""),getMaterialText:ko,createTexturePickerControlOptions:(d,u,l,m)=>ip(d,u,l??"",m)}),getDocumentInspectorPropertyFactory:t,createDefaultGroundDecal:o.createDefaultGroundDecal,createObjectPatch:s=>({kind:"game-object.create-primitive",gameObject:s}),isGroundDecalObject:a,createHierarchyLabel:r.createHierarchyLabel}).contribution}function yU(e){let t=e;return{...e,createDefaultGroundDecal:r=>structuredClone(e.createDefaultGroundDecal(r)),isGroundDecalConfig(r){return e.isGroundDecalConfig(structuredClone(r))},...typeof t.isProjectEditableLayer=="function"?{isProjectEditableLayer:r=>t.isProjectEditableLayer(structuredClone(r))}:{},...typeof t.isLayoutEditableLayer=="function"?{isLayoutEditableLayer:r=>t.isLayoutEditableLayer(structuredClone(r))}:{},...typeof t.isRotationEditableLayer=="function"?{isRotationEditableLayer:r=>t.isRotationEditableLayer(structuredClone(r))}:{}}}function SU(e){let r=(e.features.find(i=>i.id===Fi)??null)?.config?.uiKinds,n=Array.isArray(r)?[...new Set(r.filter(i=>typeof i=="string"&&i.length>0))]:[],o=OO({...e.documentPolicy,canShowGroundDecalInspector:e.isGroundDecalObject,isGroundDecalUiGameObject:e.isGroundDecalObject}),a=IU({uiKinds:n,documentBridge:o,createInspectorServices:i=>e.createInspectorServices(i,o),getDocumentInspectorPropertyFactory:e.getDocumentInspectorPropertyFactory,createDefaultGroundDecal:e.createDefaultGroundDecal,createObjectPatch:e.createObjectPatch,canShowInspector:e.isGroundDecalObject,isGroundDecalObject:e.isGroundDecalObject,createHierarchyLabel:e.createHierarchyLabel});return{bridge:o,contribution:a,uiKinds:n,resolve(i){return i.id===Fi&&i.scene?.kind===Fi?a:null}}}function IU(e){let t=e.documentBridge;return{documentReducerImmutability:"preserves-input",transformTypeOptions:[{label:"Ground Decal",value:Fi}],normalizeInspectorValue:(n,o)=>n.startsWith("groundDecal.")?Np(n,o):void 0,validateInspectorField({path:n,value:o}){if(n==="groundDecal.uiKind")return e.uiKinds.includes(String(o))?{ok:!0,value:o}:{ok:!1,message:"Invalid value for scene node field: groundDecal.uiKind."};if(n==="groundDecal.size.width"||n==="groundDecal.size.depth")return typeof o=="number"&&Number.isFinite(o)&&o>0?{ok:!0,value:o}:{ok:!1,message:`Invalid value for scene node field: ${n}.`};if(n==="groundDecal.layers"){let a=t.normalizeLayoutPatchValue(o);return a?{ok:!0,value:a}:{ok:!1,message:"Invalid value for scene node field: groundDecal.layers."}}return CO(n,o)},isInspectorPatchPath:_p,isProjectionPath:GO,normalizeDocumentAfterCommand:t.normalizeScalesForCommand,normalizeAfterFieldPatch:t.normalizeScaleAfterFieldPatch,fieldMutation:{isCustomTransformType:n=>n==="groundDecal",applyCustomTransformType(n,o){o==="groundDecal"&&(n.groundDecal=t.mergeDefaults(n.groundDecal))},clearCustomTransformState(n,o){o!=="groundDecal"&&delete n.groundDecal},patchCustomTransformField(n,o,a){return o.startsWith("groundDecal.")?(n.kind="transform",n.transformType=n.transformType??"groundDecal",delete n.primitive,n.groundDecal=t.mergeDefaults(n.groundDecal),TU(n,o,a),!0):!1}},createInspectorPropertyPatch({gameObject:n,path:o,value:a,collectChangedIds:i}){if(!e.isGroundDecalObject(n))return null;let s=oS(o,a);return s===null?null:{label:`Patch ${n.id} transform.scale`,patch:{kind:"game-object.field",targetId:n.id,path:"transform.scale",value:{x:s,y:s,z:s}},changedId:n.id,changedIds:i()}},patchGameObjectField:({document:n,targetId:o,path:a,value:i})=>a==="groundDecal.uiKind"?t.patchKind(n,o,i):a==="groundDecal.layers"?t.patchLayout(n,o,i):t.patchInspectorField(n,o,a,i),patchGameObjectsField:({document:n,targetIds:o,path:a,value:i,patchSingle:s})=>a==="groundDecal.uiKind"||a==="groundDecal.layers"||_p(a)?o.reduce((c,d)=>s(c,d,a,i),n):null,reducePatch:({document:n,patch:o})=>o.kind==="game-object.ground-decal-ui.replace"?t.replaceUi(n,String(o.targetId),o.groundDecal):null,createHierarchyPatch:(n,o)=>EU(n,o,e),createInspectorSections:n=>e.canShowInspector(n.gameObject)?[$O(n.gameObject,n.nodeKind,n.context,e.createInspectorServices(n.createDocumentInspectorProperty))]:[],createMultiInspectorSection:({document:n,targetIds:o,activeId:a,context:i})=>BO(n,o,a,i,e.createInspectorServices(e.getDocumentInspectorPropertyFactory())),resolveMultiInspectorTargetIds:(n,o)=>zO(n,o,e.createInspectorServices(e.getDocumentInspectorPropertyFactory())),isSerializedMultiFieldPath:sl,isSerializedMultiProjectionPath:sl,getSerializedMultiProbeValue:AU,canPatchSerializedMultiField:({document:n,targetId:o,path:a,value:i})=>!sl(a)||t.canPatchMultiField(n,o,a,i)}}function EU(e,t,r){let n=t.startsWith("ground-decal:")?t.slice(13):"";if(!r.uiKinds.includes(n))return null;let o=Vr(e.scene.gameObjects.map(d=>d.id),`${n}_ground_decal_ui`),a=r.createHierarchyLabel?.(n)??`${n} Ground Decal UI`,i=new Set(e.scene.gameObjects.map(d=>d.name).filter(Boolean)),s=a;for(let d=2;i.has(s);d+=1)s=`${a} ${d}`;let c={id:o,guid:kt(),name:s,kind:"transform",parentId:gt(e)??void 0,active:!0,transformType:"groundDecal",groundDecal:r.createDefaultGroundDecal(n),components:[{type:"Transform",position:{x:0,y:.02,z:0},rotation:{x:0,y:0,z:0},scale:{x:1,y:1,z:1}}]};return{label:`Add ${a}`,patch:r.createObjectPatch(c),createdId:o,changedIds:[o],reprojectIds:[o]}}function TU(e,t,r){let n=t.split("."),o=e;for(let a of n.slice(0,-1))o=o[a]??={};o[n[n.length-1]]=r}function AU(e){if(e.endsWith(".width")||e.endsWith(".depth"))return 1;if(e.endsWith(".rotationDeg"))return 45;if(e.endsWith("textureWidth")||e.endsWith("textureHeight"))return 512;if(e==="groundDecal.layers")return{layers:[{id:"mainLogo",rect:{x:0,z:0,width:1,depth:1}}]};if(Pp(e))return"texture_probe";if(Dp(e))return"30";if(xp(e)||Cp(e)||Op(e))return{r:1,g:1,b:1,a:1};if(Mp(e)||wp(e)||Rp(e))return 1;if(vp(e))return 75;if(Ap(e))return ic({x:0,z:0,width:1,depth:1});if(Ia(e))return cl(512)}function WO(e){let t=typeof e=="string"&&e.trim()?e.trim():void 0;if(!t)return;if(t.includes("\0"))throw new Error("external_asset_path_must_be_portable");let r=t.replace(/\\/g,"/");if(r.startsWith("/")||/^[a-z]:\//i.test(r)||/^[a-z][a-z0-9+.-]*:/i.test(r))throw new Error("external_asset_path_must_be_portable");let n=[];for(let o of r.split("/"))if(!(!o||o===".")){if(o==="..")throw new Error("external_asset_path_must_be_portable");n.push(o)}if(n.length===0)throw new Error("external_asset_path_must_be_portable");return n.join("/")}function at(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:void 0}function Gp(e,t=4,r="$"){if(!Number.isInteger(t)||t<0||t>100)throw new Error(`json.number.invalidDecimalPlaces: ${t}`);let n=[],o=a=>{if(typeof a=="number"){if(!Number.isFinite(a))throw new Error(`json.number.nonFinite: ${PU(r,n)}`);if(Object.is(a,-0))return 0;if(Number.isInteger(a))return a;let i=Number(a.toFixed(t));return Object.is(i,-0)?0:i}if(Array.isArray(a)){let i;for(let s=0;s<a.length;s+=1){let c=a[s];n.push(s);let d=o(c);n.pop(),!Object.is(d,c)&&(i??=a.slice(),i[s]=d)}return i??a}if(a&&typeof a=="object"){let i=a,s;for(let[c,d]of Object.entries(i)){n.push(c);let u=o(d);n.pop(),!Object.is(u,d)&&(s??={...i},s[c]=u)}return s??a}return a};return o(e)}function PU(e,t){return t.reduce((r,n)=>typeof n=="number"?`${r}[${n}]`:`${r}.${n}`,e)}function ll(){return{isCoreMaterialOverridePath:bb,isMaterialAssetIdOverridePath:WP,addMaterialAsset:Zm}}function qO(e,t=[]){return e.assets.filter(br).flatMap(r=>{let n=r.prefab?.sourceAssetId;if(typeof n!="string"||n.length===0)return[];let o=xU(r,t);return[{id:`prefab:${r.id}`,assetId:r.id,guid:r.guid,type:"prefab",kind:"prefab",label:r.displayName??r.id,displayName:r.displayName??r.id,category:r.category??"Prefab",origin:"project",placeable:o.placeable,...o.availability?{availability:structuredClone(o.availability)}:{},dedupeKey:`prefab:${r.guid??r.id}`,prefab:{id:r.id,guid:r.guid,displayName:r.displayName??r.id,category:r.category??"Prefab",...structuredClone(r.prefab),sourceAssetId:n},metadata:structuredClone(r.metadata??{})}]})}function xU(e,t){let r=e.prefab?.sourceAssetId,n=typeof r=="string"?t.find(a=>a.assetId===r||a.id===r):void 0,o=n?.availability;return{placeable:n?.placeable!==!1&&o?.status!=="unavailable",...o?{availability:o}:{}}}function cS(e,t,r=ll()){if(e==="displayName"&&typeof t=="string")return t.trim();if(e==="prefab.defaults.active")return t??null;if(lS(e))return t==null?null:e==="prefab.defaults.shadow"?t:e==="prefab.defaults.shadow.cast"||e==="prefab.defaults.shadow.receive"?t===!0?"enabled":t===!1?"none":t:t;if(r.isMaterialAssetIdOverridePath(e)&&typeof t=="string"){let n=t.trim();return n||null}return t}function dS(e,t,r=ll()){if(e==="displayName")return typeof t=="string"&&t.length>0;if(e==="prefab.defaults.active")return t==null||typeof t=="boolean";if(lS(e)){if(e==="prefab.defaults.shadow")return!!t&&typeof t=="object"&&typeof t.cast=="boolean"&&typeof t.receive=="boolean";let n=e.slice(16);return qs({path:n,nodeKind:"instance",value:t}).ok}return r.isCoreMaterialOverridePath(e)?r.isMaterialAssetIdOverridePath(e)&&(t==null||typeof t=="string"&&t.trim().length>0):!1}function lS(e){return e==="prefab.defaults.shadow"||e==="prefab.defaults.shadow.cast"||e==="prefab.defaults.shadow.receive"}function YO(e,t,r){let n=[...e.assets];r&&!n.some(a=>a.id===r.id)&&n.push(structuredClone(r));let o=Lp(t);return n.some(a=>a.id===t.id)||n.push(structuredClone(o)),n.length===e.assets.length?e:{...e,assets:n}}function uS(e,t,r,n,o=ll()){if(r==="displayName")return e;let a=e.assets.find(s=>s.id===t&&br(s));if(!a)return e;let i=MU(XO(a),r,n,o);return JSON.stringify(i)===JSON.stringify(a)?e:{...e,assets:e.assets.map(s=>s.id===t?i:s)}}function JO(e,t,r,n){let o=e.assets.find(s=>s.id===t&&br(s));if(!o)return e;let a=n&&!e.assets.some(s=>s.id===n.id)?[...e.assets,structuredClone(n)]:e.assets,i=Lp({...structuredClone(r),id:t});return JSON.stringify(i)===JSON.stringify(o)&&a===e.assets?e:{...e,assets:a.map(s=>s.id===t?i:s)}}function MU(e,t,r,n=ll()){if(t==="displayName")return e;if(t==="prefab.defaults.active"||lS(t)){let o=structuredClone(e),a=structuredClone(o.prefab??e.prefab);if(a.defaults={...a.defaults??{}},t==="prefab.defaults.active")r==null?delete a.defaults.active:a.defaults.active=r;else{if(t==="prefab.defaults.shadow"){if(!r||typeof r!="object")return e;let s=r.cast,c=r.receive;return typeof s!="boolean"||typeof c!="boolean"?e:(a.defaults.shadow={cast:s?"enabled":"none",receive:c?"enabled":"none"},o.prefab=a,Lp(o))}if(r!=="enabled"&&r!=="none")return e;let i=a.defaults.shadow;a.defaults.shadow={cast:t==="prefab.defaults.shadow.cast"?r:i?.cast==="enabled"?"enabled":"none",receive:t==="prefab.defaults.shadow.receive"?r:i?.receive==="enabled"?"enabled":"none"}}return Object.keys(a.defaults).length===0&&delete a.defaults,o.prefab=a,Lp(o)}return Rd(e,t,r)}function XO(e){if(!br(e))return e;let t=UP(e);return t.ok?t.prefabAsset:e}function Lp(e){if(!br(e))return e;let t=XO(e),r=yr(t);if(!r||!Array.isArray(t.prefab?.nodes))return t;let n=t.prefab.nodes.findIndex(a=>a.id===r);if(n<0)return t;let o=structuredClone(t.prefab.nodes[n]);if(o.name=t.displayName??o.name,t.prefab.defaults){let{shadow:a,...i}=t.prefab.defaults;Object.keys(i).length>0?o.defaults=structuredClone(i):delete o.defaults}else delete o.defaults;return t.prefab.nodes=[...t.prefab.nodes],t.prefab.nodes[n]=o,t}function QO(e,t,r,n,o=ll()){let a=o.addMaterialAsset(e,n);return uS(a,t,r,n.id,o)}function eR(e,t,r,n){let o=or(e,t.assetId),a=t.sourceAssetId??o?.prefab?.sourceAssetId,i=a?e.assets.find(l=>l.id===a):null,s=DU(i,a),c=Fp(i),d=OU(c,!!n.importStructureReady),u=rR(n.importStructure)?nR(n.importStructure):[];return $p([s,...d?[d]:[],...u],r)}function DU(e,t){return{id:"prefab-source",label:e?.displayName??t??"Missing source asset",kind:"source",sourceAssetId:t,...e?.metadata?.relativePath?{meta:e.metadata.relativePath}:{}}}function OU(e,t){return e.length===0?null:{id:"prefab-material-slots",label:`${t?"Editable Material Slots":"Meshes / Materials"} (${e.length})`,kind:"group",children:[...e]}}function Fp(e){return(Array.isArray(e?.metadata?.materialSlots)?e.metadata.materialSlots:[]).map(CU).filter(r=>!!r).map((r,n)=>{let o=r.sourceSurfaces[0],a=aR(o.ownerNodePath),i=$r(r),s=i.map(m=>vi(r,m)).filter(m=>!!m);if(s.length===0&&r.materialNames?.length&&s.push(...r.materialNames.filter(m=>typeof m=="string"&&!!m.trim())),s.length===0&&r.materialName&&s.push(r.materialName),!r.slotId)return null;let c=`prefab.overrides.materialSlotBindings.${r.slotId}`,d=o.sourceMaterialIndex,u=r.label??s[0]??a.split("/").filter(Boolean).pop()??`Material Slot ${n+1}`;return{id:`prefab-material-slot:${pS(r.slotId??a,`material_slot_${n+1}`)}:${n+1}`,itemType:"prefab-material-slot",label:u,kind:"material",bindingKind:"slot",bindingPath:c,materialAssetIdPath:`${c}.materialAssetId`,profilePathPrefix:`${c}.override`,slotId:r.slotId,sourceSurfaces:structuredClone(r.sourceSurfaces),ownerNodePath:a,...typeof o.nodeIndex=="number"?{nodeIndex:o.nodeIndex}:{},...o.nodeIndexPath?.length?{nodeIndexPath:o.nodeIndexPath}:{},...typeof o.meshIndex=="number"?{meshIndex:o.meshIndex}:{},...typeof o.primitiveIndex=="number"?{primitiveIndex:o.primitiveIndex}:{},...d==null?{}:{sourceMaterialIndex:d},...i.length>0?{sourceMaterialIndices:i}:{},...s[0]?{sourceMaterialName:s[0]}:{},...s.length>0?{sourceMaterialNames:s}:{},...r.sourceSurfaces.length===1&&typeof o.triangleCount=="number"?{triangleCount:o.triangleCount}:{},...r.sourceSurfaces.length===1&&o.boundingBox?{boundingBox:o.boundingBox}:{},meta:[a,r.sourceSurfaces.length===1?`primitive #${o.primitiveIndex}`:`${r.sourceSurfaces.length} source surfaces`,s.length>0?s.join(", "):null].filter(Boolean).join(" - ")}}).filter(r=>r!=null)}function tR(e){return e.map(t=>[t.label,typeof t.primitiveIndex=="number"?`primitive #${t.primitiveIndex}`:null,typeof t.sourceMaterialIndex=="number"?`material #${t.sourceMaterialIndex}`:null,typeof t.triangleCount=="number"?`${t.triangleCount} triangles`:null,RU(t.boundingBox)].filter(Boolean).join(" \xB7 ")).join(`
|
|
4
|
+
`)}function RU(e){if(!e)return null;let t=e.min?e.min.join(", "):"",r=e.max?e.max.join(", "):"";return t&&r?`bounds min ${t}; max ${r}`:t?`bounds min ${t}`:r?`bounds max ${r}`:null}function CU(e){return $s(e)}function rR(e){return["nodes","materials","textures","animations"].some(t=>ul(e,t).length>0)}function nR(e){let t=[],r=ul(e,"nodes");r.length>0&&t.push({id:"prefab-import-nodes",label:`Nodes (${r.length})`,kind:"group",children:wU(r)});let n=ul(e,"materials");n.length>0&&t.push({id:"prefab-import-materials",label:`Materials (${n.length})`,kind:"group",children:n.map((i,s)=>mS(i,s,"material"))});let o=ul(e,"textures");o.length>0&&t.push({id:"prefab-import-textures",label:`Textures (${o.length})`,kind:"group",children:o.map((i,s)=>mS(i,s,"texture"))});let a=ul(e,"animations");return a.length>0&&t.push({id:"prefab-import-animations",label:`Animations (${a.length})`,kind:"group",children:a.map((i,s)=>mS(i,s,"animation"))}),t}function wU(e){let t=e.map((o,a)=>{let i=Ht(o.id)??`runtime-node-${a+1}`,s=Ht(o.kind),c={id:`prefab-import-node:${pS(i,`node_${a+1}`)}`,runtimeId:i,label:Ht(o.name)??Ht(o.sourceName)??i,kind:s==="mesh"?"mesh":s==="root"?"root":"group",...Ht(o.ownerNodePath)?{ownerNodePath:Ht(o.ownerNodePath)}:{},...Ht(o.sourceName)?{sourceName:Ht(o.sourceName)}:{},...Array.isArray(o.materialIds)?{materialIds:o.materialIds.filter(d=>typeof d=="string")}:{},children:[]};return{runtimeId:i,parentId:Ht(o.parentId),item:c}}),r=new Map(t.map(o=>[o.runtimeId,o.item])),n=[];for(let o of t)o.parentId&&r.has(o.parentId)?r.get(o.parentId).children.push(o.item):n.push(o.item);return n}function mS(e,t,r){let n=Ht(e.id)??`${r}-${t+1}`,o=Ht(e.url),a=Array.isArray(e.nodeIds)?e.nodeIds.filter(s=>typeof s=="string"):[],i=Array.isArray(e.textureIds)?e.textureIds.filter(s=>typeof s=="string"):[];return{id:`prefab-import-${r}:${pS(n,`${r}_${t+1}`)}`,itemType:r==="material"?"runtime-material":r==="texture"?"runtime-texture":"runtime-animation",runtimeId:n,label:Ht(e.name)??n,kind:r,...Ht(e.kind)?{runtimeKind:Ht(e.kind)}:{},...o?{url:o}:{},...a.length>0?{nodeIds:a}:{},...i.length>0?{textureIds:i}:{},meta:[Ht(e.kind),o,a.length>0?`${a.length} node${a.length===1?"":"s"}`:null,i.length>0?`${i.length} texture${i.length===1?"":"s"}`:null].filter(Boolean).join(" - ")}}function oR(e,t,r,n){if(r.itemType==="prefab-material-slot"||r.itemType==="runtime-material"||r.itemType==="runtime-texture")return r;if(r.itemType!=="prefab-node"||r.kind!=="model")return null;let o=typeof r.sourceAssetId=="string"?r.sourceAssetId:t.sourceAssetId;if(!o)return null;let a=e.assets.find(c=>c.id===o),i=Fp(a);if(i.length>0){let c=i[0]??null;return c?{...c,...typeof r.nodeId=="string"?{prefabNodeId:r.nodeId}:{}}:null}return(rR(n.importStructure)?nR(n.importStructure).find(c=>c.id==="prefab-import-materials"):null)?.children?.[0]??null}function $p(e,t){for(let r of e){if(r.id===t)return r;let n=r.children?$p(r.children,t):null;if(n)return n}return null}function aR(e){return e.split("/").map(t=>t.trim()).filter(Boolean).join("/")}function pS(e,t){return aR(e).toLowerCase().replace(/[^a-z0-9]+/g,"_").replace(/^_+|_+$/g,"")||t}function ul(e,t){let n=ZO(e)?.[t];return Array.isArray(n)?n.map(ZO).filter(o=>!!o):[]}function ZO(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function Ht(e){return typeof e=="string"&&e.trim()?e.trim():null}function iR(e,t,r={}){let n=or(e,t.assetId);if(!n?.prefab)return[{id:"prefab-scene",label:"Prefab Scene Tree",kind:"root",children:[]}];let o=yr(n),a=gb(n,null);return[{id:"prefab-root",label:"Prefab Scene Tree",kind:"root",children:(o?a.filter(s=>s.id===o):a).map(s=>sR(n,s))}]}function sR(e,t){let r=gb(e,t.id).map(n=>sR(e,n));return{id:`prefab-node:${t.id}`,nodeId:t.id,label:t.name??vU(t),kind:t.kind,itemType:"prefab-node",...t.guid?{guid:t.guid}:{},...t.sourceAssetId?{sourceAssetId:t.sourceAssetId}:{},...t.childPrefabId?{childPrefabId:t.childPrefabId}:{},...t.sourceNodePath?{sourceNodePath:t.sourceNodePath}:{},...t.transform?{transform:structuredClone(t.transform)}:{},...t.primitive?{primitive:structuredClone(t.primitive)}:{},...t.marker?{marker:structuredClone(t.marker)}:{},...t.defaults&&Object.keys(t.defaults).length>0?{defaults:structuredClone(t.defaults)}:{},...t.overrides&&Object.keys(t.overrides).length>0?{overrides:structuredClone(t.overrides)}:{},...r.length>0?{children:r}:{}}}function vU(e){return e.kind==="model"?e.sourceAssetId??e.id:e.kind==="prefabInstance"?e.childPrefabId??e.id:e.kind==="primitive"?e.primitive?.shape??e.id:e.id}function cR(e,t,r){if(t.itemType!=="prefab-node"||t.kind!=="model")return null;let n=typeof t.sourceAssetId=="string"?t.sourceAssetId:null;if(!n)return null;let o=e.assets.find(h=>h.id===n),a=Fp(o),i=zp(o?.metadata?.assetAnalysis),s=fS(i?.nodes),c=fS(i?.meshes),d=Bp(r.importStructure,"nodes").length,u=Bp(r.importStructure,"materials").length,l=Bp(r.importStructure,"textures").length,m=Bp(r.importStructure,"animations").length,p=[In("prefab.sourceStructure.sourceAsset","Source Asset",o?.displayName??n,0),In("prefab.sourceStructure.assetId","Asset ID",n,1)];return o?.metadata?.relativePath&&p.push(In("prefab.sourceStructure.relativePath","Relative Path",String(o.metadata.relativePath),2)),p.push(In("prefab.sourceStructure.materialSlots","Material Slots",String(a.length),10),In("prefab.sourceStructure.modelNodes","Model Nodes",s.length>0?_U(s):"No SDK node analysis",11),In("prefab.sourceStructure.meshPrimitives","Mesh Primitives",c.length>0?kU(c):"No SDK mesh primitive analysis",12),In("prefab.sourceStructure.runtimeNodes","Runtime Nodes",String(d),20),In("prefab.sourceStructure.runtimeMaterials","Runtime Materials",String(u),21),In("prefab.sourceStructure.runtimeTextures","Runtime Textures",String(l),22),In("prefab.sourceStructure.runtimeAnimations","Runtime Animations",String(m),23)),a.length>0&&p.push(In("prefab.sourceStructure.materialSlotSummary","Material Slot Summary",tR(a),30)),{id:"prefab-source-structure",title:"Source Structure",summary:o?"Readonly GLB / glTF anatomy":"Missing source asset",persistence:"readonly",effect:o?"active":"unsupported",properties:p}}function _U(e){return e.slice(0,8).map((t,r)=>{let n=Vp(t.ownerNodePath)??Vp(t.name)??`node #${typeof t.nodeIndex=="number"?t.nodeIndex:r}`,o=typeof t.meshIndex=="number"?`mesh #${t.meshIndex}`:null,a=typeof t.primitiveCount=="number"?`${t.primitiveCount} primitives`:null;return[n,o,a].filter(Boolean).join(" \xB7 ")}).join(`
|
|
5
|
+
`)}function kU(e){return e.slice(0,8).map((t,r)=>{let n=Vp(t.name)??`mesh #${typeof t.meshIndex=="number"?t.meshIndex:r}`,o=fS(t.primitives);if(o.length===0)return n;let a=o.slice(0,6).map((i,s)=>[`p${typeof i.primitiveIndex=="number"?i.primitiveIndex:s}`,typeof i.sourceMaterialIndex=="number"?`mat #${i.sourceMaterialIndex}`:null,Vp(i.materialName),typeof i.triangleCount=="number"?`${i.triangleCount} tri`:null].filter(Boolean).join(" ")).join(", ");return`${n}: ${a}`}).join(`
|
|
6
|
+
`)}function Bp(e,t){let n=zp(e)?.[t];return Array.isArray(n)?n.map(zp).filter(o=>!!o):[]}function zp(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function fS(e){return Array.isArray(e)?e.map(zp).filter(t=>!!t):[]}function Vp(e){return typeof e=="string"&&e.trim()?e.trim():null}function In(e,t,r,n,o){return le({path:e,label:t,value:r,order:n,persistence:"readonly",source:"Document",tooltip:o})}function dR(e,t,r){let n=e.prefab?.defaults?.shadow;return[ml({path:"prefab.defaults.shadow.cast",label:"Cast Shadow",valueType:"boolean",control:"boolean",value:n?.cast==="enabled",order:t+0,tooltip:"Controls shadow casting for the entire Prefab definition."},r),ml({path:"prefab.defaults.shadow.receive",label:"Receive Shadow",valueType:"boolean",control:"boolean",value:n?.receive==="enabled",order:t+1,tooltip:"Controls shadow receiving for the entire Prefab definition."},r)]}function ml(e,t){let r=n=>t.normalizePrefabAssetFieldValue(e.path,e.coerce?e.coerce(n):n);return{path:e.path,label:e.label,valueType:e.valueType,control:e.control,value:e.value,...e.mixed===!0?{mixed:!0}:{},readOnly:!1,persistence:"document",commitMode:e.control==="string"?"blur":"immediate",order:e.order,...e.options?{options:e.options}:{},...e.tooltip?{tooltip:e.tooltip}:{},validate:n=>t.validatePrefabAssetFieldValue(e.path,r(n))?{ok:!0,value:r(n)}:{ok:!1,message:`Invalid prefab field: ${e.path}.`},coerce:r}}function jU(e,t,r,n,o,a){return r.itemType==="prefab-material-slot"?NU(e,t,r,n,o,a()):r.itemType==="runtime-material"?lR("This runtime material has no stable slotId or ownerNodePath mapping.",r):r.itemType==="runtime-texture"?lR("Texture nodes are inspection-only. Edit texture channels from a stable material slot.",r):null}function NU(e,t,r,n,o,a){let i=ko("en"),s=qP(t,r),c=r.prefabNodeId?Bs(t,r.prefabNodeId):null,d=r.prefabNodeId&&r.slotId?c?.overrides?.materialSlotBindings?.[r.slotId]:s,u=typeof d?.materialAssetId=="string"?d.materialAssetId:"",l=u||(typeof s?.materialAssetId=="string"?s.materialAssetId:""),m=e,p=Xe(m,l||wi);return{id:"prefab-material-override-target",title:"Material Slot",order:20,placement:"body",summary:p?.name??"Unassigned",persistence:"document",effect:"active",collapsedByDefault:!1,properties:[dc("prefab.materialOverride.status","Status","Editable",0),dc("prefab.materialOverride.bindingPath","Binding Path",r.bindingPath,1),dc("prefab.materialOverride.materialAssetPath","Material Asset Path",r.materialAssetIdPath,2),ki.createSelectorInspectorPropertyWithUsage(m,"instance",{path:r.materialAssetIdPath,label:"Material",value:u,order:10,text:i,currentAsset:p,currentAction:{actionId:"material.open-asset",params:{materialAssetId:p?.id,browserAssetId:p?`material:${p.id}`:void 0,sourceObjectId:t.id,ownerScope:"prefab",prefabAssetId:t.id,prefabNodeId:r.prefabNodeId,sourceBindingPath:r.materialAssetIdPath}},previewContext:n},a)]}}function GU(e,t,r,n,o){return jU(e,t,r,n,o,()=>rr.getCachedUsageIndex(e))}var LU={createEditorScenePrefabMaterialOverrideInspectorSectionWithCachedUsage:GU},uR=LU;function lR(e,t){return{id:"prefab-material-override-target",title:"Prefab Material Override",order:20,placement:"body",summary:e,persistence:"readonly",effect:"unsupported",collapsedByDefault:!1,properties:[dc("prefab.materialOverride.status","Status","Read Only",0),dc("prefab.materialOverride.reason","Reason",e,1),dc("prefab.materialOverride.runtimeId","Runtime ID",t.runtimeId??t.id,2)]}}function dc(e,t,r,n,o){return le({path:e,label:t,value:r,order:n,persistence:"readonly",source:"Document",tooltip:o})}function FU(e,t,r,n,o,a){let i=or(e,t.assetId);if(!i)return null;let s=t.sourceAssetId?e.assets.find(f=>f.id===t.sourceAssetId)??null:null,c=r?$p(iR(e,t,n),r)??eR(e,t,r,n):null,d=c?oR(e,t,c,n):null,u=d?a(e,i,d,n,o):null,l=c?cR(e,c,n):null,m=typeof c?.nodeId=="string"?c.nodeId:null,p=m?Bs(i,m):null,h=p&&p.kind!=="root"&&p.transform?.mode!=="matrix"?zU(i,p):null,g=p?.kind==="marker"&&p.marker?KU(i,p,o):null;return{targetIds:[i.id],activeId:i.id,label:n.importStructureReady?"Prefab Runtime Ready":t.label,document:e,selection:{targetIds:[i.id],activeId:i.id,scopeType:"prefab-stage",targetKind:"prefab",document:e},sections:[{id:"prefab-stage",title:"Prefab Stage",summary:n.importStructureReady?"Runtime Ready":"Preview",persistence:"document",properties:[ml({path:"displayName",label:"Display Name",valueType:"string",control:"string",value:i.displayName??i.id,order:0},o),le({path:"prefab.sourceAssetId",label:"Source Asset",value:s?.displayName??t.sourceAssetId??"Missing",order:1}),ml({path:"prefab.defaults.active",label:"Default Active",valueType:"boolean",control:"boolean",value:i.prefab?.defaults?.active??!0,order:2},o),...dR(i,3,o),le({path:"prefab.selectedItem",label:"Selected Item",value:r??"Preview Root",order:90})].filter(f=>!!f)},...h?[h]:[],...g?[g]:[],...l?[l]:[],...u?[u]:[]]}}function $U(e,t,r,n={},o){return FU(e,t,r,n,o,uR.createEditorScenePrefabMaterialOverrideInspectorSectionWithCachedUsage)}var BU={createEditorScenePrefabStageInspectorObjectWithCachedMaterialUsage:$U},pR=BU;function zU(e,t){let r=VU(t),n=t.parentId?Bs(e,t.parentId):null,o=[],a=0;for(let i of["position","rotation","scale"])for(let s of["x","y","z"]){let c=r[i][s];o.push({path:`transform.${i}.${s}`,label:`${UU(i)}.${s}`,valueType:"number",control:"number",value:i==="rotation"?HU(c):c,readOnly:!1,persistence:"document",commitMode:"live",order:a,step:i==="rotation"?1:.1,validate:d=>typeof d=="number"&&Number.isFinite(d)?{ok:!0,value:d}:{ok:!1,message:"Transform value must be a finite number."},coerce:d=>typeof d=="number"?d:Number(d)}),a+=1}return{id:"transform",title:"Transform",summary:`Relative to: ${n?.name??n?.id??"Prefab"}`,order:20,placement:"body",persistence:"document",collapsedByDefault:!1,properties:o}}function VU(e){return e.transform?.type==="Transform"&&e.transform.mode!=="matrix"?{...e.transform,mode:e.transform.mode??"trs",scale:e.transform.scale??{x:1,y:1,z:1}}:{type:"Transform",mode:"trs",position:{x:0,y:0,z:0},rotation:{x:0,y:0,z:0},scale:{x:1,y:1,z:1}}}function UU(e){return e==="position"?"Position":e==="rotation"?"Rotation":"Scale"}function HU(e){return Math.round(e*180/Math.PI*1e6)/1e6}function KU(e,t,r){let n=t.marker,o=n.target??null,a=o?mR(o):"",i=[{label:"Unbound",value:""},...un(e).filter(c=>c.id!==t.id).map(c=>{let d=c.kind==="marker"?"marker":"scene-object";return{label:c.name??c.id,value:mR({kind:d,id:c.id})}})];o&&a&&!i.some(c=>c.value===a)&&i.push({label:`Missing: ${o.id}`,value:a});let s=r.markerTypeCatalog.map(c=>({label:c.label||c.type,value:c.type}));return s.some(c=>c.value===n.type)||s.push({label:`Missing: ${n.type}`,value:n.type}),{id:"prefab-marker",title:"Marker",summary:r.markerTypeCatalog.find(c=>c.type===n.type)?.label??n.type,order:35,placement:"body",persistence:"document",collapsedByDefault:!1,properties:[pl({path:"prefab.marker.type",label:"Marker Type",valueType:"enum",control:"enum",value:n.type,options:s,order:0,validate:c=>typeof c=="string"&&r.markerTypeCatalog.some(d=>d.type===c)}),le({path:"prefab.marker.kind",label:"Semantic Kind",value:n.kind??"point",order:1,source:"Derived"}),le({path:"prefab.marker.geometry",label:"Geometry",value:n.geometry.kind,order:2,source:"Derived"}),pl({path:"prefab.marker.target",label:"Target",valueType:"enum",control:"enum",value:a,options:i,order:3,validate:c=>typeof c=="string"&&i.some(d=>d.value===c)}),le({path:"prefab.marker.targetStatus",label:"Target Status",value:o?i.some(c=>c.value===a&&!c.label.startsWith("Missing:"))?"Resolved":"Unresolved local reference":"Unbound",order:4,source:"Derived"}),pl({path:"prefab.marker.tags",label:"Tags",valueType:"string",control:"string",value:n.tags?.join(", ")??"",order:5,validate:c=>typeof c=="string"}),pl({path:"prefab.marker.note",label:"Note",valueType:"string",control:"string",value:n.note??"",order:6,validate:c=>typeof c=="string"}),pl({path:"prefab.marker.color",label:"Color",valueType:"color",control:"color",value:n.color??{r:.1,g:.85,b:1},order:7,validate:WU})].filter(c=>!!c)}}function pl(e){return{path:e.path,label:e.label,valueType:e.valueType,control:e.control,value:e.value,readOnly:!1,persistence:"document",commitMode:e.control==="string"?"blur":"immediate",order:e.order,...e.options?{options:e.options}:{},validate:t=>e.validate(t)?{ok:!0,value:t}:{ok:!1,message:`Invalid Prefab Marker field: ${e.path}.`}}}function mR(e){return`${e.kind}:${encodeURIComponent(e.id)}`}function WU(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let t=e;return["r","g","b"].every(r=>typeof t[r]=="number"&&Number.isFinite(t[r])&&t[r]>=0&&t[r]<=1)}function fR(e,t){let r=yi(e,t.id);if(!r.prefab)return null;let n=r.diagnostics.filter(m=>m.severity==="error").length,o=r.diagnostics.filter(m=>m.severity==="warning").length,a=r.diagnostics.filter(m=>m.severity==="info").length,i=r.diagnostics.length>0,s=n>0?"unsupported":i?"derived":"active",c=n>0?"Prefab relation is incomplete; fix the missing definition or source asset before using prefab actions.":void 0,d=r.definition?.displayName??r.definition?.id??r.prefab.prefabId,u=r.sourceAsset?.displayName??r.sourceAsset?.id??r.prefab.sourceAssetId??"Missing",l=[le({path:"prefab.relation.definition",label:"Prefab Definition",value:d,order:0,source:"Document",effect:s}),le({path:"prefab.relation.source",label:"Source Model",value:u,order:1,source:r.sourceAsset?"Asset":"Document",effect:s,disabledReason:c})].filter(m=>!!m);return i&&l.push(le({path:"prefab.relation.diagnostics",label:"Diagnostics",value:r.diagnostics.map(m=>`${m.severity}:${m.code} - ${m.message}`).join(`
|
|
7
|
+
`),order:2,source:"Derived",effect:s,disabledReason:c})),l.push(gS({path:"prefab.actions.editDefinition",label:"Edit Prefab",actionId:"prefab.edit-definition",order:10,icon:"prefab",tooltip:"Open the prefab definition stage.",params:{assetId:r.definition?.id??r.prefab.prefabId,browserAssetId:r.definition?`prefab:${r.definition.id}`:void 0},disabled:!r.definition,disabledReason:c,effect:s})),l.push(gS({path:"prefab.actions.selectDefinition",label:"Select Prefab",actionId:"prefab.select-definition",order:11,icon:"prefab",tooltip:"Select the prefab asset in the asset browser.",params:{assetId:r.definition?.id??r.prefab.prefabId,browserAssetId:r.definition?`prefab:${r.definition.id}`:void 0},disabled:!r.definition,disabledReason:c,effect:s})),l.push(gS({path:"prefab.actions.pingSource",label:"Ping Source",actionId:"prefab.ping-source",order:12,icon:"asset",tooltip:"Select the prefab source asset in the asset browser.",params:{assetId:r.sourceAsset?.id??r.prefab.sourceAssetId},disabled:!r.sourceAsset,disabledReason:c,effect:s})),{id:"prefab-instance",title:"Prefab",order:48,placement:"body",summary:n>0?`${n} ${n===1?"error":"errors"}`:o>0?"Warning":a>0?"Info":"Ready",persistence:"readonly",effect:s,disabledReason:c,collapsedByDefault:!1,properties:l}}function gS(e){let t=Object.fromEntries(Object.entries(e.params).filter(r=>typeof r[1]=="string"&&r[1].length>0));return{path:e.path,label:e.label,valueType:"string",control:"custom",customControl:"inspector-action-button",controlOptions:{actionId:e.actionId,label:e.label,icon:e.icon,params:t,...e.disabled?{disabled:!0}:{},...e.disabledReason?{disabledReason:e.disabledReason}:{}},value:e.actionId,readOnly:!1,persistence:"readonly",commitMode:"immediate",order:e.order,tooltip:e.disabledReason??e.tooltip,effect:e.effect,disabledReason:e.disabled?e.disabledReason:void 0}}function gR(e){return e==="cube"||e==="sphere"||e==="plane"||e==="capsule"?e:null}function lt(e){return!!e?.marker}function hS(e){return e.kind==="point"&&e.coordinateSpace!=="world"||e.kind==="object-bounds"}function $i(e){for(let t of e.components){if(t.type!=="Transform")continue;let r=t.scale;return YU(r)?it(r):ht(1,1,1)}return ht(1,1,1)}function Zn(e,t){let r=Sr(e,t);return r&&ln(r)?r:null}function bS(e,t,r){let n=Co(e,t??void 0,r);return n&&ln(n)?n:null}function hR(e,t){let r=Zn(e,t.id);return r?{origin:it(r.position),right:lc(ht(1,0,0),r.rotation),up:lc(ht(0,1,0),r.rotation),forward:lc(ht(0,0,1),r.rotation),label:t.name??t.id}:null}function bR(e,t){let r=IS(t);if(r?.kind!=="scene-object")return null;let n=e.scene.gameObjects.find(a=>a.id===r.id)??null,o=Zn(e,r.id);return!n||!o?null:{origin:it(o.position),right:lc(ht(1,0,0),o.rotation),up:lc(ht(0,1,0),o.rotation),forward:lc(ht(0,0,1),o.rotation),label:r.label||n.name||r.id}}function No(e,t,r,n={}){let o=t.trim(),a=o?Ns(XU(e),n).find(i=>i.type===o)?.kind:void 0;return Up(a??r??(o?void 0:"point"))}function Up(e){let t=e?.trim();return t?t==="object-bound"||t==="object-bounds"?"object":t:"point"}function yR(e,t){return yS(t)?"box":SS(t)&&IS(e)?"object-bounds":"point"}function Hp(e,t,r,n,o={}){let a=Zn(e,t.id),i=it(a?.position??ht(0,0,0)),s=it(a?.rotation??ht(0,0,0)),c=qU(e,t,r,o)?uc(r):it(a?.scale??$i(t));if(yS(r))return{kind:"box",coordinateSpace:"world",center:i,size:qp(c),rotation:s};let d=IS(t.marker);return SS(r)&&d?{kind:"object-bounds",target:d}:n?.kind==="point"?structuredClone(n):{kind:"point",coordinateSpace:"world",position:i,...d?{target:d}:{}}}function SR(e,t,r,n,o){if(o)return SS(n)||r.kind==="object-bounds"?{kind:"object-bounds",target:structuredClone(o)}:r.kind==="point"?{...structuredClone(r),target:structuredClone(o)}:structuredClone(r);if(r.kind==="object-bounds"){let a=Zn(e,t.id);return{kind:"point",coordinateSpace:"world",position:it(a?.position??ht(0,0,0))}}if(r.kind==="point"){let a=structuredClone(r);return delete a.target,a}return structuredClone(r)}function IR(e,t){let r=e.scene.gameObjects.find(n=>n.id===t)??null;return!r||lt(r)?null:{kind:"scene-object",id:r.id,label:r.name||r.id}}function qU(e,t,r,n={}){let o=No(e,t.marker.type,t.marker.kind,n);if(o===r)return!1;let a=Zn(e,t.id)?.scale??$i(t);return TR(a,uc(o))}function ER(e,t,r,n={}){if(!lt(t))return!1;let o=No(e,t.marker.type,t.marker.kind,n),a=Up(r.kind);if(o===a&&t.marker.geometry.kind===r.geometry.kind)return!1;let i=Zn(e,t.id)?.scale??$i(t);return TR(i,uc(o))}function uc(e){return yS(e)?ht(4,1,4):ht(.5,.5,.5)}function yS(e){return Up(e)==="region"}function SS(e){return Up(e)==="object"}function IS(e){return e.target?structuredClone(e.target):e.geometry.kind==="point"&&e.geometry.target||e.geometry.kind==="object-bounds"?structuredClone(e.geometry.target):null}function TR(e,t){return Math.abs(e.x-t.x)<1e-6&&Math.abs(e.y-t.y)<1e-6&&Math.abs(e.z-t.z)<1e-6}function AR(e){switch(e.kind){case"box":return{kind:"box"};case"point":return{kind:"point",coordinateSpace:e.coordinateSpace,...e.coordinateSpace==="local"?{position:it(e.position)}:{},...e.target?{target:structuredClone(e.target)}:{}};case"object-bounds":return{kind:"object-bounds",target:structuredClone(e.target)};case"polyhedron":return{kind:"polyhedron",coordinateSpace:e.coordinateSpace,vertices:e.vertices.map(it),...e.faces?{faces:e.faces.map(t=>[...t])}:{}}}}function Kp(e){switch(e.kind){case"box":return it(e.center);case"point":return e.coordinateSpace==="world"?it(e.position):ht(0,0,0);case"polyhedron":return JU(e.vertices);case"object-bounds":return ht(0,0,0)}}function Wp(e){return e.kind==="box"&&e.rotation?it(e.rotation):ht(0,0,0)}function ES(e,t){return e.kind==="box"?qp(e.size):it(t)}function qp(e){return{x:Math.max(1e-6,Math.abs(e.x)),y:Math.max(1e-6,Math.abs(e.y)),z:Math.max(1e-6,Math.abs(e.z))}}function Yp(e){return e.trim().replace(/[^a-zA-Z0-9_-]+/g,"-").replace(/^-+|-+$/g,"")}function it(e){return{x:e.x,y:e.y,z:e.z}}function YU(e){if(!e||typeof e!="object")return!1;let t=e;return typeof t.x=="number"&&typeof t.y=="number"&&typeof t.z=="number"}function ht(e,t,r){return{x:e,y:t,z:r}}function PR(e,t){return{x:e.x+t.x,y:e.y+t.y,z:e.z+t.z}}function lc(e,t){let r=Math.cos(t.x),n=Math.sin(t.x),o=Math.cos(t.y),a=Math.sin(t.y),i=Math.cos(t.z),s=Math.sin(t.z),c={x:e.x,y:e.y*r-e.z*n,z:e.y*n+e.z*r},d={x:c.x*o+c.z*a,y:c.y,z:-c.x*a+c.z*o};return{x:d.x*i-d.y*s,y:d.x*s+d.y*i,z:d.z}}function JU(e){if(e.length===0)return ht(0,0,0);let t={x:Math.min(...e.map(n=>n.x)),y:Math.min(...e.map(n=>n.y)),z:Math.min(...e.map(n=>n.z))},r={x:Math.max(...e.map(n=>n.x)),y:Math.max(...e.map(n=>n.y)),z:Math.max(...e.map(n=>n.z))};return{x:(t.x+r.x)/2,y:(t.y+r.y)/2,z:(t.z+r.z)/2}}function XU(e){return e.scene.markerGraph??null}function Jp(e,t={}){let r=oH(e,t);if(r!==e)return Jp(r,t);let n=QU(e);if(n!==e)return Jp(n,t);let o=Xp(e);if(!o)return e;let a=Mo(o),i=ZU(e,a);return Ed(o,i)?e:Yh(e,i)}function QU(e){let t=Xp(e),r=t?Mo(t):null;if(!r||r.markers.length===0)return e;let n=new Set(e.scene.gameObjects.map(c=>c.id)),o=new Map,a=[];for(let c of r.markers){if(e.scene.gameObjects.some(u=>u.id===c.id&<(u))){o.set(c.id,c.id);continue}let d=n.has(c.id)?dH(c.id,n):c.id;n.add(d),o.set(c.id,d),a.push({marker:c,gameObjectId:d})}let i=a.map(c=>MR(e,iP(c.marker,o),c.gameObjectId,null)),s=Mo({...r,markers:[],relations:r.relations.map(c=>aP(c,o))});return{...e,scene:{...e.scene,gameObjects:[...e.scene.gameObjects,...i],markerGraph:s}}}function ZU(e,t){let r=new Set(e.scene.gameObjects.map(i=>i.id)),n=t.markers.filter(i=>eH(i,r)),o=new Set([...n.map(i=>i.id),...e.scene.gameObjects.filter(lt).map(i=>i.id)]),a=t.relations.filter(i=>qh(i.from,r,o)&&qh(i.to,r,o));return{...t,markers:n,relations:a}}function eH(e,t){if(!Id(e.target,t))return!1;switch(e.geometry.kind){case"object-bounds":return Id(e.geometry.target,t);case"point":return Id(e.geometry.target,t);case"box":case"polyhedron":return!0}}function xR(e,t,r={}){switch(t.type){case"marker.create-box":return tH(e,t.marker,t.parentId??null);case"marker.update":return rH(e,t.markerId,t.patch,r);case"marker.delete":return nH(e,t.markerId);default:return null}}function tH(e,t,r){if(e.scene.gameObjects.some(i=>i.id===t.id))return null;let n=Mo(Xp(e)),o=MR(e,t,t.id,r),a={...e,scene:{...e.scene,gameObjects:[...e.scene.gameObjects,o]}};return Yh(a,{...n,markers:n.markers.filter(i=>i.id!==t.id)})}function rH(e,t,r,n={}){let o=e.scene.gameObjects.find(d=>d.id===t)??null;if(!lt(o))return null;let a=Ea(e,o,n),i=xo({...a,...r,id:a.id,geometry:r.geometry??a.geometry}),s=Mo(void 0);if(Ed({...s,markers:[a]},{...s,markers:[i]}))return e;let c=DR(e,o,i,n);return{...e,scene:{...e.scene,gameObjects:e.scene.gameObjects.map(d=>d.id===t?c:d)}}}function nH(e,t){let r=e.scene.gameObjects.find(a=>a.id===t)??null;if(!lt(r))return null;let n=sP(e,t),o=Mo(Xp(e));return{...e,scene:{...e.scene,gameObjects:e.scene.gameObjects.filter(a=>!n.has(a.id)),markerGraph:{...o,markers:[],relations:o.relations.filter(a=>!Wh(a.from,n)&&!Wh(a.to,n))}}}}function oH(e,t={}){let r=!1,n=e.scene.gameObjects.map(o=>{if(!lt(o))return o;let a=aH(e,o,t);return a!==o&&(r=!0),a});return r?{...e,scene:{...e.scene,gameObjects:n}}:e}function aH(e,t,r={}){return sH(e,t,r)}function MR(e,t,r,n){let o=uc(t.kind),a={position:Kp(t.geometry),rotation:Wp(t.geometry),scale:ES(t.geometry,o)},i=n?bS(e,n,a)??a:a;return{id:r,name:t.label||t.id,kind:"transform",...n?{parentId:n}:{},active:!0,marker:RR(t),components:[{type:"Transform",...i}]}}function DR(e,t,r,n={}){let o=Zn(e,t.id)?.scale??$i(t),a=ER(e,t,r,n)?uc(r.kind):o;return{...t,name:r.label||t.name||r.id,kind:"transform",marker:RR(r),components:iH(e,t,t.components,r.geometry,a)}}function iH(e,t,r,n,o){let a=o??$i(t),i=Zn(e,t.id),s={position:hS(n)?it(i?.position??Kp(n)):Kp(n),rotation:hS(n)?it(i?.rotation??Wp(n)):Wp(n),scale:ES(n,a)},c=bS(e,t.parentId,s)??s,d=!1,u=r.map(l=>l.type!=="Transform"?l:(d=!0,{...l,position:c.position,rotation:c.rotation,scale:c.scale}));return d?u:[...u,{type:"Transform",position:c.position,rotation:c.rotation,scale:c.scale}]}function sH(e,t,r={}){if(t.marker.geometry.kind==="polyhedron")return t;let n=No(e,t.marker.type,t.marker.kind,r),o=yR(t.marker,n);if((t.marker.kind??"point")===n&&t.marker.geometry.kind===o)return t;let a=Ea(e,t,r),i=xo({...a,kind:n,markerType:t.marker.type.trim(),geometry:Hp(e,t,n,a.geometry,r)});return DR(e,t,i,r)}function OR(e,t={}){return e.scene.gameObjects.filter(lt).map(r=>Ea(e,r,t))}function Ea(e,t,r={}){let n=t.marker,o=n.metadata?structuredClone(n.metadata):{},i=(n.geometry.kind==="object-bounds"?bR(e,n):null)??(n.semanticFrame?structuredClone(n.semanticFrame):hR(e,t));return n.color&&(o.color={...n.color}),n.note!==void 0&&(o.note=n.note),{id:t.id,kind:No(e,n.type,n.kind,r),markerType:n.type,label:t.name??t.id,geometry:cH(e,t),...n.target?{target:structuredClone(n.target)}:{},...i?{semanticFrame:i}:{},...n.tags?.length?{tags:[...n.tags]}:{},...Object.keys(o).length>0?{metadata:o}:{}}}function cH(e,t){let r=t.marker,n=Zn(e,t.id),o=n?.position??ht(0,0,0),a=n?.rotation??ht(0,0,0),i=n?.scale??$i(t);switch(r.geometry.kind){case"box":return{kind:"box",coordinateSpace:"world",center:it(o),size:qp(i),rotation:it(a)};case"point":return(r.geometry.coordinateSpace??"world")==="world"?{kind:"point",coordinateSpace:"world",position:r.geometry.offset?PR(o,r.geometry.offset):it(o),...r.geometry.target?{target:structuredClone(r.geometry.target)}:{}}:{kind:"point",coordinateSpace:"local",position:r.geometry.position?it(r.geometry.position):it(o),...r.geometry.target?{target:structuredClone(r.geometry.target)}:{}};case"object-bounds":return{kind:"object-bounds",target:structuredClone(r.geometry.target)};case"polyhedron":return{kind:"polyhedron",coordinateSpace:r.geometry.coordinateSpace??"world",vertices:r.geometry.vertices.map(it),...r.geometry.faces?{faces:r.geometry.faces.map(s=>[...s])}:{}}}}function RR(e){let t=e.metadata?structuredClone(e.metadata):{},r=lH(t.color),n=typeof t.note=="string",o=n?t.note:void 0;return r&&delete t.color,n&&delete t.note,{schemaVersion:1,type:e.markerType,...e.kind?{kind:e.kind}:{},...e.tags?.length?{tags:[...e.tags]}:{},...o!==void 0?{note:o}:{},...r?{color:r}:{},...e.target?{target:structuredClone(e.target)}:{},...e.semanticFrame?{semanticFrame:structuredClone(e.semanticFrame)}:{},geometry:AR(e.geometry),...Object.keys(t).length>0?{metadata:t}:{}}}function dH(e,t){let r=Yp(e)||"marker",n=1,o=`${r}-marker`;for(;t.has(o);)n+=1,o=`${r}-marker-${n}`;return o}function lH(e){if(!e||typeof e!="object")return null;let t=e,r=TS(t.r),n=TS(t.g),o=TS(t.b);return r==null||n==null||o==null?null:{r,g:n,b:o}}function TS(e){return typeof e!="number"||!Number.isFinite(e)?null:e>=0&&e<=1?e:null}function Xp(e){return e.scene.markerGraph??null}function wR(e){let t=n=>e.getMarkerTypeCatalogFromGraph(CR(n)),r=n=>{let o=Mo(CR(n)),a=new Map;for(let i of o.markers)a.set(i.id,i);for(let i of OR(n,e.options))a.set(i.id,i);return{...o,markers:[...a.values()]}};return{getMarkerGraph:r,getMarkerTypeCatalog:t,createMarkerGraphPatch(n,o){let a=dP(n,o,{sanitizeMarkerGameObjectId:Yp});return lP(n,a,r(n),{builtInMarkerTypes:e.options.builtInMarkerTypes,isMarkerGameObject:i=>lt(i)})?{patch:e.createPatch(pP(a)),label:uP(a),...mP(a)}:null},createMarkerTypeUpdateCommand(n,o,a){let i=n.scene.gameObjects.find(m=>m.id===o)??null;if(!lt(i))return null;let s=a.trim(),c=s?t(n).find(m=>m.type===s)??null:null;if(s&&!c)return null;let d=No(n,s,i.marker.kind,e.options),u=Ea(n,i,e.options),l=Hp(n,i,d,u.geometry,e.options);return{type:"marker.update",markerId:o,patch:{markerType:s,kind:d,geometry:l}}},createMarkerTargetUpdateCommand(n,o,a){let i=n.scene.gameObjects.find(m=>m.id===o)??null;if(!lt(i))return null;let s=a.trim(),c=s?IR(n,s):null;if(s&&!c)return null;let d=Ea(n,i,e.options),u=No(n,i.marker.type,i.marker.kind,e.options),l=SR(n,i,d.geometry,u,c);return{type:"marker.update",markerId:o,patch:{target:c??void 0,geometry:l}}},resolveMarkerKind(n,o,a){return No(n,o,a,e.options)},reduceMarkerGraphPatch(n,o){let a=xR(n,o,e.options);if(a)return a;let i=r(n),s=cP(i,o,e.options);return Ed(i,s)?n:{...n,scene:{...n.scene,markerGraph:s}}},syncMarkerGraphDocument(n){return Jp(n,e.options)}}}function CR(e){return e?.scene.markerGraph}function vR(e,t=[]){return e.scene.gameObjects.flatMap(r=>{let n=r.prefab?.prefabId?or(e,r.prefab.prefabId):null;return n?kR(e,n,r,r.id,t):[]})}function _R(e,t,r,n=[]){let o=or(e,t);if(!o)return[];let a={id:r,name:o.displayName??o.id,kind:"group",components:[Qp()]};return kR(e,o,a,r,n)}function kR(e,t,r,n,o){let a=[],i=[];jR(e,t,{instanceId:r.id,parentId:r.parentId,rootTransform:ie(r)??Qp(),isHostRoot:!0,visitedPrefabIds:new Set,derivedObjects:a,markerDescriptors:i});let s=new Set([r.id,...a.map(d=>d.id)]);for(let d of a)d.marker&&(d.marker.target&&s.add(d.marker.target.id),d.marker.geometry.kind==="point"&&d.marker.geometry.target&&s.add(d.marker.geometry.target.id),d.marker.geometry.kind==="object-bounds"&&s.add(d.marker.geometry.target.id));let c={...e,scene:{...e.scene,gameObjects:[...e.scene.gameObjects.filter(d=>!s.has(d.id)),r,...a]}};return i.flatMap(d=>{let u=c.scene.gameObjects.find(l=>l.id===d.runtimeId);return u?.marker?[{ownerInstanceId:n,prefabAssetId:d.prefabAssetId,localNodeId:d.localNodeId,marker:Ea(c,u,{builtInMarkerTypes:o})}]:[]})}function jR(e,t,r){if(r.visitedPrefabIds.has(t.id))return;let n=un(t),o=yr(t),a=o?n.find(d=>d.id===o):null;if(!a)return;let i=new Set(r.visitedPrefabIds).add(t.id),s={instanceId:r.instanceId,rootNodeId:a.id},c=d=>zs(s,d.id);for(let d of n){let u=c(d),l=d.id===a.id,m=d.parentId?n.find(g=>g.id===d.parentId):null,p=l?r.parentId:c(m??a);if(d.kind==="prefabInstance"&&d.childPrefabId){let g=or(e,d.childPrefabId);g&&jR(e,g,{instanceId:u,...p?{parentId:p}:{},rootTransform:l?r.rootTransform:d.transform??Qp(),isHostRoot:r.isHostRoot&&l,visitedPrefabIds:i,derivedObjects:r.derivedObjects,markerDescriptors:r.markerDescriptors});continue}if(r.isHostRoot&&l)continue;let h=d.kind==="marker"&&d.marker?wd({...structuredClone(d.marker),semanticFrame:void 0},s):void 0;r.derivedObjects.push({id:u,name:d.name??d.id,kind:d.kind==="marker"?"transform":"group",...p?{parentId:p}:{},...h?{marker:h}:{},components:[l?r.rootTransform:d.transform??Qp()]}),h&&r.markerDescriptors.push({prefabAssetId:t.id,localNodeId:d.id,runtimeId:u})}}function Qp(){return{type:"Transform",position:{x:0,y:0,z:0},rotation:{x:0,y:0,z:0},scale:{x:1,y:1,z:1}}}function uH(e){return e?e.list().filter(t=>fr(t.shaderId)==null).map(t=>{let r=t.inspector.sections.length,n=t.inspector.fields.length;return{id:`shader:${t.shaderId}`,assetId:t.shaderId,label:t.displayName,kind:"shader",placeable:!1,meta:`${t.shaderId} \xB7 v${t.version} \xB7 ${n} fields`,shader:{shaderId:t.shaderId,displayName:t.displayName,version:t.version,runtimeKind:t.runtimeKind,sectionCount:r,fieldCount:n,...t.sourceFile?{sourceFile:t.sourceFile}:{}}}}):[]}function NR(e){let t=ZD(e.objectCommandServices);return{getHierarchyItems:e.hierarchyFacade.getHierarchyItems,normalizeHierarchyDocument:e.hierarchyFacade.normalizeHierarchyDocument,createRenamePatch:e.hierarchyFacade.createRenamePatch,createCreateGroupPatch:e.hierarchyFacade.createCreateGroupPatch,createCreatePrimitivePatch:e.hierarchyFacade.createCreatePrimitivePatch,createDeleteSubtreePatch:e.hierarchyFacade.createDeleteSubtreePatch,collectSubtreeIdList:e.hierarchyFacade.collectSubtreeIdList,validateReparent:e.hierarchyFacade.validateReparent,createReparentPatch:e.hierarchyFacade.createReparentPatch,validateHierarchyMove:e.hierarchyFacade.validateHierarchyMove,createHierarchyMovePatch:e.hierarchyFacade.createHierarchyMovePatch,validateGroupSelection:e.hierarchyFacade.validateGroupSelection,createGroupSelectionPatch:e.hierarchyFacade.createGroupSelectionPatch,createDuplicateSelectionPatch:e.hierarchyFacade.createDuplicateSelectionPatch,createPlacedAssetPatch:e.hierarchyFacade.createPlacedAssetPatch,applySerializedPropertyPatch:t.applySerializedPropertyPatch,canCreateSerializedMultiPropertyPatch:t.canCreateSerializedMultiPropertyPatch,createSerializedMultiPropertyPatch:t.createSerializedMultiPropertyPatch,createBrowserAssetItems(r,n={}){let o=rr.getCachedUsageIndex(r);return[...rr.createBrowserAssetItems(r,o,n),...uH(n.materialShaderDefinitions),...qO(r,n.assetLibraryItems)]},addAssetLibraryItemToDocument(r,n,o){let a=qd(r,n,o,e.assetPlacementServices);return{document:a.document,gameObject:a.gameObject}}}}function mH(e,t){if(!e.scene||typeof e.scene!="object"||Array.isArray(e.scene))return null;let r=e.scene;if(r.kind!==e.id)return null;let n=$R(r.contribution);return n?AS(n):t?KO(e,t):null}function LR(e){let t=(e.features??[]).flatMap(E=>{let S=e.resolveFeatureSceneContribution?.(E);if(S)return[AS(S)];let w=mH(E,()=>d);if(w)return[w];let M=$R(E.scene);return M?[AS(M)]:[]}),r=t.every(E=>E.documentReducerImmutability==="preserves-input")?"immutable-reference":"defensive-clone",n=GH(t),o=wR({options:{builtInMarkerTypes:e.markerTypes},createPatch:e.createPatch.markerGraph,getMarkerTypeCatalogFromGraph:E=>vH(e.markerTypes,E)}),a=(E,S)=>S?he(E,S):null,i=()=>[E=>n?.validateInspectorField?.({document:E.document??null,gameObject:E.document?a(E.document,E.targetId):null,path:E.path,value:E.value})??null,E=>wH(e.resolveFieldSchema?.(E.path,E.nodeKind)??null,E.path,E.value),Rb({hasMaterialAsset:Hn,isMarkerGameObject:lt,isDirectionalLightAnglePath:Ws})],s=(E,S)=>n?.normalizeInspectorValue?.(E,S)??Gm(E,S,{isDirectionalLightAnglePath:Ws}),c=(E,S,w,M)=>{if(Ws(w)&&S.light?.type!=="directional")return{ok:!1,message:`Unsupported scene node field: ${w}.`};let _=n?.validateInspectorField?.({document:E,gameObject:S,path:w,value:M});return _||qs({document:E,path:w,nodeKind:fl(S),value:M,extraValidators:i()})},d=(E,S,w)=>Gd({document:E,nodeKind:S,property:w,extraValidators:i()}),l={systemDefaults:xH(e.clearFeatureStateFromSystemObject),normalizeFieldValue:s,validateField:c,normalizePrimitiveShape:gR,findGameObject:a,isCameraGameObject:gn,isLightGameObject:Ys,isProtectedSystemGameObject:hn,hasCamera:(E,S)=>E.scene.gameObjects.some(w=>w.id!==S&&gn(w)),...n?.fieldMutation},m=DH(e,o,l,a,s,c,n),p=(E,S,w,M)=>gp(E,S,w,M,m),h=(E,S,w,M)=>XD(E,S,w,M,m),g=(E,S)=>xy(E,S,m.fieldMutationOptions),f=(E,S,w)=>Di(E,S,{transform:w}),y=MH(e,o,l,p,h,n),A=OH(o),T={isRootTransformPath:Km,validateSerializedPropertyField:E=>c(E.document,E.gameObject,E.path,E.value),findGameObject:a,isCameraGameObject:gn,isLightGameObject:Ys,isSerializedMultiFieldPath:E=>kH(E,n),isSerializedMultiProjectionPath:E=>jH(E,n),getSerializedMultiPropertyProbeValue:E=>NH(E,n),canPatchCustomSerializedMultiField:E=>n?.canPatchSerializedMultiField?.(E)??!0,createInspectorPropertyPatch:E=>oc(E,m),createFieldBatchPatch:e.createPatch.gameObjectFieldBatch},D=NR({hierarchyFacade:A,objectCommandServices:T,assetPlacementServices:{createGameObjectGuid:kt,resolveLocalTransform:({document:E,parentId:S,worldTransform:w})=>Co(E,S??void 0,w)}}),P={findGameObject:a,hasModelRenderer:E=>!!E.components?.some(S=>S.type==="ModelRenderer"),hasImageRenderer:E=>!!E.components?.some(S=>S.type==="ImageRenderer"),readNodeKind:fl},C={};return Object.assign(C,{historyDocumentStorage:r,defaults:{camera:dp,sunLight:Zd,environmentLight:Ni},reduceDocument:(E,S)=>By(E,S,y),ensureEnvironmentDefaults:E=>$y(E,y),isSelectableHierarchyId:(E,S)=>$b(E,S),resolveDiagnosticLocator:(E,S)=>{let w=S.locator;if(!w?.objectId||!w.materialSlotId)return w??null;let M=a(E,w.objectId);if(!M)return w;let _=Ro(E,M).find(B=>B.slotId===w.materialSlotId);return _?{...w,rowId:M.id,regionId:gP,sectionId:"artistMaterialSlots",path:`overrides.materialSlotBindings.${_.slotId}.materialAssetId`}:w},getHierarchyItems:D.getHierarchyItems,normalizeHierarchyDocument:D.normalizeHierarchyDocument,createRenamePatch:D.createRenamePatch,createCreateGroupPatch:D.createCreateGroupPatch,createCreatePrimitivePatch:D.createCreatePrimitivePatch,createDeleteSubtreePatch:D.createDeleteSubtreePatch,createReparentPatch:D.createReparentPatch,createHierarchyMovePatch:D.createHierarchyMovePatch,createGroupSelectionPatch:D.createGroupSelectionPatch,createDuplicateSelectionPatch:D.createDuplicateSelectionPatch,createPlacedAssetPatch:D.createPlacedAssetPatch,validateReparent:D.validateReparent,validateHierarchyMove:D.validateHierarchyMove,validateGroupSelection:D.validateGroupSelection,collectSubtreeIds:_o,createFeatureHierarchyPatch:(E,S)=>n?.createHierarchyPatch?.(E,S)??null,createInspectorPropertyPatch:E=>gH(m,E),createSceneMaterialBindingPatch:E=>fH(e,m,E),createPrefabMaterialBindingPatch:E=>hH(e,E),createMaterialPropertiesPatch:E=>PH(e,m,E),createMaterialAssetCreatePatch:E=>SH(e,E),createMaterialAssetDuplicatePatch:E=>IH(e,E),createMaterialAssetDeletePatch:E=>EH(e,E),createMaterialAssetRenamePatch:E=>TH(e,E),createMaterialAssetSetShaderPatch:E=>AH(e,E),patchGameObjectField:p,patchGameObjectsField:h,patchGameObjectPropertiesMany:g,patchGameObjectTransform:f,createSerializedPropertyBatchPatch:E=>pH(e,m,E),canCreateSerializedMultiPropertyPatch:D.canCreateSerializedMultiPropertyPatch,createSerializedMultiPropertyPatch:D.createSerializedMultiPropertyPatch,createBrowserAssetItems:D.createBrowserAssetItems,addAssetLibraryItemToDocument:D.addAssetLibraryItemToDocument,getInspectorObject:(E,S,w={})=>RH(C,e,o,E,S,GR(e.materialShaderDefinitions,w),d,a,i,n),getInspectorMultiObject:(E,S,w,M={})=>CH(E,S,w,M,t,e.getRenderingProfile()),getPrefabStageInspectorObject:(E,S,w,M={})=>pR.createEditorScenePrefabStageInspectorObjectWithCachedMaterialUsage(E,S,w,GR(e.materialShaderDefinitions,M),{createIdentityTransformComponent:AD,mergeLightDefaults:Gi,sunLightId:"sun_light",normalizePrefabAssetFieldValue:cS,validatePrefabAssetFieldValue:dS,markerTypeCatalog:o.getMarkerTypeCatalog(E)}),getRuntimeInspectorSections:E=>Wb({...E,sourceRef:Yn(E.document)},P),createRuntimeInspectorSnapshot:E=>vd({projectedRoot:E.projectedRoot,projectionNode:E.projectionNode??null}),createDocumentInspectorProperty:d,getMarkerGraph:o.getMarkerGraph,getMarkerTypeCatalog:o.getMarkerTypeCatalog,getPrefabInstanceMarkerOverlays:E=>vR(E,o.getMarkerTypeCatalog(E)),getPrefabStageMarkerOverlays:(E,S,w)=>_R(E,S,w,o.getMarkerTypeCatalog(E)),getRelationTypeCatalog:()=>e.relationTypes.map(E=>structuredClone(E)),createMarkerGraphPatch:o.createMarkerGraphPatch,reduceMarkerGraphPatch:o.reduceMarkerGraphPatch,syncMarkerGraphDocument:o.syncMarkerGraphDocument,resolveMarkerKind:o.resolveMarkerKind,assertMaterialAssetIntegrity:rp}),C}function pH(e,t,r){if(r.changes.length<2)return null;let n=new Set,o=[],a=new Set;for(let s of r.changes){let c=`${s.targetId}\0${s.path}`;if(!s.targetId||!s.path||n.has(c))return null;n.add(c);let d=oc({document:r.document,targetId:s.targetId,path:s.path,value:s.value},t),u=d?.patch;if(!d||!u||u.kind!=="game-object.field"||u.targetId!==s.targetId||u.path!==s.path)return null;o.push({targetId:s.targetId,path:s.path,value:u.value});for(let l of d.reprojectIds??[])a.add(l)}let i=[...new Set(o.map(s=>s.targetId))];return{patch:e.createPatch.gameObjectFieldBatch(o),label:`Patch ${o.length} Inspector properties`,changedIds:i,...a.size>0?{reprojectIds:[...a]}:{}}}function fH(e,t,r){if(r.targets.length===0)return null;let n=new Set,o=[];for(let s of r.targets){let c=`${s.objectId}\0${s.path}`;if(n.has(c))return null;n.add(c);let u=oc({document:r.document,targetId:s.objectId,path:s.path,value:r.materialAssetId},t)?.patch;if(!u||u.kind!=="game-object.field"||u.targetId!==s.objectId||u.path!==s.path)return null;o.push({targetId:s.objectId,path:s.path,value:u.value})}let a=[...new Set(o.map(s=>s.targetId))],i=FR(r.document,r.targets,r.materialAssetId);return{patch:e.createPatch.gameObjectFieldBatch(o),label:`${r.materialAssetId?"Set":"Clear"} ${o.length} scene material binding${o.length===1?"":"s"}`,changedIds:a,reprojectIds:a,presentationImpact:i}}function gH(e,t){let r=oc(t,e);if(!r||!da(t.path))return r;let n=r.createdId??(typeof t.value=="string"&&t.value.trim()?t.value.trim():null);return{...r,presentationImpact:FR(t.document,[{objectId:t.targetId,path:t.path}],n)}}function hH(e,t){if(t.targets.length===0||t.materialAssetId&&!Hn(t.document,t.materialAssetId)||new Set(t.targets.map(s=>s.prefabAssetId)).size!==1)return null;let n=t.targets[0].prefabAssetId,o=or(t.document,n);if(!o?.prefab)return null;let a=structuredClone(o),i=new Set;for(let s of t.targets){let c=`${s.nodeId??""}\0${s.path}`;if(i.has(c))return null;i.add(c);let d=`prefab.${s.path}`,u=cS(d,t.materialAssetId);if(!dS(d,u))return null;if(!s.nodeId){a=Rd(a,d,u);continue}let l=a.prefab?.nodes?.findIndex(f=>f.id===s.nodeId)??-1;if(l<0||!a.prefab?.nodes)return null;let m=a.prefab.nodes[l],p={...a,prefab:{...a.prefab,overrides:structuredClone(m.overrides)}},h=Rd(p,d,u),g={...m,...h.prefab?.overrides?{overrides:structuredClone(h.prefab.overrides)}:{}};h.prefab?.overrides||delete g.overrides,a.prefab.nodes=[...a.prefab.nodes],a.prefab.nodes[l]=g}return{patch:e.createPatch.prefabAssetReplace?.(n,a)??{kind:"scene.prefab-asset.replace",assetId:n,prefabAsset:a},label:`${t.materialAssetId?"Set":"Clear"} ${t.targets.length} prefab material binding${t.targets.length===1?"":"s"}`,changedId:n,changedIds:[n],reprojectIds:[n],presentationImpact:bH(t.document,t.targets,t.materialAssetId)}}function FR(e,t,r){let n=new Set(t.map(a=>`${a.objectId}\0${a.path}`)),o=new Set;r&&o.add(r);for(let a of fi(e))a.scope==="scene"&&n.has(`${a.gameObjectId}\0${a.bindingPath}`)&&o.add(a.materialAssetId);return{inspector:["material"],materials:{assetIds:[...o]}}}function bH(e,t,r){let n=new Set;r&&n.add(r);for(let o of t){let a=yH(e,o);a&&n.add(a)}return{inspector:["material"],materials:{assetIds:[...n]}}}function yH(e,t){let r=or(e,t.prefabAssetId)?.prefab,n=t.nodeId?r?.nodes?.find(a=>a.id===t.nodeId)?.overrides:r?.overrides;if(!n)return null;let o=t.path==="overrides.materialBinding.materialAssetId"?n.materialBinding?.materialAssetId:n.materialSlotBindings?.[Vn(t.path,"materialAssetId")??""]?.materialAssetId;return typeof o=="string"&&o.trim()?o.trim():null}function SH(e,t){let r=vM(t.document,t.definition,t.name);return{patch:e.createPatch.materialAssetCreate?.(r)??{kind:"scene.material-asset.create",materialAsset:r},label:`Create material ${r.name}`,changedIds:[],createdId:r.id}}function IH(e,t){let r=Xe(t.document,t.materialAssetId);if(!r)return null;let n=_M(t.document,r);return{patch:e.createPatch.materialAssetCreate?.(n)??{kind:"scene.material-asset.create",materialAsset:n},label:`Duplicate material ${r.name??r.id}`,changedIds:[],createdId:n.id,presentationImpact:{inspector:["material"],materials:{assetIds:[n.id]}}}}function EH(e,t){let r=LM(t.document,t.materialAssetId);return r.ok?{patch:e.createPatch.materialAssetDelete?.(t.materialAssetId)??{kind:"scene.material-asset.delete",materialAssetId:t.materialAssetId},label:`Delete material ${r.materialAsset.name??r.materialAsset.id}`,changedIds:[],presentationImpact:{inspector:["material"],materials:{assetIds:[t.materialAssetId]}}}:null}function TH(e,t){let r=Xe(t.document,t.materialAssetId),n=Fr("name",t.name);return!r||my(r)||typeof n!="string"||!Oo("name",n)?null:{patch:e.createPatch.materialAssetField(t.materialAssetId,"name",n),label:`Rename material ${r.name} to ${n}`,changedIds:Md(t.document,t.materialAssetId),presentationImpact:{inspector:["material"],materials:{assetIds:[t.materialAssetId]}}}}function AH(e,t){let r=Xe(t.document,t.materialAssetId);if(!r||my(r))return null;let n=HM(r,t.definition),o=Md(t.document,t.materialAssetId);return{patch:e.createPatch.materialAssetReplace?.(t.materialAssetId,n.materialAsset)??{kind:"scene.material-asset.replace",materialAssetId:t.materialAssetId,materialAsset:n.materialAsset},label:`Set material ${r.name} shader to ${t.definition.displayName}`,changedIds:o,reprojectIds:o,presentationImpact:{inspector:["material"],materials:{assetIds:[t.materialAssetId]}},preservedPaths:n.preservedPaths,resetPaths:n.resetPaths}}function PH(e,t,r){if(r.changes.length===0||!Xe(r.document,r.materialAssetId))return null;let o=new Set,a=r.document;for(let c of r.changes){if(!c.path.startsWith("properties.")||o.has(c.path))return null;o.add(c.path);let d=`scene.materialAssets.${r.materialAssetId}.${c.path}`,l=oc({document:a,targetId:r.materialAssetId,path:d,value:c.value},t)?.patch;if(!l||l.kind!=="scene.material-asset.field"||l.materialAssetId!==r.materialAssetId||l.path!==c.path)return null;a=uy(a,r.materialAssetId,c.path,l.value,e.materialShaderDefinitions)}let i=Xe(a,r.materialAssetId);if(!i)return null;let s=Md(r.document,r.materialAssetId);return{patch:e.createPatch.materialAssetReplace?.(r.materialAssetId,i)??{kind:"scene.material-asset.replace",materialAssetId:r.materialAssetId,materialAsset:i},label:`Patch material ${r.materialAssetId} properties`,changedIds:s,reprojectIds:s}}function xH(e){let t=r=>n=>{let o=r(n);if(!e)return o;let a=structuredClone(o),i=structuredClone(n),s=e(a,i)??a;return JSON.stringify(s)===JSON.stringify(n)?n:s};return{environmentLightId:"environment_light",sunLightId:"sun_light",horizontalLightAnglePath:"light.directionHorizontalAngleDeg",elevationLightAnglePath:"light.directionElevationAngleDeg",normalizeEnvironmentLightGameObject:r=>t(n=>Dy(n,"hemispheric"))(r),normalizeSunLightGameObject:r=>t(n=>Dy(n,"directional"))(r),normalizeCameraGameObject:t(PD),normalizePlainTransformGameObject:t(xD),createDefaultCameraGameObject:CD,createDefaultEnvironmentLightGameObject:vD,createDefaultSunLightGameObject:wD,mergeCameraDefaults:el,normalizeCameraAfterFieldPatch:MD,hasInvalidCameraRelationships:OD,mergeLightDefaults:Gi}}function MH(e,t,r,n,o,a){return{...r,normalizeRootTransformDocument:Fd,syncMarkerGraphDocument:t.syncMarkerGraphDocument,ensureGameObjectGuids:Gb,normalizeDocumentAfterCommand:(i,s)=>a?.normalizeDocumentAfterCommand?.(i,s)??i,patchMaterialAssetField:(i,s,c,d)=>uy(i,s,c,d,e.materialShaderDefinitions),replaceMaterialAsset:(i,s,c)=>kM(i,s,c),addMaterialAsset:(i,s)=>Zm(i,s),deleteMaterialAsset:(i,s)=>FM(i,s),addMaterialAssetAndBind:(i,s,c,d)=>$M(i,s,c,d),addPrefabAsset:(i,s,c)=>YO(i,s,c),patchPrefabAssetField:(i,s,c,d)=>uS(i,s,c,d),replacePrefabAsset:(i,s,c,d)=>JO(i,s,c,d),addMaterialAssetAndBindPrefabOverride:(i,s,c,d)=>QO(i,s,c,d),patchGameObjectField:n,patchGameObjectsField:o,reduceExtensionPatch:({document:i,patch:s,command:c})=>s.kind==="game-object.property-field-batch"&&Array.isArray(s.fields)?s.fields.reduce((d,u)=>o(d,[u.targetId],u.path,u.value),i):a?.reducePatch?.({document:i,patch:s,command:c})??null,isCustomFieldPatchPath:a?.isInspectorPatchPath,reduceMarkerGraphPatch:(i,s)=>t.reduceMarkerGraphPatch(i,s),isDirectionalLightAnglePath:Ws,validateSerializedPropertyField:i=>r.validateField(i.document,i.gameObject,i.path,i.value),createGameObjectGuid:kt,createUniqueId:Vr,resolveLocalTransform:({document:i,parentId:s,worldTransform:c})=>Co(i,s??void 0,c),resolveRootContainerId:gt,ensureDefaultMaterialAssets:CM,normalizeMaterialBindings:UM}}function DH(e,t,r,n,o,a,i){return{fieldMutationOptions:pp(r),findGameObject:n,normalizeValue:o,validateValue:a,blockFieldPatch:(s,c,d,u)=>fp(s,c,d,u,r),isRootTransformPath:Km,parseDuplicateMaterialAssetValue:Sm,isMaterialBindingPath:da,isMaterialBindingPathAllowed:(s,c)=>da(c)&&(!!e.resolveFieldSchema?.(c,fl(s))||c.startsWith("overrides.materialSlotBindings.")),findMaterialAssetName:(s,c)=>Xe(s,c)?.name??null,parseMaterialAssetFieldPath:xP,normalizeMaterialAssetValue:Fr,hasMaterialAsset:Hn,validateMaterialAssetFieldValue:(s,c,d,u)=>{let l=Xe(s,c);return Oo(d,u,l?.shaderId,e.materialShaderDefinitions)},collectMaterialAssetBindingIds:Md,isMarkerGameObject:lt,createMarkerTargetUpdateCommand:t.createMarkerTargetUpdateCommand,createMarkerTypeUpdateCommand:t.createMarkerTypeUpdateCommand,createMarkerGraphPatch:e.createPatch.markerGraph,isDirectionalLightAnglePath:Ws,createDirectionalLightPatch:e.createPatch.gameObjectField,patchDirectionalLightAngleField:(s,c,d,u)=>zy(s,c,d,u,r),createCustomInspectorPropertyPatch:({document:s,gameObject:c,path:d,value:u})=>i?.createInspectorPropertyPatch?.({document:s,gameObject:c,path:d,value:u,collectChangedIds:()=>_o(s,[c.id])})??null,patchCustomGameObjectField:i?.patchGameObjectField,patchCustomGameObjectsField:i?.patchGameObjectsField,normalizeAfterFieldPatch:(s,c,d,u)=>i?.normalizeAfterFieldPatch?.(s,c,d,u)??s,isProjectionShapePath:_H,isArtistMaterialPatchPath:ym,isCustomProjectionPath:i?.isProjectionPath,collectChangedIdsForFieldPath:(s,c,d)=>d.startsWith("transform.")?_o(s,[c]):[c],createGameObjectFieldPatch:e.createPatch.gameObjectField,createMaterialAssetFieldPatch:e.createPatch.materialAssetField}}function OH(e){return Fy({findGameObject:(t,r)=>r?he(t,r):null,resolveRootContainerId:gt,isProtectedSystemGameObject:hn,isProtectedSystemGameObjectId:kb,decorateHierarchyItem:({item:t,gameObject:r})=>r&<(r)?{...t,role:"marker",icon:"view-overlay",canHaveChildren:!1}:t})}function GR(e,t){return{materialShaderDefinitions:e,...t}}function RH(e,t,r,n,o,a,i,s,c,d){let u=hD(n,o,a);if(u)return u;let l=yy.createEditorSceneMaterialAssetInspectorObjectWithCachedUsage(n,o,a);return l||Jy({document:n,targetId:o,context:a,findGameObject:s,readNodeKind:fl,isMarkerGameObject:lt,createInspectorSections:(m,p,h)=>{let g=fl(p);return Qy({document:m,gameObject:p,context:h,nodeKind:g,isCameraGameObject:gn,isLightGameObject:Ys,isMarkerGameObject:lt,createBaseSections:()=>Ub({document:m,gameObject:p,nodeKind:g,extraValidators:c(),rootTransform:ha,renderingProfile:t.getRenderingProfile(),transformTypeOptions:BR(d?.transformTypeOptions)}),createCustomSections:()=>d?.createInspectorSections?.({document:m,gameObject:p,nodeKind:g,context:h,createDocumentInspectorProperty:i})??[],createCameraSection:()=>wb({nodeKind:g,camera:p.camera,rig:el(p.camera),createDocumentInspectorProperty:i}),createLightSections:()=>Jb({nodeKind:g,gameObject:p,light:Gi(p.light,p.id==="environment_light"?"hemispheric":"directional"),createDocumentInspectorProperty:i,normalizeValue:(f,y)=>d?.normalizeInspectorValue?.(f,y)??Gm(f,y),defaultEnvironmentGroundColor:Ni.groundColor,renderingProfile:t.getRenderingProfile()}),createMarkerSection:()=>lt(p)?nS({document:m,gameObject:p,nodeKind:g,markerTypeCatalog:r.getMarkerTypeCatalog(m),resolveMarkerKind:(f,y)=>r.resolveMarkerKind(m,y.type,y.kind),isMarkerGameObject:lt,formatMarkerTypeLabel:t.formatMarkerTypeLabel??((f,y)=>y),createDocumentInspectorProperty:i}):null,createPrefabInstanceSection:()=>fR(m,p),createMaterialSections:()=>yy.createArtistMaterialInspectorSectionsWithCachedUsage(m,p,g,h,{createDocumentInspectorProperty:i}),createOutlineSection:()=>Zy({nodeKind:g,outline:p.overrides?.outline,createDocumentInspectorProperty:i})})}})}function CH(e,t,r,n,o,a){let i=null,s=[];for(let c of o){let d=c.createMultiInspectorSection?.({document:e,targetIds:t,activeId:r,context:n})??null;if(d){i=d,s=c.resolveMultiInspectorTargetIds?.(e,t)??[];break}}return Xy({document:e,selectedIds:t,activeId:r,renderingProfile:a,extraSection:i,resolveFallbackTargetIds:()=>s,formatFallbackLabel:c=>`${c.length} Objects`,fallbackSelectionKind:"transform"})}function wH(e,t,r){return e?r==null&&e.allowDelete===!1?{ok:!1,message:`Scene node field cannot be deleted: ${t}.`}:e.validate(r)?{ok:!0,value:r}:{ok:!1,message:`Invalid value for scene node field: ${t}.`}:null}function vH(e,t){return Ns(t,{builtInMarkerTypes:e})}var fl=We;function _H(e){return e.startsWith("shadow.")||e==="transformType"||e.startsWith("rendering.")||e.startsWith("primitive.")||e.startsWith("camera.")||e.startsWith("light.")}function kH(e,t){return e==="enabled"||e==="shadow.cast"||e==="shadow.receive"||t?.isSerializedMultiFieldPath?.(e)===!0}function jH(e,t){return e==="shadow.cast"||e==="shadow.receive"||t?.isSerializedMultiProjectionPath?.(e)===!0}function NH(e,t){return e==="enabled"||e==="shadow.cast"||e==="shadow.receive"?!1:t?.getSerializedMultiProbeValue?.(e)}function $R(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e;return["documentReducerImmutability","transformTypeOptions","normalizeInspectorValue","validateInspectorField","isInspectorPatchPath","isProjectionPath","normalizeDocumentAfterCommand","normalizeAfterFieldPatch","fieldMutation","createInspectorPropertyPatch","patchGameObjectField","patchGameObjectsField","reducePatch","createHierarchyPatch","createInspectorSections","createMultiInspectorSection","resolveMultiInspectorTargetIds","isSerializedMultiFieldPath","isSerializedMultiProjectionPath","getSerializedMultiProbeValue","canPatchSerializedMultiField"].some(n=>t[n]!=null)?t:null}function AS(e){let{documentReducerImmutability:t,...r}=e;return r}function GH(e){if(e.length===0)return;let t=r=>{for(let n of e){let o=r(n);if(o!=null)return o}return null};return{documentReducerImmutability:e.every(r=>r.documentReducerImmutability==="preserves-input")?"preserves-input":void 0,transformTypeOptions:BR(e.flatMap(r=>r.transformTypeOptions??[])).slice(Bd.length),normalizeInspectorValue(r,n){for(let o of e){let a=o.normalizeInspectorValue?.(r,n);if(a!==void 0)return a}},validateInspectorField:r=>t(n=>n.validateInspectorField?.(r)),isInspectorPatchPath:r=>e.some(n=>n.isInspectorPatchPath?.(r)),isProjectionPath:r=>e.some(n=>n.isProjectionPath?.(r)),normalizeDocumentAfterCommand:(r,n)=>e.reduce((o,a)=>a.normalizeDocumentAfterCommand?.(o,n)??o,r),normalizeAfterFieldPatch:(r,n,o,a)=>e.reduce((i,s)=>s.normalizeAfterFieldPatch?.(i,n,o,a)??i,r),fieldMutation:LH(e),createInspectorPropertyPatch:r=>t(n=>n.createInspectorPropertyPatch?.(r)),patchGameObjectField:r=>t(n=>n.patchGameObjectField?.(r)),patchGameObjectsField:r=>t(n=>n.patchGameObjectsField?.(r)),reducePatch:r=>t(n=>n.reducePatch?.(r)),createHierarchyPatch:(r,n)=>t(o=>o.createHierarchyPatch?.(r,n)),createInspectorSections:r=>e.flatMap(n=>n.createInspectorSections?.(r)??[]),isSerializedMultiFieldPath:r=>e.some(n=>n.isSerializedMultiFieldPath?.(r)),isSerializedMultiProjectionPath:r=>e.some(n=>n.isSerializedMultiProjectionPath?.(r)),getSerializedMultiProbeValue(r){for(let n of e){let o=n.getSerializedMultiProbeValue?.(r);if(o!==void 0)return o}},canPatchSerializedMultiField:r=>e.every(n=>n.canPatchSerializedMultiField?.(r)!==!1)}}function BR(e=[]){let t=[],r=new Set;for(let n of[...Bd,...e])r.has(n.value)||(r.add(n.value),t.push(n));return t}function LH(e){let t=e.flatMap(r=>r.fieldMutation?[r.fieldMutation]:[]);if(t.length!==0)return{isCustomTransformType:r=>t.some(n=>n.isCustomTransformType?.(r)),applyCustomTransformType(r,n){for(let o of t)o.clearCustomTransformState?.(r,n);for(let o of t)o.applyCustomTransformType?.(r,n)},clearCustomTransformState(r,n){for(let o of t)o.clearCustomTransformState?.(r,n)},patchCustomTransformField(r,n,o){for(let a of t)if(a.patchCustomTransformField?.(r,n,o))return!0;return!1}}}var PS=["model","texture","image","sound"],Zp=[".glb",".gltf"],xS=[".png",".jpg",".jpeg",".webp"],zR=[".env",".hdr",".dds",".ktx",".ktx2"],ef=[...xS,...zR],tf=[".mp3",".wav",".ogg",".flac",".aac",".m4a"],mc=[...Zp,...ef,...tf];function VR(e){return String(e??"").trim().toLowerCase().replace(/-/g,"")}function rf(e,t){let r=VR(t);return`${e==="model"?"asset":e==="texture"?"texture":e==="sound"?"sound":"image"}_${r}`}function nf(e){let o=String(e??"").trim().split(/[^a-zA-Z0-9_$]+/).filter(Boolean).map((a,i)=>i===0?a:`${a.charAt(0).toUpperCase()}${a.slice(1)}`).join("").replace(/[^a-zA-Z0-9_$]/g,"")||"assetUrl";return/^[a-zA-Z_$]/.test(o)?o:`asset${o}`}function of(e,t=""){let r=String(e??"").trim().toLowerCase();if(r==="glb"||r==="gltf"||r==="model")return"model";if(r==="groundtexture"||r==="ground-texture"||r==="texture")return"texture";if(r==="ui"||r==="image"||r==="img")return"image";if(r==="audio"||r==="sound")return"sound";let n=UR(t);return Zp.includes(n)?"model":tf.includes(n)?"sound":ef.includes(n)?"texture":null}function UR(e){let t=e.split(/[?#]/,1)[0]??"",r=Math.max(t.lastIndexOf("/"),t.lastIndexOf("\\")),n=t.slice(r+1),o=n.lastIndexOf(".");return o>=0?n.slice(o).toLowerCase():""}function MS(e){let t=String(e??"").trim(),r=t.toLowerCase();for(let n of[...mc].sort((o,a)=>a.length-o.length))if(r.endsWith(n)){t=t.slice(0,-n.length);break}return t}function DS(e,t){return String(e??"").trim()||MS(t)||"Asset"}function OS(e,t){return MS(e||t).trim().toLowerCase().normalize("NFKD").replace(/[^a-z0-9]+/g,"_").replace(/^_+|_+$/g,"").replace(/_{2,}/g,"_")||null}function RS(e){return e==="model"?Zp:e==="sound"?tf:e==="texture"?ef:e==="image"?xS:[]}function wS(e){if(typeof e=="number"&&Number.isFinite(e)&&e>0)return e;if(!e||typeof e!="object")return;let t=e,r=CS(t.x),n=CS(t.y),o=CS(t.z);if(!(r==null||n==null||o==null||r<=0||n<=0||o<=0))return{x:r,y:n,z:o}}function CS(e){return typeof e=="number"&&Number.isFinite(e)?e:null}function vS(e){return e==="shared"||e==="instance"?e:void 0}function _S(e){return Number.isInteger(e)&&e>=0?e:void 0}var HR="rendering",Bi=tm;function Ta(e){let t=at(e);return FH(t?.companionConfigs)}function jS(e){return Ta(e)[HR]??null}function KR(e){return To(Ta(e)[Bi])}function FH(e){if(e==null)return{};let t=$H(e,"$.companionConfigs"),r={};for(let[n,o]of Object.entries(t)){if(!n||n!==n.trim())throw kS("schema.invalidValue","$.companionConfigs");let a=n;if(o===null){r[a]=null;continue}let i=at(o);if(!i)throw kS("schema.invalidType",`$.companionConfigs.${a}`);a===HR&&Nt(i),a===Bi&&ia(i,`$.companionConfigs.${a}`),r[a]=i}return r}function $H(e,t){let r=at(e);if(!r)throw kS("schema.invalidType",t);return r}function kS(e,t){let r=new Error(`${e}: ${t}`);return Object.assign(r,{code:e,path:t}),r}var QR="@fps-games/editor.playable-sdk.scene-compiler",ZR="3",BH=new Set(["shadowMode","childMaterialBindings","childMaterials"]),zH=new Set(["coordinateSpace","center","size","rotation"]),WR=new Set(["root","group","model","primitive","light","prefabInstance","marker","collision"]);function af(e){tC(e,!0)}function eC(e){let t=Od(e);return af(t.document),t}function FS(e){tC(e,!1)}function tC(e,t){let r=Y(e);if(!r)throw new Error("editor_scene_must_be_object");if(r.schemaVersion!==1)throw $("schema.unsupportedVersion","$.schemaVersion");if(!Array.isArray(r.assets))throw new Error("editor_scene_assets_must_be_array");let n=Y(r.scene);if(!Array.isArray(n?.gameObjects))throw new Error("editor_scene_game_objects_must_be_array");if(n.materialAssets!=null&&!Array.isArray(n.materialAssets))throw new Error("editor_scene_material_assets_must_be_array");if(Object.prototype.hasOwnProperty.call(n,"shadowMapExperiment"))throw $("schema.forbiddenField","$.scene.shadowMapExperiment");KH(r.assets,n.gameObjects),LS(r,"$"),WH(r.assets),HH(r.assets,n.gameObjects),qH(n.gameObjects,r.assets),YH(n.gameObjects),UH(n.materialAssets??[]),t&&JH(r.assets,n.gameObjects),rp(r),VH(r.assets,n.gameObjects)}function VH(e,t){for(let r=0;r<t.length;r+=1){let n=Y(t[r]),o=`$.scene.gameObjects[${r}]`,a=Object.prototype.hasOwnProperty.call(n,"shadow");if(Y(n.prefab)){if(a)throw $("schema.forbiddenField",`${o}.shadow`)}else if(bi(n))qR(n.shadow,`${o}.shadow`);else if(a)throw $("schema.forbiddenField",`${o}.shadow`);if(Object.prototype.hasOwnProperty.call(n,"shadowMapExperiment"))throw $("schema.forbiddenField",`${o}.shadowMapExperiment`)}for(let r=0;r<e.length;r+=1){let n=Y(e[r]),o=`$.assets[${r}]`,a=Y(n.defaults);if(a?.shadow!==void 0)throw $("schema.forbiddenField",`${o}.defaults.shadow`);if(a?.shadowMapExperiment!==void 0)throw $("schema.forbiddenField",`${o}.defaults.shadowMapExperiment`);let i=Y(n.prefab);if(!i)continue;let s=Y(i.defaults);if(qR(s?.shadow,`${o}.prefab.defaults.shadow`),s?.shadowMapExperiment!==void 0)throw $("schema.forbiddenField",`${o}.prefab.defaults.shadowMapExperiment`);Array.isArray(i.nodes)&&i.nodes.forEach((c,d)=>{let u=Y(c),l=`${o}.prefab.nodes[${d}]`,m=Y(u?.defaults);if(u?.shadow!==void 0)throw $("schema.forbiddenField",`${l}.shadow`);if(m?.shadow!==void 0)throw $("schema.forbiddenField",`${l}.defaults.shadow`);if(u?.shadowMapExperiment!==void 0)throw $("schema.forbiddenField",`${l}.shadowMapExperiment`);if(m?.shadowMapExperiment!==void 0)throw $("schema.forbiddenField",`${l}.defaults.shadowMapExperiment`)})}}function qR(e,t){let r=Y(e);if(!r||r.cast===void 0||r.receive===void 0)throw $("schema.invalidType",t);if(r.cast!=="enabled"&&r.cast!=="none"||r.receive!=="enabled"&&r.receive!=="none")throw $("schema.invalidValue",t);for(let n of Object.keys(r))if(n!=="cast"&&n!=="receive")throw $("schema.forbiddenField",`${t}.${n}`)}function UH(e){for(let t=0;t<e.length;t+=1){let r=Y(e[t]),n=`$.scene.materialAssets[${t}]`;if(!r)throw $("schema.invalidType",n);if(Object.prototype.hasOwnProperty.call(r,"materialKind"))throw $("schema.deprecatedField",`${n}.materialKind`);if(Object.prototype.hasOwnProperty.call(r,"profile"))throw $("schema.deprecatedField",`${n}.profile`);if(!ne(r.id))throw $("schema.invalidType",`${n}.id`);if(!ne(r.name))throw $("schema.invalidType",`${n}.name`);let o=ne(r.shaderId);if(!o)throw $("schema.invalidValue",`${n}.shaderId`);let a=fr(o),i=r.definitionVersion;if(i!=null&&(typeof i!="number"||!Number.isSafeInteger(i)||i<1))throw $("schema.invalidValue",`${n}.definitionVersion`);if(!a&&i==null)throw $("schema.invalidValue",`${n}.definitionVersion`);if(a){let s=js(o,r.properties,`${n}.properties`);if(s[0])throw $("schema.invalidValue",s[0].path)}else if(!Y(r.properties))throw $("schema.invalidType",`${n}.properties`);for(let s of Object.keys(r))if(!["id","guid","name","shaderId","definitionVersion","properties","system","origin"].includes(s))throw $("schema.unknownField",`${n}.${s}`)}}function HH(e,t){let r=new Set(e.map(Y).filter(a=>a?.type==="glb").map(a=>ne(a?.id)).filter(a=>!!a)),n=new Set(e.map(Y).filter(a=>a?.type==="texture").map(a=>ne(a?.id)).filter(a=>!!a)),o=new Map;for(let a of e.map(Y)){if(a?.type!=="prefab")continue;let i=ne(a.id),s=ne(Y(a.prefab)?.sourceAssetId);i&&s&&o.set(i,s)}for(let a=0;a<e.length;a+=1){let i=Y(e[a]);if(i?.type!=="prefab")continue;let s=Y(i.prefab),c=ne(s?.sourceAssetId),d=ne(s?.rootNodeId);if(!c||!r.has(c))throw $("schema.invalidReference",`$.assets[${a}].prefab.sourceAssetId`);let u=Array.isArray(s?.nodes)?s.nodes:[];for(let l=0;l<u.length;l+=1){let m=Y(u[l]),p=ne(m?.sourceAssetId);if(m?.kind==="model"&&(!p||!r.has(p)))throw $("schema.invalidReference",`$.assets[${a}].prefab.nodes[${l}].sourceAssetId`);if(m?.kind==="prefabInstance"){let h=ne(m.childPrefabId),g=h?o.get(h):null;if(ne(m.id)===d&&c!==g)throw $("schema.invalidReference",`$.assets[${a}].prefab.sourceAssetId`);if(p&&p!==g)throw $("schema.invalidReference",`$.assets[${a}].prefab.nodes[${l}].sourceAssetId`)}}}for(let a=0;a<t.length;a+=1){let i=Y(t[a]),s=ne(Y(i?.instance)?.assetId);if(s&&!r.has(s))throw $("schema.invalidReference",`$.scene.gameObjects[${a}].instance.assetId`);let c=Array.isArray(i?.components)?i.components:[];for(let d=0;d<c.length;d+=1){let u=Y(c[d]);if(u?.type!=="ModelRenderer")continue;let l=ne(u.assetId);if(!l||!r.has(l))throw $("schema.invalidReference",`$.scene.gameObjects[${a}].components[${d}].assetId`)}for(let d=0;d<c.length;d+=1){let u=Y(c[d]);if(u?.type!=="ImageRenderer")continue;let l=ne(u.assetId);if(!l||!n.has(l))throw $("schema.invalidReference",`$.scene.gameObjects[${a}].components[${d}].assetId`);let m=Y(u.size);if(!m||!XR(m.width)||!XR(m.height))throw $("schema.invalidValue",`$.scene.gameObjects[${a}].components[${d}].size`)}}}function KH(e,t){let r=new Set;e.forEach((a,i)=>{let s=Y(a);if(!s)throw $("schema.invalidType",`$.assets[${i}]`);let c=ne(s.id);if(!c||!ne(s.type))throw $("schema.invalidValue",`$.assets[${i}]`);if(r.has(c))throw $("schema.invalidValue",`$.assets[${i}].id`);r.add(c)});let n=new Set,o=new Map;t.forEach((a,i)=>{let s=Y(a);if(!s)throw $("schema.invalidType",`$.scene.gameObjects[${i}]`);let c=ne(s.id);if(!c)throw $("schema.invalidValue",`$.scene.gameObjects[${i}].id`);if(n.has(c))throw $("schema.invalidValue",`$.scene.gameObjects[${i}].id`);if(n.add(c),o.set(c,{value:s,index:i}),!Array.isArray(s.components))throw $("schema.invalidType",`$.scene.gameObjects[${i}].components`);s.components.forEach((d,u)=>{let l=Y(d);if(!l)throw $("schema.invalidType",`$.scene.gameObjects[${i}].components[${u}]`);if(!ne(l.type))throw $("schema.invalidValue",`$.scene.gameObjects[${i}].components[${u}].type`)})});for(let[a,i]of o){if(!("parentId"in i.value))continue;let s=ne(i.value.parentId);if(!s||!o.has(s))throw $("schema.invalidReference",`$.scene.gameObjects[${i.index}].parentId`);let c=new Set([a]),d=s;for(;d;){if(c.has(d))throw $("schema.invalidReference",`$.scene.gameObjects[${i.index}].parentId`);c.add(d);let u=o.get(d)?.value;d=u&&u.parentId!=null?ne(u.parentId):null}}}function LS(e,t){if(Array.isArray(e)){e.forEach((n,o)=>LS(n,`${t}[${o}]`));return}let r=Y(e);if(r)for(let[n,o]of Object.entries(r)){let a=`${t}.${n}`;if(BH.has(n))throw $("schema.deprecatedField",a);n==="shadow"&&ud(o,a),!(n==="metadata"||n==="shadowMapExperiment")&&LS(o,a)}}function WH(e){let t=new Set(e.map(Y).filter(i=>i?.type==="prefab").map(i=>ne(i?.id)).filter(i=>!!i)),r=new Map;for(let i=0;i<e.length;i+=1){let s=Y(e[i]);if(s?.type!=="prefab")continue;let c=Y(s.prefab);if(!Array.isArray(c?.nodes))throw $("schema.unsupportedVersion",`$.assets[${i}].prefab.nodes`);YR(c.defaults,`$.assets[${i}].prefab.defaults`);let d=[],u=new Set;for(let h=0;h<c.nodes.length;h+=1){let g=`$.assets[${i}].prefab.nodes[${h}]`,f=Y(c.nodes[h]);if(!f)throw $("schema.invalidType",g);YR(f.defaults,`${g}.defaults`);let y=ne(f.id);if(!y||!WR.has(String(f.kind)))throw $("schema.invalidValue",g);if(u.has(y))throw $("schema.invalidValue",`${g}.id`);u.add(y),d.push(f)}let l=ne(c?.rootNodeId),m=l?d.find(h=>ne(h?.id)===l):null,p=!!m&&WR.has(String(m.kind))&&!Object.prototype.hasOwnProperty.call(m,"parentId");if(c?.compositionVersion!==gi||d.length===0||!p)throw $("schema.unsupportedVersion",`$.assets[${i}].prefab`);r.set(ne(s.id),d.flatMap((h,g)=>{let f=ne(h.childPrefabId);return f?[{prefabId:f,path:`$.assets[${i}].prefab.nodes[${g}].childPrefabId`}]:[]}));for(let h=0;h<d.length;h+=1){let g=d[h];tx(g,new Map(d.map(D=>[ne(D.id),D])),`$.assets[${i}].prefab.nodes[${h}]`);let f=ne(g.id),y=ne(g.parentId);if(f!==l&&(!y||!u.has(y)))throw $("schema.invalidReference",`$.assets[${i}].prefab.nodes[${h}].parentId`);if(g.kind==="prefabInstance"){let D=ne(g.childPrefabId);if(!D||!t.has(D))throw $("schema.invalidReference",`$.assets[${i}].prefab.nodes[${h}].childPrefabId`)}let A=new Set([f]),T=y;for(;T;){if(A.has(T))throw $("schema.invalidReference",`$.assets[${i}].prefab.nodes[${h}].parentId`);A.add(T);let D=d.find(P=>ne(P.id)===T);T=D?ne(D.parentId):null}}}let n=new Set,o=new Set,a=i=>{if(!o.has(i)){n.add(i);for(let s of r.get(i)??[]){if(n.has(s.prefabId))throw $("schema.invalidReference",s.path);a(s.prefabId)}n.delete(i),o.add(i)}};for(let i of r.keys())a(i)}function YR(e,t){if(e==null)return;let r=Y(e);if(!r)throw $("schema.invalidType",t);if(Object.prototype.hasOwnProperty.call(r,"active")&&typeof r.active!="boolean")throw $("schema.invalidType",`${t}.active`)}function qH(e,t){let r=new Map;for(let n of t.map(Y)){if(n?.type!=="prefab")continue;let o=ne(n.id),a=ne(Y(n.prefab)?.sourceAssetId);o&&a&&r.set(o,a)}for(let n=0;n<e.length;n+=1){let o=Y(e[n]);if(!o||o.prefab==null)continue;let a=Y(o.prefab),i=ne(a?.prefabId),s=i?r.get(i):null;if(!i||!s)throw $("schema.unsupportedVersion",`$.scene.gameObjects[${n}].prefab`);if(ne(a?.sourceAssetId)!==s)throw $("schema.invalidReference",`$.scene.gameObjects[${n}].prefab.sourceAssetId`);let c=ne(Y(o.instance)?.assetId);if(c&&c!==s)throw $("schema.invalidReference",`$.scene.gameObjects[${n}].instance.assetId`);let d=Array.isArray(o.components)?o.components:[];for(let u=0;u<d.length;u+=1){let l=Y(d[u]);if(l?.type==="ModelRenderer"&&ne(l.assetId)!==s)throw $("schema.invalidReference",`$.scene.gameObjects[${n}].components[${u}].assetId`)}}}function YH(e){for(let t=0;t<e.length;t+=1){let r=Y(Y(Y(e[t])?.marker)?.geometry);if(r?.kind!=="box")continue;for(let o of zH)if(Object.prototype.hasOwnProperty.call(r,o))throw $("schema.deprecatedField",`$.scene.gameObjects[${t}].marker.geometry.${o}`);if(!(Array.isArray(Y(e[t])?.components)?Y(e[t]).components:[]).some(o=>Y(o)?.type==="Transform"))throw $("schema.invalidValue",`$.scene.gameObjects[${t}].components`)}}function JH(e,t){let r=new Map,n=new Map;for(let o=0;o<e.length;o+=1){let a=Y(e[o]),i=ne(a?.id);if(!a||!i)continue;if(a.type==="prefab"){let l=ne(Y(a.prefab)?.sourceAssetId);l&&n.set(i,l)}let s=Y(a.metadata),c=s?.materialSlots;if(c==null){r.set(i,new Set);continue}if(!Array.isArray(c))throw $("schema.invalidType",`$.assets[${o}].metadata.materialSlots`);let d=XH(s?.assetAnalysis),u=new Set;for(let l=0;l<c.length;l+=1){let m=Y(c[l]),p=ne(m?.slotId);if(!m||!p)throw $("schema.invalidValue",`$.assets[${o}].metadata.materialSlots[${l}]`);let h=`$.assets[${o}].metadata.materialSlots[${l}]`;for(let g of["ownerNodePath","nodeIndex","nodeIndexPath","meshIndex","primitiveIndex","sourceMaterialIndex","sourceMaterialIndices","sourceMeshName","triangleCount","boundingBox"])if(Object.prototype.hasOwnProperty.call(m,g))throw $("schema.deprecatedField",`${h}.${g}`);if(!Array.isArray(m.sourceSurfaces))throw $("schema.invalidType",`${h}.sourceSurfaces`);if(m.sourceSurfaces.length===0)throw $("schema.invalidValue",`${h}.sourceSurfaces`);for(let g=0;g<m.sourceSurfaces.length;g+=1){let f=`${h}.sourceSurfaces[${g}]`,y=Y(m.sourceSurfaces[g]);if(!y||!ne(y.ownerNodePath))throw $("schema.invalidValue",f);JR(y,"nodeIndex",f),JR(y,"sourceMaterialIndex",f);for(let T of["meshIndex","primitiveIndex"])if(!Number.isInteger(y[T])||y[T]<0)throw $("schema.invalidValue",`${f}.${T}`);if(y.nodeIndexPath!=null&&(!Array.isArray(y.nodeIndexPath)||y.nodeIndexPath.some(T=>!Number.isInteger(T)||T<0)))throw $("schema.invalidValue",`${f}.nodeIndexPath`);let A=y.meshIndex;if(!ne(y.sourceMeshName)&&!d.has(A))throw $("schema.invalidValue",`${f}.sourceMeshName`)}if(u.has(p))throw $("schema.invalidValue",`$.assets[${o}].metadata.materialSlots[${l}].slotId`);u.add(p)}r.set(i,u)}for(let o=0;o<e.length;o+=1){let a=Y(e[o]);if(a?.type!=="prefab")continue;let i=Y(a.prefab),s=ne(i?.sourceAssetId);NS(i?.overrides,s?r.get(s):void 0,`$.assets[${o}].prefab.overrides`);let c=Array.isArray(i?.nodes)?i.nodes:[];for(let d=0;d<c.length;d+=1){let u=Y(c[d]),l=ne(u?.childPrefabId),m=ne(u?.sourceAssetId)??(l?n.get(l)??null:null);NS(u?.overrides,m?r.get(m):void 0,`$.assets[${o}].prefab.nodes[${d}].overrides`)}}for(let o=0;o<t.length;o+=1){let a=Y(t[o]),s=(Array.isArray(a?.components)?a.components:[]).map(Y).find(d=>d?.type==="ModelRenderer"),c=ne(s?.assetId);NS(a?.overrides,c?r.get(c):void 0,`$.scene.gameObjects[${o}].overrides`)}}function NS(e,t,r){let n=Y(e);if(!n||n.materialSlotBindings==null)return;let o=Y(n.materialSlotBindings);if(!o)throw $("schema.invalidType",`${r}.materialSlotBindings`);for(let[a,i]of Object.entries(o)){if(!t?.has(a))throw $("schema.invalidReference",`${r}.materialSlotBindings.${a}`);let s=`${r}.materialSlotBindings.${a}`,c=Y(i);if(!c)throw $("schema.invalidType",s);for(let d of Object.keys(c))if(d!=="materialAssetId"&&d!=="override")throw $("schema.deprecatedField",`${s}.${d}`);if("materialAssetId"in c&&c.materialAssetId!=null&&!ne(c.materialAssetId))throw $("schema.invalidValue",`${s}.materialAssetId`);if("override"in c&&!Y(c.override))throw $("schema.invalidType",`${s}.override`);"override"in c&&QH(c.override,`${s}.override`)}}function JR(e,t,r){let n=e[t];if(n!=null&&(!Number.isInteger(n)||n<0))throw $("schema.invalidValue",`${r}.${t}`)}function XH(e){let t=Y(e),r=Array.isArray(t?.meshes)?t.meshes:[];return new Set(r.flatMap(n=>{let o=Y(n),a=o?.meshIndex,i=Number.isInteger(a)?a:null;return i!=null&&ne(o?.name)?[i]:[]}))}function QH(e,t){let r=Y(e);if(!r)throw $("schema.invalidType",t);if(pc(r,["lightingModel","baseColor","normal","metallic","roughness","metallicRoughness","occlusion","emission","alpha"],t),"lightingModel"in r&&!["lit","unlit"].includes(String(r.lightingModel)))throw $("schema.invalidValue",`${t}.lightingModel`);for(let n of["metallic","roughness"])hl(r,n,t);ZH(r.baseColor,`${t}.baseColor`),GS(r.normal,`${t}.normal`,["texture","strength"]),GS(r.metallicRoughness,`${t}.metallicRoughness`,["texture"]),GS(r.occlusion,`${t}.occlusion`,["texture","strength"]),eK(r.emission,`${t}.emission`),tK(r.alpha,`${t}.alpha`)}function ZH(e,t){if(e==null)return;let r=fc(e,t);pc(r,["color","texture","brightness","saturation","contrast","hue"],t),rC(r.color,`${t}.color`),gl(r.texture,`${t}.texture`);for(let n of["brightness","saturation","contrast","hue"])hl(r,n,t)}function GS(e,t,r){if(e==null)return;let n=fc(e,t);pc(n,r,t),gl(n.texture,`${t}.texture`),r.includes("strength")&&hl(n,"strength",t)}function eK(e,t){if(e==null)return;let r=fc(e,t);pc(r,["color","intensity","texture","maskTexture"],t),rC(r.color,`${t}.color`),hl(r,"intensity",t),gl(r.texture,`${t}.texture`),gl(r.maskTexture,`${t}.maskTexture`)}function tK(e,t){if(e==null)return;let r=fc(e,t);if(pc(r,["mode","opacity","cutoff","texture"],t),"mode"in r&&!["opaque","mask","blend"].includes(String(r.mode)))throw $("schema.invalidValue",`${t}.mode`);for(let n of["opacity","cutoff"])hl(r,n,t);gl(r.texture,`${t}.texture`)}function gl(e,t){if(e==null)return;let r=fc(e,t);pc(r,["url","textureAssetId"],t);for(let n of["url","textureAssetId"])if(n in r&&r[n]!=null&&!ne(r[n]))throw $("schema.invalidValue",`${t}.${n}`)}function rC(e,t){if(e==null)return;let r=fc(e,t);for(let n of["r","g","b"])rK(r,n,t)}function pc(e,t,r){let n=new Set(t);for(let o of Object.keys(e))if(!n.has(o))throw $("schema.deprecatedField",`${r}.${o}`)}function hl(e,t,r){if(t in e&&e[t]!=null&&(typeof e[t]!="number"||!Number.isFinite(e[t])))throw $("schema.invalidType",`${r}.${t}`)}function rK(e,t,r){if(!(t in e)||typeof e[t]!="number"||!Number.isFinite(e[t]))throw $("schema.invalidValue",`${r}.${t}`)}function fc(e,t){let r=Y(e);if(!r)throw $("schema.invalidType",t);return r}function $(e,t){let r=new Error(`${e}: ${t}`);return Object.assign(r,{code:e,path:t}),r}function Y(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function ne(e){return typeof e=="string"&&e.length>0&&e===e.trim()?e:null}function XR(e){return typeof e=="number"&&Number.isFinite(e)&&e>0}var nK=Object.freeze({bash:"shell",cjs:"javascript",conf:"config",config:"config",css:"css",env:"dotenv",frag:"glsl",fs:"glsl",glsl:"glsl",htm:"html",html:"html",ini:"config",js:"javascript",json:"json",jsonc:"jsonc",jsx:"javascript",less:"less",md:"markdown",mjs:"javascript",scss:"scss",shader:"glsl",sh:"shell",toml:"toml",ts:"typescript",tsx:"typescript",txt:"text",vert:"glsl",vs:"glsl",wgsl:"wgsl",xml:"xml",yaml:"yaml",yml:"yaml",zsh:"shell"}),oK=Object.freeze({".env":"dotenv",".eslintignore":"config",".gitignore":"config",".npmrc":"config",".prettierignore":"config",dockerfile:"dockerfile",makefile:"makefile"}),aK=Object.freeze({png:{kind:"image",mimeType:"image/png"},jpg:{kind:"image",mimeType:"image/jpeg"},jpeg:{kind:"image",mimeType:"image/jpeg"},webp:{kind:"image",mimeType:"image/webp"},gif:{kind:"image",mimeType:"image/gif"},bmp:{kind:"image",mimeType:"image/bmp"},glb:{kind:"model",mimeType:"model/gltf-binary"},mp3:{kind:"audio",mimeType:"audio/mpeg"},wav:{kind:"audio",mimeType:"audio/wav"},ogg:{kind:"audio",mimeType:"audio/ogg"},m4a:{kind:"audio",mimeType:"audio/mp4"},aac:{kind:"audio",mimeType:"audio/aac"},flac:{kind:"audio",mimeType:"audio/flac"}});function sf(e){let t=e.replace(/\\/g,"/").split("/"),r=t[t.length-1]?.toLowerCase()??"",n=r.lastIndexOf(".");return n>0?r.slice(n+1):""}function $S(e){let t=e.replace(/\\/g,"/").split("/"),r=t[t.length-1]?.toLowerCase()??"";return oK[r]??nK[sf(r)]??null}function nC(e){return $S(e)!==null}function BS(e){return aK[sf(e)]??null}var iK="fps.plugin.ground-decal",oC="@fps-games/plugin-ground-decal";function aC(e){dK(e);let t=e.plugins.find(i=>i.pluginId===iK),r=t?cK(t):null,n=r?[{id:"groundDecal",label:"Ground Decal",config:sK(r),scene:{kind:"groundDecal"}}]:[],o=e.authoring.source,a=e.authoring.assets;return Object.freeze({definition:e,plugins:e.plugins,groundDecal:r,metadata:lK(e.metadata),project:Object.freeze({projectId:e.projectId,projectName:e.projectName,source:Object.freeze({editorScene:o.document,runtimeScene:o.runtimeArtifact,...o.rendering?{rendering:o.rendering}:{},...o.shadows?{shadows:o.shadows}:{}}),assets:Object.freeze({...a}),features:Object.freeze(n),...e.metadata&&Kt(e.metadata)?{metadata:Object.freeze({...e.metadata})}:{}})})}function sK(e){let t=new Map(e.kinds.map(l=>[l.id,l])),r=new Set(e.editableLayerRoles??[]),n=new Set(e.layoutEditableLayerRoles??[]),o=new Set(e.rotationEditableLayerRoles??[]),a=new Set(e.stretchedImageRoles??[]),i=new Set(e.activePreviewKinds??[]),s=l=>t.has(l),c=l=>{let m=t.get(l)??t.get(e.defaultUiKind);if(!m)throw new Error(`Ground Decal kind is not configured: ${l}`);return structuredClone(m.defaultConfig)},d=l=>uK(l,t),u={defaultUiKind:e.defaultUiKind,isKnownUiKind:s,isProjectEditableLayer:l=>r.size===0||r.has(l.role),isLayoutEditableLayer:l=>n.has(l.role),isRotationEditableLayer:l=>o.has(l.role),createDefaultGroundDecal:c,isGroundDecalConfig:d};return{uiKinds:Object.freeze([...t.keys()]),documentPolicy:u,inspectorPolicy:{...u,isEditableTextureLayer:l=>(l.kind==="texture"||l.kind==="textureProgress")&&(r.size===0||r.has(l.role)),isEditableColorLayer:l=>(l.kind==="color"||l.kind==="progress")&&(r.size===0||r.has(l.role)),isEditableTextLayer:l=>l.kind==="text"&&(r.size===0||r.has(l.role)),useUniformLayoutScaleMode:l=>n.has(l.role),resolveImageFit:l=>"imageFit"in l&&(l.imageFit==="stretch"||l.imageFit==="contain")?l.imageFit:a.has(l.role)?"stretch":"contain",createLayerLabel:l=>mK(l.role),createUiKindLabel:l=>t.get(l)?.label??l,canShowActivePreview:l=>i.has(l.uiKind),getLayerPreviewVisibility:(l,m)=>i.has(m.uiKind)&&l.role==="activeBackground"?{path:"groundDecal.editorPreviewActive",value:m.editorPreviewActive===!0}:null},createHierarchyLabel:l=>t.get(l)?.hierarchyLabel??`${t.get(l)?.label??l} Ground Decal UI`}}function cK(e){if(e.packageName!==oC)throw new Error(`Ground Decal Plugin package must be ${oC}.`);if(!e.targets.includes("editor"))throw new Error("Ground Decal Plugin must target editor.");let t=e.config;if(!Kt(t)||t.schemaVersion!==1)throw new Error("Ground Decal Plugin config schemaVersion must be 1.");if(typeof t.defaultUiKind!="string"||!Array.isArray(t.kinds)||t.kinds.length===0)throw new Error("Ground Decal Plugin config must define defaultUiKind and kinds.");let r=new Set;for(let n of t.kinds){if(!Kt(n)||typeof n.id!="string"||typeof n.label!="string"||!Kt(n.defaultConfig))throw new Error("Ground Decal Plugin kinds must contain id, label, and defaultConfig.");if(r.has(n.id))throw new Error(`Duplicate Ground Decal kind: ${n.id}`);if(r.add(n.id),n.defaultConfig.uiKind!==n.id)throw new Error(`Ground Decal defaultConfig.uiKind must match kind id: ${n.id}`)}if(!r.has(t.defaultUiKind))throw new Error(`Ground Decal defaultUiKind is not declared: ${t.defaultUiKind}`);for(let n of["editableLayerRoles","layoutEditableLayerRoles","rotationEditableLayerRoles","stretchedImageRoles","activePreviewKinds"]){let o=t[n];if(o!==void 0&&(!Array.isArray(o)||o.some(a=>typeof a!="string")))throw new Error(`Ground Decal Plugin config.${n} must be an array of strings.`)}return t}function dK(e){if(!Kt(e)||e.schemaVersion!==1)throw new Error("Editor Project definition schemaVersion must be 1.");if(typeof e.projectId!="string"||typeof e.projectName!="string")throw new Error("Editor Project identity is invalid.");if(!Kt(e.authoring)||!Kt(e.authoring.source)||!Kt(e.authoring.assets)||!Array.isArray(e.plugins))throw new Error("Editor Project authoring or Plugin configuration is invalid.")}function lK(e){return Kt(e)?Object.freeze({...Array.isArray(e.markerTypes)?{markerTypes:Object.freeze(e.markerTypes.filter(Kt).map(t=>Object.freeze({...t})))}:{},...Array.isArray(e.relationTypes)?{relationTypes:Object.freeze(e.relationTypes.filter(Kt).map(t=>Object.freeze({...t})))}:{}}):Object.freeze({})}function uK(e,t){if(!Kt(e)||typeof e.uiKind!="string"||!t.has(e.uiKind)||!Kt(e.size)||!cf(e.size.width)||!cf(e.size.depth)||!Array.isArray(e.layers))return!1;let r=new Set;for(let n of e.layers){if(!Kt(n)||typeof n.id!="string"||!n.id||typeof n.role!="string"||!n.role||typeof n.kind!="string"||!Kt(n.rect)||!Number.isFinite(n.rect.x)||!Number.isFinite(n.rect.z)||!cf(n.rect.width)||!cf(n.rect.depth)||r.has(n.id))return!1;r.add(n.id)}return!0}function cf(e){return typeof e=="number"&&Number.isFinite(e)&&e>0}function Kt(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function mK(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/^./,t=>t.toUpperCase())}var pK=["/__fps_editor_authoring"],fK=[["manifest","/manifest"],["commit","/commit"],["editor-scene","/editor-scene"],["editor-asset-library","/editor-asset-library"],["project-files","/project-files"],["project-media","/project-media"],["project-file","/project-file"],["save-editor-scene","/save-editor-scene"],["file","/file"],["exec","/exec"]];function iC(e,t={}){let r=new URL(e??"","http://localhost").pathname,n=t.prefixes??pK,o=gK(r,n);if(!o)return null;let a=r.slice(o.length)||"/",i=hK(a);return i?{route:a,routeName:i,prefix:o}:null}function gK(e,t){return t.find(r=>e.startsWith(r))??null}function hK(e){return fK.find(([,t])=>e.startsWith(t))?.[0]??null}function bt(e,t){return{statusCode:e,body:t}}function df(e){return{statusCode:e,body:null}}function sC(e){return typeof e=="string"?e:`${JSON.stringify(e??{},null,2)}
|
|
8
|
+
`}function cC(e){let r=e.match(/(?:^|\s)--payload(?:=|\s+)("[^"]+"|'[^']+'|\S+)/)?.[1]??"";return r.startsWith('"')&&r.endsWith('"')||r.startsWith("'")&&r.endsWith("'")?r.slice(1,-1):r}async function dC(e,t){let r=iC(e.url);if(!r)return null;let n=(e.method??"GET").toUpperCase();if(n==="OPTIONS")return df(204);try{if(bK(r.routeName)){if(n!=="GET")return bt(405,{ok:!1,error:"method_not_allowed"});if(r.routeName==="project-file"){let a=new URL(e.url??"","http://localhost").searchParams.get("path")?.trim()??"";if(!a)return bt(400,{ok:!1,error:"missing_file_path"});let i=await t.loadProjectFile?.({path:a,route:r});return bt(200,i??{ok:!1,error:"not_found"})}return bt(200,await yK(r,t))}if(n!=="POST")return bt(405,{ok:!1,error:"method_not_allowed"});let o=e.body??await t.readBody?.(e,r)??{};return await SK(r,o,t)}catch(o){return bt(500,{ok:!1,error:o instanceof Error?o.message:String(o),code:typeof o?.code=="string"?o.code:"authoring_request_failed",details:at(o?.details)})}}function bK(e){return e==="manifest"||e==="editor-scene"||e==="editor-asset-library"||e==="project-files"||e==="project-file"||e==="project-media"}async function yK(e,t){return e.routeName==="manifest"&&t.loadManifest?t.loadManifest(e):e.routeName==="editor-scene"&&t.loadEditorScene?t.loadEditorScene(e):e.routeName==="editor-asset-library"&&t.loadEditorAssetLibrary?t.loadEditorAssetLibrary(e):e.routeName==="project-files"&&t.loadProjectFiles?t.loadProjectFiles(e):{ok:!1,error:"not_found"}}async function SK(e,t,r){return e.routeName==="file"?IK(e,t,r):e.routeName==="exec"?EK(e,t,r):e.routeName==="save-editor-scene"?TK(e,t,r):e.routeName==="commit"?bt(410,await AK(e,t,r)):bt(404,{ok:!1,error:"not_found"})}async function IK(e,t,r){let n=String(t.path??""),o=r.normalizeTransportPath?.(n)??n;if(!o)return bt(400,{ok:!1,error:"missing_file_path"});let a=t.content,i=sC(a),s=await r.writeFile?.({body:t,path:o,rawPath:n,content:a,text:i,route:e});return bt(200,s??{ok:!0,path:o})}async function EK(e,t,r){let n=String(t.cmd??""),o=cC(n);if(!o)return bt(400,{ok:!1,error:"missing_payload_arg",cmd:n});let a=r.normalizeTransportPath?.(o)??o,i=await r.runCommand?.({body:t,cmd:n,payloadPath:a,rawPayloadPath:o,route:e});return bt(200,i??{ok:!0,cmd:n})}async function TK(e,t,r){let n=t.mode==="prepare-platform-save"?"prepare-platform-save":"local-commit-save",o=await r.saveEditorScene?.({body:t,mode:n,rawEditorScene:t.editorScene,route:e});return bt(200,o??{ok:!1,error:"not_found"})}async function AK(e,t,r){return r.commit?.({body:t,route:e})??{ok:!1,error:"platform_commit_route_disabled",message:"Save through /__fps_editor_authoring/save-editor-scene so scene.main remains the authoring source of truth."}}function uC(e,t,r={}){let n=eC(e).document,o=t;Object.prototype.hasOwnProperty.call(o,"staticShadows")&&o.staticShadows!=null&&ia(o.staticShadows,"$.staticShadows");let{scene:a,...i}=t,s=structuredClone(i),c=sr(a)?a:void 0,d=Yn(n),u={...d,compilerId:QR,compilerVersion:ZR,compiledAt:new Date().toISOString()};s.schemaVersion=3,s.meta={...s.meta??{},generatedFrom:u};let l=c?.rootId||"root",m=n.scene.gameObjects.filter(A=>A.id!==l),p=OK(n,r.materialShaderDefinitions,!0),h={...n,scene:{...n.scene,materialAssets:p}},g=m.flatMap(A=>FK(A,d,h,r)),f=g.map(mC);xK(l,f),MK(l,f);let y={rootId:l,assets:h.assets.filter(wK).map(vK),nodes:f,materialAssets:p,materials:structuredClone(c?.materials??[]),textures:structuredClone(c?.textures??[])};return s.scene=y,s.plugins=BK(s.plugins,r.shadowMapExperimentConfig,g,l,d.revision),nm(s),{sceneConfig:s,summary:{assetCount:y.assets.length,gameObjectCount:n.scene.gameObjects.length,nodeCount:y.nodes.length}}}function mC(e){if(!Object.prototype.hasOwnProperty.call(e,"shadowMapExperimentInferredUpdateClass"))return e;let{shadowMapExperimentInferredUpdateClass:t,...r}=e;return r}function xK(e,t){let r=new Set([e]);for(let n=0;n<t.length;n+=1){let o=t[n].id;if(r.has(o)){let a=new Error(`schema.invalidReference: $.scene.nodes[${n}].id`);throw Object.assign(a,{code:"schema.invalidReference",path:`$.scene.nodes[${n}].id`,nodeId:o}),a}r.add(o)}}function MK(e,t){let r=new Map(t.map(n=>[n.id,n]));for(let n=0;n<t.length;n+=1){let o=t[n];if(!(o.source?.component!=="PrefabMarker"||!("marker"in o)||!o.marker))for(let a of DK(o.marker)){let i=r.get(a.target.id);if(a.target.id!==e&&(!i||i.source?.objectId===o.source.objectId))continue;let s=`$.scene.nodes[${n}].marker.${a.path}.id`,c=new Error(`schema.invalidReference: ${s}`);throw Object.assign(c,{code:"schema.invalidReference",path:s,nodeId:o.id,targetId:a.target.id}),c}}}function DK(e){let t=[];return e.target&&t.push({path:"target",target:e.target}),e.geometry.kind==="point"&&e.geometry.target&&t.push({path:"geometry.target",target:e.geometry.target}),e.geometry.kind==="object-bounds"&&t.push({path:"geometry.target",target:e.geometry.target}),t}function OK(e,t,r=!1){let n=structuredClone(e.scene.materialAssets??[]);for(let a=0;a<n.length;a+=1){let i=n[a];if(fr(i.shaderId))continue;let s=t?.get(i.shaderId);if(!s){if(!r)continue;throw zS("material.shaderDefinitionNotFound",`$.scene.materialAssets[${a}].shaderId`,`Shader Definition was not found: ${i.shaderId}`)}if(i.definitionVersion!==s.version)throw zS("material.shaderDefinitionVersionMismatch",`$.scene.materialAssets[${a}].definitionVersion`,`Material ${i.id} uses Definition v${String(i.definitionVersion)} but ${i.shaderId} is v${s.version}.`);let c=js(i.shaderId,i.properties,`$.scene.materialAssets[${a}].properties`,t);if(c[0])throw zS("material.propertiesInvalid",c[0].path,c[0].message)}let o=Tm(RK(e,n));if(!o.ok)throw new Error(`editor_scene_material_assets_missing: ${o.missingMaterialAssetIds.join(", ")}`);return n}function zS(e,t,r){return Object.assign(new Error(`${e}: ${r}`),{code:e,path:t})}function RK(e,t){let r={...e,scene:{...e.scene,materialAssets:t}};return{...r,scene:{...r.scene,gameObjects:[...r.scene.gameObjects.map(n=>{let o=IC(n,r);if(o)return{...n,overrides:o};if(!("overrides"in n))return n;let a={...n};return delete a.overrides,a}),...CK(r)]}}}function CK(e){let t=[];for(let r of e.scene.gameObjects){let n=yi(e,r);!n.definition||!lf(n.definition)||t.push(...pC({editorDocument:e,prefabAsset:n.definition,hostGameObject:r,instanceOverrides:r.overrides,visitedPrefabIds:new Set}))}return t}function pC(e){if(e.visitedPrefabIds.has(e.prefabAsset.id))return[];e.visitedPrefabIds.add(e.prefabAsset.id);let t=yC(un(e.prefabAsset),yr(e.prefabAsset)??""),r=t.find(a=>a.id===yr(e.prefabAsset));if(!r)return e.visitedPrefabIds.delete(e.prefabAsset.id),[];let n=SC(t,e.prefabAsset),o=[];for(let a of t){if(a.kind==="prefabInstance"&&a.childPrefabId){let d=e.editorDocument.assets.find(u=>u.id===a.childPrefabId);if(d&&lf(d)){o.push(...pC({editorDocument:e.editorDocument,prefabAsset:d,hostGameObject:e.hostGameObject,instanceOverrides:a.overrides,visitedPrefabIds:new Set(e.visitedPrefabIds)}));continue}continue}let i=XK(e.hostGameObject,a);if(!i)continue;let s=a.kind==="model"&&a.sourceAssetId?e.editorDocument.assets.find(d=>d.id===a.sourceAssetId):void 0,c=WS({hostGameObject:i,prefabAsset:e.prefabAsset,rootNode:r,node:a,asset:s,editorDocument:e.editorDocument,instanceOverrides:a.id===n?e.instanceOverrides:void 0});c&&o.push({...i,overrides:c})}return e.visitedPrefabIds.delete(e.prefabAsset.id),o}function wK(e){return e.type==="glb"||e.type==="texture"}function vK(e){let t=jK(e),r=e.type==="glb"?NK(e):[],n=kK(e.external),o=_K(e.defaults);return{id:e.id,type:e.type,...e.guid?{guid:e.guid}:{},...t?{url:t}:{},...typeof e.warmupCount=="number"&&Number.isInteger(e.warmupCount)&&e.warmupCount>=0?{warmupCount:e.warmupCount}:{},...typeof e.singleton=="boolean"?{singleton:e.singleton}:{},...typeof e.materialMode=="string"?{materialMode:e.materialMode}:{},...o!==void 0?{defaults:o}:{},...n?{external:n}:{},...r.length>0?{materialSlots:r}:{}}}function _K(e){if(!e)return;let t=structuredClone(e);return sr(t)?(delete t.shadowMapExperiment,Object.keys(t).length>0?t:void 0):t}function kK(e){let t=sr(e)?e:void 0,r=Go(t?.platformAssetId),n=Go(t?.assetUrl);if(!(!r&&!n))return{...r?{platformAssetId:r}:{},...n?{assetUrl:n}:{}}}function jK(e){let t=sr(e.metadata)?e.metadata:void 0,r=sr(e.external)?e.external:void 0;return Go(t?.url)??Go(r?.assetUrl)??void 0}function NK(e){let t=sr(e.metadata)?e.metadata:void 0,r=Array.isArray(t?.materialSlots)?t.materialSlots:[],n=GK(t?.assetAnalysis);return r.flatMap(o=>{if(!sr(o))return[];let a=Go(o.slotId);if(!a)return[];let i=Go(o.label),s=(Array.isArray(o.sourceSurfaces)?o.sourceSurfaces:[]).flatMap(c=>{if(!sr(c))return[];let d=Go(c.ownerNodePath),u=bl(c.meshIndex),l=bl(c.primitiveIndex);if(!d||u==null||l==null)return[];let m=bl(c.nodeIndex),p=LK(Array.isArray(c.nodeIndexPath)?c.nodeIndexPath:[]),h=bl(c.sourceMaterialIndex),g=Go(c.sourceMeshName)??n.get(u);return[{ownerNodePath:d,...m==null?{}:{nodeIndex:m},...p.length>0?{nodeIndexPath:p}:{},meshIndex:u,primitiveIndex:l,...h==null?{}:{sourceMaterialIndex:h},...g?{sourceMeshName:g}:{}}]});return s.length===0?[]:[{slotId:a,...i?{label:i}:{},sourceSurfaces:s}]})}function GK(e){let t=sr(e)?e:void 0,r=Array.isArray(t?.meshes)?t.meshes:[];return new Map(r.flatMap(n=>{if(!sr(n))return[];let o=bl(n.meshIndex),a=Go(n.name);return o==null||!a?[]:[[o,a]]}))}function LK(e){return[...new Set(e.filter(t=>typeof t=="number"&&Number.isInteger(t)&&t>=0))]}function bl(e){return typeof e=="number"&&Number.isInteger(e)&&e>=0?e:void 0}function FK(e,t,r,n){let o=yi(r,e);return(o.definition&&lf(o.definition)?VK(e,o.definition,t,r,new Set,n):[$K(e,t,r,n)]).map(i=>{let s=i.kind==="instance"?r.assets.find(d=>d.id===i.instance.assetId):void 0,c=n.inferShadowMapExperimentUpdateClass?.({gameObject:e,runtimeNode:mC(i),...s?{asset:s}:{}})??zK(s);return{...i,shadowMapExperimentInferredUpdateClass:c}})}function $K(e,t,r,n={}){let o=ie(e),a=ct(e),i=la(e),s=ZK(e),c=We(e),d=IC(e,r),u=JP(e),l={sourceId:t.sourceId,sourceType:t.sourceType,revision:t.revision,...e.guid?{objectGuid:e.guid}:{},objectId:e.id,component:a?"ModelRenderer":i?"ImageRenderer":s||c==="primitive"?"PrimitiveRenderer":c==="transform"?"Transform":"GameObject"},m={id:e.id,...e.name?{name:e.name}:{},...e.parentId?{parentId:e.parentId}:{},...e.active===!1?{enabled:!1}:{},...e.shadow?{shadow:structuredClone(e.shadow)}:{},...KK(r,e,n),...u?{rendering:u}:{},source:l,...o&&"position"in o?{transform:{position:o.position,rotation:o.rotation,...o.scale?{scale:o.scale}:{}}}:{}};if(c==="primitive")return{...m,kind:"primitive",primitive:{shape:s?.shape??"cube"},...d?{overrides:d}:{}};if(i)return{...m,kind:"image",image:{assetId:i.assetId,size:{width:i.size.width,height:i.size.height}},...d?{overrides:d}:{}};if(!a){if(c==="transform"){let p=HK(e,n),h=p.transformType;delete p.transformType;let g=lC(h)??lC(e.transformType);return{...m,kind:"transform",...g?{transformType:g}:{},...e.camera?{camera:rW(e.camera)}:{},...e.light?{light:EC(e.light)}:{},...e.marker?{marker:{label:e.name||e.id,...structuredClone(e.marker)}}:{},...p,...d?{overrides:d}:{}}}return{...m,kind:"group"}}return{...m,kind:"instance",instance:{assetId:a.assetId},...d?{overrides:d}:{}}}function BK(e,t,r,n,o){let a=(e??[]).filter(u=>u.pluginId!==xh);if(!t)return a;let i=r.find(u=>u.id===t.lightRef),s=i?.kind==="transform"&&i.light?.type==="directional"?i:void 0;if(!i&&t.enabled)throw new Error(`shadowMapExperiment.lightMissing:${t.lightRef}`);if(i&&!s&&t.enabled)throw new Error(`shadowMapExperiment.lightUnsupported:${t.lightRef}`);let c=s?.kind==="transform"&&s.light?.type==="directional"?[s.light.direction.x,s.light.direction.y,s.light.direction.z]:[0,-1,0],d=fA({revision:typeof o=="number"&&Number.isInteger(o)&&o>=0?o:0,scopeId:n,config:t,lightDirection:c,objects:r.filter(u=>u.kind==="instance"||u.kind==="primitive").map(u=>({entityId:u.id,renderableIds:[u.id],cast:u.shadow?.cast==="enabled",receive:u.shadow?.receive==="enabled",inferredUpdateClass:u.shadowMapExperimentInferredUpdateClass??"static"}))});return[...a,{pluginId:xh,schemaVersion:3,data:d}]}function zK(e){let t=sr(e?.metadata?.assetAnalysis)?e.metadata.assetAnalysis:void 0;if(!t)return"static";let r=VS(t.skinCount),n=VS(t.morphTargetCount);return r>0||n>0?"skinned":VS(t.animationCount)>0?"dynamic":"static"}function VS(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0?e:0}function VK(e,t,r,n,o,a){return fC({prefabAsset:t,sourceRef:r,editorDocument:n,hostGameObject:e,rootRuntimeId:e.id,rootParentId:e.parentId,rootName:e.name??t.displayName??t.id,rootTransform:ie(e)??void 0,rootActive:e.active,instanceOverrides:e.overrides,propertyPathPrefix:`assets.${t.id}.prefab.nodes`,visitedPrefabIds:o,compilerOptions:a})}function fC(e){if(e.visitedPrefabIds.has(e.prefabAsset.id))return[US({id:e.rootRuntimeId,name:e.rootName??e.prefabAsset.displayName??e.prefabAsset.id,parentId:e.rootParentId,transform:e.rootTransform,editorDocument:e.editorDocument,sourceRef:e.sourceRef,hostGameObject:e.hostGameObject,component:"PrefabCycle",propertyPath:e.propertyPathPrefix})];e.visitedPrefabIds.add(e.prefabAsset.id);let t=un(e.prefabAsset),r=yr(e.prefabAsset),n=r?t.find(d=>d.id===r):null;if(!n||t.length===0)return e.visitedPrefabIds.delete(e.prefabAsset.id),[US({id:e.rootRuntimeId,name:e.rootName??e.prefabAsset.displayName??e.prefabAsset.id,parentId:e.rootParentId,transform:e.rootTransform,editorDocument:e.editorDocument,sourceRef:e.sourceRef,hostGameObject:e.hostGameObject,component:"Prefab",propertyPath:e.propertyPathPrefix})];let o={instanceId:e.rootRuntimeId,rootNodeId:n.id},a=d=>zs(o,d.id),i=yC(t,n.id),s=SC(i,e.prefabAsset),c=[];for(let d of i){let u=a(d),l=d.id===n.id?e.rootParentId:a(t.find(m=>m.id===d.parentId)??n);if(d.kind==="prefabInstance"&&d.childPrefabId){let m=e.editorDocument.assets.find(p=>p.id===d.childPrefabId);if(m&&lf(m)){let p=d.id===n.id;c.push(...fC({prefabAsset:m,sourceRef:e.sourceRef,editorDocument:e.editorDocument,hostGameObject:e.hostGameObject,rootRuntimeId:u,rootParentId:l,rootName:p?e.rootName??d.name??m.displayName??m.id:d.name??m.displayName??m.id,rootTransform:p?e.rootTransform??d.transform:d.transform,rootActive:p?e.rootActive??d.defaults?.active??e.prefabAsset.prefab?.defaults?.active:d.defaults?.active,instanceOverrides:p?yl(yl(eo(e.prefabAsset.prefab?.overrides),eo(d.overrides)),eo(e.instanceOverrides)):d.overrides,propertyPathPrefix:`${e.propertyPathPrefix}.${d.id}.childPrefab.nodes`,visitedPrefabIds:new Set(e.visitedPrefabIds),compilerOptions:e.compilerOptions}));continue}c.push(US({id:u,name:d.name??d.childPrefabId??"Prefab Instance",parentId:l,transform:d.transform,sourceRef:e.sourceRef,editorDocument:e.editorDocument,hostGameObject:e.hostGameObject,component:"UnsupportedPrefabInstance",propertyPath:`${e.propertyPathPrefix}.${d.id}`}));continue}c.push(UK({node:d,rootNode:n,identityScope:o,prefabAsset:e.prefabAsset,runtimeId:u,parentId:l,sourceRef:e.sourceRef,editorDocument:e.editorDocument,hostGameObject:e.hostGameObject,rootRuntimeName:e.rootName,rootRuntimeTransform:e.rootTransform,rootRuntimeActive:e.rootActive,instanceOverrides:d.id===s?e.instanceOverrides:void 0,propertyPath:`${e.propertyPathPrefix}.${d.id}`,shadowFallbackMode:KS(e.compilerOptions)}))}return e.visitedPrefabIds.delete(e.prefabAsset.id),qK({compiledNodes:c,editorDocument:e.editorDocument,hostGameObject:e.hostGameObject,shadowFallbackMode:KS(e.compilerOptions)})}function UK(e){let t=e.node.id===e.rootNode.id,r=t?e.rootRuntimeTransform??e.node.transform:e.node.transform,n=e.node.kind==="model"&&e.node.sourceAssetId?e.editorDocument.assets.find(i=>i.id===e.node.sourceAssetId):void 0,o=e.node.kind==="model"||e.node.kind==="primitive",a=gC({id:e.runtimeId,name:t?e.rootRuntimeName??e.node.name??e.prefabAsset.displayName??e.prefabAsset.id:e.node.name,parentId:e.parentId,transform:r,active:t?e.rootRuntimeActive??e.node.defaults?.active??e.prefabAsset.prefab?.defaults?.active:e.node.defaults?.active,...o?{shadow:e.prefabAsset.prefab?.defaults?.shadow}:{},editorDocument:e.editorDocument,shadowFallbackMode:e.shadowFallbackMode,sourceRef:e.sourceRef,hostGameObject:e.hostGameObject,component:e.node.kind==="model"?"PrefabModel":e.node.kind==="primitive"?"PrefabPrimitive":e.node.kind==="light"?"PrefabLight":e.node.kind==="marker"?"PrefabMarker":"PrefabNode",propertyPath:e.propertyPath});if(e.node.kind==="model"&&e.node.sourceAssetId){let i=WS({hostGameObject:e.hostGameObject,prefabAsset:e.prefabAsset,rootNode:e.rootNode,node:e.node,asset:n,editorDocument:e.editorDocument,instanceOverrides:e.instanceOverrides});return{...a,kind:"instance",instance:{assetId:e.node.sourceAssetId},...i?{overrides:i}:{}}}if(e.node.kind==="primitive"){let i=WS({hostGameObject:e.hostGameObject,prefabAsset:e.prefabAsset,rootNode:e.rootNode,node:e.node,asset:void 0,editorDocument:e.editorDocument,instanceOverrides:e.instanceOverrides});return{...a,kind:"primitive",primitive:{shape:e.node.primitive?.shape??"cube"},...i?{overrides:i}:{}}}return e.node.kind==="light"?{...a,kind:"transform",transformType:"light",...e.node.light?{light:EC(e.node.light)}:{}}:e.node.kind==="marker"&&e.node.marker?{...a,kind:"transform",marker:{label:e.node.name??e.node.id,...wd(e.node.marker,e.identityScope)}}:{...a,kind:"group"}}function US(e){return{...gC({id:e.id,name:e.name,parentId:e.parentId,transform:e.transform,editorDocument:e.editorDocument,shadowFallbackMode:e.shadowFallbackMode,sourceRef:e.sourceRef,hostGameObject:e.hostGameObject,component:e.component,propertyPath:e.propertyPath}),kind:"group"}}function HK(e,t){let r=t.readCustomTransformRuntimeData?.(e);return r&&typeof r=="object"&&!Array.isArray(r)?structuredClone(r):{}}function gC(e){return{id:e.id,...e.name?{name:e.name}:{},...e.parentId?{parentId:e.parentId}:{},...e.active===!1?{enabled:!1}:{},...e.shadow?{shadow:structuredClone(e.shadow)}:{},...WK(e),source:{sourceId:e.sourceRef.sourceId,sourceType:e.sourceRef.sourceType,revision:e.sourceRef.revision,...e.hostGameObject.guid?{objectGuid:e.hostGameObject.guid}:{},objectId:e.hostGameObject.id,component:e.component,propertyPath:e.propertyPath},...e.transform&&"position"in e.transform?{transform:{position:e.transform.position,rotation:e.transform.rotation,...e.transform.scale?{scale:e.transform.scale}:{}}}:{}}}function KK(e,t,r){let n=Bm({document:e,casterId:t.id,caster:t,fallbackMode:KS(r)});return qS(n,!!t.shadow)?{shadowPlan:n}:{}}function WK(e){if(!e.editorDocument)return{};let t=Tt(e.shadow),r=!!e.shadow||!!t.shadow;if(!r&&t.diagnostics.length===0)return{};let n=Bm({document:e.editorDocument,casterId:e.hostGameObject.id,caster:e.hostGameObject,resolvedSettings:t.shadow,fallbackMode:e.shadowFallbackMode}),o={...n,casterId:e.id,diagnostics:[...t.diagnostics,...n.diagnostics].map(a=>({...a,casterId:a.casterId===e.hostGameObject.id||!a.casterId?e.id:a.casterId}))};return qS(o,r)?{shadowPlan:o}:{}}function qS(e,t){return t||e.backend!=="none"||e.diagnostics.length>0}function qK(e){if(e.compiledNodes.length===0)return e.compiledNodes;let t=new Set(e.compiledNodes.map(i=>i.id)),r=e.compiledNodes.map(i=>YK(i)),n={...e.editorDocument,scene:{...e.editorDocument.scene,gameObjects:[...e.editorDocument.scene.gameObjects.filter(i=>!t.has(i.id)),...r]}},o=e.compiledNodes.filter(i=>i.shadow?.receive==="enabled").map(i=>i.id),a=r.find(i=>i.light?.type==="directional"&&i.active!==!1)?.id;return e.compiledNodes.map((i,s)=>{let c=r[s],d=Bm({document:n,casterId:i.id,caster:c,explicitReceiverIds:o,...a?{defaultLightId:a}:{},fallbackMode:e.shadowFallbackMode}),u=!!i.shadow;if(!qS(d,u)){if(!i.shadowPlan)return i;let l={...i};return delete l.shadowPlan,l}return{...i,shadowPlan:d}})}function KS(e){let t=mt(e.renderingProfile).shadows,r=t.planar.enabled?"planar":t.blob.enabled?"blob":t.staticProjected.enabled?"static":t.enabled?"dynamic":"none";return r==="planar"?"projected":r}function YK(e){let t=[];return e.transform&&t.push({type:"Transform",position:e.transform.position,rotation:e.transform.rotation,...e.transform.scale?{scale:e.transform.scale}:{}}),e.kind==="instance"&&t.push({type:"ModelRenderer",assetId:e.instance.assetId}),e.kind==="image"&&t.push({type:"ImageRenderer",assetId:e.image.assetId,size:structuredClone(e.image.size)}),{id:e.id,...e.name?{name:e.name}:{},kind:e.kind==="image"?"transform":e.kind,...e.parentId?{parentId:e.parentId}:{},...e.enabled===!1?{active:!1}:{},...e.shadow?{shadow:{cast:e.shadow.cast==="enabled"?"enabled":"none",receive:e.shadow.receive==="enabled"?"enabled":"none"}}:{},...e.kind==="primitive"?{primitive:{shape:e.primitive.shape}}:{},...e.kind==="transform"&&e.transformType?{transformType:e.transformType}:{},...e.kind==="transform"&&e.light?{light:e.light}:{},...e.kind==="transform"&&e.camera?{camera:e.camera}:{},...e.kind==="transform"&&e.marker?{marker:structuredClone(e.marker)}:{},components:t}}function WS(e){let t=e.node.kind==="model"&&e.node.sourceAssetId?bC(e.hostGameObject,e.node,e.node.sourceAssetId):e.hostGameObject,r=e.asset?.id,n=QK([HS(eo(e.prefabAsset.prefab?.overrides),e.prefabAsset.prefab?.sourceAssetId,e.asset),HS(eo(e.rootNode.overrides),e.rootNode.kind==="model"?e.rootNode.sourceAssetId:e.prefabAsset.prefab?.sourceAssetId,e.asset),e.node.id===e.rootNode.id?void 0:HS(eo(e.node.overrides),e.node.kind==="model"?e.node.sourceAssetId:r,e.asset)]),o=eo(e.instanceOverrides);return hC(yl(n,o),e.asset)}function HS(e,t,r){return hC(e,t&&t===r?.id?r:void 0)}function hC(e,t){if(!e?.materialSlotBindings)return e;let r=sr(t?.metadata)&&Array.isArray(t.metadata.materialSlots)?t.metadata.materialSlots:[],n=new Set(r.flatMap(i=>{let s=sr(i)&&typeof i.slotId=="string"?i.slotId.trim():"";return s?[s]:[]})),o=Object.fromEntries(Object.entries(e.materialSlotBindings).filter(([i])=>n.has(i))),a=structuredClone(e);return Object.keys(o).length>0?a.materialSlotBindings=o:delete a.materialSlotBindings,Object.keys(a).length>0?a:void 0}function bC(e,t,r){return{id:`${e.id}:${t.id}`,...t.name?{name:t.name}:{},kind:"instance",components:[...t.transform?[t.transform]:[],{type:"ModelRenderer",assetId:r}]}}function JK(e,t){return{id:`${e.id}:${t.id}`,...t.name?{name:t.name}:{},kind:"primitive",primitive:{shape:t.primitive?.shape??"cube"},components:[...t.transform?[t.transform]:[]]}}function XK(e,t){return t.kind==="model"&&t.sourceAssetId?bC(e,t,t.sourceAssetId):t.kind==="primitive"?JK(e,t):null}function QK(e){let t;for(let r of e){let n=eo(r);n&&(t=yl(t,n))}return t}function yC(e,t){let r=new Map;for(let s of e){if(!s.parentId)continue;let c=r.get(s.parentId)??[];c.push(s),r.set(s.parentId,c)}let n=[],o=new Set,a=s=>{if(!o.has(s.id)){o.add(s.id),n.push(s);for(let c of r.get(s.id)??[])a(c)}},i=e.find(s=>s.id===t);i&&a(i);for(let s of e)a(s);return n}function SC(e,t){let r=t.prefab?.sourceAssetId;return e.find(n=>n.kind==="model"&&n.sourceAssetId===r)?.id??e.find(n=>n.kind==="model")?.id}function lf(e){return br(e)&&e.prefab.compositionVersion===gi&&Array.isArray(e.prefab.nodes)&&e.prefab.nodes.length>0&&!!yr(e)}function ZK(e){return e.primitive??null}function IC(e,t){let r=We(e);if(r!=="instance"&&r!=="transform"&&r!=="primitive")return;let n=ct(e),o=n?t.assets.find(a=>a.id===n.assetId):void 0;return eW(e,t,o)}function eW(e,t,r){let n=eo(e.overrides),o=yi(t,e),a=eo(o.definition?.prefab?.overrides);return yl(a,n)}function yl(e,t){let r=xm(e,t);for(let n of[e,t])if(n)for(let[o,a]of Object.entries(n))tW(o)||a===void 0||(r??={},r[o]=structuredClone(a));return r&&Object.keys(r).length>0?r:void 0}function eo(e){if(!sr(e))return;let t=structuredClone(e);return Object.keys(t).length>0?t:void 0}function tW(e){return e==="materialBinding"||e==="materialSlotBindings"}function sr(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Go(e){return(typeof e=="string"?e.trim():"")||void 0}function lC(e){return typeof e=="string"?e:void 0}function rW(e){let t=structuredClone(e);return delete t.inspectorLanguage,t}function EC(e){return e.type==="directional"?Ds({schemaVersion:1,type:"directional",intensity:e.intensity,direction:gd(e.direction),diffuseColor:e.diffuseColor??Zd.diffuseColor}):Ds({schemaVersion:1,type:"hemispheric",intensity:e.intensity,diffuseColor:e.diffuseColor??Ni.diffuseColor,groundColor:e.groundColor??Ni.groundColor})}var nW=new Set(["leftToRight","rightToLeft","bottomToTop","topToBottom"]);function PC(e){let t=om(e),r={uiKind:e.uiKind,size:{width:e.size.width,depth:e.size.depth},layers:e.layers.map((n,o)=>oW(n,o)),rendering:{textureWidth:t.width,textureHeight:t.height}};return e.aspectSourceLayerId&&(r.aspectSourceLayerId=e.aspectSourceLayerId),typeof e.lockAspectToBorder=="boolean"&&(r.lockAspectToBorder=e.lockAspectToBorder),e.mask&&(r.mask={...typeof e.mask.enabled=="boolean"?{enabled:e.mask.enabled}:{},...e.mask.source==="roundedRect"||e.mask.source==="borderAlpha"||e.mask.source==="texture"?{source:e.mask.source}:{},...e.mask.textureId?{textureId:e.mask.textureId}:{},...typeof e.mask.cornerRadius=="number"&&Number.isFinite(e.mask.cornerRadius)?{cornerRadius:e.mask.cornerRadius}:{},...typeof e.mask.padding=="number"&&Number.isFinite(e.mask.padding)?{padding:e.mask.padding}:{}}),e.rendering&&(r.rendering={...r.rendering,...typeof e.rendering.alphaIndex=="number"&&Number.isFinite(e.rendering.alphaIndex)?{alphaIndex:e.rendering.alphaIndex}:{},...typeof e.rendering.diffuseTextureLevel=="number"&&Number.isFinite(e.rendering.diffuseTextureLevel)?{diffuseTextureLevel:e.rendering.diffuseTextureLevel}:{},...typeof e.rendering.emissiveTextureLevel=="number"&&Number.isFinite(e.rendering.emissiveTextureLevel)?{emissiveTextureLevel:e.rendering.emissiveTextureLevel}:{}}),r}function oW(e,t){let r=cc(e.rotationDeg??0)??0,n={id:e.id,role:e.role,zOrder:typeof e.zOrder=="number"&&Number.isFinite(e.zOrder)?e.zOrder:t,rect:aW(e.rect),...r!==0?{rotationDeg:r}:{},...typeof e.enabled=="boolean"?{enabled:e.enabled}:{},...typeof e.opacity=="number"&&Number.isFinite(e.opacity)?{opacity:e.opacity}:{}};return e.kind==="texture"?{...n,kind:"texture",...e.textureId?{textureId:e.textureId}:{},...e.tint?{tint:gc(e.tint)}:{},...e.imageFit?{imageFit:e.imageFit}:{}}:e.kind==="textureProgress"?{...n,kind:"textureProgress",...e.textureId?{textureId:e.textureId}:{},value:AC(e.value),...e.tint?{tint:gc(e.tint)}:{},...e.imageFit?{imageFit:e.imageFit}:{},...TC(e.direction)?{direction:e.direction}:{}}:e.kind==="color"?{...n,kind:"color",color:gc(e.color)}:e.kind==="progress"?{...n,kind:"progress",value:AC(e.value??0),color:gc(e.color),...TC(e.direction)?{direction:e.direction}:{}}:{...n,kind:"text",text:{value:e.text.value,color:gc(e.text.color),...e.text.fontFamily?{fontFamily:e.text.fontFamily}:{},...typeof e.text.fontSize=="number"&&Number.isFinite(e.text.fontSize)?{fontSize:e.text.fontSize}:{},...e.text.fontWeight!=null?{fontWeight:String(e.text.fontWeight)}:{},...e.text.strokeColor?{strokeColor:gc(e.text.strokeColor)}:{},...typeof e.text.strokeWidth=="number"&&Number.isFinite(e.text.strokeWidth)?{strokeWidth:e.text.strokeWidth}:{},...e.text.align==="left"||e.text.align==="center"||e.text.align==="right"?{align:e.text.align}:{},...e.text.baseline==="top"||e.text.baseline==="middle"||e.text.baseline==="bottom"?{baseline:e.text.baseline}:{}}}}function aW(e){return{x:e.x,z:e.z,width:e.width,depth:e.depth}}function gc(e){return{r:e.r,g:e.g,b:e.b,...typeof e.a=="number"?{a:e.a}:{}}}function TC(e){return typeof e=="string"&&nW.has(e)}function AC(e){return Number.isFinite(e)?Math.max(0,Math.min(1,e)):0}async function xC(e,t){let r=String(e.method??"GET").toUpperCase();if(r==="OPTIONS")return df(204);try{if(r==="GET"){let c=dW(await t.loadConfig?.()),d=c.renderingConfig;Nt(d);let u=mt(d);return bt(200,{ok:!0,...c.response,renderingConfig:cW(d),normalized:u,summary:Ms(u)})}if(r!=="POST")return bt(405,{ok:!1,error:"method_not_allowed"});let n=e.body??await t.readBody?.(e)??{},o=Sl(n.renderingConfig);if(!o)return bt(400,{ok:!1,error:"missing_rendering_config"});Nt(o);let a=mt(o),i=Ms(a),s=await t.saveConfig?.({body:n,renderingConfig:o,normalized:a,summary:i});return bt(200,{ok:!0,...s??{},renderingConfig:o,normalized:a,summary:i})}catch(n){let o=iW(n),a=sW(n);return bt(o?.startsWith("schema.")?400:500,{ok:!1,error:o??(n instanceof Error?n.message:String(n)),...a?{path:a}:{},details:Sl(n?.details)})}}function iW(e){let t=e?.code;return typeof t=="string"&&t?t:null}function sW(e){let t=e?.path;return typeof t=="string"&&t?t:null}function Sl(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function cW(e){return Sl(e)??{}}function dW(e){let t=Sl(e);return t&&Object.prototype.hasOwnProperty.call(t,"renderingConfig")?{renderingConfig:t.renderingConfig,response:Sl(t.response)??{}}:{renderingConfig:e??{},response:{}}}import u2 from"node:fs/promises";function MC(e,t={}){let r=t.generatedBy??"scripts/register-asset.mjs",n=t.codeKeyPolicy??"legacy",o=e.filter(d=>d.codeKey);if(n==="disabled"&&o.length>0){let d=o[0];throw Object.assign(new Error("manifest_code_key_disabled"),{name:"PlayableEditorAssetCatalogGenerationError",details:{codeKeyPolicy:n,assetId:d.assetId,codeKey:d.codeKey}})}let a=e.map(d=>`import ${nf(d.assetId)} from ${JSON.stringify(`${d.relativePath}?url`)};`).join(`
|
|
9
|
+
`),i=e.map(d=>{let u=MA(d.relativePath);if(!u)throw new Error(`Generated asset catalog entry has no file extension: ${d.assetId}`);if(!DA(u))throw new Error(`Generated asset catalog entry has unsupported format: ${d.assetId} (${u})`);let l=[`guid: ${JSON.stringify(d.guid)}`,`assetId: ${JSON.stringify(d.assetId)}`,`kind: ${JSON.stringify(d.kind)}`,`displayName: ${JSON.stringify(d.displayName)}`,`url: ${nf(d.assetId)}`,`format: ${JSON.stringify(u)}`,`relativePath: ${JSON.stringify(d.relativePath)}`,d.originalFileName?`originalFileName: ${JSON.stringify(d.originalFileName)}`:"",d.codeKey?`codeKey: ${JSON.stringify(d.codeKey)}`:"",d.category?`category: ${JSON.stringify(d.category)}`:"",typeof d.placeable=="boolean"?`placeable: ${JSON.stringify(d.placeable)}`:"",typeof d.warmupCount=="number"?`warmupCount: ${JSON.stringify(d.warmupCount)}`:"",typeof d.singleton=="boolean"?`singleton: ${JSON.stringify(d.singleton)}`:"",d.materialMode?`materialMode: ${JSON.stringify(d.materialMode)}`:"",d.defaults?`defaults: ${JSON.stringify(d.defaults)}`:"",d.contentHash?`contentHash: ${JSON.stringify(d.contentHash)}`:"",typeof d.byteSize=="number"?`byteSize: ${JSON.stringify(d.byteSize)}`:"",d.external?`external: ${JSON.stringify(d.external)}`:"",d.metadata?`metadata: ${JSON.stringify(d.metadata)}`:"",d.createdAt?`createdAt: ${JSON.stringify(d.createdAt)}`:"",d.updatedAt?`updatedAt: ${JSON.stringify(d.updatedAt)}`:""].filter(Boolean).join(", ");return` ${JSON.stringify(d.assetId)}: { ${l} },`}).join(`
|
|
10
|
+
`),s=new Map;for(let d of o)s.set(d.codeKey,d.assetId);let c=[...s].map(([d,u])=>` ${JSON.stringify(d)}: ${JSON.stringify(u)},`).join(`
|
|
11
|
+
`);return[`// This file is generated by ${r}.`,"// Do not edit by hand.","",a,"",'export type GeneratedAssetCatalogKind = "model" | "texture" | "image" | "sound";',"","export interface GeneratedAssetCatalogEntry {"," guid: string;"," assetId: string;"," kind: GeneratedAssetCatalogKind;"," displayName: string;"," url: string;"," format: `.${string}`;"," relativePath: string;"," originalFileName?: string;",...n==="legacy"?[" /** @deprecated Use the canonical assetId for persisted and runtime identity. */"," codeKey?: string;"]:[]," category?: string;"," placeable?: boolean;"," warmupCount?: number;"," singleton?: boolean;"," materialMode?: string;"," defaults?: Record<string, unknown>;"," contentHash?: string;"," byteSize?: number;"," external?: { platformAssetId?: string; assetPath?: string; assetUrl?: string };"," metadata?: Record<string, unknown>;"," createdAt?: string;"," updatedAt?: string;","}","","export const GENERATED_ASSET_CATALOG: Record<string, GeneratedAssetCatalogEntry> = {",i,"};","","export const GENERATED_ASSET_URL_MAP = Object.fromEntries("," Object.entries(GENERATED_ASSET_CATALOG).map(([assetId, entry]) => [assetId, entry.url]),",") as Record<string, string>;","","export const GENERATED_MODEL_ASSET_URL_MAP = Object.fromEntries(",' Object.entries(GENERATED_ASSET_CATALOG).filter(([, entry]) => entry.kind === "model").map(([assetId, entry]) => [assetId, entry.url]),',") as Record<string, string>;","","export const GENERATED_TEXTURE_ASSET_URL_MAP = Object.fromEntries(",' Object.entries(GENERATED_ASSET_CATALOG).filter(([, entry]) => entry.kind === "texture").map(([assetId, entry]) => [assetId, entry.url]),',") as Record<string, string>;","","export const GENERATED_IMAGE_ASSET_URL_MAP = Object.fromEntries(",' Object.entries(GENERATED_ASSET_CATALOG).filter(([, entry]) => entry.kind === "image").map(([assetId, entry]) => [assetId, entry.url]),',") as Record<string, string>;","","export const GENERATED_SOUND_ASSET_URL_MAP = Object.fromEntries(",' Object.entries(GENERATED_ASSET_CATALOG).filter(([, entry]) => entry.kind === "sound").map(([assetId, entry]) => [assetId, entry.url]),',") as Record<string, string>;","","/** @deprecated Resolve assets by canonical assetId through GENERATED_ASSET_CATALOG. */","export const ASSET_IDS = {",c,"} as const satisfies Record<string, string>;"].join(`
|
|
12
|
+
`)+`
|
|
13
|
+
`}import YS from"node:fs/promises";import Wr from"node:path";var JS=5;async function Tl(e){let t={...e.existingMetadata??{},...e.payloadMetadata??{}},r=await CC(e);if(r?(t.assetAnalysis=r,t.assetAnalysisStatus="complete"):(delete t.assetAnalysis,t.assetAnalysisStatus="unavailable"),e.kind==="texture"||e.kind==="image"){let o=vW(e.sourcePath,t);return o&&(t.textureUsage=o.usage,t.capabilities={...Pt(t.capabilities)?t.capabilities:{},materialTexture:o.materialTexture,environmentTexture:o.environmentTexture}),Object.keys(t).length>0?t:null}if(e.kind!=="model")return Object.keys(t).length>0?t:null;t.assetMetadataVersion=JS;let n=await wC(e.sourcePath,{assetGuid:e.guid,assetId:e.assetId,cwd:e.cwd,assetsDir:e.assetsDir,existingMaterialSlots:t.materialSlots});return n.length===0?delete t.materialSlots:t.materialSlots=n,Object.keys(t).length>0?t:null}async function CC(e){return e.kind==="model"?lW(e.sourcePath):e.kind==="texture"||e.kind==="image"?uW(e.sourcePath):null}async function wC(e,t={}){try{let r=await vC(e);return TW(r,{...t,sourcePath:e})}catch{return[]}}async function vC(e){let t=Wr.extname(e).toLowerCase();if(t===".gltf")return JSON.parse(await YS.readFile(e,"utf8"));if(t!==".glb")return null;let r=await YS.readFile(e);if(r.length<20||r.toString("utf8",0,4)!=="glTF"||r.readUInt32LE(4)!==2||r.readUInt32LE(8)>r.length)return null;let a=12;for(;a+8<=r.length;){let i=r.readUInt32LE(a),s=r.readUInt32LE(a+4);if(a+=8,a+i>r.length)return null;if(s===1313821514){let c=r.toString("utf8",a,a+i).replace(/\0+$/g,"");return JSON.parse(c)}a+=i}return null}async function lW(e){try{let t=await vC(e);if(!t||typeof t!="object")return null;let r=Array.isArray(t.scenes)?t.scenes:[],n=Array.isArray(t.nodes)?t.nodes:[],o=Array.isArray(t.meshes)?t.meshes:[],a=Array.isArray(t.materials)?t.materials:[],i=Array.isArray(t.textures)?t.textures:[],s=Array.isArray(t.images)?t.images:[],c=Array.isArray(t.animations)?t.animations:[],d=Array.isArray(t.skins)?t.skins:[],u=Array.isArray(t.accessors)?t.accessors:[],l=GC(t),m=LC(n),p=new Set(l),h=o.reduce((T,D)=>T+(Array.isArray(D?.primitives)?D.primitives.length:0),0),g=o.reduce((T,D)=>T+(Array.isArray(D?.primitives)?D.primitives.reduce((P,C)=>P+(Array.isArray(C?.targets)?C.targets.length:0),0):0),0),f=hW({nodeCount:n.length,meshCount:o.length,primitiveCount:h,materialCount:a.length,textureCount:i.length,imageCount:s.length}),y=bW({nodeCount:n.length,meshCount:o.length,primitiveCount:h,materialCount:a.length,textureCount:i.length,imageCount:s.length,animationCount:c.length,skinCount:d.length,morphTargetCount:g,complexity:f});return{kind:"gltf",format:Wr.extname(e).toLowerCase()===".gltf"?"gltf":"glb",summary:`${n.length} nodes, ${o.length} meshes, ${h} primitives, ${a.length} materials`,complexity:f,sceneCount:r.length,nodeCount:n.length,meshCount:o.length,primitiveCount:h,materialCount:a.length,textureCount:i.length,imageCount:s.length,animationCount:c.length,skinCount:d.length,morphTargetCount:g,nodes:mW(n,o,a,u,m,p),meshes:pW(o,a,u),materials:fW(t),diagnostics:y}}catch{return null}}async function uW(e){try{let t=await YS.readFile(e),r=Wr.extname(e).toLowerCase(),n=r===".png"?yW(t):r===".jpg"||r===".jpeg"?SW(t):r===".webp"?IW(t):null;if(!n)return null;let o=EW(n);return{kind:"image",format:n.format,summary:`${n.width}x${n.height} ${n.mime}`,complexity:n.estimatedPixels>=4096*4096?"high":n.estimatedPixels>=2048*2048?"medium":"low",width:n.width,height:n.height,mime:n.mime,bitDepth:n.bitDepth,hasAlpha:n.hasAlpha,estimatedPixels:n.estimatedPixels,diagnostics:o}}catch{return null}}function mW(e,t,r,n,o,a){return e.slice(0,100).map((i,s)=>{let c=Number.isInteger(i?.mesh)?i.mesh:-1,d=c>=0&&c<t.length?t[c]:null,u=Array.isArray(i?.children)?i.children.filter(p=>Number.isInteger(p)):[],l=FC(e,o,a,s),m={nodeIndex:s,nodeIndexPath:BC(o,s),...typeof i?.name=="string"&&i.name.trim()?{name:i.name.trim()}:{},...l?{ownerNodePath:l}:{},...u.length>0?{children:u}:{}};if(d){let p=_C(d,r,n);Object.assign(m,{meshIndex:c,...typeof d?.name=="string"&&d.name.trim()?{meshName:d.name.trim()}:{},primitiveCount:p.length,...p.length>0?{primitives:p}:{}})}return m})}function pW(e,t,r){return e.slice(0,50).map((n,o)=>{let a=Array.isArray(n?.primitives)?n.primitives:[],i=[...new Set(a.map(c=>Number.isInteger(c?.material)?c.material:-1).filter(c=>c>=0))],s=_C(n,t,r);return{meshIndex:o,...typeof n?.name=="string"&&n.name.trim()?{name:n.name.trim()}:{},primitiveCount:a.length,...s.length>0?{primitives:s}:{},...i.length>0?{materialIndices:i}:{},...i.length>0?{materialNames:i.map(c=>{let d=t[c];return typeof d?.name=="string"?d.name.trim():""}).filter(Boolean)}:{}}})}function _C(e,t,r){let n=Pt(e)?e:{};return(Array.isArray(n.primitives)?n.primitives:[]).map((a,i)=>{let s=Number.isInteger(a?.material)?a.material:-1,c=s>=0?t[s]:null,d=typeof c?.name=="string"&&c.name.trim()?c.name.trim():"",u=zC(a,r),l=VC(a,r);return{primitiveIndex:i,...Number.isInteger(a?.mode)?{mode:a.mode}:{},...s>=0?{sourceMaterialIndex:s}:{},...d?{materialName:d}:{},...Number.isFinite(u)?{triangleCount:u}:{},...l?{boundingBox:l}:{}}})}function fW(e){return(Array.isArray(e?.materials)?e.materials:[]).slice(0,50).map((r,n)=>{let o=r?.pbrMetallicRoughness&&typeof r.pbrMetallicRoughness=="object"?r.pbrMetallicRoughness:{},a=gW(r,o);return{sourceMaterialIndex:n,...typeof r?.name=="string"&&r.name.trim()?{materialName:r.name.trim()}:{},...Array.isArray(o.baseColorFactor)?{baseColorFactor:o.baseColorFactor.slice(0,4)}:{},metallicFactor:Number.isFinite(o.metallicFactor)?o.metallicFactor:1,roughnessFactor:Number.isFinite(o.roughnessFactor)?o.roughnessFactor:1,alphaMode:jC(r?.alphaMode)??"opaque",...Number.isFinite(r?.alphaCutoff)?{alphaCutoff:r.alphaCutoff}:{},...a.length>0?{textureSlots:a}:{}}})}function gW(e,t){let r=[];return Il(r,"baseColor",t?.baseColorTexture),Il(r,"metallicRoughness",t?.metallicRoughnessTexture),Il(r,"normal",e?.normalTexture),Il(r,"occlusion",e?.occlusionTexture),Il(r,"emissive",e?.emissiveTexture),r}function Il(e,t,r){!Pt(r)||!Number.isInteger(r.index)||e.push({slot:t,textureIndex:r.index,...Number.isFinite(r.texCoord)?{texCoord:r.texCoord}:{}})}function hW(e){return e.nodeCount>=300||e.meshCount>=250||e.primitiveCount>=300||e.materialCount>=200||e.textureCount>=80||e.imageCount>=80?"high":e.nodeCount>=100||e.meshCount>=80||e.primitiveCount>=100||e.materialCount>=50||e.textureCount>=24||e.imageCount>=24?"medium":"low"}function bW(e){let t=[];return e.complexity==="high"&&t.push({severity:"warning",source:"asset",code:"asset.analysis.highComplexity",message:"GLTF asset is structurally complex; agent should place and inspect it before duplicating or using dense shadows.",details:{nodeCount:e.nodeCount,meshCount:e.meshCount,primitiveCount:e.primitiveCount,materialCount:e.materialCount,textureCount:e.textureCount,imageCount:e.imageCount}}),(e.animationCount>0||e.skinCount>0||e.morphTargetCount>0)&&t.push({severity:"info",source:"asset",code:"asset.analysis.riggedOrAnimated",message:"GLTF asset contains animation, skin, or morph target data.",details:{animationCount:e.animationCount,skinCount:e.skinCount,morphTargetCount:e.morphTargetCount}}),t}function yW(e){if(e.length<33||e[0]!==137||e.toString("ascii",1,4)!=="PNG"||e[4]!==13||e[5]!==10||e[6]!==26||e[7]!==10||e.toString("ascii",12,16)!=="IHDR")return null;let r=e.readUInt32BE(16),n=e.readUInt32BE(20),o=e[24],a=e[25],i=!1,s=33;for(;s+12<=e.length;){let c=e.readUInt32BE(s),d=s+12+c;if(d>e.length)break;let u=e.toString("ascii",s+4,s+8);if(u==="tRNS"){i=!0;break}if(u==="IDAT"||u==="IEND")break;s=d}return{format:"png",mime:"image/png",width:r,height:n,bitDepth:o,hasAlpha:a===4||a===6||i,estimatedPixels:r*n}}function SW(e){if(e.length<4||e[0]!==255||e[1]!==216)return null;let t=2;for(;t+9<e.length;){if(e[t]!==255){t+=1;continue}let r=e[t+1],n=e.readUInt16BE(t+2);if(n<2)return null;if(r>=192&&r<=207&&![196,200,204].includes(r)&&t+8<e.length){let a=e[t+4],i=e.readUInt16BE(t+5),s=e.readUInt16BE(t+7);return{format:"jpeg",mime:"image/jpeg",width:s,height:i,bitDepth:a,hasAlpha:!1,estimatedPixels:s*i}}t+=2+n}return null}function IW(e){if(e.length<30||e.toString("ascii",0,4)!=="RIFF"||e.toString("ascii",8,12)!=="WEBP")return null;let t=e.toString("ascii",12,16);if(t==="VP8X"&&e.length>=30){let r=e[20],n=DC(e,24)+1,o=DC(e,27)+1;return{format:"webp",mime:"image/webp",width:n,height:o,hasAlpha:(r&16)!==0,estimatedPixels:n*o}}if(t==="VP8 "&&e.length>=30){let r=e.readUInt16LE(26)&16383,n=e.readUInt16LE(28)&16383;return{format:"webp",mime:"image/webp",width:r,height:n,hasAlpha:!1,estimatedPixels:r*n}}if(t==="VP8L"&&e.length>=25&&e[20]===47){let r=e.readUInt32LE(21),n=(r&16383)+1,o=(r>>14&16383)+1;return{format:"webp",mime:"image/webp",width:n,height:o,hasAlpha:!0,estimatedPixels:n*o}}return null}function DC(e,t){return e[t]|e[t+1]<<8|e[t+2]<<16}function EW(e){let t=[];return e.estimatedPixels>=4096*4096&&t.push({severity:"warning",source:"asset",code:"asset.analysis.largeImage",message:"Image asset is large; agent should inspect texture usage before assigning it broadly.",details:{width:e.width,height:e.height,estimatedPixels:e.estimatedPixels}}),t}function TW(e,t={}){if(!e||typeof e!="object")return[];let r=Array.isArray(e.nodes)?e.nodes:[],n=Array.isArray(e.meshes)?e.meshes:[],o=Array.isArray(e.materials)?e.materials:[],a=PW(e,t),i=GC(e),s=LC(r),c=new Set(i),d=Array.isArray(e.accessors)?e.accessors:[],u=RW(t.existingMaterialSlots),l=[],m=new Map;for(let p=0;p<r.length;p+=1){let h=r[p],g=Number.isInteger(h?.mesh)?h.mesh:-1;if(g<0||g>=n.length)continue;let f=FC(r,s,c,p);if(!f)continue;let y=n[g],A=Array.isArray(y?.primitives)?y.primitives:[],T=kW(h,y,f),D=$C(y),P=BC(s,p);for(let C=0;C<A.length;C+=1){let E=A[C],S=jW(E,o),w=NC({ownerNodePath:f,nodeIndex:p,meshIndex:g,primitiveIndex:C}),M=zC(E,d),_=VC(E,d),B=A.length>1?`${T} / Primitive ${C}`:T,re={ownerNodePath:f,nodeIndex:p,nodeIndexPath:P,meshIndex:g,primitiveIndex:C,...D?{sourceMeshName:D}:{},...S.index>=0?{sourceMaterialIndex:S.index}:{},...Number.isFinite(M)?{triangleCount:M}:{},..._?{boundingBox:_}:{}};if(S.index>=0){let U=m.get(S.index)??{label:B,materialName:S.name,sourceSurfaces:[]};U.sourceSurfaces.push(re),m.set(S.index,U);continue}l.push({slotId:u.byExactSource.get(w)??CW({assetGuid:t.assetGuid,assetId:t.assetId,nodeIndex:p,meshIndex:g,primitiveIndex:A.length>1?C:void 0}),label:B,sourceSurfaces:[re]})}}for(let[p,h]of m){let g=h.sourceSurfaces.sort(kC);l.push({slotId:u.bySourceMaterialIndex.get(p)??wW({assetGuid:t.assetGuid,assetId:t.assetId,sourceMaterialIndex:p}),label:h.label,sourceSurfaces:g,...h.materialName?{materialName:h.materialName,materialNames:[h.materialName]}:{},...xW(a,[p])})}return l.sort(AW)}function AW(e,t){let r=Array.isArray(e.sourceSurfaces)?e.sourceSurfaces[0]:void 0,n=Array.isArray(t.sourceSurfaces)?t.sourceSurfaces[0]:void 0;return kC(r,n)}function kC(e,t){let r=String(e?.ownerNodePath??"").localeCompare(String(t?.ownerNodePath??""));if(r!==0)return r;let n=Number.isInteger(e?.nodeIndex)?e.nodeIndex:-1,o=Number.isInteger(t?.nodeIndex)?t.nodeIndex:-1;if(n!==o)return n-o;let a=Number.isInteger(e?.meshIndex)?e.meshIndex:-1,i=Number.isInteger(t?.meshIndex)?t.meshIndex:-1;if(a!==i)return a-i;let s=Number.isInteger(e?.primitiveIndex)?e.primitiveIndex:-1,c=Number.isInteger(t?.primitiveIndex)?t.primitiveIndex:-1;return s-c}function PW(e,t={}){let r=Array.isArray(e?.materials)?e.materials:[],n=[];for(let o=0;o<r.length;o+=1){let a=MW(e,o,t);a&&n.push(a)}return n}function xW(e,t){if(!t.length||!e.length)return{};let r=new Map(e.map(o=>[o.sourceMaterialIndex,o])),n=t.map(o=>r.get(o)).filter(Boolean);return n.length>0?{sourceMaterialProfiles:n}:{}}function MW(e,t,r={}){let n=Array.isArray(e?.materials)?e.materials[t]:null;if(!n||typeof n!="object")return null;let o={},a=[],i=n.pbrMetallicRoughness&&typeof n.pbrMetallicRoughness=="object"?n.pbrMetallicRoughness:{},s={},c=Array.isArray(i.baseColorFactor)?i.baseColorFactor:null,d=OC(c);d&&(s.color=d);let u=El(e,i.baseColorTexture,r,"baseColor.texture",s,"texture",a);Object.keys(s).length>0&&(o.baseColor={...s,brightness:1,saturation:1,contrast:1,hue:0});let l={};El(e,n.normalTexture,r,"normal.texture",l,"texture",a),Number.isFinite(n.normalTexture?.scale)?l.strength=n.normalTexture.scale:l.texture&&(l.strength=1),Object.keys(l).length>0&&(o.normal=l),o.metallic=Number.isFinite(i.metallicFactor)?i.metallicFactor:1,o.roughness=Number.isFinite(i.roughnessFactor)?i.roughnessFactor:1;let m={};El(e,i.metallicRoughnessTexture,r,"metallicRoughness.texture",m,"texture",a),Object.keys(m).length>0&&(o.metallicRoughness=m);let p={};El(e,n.occlusionTexture,r,"occlusion.texture",p,"texture",a),Number.isFinite(n.occlusionTexture?.strength)?p.strength=n.occlusionTexture.strength:p.texture&&(p.strength=1),Object.keys(p).length>0&&(o.occlusion=p);let h={},g=OC(Array.isArray(n.emissiveFactor)?n.emissiveFactor:null),f=g&&(g.r!==0||g.g!==0||g.b!==0);f&&(h.color=g),El(e,n.emissiveTexture,r,"emission.texture",h,"texture",a),f&&(h.intensity=1),Object.keys(h).length>0&&(o.emission=h);let y={},A=jC(n.alphaMode);if(A&&(y.mode=A),(A==="mask"||A==="blend")&&(c&&Number.isFinite(c[3])&&c[3]!==1&&(y.opacity=c[3]),Number.isFinite(n.alphaCutoff)?y.cutoff=n.alphaCutoff:A==="mask"&&(y.cutoff=.5),u.texture&&(y.texture=structuredClone(u.texture)),u.hint&&a.push({...u.hint,profilePath:"alpha.texture"})),Object.keys(y).length>0&&(o.alpha=y),Object.keys(o).length===0&&a.length===0)return null;let T=typeof n.name=="string"&&n.name.trim()?n.name.trim():"";return{sourceMaterialIndex:t,...T?{materialName:T}:{},...Object.keys(o).length>0?{profile:o}:{},...a.length>0?{textureHints:a}:{}}}function OC(e){if(!Array.isArray(e)||e.length<3)return null;let[t,r,n]=e;return Number.isFinite(t)&&Number.isFinite(r)&&Number.isFinite(n)?{r:t,g:r,b:n}:null}function jC(e){return e==="MASK"?"mask":e==="BLEND"?"blend":e==="OPAQUE"?"opaque":null}function El(e,t,r,n,o,a,i){let s=DW(e,t,r,n);return s.texture&&(o[a]=s.texture),s.hint&&i.push(s.hint),s}function DW(e,t,r,n){let o=Pt(t)?t:{},a=Number.isInteger(o.index)?o.index:-1;if(a<0)return{};let i=Array.isArray(e?.textures)?e.textures:[],s=Array.isArray(e?.images)?e.images:[],c=i[a],d=OW(c),u=d.imageIndex,l=u>=0?s[u]:null,m=typeof l?.uri=="string"?l.uri.trim():"",p=/^data:/i.test(m),h={profilePath:n,textureIndex:a,...u>=0?{imageIndex:u}:{},...d.previewImageIndex>=0?{previewImageIndex:d.previewImageIndex}:{},...m&&!p?{uri:m}:{},...Number.isInteger(l?.bufferView)?{bufferView:l.bufferView}:{},...typeof l?.mimeType=="string"&&l.mimeType.trim()?{mimeType:l.mimeType.trim()}:{}};if(l?.bufferView!=null)return{hint:{...h,reason:"embedded-texture"}};if(!m)return{hint:{...h,reason:"missing-image-uri"}};if(p)return{hint:{...h,reason:"embedded-texture"}};if(/^https?:\/\//i.test(m)||m.startsWith("/"))return{texture:{url:m}};let g=m;try{g=decodeURIComponent(m)}catch{return{hint:{...h,reason:"unresolved-external-texture"}}}let f=Wr.dirname(String(r.sourcePath??"")),y=Wr.resolve(f,g),A=r.assetsDir?Wr.resolve(r.assetsDir):"",T=r.cwd?Wr.resolve(r.cwd):"",D=A?Wr.relative(A,y):"../";return A&&T&&D&&!D.startsWith("..")&&!Wr.isAbsolute(D)?{texture:{url:`/${Wr.relative(T,y).split(Wr.sep).join("/")}`},hint:{...h,reason:"external-texture"}}:{hint:{...h,reason:"external-texture"}}}function OW(e){let t=Pt(e)?e:{},r=Pt(t.extensions)?t.extensions:{},n=Number.isInteger(t.source)?t.source:-1,o=Pt(r.KHR_texture_basisu)?r.KHR_texture_basisu:{};if(Number.isInteger(o.source))return{imageIndex:o.source,previewImageIndex:n>=0&&n!==o.source?n:-1};let a=Pt(r.EXT_texture_webp)?r.EXT_texture_webp:{};return Number.isInteger(a.source)?{imageIndex:a.source,previewImageIndex:-1}:{imageIndex:n,previewImageIndex:-1}}function RW(e){let t=new Map,r=new Map;if(!Array.isArray(e))return{byExactSource:t,bySourceMaterialIndex:new Map};for(let o of e){if(!Pt(o))continue;let a=Array.isArray(o.sourceSurfaces)?o.sourceSurfaces:[],i=typeof o.slotId=="string"?o.slotId.trim():"";if(!i)continue;let s=new Set;for(let c of a){if(!Pt(c))continue;let d=typeof c.ownerNodePath=="string"?c.ownerNodePath.trim().replace(/^\/+|\/+$/g,""):"",u=Number.isInteger(c.nodeIndex)?c.nodeIndex:-1,l=Number.isInteger(c.meshIndex)?c.meshIndex:-1,m=Number.isInteger(c.primitiveIndex)?c.primitiveIndex:-1;a.length===1&&d&&u>=0&&l>=0&&m>=0&&t.set(NC({ownerNodePath:d,nodeIndex:u,meshIndex:l,primitiveIndex:m}),i),Number.isInteger(c.sourceMaterialIndex)&&c.sourceMaterialIndex>=0&&s.add(c.sourceMaterialIndex)}if(s.size===1){let[c]=s,d=r.get(c)??[];d.push(i),r.set(c,d)}}let n=new Map;for(let[o,a]of r)a.length===1&&n.set(o,a[0]);return{byExactSource:t,bySourceMaterialIndex:n}}function NC(e){return[e.ownerNodePath,e.nodeIndex,e.meshIndex,e.primitiveIndex].join("\0")}function CW(e){let t=Number.isInteger(e.primitiveIndex)?`:${e.primitiveIndex}`:"",r=`${e.assetGuid||e.assetId||"asset"}:${e.nodeIndex}:${e.meshIndex}${t}`;return`slot_${HC(r)}`}function wW(e){let t=`${e.assetGuid||e.assetId||"asset"}:material:${e.sourceMaterialIndex}`;return`slot_${HC(t)}`}function vW(e,t){if(t.textureUsage==="material"||t.usage==="material")return{usage:"material",materialTexture:!0,environmentTexture:!1};if(Pt(t.capabilities)&&t.capabilities.materialTexture===!0)return{usage:"material",materialTexture:!0,environmentTexture:!1};if(t.textureUsage==="environment"||t.usage==="environment")return{usage:"environment",materialTexture:!1,environmentTexture:!0};if(Pt(t.capabilities)&&t.capabilities.environmentTexture===!0)return{usage:"environment",materialTexture:!1,environmentTexture:!0};let r=Wr.extname(e).toLowerCase();return[".env",".hdr",".dds",".ktx",".ktx2"].includes(r)?{usage:"environment",materialTexture:!1,environmentTexture:!0}:[".png",".jpg",".jpeg",".webp"].includes(r)?{usage:"material",materialTexture:!0,environmentTexture:!1}:null}function GC(e){let t=Array.isArray(e.scenes)?e.scenes:[],r=Number.isInteger(e.scene)?e.scene:0,n=t[r]??t[0];return Array.isArray(n?.nodes)?n.nodes.filter(Number.isInteger):[]}function LC(e){let t=new Map;for(let r=0;r<e.length;r+=1){let n=Array.isArray(e[r]?.children)?e[r].children:[];for(let o of n)Number.isInteger(o)&&!t.has(o)&&t.set(o,r)}return t}function FC(e,t,r,n){let o=[],a=n,i=new Set;for(;Number.isInteger(a)&&a>=0&&a<e.length;){if(i.has(a))return"";i.add(a),o.push(_W(e[a],a));let s=t.get(a);if(typeof s!="number"||!Number.isInteger(s))break;a=s}return o.reverse(),o.length>1&&r.has(a)&&o.shift(),o.filter(Boolean).join("/")}function _W(e,t){return(Pt(e)&&typeof e.name=="string"?e.name.trim():"")||`node_${t}`}function kW(e,t,r){let n=Pt(e)&&typeof e.name=="string"?e.name.trim():"",o=$C(t);return n||o||r.split("/").filter(Boolean).pop()||r}function $C(e){return Pt(e)&&typeof e.name=="string"?e.name.trim():""}function BC(e,t){let r=[],n=t,o=new Set;for(;Number.isInteger(n)&&n>=0;){if(o.has(n))return[];o.add(n),r.push(n);let a=e.get(n);if(!Number.isInteger(a))break;n=a}return r.reverse(),r}function jW(e,t){let r=Pt(e)?e:{},n=Number.isInteger(r.material)?r.material:-1,o=n>=0?t[n]:null,a=typeof o?.name=="string"&&o.name.trim()?o.name.trim():"";return{index:n,name:a}}function zC(e,t){let r=Pt(e)?e:{},n=Number.isInteger(r.indices)?r.indices:-1,o=UC(r),a=n>=0?t[n]:null,i=o>=0?t[o]:null,s=Number.isFinite(a?.count)?Number(a.count):Number.isFinite(i?.count)?Number(i.count):null;if(s==null)return null;let c=Number.isInteger(r.mode)?r.mode:4;return c===4?Math.floor(s/3):c===5||c===6?Math.max(0,s-2):0}function VC(e,t){let r=Pt(e)?e:{},n=UC(r),o=n>=0?t[n]:null,a=RC(o?.min),i=RC(o?.max);return a&&i?{min:a,max:i}:null}function UC(e){let t=Pt(e.attributes)?e.attributes:{};return Number.isInteger(t.POSITION)?t.POSITION:-1}function RC(e){if(!Array.isArray(e)||e.length<3)return null;let t=Number(e[0]),r=Number(e[1]),n=Number(e[2]);return Number.isFinite(t)&&Number.isFinite(r)&&Number.isFinite(n)?[t,r,n]:null}function Pt(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)}function HC(e){let t=String(e??""),r=2166136261;for(let n=0;n<t.length;n+=1)r^=t.charCodeAt(n),r=Math.imul(r,16777619);return(r>>>0).toString(16).padStart(8,"0")}import mf from"node:crypto";import{constants as BW}from"node:fs";import De from"node:fs/promises";import oe from"node:path";import Al from"node:fs/promises";import En from"node:path";async function WC(e,t={}){try{let r=await NW(e);if(!r)return[];let n=Array.isArray(r.gltf.images)?r.gltf.images:[],o=t.imageIndexes?new Set(t.imageIndexes.filter(i=>Number.isInteger(i)&&i>=0)):null,a=[];for(let i=0;i<n.length;i+=1){if(o&&!o.has(i))continue;let s=qr(n[i]);if(!s)continue;let c=await GW(e,r,s);if(!c)continue;let d=Pl(s.name)??(c.originalFileName?En.parse(c.originalFileName).name:null)??void 0;a.push({imageIndex:i,bytes:c.bytes,extension:c.extension,mimeType:c.mimeType,...d?{displayName:d}:{},...c.originalFileName?{originalFileName:c.originalFileName}:{}})}return a}catch{return[]}}function qC(e){let t=new Set;for(let r of JC(e)){let n=Lo(r.imageIndex),o=Lo(r.previewImageIndex);n!=null&&t.add(n),o!=null&&t.add(o)}return[...t].sort((r,n)=>r-n)}function YC(e){let t=new Map;for(let r of JC(e)){let n=Lo(r.imageIndex),o=Lo(r.previewImageIndex);n==null||o==null||n===o||t.set(`${n}:${o}`,{imageIndex:n,previewImageIndex:o})}return[...t.values()].sort((r,n)=>r.imageIndex-n.imageIndex||r.previewImageIndex-n.previewImageIndex)}function JC(e){if(!e)return[];let t=[],r=Array.isArray(e.materialSlots)?e.materialSlots:[];for(let n of r){let o=qr(n),a=Array.isArray(o?.sourceMaterialProfiles)?o.sourceMaterialProfiles:[];for(let i of a){let s=qr(i),c=Array.isArray(s?.textureHints)?s.textureHints:[];for(let d of c){let u=qr(d);u&&t.push(u)}}}return t}function XC(e,t){if(!e||t.length===0)return e;let r=new Map(t.map(i=>[i.imageIndex,i.textureAssetId])),n=structuredClone(e),o=Array.isArray(n.materialSlots)?n.materialSlots:[],a=!1;for(let i of o){let s=qr(i),c=Array.isArray(s?.sourceMaterialProfiles)?s.sourceMaterialProfiles:[];for(let d of c){let u=qr(d);if(!u)continue;let l=Array.isArray(u.textureHints)?u.textureHints:[];if(l.length===0)continue;let m=[];for(let p of l){let h=qr(p),g=Lo(h?.imageIndex),f=Pl(h?.profilePath),y=g==null?null:r.get(g)??null;if(!y||!f||!FW(f)){m.push(p);continue}let A=qr(u.profile)??{};$W(A,f,{textureAssetId:y}),u.profile=A,a=!0}m.length>0?u.textureHints=m:delete u.textureHints}}return a?n:e}async function NW(e){let t=En.extname(e).toLowerCase();if(t===".gltf"){let c=JSON.parse(await Al.readFile(e,"utf8")),d=await Promise.all((Array.isArray(c.buffers)?c.buffers:[]).map(u=>KC(e,qr(u))));return{gltf:c,buffers:d}}if(t!==".glb")return null;let r=await Al.readFile(e);if(r.length<20||r.toString("utf8",0,4)!=="glTF"||r.readUInt32LE(4)!==2||r.readUInt32LE(8)>r.length)return null;let n=null,o=[],a=12;for(;a+8<=r.length;){let c=r.readUInt32LE(a),d=r.readUInt32LE(a+4);if(a+=8,a+c>r.length)return null;let u=r.subarray(a,a+c);d===1313821514?n=JSON.parse(u.toString("utf8").replace(/\0+$/g,"")):d===5130562&&o.push(Buffer.from(u)),a+=c}if(!n)return null;let i=Array.isArray(n.buffers)?n.buffers:[],s=await Promise.all(i.map(async(c,d)=>{let u=qr(c);return Pl(u?.uri)?KC(e,u):o[d]??(d===0?o[0]??null:null)}));return s.length===0&&o.length>0&&s.push(o[0]),{gltf:n,buffers:s}}async function KC(e,t){let r=Pl(t?.uri);if(!r)return null;let n=ew(r);if(n)return n.bytes;if(QS(r))return null;let o=ZC(r);return o?QC(e,o):null}async function GW(e,t,r){let n=Pl(r.uri);if(n){let p=ew(n);if(p){let A=XS(p.bytes);return A?{bytes:p.bytes,...A}:null}if(QS(n))return null;let h=ZC(n);if(!h)return null;let g=await QC(e,h);if(!g)return null;let f=En.basename(h),y=XS(g);return y?{bytes:g,...y,originalFileName:f}:null}let o=Lo(r.bufferView);if(o==null)return null;let a=Array.isArray(t.gltf.bufferViews)?t.gltf.bufferViews:[],i=qr(a[o]),s=Lo(i?.buffer)??0,c=t.buffers[s],d=Lo(i?.byteOffset)??0,u=Lo(i?.byteLength);if(!c||u==null||d+u>c.length)return null;let l=Buffer.from(c.subarray(d,d+u)),m=XS(l);return m?{bytes:l,...m}:null}async function QC(e,t){if(En.isAbsolute(t)||En.win32.isAbsolute(t)||t.includes("\0"))return null;try{let r=await Al.realpath(En.dirname(e)),n=En.resolve(r,t),o=await Al.realpath(n);return LW(r,o)?await Al.readFile(o):null}catch{return null}}function ZC(e){if(QS(e))return null;try{return decodeURIComponent(e)}catch{return null}}function LW(e,t){let r=En.relative(e,t);return r===""||!r.startsWith(`..${En.sep}`)&&r!==".."&&!En.isAbsolute(r)}function ew(e){let t=/^data:([^;,]+)?(?:;[^,]*)?,(.*)$/is.exec(e);if(!t)return null;let r=e.slice(0,e.indexOf(","));try{return{bytes:r.toLowerCase().includes(";base64")?Buffer.from(t[2]??"","base64"):Buffer.from(decodeURIComponent(t[2]??""),"utf8")}}catch{return null}}function XS(e){return e.length>=8&&e.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10]))?{extension:".png",mimeType:"image/png"}:e.length>=3&&e[0]===255&&e[1]===216&&e[2]===255?{extension:".jpg",mimeType:"image/jpeg"}:e.length>=12&&e.toString("ascii",0,4)==="RIFF"&&e.toString("ascii",8,12)==="WEBP"?{extension:".webp",mimeType:"image/webp"}:e.length>=12&&e.subarray(0,12).equals(Buffer.from([171,75,84,88,32,50,48,187,13,10,26,10]))?{extension:".ktx2",mimeType:"image/ktx2"}:null}function FW(e){return["baseColor.texture","normal.texture","metallicRoughness.texture","occlusion.texture","emission.texture","emission.maskTexture","alpha.texture"].includes(e)}function $W(e,t,r){let n=t.split("."),o=e;for(let a=0;a<n.length-1;a+=1){let i=n[a],s=qr(o[i])??{};o[i]=s,o=s}o[n[n.length-1]]=r}function QS(e){return/^[a-z][a-z0-9+.-]*:/i.test(e)||e.startsWith("/")||En.win32.isAbsolute(e)}function qr(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function Pl(e){return typeof e=="string"&&e.trim()?e.trim():null}function Lo(e){return Number.isInteger(e)&&e>=0?e:null}var xe=class extends Error{constructor(t,r={}){super(t),this.name="PlayableEditorAssetRegistryError",this.details=r}};async function bc(e,t,r={}){if(!t.payload&&!t.payloadData)throw new xe("missing_payload_arg");let n=await dw(e,t),o=e.codeKeyPolicy??"legacy";if(o==="disabled"&&Object.prototype.hasOwnProperty.call(n,"codeKey"))throw new xe("payload_code_key_disabled",{codeKeyPolicy:o,codeKey:n.codeKey});let a=oe.resolve(e.cwd,String(n.sourcePath??n.assetPath??"")),i=HW(e,a);if(!i)throw new xe(e.unsupportedSourceErrorCode??r.sourceMustBeSupportedAsset??"source_must_be_supported_asset",{sourcePath:a,supportedExtensions:sw(e)});try{await De.access(a,BW.R_OK)}catch(M){let _=hc(M)?M.code:void 0,B=_==="EACCES"||_==="EPERM"?"source_file_unreadable":r.sourceFileNotFound??"source_file_not_found";throw new xe(B,{sourcePath:a,..._?{nodeCode:_}:{}})}let s=e2(n);await De.mkdir(e.generatedDir,{recursive:!0});let c=await to(e),d=await sI(a),u=of(n.kind??n.assetKind??n.assetType,a);if(!u)throw new xe("unsupported_asset_kind",{sourcePath:a,assetType:n.assetType});oI(u,a,"source_path");let l=ZW(c,n,s,a,d,u,e),m=et(n.assetName)??l?.originalFileName??oe.basename(a),p=et(n.guid);if(l&&p&&l.guid!==p)throw new xe("payload_guid_must_match_existing_asset",{guid:p,existingGuid:l.guid,existingAssetId:l.assetId});let h=l?.guid??p??mf.randomUUID(),g=et(n.projectAssetId),f=rf(u,h);if(l?.assetId&&l.assetId!==f)throw new xe("manifest_asset_id_must_match_guid",{guid:h,assetId:l.assetId,expectedAssetId:f});if(g&&g!==f)throw new xe("project_asset_id_must_match_guid",{guid:h,projectAssetId:g,expectedAssetId:f});let y=i===".gltf"?oe.posix.join(f,oe.basename(a)):`${f}${i}`,A=KW(e,{existing:l,sourcePath:a,kind:u,targetFileName:y}),T=Sc(e,A,u,"target_path"),D=new Date().toISOString(),P=DS(et(n.displayName)??l?.displayName,m),C=uf({...uf(l?.external)??{},...s??{}}),E=!1,S=[],w=null;try{await De.mkdir(oe.dirname(T),{recursive:!0});let M=qW(a,T),_=M||await uw(T),B=!l||l.contentHash!==d.contentHash||!_;!M&&B&&(await De.copyFile(a,T),E=!l,i===".gltf"&&await zW(a,T));let U=await lw(e,{existing:l,payload:n,sourcePath:a,targetPath:T,kind:u,guid:h,assetId:f}),Be=cr(l?.metadata),Oe=cr(U);if(u==="model"&&(Be.assetAnalysisStatus==="complete"||Object.keys(cr(Be.assetAnalysis)).length>0)&&Oe.assetAnalysisStatus==="unavailable")throw new xe("source_asset_analysis_failed",{sourcePath:a,assetId:f,guid:h});if(u==="model"){let Dt=await VW({config:e,manifest:c,metadata:U,sourcePath:a,sourceAssetId:f,sourceAssetGuid:h,sourceDisplayName:P,now:D});S=Dt.createdPaths,U=XC(U,Dt.references)}let ze=aI({...l??{},guid:h,assetId:f,kind:u,displayName:P,relativePath:A,originalFileName:m,...o==="legacy"?{codeKey:OS(et(n.codeKey)??et(n.assetName)??l?.codeKey,m)}:{},...et(n.category)?{category:et(n.category)}:{},placeable:u==="texture"?!0:typeof n.placeable=="boolean"?n.placeable:l?.placeable??u==="model",..._S(n.warmupCount)!=null?{warmupCount:_S(n.warmupCount)}:{},...typeof n.singleton=="boolean"?{singleton:n.singleton}:{},...vS(n.materialMode)?{materialMode:vS(n.materialMode)}:{},...wS(n.scale)?{defaults:{transform:{scale:wS(n.scale)}}}:{},contentHash:d.contentHash,byteSize:d.byteSize,external:C,metadata:U,createdAt:l?.createdAt??D,updatedAt:B?D:l?.updatedAt??D});if(!ze)throw new xe("invalid_manifest_entry",{assetId:f,guid:h});w=ze;let Cr=c.findIndex(Dt=>Dt.guid===h||Dt.assetId===f);Cr>=0?c[Cr]=ze:c.push(ze),c.sort(n2),await mw(e,c)}catch(M){E&&await De.rm(i===".gltf"?oe.dirname(T):T,{recursive:i===".gltf",force:!0}).catch(()=>{});for(let _ of S)await De.rm(_,{force:!0}).catch(()=>{});throw M}return{ok:!0,guid:h,assetId:f,kind:u,...w?.contentHash?{contentHash:w.contentHash}:{},...w?.external?{external:w.external}:{},displayName:w?.displayName,originalFileName:w?.originalFileName,assetUrl:XW(e,A,u),targetPath:T,manifestPath:e.manifestPath,registryPath:e.registryPath}}async function zW(e,t){let r;try{r=JSON.parse(await De.readFile(e,"utf8"))}catch{throw new xe("gltf_source_invalid_json")}let n=oe.dirname(await De.realpath(e)),o=oe.dirname(t),a=[...Array.isArray(r.buffers)?r.buffers:[],...Array.isArray(r.images)?r.images:[]],i=new Set;for(let s of a){let c=et(cr(s)?.uri);if(!c||c.startsWith("data:")||/^[a-z][a-z0-9+.-]*:/i.test(c)||c.startsWith("//"))continue;let d;try{d=decodeURIComponent(c.split(/[?#]/,1)[0])}catch{continue}let u=d.replace(/\\/g,"/"),l=oe.posix.normalize(u);if(!l||l==="."||l===".."||l.startsWith("../")||oe.posix.isAbsolute(l)||i.has(l))continue;i.add(l);let m;try{m=await De.realpath(oe.resolve(n,...l.split("/")))}catch{continue}try{ZS(n,m,"gltf_dependency_path_escape")}catch{continue}let p=oe.resolve(o,...l.split("/"));ZS(o,p,"gltf_dependency_target_escape"),await De.mkdir(oe.dirname(p),{recursive:!0}),await De.copyFile(m,p)}}function ZS(e,t,r){let n=oe.relative(e,t);if(!n||n===".."||n.startsWith(`..${oe.sep}`)||oe.isAbsolute(n))throw new xe(r)}async function VW(e){let t=qC(e.metadata),r=YC(e.metadata),n=await WC(e.sourcePath,{imageIndexes:t}),o=[],a=new Map,i=[];try{for(let d of n){let u=xl(d.bytes),l=e.manifest.find(P=>P.kind==="texture"&&P.contentHash===u.contentHash&&cr(cr(P.metadata).capabilities).materialTexture!==!1&&cr(P.metadata).textureUsage!=="environment");if(l){a.set(d.imageIndex,l),o.push({imageIndex:d.imageIndex,textureAssetId:l.assetId});continue}let m=a2(u.contentHash),p=rf("texture",m),h=e.manifest.find(P=>P.guid===m||P.assetId===p);if(h)throw new xe("derived_texture_identity_conflict",{sourceAssetId:e.sourceAssetId,imageIndex:d.imageIndex,assetId:p,contentHash:u.contentHash,conflictingAssetId:h.assetId,conflictingContentHash:h.contentHash});let g=`${p}${d.extension}`,f=cw(e.config,"texture",g),y=Sc(e.config,f,"texture","derived_texture_target_path");if(await De.mkdir(oe.dirname(y),{recursive:!0}),await uw(y)){let P=await sI(y);if(P.contentHash!==u.contentHash)throw new xe("derived_texture_target_conflict",{sourceAssetId:e.sourceAssetId,imageIndex:d.imageIndex,assetId:p,targetPath:y,contentHash:u.contentHash,existingContentHash:P.contentHash})}else await o2(y,d.bytes),i.push(y);let A=d.displayName?`${e.sourceDisplayName} / ${d.displayName}`:`${e.sourceDisplayName} Texture ${d.imageIndex+1}`,T=await lw(e.config,{existing:null,payload:{metadata:{textureUsage:"material",capabilities:{materialTexture:!0,environmentTexture:!1},derivedFrom:{kind:"gltf-image",sourceAssetId:e.sourceAssetId,sourceAssetGuid:e.sourceAssetGuid,imageIndex:d.imageIndex,mimeType:d.mimeType}}},sourcePath:y,targetPath:y,kind:"texture",guid:m,assetId:p}),D=aI({guid:m,assetId:p,kind:"texture",displayName:A,relativePath:f,originalFileName:d.originalFileName??`${i2(A)}${d.extension}`,category:"Texture",placeable:!0,contentHash:u.contentHash,byteSize:u.byteSize,metadata:T,createdAt:e.now,updatedAt:e.now});if(!D)throw new xe("invalid_derived_texture_manifest_entry",{sourceAssetId:e.sourceAssetId,imageIndex:d.imageIndex,assetId:p});e.manifest.push(D),a.set(d.imageIndex,D),o.push({imageIndex:d.imageIndex,textureAssetId:p})}let s=new Map,c=new Map;for(let d of a.values())oe.extname(d.relativePath).toLowerCase()===".ktx2"&&s.set(d.assetId,d);for(let d of r){let u=a.get(d.imageIndex),l=a.get(d.previewImageIndex);!u||!l||oe.extname(u.relativePath).toLowerCase()!==".ktx2"||c.set(u.assetId,l.assetId)}for(let d of s.values()){let u=cr(d.metadata),l=UW(u);delete l[e.sourceAssetId];let m=c.get(d.assetId);m&&(l[e.sourceAssetId]=m);let p=Object.fromEntries(Object.entries(l).sort(([f],[y])=>f.localeCompare(y))),h=Object.values(p)[0],g={...u};h?(g.previewTextureAssetId=h,g.previewTextureAssetIdsBySourceAssetId=p):(delete g.previewTextureAssetId,delete g.previewTextureAssetIdsBySourceAssetId),d.metadata=g}return{references:o,createdPaths:i}}catch(s){for(let c of i)await De.rm(c,{force:!0}).catch(()=>{});throw s}}function UW(e){let t={},r=cr(e.previewTextureAssetIdsBySourceAssetId);for(let[a,i]of Object.entries(r)){let s=et(a),c=et(i);s&&c&&(t[s]=c)}if(Object.keys(t).length>0)return t;let n=et(e.previewTextureAssetId),o=et(cr(e.derivedFrom).sourceAssetId);return n&&o&&(t[o]=n),t}async function tI(e,t={}){let r=await iw(e,t,!1),{availabilityIssues:n,...o}=r;return o}async function rI(e,t={}){return iw(e,t,!0)}async function iw(e,t,r){let n=await to(e),o=[],a=[];for(let i of n){let s=Sc(e,i.relativePath,i.kind,"refresh_source_path"),c;try{c=await sI(s)}catch(m){let p=tw(i,m,t,"source-audit",s);if(!r||!p)throw rw(p,m,s);a.push(p);continue}let d=i.kind==="model"&&cr(i.metadata).assetMetadataVersion!==JS,u=i.kind==="texture"&&i.placeable===!1;if(i.contentHash===c.contentHash&&i.byteSize===c.byteSize&&!d&&!u)continue;let l;try{l=await bc(e,{payloadData:{sourcePath:s,guid:i.guid,projectAssetId:i.assetId,kind:i.kind}},t)}catch(m){let p=tw(i,m,t,"source-analysis",s);if(!r||!p)throw rw(p,m,s);a.push(p);continue}if(!l.contentHash)throw new xe("asset_refresh_missing_content_hash",{assetId:i.assetId,guid:i.guid,sourcePath:s});o.push({guid:i.guid,assetId:i.assetId,kind:i.kind,...i.contentHash?{previousContentHash:i.contentHash}:{},contentHash:l.contentHash})}return{ok:!0,scannedAssetCount:n.length,refreshedAssets:o,availabilityIssues:a}}function tw(e,t,r,n,o){let a=r.sourceFileNotFound??"source_file_not_found",i=t instanceof xe?t.message:void 0,s=hc(t)?t.code:t instanceof xe?et(t.details.nodeCode):void 0,c=i===a||i==="source_file_not_found"||i==="source_file_unreadable"||i==="source_asset_analysis_failed"||i==="gltf_source_invalid_json",d=hc(t)&&typeof t.path=="string"?oe.resolve(t.path):null;if(!c&&(!s||n!=="source-audit"&&d!==oe.resolve(o)))return null;let u=i==="source_asset_analysis_failed"?"analysis-failed":i==="gltf_source_invalid_json"?"invalid":s==="ENOENT"||i===a||i==="source_file_not_found"?"missing":s==="EACCES"||s==="EPERM"||i==="source_file_unreadable"?"unreadable":s==="EISDIR"||s==="EINVAL"?"invalid":"audit-failed",l=i??(u==="missing"?a:u==="unreadable"?"source_file_unreadable":u==="invalid"?"source_file_invalid":"source_file_audit_failed");return{assetId:e.assetId,guid:e.guid,kind:e.kind,relativePath:e.relativePath,stage:n,reason:u,code:l,...s?{nodeCode:s}:{},retryable:!0}}function rw(e,t,r){return!e||t instanceof xe?t:new xe(e.code,{assetId:e.assetId,guid:e.guid,sourcePath:r,...e.nodeCode?{nodeCode:e.nodeCode}:{}})}async function nI(e,t,r={}){let n=await dw(e,t),o=et(t.assetId??n?.assetId),a=et(t.guid??n?.guid);if(!o&&!a)throw new xe(r.missingAssetId??"missing_asset_id");let i=c2(t,n),s=d2(t,n);await De.mkdir(e.generatedDir,{recursive:!0});let c=await to(e),d=c.findIndex(p=>o&&p.assetId===o||a&&p.guid===a);if(d<0)throw new xe(r.manifestEntryNotFound??"manifest_entry_not_found",{assetId:o,guid:a,manifestPath:e.manifestPath});let u=c[d];if(!u)throw new xe("manifest_entry_not_found",{assetId:o,guid:a});await l2(e,u.assetId,s,r),c.splice(d,1);let l=!1,m=null;return i&&(m=Sc(e,u.relativePath,u.kind,"unregister_target_path"),await De.rm(m,{force:!0}),l=!0),await mw(e,c),{ok:!0,guid:u.guid,assetId:u.assetId,kind:u.kind,removed:!0,deleteFile:i,force:s,deletedFile:l,targetPath:m,manifestPath:e.manifestPath,registryPath:e.registryPath}}async function to(e){let t=await pf(e.manifestPath,[]);if(!Array.isArray(t))throw new xe("manifest_invalid_root",{manifestPath:e.manifestPath});let r=t.map((i,s)=>{let c=aI(i,!0);if(!c)throw new xe("manifest_invalid_entry",{index:s,manifestPath:e.manifestPath});return c}),n=new Set,o=new Set,a=e.codeKeyPolicy??"legacy";for(let i of r){if(a==="disabled"&&i.codeKey)throw new xe("manifest_code_key_disabled",{manifestPath:e.manifestPath,codeKeyPolicy:a,assetId:i.assetId,codeKey:i.codeKey});if(n.has(i.assetId))throw new xe("manifest_duplicate_asset_id",{assetId:i.assetId});if(o.has(i.guid))throw new xe("manifest_duplicate_guid",{guid:i.guid});n.add(i.assetId),o.add(i.guid)}return r}async function yc(e){return e.loadRules?e.loadRules():e.rulesPath?pf(e.rulesPath,{}):{}}function nw(e){return(Array.isArray(e)?e:[e]).filter(r=>typeof r=="string"&&!!r.trim()).map(r=>{let n=r.trim().toLowerCase();return n.startsWith(".")?n:`.${n}`})}function sw(e){let t=nw(e.supportedExtensions??e.supportedExtension);return t.length>0?t:nw(mc)}function HW(e,t){let r=t.toLowerCase();return sw(e).find(n=>r.endsWith(n))??null}function KW(e,t){return t.existing?.relativePath?t.existing.relativePath:WW(e,t.sourcePath,t.kind)??cw(e,t.kind,t.targetFileName)}function cw(e,t,r){let n=e.relativeImportedPath;return n.length>=2?n(t,r):n({kind:t,fileName:r})}function WW(e,t,r){let n=e.assetRootDir??e.assetsDir;if(!n)return null;let o=oe.resolve(t);return!ow(oe.resolve(n),o)||ow(oe.resolve(e.generatedDir),o)?null:(oI(r,o,"source_path"),oe.relative(e.generatedDir,o).split(oe.sep).join("/"))}function ow(e,t){let r=oe.relative(e,t);return r===""||!r.startsWith("..")&&!oe.isAbsolute(r)}function qW(e,t){return oe.relative(oe.resolve(e),oe.resolve(t))===""}function YW(e,t,r){let n=oe.relative(e,t);if(n.startsWith("..")||oe.isAbsolute(n))throw new xe(`${r}_outside_allowed_directory`,{parent:e,child:t})}function JW(e,t,r){let n=oe.relative(e,t);if(!n.startsWith("..")&&!oe.isAbsolute(n))throw new xe(`${r}_inside_forbidden_directory`,{parent:e,child:t})}function Sc(e,t,r,n){let o=oe.resolve(e.generatedDir,t),a=oe.resolve(e.assetRootDir??e.assetsDir??e.importedDir??e.generatedDir);return YW(a,o,n),JW(oe.resolve(e.generatedDir),o,n),oI(r,o,n),o}function XW(e,t,r){let n=Sc(e,t,r,"asset_url_path");return typeof e.publicUrlForCatalogRelativePath=="function"?e.publicUrlForCatalogRelativePath(t):typeof e.publicUrlForRelativePath=="function"?e.publicUrlForRelativePath(t):`/${oe.relative(e.cwd,n).split(oe.sep).join("/")}`}function oI(e,t,r){let n=oe.extname(t).toLowerCase(),o=RS(e);if(!o.includes(n))throw new xe(`${r}_unsupported_extension`,{kind:e,filePath:t,extension:n,supportedExtensions:o})}async function pf(e,t){try{return JSON.parse(await De.readFile(e,"utf8"))}catch(r){if(hc(r)&&r.code==="ENOENT")return t;throw r}}async function dw(e,t){if(t.payloadData)return structuredClone(t.payloadData);if(!t.payload)return{};let r=oe.resolve(e.cwd,t.payload),n=await pf(r,null);if(!n||typeof n!="object"||Array.isArray(n))throw new xe("invalid_payload_json",{payloadPath:r});return n}function aI(e,t=!1){if(!e||typeof e!="object"||Array.isArray(e))return null;let r=e,n=t?iI:et,o=n(r.guid),a=n(r.assetId),i=n(r.kind);if(t&&(!i||"assetKind"in r||"assetType"in r))return null;let s=t?PS.includes(i)?i:null:of(r.kind??r.assetKind??r.assetType,r.relativePath),c=n(r.displayName),d=n(r.relativePath);if(!o||!a||!s||!c||!d||t&&(!zi(r,"originalFileName")||!zi(r,"codeKey")||!zi(r,"category")||!zi(r,"materialMode")||!zi(r,"contentHash")||!zi(r,"createdAt")||!zi(r,"updatedAt")||"placeable"in r&&typeof r.placeable!="boolean"||"warmupCount"in r&&(!Number.isInteger(r.warmupCount)||r.warmupCount<0)||"singleton"in r&&typeof r.singleton!="boolean"||"defaults"in r&&Aa(r.defaults)==null||"byteSize"in r&&(!Number.isFinite(r.byteSize)||r.byteSize<0)||"metadata"in r&&Aa(r.metadata)==null||"external"in r&&!QW(r.external)))return null;let u=Aa(r.metadata),l=n(r.originalFileName),m=n(r.codeKey),p=n(r.category),h=n(r.materialMode),g=Aa(r.defaults),f=n(r.contentHash),y=uf(r.external),A=n(r.createdAt),T=n(r.updatedAt);return{guid:o,assetId:a,kind:s,displayName:c,relativePath:d,...l?{originalFileName:l}:{},...m?{codeKey:m}:{},...p?{category:p}:{},...typeof r.placeable=="boolean"?{placeable:r.placeable}:{},...typeof r.warmupCount=="number"?{warmupCount:r.warmupCount}:{},...typeof r.singleton=="boolean"?{singleton:r.singleton}:{},...h?{materialMode:h}:{},...g?{defaults:g}:{},...f?{contentHash:f}:{},...typeof r.byteSize=="number"?{byteSize:r.byteSize}:{},...y?{external:y}:{},...u?{metadata:u}:{},...A?{createdAt:A}:{},...T?{updatedAt:T}:{}}}function iI(e){return typeof e=="string"&&e.length>0&&e===e.trim()?e:null}function zi(e,t){return!(t in e)||iI(e[t])!=null}function QW(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let t=e,r=["platformAssetId","assetPath","assetUrl"],n=Object.keys(t);return n.length>0&&n.every(o=>r.includes(o)&&iI(t[o])!=null)}function uf(e,t=!1){if(!e||typeof e!="object"||Array.isArray(e))return null;let r=e,n=et(r.platformAssetId),o;try{if(o=WO(r.assetPath),t&&Object.prototype.hasOwnProperty.call(r,"assetPath")&&!o)throw new Error("external_asset_path_must_be_portable")}catch{if(t)throw new xe("external_asset_path_must_be_portable",{assetPath:et(r.assetPath)})}let a=et(r.assetUrl);return!n&&!o&&!a?null:{...n?{platformAssetId:n}:{},...o?{assetPath:o}:{},...a?{assetUrl:a}:{}}}function Aa(e){return!e||typeof e!="object"||Array.isArray(e)?null:structuredClone(e)}async function lw(e,t){let r=Aa(t.payload?.metadata);if(typeof e.resolveAssetMetadata=="function"){let n=await e.resolveAssetMetadata({...t,existingMetadata:Aa(t.existing?.metadata),payloadMetadata:r}),o=Aa(n);return o||null}return Tl({kind:t.kind,sourcePath:t.sourcePath,existingMetadata:Aa(t.existing?.metadata),payloadMetadata:r,guid:t.guid,assetId:t.assetId,cwd:e.cwd,assetsDir:e.assetsDir})}function ZW(e,t,r,n,o,a,i){let s=et(t.guid),c=et(t.projectAssetId);if(s){let l=e.find(m=>m.guid===s);if(l)return l}if(c){let l=e.find(m=>m.assetId===c);if(l)return l}if(r?.platformAssetId){let l=e.find(m=>m.kind===a&&t2(m.external)===r.platformAssetId);if(l)return l}if(r?.assetPath){let l=e.find(m=>m.kind===a&&r2(m.external)===r.assetPath);if(l)return l}let d=oe.resolve(n),u=e.find(l=>{if(l.kind!==a)return!1;try{return oe.resolve(Sc(i,l.relativePath,l.kind,"manifest_asset_path"))===d}catch{return!1}});if(u)return u;if(o.contentHash){let l=e.find(m=>m.kind===a&&m.contentHash===o.contentHash);if(l)return l}return null}function e2(e){return uf({...e.external&&typeof e.external=="object"&&!Array.isArray(e.external)?e.external:{},platformAssetId:e.external?.platformAssetId??e.platformAssetId??e.assetId,assetUrl:e.external?.assetUrl??e.assetUrl},!0)}function t2(e){return et(cr(e).platformAssetId)}function r2(e){return et(cr(e).assetPath)}function n2(e,t){return e.kind.localeCompare(t.kind)||e.displayName.localeCompare(t.displayName)||e.assetId.localeCompare(t.assetId)}async function eI(e,t){try{if(await De.readFile(e,"utf8")===t)return!1}catch(n){if(!hc(n)||n.code!=="ENOENT")throw n}let r=`${e}.tmp-${process.pid}-${Date.now()}`;try{return await De.writeFile(r,t),await De.rename(r,e),!0}catch(n){throw await De.rm(r,{force:!0}).catch(()=>{}),n}}async function o2(e,t){let r=`${e}.tmp-${process.pid}-${Date.now()}`;try{await De.writeFile(r,t),await De.rename(r,e)}catch(n){throw await De.rm(r,{force:!0}).catch(()=>{}),n}}async function sI(e){let t=await De.readFile(e),r=await De.stat(e);if(oe.extname(e).toLowerCase()!==".gltf")return{...xl(t),byteSize:r.size};let n;try{n=JSON.parse(t.toString("utf8"))}catch{return{...xl(t),byteSize:r.size}}let o=oe.dirname(await De.realpath(e)),a=new Map;for(let d of[...Array.isArray(n.buffers)?n.buffers:[],...Array.isArray(n.images)?n.images:[]]){let u=et(cr(d)?.uri);if(!u||u.startsWith("data:")||/^[a-z][a-z0-9+.-]*:/i.test(u)||u.startsWith("//"))continue;let l;try{l=decodeURIComponent(u.split(/[?#]/,1)[0])}catch{continue}let m=oe.posix.normalize(l.replace(/\\/g,"/"));if(!m||m==="."||m===".."||m.startsWith("../")||oe.posix.isAbsolute(m))continue;let p;try{p=await De.realpath(oe.resolve(o,...m.split("/")))}catch{continue}try{ZS(o,p,"gltf_dependency_path_escape")}catch{continue}a.set(m,p)}let i=mf.createHash("sha256").update("playable-editor-gltf-bundle-v1\0"),s=[{path:"",...xl(t)}],c=r.size;for(let[d,u]of[...a].sort(([l],[m])=>l.localeCompare(m))){let l=await De.readFile(u);s.push({path:d,...xl(l)}),c+=l.byteLength}return i.update(JSON.stringify(s)),{contentHash:`sha256:${i.digest("hex")}`,byteSize:c}}function xl(e){return{contentHash:`sha256:${mf.createHash("sha256").update(e).digest("hex")}`,byteSize:e.byteLength}}function a2(e){let t=mf.createHash("sha256").update(`material-texture\0${e}`).digest("hex");return`${t.slice(0,8)}-${t.slice(8,12)}-5${t.slice(13,16)}-8${t.slice(17,20)}-${t.slice(20,32)}`}function i2(e){return e.trim().replace(/[^\p{L}\p{N}._-]+/gu,"_").replace(/^_+|_+$/g,"")||"Imported_Texture"}async function uw(e){try{return await De.access(e),!0}catch{return!1}}async function mw(e,t){let r=MC(t,{codeKeyPolicy:e.codeKeyPolicy??"legacy"});await De.mkdir(oe.dirname(e.manifestPath),{recursive:!0}),await De.mkdir(oe.dirname(e.registryPath),{recursive:!0});let n=await aw(e.manifestPath),o=await aw(e.registryPath);try{await eI(e.manifestPath,`${JSON.stringify(t,null,2)}
|
|
14
|
+
`),await eI(e.registryPath,r)}catch(a){let i=[];for(let[s,c]of[[e.manifestPath,n],[e.registryPath,o]])try{await s2(s,c)}catch(d){i.push(d)}if(i.length>0){let s=new Error("generated_registry_transaction_rollback_failed");throw s.cause=a,s.rollbackErrors=i,s}throw a}}async function aw(e){try{return(await De.lstat(e)).isFile()?{kind:"file",content:await De.readFile(e,"utf8")}:{kind:"other"}}catch(t){if(hc(t)&&t.code==="ENOENT")return{kind:"missing"};throw t}}async function s2(e,t){if(t.kind!=="other"){if(t.kind==="missing"){await De.rm(e,{force:!0});return}await eI(e,t.content)}}function c2(e,t){return typeof e.deleteFile=="boolean"?e.deleteFile:t&&typeof t.deleteFile=="boolean"?t.deleteFile:!0}function d2(e,t){return!!(e.force||t?.force===!0)}async function l2(e,t,r,n){if(r||!e.scenePath)return;let o=await pf(e.scenePath,null),i=(Array.isArray(o?.scene?.nodes)?o.scene.nodes:[]).filter(s=>s?.kind==="instance"&&s?.instance?.assetId===t||s?.kind==="image"&&s?.image?.assetId===t).map(s=>s.id).filter(Boolean);if(i.length!==0)throw new xe(n.assetStillReferenced??"asset_still_referenced",{assetId:t,scenePath:e.scenePath,nodeIds:i})}function et(e){return typeof e=="string"&&e.trim()?e.trim():null}function cr(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}function hc(e){return e instanceof Error&&"code"in e}function pw(e){return{async loadManifest(){let t=await to(e.assetRegistryConfig),r=e.textureRegistryConfig?await to(e.textureRegistryConfig):[];return{ok:!0,manifest:t,textureManifest:r}},async loadEditorAssetLibrary(){let t=await e.loadAssetCatalogEntries(),r=[...e.createAssetLibrary?e.createAssetLibrary(t):ty(t)];return{ok:!0,assets:r,summary:{assets:r.length}}},async runCommand({cmd:t,payloadPath:r}){let n=await f2(e,r),o=g2(t,e),a=e.selectRegistryConfig?e.selectRegistryConfig({payload:n,commandKind:o,cmd:t,assetRegistryConfig:e.assetRegistryConfig,textureRegistryConfig:e.textureRegistryConfig}):m2(n,e.assetRegistryConfig,e.textureRegistryConfig),i=await yc(a),s=b2(i.errorCodes),c=o==="unregister"?await nI(a,{payload:r},s):await bc(a,{payload:r},s);return await h2(e,a,c),{ok:!0,cmd:t,result:c}}}}function m2(e,t,r){return r&&p2(e)?r:t}function p2(e){let t=typeof e.assetType=="string"?e.assetType.toLowerCase():"";if(/^(texture|image|png|jpg|jpeg|webp)$/.test(t))return!0;let r=typeof e.kind=="string"?e.kind.toLowerCase():"";if(/^(texture|image)$/.test(r)||(typeof e.mimeType=="string"?e.mimeType.toLowerCase():"").startsWith("image/"))return!0;let o=[e.sourcePath,e.assetPath,e.assetName].filter(a=>typeof a=="string").join(`
|
|
15
|
+
`);return/\.(png|jpe?g|webp)(?:$|[?#])/i.test(o)}async function f2(e,t){let r=e.readPayload?await e.readPayload(t):JSON.parse(await u2.readFile(t,"utf8")||"{}");if(!r||typeof r!="object"||Array.isArray(r))throw new Error("invalid_asset_authoring_payload");return r}function g2(e,t){return[t.assetRegistryConfig.commands?.unregister,t.textureRegistryConfig?.commands?.unregister,"asset:unregister"].filter(n=>typeof n=="string"&&n.trim().length>0).some(n=>e.includes(n))?"unregister":"register"}async function h2(e,t,r){if(!e.invalidateFiles)return;let n=typeof e.additionalInvalidationFiles=="function"?await e.additionalInvalidationFiles():e.additionalInvalidationFiles??[],o=new Set([...n,r.manifestPath||t.manifestPath,r.registryPath||t.registryPath]);await e.invalidateFiles([...o])}function b2(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}import fw from"node:path";async function cI(e){let t=[];for await(let r of e)t.push(Buffer.from(r));return JSON.parse(Buffer.concat(t).toString("utf8")||"{}")}function gw(e,t={}){return r=>r.trim()?r.startsWith("/tmp/")||fw.isAbsolute(r)?r:fw.resolve(e,t.relativeRoot??"",r):""}function Vi(e,t,r){if(e.statusCode=t.statusCode,ff(e,r),t.body==null){e.end();return}e.setHeader("Content-Type","application/json; charset=utf-8"),e.end(JSON.stringify(t.body))}function ff(e,t={}){e.setHeader("Access-Control-Allow-Origin",t.origin??"*"),e.setHeader("Access-Control-Allow-Methods",t.methods??"GET,POST,OPTIONS"),e.setHeader("Access-Control-Allow-Headers",t.headers??"Content-Type, Authorization"),e.setHeader("Cross-Origin-Resource-Policy",t.resourcePolicy??"cross-origin"),e.setHeader("Cross-Origin-Embedder-Policy",t.embedderPolicy??"credentialless"),e.setHeader("Cache-Control",t.cacheControl??"no-store")}import{existsSync as Tw,readFileSync as Aw}from"node:fs";import{mkdir as bw,rename as T2,rm as yw,writeFile as A2}from"node:fs/promises";import{randomUUID as P2}from"node:crypto";import Ui from"node:path";import y2 from"node:path";var gf=new Map;async function hf(e,t){let r=[...new Set(e.map(i=>y2.resolve(i)))].sort(),n=[...new Set(r.map(i=>gf.get(i)).filter(Boolean))],o=()=>{},a=new Promise(i=>{o=i});for(let i of r)gf.set(i,a);await Promise.all(n);try{return await t()}finally{o();for(let i of r)gf.get(i)===a&&gf.delete(i)}}import{performance as dI}from"node:perf_hooks";var S2=1,I2=["prepare","compile","validate","stringify","write","checkpoint"];function hw(){let e=[],t=(r,n,o)=>{let a=process.memoryUsage();e.push({phase:r,durationMs:lI(dI.now()-n),rssBeforeBytes:o.rss,rssAfterBytes:a.rss,maxObservedRssBytes:Math.max(o.rss,a.rss),heapUsedBeforeBytes:o.heapUsed,heapUsedAfterBytes:a.heapUsed,maxObservedHeapUsedBytes:Math.max(o.heapUsed,a.heapUsed)})};return{measure(r,n){let o=process.memoryUsage(),a=dI.now();try{return n()}finally{t(r,a,o)}},async measureAsync(r,n){let o=process.memoryUsage(),a=dI.now();try{return await n()}finally{t(r,a,o)}},snapshot(){return E2(e)}}}function E2(e){let t=new Map;for(let n of e){let o=t.get(n.phase);if(!o){t.set(n.phase,{...n});continue}o.durationMs=lI(o.durationMs+n.durationMs),o.rssAfterBytes=n.rssAfterBytes,o.maxObservedRssBytes=Math.max(o.maxObservedRssBytes,n.maxObservedRssBytes),o.heapUsedAfterBytes=n.heapUsedAfterBytes,o.maxObservedHeapUsedBytes=Math.max(o.maxObservedHeapUsedBytes,n.maxObservedHeapUsedBytes)}let r=I2.flatMap(n=>{let o=t.get(n);return o?[o]:[]});return{schemaVersion:S2,measuredDurationMs:lI(r.reduce((n,o)=>n+o.durationMs,0)),maxObservedRssBytes:r.reduce((n,o)=>Math.max(n,o.maxObservedRssBytes),0),maxObservedHeapUsedBytes:r.reduce((n,o)=>Math.max(n,o.maxObservedHeapUsedBytes),0),phases:r}}function lI(e){return Math.round(Math.max(0,e)*1e3)/1e3}async function Pw(e){let t=e.paths,r=Ml(t.editorScenePath),n=r?Od(r).document:null,o=Ml(t.scenePath),a=await e.loadServices(e.server,e.projectRoot),i=await e.listEditorAssetLibrary(e.server,"report");n&&FS(n),n&&Hd(n,i);let s=n?a.ensureEditorSceneEnvironmentDefaults(a.enrichEditorSceneDocumentAssets(a.ensureAuthoringSource(n),i)):null;s&&af(s);let c=t.renderingConfigPath?Ml(t.renderingConfigPath):void 0;c&&Nt(c);let d={...Ta(s),...t.renderingConfigPath?{rendering:c}:{}},u=Ow(t.shadowsConfigPath),l=at(o),m=typeof l?.version=="number"?l.version:void 0,p=typeof l?.updatedAt=="string"?l.updatedAt:void 0;return{ok:!0,editorScenePath:t.editorScenePath,scenePath:t.scenePath,editorScene:s,assets:i,...m===void 0?{}:{version:m},...p===void 0?{}:{updatedAt:p},...Object.keys(d).length>0?{companionConfigs:d}:{},...u?{shadowMapExperimentConfig:u}:{},drift:s?a.detectRuntimeInputDrift(s,o):null,summary:Dw(s)}}async function xw(e){Hi(e),Iw(e.body,"$",!0),Iw(e.rawEditorScene,"$.editorScene");let t=jS(e.body),r=Ta(e.body),n=Object.prototype.hasOwnProperty.call(r,"rendering");t&&Nt(t);let o=Object.prototype.hasOwnProperty.call(e.body,"shadowMapExperimentConfig");if(o&&Rw(e.body),o&&!e.paths.shadowsConfigPath)throw new Error("shadows_config_path_missing");let a=[e.paths.editorScenePath,...e.saveMode==="local-commit-save"?[e.paths.scenePath]:[],...n&&e.paths.renderingConfigPath?[e.paths.renderingConfigPath]:[],...o&&e.paths.shadowsConfigPath?[e.paths.shadowsConfigPath]:[]];return hf(a,()=>(Hi(e),x2(e)))}async function x2(e){let t=hw(),r=t.measure("prepare",()=>M2(e)),n=Od(r).document,o=await t.measureAsync("prepare",()=>e.saveServices(e.server,e.projectRoot));Hi(e);let a=e.paths,i=Ta(e.body),s=jS(e.body),c=Object.prototype.hasOwnProperty.call(i,"rendering"),d=Object.prototype.hasOwnProperty.call(i,Bi),u=i[Bi],l=To(u),m=t.measure("prepare",()=>Ml(a.scenePath)??{}),p=Object.prototype.hasOwnProperty.call(e.body,"shadowMapExperimentConfig"),g=Rw(e.body)??Ow(a.shadowsConfigPath);t.measure("validate",()=>{uI(u,l,{present:d,path:"$.companionConfigs.staticShadows"})});let f=Ta(n),y=f[Bi];t.measure("validate",()=>{uI(y,To(y),{present:Object.prototype.hasOwnProperty.call(f,Bi),path:"$.editorScene.companionConfigs.staticShadows"})});let A=at(m)?.staticShadows;t.measure("validate",()=>{uI(A,To(A),{present:Object.prototype.hasOwnProperty.call(m,"staticShadows"),path:"$.scene.staticShadows"}),FS(n)});let T=s&&e.normalizeRenderingProfile?e.normalizeRenderingProfile(s):s,D=await t.measureAsync("prepare",()=>e.listEditorAssetLibrary(e.server,"strict"));Hi(e),t.measure("validate",()=>{Hd(n,D)});let P=t.measure("prepare",()=>{let He=o.ensureEditorSceneEnvironmentDefaults(o.enrichEditorSceneDocumentAssets(o.ensureAuthoringSource(n),D));return Gp(He,4)});t.measure("validate",()=>{o.assertEditorSceneDocument(P),o.assertEditorSceneMaterialAssetIntegrity(P)});let C=t.measure("prepare",()=>o.bumpEditorSceneAuthoringSourceRevision(P)),E=d?l:l??KR(n)??To(at(m)?.staticShadows),S=t.measure("prepare",()=>Gp(D2(C,{staticShadows:E}),4)),w=t.measure("prepare",()=>iy(S,D)),M=t.measure("compile",()=>o.compileEditorSceneDocumentToSceneConfig(C,m,{...s==null?{}:{renderingProfile:s},shadowMapExperimentConfig:g??null})),_=E?{...M.sceneConfig,staticShadows:E}:{...M.sceneConfig};E||delete _.staticShadows;let B=typeof m.version=="number"?m.version:void 0,re=typeof B=="number"?B+1:1,U=new Date().toISOString(),Be=t.measure("compile",()=>Gp(e.saveMode==="local-commit-save"?{..._,version:re,updatedAt:U}:_,4));t.measure("validate",()=>{nm(Be)});let Oe=at(Be)?.version,ze=e.saveMode==="local-commit-save"&&typeof Oe=="number"?Oe:re,Cr=`/${Ui.relative(e.projectRoot,a.scenePath).split(Ui.sep).join("/")}?v=${encodeURIComponent(String(ze))}`,Dt="",nt=[];try{{let He=t.measure("stringify",()=>`${JSON.stringify(w,null,2)}
|
|
16
|
+
`);await t.measureAsync("write",()=>bf(e,nt,a.editorScenePath,He))}if(s){if(!a.renderingConfigPath)throw new Error("rendering_config_path_missing");Hi(e),await bw(Ui.dirname(a.renderingConfigPath),{recursive:!0});let He=t.measure("stringify",()=>`${JSON.stringify(s,null,2)}
|
|
17
|
+
`);await t.measureAsync("write",()=>bf(e,nt,a.renderingConfigPath,He))}else if(c&&!a.renderingConfigPath)throw new Error("rendering_config_path_missing");if(p){if(!a.shadowsConfigPath||!g)throw new Error("shadows_config_path_missing");await bw(Ui.dirname(a.shadowsConfigPath),{recursive:!0});let He=t.measure("stringify",()=>`${JSON.stringify(g,null,2)}
|
|
18
|
+
`);await t.measureAsync("write",()=>bf(e,nt,a.shadowsConfigPath,He))}Dt=t.measure("stringify",()=>`${JSON.stringify(Be,null,2)}
|
|
19
|
+
`),e.saveMode==="local-commit-save"&&await t.measureAsync("write",()=>bf(e,nt,a.scenePath,Dt)),Hi(e),await t.measureAsync("write",async()=>{for(let He of nt)await T2(He.temporaryPath,He.targetPath),He.committed=!0;c&&!s&&await yw(a.renderingConfigPath,{force:!0})})}finally{await Promise.all(nt.filter(He=>!He.committed).map(He=>yw(He.temporaryPath,{force:!0}).catch(()=>{})))}let wr=[...c&&a.renderingConfigPath?e.createRenderingInvalidationFiles?.(e.projectRoot,a.renderingConfigPath)??[a.renderingConfigPath]:[],...p&&a.shadowsConfigPath?[a.shadowsConfigPath]:[]];return wr.length>0&&e.invalidateFiles?.(e.server,wr),{ok:!0,mode:e.saveMode,editorScenePath:a.editorScenePath,scenePath:a.scenePath,expectedVersion:B,...e.saveMode==="local-commit-save"?{version:ze,updatedAt:U,sceneUrl:Cr}:{},editorScene:S,...g?{shadowMapExperimentConfig:g}:{},...c||d?{companionConfigs:{...c?{rendering:s}:{},...d?{staticShadows:E}:{}},...s?{renderingSummary:e.summarizeRenderingProfile?.(T??null)??null}:{}}:{},sceneJsonText:Dt,performanceProfile:t.snapshot(),summary:{editorScene:Dw(C),compiled:M.summary}}}async function bf(e,t,r,n){Hi(e);let o=Ui.join(Ui.dirname(r),`.${Ui.basename(r)}.${process.pid}.${P2()}.tmp`),a={targetPath:r,temporaryPath:o,committed:!1};t.push(a),await A2(o,n,{encoding:"utf8",signal:e.signal})}function Hi(e){if(!e.signal?.aborted&&(e.deadlineAt===void 0||Date.now()<e.deadlineAt))return;let t=new Error("Document export lifecycle deadline elapsed before filesystem persistence completed.");throw Object.assign(t,{code:"document_export_timeout"}),t}function M2(e){let t=Ml(e.paths.editorScenePath);if(!t)return e.rawEditorScene;let r=Sw(t);if(!r)return e.rawEditorScene;let n=Sw(e.rawEditorScene),o=typeof e.body.expectedAuthoringSourceRevision=="number"&&Number.isFinite(e.body.expectedAuthoringSourceRevision)?e.body.expectedAuthoringSourceRevision:n?.revision??null;if(!(n?.sourceId===r.sourceId&&n.sourceType===r.sourceType)){let m={stage:e.saveMode==="prepare-platform-save"?"document.export":"document.save",expectedSourceId:r.sourceId,expectedSourceType:r.sourceType,actualSourceId:n?.sourceId??null,actualSourceType:n?.sourceType??null},p=new Error("authoring_source_identity_mismatch");throw Object.assign(p,{code:"authoring_source_identity_mismatch",details:m,...m}),p}if(n.revision===r.revision&&o===r.revision)return e.rawEditorScene;let i=at(e.body.authoringSourceConflictResolution);if(i?.strategy==="overwrite"&&typeof i.expectedPersistedRevision=="number"&&Number.isFinite(i.expectedPersistedRevision)&&i.expectedPersistedRevision===r.revision){let l=structuredClone(e.rawEditorScene),m=at(at(l.meta)?.authoringSource);return m&&(m.revision=r.revision),l}let c=e.saveMode==="prepare-platform-save"?"document.export":"document.save",d={stage:c,sourceId:r.sourceId,sourceType:r.sourceType,expectedRevision:o,submittedRevision:n.revision,persistedRevision:r.revision},u=new Error("authoring_source_revision_mismatch");throw Object.assign(u,{code:"authoring_source_revision_mismatch",stage:c,sourceId:r.sourceId,expectedRevision:o,actualRevision:r.revision,details:d}),u}function Sw(e){let t=at(at(e.meta)?.authoringSource);return typeof t?.sourceId!="string"||!t.sourceId.trim()||typeof t.sourceType!="string"||!t.sourceType.trim()||typeof t.revision!="number"||!Number.isFinite(t.revision)?null:{sourceId:t.sourceId,sourceType:t.sourceType,revision:t.revision}}function uI(e,t,r){if(!r.present||e==null||t)return;let n=new Error(`schema.unsupportedVersion: ${r.path}`);throw Object.assign(n,{code:"schema.unsupportedVersion",path:r.path}),n}function Mw(e){af(e)}function Dw(e){let t=at(e),r=at(t?.meta),n=at(r?.authoringSource),o=at(t?.scene);return{schemaVersion:t?.schemaVersion??null,sourceId:n?.sourceId??null,sourceType:n?.sourceType??null,revision:n?.revision??null,assets:Array.isArray(t?.assets)?t.assets.length:0,gameObjects:Array.isArray(o?.gameObjects)?o.gameObjects.length:0,materialAssets:Array.isArray(o?.materialAssets)?o.materialAssets.length:0}}function D2(e,t){let r={...Ta(e)};delete r.rendering;for(let[o,a]of Object.entries(t))a==null?delete r[o]:r[o]=a;let n={...e};return Object.keys(r).length>0?n.companionConfigs=r:delete n.companionConfigs,n}function Ml(e){return Tw(e)?JSON.parse(Aw(e,"utf8")||"{}"):null}function Ow(e){if(!e)return null;if(!Tw(e))throw new Error(`shadows_config_missing:${e}`);let t=JSON.parse(Aw(e,"utf8")||"{}");return ri(t,"$"),structuredClone(t)}function Rw(e){return Object.prototype.hasOwnProperty.call(e,"shadowMapExperimentConfig")?(ri(e.shadowMapExperimentConfig,"$.shadowMapExperimentConfig"),structuredClone(e.shadowMapExperimentConfig)):null}function Iw(e,t,r=!1){let n=at(e);if(!n)return;for(let a of["shadowMapExperimentConfig","shadowsConfig"])if(!(r&&a==="shadowMapExperimentConfig")&&Object.prototype.hasOwnProperty.call(n,a))throw Ew(`${t}.${a}`);let o=at(n.companionConfigs);if(o&&Object.prototype.hasOwnProperty.call(o,"shadows"))throw Ew(`${t}.companionConfigs.shadows`)}function Ew(e){let t=new Error(`shadow_map_experiment_config_readonly:${e}`);return Object.assign(t,{code:"shadowMapExperiment.configReadonly",path:e}),t}var yf=new WeakMap;function Cw(e,t){if(yf.has(e))throw new Error("Project authoring backend is already installed on this Vite server.");yf.set(e,t);let r=!0;return()=>{r&&(r=!1,yf.get(e)===t&&yf.delete(e))}}import Tc from"node:path";import{mkdir as G2,writeFile as L2}from"node:fs/promises";import{pipeline as F2}from"node:stream/promises";import{realpathSync as O2}from"node:fs";import pI from"node:path";function Ic(e,t){let r=e.moduleGraph,n=new Set;for(let o of t)for(let a of R2(o)){let i=r.getModulesByFile(a);if(i)for(let s of i)r.invalidateModule(s,n)}}function R2(e){let t=pI.resolve(e),r=Dl(t);return[...new Set([e,t,r,mI(e),mI(t),mI(r)])]}function Dl(e){let t=pI.resolve(e);try{return O2(t)}catch{return t}}function mI(e){return e.split(pI.sep).join("/")}import{constants as ww}from"node:fs";import Ol from"node:fs/promises";import Ki from"node:path";var C2=128*1024*1024,w2=512*1024*1024;async function Ec(e){let t=[];for(let n=0;n<2;n+=1)try{await e.close();return}catch(o){t.push(o)}let r=new Error("project_file_close_failed");throw r.errors=t,r}function v2(e){let t=e.trim();if(!t||t!==e||t.includes("\0")||t.includes("\\")||Ki.posix.isAbsolute(t)||/^[A-Za-z]:\//.test(t))throw new Error("project_file_path_invalid");let r=t.split("/");if(r.some(n=>!n||n==="."||n===".."))throw new Error("project_file_path_invalid");return r.join("/")}function fI(e){if(e===void 0)return C2;if(!Number.isSafeInteger(e)||e<=0)throw new Error("project_file_media_limit_invalid");return Math.min(e,w2)}async function Sf(e,t){let r=v2(t),n=await Ol.realpath(Ki.resolve(e)),o=Ki.resolve(n,...r.split("/"));vw(n,o),await _2(n,r);let a;try{a=await Ol.open(o,ww.O_RDONLY|(ww.O_NOFOLLOW??0))}catch(i){throw i?.code==="ELOOP"?new Error("project_file_symlink_unsupported"):i}try{let i=await a.stat();if(!i.isFile())throw new Error("project_file_not_found");let s=await Ol.realpath(o);if(vw(n,s),s!==o)throw new Error("project_file_symlink_unsupported");let c=await Ol.stat(s);if(c.dev!==i.dev||c.ino!==i.ino)throw new Error("project_file_changed_during_read");return{absolutePath:o,handle:a,relativePath:r,stat:i}}catch(i){try{await Ec(a)}catch(s){let c=new Error("project_file_close_failed");throw c.errors=[i,s],c}throw i}}function vw(e,t){let r=Ki.relative(e,t);if(!r||r===".."||r.startsWith(`..${Ki.sep}`)||Ki.isAbsolute(r))throw new Error("project_file_path_invalid")}async function _2(e,t){let r=e;for(let n of t.split("/"))if(r=Ki.join(r,n),(await Ol.lstat(r)).isSymbolicLink())throw new Error("project_file_symlink_unsupported")}import Fo from"node:fs/promises";import Yr from"node:path";var _w=512*1024,k2=new Set([".DS_Store",".cache",".git",".next",".nuxt",".parcel-cache",".turbo",".vite","build","coverage","dist","dist-tests","node_modules","output","playwright-report","test-results"]);async function kw(e,t={}){let r=await Fo.realpath(Yr.resolve(e)),n=Math.max(1,t.maxEntries??2e4),o=new Set([...k2,...t.ignoredNames??[]]),a=[],i=!1,s=async c=>{if(i)return;let d=Yr.resolve(r,c),u=await j2(r,d);if(u){u.sort((l,m)=>Number(m.isDirectory())-Number(l.isDirectory())||l.name.localeCompare(m.name,void 0,{numeric:!0,sensitivity:"base"}));for(let l of u){if(l.name.startsWith(".")||o.has(l.name)||l.isSymbolicLink())continue;if(a.length>=n){i=!0;return}let m=Yr.posix.join(c.split(Yr.sep).join("/"),l.name),p=Yr.resolve(r,...m.split("/")),h=await N2(r,p);if(!h)continue;let g=h==="file"?Yr.extname(l.name).slice(1).toLowerCase():"";a.push({path:m,name:l.name,parentPath:c?c.split(Yr.sep).join("/"):null,kind:h,...g?{extension:g}:{}}),h==="directory"&&await s(m)}}};return await s(""),{rootName:Yr.basename(r)||"Project",entries:a,truncated:i}}async function j2(e,t){try{let r=await Fo.lstat(t);if(r.isSymbolicLink()||!r.isDirectory())return null;let n=await Fo.realpath(t);if(n!==t||!gI(e,n))return null;let o=await Fo.readdir(t,{withFileTypes:!0}),a=await Fo.lstat(t),i=await Fo.realpath(t);return a.isSymbolicLink()||!a.isDirectory()||r.dev!==a.dev||r.ino!==a.ino||n!==i||i!==t||!gI(e,i)?null:o}catch{return null}}async function jw(e,t,r={}){let n=await Sf(e,t),{handle:o,relativePath:a,stat:i}=n;if(!nC(a))throw await Ec(o),new Error("project_file_preview_unsupported");let s=_w,c,d=0;try{s=Math.max(1,Math.min(r.maxBytes??_w,4*1024*1024));let l=Math.min(i.size,s);c=Buffer.alloc(l),l>0&&({bytesRead:d}=await o.read(c,0,l,0))}finally{await Ec(o)}let u=Yr.basename(a);return{path:a,name:u,extension:sf(u),language:$S(u)??"text",text:c.subarray(0,d).toString("utf8"),size:i.size,truncated:i.size>d}}async function N2(e,t){try{let r=await Fo.lstat(t);if(r.isSymbolicLink())return null;let n=await Fo.realpath(t);if(n===e||!gI(e,n)||n!==t)return null;let o=await Fo.stat(n);return o.dev!==r.dev||o.ino!==r.ino?null:o.isDirectory()?"directory":o.isFile()?"file":null}catch{return null}}function gI(e,t){let r=Yr.relative(e,t);return r===""||r!==".."&&!r.startsWith(`..${Yr.sep}`)&&!Yr.isAbsolute(r)}function Nw(e){let t=Promise.resolve([]);return{name:e.name??"fps-editor-project-authoring-api",enforce:"post",apply:"serve",async configureServer(r){let n=e.createAssetAuthoringHandlers(r),o=Cw(r,{loadEditorScene:()=>e.loadEditorScene(r),async listEditorAssets(){let a=await n;if(!a.loadEditorAssetLibrary)return[];let i=await a.loadEditorAssetLibrary({});if(Array.isArray(i))return i;if(i&&typeof i=="object"){let s=i,c=s.assets??s.items;if(Array.isArray(c))return c}return[]},...e.importEditorAsset?{importEditorAsset:e.importEditorAsset}:{},...e.refreshEditorAssets?{refreshEditorAssets:e.refreshEditorAssets}:{},saveEditorScene:a=>e.saveEditorScene({server:r,...a})});r.httpServer?.once("close",o),e.getAuthoringWrittenFiles&&(t=e.getAuthoringWrittenFiles(r).then(a=>a.map(i=>Tc.resolve(e.projectRoot,i))).then(async a=>($2(r,a),B2(r.watcher,a),await r.watcher?.unwatch?.(a),e.logger?.log?.("[ProjectAuthoring][Vite] watcher and HMR suppressed for authoring-written files",a),a)).catch(a=>(e.logger?.warn?.("[ProjectAuthoring][Vite] failed to resolve authoring files for HMR suppression",a),[])),await t),r.middlewares.use(async(a,i,s)=>{let c=new URL(a.url??"","http://localhost"),d=c.pathname,u=d.startsWith("/__fps_editor_authoring"),l=u&&d.replace(/^\/__fps_editor_authoring/,"")||"/";if(u&&l==="/project-media"){if(ff(i),a.method==="OPTIONS"){i.statusCode=204,i.end();return}if(a.method!=="GET"){Vi(i,{statusCode:405,body:{ok:!1,error:"method_not_allowed"}});return}let p=c.searchParams.get("path")?.trim()??"";if(!p){Vi(i,{statusCode:400,body:{ok:!1,error:"missing_file_path"}});return}try{let h=await Sf(e.projectRoot,p),g=null,f=null;try{let y=BS(h.relativePath);if(!y)throw new Error("project_file_media_unsupported");if(h.stat.size>fI(e.projectMediaMaxBytes))throw new Error("project_file_media_too_large");let A=Tc.basename(h.relativePath);if(i.statusCode=200,i.setHeader("Content-Type",y.mimeType),i.setHeader("Content-Length",String(h.stat.size)),i.setHeader("Content-Disposition",`inline; filename*=UTF-8''${encodeURIComponent(A)}`),i.setHeader("X-Content-Type-Options","nosniff"),h.stat.size>0&&(f=Buffer.allocUnsafe(1),(await h.handle.read(f,0,1,h.stat.size-1)).bytesRead!==1))throw new Error("project_file_changed_during_read");h.stat.size>1&&await F2(h.handle.createReadStream({autoClose:!1,start:0,end:h.stat.size-2}),i,{end:!1})}catch(y){g=y}try{await Ec(h.handle)}catch(y){if(g){let A=new Error("project_file_close_failed");A.errors=[g,y],g=A}else g=y}if(g)throw g;f?i.end(f):i.end()}catch(h){if(i.headersSent)i.destroy(h instanceof Error?h:void 0);else{let g=h instanceof Error?h.message:String(h);Vi(i,{statusCode:g==="project_file_media_too_large"?413:404,body:{ok:!1,error:g}})}}return}if(u&&l.startsWith("/rendering-profile")){if(!e.handleRenderingProfileRoute){s();return}if(ff(i),a.method==="OPTIONS"){i.statusCode=204,i.end();return}try{let p=await e.handleRenderingProfileRoute({server:r,req:a,readJsonBody:cI});Vi(i,p)}catch(p){Vi(i,{statusCode:500,body:{ok:!1,error:p instanceof Error?p.message:String(p),details:p?.details}})}return}let m=await dC({url:a.url??"",method:a.method??"GET"},{readBody:()=>cI(a),normalizeTransportPath:gw(e.projectRoot,{relativeRoot:".platform-sim"}),async loadManifest(p){let h=await n;if(!h.loadManifest)throw new Error("asset_manifest_handler_unavailable");return h.loadManifest(p)},async loadEditorAssetLibrary(p){let h=await n;if(!h.loadEditorAssetLibrary)throw new Error("asset_library_handler_unavailable");return h.loadEditorAssetLibrary(p)},async loadProjectFiles(){return kw(e.projectRoot,e.projectFileScan)},async loadProjectFile({path:p}){return jw(e.projectRoot,p)},async loadEditorScene(){return e.loadEditorScene(r)},writeFile:e.writeFile??z2,async runCommand(p){let h=await n;if(!h.runCommand)throw new Error("asset_command_handler_unavailable");return h.runCommand(p)},async saveEditorScene({mode:p,rawEditorScene:h,body:g}){return e.saveEditorScene({server:r,saveMode:p,rawEditorScene:h,body:g})}});if(!m){s();return}Vi(i,m)})},async handleHotUpdate(r){if(typeof r.file!="string")return;let n=await t;if(If(r.file,n))return[]}}}function If(e,t){let r=Dl(e);return t.some(n=>{let o=Dl(n);if(r===o)return!0;let a=Tc.relative(o,r);return a.length>0&&a!==".."&&!a.startsWith(`..${Tc.sep}`)&&!Tc.isAbsolute(a)})}function $2(e,t){if(!e.watcher?.prependListener||!e.ws?.send)return;let r=null,n=null,o=()=>{r=null,n&&clearTimeout(n),n=null},a=s=>{o(),r=typeof s=="string"&&If(s,t)?Dl(s):null,r&&(n=setTimeout(o,1e3))};for(let s of["add","change","unlink"])e.watcher.prependListener(s,a);let i=e.ws.send.bind(e.ws);e.ws.send=(s,...c)=>{let d=typeof s?.triggeredBy=="string"?s.triggeredBy:void 0,u=d?If(d,t):!1;if(!(s?.type==="full-reload"&&(u||r&&!d)))return i(s,...c)}}function B2(e,t){if(!e?.add)return;let r=e.add.bind(e);e.add=n=>{let a=(typeof n=="string"?[n]:[...n]).filter(i=>!If(i,t));return a.length===0?e:r(typeof n=="string"?a[0]:a)}}async function z2({path:e,text:t}){return await G2(Tc.dirname(e),{recursive:!0}),await L2(e,t,"utf8"),{ok:!0,path:e}}import Wi,{resolve as Rl}from"node:path";import{pathToFileURL as V2}from"node:url";function Gw(e){let t=Promise.resolve();function r(m){let p=t.then(m);return t=p.then(()=>{},()=>{}),p}async function n(m,p="strict"){let{projectAssetRegistryConfig:h,projectTextureRegistryConfig:g}=await l(),f=[h,g].filter(D=>!!D),y=[],A=[],T=0;for(let D of f){let P=await yc(D),C=typeof P.errorCodes=="object"&&P.errorCodes?P.errorCodes:{},E=p==="report"?await rI(D,C):await tI(D,C);T+=E.scannedAssetCount,y.push(...E.refreshedAssets);let S="availabilityIssues"in E&&Array.isArray(E.availabilityIssues)?E.availabilityIssues:[];A.push(...S)}return y.length>0&&Ic(m,[...f.flatMap(D=>[D.manifestPath,D.registryPath]),...hI(e)]),{scannedAssetCount:T,refreshedAssets:y,availabilityIssues:U2(A)}}function o(m){return r(async()=>{let p=await n(m,"strict");return{scannedAssetCount:p.scannedAssetCount,refreshedAssets:p.refreshedAssets}})}function a(m){return r(async()=>{let p=await n(m,"report"),h=u(Ud(await c(!1)),p.availabilityIssues??[]);return{scannedAssetCount:p.scannedAssetCount,refreshedAssetIds:p.refreshedAssets.map(g=>g.assetId),availabilityIssues:p.availabilityIssues??[],assets:h}})}function i(m,p){return r(async()=>{let{projectAssetRegistryConfig:h,projectTextureRegistryConfig:g}=await l(),f=p.kind??([".png",".jpg",".jpeg",".env"].includes(Wi.extname(p.sourcePath).toLowerCase())?"texture":"model"),y=f==="texture"?g??h:h,A=await yc(y),T=typeof A.errorCodes=="object"&&A.errorCodes?A.errorCodes:{},D=await to(y),P=await bc(y,{payloadData:{sourcePath:p.sourcePath,...p.displayName?{displayName:p.displayName}:{},kind:f,...p.category?{category:p.category}:{},...p.placeable===void 0?{}:{placeable:p.placeable}}},T);Ic(m,[y.manifestPath,y.registryPath,...hI(e)]);let E=Ud(await c(!1)).find(S=>S.assetId===P.assetId);if(!E)throw new Error("asset_import_catalog_projection_missing");return{asset:E,disposition:D.some(S=>S.assetId===P.assetId)?"deduplicated":"created"}})}async function s(m){let{projectAssetRegistryConfig:p,projectTextureRegistryConfig:h}=await l(),g=pw({assetRegistryConfig:p,textureRegistryConfig:h,loadAssetCatalogEntries:()=>c(!0),additionalInvalidationFiles:hI(e),invalidateFiles(f){Ic(m,f)}});return{loadManifest:f=>r(async()=>(await n(m,"report"),g.loadManifest(f))),loadEditorAssetLibrary:f=>r(async()=>{let y=await n(m,"report"),A=await g.loadEditorAssetLibrary(f);return!A||typeof A!="object"||!Array.isArray(A.assets)?A:{...A,assets:u(A.assets,y.availabilityIssues??[])}}),runCommand:f=>r(async()=>g.runCommand(f))}}async function c(m){let{projectAssetRegistryConfig:p,projectTextureRegistryConfig:h}=await l(),g=[p,h].filter(T=>!!T),f=[...new Map(g.map(T=>[T.manifestPath,T])).values()],y=(await Promise.all(f.map(T=>to(T)))).flat(),A=new Set;return y.filter(T=>{if(T.kind!=="model"&&T.kind!=="texture"||m&&T.kind==="model"&&T.placeable!==!0)return!1;if(A.has(T.assetId))throw new Error(`asset_catalog_duplicate_asset_id:${T.assetId}`);return A.add(T.assetId),!0})}async function d(m,p="strict"){return r(async()=>{let h=await n(m,p);return u(Ud(await c(!1)),h.availabilityIssues??[])})}function u(m,p){if(p.length===0)return m;let h=new Map;for(let g of p){let f=h.get(g.assetId)??[];f.push(g),h.set(g.assetId,f)}return m.map(g=>{let f=typeof g.assetId=="string"?g.assetId:typeof g.id=="string"?g.id:"",y=f?h.get(f):void 0;return!y||y.length===0?g:{...g,availability:{status:"unavailable",issues:y.map(A=>({code:A.code,reason:A.reason,stage:A.stage,severity:"error",relativePath:A.relativePath,...A.nodeCode?{nodeCode:A.nodeCode}:{},retryable:A.retryable}))}}})}async function l(){if(e.assetRegistryConfig)return{projectAssetRegistryConfig:e.assetRegistryConfig,projectTextureRegistryConfig:e.textureRegistryConfig??e.assetRegistryConfig};if(!e.assetCatalogConfigModulePath)throw new Error("Project asset authoring requires assetRegistryConfig or assetCatalogConfigModulePath.");return import(`${V2(Rl(e.projectRoot,e.assetCatalogConfigModulePath)).href}?project-asset-catalog-config=${Date.now()}`)}return{createProjectAssetAuthoringHandlers:s,listEditorAssetLibrary:d,loadProjectAssetCatalogConfigModule:l,importProjectAsset:i,refreshProjectAssetCatalog:o,refreshAndListProjectAssetCatalog:a}}function U2(e){let t=new Set;return e.filter(r=>{let n=JSON.stringify([r.assetId,r.guid,r.kind,r.relativePath,r.stage,r.reason,r.code,r.nodeCode??null,r.retryable]);return t.has(n)?!1:(t.add(n),!0)})}function Lw(e,t){let r=Rl(e,t.importedDir),n=Rl(e,t.generatedDir),o=Wi.dirname(r);return{cwd:e,codeKeyPolicy:"disabled",assetsDir:o,importedDir:r,generatedDir:n,manifestPath:Wi.join(n,"asset-catalog.manifest.json"),registryPath:Wi.join(n,"asset-catalog.generated.ts"),scenePath:Rl(e,t.runtimeArtifact),supportedExtensions:mc,commands:{register:"asset:register",unregister:"asset:unregister"},relativeImportedPath(a,i){let s=a==="sound"?"sounds":a==="model"?"":"textures",c=Wi.join(r,s,i);return Wi.relative(n,c).split(Wi.sep).join("/")},resolveAssetMetadata(a){return Tl({kind:a.kind,sourcePath:a.sourcePath,existingMetadata:a.existingMetadata,payloadMetadata:a.payloadMetadata,guid:a.guid,assetId:a.assetId,cwd:e,assetsDir:o})}}}function hI(e){return(e.additionalInvalidationFiles??[]).map(t=>Rl(e.projectRoot,t))}import Ef from"node:path";function Fw(e,t){return{editorScenePath:Ef.resolve(t,e.source.editorScene),scenePath:Ef.resolve(t,e.source.runtimeScene),...e.source.rendering?{renderingConfigPath:Ef.resolve(t,e.source.rendering)}:{},...e.source.shadows?{shadowsConfigPath:Ef.resolve(t,e.source.shadows)}:{}}}import{existsSync as H2,readFileSync as K2}from"node:fs";import{mkdir as W2,writeFile as q2}from"node:fs/promises";import bI from"node:path";function $w(e,t){let r=e.source.rendering,n=r?bI.resolve(t.projectRoot,r):null,o=()=>[...n?[n]:[],...(t.additionalInvalidationFiles??[]).map(a=>bI.resolve(t.projectRoot,a))];return{createInvalidationFiles:o,summarize:J2,async handleRoute(a){return n?xC({method:Y2(a.req)},{readBody:()=>a.readJsonBody(a.req),loadConfig(){return{renderingConfig:H2(n)?JSON.parse(K2(n,"utf8")||"{}"):{},response:{renderingConfigPath:n}}},async saveConfig({renderingConfig:i}){return hf([n],async()=>(await W2(bI.dirname(n),{recursive:!0}),await q2(n,`${JSON.stringify(i,null,2)}
|
|
20
|
+
`,"utf8"),Ic(a.server,o()),{renderingConfigPath:n}))}}):{statusCode:404,body:{error:"rendering_config_not_configured"}}}}}function Y2(e){if(!e||typeof e!="object")return"GET";let t=e.method;return typeof t=="string"?t:"GET"}function J2(e){return{postProcessEnabled:e?.postProcess?.enabled??e?.globalVolume?.enabled??null,postProcessBloomEnabled:e?.postProcess?.bloom?.enabled??e?.globalVolume?.postProcessing?.bloom?.enabled??null,planarEnabled:e?.shadows?.planar?.enabled??null,planarOpacity:e?.shadows?.planar?.appearance?.color?.a??null,planeHeight:e?.shadows?.planar?.plane?.height??null,planeBias:e?.shadows?.planar?.plane?.bias??null,stencilEnabled:e?.shadows?.planar?.stencil?.enabled??null}}var X2="/__fps_runtime/scene-publish";async function Bw(e){let t=e.fetch??globalThis.fetch,r=new URL(Q2(e.path),Z2(e.runtimeUrl)),n=await t(r,{method:"POST",headers:{authorization:`Bearer ${e.token}`,"content-type":"application/json"},body:JSON.stringify(eq(e.data))});if(!n.ok)throw new Error(`runtime_scene_publish_failed:${n.status}`)}function Q2(e){let t=e?.trim()||X2;if(!t.startsWith("/")||t.startsWith("//"))throw new Error("runtime_scene_publish_path_invalid");return t}function Z2(e){let t=e.trim();if(!t)throw new Error("runtime_scene_publish_runtime_url_required");let r=new URL(t);if(r.protocol!=="http:"&&r.protocol!=="https:")throw new Error("runtime_scene_publish_runtime_url_invalid");return r.toString()}function eq(e){if(!e||typeof e!="object"||Array.isArray(e))throw new Error("runtime_scene_publish_payload_invalid");let t=e,r=typeof t.transactionId=="string"?t.transactionId.trim():"",n=t.version,o=typeof t.sceneUrl=="string"?t.sceneUrl.trim():"";if(!r||!Number.isSafeInteger(n)||n<0||!o)throw new Error("runtime_scene_publish_payload_invalid");return Object.freeze({transactionId:r,version:n,sceneUrl:o})}import{randomUUID as bG}from"node:crypto";import{createServer as lZ}from"node:http";import{mkdir as uZ,readFile as mZ,realpath as pZ,rename as fZ,rm as gZ,writeFile as hZ}from"node:fs/promises";import od from"node:path";function Pa(e){let t=e.sessionId??e.clientId??e.principal.id??`request:${e.requestId}`;return Object.freeze({principal:Object.freeze({...e.principal}),source:e.source,sessionId:t,...e.surface?{surface:e.surface}:{}})}function dr(e){return e?{principal:{...e.principal},source:e.source,sessionId:e.sessionId,...e.surface?{surface:e.surface}:{}}:void 0}var qi=new WeakMap,Cl=new WeakMap,yI=new WeakSet;function zw(e){yI.add(e)}function Tf(e){return yI.has(e)?qi.get(e)===void 0:!1}function SI(e,t){let r=qi.get(e);if(r&&r!==t)throw new Error("Editor Session already has a different write authority.");qi.set(e,t)}function wl(e,t){qi.get(e)===t&&qi.delete(e)}function Wt(e,t,r){let n=vl(e,t,r);if(n&&typeof n=="object"&&"then"in n&&typeof n.then=="function")throw new Error("Editor Session write authority handlers must be synchronous.");return n}function vl(e,t,r){if(qi.get(e)!==t)throw new Error("Editor Session write authority is unavailable.");let n=Cl.get(e);if(n&&n!==t)throw new Error("Editor Session has a different active write authority.");Cl.set(e,t);try{return r()}finally{n?Cl.set(e,n):Cl.delete(e)}}function Tn(e){if(!yI.has(e))throw new Error("Editor Session mutations require the canonical Session instance.");let t=qi.get(e);if(t&&Cl.get(e)!==t)throw new Error("Editor Session document mutation requires its Authoring Host write authority.")}var Vw=Symbol("EditorSession.trustedInitialDocumentReferences");function Uw(e){let t=globalThis.structuredClone;return typeof t=="function"?t(e):JSON.parse(JSON.stringify(e))}function tq(e,t){return e===t?!0:JSON.stringify(e)===JSON.stringify(t)}function An(e){let t=xa(e?.selectedIds??[]),r=e?.activeId&&t.includes(e.activeId)?e.activeId:t[t.length-1]??null;return{selectedIds:t,activeId:r}}function xa(e){let t=[],r=new Set;for(let n of e)!n||r.has(n)||(r.add(n),t.push(n));return t}function Af(e,t){return e.activeId!==t.activeId||e.selectedIds.length!==t.selectedIds.length?!1:e.selectedIds.every((r,n)=>t.selectedIds[n]===r)}function Hw(e,t){if(e===void 0)return 0;if(!Number.isSafeInteger(e)||e<0)throw new Error(`${t} must be a non-negative safe integer.`);return e}function rq(e,t){if(t.type==="selection.clear")return An();if(t.type==="selection.replace")return An({selectedIds:t.selectedIds,activeId:t.activeId});if(t.type==="selection.add"){let o=xa([...e.selectedIds,...t.selectedIds]);return An({selectedIds:o,activeId:t.activeId??t.selectedIds[t.selectedIds.length-1]??e.activeId})}if(t.type==="selection.remove"){let o=new Set(t.selectedIds),a=e.selectedIds.filter(i=>!o.has(i));return An({selectedIds:a,activeId:e.activeId&&a.includes(e.activeId)?e.activeId:a[a.length-1]??null})}let r=[...e.selectedIds],n=e.activeId;for(let o of t.selectedIds){let a=r.indexOf(o);a>=0?(r.splice(a,1),n===o&&(n=r[r.length-1]??null)):o&&(r.push(o),n=o)}return An({selectedIds:r,activeId:t.activeId??n})}var II=class e{constructor(t,r){this.undoStack=[],this.redoStack=[],this.exposedTransactions=new WeakMap,this.nextTransactionId=1,this.documentRevision=0,this.documentStructureRevision=0,this.protectedWorkingDocument=null,this.protectedPersistedDocument=null,zw(this),this.cloneDocument=t.cloneDocument??Uw,this.clonePatch=t.clonePatch??Uw,this.compareDocuments=t.compareDocuments??tq,this.historyDocumentStorage=t.historyDocumentStorage??"defensive-clone",this.cloneResultDocumentsByDefault=t.cloneResultDocumentsByDefault!==!1,this.reduceDocument=t.reduceDocument,this.isDocumentStructureChange=t.isDocumentStructureChange??(()=>!0),this.source=$o(t.source);let n=r===Vw&&this.historyDocumentStorage==="immutable-reference";this.persistedDocument=n?t.persistedDocument:this.cloneDocument(t.persistedDocument),this.workingDocument=n?t.workingDocument??t.persistedDocument:this.cloneDocument(t.workingDocument??t.persistedDocument),this.selection=An(t.selection),this.documentRevision=Hw(t.initialDocumentRevision,"initialDocumentRevision"),this.documentStructureRevision=Hw(t.initialDocumentStructureRevision,"initialDocumentStructureRevision"),this.onChange=t.onChange,this.onChangeError=t.onChangeError,this.dirty=!this.compareDocuments(this.workingDocument,this.persistedDocument)}getState(t={}){let r=t.cloneDocuments!==!1,n=!r&&Tf(this);return{persistedDocument:r?this.cloneDocument(this.persistedDocument):n?this.persistedDocument:this.getProtectedDocumentSnapshot("persisted",this.persistedDocument),workingDocument:r?this.cloneDocument(this.workingDocument):n?this.workingDocument:this.getProtectedDocumentSnapshot("working",this.workingDocument),documentRevision:this.documentRevision,documentStructureRevision:this.documentStructureRevision,source:$o(this.source),selection:this.getSelection(),dirty:this.dirty,canUndo:this.canUndo(),canRedo:this.canRedo(),history:this.getHistoryView()}}getMetadata(){return{documentRevision:this.documentRevision,documentStructureRevision:this.documentStructureRevision,source:$o(this.source),selection:this.getSelection(),dirty:this.dirty,canUndo:this.canUndo(),canRedo:this.canRedo(),history:this.getHistoryView()}}getWorkingDocument(){return this.cloneDocument(this.workingDocument)}getPersistedDocument(){return this.cloneDocument(this.persistedDocument)}getSource(){return $o(this.source)}getSelection(){return{selectedIds:[...this.selection.selectedIds],activeId:this.selection.activeId}}detachDocumentReferencesForWriteAuthority(){Tn(this),this.persistedDocument=this.cloneDocument(this.persistedDocument),this.workingDocument=this.cloneDocument(this.workingDocument),this.protectedWorkingDocument=null,this.protectedPersistedDocument=null}isDirty(){return this.dirty}fork(t={}){let r=new e({source:this.source,persistedDocument:this.workingDocument,selection:t.selection,onChange:t.onChange,onChangeError:t.onChangeError,cloneDocument:this.cloneDocument,clonePatch:this.clonePatch,compareDocuments:this.compareDocuments,historyDocumentStorage:this.historyDocumentStorage,cloneResultDocumentsByDefault:this.cloneResultDocumentsByDefault,reduceDocument:this.reduceDocument,isDocumentStructureChange:this.isDocumentStructureChange});return t.preserveDocumentRevision&&(r.documentRevision=this.documentRevision,r.documentStructureRevision=this.documentStructureRevision),r}beginTransaction(){let t=this,r=this.documentRevision,n=An(this.selection),o=new e({source:this.source,persistedDocument:this.persistedDocument,workingDocument:this.workingDocument,selection:this.selection,cloneDocument:this.cloneDocument,clonePatch:this.clonePatch,compareDocuments:this.compareDocuments,historyDocumentStorage:this.historyDocumentStorage,cloneResultDocumentsByDefault:this.cloneResultDocumentsByDefault,reduceDocument:this.reduceDocument,isDocumentStructureChange:this.isDocumentStructureChange},this.historyDocumentStorage==="immutable-reference"?Vw:void 0);o.undoStack=this.cloneTransactions(this.undoStack),o.redoStack=this.cloneTransactions(this.redoStack),o.nextTransactionId=this.nextTransactionId,o.documentRevision=this.documentRevision,o.documentStructureRevision=this.documentStructureRevision,o.dirty=this.dirty;let a=!0,i=(s="document")=>{if(!a)throw new Error("Editor Session transaction is no longer active.");if(t.documentRevision!==r)throw a=!1,new Error(`Editor Session transaction base revision changed: expected ${r}, received ${t.documentRevision}.`);let c=o.documentRevision!==r,d=An(o.selection),u=c||t.undoStack.length!==o.undoStack.length||t.redoStack.length!==o.redoStack.length,l=$o(o.source),m=t.historyDocumentStorage==="immutable-reference",p=m?o.persistedDocument:t.cloneDocument(o.persistedDocument),h=m?o.workingDocument:t.cloneDocument(o.workingDocument),g=t.cloneTransactions(o.undoStack),f=t.cloneTransactions(o.redoStack),y=o.getState({cloneDocuments:t.cloneResultDocumentsByDefault}),A=!0,T=()=>{if(!A||!a)throw new Error("Editor Session prepared commit is no longer active.");if(t.documentRevision!==r)throw A=!1,a=!1,new Error(`Editor Session transaction base revision changed: expected ${r}, received ${t.documentRevision}.`)};return{assertReady:T,commit(D={}){Tn(t),T();let P=An(t.selection),C=!Af(P,n),E=An(C?P:d),S=!Af(P,E),w={...y,selection:{selectedIds:[...E.selectedIds],activeId:E.activeId}},M=!1,_=()=>{M||(M=!0,(c||S||u)&&t.emitChange(s,c,S,u))};return t.source=l,t.persistedDocument=p,t.workingDocument=h,t.selection=E,t.dirty=o.dirty,t.undoStack=g,t.redoStack=f,t.nextTransactionId=o.nextTransactionId,t.documentRevision=o.documentRevision,t.documentStructureRevision=o.documentStructureRevision,A=!1,a=!1,D.deferChangeNotification||_(),{state:w,notifyChange:_}},discard(){A&&(A=!1,a=!1)}}};return{session:o,baseDocumentRevision:r,prepareCommit:i,commit(s="document"){return i(s).commit().state},discard(){a=!1}}}canUndo(){return this.undoStack.length>0}canRedo(){return this.redoStack.length>0}dispatch(t,r={}){let n=this.selection;if(cq(t)){let A=rq(this.selection,t),T=!Af(n,A),D=r.cloneResultDocument??(this.historyDocumentStorage==="immutable-reference"?this.cloneResultDocumentsByDefault:!1),P=D?this.cloneDocument(this.workingDocument):this.workingDocument,C={selectedIds:[...A.selectedIds],activeId:A.activeId};return this.selection=A,this.emitChange("selection",!1,T,!1),{command:t,workingDocument:D||Tf(this)?P:this.getProtectedDocumentSnapshot("working",this.workingDocument),selection:C,dirty:this.dirty,documentChanged:!1,selectionChanged:T}}Tn(this);let o=this.isDocumentStructureChange(t),a=t.type==="document.patch"&&r.assumeDocumentChanged===!0,i=this.historyDocumentStorage==="immutable-reference",s=a||i?this.workingDocument:this.cloneDocument(this.workingDocument),c=this.workingDocument;if(t.type==="document.replace")c=i?t.document:this.cloneDocument(t.document);else if(t.type==="document.patch"){if(!this.reduceDocument)throw new Error("EditorSession requires reduceDocument to handle document.patch commands.");let A=i&&r.clonePatchInput!==!1?{...t,patch:this.clonePatch(t.patch)}:t;c=this.reduceDocument(i||r.clonePatchInput===!1?this.workingDocument:this.cloneDocument(this.workingDocument),A)}let d=r.assumeDocumentChanged===!0?!0:t.type==="document.replace"?!this.compareDocuments(s,c):i?c!==s:!this.compareDocuments(s,c),u=!Af(n,this.selection),l=d?r.assumeDirty===!0?!0:!this.compareDocuments(c,this.persistedDocument):this.dirty,m=d&&sq(t)?this.stageTransaction(t,s,c,r,o):void 0,p=r.cloneResultDocument??this.cloneResultDocumentsByDefault,h=p?this.cloneDocument(c):c,g=m?p?Pf(m.result,this.cloneDocument):m.result:void 0,f=p&&m?.mergedPrevious?this.exposedTransactions.get(m.mergedPrevious.target):void 0,y=f&&m?Pf(m.result,this.cloneDocument):void 0;if(d&&(this.workingDocument=c,this.documentRevision+=1,o&&(this.documentStructureRevision+=1),this.dirty=l,m)){if(m.mergedPrevious&&Object.assign(m.mergedPrevious.target,m.mergedPrevious.value),f&&y)try{Object.assign(f,y)}catch{this.exposedTransactions.delete(m.mergedPrevious.target)}this.undoStack=m.undoStack,this.redoStack=[],m.advancesTransactionId&&(this.nextTransactionId+=1),!m.mergedPrevious&&p&&g&&this.exposedTransactions.set(m.storedTransaction,g)}return this.emitChange("document",d,u,!!g),{command:t,workingDocument:p||Tf(this)?h:this.getProtectedDocumentSnapshot("working",this.workingDocument),selection:this.getSelection(),dirty:this.isDirty(),documentChanged:d,selectionChanged:u,transaction:g}}undo(t={}){Tn(this);let r=this.undoStack[this.undoStack.length-1];if(!r)return null;let n=this.historyDocumentStorage==="immutable-reference"?r.beforeDocument:this.cloneDocument(r.beforeDocument),o=!this.compareDocuments(n,this.persistedDocument),a=t.cloneResultDocument??this.cloneResultDocumentsByDefault,i=a?this.cloneDocument(n):n,s=a?Pf(r,this.cloneDocument):r;return this.undoStack=this.undoStack.slice(0,-1),this.redoStack=[...this.redoStack,r],this.workingDocument=n,this.documentRevision+=1,r.structureChanged&&(this.documentStructureRevision+=1),this.dirty=o,this.emitChange("history",!0,!1,!0),{transaction:s,workingDocument:i,selection:this.getSelection(),dirty:this.isDirty(),documentChanged:!0}}redo(t={}){Tn(this);let r=this.redoStack[this.redoStack.length-1];if(!r)return null;let n=this.historyDocumentStorage==="immutable-reference"?r.afterDocument:this.cloneDocument(r.afterDocument),o=!this.compareDocuments(n,this.persistedDocument),a=t.cloneResultDocument??this.cloneResultDocumentsByDefault,i=a?this.cloneDocument(n):n,s=a?Pf(r,this.cloneDocument):r;return this.redoStack=this.redoStack.slice(0,-1),this.undoStack=[...this.undoStack,r],this.workingDocument=n,this.documentRevision+=1,r.structureChanged&&(this.documentStructureRevision+=1),this.dirty=o,this.emitChange("history",!0,!1,!0),{transaction:s,workingDocument:i,selection:this.getSelection(),dirty:this.isDirty(),documentChanged:!0}}markSaved(t,r,n={}){Tn(this),this.assertTrustedDocumentInputReuse(n.cloneDocumentInput),r&&(this.source=$o(r));let o=n.structureChanged??!this.compareDocuments(this.workingDocument,t);return n.cloneDocumentInput===!1?(this.persistedDocument=t,this.workingDocument=t):(this.persistedDocument=this.cloneDocument(t),this.workingDocument=this.cloneDocument(t)),n.resetHistory?(this.undoStack=[],this.redoStack=[]):this.rebaseCurrentHistoryBoundary(this.workingDocument),this.documentRevision+=1,o&&(this.documentStructureRevision+=1),this.dirty=!1,this.emitChange("saved",!0,!1,n.resetHistory===!0),this.getState({cloneDocuments:n.cloneResultDocuments!==!1})}markPersistedCheckpoint(t,r,n={}){return Tn(this),this.assertTrustedDocumentInputReuse(n.cloneDocumentInput),r&&(this.source=$o(r)),this.persistedDocument=n.cloneDocumentInput===!1?t:this.cloneDocument(t),this.documentRevision+=1,this.dirty=!this.compareDocuments(this.workingDocument,this.persistedDocument),this.emitChange("saved",!0,!1,!1),this.getState({cloneDocuments:n.cloneResultDocuments!==!1})}reset(t,r){return Tn(this),this.source=$o(r),this.persistedDocument=this.cloneDocument(t),this.workingDocument=this.cloneDocument(t),this.documentRevision+=1,this.documentStructureRevision+=1,this.selection=An(),this.dirty=!1,this.undoStack=[],this.redoStack=[],this.emitChange("reset",!0,!0,!0),this.getState()}rebaseExternalDocuments(t,r={}){Tn(this),this.assertTrustedDocumentInputReuse(r.cloneDocumentInput);let n=r.cloneDocumentInput===!1?t.persistedDocument:this.cloneDocument(t.persistedDocument),o=r.cloneDocumentInput===!1?t.workingDocument:this.cloneDocument(t.workingDocument),a=!this.compareDocuments(o,n),i=t.structureChanged??!this.compareDocuments(this.workingDocument,o),s=r.cloneResultDocuments!==!1,c=s?this.cloneDocument(n):n,d=s?this.cloneDocument(o):o,u=$o(this.source),l=this.getSelection(),m=this.documentRevision+1;return this.persistedDocument=n,this.workingDocument=o,this.documentRevision=m,i&&(this.documentStructureRevision+=1),this.dirty=a,this.undoStack=[],this.redoStack=[],this.emitChange("rebase",!0,!1,!0),{persistedDocument:c,workingDocument:d,documentRevision:m,documentStructureRevision:this.documentStructureRevision,source:u,selection:l,dirty:a,canUndo:!1,canRedo:!1,history:{entries:[]}}}advanceRevisionsForScopeSwitch(t,r){if(Tn(this),!Number.isSafeInteger(t)||t<=this.documentRevision)throw new Error("Scope switch document revision must advance the target Session.");if(!Number.isSafeInteger(r)||r<=this.documentStructureRevision)throw new Error("Scope switch structure revision must advance the target Session.");this.documentRevision=t,this.documentStructureRevision=r}emitChange(t,r,n,o){try{this.onChange?.(Object.freeze({reason:t,dirty:this.dirty,documentChanged:r,selectionChanged:n,historyChanged:o,documentRevision:this.documentRevision}))}catch(a){try{this.onChangeError?.(a)}catch{}}}assertTrustedDocumentInputReuse(t){if(t===!1&&this.historyDocumentStorage!=="immutable-reference")throw new Error("Editor Session can retain document input only with immutable-reference storage.")}rebaseCurrentHistoryBoundary(t){let r=this.undoStack[this.undoStack.length-1],n=this.redoStack[this.redoStack.length-1],o=r?this.exposedTransactions.get(r):void 0,a=n?this.exposedTransactions.get(n):void 0,i=o?this.cloneDocument(t):void 0,s=a?this.cloneDocument(t):void 0;r&&(r.afterDocument=t),n&&(n.beforeDocument=t),o&&i&&(o.afterDocument=i),a&&s&&(a.beforeDocument=s)}getProtectedDocumentSnapshot(t,r){let n=t==="working"?this.protectedWorkingDocument:this.protectedPersistedDocument;if(n?.revision===this.documentRevision&&n.source===r)return n.snapshot;let o=Ww(this.cloneDocument(r)),a={revision:this.documentRevision,source:r,snapshot:o};return t==="working"?this.protectedWorkingDocument=a:this.protectedPersistedDocument=a,o}stageTransaction(t,r,n,o,a){let i=this.historyDocumentStorage==="immutable-reference",s=u=>i?u:this.cloneDocument(u),c=o.mergeWithPrevious?this.undoStack[this.undoStack.length-1]:void 0;if(c){let u={...c,afterDocument:s(n),projectionImpact:nq(c.projectionImpact,t.projectionImpact),presentationImpact:oq(c.presentationImpact,t.presentationImpact),authoringPatch:aq(c.authoringPatch,t.authoringPatch),origin:dr(t.origin)??dr(c.origin),structureChanged:c.structureChanged||a};return{undoStack:this.undoStack,storedTransaction:c,advancesTransactionId:!1,mergedPrevious:{target:c,value:u},result:i?u:{...u,beforeDocument:this.cloneDocument(u.beforeDocument),afterDocument:this.cloneDocument(u.afterDocument),projectionImpact:xf(u.projectionImpact),presentationImpact:Mf(u.presentationImpact),authoringPatch:Ma(u.authoringPatch)}}}let d={id:`transaction_${this.nextTransactionId}`,label:t.label??t.type,commandType:t.type,beforeDocument:s(r),afterDocument:s(n),...t.projectionImpact?{projectionImpact:xf(t.projectionImpact)}:{},...t.presentationImpact?{presentationImpact:Mf(t.presentationImpact)}:{},...t.authoringPatch?{authoringPatch:Ma(t.authoringPatch)}:{},structureChanged:a,createdAt:Date.now(),...t.origin?{origin:dr(t.origin)}:{}};return{undoStack:[...this.undoStack,d],storedTransaction:d,advancesTransactionId:!0,result:d}}cloneTransactions(t){let r=this.historyDocumentStorage==="immutable-reference";return t.map(n=>({...n,beforeDocument:r?n.beforeDocument:this.cloneDocument(n.beforeDocument),afterDocument:r?n.afterDocument:this.cloneDocument(n.afterDocument),projectionImpact:xf(n.projectionImpact),presentationImpact:Mf(n.presentationImpact),authoringPatch:Ma(n.authoringPatch),origin:dr(n.origin)}))}getHistoryView(){return{entries:[...this.undoStack,...this.redoStack].map(iq).sort((t,r)=>r.createdAt-t.createdAt)}}};function Ww(e,t=new WeakSet){if(e===null||typeof e!="object")return e;let r=e;if(t.has(r))return e;t.add(r);for(let n of Reflect.ownKeys(r)){let o=Object.getOwnPropertyDescriptor(r,n);o&&"value"in o&&Ww(o.value,t)}try{Object.freeze(r)}catch{}return e}function xf(e){if(e)return e.type==="rebuild"?{type:"rebuild",...e.reason?{reason:e.reason}:{}}:{type:"incremental",...e.syncTransformIds?{syncTransformIds:[...e.syncTransformIds]}:{},...e.syncMetadataIds?{syncMetadataIds:[...e.syncMetadataIds]}:{},...e.syncAppearanceIds?{syncAppearanceIds:[...e.syncAppearanceIds]}:{},...e.reprojectIds?{reprojectIds:[...e.reprojectIds]}:{},...e.createdNodeIds?{createdNodeIds:[...e.createdNodeIds]}:{},...e.deletedNodeIds?{deletedNodeIds:[...e.deletedNodeIds]}:{}}}function nq(e,t){if(!(!e||!t)){if(e.type==="rebuild"||t.type==="rebuild"){let r=e.type==="rebuild"?e.reason:t.type==="rebuild"?t.reason:void 0;return{type:"rebuild",...r?{reason:r}:{}}}return{type:"incremental",syncTransformIds:xa([...e.syncTransformIds??[],...t.syncTransformIds??[]]),syncMetadataIds:xa([...e.syncMetadataIds??[],...t.syncMetadataIds??[]]),syncAppearanceIds:xa([...e.syncAppearanceIds??[],...t.syncAppearanceIds??[]]),reprojectIds:xa([...e.reprojectIds??[],...t.reprojectIds??[]]),createdNodeIds:xa([...e.createdNodeIds??[],...t.createdNodeIds??[]]),deletedNodeIds:xa([...e.deletedNodeIds??[],...t.deletedNodeIds??[]])}}}function Mf(e){if(e)return{...e.inspector?{inspector:e.inspector==="full"?"full":[...e.inspector]}:{},...e.hierarchy?{hierarchy:e.hierarchy==="full"?"full":{labelIds:[...e.hierarchy.labelIds]}}:{},...e.materials?{materials:{assetIds:[...e.materials.assetIds]}}:{},...e.rendering?{rendering:!0}:{}}}function oq(e,t){if(!(!e||!t))return{...e.inspector||t.inspector?{inspector:e.inspector==="full"||t.inspector==="full"?"full":[...new Set([...e.inspector??[],...t.inspector??[]])]}:{},...e.hierarchy||t.hierarchy?{hierarchy:e.hierarchy==="full"||t.hierarchy==="full"?"full":{labelIds:[...new Set([...e.hierarchy?.labelIds??[],...t.hierarchy?.labelIds??[]])]}}:{},...e.materials||t.materials?{materials:{assetIds:[...new Set([...e.materials?.assetIds??[],...t.materials?.assetIds??[]])]}}:{},...e.rendering||t.rendering?{rendering:!0}:{}}}function Ma(e){if(e)return e.kind==="hierarchy"?{kind:"hierarchy",operations:structuredClone(e.operations)}:e.kind==="material"?{kind:"material",operations:structuredClone(e.operations)}:e.kind==="asset"?{kind:"asset",operations:structuredClone(e.operations)}:{kind:"fields",writes:e.writes.map(t=>({targetId:t.targetId,path:t.path,before:structuredClone(t.before),after:structuredClone(t.after)}))}}function aq(e,t){if(!e||!t||e.kind!==t.kind)return;if(e.kind==="hierarchy"&&t.kind==="hierarchy")return Ma({kind:"hierarchy",operations:[...e.operations,...t.operations]});if(e.kind==="material"&&t.kind==="material"){let n=new Map;for(let o of e.operations)n.set(Kw(o),o);for(let o of t.operations){let a=Kw(o),i=n.get(a);if(!i){n.set(a,o);continue}i.type==="asset-update"&&o.type==="asset-update"?n.set(a,{...o,before:i.before,affectedNodeIds:[...new Set([...i.affectedNodeIds,...o.affectedNodeIds])]}):i.type==="binding-update"&&o.type==="binding-update"&&n.set(a,{...o,before:i.before,affectedNodeIds:[...new Set([...i.affectedNodeIds,...o.affectedNodeIds])]})}return Ma({kind:"material",operations:[...n.values()]})}if(e.kind==="asset"&&t.kind==="asset"){let n=new Map;for(let o of e.operations)n.set(o.assetId,o);for(let o of t.operations){let a=n.get(o.assetId);n.set(o.assetId,a?{type:o.after===null?"remove":"upsert",assetId:o.assetId,before:a.before,after:o.after}:o)}return Ma({kind:"asset",operations:[...n.values()]})}if(e.kind!=="fields"||t.kind!=="fields")return;let r=new Map;for(let n of e.writes)r.set(`${n.targetId}\0${n.path}`,n);for(let n of t.writes){let o=`${n.targetId}\0${n.path}`,a=r.get(o);r.set(o,a?{...n,before:a.before}:n)}return Ma({kind:"fields",writes:[...r.values()]})}function Kw(e){return e.type==="asset-update"?`asset\0${e.materialAssetId}`:["binding",e.scope,e.containerId??"",e.targetId,e.slotId??""].join("\0")}function iq(e){return{id:e.id,label:e.label,commandType:e.commandType,createdAt:e.createdAt,...e.origin?{origin:dr(e.origin)}:{}}}function Pf(e,t){return{...e,beforeDocument:t(e.beforeDocument),afterDocument:t(e.afterDocument),projectionImpact:xf(e.projectionImpact),presentationImpact:Mf(e.presentationImpact),authoringPatch:Ma(e.authoringPatch),origin:dr(e.origin)}}function $o(e){if(e)return{...e,ref:{...e.ref},capabilities:e.capabilities?{...e.capabilities}:void 0,metadata:e.metadata?structuredClone(e.metadata):void 0}}function sq(e){return e.type==="document.patch"||e.type==="document.replace"}function cq(e){return e.type==="selection.replace"||e.type==="selection.add"||e.type==="selection.remove"||e.type==="selection.toggle"||e.type==="selection.clear"}function qw(e){return new II(e)}function Yw(e,t){let r=TI(t.ids);if(r.length===0)return Fe("empty-selection");for(let s of r)if(!Bo(e,s))return Fe("missing-node");let n=Da(e,t.ids);if(n.length===0)return Fe("empty-selection");for(let s of n){let c=Bo(e,s);if(!c)return Fe("missing-node");if(!Zw(c))return Fe(c.protected?"node-protected":c.locked?"node-locked":"node-readonly")}if(t.placement==="root")return t.parentId!=null||t.beforeId!=null||t.afterId!=null?Fe("invalid-root-anchors"):Df();let o=Bo(e,t.targetId);if(!o)return Fe("missing-target-node");if(n.includes(o.id))return Fe("cannot-parent-to-self");if(n.some(s=>Xw(e,o.id,s)))return Fe("cannot-parent-to-descendant");if(t.placement==="inside"){if(!Qw(o))return Fe("target-cannot-have-children");if(t.parentId!=null&&t.parentId!==o.id)return Fe("invalid-parent-anchor");let s=EI(e,o.id).filter(c=>!n.includes(c));return t.beforeId&&!s.includes(t.beforeId)?Fe("invalid-before-anchor"):t.afterId&&!s.includes(t.afterId)?Fe("invalid-after-anchor"):Df()}if(o.locked&&!o.protected)return Fe("target-node-locked");if(o.protected)return Fe("cannot-reorder-root");let a=Bo(e,o.parentId);if(a?.locked&&!a.protected)return Fe("target-parent-locked");if((t.parentId??null)!==(o.parentId??null))return Fe("invalid-parent-anchor");let i=EI(e,o.parentId??null).filter(s=>!n.includes(s));return t.beforeId&&!i.includes(t.beforeId)?Fe("invalid-before-anchor"):t.afterId&&!i.includes(t.afterId)?Fe("invalid-after-anchor"):t.placement==="before"&&t.beforeId!==o.id?Fe("invalid-before-anchor"):t.placement==="after"&&t.afterId!==o.id?Fe("invalid-after-anchor"):Df()}function Jw(e,t){let r=TI(t.ids);if(r.length===0)return Fe("empty-selection");for(let i of r)if(!Bo(e,i))return Fe("missing-node");let n=Da(e,t.ids);if(n.length===0)return Fe("empty-selection");if(n.length<2)return Fe("selection-too-small");for(let i of n){let s=Bo(e,i);if(!s)return Fe("missing-node");if(!Zw(s))return Fe(s.protected?"node-protected":s.locked?"node-locked":"node-readonly")}let o=Bo(e,t.parentId);if(t.parentId&&!o)return Fe("missing-parent-node");if(o&&!Qw(o))return Fe("parent-cannot-have-children");if(o&&n.some(i=>o.id===i||Xw(e,o.id,i)))return Fe("cannot-parent-to-descendant");let a=EI(e,t.parentId??null).filter(i=>!n.includes(i));if(t.insertBeforeId){let i=Bo(e,t.insertBeforeId);if(!a.includes(t.insertBeforeId)||i?.protected)return Fe("invalid-before-anchor")}return Df()}function Bo(e,t){return t?e.find(r=>r.id===t)??null:null}function TI(e){let t=[],r=new Set;for(let n of e)!n||r.has(n)||(r.add(n),t.push(n));return t}function Da(e,t){let r=TI(t).filter(o=>!!Bo(e,o)),n=new Set(r);return r.filter(o=>!dq(e,o).some(a=>n.has(a)))}function EI(e,t){return e.filter(r=>(r.parentId??null)===(t??null)).map(r=>r.id)}function Xw(e,t,r){let n=new Map(e.map(i=>[i.id,i])),o=n.get(t)??null,a=new Set;for(;o?.parentId;){if(o.parentId===r)return!0;if(a.has(o.parentId))return!1;a.add(o.parentId),o=n.get(o.parentId)??null}return!1}function Qw(e){return!e||e.locked&&!e.protected?!1:e.canHaveChildren===!0}function Zw(e){return!!e&&e.protected!==!0&&e.locked!==!0&&e.draggable!==!1}function dq(e,t){let r=new Map(e.map(i=>[i.id,i])),n=[],o=new Set,a=r.get(t)??null;for(;a?.parentId&&!o.has(a.parentId);)o.add(a.parentId),n.push(a.parentId),a=r.get(a.parentId)??null;return n}function Df(){return{ok:!0}}function Fe(e){return{ok:!1,reason:e}}var b={ASSET_ANALYSIS_GET:"asset.analysis.get",ASSET_IMPORT:"asset.import",ASSET_INFO_GET:"asset.info.get",ASSET_LIBRARY_LIST:"asset.library.list",ASSET_LIBRARY_REFRESH:"asset.library.refresh",ASSET_REFERENCES_LIST:"asset.references.list",AUTHORING_VALIDATION_LIST:"authoring.validation.list",EDITOR_SNAPSHOT_GET:"editor.snapshot.get",EDITOR_STATE_GET:"editor.state.get",EDITOR_DIAGNOSTICS_LIST:"editor.diagnostics.list",EDITOR_UI_REGIONS_GET:"editor.ui.regions.get",HOST_EDITOR_ENTER:"host.editor.enter",HOST_EDITOR_SAVE_AND_RUN:"host.editor.saveAndRun",HOST_EDITOR_DISCARD_AND_RUN:"host.editor.discardAndRun",HOST_EDITOR_WAIT_READY:"host.editor.waitReady",HOST_MODE_GET:"host.mode.get",HIERARCHY_SCOPE_GET:"hierarchy.scope.get",HIERARCHY_OPERATIONS_LIST:"hierarchy.operations.list",HIERARCHY_OPERATION_EXECUTE:"hierarchy.operation.execute",MATERIAL_ASSETS_LIST:"material.assets.list",MATERIAL_ASSET_GET:"material.asset.get",MATERIAL_ASSET_CREATE:"material.asset.create",MATERIAL_ASSET_DELETE:"material.asset.delete",MATERIAL_ASSET_DUPLICATE:"material.asset.duplicate",MATERIAL_ASSET_RENAME:"material.asset.rename",MATERIAL_ASSET_SET_SHADER:"material.asset.setShader",MATERIAL_SHADER_DEFINITIONS_LIST:"material.shaderDefinitions.list",MATERIAL_SHADER_DEFINITION_GET:"material.shaderDefinition.get",MATERIAL_FRAME_PARTICIPANTS_LIST:"material.frameParticipants.list",MATERIAL_PROJECTION_SNAPSHOT_GET:"material.projectionSnapshot.get",MATERIAL_REFERENCES_LIST:"material.references.list",MATERIAL_BINDINGS_LIST:"material.bindings.list",MATERIAL_BINDING_SET:"material.binding.set",MATERIAL_BINDING_CLEAR:"material.binding.clear",MATERIAL_PROPERTIES_GET:"material.properties.get",MATERIAL_PROPERTIES_PATCH:"material.properties.patch",OBJECT_CREATE_FROM_ASSET:"object.createFromAsset",OBJECT_CREATE_GROUP:"object.createGroup",OBJECT_CREATE_PRIMITIVE:"object.createPrimitive",OBJECT_DELETE:"object.delete",OBJECT_DUPLICATE:"object.duplicate",OBJECT_GROUP:"object.group",OBJECT_MOVE:"object.move",OBJECT_PROPERTIES_GET:"object.properties.get",OBJECT_PROPERTIES_PATCH_MANY:"object.properties.patchMany",OBJECT_REFERENCES_LIST:"object.references.list",OBJECT_RENAME:"object.rename",OBJECT_RESOLVE:"object.resolve",OBJECT_SET_ENABLED:"object.setEnabled",PREFAB_MATERIAL_SLOTS_LIST:"prefab.materialSlots.list",PREFAB_ASSET_CREATE_FROM_ASSET:"prefab.asset.createFromAsset",PREFAB_ASSET_CREATE_FROM_OBJECT:"prefab.asset.createFromObject",PREFAB_ASSET_DUPLICATE:"prefab.asset.duplicate",PREFAB_ASSET_RENAME:"prefab.asset.rename",PREFAB_DRAFT_COMMIT:"prefab.draft.commit",PREFAB_NODE_CREATE_FROM_ASSET:"prefab.node.createFromAsset",PREFAB_NODE_CREATE_GROUP:"prefab.node.createGroup",PREFAB_NODE_CREATE_MARKER:"prefab.node.createMarker",PREFAB_NODE_CREATE_PRIMITIVE:"prefab.node.createPrimitive",PREFAB_NODE_DELETE:"prefab.node.delete",PREFAB_NODE_REPARENT:"prefab.node.reparent",PREFAB_NODE_RENAME:"prefab.node.rename",PREFAB_NODE_SELECT:"prefab.node.select",PREFAB_NODE_SET_TRANSFORM:"prefab.node.setTransform",PREFAB_NODE_SET_MARKER:"prefab.node.setMarker",PREFAB_RESOLVE:"prefab.resolve",PREFAB_SCENE_GET:"prefab.scene.get",PREFAB_SOURCE_STRUCTURE_GET:"prefab.source.structure.get",PREFAB_STAGE_EXIT:"prefab.stage.exit",PREFAB_STAGE_OPEN:"prefab.stage.open",PREFAB_STAGE_SAVE:"prefab.stage.save",PREFAB_STAGE_DISCARD:"prefab.stage.discard",SCENE_OBJECTS_LIST:"scene.objects.list",SELECTION_SET:"selection.set",SHADOW_POLICY_GET:"shadow.policy.get",SHADOW_POLICY_SET:"shadow.policy.set",SHADOW_MAP_EXPERIMENT_CONFIG_GET:"shadowMapExperiment.config.get",SHADOW_MAP_EXPERIMENT_PLAN_PREVIEW:"shadowMapExperiment.plan.preview",SHADOW_MAP_EXPERIMENT_RUNTIME_SNAPSHOT:"shadowMapExperiment.runtime.snapshot",SHADOW_DEBUG_INSPECT:"shadow.debug.inspect",SHADOW_DEBUG_CONTEXT_CLEAR:"shadow.debug.context.clear",SHADOW_DEBUG_CONTEXT_ENTER:"shadow.debug.context.enter",SHADOW_DEBUG_OVERLAY_CLEAR:"shadow.debug.overlay.clear",SHADOW_DEBUG_OVERLAY_SET:"shadow.debug.overlay.set",SHADOW_DEBUG_VISIBILITY_MEASURE:"shadow.debug.visibilityMeasure",SHADOW_RECEIVERS_LIST:"shadow.receivers.list",SHADOW_RESOLVE_PREVIEW:"shadow.resolvePreview",SHADOW_STATIC_BAKE:"shadow.static.bake",SHADOW_STATIC_INVALIDATE:"shadow.static.invalidate",TRANSFORM_MOVE:"transform.move",TRANSFORM_SET:"transform.set",VIEWPORT_CAMERA_GET:"viewport.camera.get",VIEWPORT_CAMERA_ORBIT:"viewport.camera.orbit",VIEWPORT_CAMERA_SET_PRESET:"viewport.camera.setPreset",VIEWPORT_FRAME_SELECTION:"viewport.frameSelection",VIEWPORT_FOCUS_OBJECT:"viewport.focusObject",VIEWPORT_ISOLATION_ENTER:"viewport.isolation.enter",VIEWPORT_RENDER_STATS_GET:"viewport.renderStats.get",VIEWPORT_VISIBILITY_CLEAR:"viewport.visibility.clear",VIEWPORT_VISIBILITY_SET:"viewport.visibility.set",VIEWPORT_VISIBILITY_SNAPSHOT:"viewport.visibility.snapshot"},MI=Object.freeze({...Object.fromEntries(Object.values(b).map(e=>[e,"view"])),[b.HIERARCHY_SCOPE_GET]:"authoring",[b.SCENE_OBJECTS_LIST]:"authoring",[b.OBJECT_RESOLVE]:"authoring",[b.ASSET_LIBRARY_LIST]:"authoring",[b.ASSET_IMPORT]:"tooling",[b.ASSET_LIBRARY_REFRESH]:"tooling",[b.ASSET_INFO_GET]:"authoring",[b.ASSET_REFERENCES_LIST]:"authoring",[b.AUTHORING_VALIDATION_LIST]:"authoring",[b.MATERIAL_ASSETS_LIST]:"authoring",[b.MATERIAL_ASSET_GET]:"authoring",[b.MATERIAL_ASSET_CREATE]:"authoring",[b.MATERIAL_ASSET_DELETE]:"authoring",[b.MATERIAL_ASSET_DUPLICATE]:"authoring",[b.MATERIAL_ASSET_RENAME]:"authoring",[b.MATERIAL_ASSET_SET_SHADER]:"authoring",[b.MATERIAL_SHADER_DEFINITIONS_LIST]:"authoring",[b.MATERIAL_SHADER_DEFINITION_GET]:"authoring",[b.MATERIAL_REFERENCES_LIST]:"authoring",[b.MATERIAL_BINDINGS_LIST]:"authoring",[b.MATERIAL_BINDING_SET]:"authoring",[b.MATERIAL_BINDING_CLEAR]:"authoring",[b.MATERIAL_PROPERTIES_GET]:"authoring",[b.MATERIAL_PROPERTIES_PATCH]:"authoring",[b.PREFAB_RESOLVE]:"authoring",[b.PREFAB_ASSET_CREATE_FROM_ASSET]:"authoring",[b.PREFAB_ASSET_CREATE_FROM_OBJECT]:"authoring",[b.PREFAB_ASSET_DUPLICATE]:"authoring",[b.PREFAB_ASSET_RENAME]:"authoring",[b.PREFAB_DRAFT_COMMIT]:"authoring",[b.PREFAB_SCENE_GET]:"authoring",[b.PREFAB_NODE_CREATE_FROM_ASSET]:"authoring",[b.PREFAB_NODE_CREATE_GROUP]:"authoring",[b.PREFAB_NODE_CREATE_MARKER]:"authoring",[b.PREFAB_NODE_CREATE_PRIMITIVE]:"authoring",[b.PREFAB_NODE_SET_TRANSFORM]:"authoring",[b.PREFAB_NODE_SET_MARKER]:"authoring",[b.PREFAB_NODE_REPARENT]:"authoring",[b.PREFAB_NODE_RENAME]:"authoring",[b.PREFAB_NODE_DELETE]:"authoring",[b.OBJECT_CREATE_GROUP]:"authoring",[b.OBJECT_CREATE_PRIMITIVE]:"authoring",[b.OBJECT_DELETE]:"authoring",[b.OBJECT_DUPLICATE]:"authoring",[b.OBJECT_GROUP]:"authoring",[b.OBJECT_MOVE]:"authoring",[b.OBJECT_PROPERTIES_GET]:"authoring",[b.OBJECT_PROPERTIES_PATCH_MANY]:"authoring",[b.OBJECT_REFERENCES_LIST]:"authoring",[b.OBJECT_RENAME]:"authoring",[b.OBJECT_SET_ENABLED]:"authoring",[b.TRANSFORM_MOVE]:"authoring",[b.TRANSFORM_SET]:"authoring",[b.OBJECT_CREATE_FROM_ASSET]:"authoring",[b.SHADOW_MAP_EXPERIMENT_PLAN_PREVIEW]:"renderer",[b.SHADOW_MAP_EXPERIMENT_RUNTIME_SNAPSHOT]:"renderer",[b.SHADOW_DEBUG_INSPECT]:"renderer",[b.SHADOW_DEBUG_CONTEXT_ENTER]:"renderer",[b.SHADOW_DEBUG_CONTEXT_CLEAR]:"renderer",[b.SHADOW_DEBUG_OVERLAY_SET]:"renderer",[b.SHADOW_DEBUG_OVERLAY_CLEAR]:"renderer",[b.SHADOW_DEBUG_VISIBILITY_MEASURE]:"renderer",[b.VIEWPORT_FOCUS_OBJECT]:"renderer",[b.MATERIAL_FRAME_PARTICIPANTS_LIST]:"renderer",[b.MATERIAL_PROJECTION_SNAPSHOT_GET]:"renderer",[b.VIEWPORT_RENDER_STATS_GET]:"renderer",[b.VIEWPORT_FRAME_SELECTION]:"renderer",[b.VIEWPORT_VISIBILITY_SNAPSHOT]:"renderer",[b.VIEWPORT_VISIBILITY_SET]:"renderer",[b.VIEWPORT_VISIBILITY_CLEAR]:"renderer",[b.VIEWPORT_ISOLATION_ENTER]:"renderer",[b.VIEWPORT_CAMERA_GET]:"renderer",[b.VIEWPORT_CAMERA_SET_PRESET]:"renderer",[b.VIEWPORT_CAMERA_ORBIT]:"renderer"}),Qle=new Set([b.HOST_MODE_GET,b.HOST_EDITOR_ENTER,b.HOST_EDITOR_SAVE_AND_RUN,b.HOST_EDITOR_DISCARD_AND_RUN,b.HOST_EDITOR_WAIT_READY]),Ac=Object.freeze({[b.HIERARCHY_SCOPE_GET]:N(b.HIERARCHY_SCOPE_GET,"Get active Hierarchy scope","hierarchy","read"),[b.HIERARCHY_OPERATIONS_LIST]:N(b.HIERARCHY_OPERATIONS_LIST,"List Hierarchy operations","hierarchy","read"),[b.HIERARCHY_OPERATION_EXECUTE]:N(b.HIERARCHY_OPERATION_EXECUTE,"Execute Hierarchy operation","hierarchy","write"),[b.ASSET_LIBRARY_LIST]:N(b.ASSET_LIBRARY_LIST,"List asset library","asset","read"),[b.ASSET_IMPORT]:N(b.ASSET_IMPORT,"Import asset","asset","write"),[b.ASSET_LIBRARY_REFRESH]:N(b.ASSET_LIBRARY_REFRESH,"Refresh asset library","asset","write"),[b.ASSET_INFO_GET]:N(b.ASSET_INFO_GET,"Get asset info","asset","read"),[b.ASSET_ANALYSIS_GET]:N(b.ASSET_ANALYSIS_GET,"Get asset analysis","asset","read"),[b.ASSET_REFERENCES_LIST]:N(b.ASSET_REFERENCES_LIST,"List asset references","asset","read"),[b.AUTHORING_VALIDATION_LIST]:N(b.AUTHORING_VALIDATION_LIST,"List authoring validation diagnostics","authoring","read"),[b.MATERIAL_ASSETS_LIST]:N(b.MATERIAL_ASSETS_LIST,"List material assets","material","read"),[b.MATERIAL_ASSET_GET]:N(b.MATERIAL_ASSET_GET,"Get material asset","material","read"),[b.MATERIAL_ASSET_CREATE]:N(b.MATERIAL_ASSET_CREATE,"Create material asset","material","write"),[b.MATERIAL_ASSET_DELETE]:N(b.MATERIAL_ASSET_DELETE,"Delete material asset","material","write"),[b.MATERIAL_ASSET_DUPLICATE]:N(b.MATERIAL_ASSET_DUPLICATE,"Duplicate material asset","material","write"),[b.MATERIAL_ASSET_RENAME]:N(b.MATERIAL_ASSET_RENAME,"Rename material asset","material","write"),[b.MATERIAL_ASSET_SET_SHADER]:N(b.MATERIAL_ASSET_SET_SHADER,"Set material shader","material","write"),[b.MATERIAL_SHADER_DEFINITIONS_LIST]:N(b.MATERIAL_SHADER_DEFINITIONS_LIST,"List Shader Definitions","material","read"),[b.MATERIAL_SHADER_DEFINITION_GET]:N(b.MATERIAL_SHADER_DEFINITION_GET,"Get Shader Definition","material","read"),[b.MATERIAL_FRAME_PARTICIPANTS_LIST]:N(b.MATERIAL_FRAME_PARTICIPANTS_LIST,"List material frame participants","material","read"),[b.MATERIAL_PROJECTION_SNAPSHOT_GET]:N(b.MATERIAL_PROJECTION_SNAPSHOT_GET,"Get material projection snapshots","material","read"),[b.MATERIAL_REFERENCES_LIST]:N(b.MATERIAL_REFERENCES_LIST,"List material references","material","read"),[b.MATERIAL_BINDINGS_LIST]:N(b.MATERIAL_BINDINGS_LIST,"List material bindings","material","read"),[b.MATERIAL_BINDING_SET]:N(b.MATERIAL_BINDING_SET,"Set material bindings","material","write"),[b.MATERIAL_BINDING_CLEAR]:N(b.MATERIAL_BINDING_CLEAR,"Clear material bindings","material","write"),[b.MATERIAL_PROPERTIES_GET]:N(b.MATERIAL_PROPERTIES_GET,"Get material properties","material","read"),[b.MATERIAL_PROPERTIES_PATCH]:N(b.MATERIAL_PROPERTIES_PATCH,"Patch material properties","material","write"),[b.PREFAB_RESOLVE]:N(b.PREFAB_RESOLVE,"Resolve prefab asset","prefab","read"),[b.PREFAB_DRAFT_COMMIT]:N(b.PREFAB_DRAFT_COMMIT,"Commit prefab draft","prefab","write"),[b.PREFAB_STAGE_OPEN]:N(b.PREFAB_STAGE_OPEN,"Open prefab stage","prefab","write"),[b.PREFAB_STAGE_EXIT]:N(b.PREFAB_STAGE_EXIT,"Exit prefab stage","prefab","write"),[b.PREFAB_STAGE_SAVE]:N(b.PREFAB_STAGE_SAVE,"Save prefab stage","prefab","write"),[b.PREFAB_STAGE_DISCARD]:N(b.PREFAB_STAGE_DISCARD,"Discard prefab stage changes","prefab","write"),[b.PREFAB_ASSET_CREATE_FROM_ASSET]:N(b.PREFAB_ASSET_CREATE_FROM_ASSET,"Create prefab asset from asset","prefab","write"),[b.PREFAB_ASSET_CREATE_FROM_OBJECT]:N(b.PREFAB_ASSET_CREATE_FROM_OBJECT,"Create prefab asset from object","prefab","write"),[b.PREFAB_ASSET_DUPLICATE]:N(b.PREFAB_ASSET_DUPLICATE,"Duplicate prefab asset","prefab","write"),[b.PREFAB_ASSET_RENAME]:N(b.PREFAB_ASSET_RENAME,"Rename prefab asset","prefab","write"),[b.PREFAB_SCENE_GET]:N(b.PREFAB_SCENE_GET,"Get prefab composition scene","prefab","read"),[b.PREFAB_NODE_SELECT]:N(b.PREFAB_NODE_SELECT,"Select prefab node","prefab","write"),[b.PREFAB_NODE_CREATE_FROM_ASSET]:N(b.PREFAB_NODE_CREATE_FROM_ASSET,"Create prefab node from asset","prefab","write"),[b.PREFAB_NODE_CREATE_GROUP]:N(b.PREFAB_NODE_CREATE_GROUP,"Create prefab group node","prefab","write"),[b.PREFAB_NODE_CREATE_MARKER]:N(b.PREFAB_NODE_CREATE_MARKER,"Create prefab Marker node","prefab","write"),[b.PREFAB_NODE_CREATE_PRIMITIVE]:N(b.PREFAB_NODE_CREATE_PRIMITIVE,"Create prefab primitive node","prefab","write"),[b.PREFAB_NODE_SET_TRANSFORM]:N(b.PREFAB_NODE_SET_TRANSFORM,"Set prefab node transform","prefab","write"),[b.PREFAB_NODE_SET_MARKER]:N(b.PREFAB_NODE_SET_MARKER,"Set prefab Marker fields","prefab","write"),[b.PREFAB_NODE_REPARENT]:N(b.PREFAB_NODE_REPARENT,"Reparent prefab node","prefab","write"),[b.PREFAB_NODE_RENAME]:N(b.PREFAB_NODE_RENAME,"Rename prefab node","prefab","write"),[b.PREFAB_NODE_DELETE]:N(b.PREFAB_NODE_DELETE,"Delete prefab node","prefab","write"),[b.PREFAB_SOURCE_STRUCTURE_GET]:N(b.PREFAB_SOURCE_STRUCTURE_GET,"Get prefab source structure","prefab","read"),[b.PREFAB_MATERIAL_SLOTS_LIST]:N(b.PREFAB_MATERIAL_SLOTS_LIST,"List prefab material slots","prefab","read"),[b.HOST_MODE_GET]:N(b.HOST_MODE_GET,"Get host mode","lifecycle","read"),[b.HOST_EDITOR_ENTER]:N(b.HOST_EDITOR_ENTER,"Enter editor mode","lifecycle","write"),[b.HOST_EDITOR_SAVE_AND_RUN]:N(b.HOST_EDITOR_SAVE_AND_RUN,"Save editor document and run game","lifecycle","write"),[b.HOST_EDITOR_DISCARD_AND_RUN]:N(b.HOST_EDITOR_DISCARD_AND_RUN,"Discard editor changes and run game","lifecycle","write"),[b.HOST_EDITOR_WAIT_READY]:N(b.HOST_EDITOR_WAIT_READY,"Wait for editor readiness","lifecycle","read"),[b.EDITOR_UI_REGIONS_GET]:N(b.EDITOR_UI_REGIONS_GET,"Get editor workspace regions","ui","read"),[b.SCENE_OBJECTS_LIST]:N(b.SCENE_OBJECTS_LIST,"List scene objects","scene","read"),[b.OBJECT_RESOLVE]:N(b.OBJECT_RESOLVE,"Resolve scene object","scene","read"),[b.OBJECT_CREATE_GROUP]:N(b.OBJECT_CREATE_GROUP,"Create group object","scene","write"),[b.OBJECT_CREATE_PRIMITIVE]:N(b.OBJECT_CREATE_PRIMITIVE,"Create primitive object","scene","write"),[b.OBJECT_CREATE_FROM_ASSET]:N(b.OBJECT_CREATE_FROM_ASSET,"Create object from asset","asset","write"),[b.OBJECT_DELETE]:N(b.OBJECT_DELETE,"Delete objects","scene","write"),[b.OBJECT_DUPLICATE]:N(b.OBJECT_DUPLICATE,"Duplicate objects","scene","write"),[b.OBJECT_GROUP]:N(b.OBJECT_GROUP,"Group objects","scene","write"),[b.OBJECT_MOVE]:N(b.OBJECT_MOVE,"Move hierarchy objects","scene","write"),[b.OBJECT_PROPERTIES_GET]:N(b.OBJECT_PROPERTIES_GET,"Get object properties","scene","read"),[b.OBJECT_PROPERTIES_PATCH_MANY]:N(b.OBJECT_PROPERTIES_PATCH_MANY,"Patch many object properties","scene","write"),[b.OBJECT_REFERENCES_LIST]:N(b.OBJECT_REFERENCES_LIST,"List object references","scene","read"),[b.OBJECT_RENAME]:N(b.OBJECT_RENAME,"Rename object","scene","write"),[b.OBJECT_SET_ENABLED]:N(b.OBJECT_SET_ENABLED,"Set object enabled state","scene","write"),[b.SELECTION_SET]:N(b.SELECTION_SET,"Set selection","selection","write"),[b.SHADOW_POLICY_GET]:N(b.SHADOW_POLICY_GET,"Get shadow participation","shadow","read"),[b.SHADOW_POLICY_SET]:N(b.SHADOW_POLICY_SET,"Set shadow participation","shadow","write"),[b.SHADOW_MAP_EXPERIMENT_CONFIG_GET]:N(b.SHADOW_MAP_EXPERIMENT_CONFIG_GET,"Get Shadow Map configuration","shadow","read"),[b.SHADOW_MAP_EXPERIMENT_PLAN_PREVIEW]:N(b.SHADOW_MAP_EXPERIMENT_PLAN_PREVIEW,"Preview Shadow Map runtime plan","shadow","read"),[b.SHADOW_MAP_EXPERIMENT_RUNTIME_SNAPSHOT]:N(b.SHADOW_MAP_EXPERIMENT_RUNTIME_SNAPSHOT,"Snapshot Shadow Map runtime ownership","shadow","read"),[b.SHADOW_RECEIVERS_LIST]:N(b.SHADOW_RECEIVERS_LIST,"List shadow receivers","shadow","read"),[b.SHADOW_RESOLVE_PREVIEW]:N(b.SHADOW_RESOLVE_PREVIEW,"Resolve shadow preview","shadow","read"),[b.SHADOW_DEBUG_INSPECT]:N(b.SHADOW_DEBUG_INSPECT,"Inspect shadow debug context","shadow","read"),[b.SHADOW_DEBUG_CONTEXT_ENTER]:N(b.SHADOW_DEBUG_CONTEXT_ENTER,"Enter shadow debug context","shadow","write"),[b.SHADOW_DEBUG_CONTEXT_CLEAR]:N(b.SHADOW_DEBUG_CONTEXT_CLEAR,"Clear shadow debug context","shadow","write"),[b.SHADOW_DEBUG_OVERLAY_SET]:N(b.SHADOW_DEBUG_OVERLAY_SET,"Set shadow debug overlay","shadow","write"),[b.SHADOW_DEBUG_OVERLAY_CLEAR]:N(b.SHADOW_DEBUG_OVERLAY_CLEAR,"Clear shadow debug overlay","shadow","write"),[b.SHADOW_DEBUG_VISIBILITY_MEASURE]:N(b.SHADOW_DEBUG_VISIBILITY_MEASURE,"Measure shadow visibility","shadow","read"),[b.TRANSFORM_MOVE]:N(b.TRANSFORM_MOVE,"Move object","transform","write"),[b.TRANSFORM_SET]:N(b.TRANSFORM_SET,"Set object transform","transform","write"),[b.VIEWPORT_FOCUS_OBJECT]:N(b.VIEWPORT_FOCUS_OBJECT,"Focus object in viewport","viewport","write"),[b.VIEWPORT_RENDER_STATS_GET]:N(b.VIEWPORT_RENDER_STATS_GET,"Get viewport render stats","viewport","read"),[b.VIEWPORT_FRAME_SELECTION]:N(b.VIEWPORT_FRAME_SELECTION,"Frame selected object","viewport","write"),[b.VIEWPORT_VISIBILITY_SNAPSHOT]:N(b.VIEWPORT_VISIBILITY_SNAPSHOT,"Get preview visibility overrides","viewport","read"),[b.VIEWPORT_VISIBILITY_SET]:N(b.VIEWPORT_VISIBILITY_SET,"Set preview visibility","viewport","write"),[b.VIEWPORT_VISIBILITY_CLEAR]:N(b.VIEWPORT_VISIBILITY_CLEAR,"Clear preview visibility overrides","viewport","write"),[b.VIEWPORT_ISOLATION_ENTER]:N(b.VIEWPORT_ISOLATION_ENTER,"Enter preview isolation","viewport","write"),[b.VIEWPORT_CAMERA_GET]:N(b.VIEWPORT_CAMERA_GET,"Get viewport camera state","viewport","read"),[b.VIEWPORT_CAMERA_SET_PRESET]:N(b.VIEWPORT_CAMERA_SET_PRESET,"Set viewport camera preset","viewport","write"),[b.VIEWPORT_CAMERA_ORBIT]:N(b.VIEWPORT_CAMERA_ORBIT,"Orbit viewport camera","viewport","write"),[b.EDITOR_SNAPSHOT_GET]:N(b.EDITOR_SNAPSHOT_GET,"Get editor snapshot","state","read"),[b.EDITOR_STATE_GET]:N(b.EDITOR_STATE_GET,"Get editor state","state","read"),[b.EDITOR_DIAGNOSTICS_LIST]:N(b.EDITOR_DIAGNOSTICS_LIST,"List editor diagnostics","state","read")}),Pc=Object.freeze({[b.ASSET_LIBRARY_LIST]:"List SDK catalog assets registered from project files. This does not list document-owned Material Assets or readonly Shader Definition projections.",[b.ASSET_IMPORT]:"Consume a short-lived Agent-uploaded source grant and register one model, image texture, or Babylon environment texture in the canonical project asset catalog. Local paths and file bytes never enter command JSON.",[b.ASSET_LIBRARY_REFRESH]:"Rescan canonical catalog files, refresh changed metadata and hashes, and return a bounded summary without changing the authored Scene document.",[b.ASSET_REFERENCES_LIST]:"List bounded references to one project asset across standard scene, Prefab, and Material Asset fields. Project-defined extension fields are reported as a coverage limitation rather than searched heuristically.",[b.AUTHORING_VALIDATION_LIST]:"Run the canonical Editor Scene authoring validator against the current working document and return bounded structured diagnostics.",[b.MATERIAL_ASSETS_LIST]:"List canonical Material Assets authored in the current working document. Use material.shaderDefinitions.list for shader contracts and asset.library.list for imported project assets.",[b.MATERIAL_ASSET_CREATE]:"Create one canonical Material Asset from a registered Shader Definition. The new asset receives stable identity and an independent clone of the Shader defaults.",[b.MATERIAL_ASSET_DELETE]:"Delete one editable, unreferenced Material Asset. Referenced or readonly defaults are rejected without changing authority.",[b.MATERIAL_ASSET_DUPLICATE]:"Create an independent canonical copy of one Material Asset while preserving the source and its consumers.",[b.MATERIAL_ASSET_RENAME]:"Rename one editable Material Asset without changing its stable materialAssetId or any Scene and Prefab references.",[b.MATERIAL_ASSET_SET_SHADER]:"Atomically replace one Material Asset shaderId and properties. Same-path compatible values survive; incompatible values require explicit allowReset confirmation.",[b.MATERIAL_SHADER_DEFINITIONS_LIST]:"List registered Shader Definitions. Definitions are readonly contracts and appear under /@editor/shaders in the Asset Browser; they are not Material Assets.",[b.MATERIAL_SHADER_DEFINITION_GET]:"Read one registered Shader Definition, including its property schema, defaults, Inspector layout, runtime kind, and optional source file.",[b.MATERIAL_PROPERTIES_GET]:"Read canonical authored properties resolved against the material's registered Shader Definition, optionally including its property schema.",[b.MATERIAL_PROPERTIES_PATCH]:"Atomically patch or reset registered Shader Definition leaf properties. Unknown paths, shaderId changes, and partial writes are rejected.",[b.MATERIAL_FRAME_PARTICIPANTS_LIST]:"Read live Scene View material frame participants from the attached renderer. This is preview diagnostics and never changes authored material data.",[b.MATERIAL_PROJECTION_SNAPSHOT_GET]:"Read bounded, JSON-safe live Babylon material snapshots for explicitly requested Scene View objects. This is renderer diagnostics and never changes authored material data.",[b.OBJECT_PROPERTIES_GET]:"Read bounded schema-backed Inspector property values for multiple scene objects. Callers must provide explicit object ids and property paths; full object or document reads are not exposed.",[b.OBJECT_PROPERTIES_PATCH_MANY]:"Atomically validate and patch grouped authored properties across many scene objects. Supports mixed transform, material binding, shadow, rendering, metadata, camera, light, and other registered field paths.",[b.OBJECT_MOVE]:"Move or reorder bounded Scene Hierarchy targets with node-level structural preconditions and optional world-transform preservation.",[b.OBJECT_DUPLICATE]:"Duplicate bounded Scene Hierarchy subtrees in one authoritative transaction using node-level structural preconditions.",[b.OBJECT_GROUP]:"Create one parent and move bounded sibling targets beneath it in one authoritative transaction.",[b.OBJECT_REFERENCES_LIST]:"List bounded standard authored references to one scene object, including hierarchy parents, Marker targets, and Marker Graph relation endpoints. Project-defined extension fields are not searched heuristically.",[b.VIEWPORT_RENDER_STATS_GET]:"Read Scene View scheduler state, frame demand, projected node count, and material frame participant count from the attached renderer."}),jl=Object.freeze({[b.OBJECT_CREATE_GROUP]:Object.freeze({category:"scene",menu:{path:["Create","Empty"]}}),[b.OBJECT_CREATE_PRIMITIVE]:Object.freeze({category:"scene",menu:{path:["Create","Primitive"]}}),[b.OBJECT_DELETE]:Object.freeze({category:"scene",shortcut:"Delete",menu:{path:["Edit","Delete"]}}),[b.OBJECT_DUPLICATE]:Object.freeze({category:"scene",shortcut:"Ctrl/Cmd+D",menu:{path:["Edit","Duplicate"]}}),[b.OBJECT_GROUP]:Object.freeze({category:"scene",menu:{path:["Edit","Create Parent"]}}),[b.VIEWPORT_FRAME_SELECTION]:Object.freeze({category:"viewport",shortcut:"F",menu:{path:["View","Frame Selection"]}})});function N(e,t,r,n){return Object.freeze({title:t,category:r,access:n,stability:"experimental",target:MI[e]??"view"})}var ae={type:"object",properties:{x:{type:"number"},y:{type:"number"},z:{type:"number"}},required:["x","y","z"],additionalProperties:!1},_l={type:"object",properties:{position:ae,rotation:ae,scale:ae},additionalProperties:!1},DI={type:"object",properties:{min:ae,max:ae,size:ae,center:ae},additionalProperties:!1},$e={type:"object",properties:{severity:{type:"string",enum:["info","warning","error"]},source:{type:"string"},code:{type:"string"},message:{type:"string"},objectId:{type:"string"},details:{type:"object",additionalProperties:!0}},required:["severity","source","message"],additionalProperties:!1},OI={type:"string"},lq={type:"object",properties:{kind:{type:"string"},summary:{type:"string"},complexity:{type:"string"},nodeCount:{type:"number"},meshCount:{type:"number"},primitiveCount:{type:"number"},materialCount:{type:"number"},textureCount:{type:"number"},imageCount:{type:"number"},animationCount:{type:"number"},skinCount:{type:"number"},width:{type:"number"},height:{type:"number"},mime:{type:"string"},hasAlpha:{type:"boolean"},diagnostics:{type:"array",items:$e}},additionalProperties:!0},uq={type:"object",properties:{code:{type:"string"},reason:{type:"string"},stage:{type:"string"},severity:{type:"string",enum:["warning","error"]},relativePath:{type:"string"},nodeCode:{type:"string"},retryable:{type:"boolean"}},required:["code","reason","stage","severity"],additionalProperties:!1},mq={type:"object",properties:{status:{type:"string",enum:["unavailable","degraded"]},issues:{type:"array",items:uq}},required:["status","issues"],additionalProperties:!1},iv={assetId:{type:"string"},guid:{type:"string"},displayName:{type:"string"},kind:OI,type:{type:"string"},category:{type:"string"},placeable:{type:"boolean"},byteSize:{type:"number"},contentHash:{type:"string"},relativePath:{type:"string"},availability:mq,metadataSummary:{type:"object",additionalProperties:!0},analysisSummary:lq},sv={type:"object",properties:iv,required:["assetId","displayName","kind","type","placeable"],additionalProperties:!1},cv={type:"object",properties:{...iv,origin:{type:"string"},dedupeKey:{type:"string"},materialMode:{type:"string"},metadata:{type:"object",additionalProperties:!0},external:{type:"object",additionalProperties:!0},defaults:{type:"object",additionalProperties:!0},prefab:{type:"object",additionalProperties:!0}},required:["assetId","displayName","kind","type","placeable"],additionalProperties:!1},pq={type:"object",properties:{includeUnplaceable:{type:"boolean"},query:{type:"string"},kind:OI,cursor:{type:"string",minLength:1},limit:{type:"integer",minimum:1,maximum:1e3}},additionalProperties:!1},fq={type:"object",properties:{assets:{type:"array",items:sv},totalCount:{type:"integer",minimum:0},returnedCount:{type:"integer",minimum:0},nextCursor:{type:"string"}},required:["assets","totalCount","returnedCount"],additionalProperties:!1},gq={type:"object",properties:{sourceGrantId:{type:"string",minLength:1,maxLength:128},displayName:{type:"string",minLength:1,maxLength:256},kind:{type:"string",enum:["model","texture"]},category:{type:"string",minLength:1,maxLength:128},placeable:{type:"boolean"}},required:["sourceGrantId"],additionalProperties:!1},hq={type:"object",properties:{asset:cv,disposition:{type:"string",enum:["created","deduplicated"]},assetCatalogRevision:{type:"string",minLength:1,maxLength:128}},required:["asset","disposition","assetCatalogRevision"],additionalProperties:!1},bq={type:"object",additionalProperties:!1},yq={type:"object",properties:{scannedAssetCount:{type:"integer",minimum:0},refreshedAssets:{type:"array",maxItems:200,items:sv},totalCount:{type:"integer",minimum:0},returnedCount:{type:"integer",minimum:0,maximum:200},assetCatalogRevision:{type:"string",minLength:1,maxLength:128}},required:["scannedAssetCount","refreshedAssets","totalCount","returnedCount","assetCatalogRevision"],additionalProperties:!1},Sq={type:"object",properties:{assetId:{type:"string"}},required:["assetId"],additionalProperties:!1},Iq={type:"object",properties:{asset:cv},required:["asset"],additionalProperties:!1},dv={type:"object",properties:{complete:{type:"boolean"},included:{type:"array",items:{type:"string"}},limitations:{type:"array",items:{type:"object",properties:{code:{type:"string"},message:{type:"string"}},required:["code","message"],additionalProperties:!1}}},required:["complete","included","limitations"],additionalProperties:!1},Eq={type:"object",properties:{assetId:{type:"string"},scope:{type:"string",enum:["scene-object","prefab-asset","prefab-node","material-asset"]},kind:{type:"string"},path:{type:"string"},objectId:{type:"string"},objectName:{type:"string"},prefabAssetId:{type:"string"},nodeId:{type:"string"},materialAssetId:{type:"string"}},required:["assetId","scope","kind","path"],additionalProperties:!1},Tq={type:"object",properties:{assetId:{type:"string",minLength:1},scope:{type:"string",enum:["scene-object","prefab-asset","prefab-node","material-asset"]},cursor:{type:"string",minLength:1},limit:{type:"integer",minimum:1,maximum:1e3}},required:["assetId"],additionalProperties:!1},Aq={type:"object",properties:{assetId:{type:"string"},references:{type:"array",items:Eq},coverage:dv,totalCount:{type:"integer",minimum:0},returnedCount:{type:"integer",minimum:0},nextCursor:{type:"string"}},required:["assetId","references","coverage","totalCount","returnedCount"],additionalProperties:!1},Pq={type:"object",properties:{severity:{type:"string",enum:["info","warning","error"]},code:{type:"string"},message:{type:"string"},path:{type:"string"},sourceId:{type:"string"},sourceType:{type:"string"}},required:["severity","message"],additionalProperties:!1},xq={type:"object",properties:{severity:{type:"string",enum:["info","warning","error"]},code:{type:"string"},path:{type:"string"},query:{type:"string"},cursor:{type:"string",minLength:1},limit:{type:"integer",minimum:1,maximum:1e3}},additionalProperties:!1},Mq={type:"object",properties:{documentRevision:{type:"integer",minimum:0},diagnostics:{type:"array",items:Pq},errorCount:{type:"integer",minimum:0},warningCount:{type:"integer",minimum:0},infoCount:{type:"integer",minimum:0},totalCount:{type:"integer",minimum:0},returnedCount:{type:"integer",minimum:0},nextCursor:{type:"string"}},required:["documentRevision","diagnostics","errorCount","warningCount","infoCount","totalCount","returnedCount"],additionalProperties:!1},Dq={type:"object",properties:{assetId:{type:"string"}},required:["assetId"],additionalProperties:!1},Oq={type:"object",properties:{kind:{type:"string"},format:{type:"string"},summary:{type:"string"},complexity:{type:"string"},sceneCount:{type:"number"},nodeCount:{type:"number"},meshCount:{type:"number"},primitiveCount:{type:"number"},materialCount:{type:"number"},textureCount:{type:"number"},imageCount:{type:"number"},animationCount:{type:"number"},skinCount:{type:"number"},width:{type:"number"},height:{type:"number"},mime:{type:"string"},bitDepth:{type:"number"},hasAlpha:{type:"boolean"},estimatedPixels:{type:"number"},nodes:{type:"array",items:{type:"object",additionalProperties:!0}},meshes:{type:"array",items:{type:"object",additionalProperties:!0}},materials:{type:"array",items:{type:"object",additionalProperties:!0}},diagnostics:{type:"array",items:$e}},additionalProperties:!0},Rq={type:"object",properties:{assetId:{type:"string"},kind:OI,analysis:Oq},required:["assetId","kind","analysis"],additionalProperties:!1},Of={type:"object",properties:{assetId:{type:"string"},browserAssetId:{type:"string"},displayName:{type:"string"},sourceAssetId:{type:"string"},sourceAssetGuid:{type:"string"},placeable:{type:"boolean"},readonly:{type:"boolean"},status:{type:"string"}},required:["assetId","displayName"],additionalProperties:!1},zo={type:"object",properties:{assetId:{type:"string"},browserAssetId:{type:"string"},label:{type:"string"},sourceAssetId:{type:"string"},sourceAssetGuid:{type:"string"},previewNodeId:{type:"string"},selectedItemId:{anyOf:[{type:"string"},{type:"null"}]},readonly:{type:"boolean"},dirty:{type:"boolean"},documentDirty:{type:"boolean"},canSave:{type:"boolean"},canDiscard:{type:"boolean"}},required:["assetId","label","dirty","documentDirty","canSave","canDiscard"],additionalProperties:!1},Cq={type:"object",properties:{assetId:{type:"string"},browserAssetId:{type:"string"},name:{type:"string"},query:{type:"string"},includeUnavailable:{type:"boolean"},cursor:{type:"string",minLength:1},limit:{type:"integer",minimum:1,maximum:1e3}},additionalProperties:!1},wq={type:"object",properties:{prefabs:{type:"array",items:Of},resolvedPrefab:{anyOf:[Of,{type:"null"}]},ambiguous:{type:"boolean"},currentStage:{anyOf:[zo,{type:"null"}]},totalCount:{type:"integer",minimum:0},returnedCount:{type:"integer",minimum:0},nextCursor:{type:"string"}},required:["prefabs","resolvedPrefab","ambiguous","totalCount","returnedCount"],additionalProperties:!1},vq={type:"object",properties:{assetId:{type:"string"},browserAssetId:{type:"string"},name:{type:"string"},query:{type:"string"},dirtyAction:{type:"string",enum:["reject","save","discard"]}},anyOf:[{required:["assetId"]},{required:["browserAssetId"]},{required:["name"]},{required:["query"]}],additionalProperties:!1},_q={type:"object",properties:{opened:{type:"boolean"},alreadyOpen:{type:"boolean"},prefab:Of,stage:zo,status:{type:"string"}},required:["opened","alreadyOpen","prefab","stage","status"],additionalProperties:!1},kq={type:"object",properties:{dirtyAction:{type:"string",enum:["reject","save","discard"]}},additionalProperties:!1},ev={type:"object",properties:{},additionalProperties:!1},tv={type:"object",properties:{changed:{type:"boolean"},stage:zo,status:{type:"string"}},required:["changed","stage","status"],additionalProperties:!1},jq={type:"object",properties:{exited:{type:"boolean"},wasOpen:{type:"boolean"},previousStage:{anyOf:[zo,{type:"null"}]},status:{type:"string"}},required:["exited","wasOpen","status"],additionalProperties:!1},Nq={type:"object",properties:{assetId:{type:"string",minLength:1}},required:["assetId"],additionalProperties:!1},Gq={type:"object",properties:{objectId:{type:"string",minLength:1}},required:["objectId"],additionalProperties:!1},Lq={type:"object",properties:{assetId:{type:"string",minLength:1}},required:["assetId"],additionalProperties:!1},AI={type:"object",properties:{assetId:{type:"string"},displayName:{type:"string"},sourceAssetId:{type:"string"},created:{type:"boolean"}},required:["assetId","displayName","created"],additionalProperties:!1},Fq={type:"object",properties:{assetId:{type:"string"},displayName:{type:"string",minLength:1,maxLength:80}},required:["displayName"],additionalProperties:!1},$q={type:"object",properties:{assetId:{type:"string"},previousDisplayName:{type:"string"},displayName:{type:"string"},stageActive:{type:"boolean"},renamed:{type:"boolean"}},required:["assetId","previousDisplayName","displayName","stageActive","renamed"],additionalProperties:!1},Bq={type:"object",properties:{assetId:{type:"string",minLength:1},prefabAsset:{type:"object"}},required:["assetId","prefabAsset"],additionalProperties:!1},zq={type:"object",properties:{assetId:{type:"string"},changed:{type:"boolean"}},required:["assetId","changed"],additionalProperties:!1},xI={type:"object",properties:{kind:{type:"string",enum:["scene-object","marker"]},id:{type:"string",minLength:1},label:{type:"string"}},required:["kind","id"],additionalProperties:!1},lv={type:"object",properties:{kind:{type:"string",enum:["scene-object","marker"]},id:{type:"string",minLength:1}},required:["kind","id"],additionalProperties:!1},RI={type:"object",properties:{r:{type:"number",minimum:0,maximum:1},g:{type:"number",minimum:0,maximum:1},b:{type:"number",minimum:0,maximum:1}},required:["r","g","b"],additionalProperties:!1},Vq={type:"object",properties:{origin:ae,forward:ae,right:ae,up:ae,label:{type:"string"},description:{type:"string"}},required:["origin"],additionalProperties:!1},Uq={oneOf:[{type:"object",properties:{kind:{const:"box"}},required:["kind"],additionalProperties:!1},{type:"object",properties:{kind:{const:"point"},coordinateSpace:{type:"string",enum:["world","local"]},position:ae,offset:ae,target:xI},required:["kind"],additionalProperties:!1},{type:"object",properties:{kind:{const:"object-bounds"},target:xI},required:["kind","target"],additionalProperties:!1},{type:"object",properties:{kind:{const:"polyhedron"},coordinateSpace:{const:"world"},vertices:{type:"array",items:ae},faces:{type:"array",items:{type:"array",items:{type:"number",minimum:0}}}},required:["kind","vertices"],additionalProperties:!1}]},Hq={type:"object",properties:{schemaVersion:{const:1},type:{type:"string",minLength:1},kind:{type:"string",minLength:1},tags:{type:"array",items:{type:"string"}},note:{type:"string"},color:RI,target:xI,semanticFrame:Vq,geometry:Uq,metadata:{type:"object",additionalProperties:!0}},required:["schemaVersion","type","geometry"],additionalProperties:!1},Kq={type:"string",enum:["root","group","model","primitive","light","prefabInstance","marker","collision"]},kl={type:"object",properties:{nodeId:{type:"string"},guid:{type:"string"},name:{type:"string"},parentNodeId:{anyOf:[{type:"string"},{type:"null"}]},kind:Kq,path:{type:"string"},transform:_l,sourceAssetId:{type:"string"},sourceNodePath:{type:"string"},childPrefabId:{type:"string"},primitive:{type:"object",properties:{shape:{type:"string"}},required:["shape"],additionalProperties:!0},marker:Hq,defaults:{type:"object",additionalProperties:!0},overrides:{type:"object",additionalProperties:!0},readonly:{type:"boolean"},diagnostics:{type:"array",items:$e}},required:["nodeId","kind"],additionalProperties:!1},Wq={type:"object",properties:{assetId:{type:"string"},prefabAssetId:{type:"string"},includeSourceSummary:{type:"boolean"},includeMaterialSlots:{type:"boolean"},cursor:{type:"string",minLength:1},limit:{type:"integer",minimum:1,maximum:1e3}},oneOf:[{required:["assetId"],not:{required:["prefabAssetId"]}},{required:["prefabAssetId"],not:{required:["assetId"]}},{not:{anyOf:[{required:["assetId"]},{required:["prefabAssetId"]}]}}],additionalProperties:!1},qq={type:"object",properties:{stage:zo,prefab:Of,revision:{type:"integer",minimum:0},rootNodeId:{type:"string"},selectedNodeId:{anyOf:[{type:"string"},{type:"null"}]},nodes:{type:"array",items:kl},diagnostics:{type:"array",items:$e},totalCount:{type:"integer",minimum:0},returnedCount:{type:"integer",minimum:0},nextCursor:{type:"string"}},required:["stage","prefab","revision","rootNodeId","selectedNodeId","nodes","totalCount","returnedCount"],additionalProperties:!1},Yq={type:"object",properties:{nodeId:{type:"string"}},required:["nodeId"],additionalProperties:!1},Jq={type:"object",properties:{stage:zo,selectedNodeId:{type:"string"},node:kl},required:["stage","selectedNodeId","node"],additionalProperties:!1},Xq={type:"object",properties:{prefabAssetId:{type:"string"},assetId:{type:"string"},parentNodeId:{type:"string"},name:{type:"string"},sourceNodePath:{type:"string"},position:ae,rotation:ae,scale:ae,select:{type:"boolean"}},required:["assetId"],additionalProperties:!1},Qq={type:"object",properties:{prefabAssetId:{type:"string"},shape:{type:"string",enum:["cube","sphere","plane","capsule"]},parentNodeId:{type:"string"},name:{type:"string"},position:ae,rotation:ae,scale:ae,select:{type:"boolean"}},required:["shape"],additionalProperties:!1},Zq={type:"object",properties:{prefabAssetId:{type:"string"},parentNodeId:{type:"string"},name:{type:"string"},position:ae,rotation:ae,scale:ae,select:{type:"boolean"}},additionalProperties:!1},e3={type:"object",properties:{prefabAssetId:{type:"string"},parentNodeId:{type:"string"},name:{type:"string"},type:{type:"string",minLength:1},target:lv,tags:{type:"array",items:{type:"string"}},note:{type:"string"},color:RI,position:ae,rotation:ae,scale:ae,select:{type:"boolean"}},required:["type"],additionalProperties:!1},t3={type:"object",properties:{assetId:{type:"string"},nodeId:{type:"string",minLength:1},type:{type:"string",minLength:1},target:{anyOf:[lv,{type:"null"}]},tags:{type:"array",items:{type:"string"}},note:{anyOf:[{type:"string"},{type:"null"}]},color:{anyOf:[RI,{type:"null"}]}},required:["nodeId"],anyOf:[{required:["type"]},{required:["target"]},{required:["tags"]},{required:["note"]},{required:["color"]}],additionalProperties:!1},Oa={type:"object",properties:{stage:zo,changed:{type:"boolean"},createdNodeId:{type:"string"},changedNodeId:{type:"string"},deletedNodeIds:{type:"array",items:{type:"string"}},selectedNodeId:{anyOf:[{type:"string"},{type:"null"}]},node:{anyOf:[kl,{type:"null"}]},rootNodeId:{type:"string"},nodes:{type:"array",items:kl},status:{type:"string"},diagnostics:{type:"array",items:$e}},required:["stage","changed","selectedNodeId","rootNodeId","nodes","status"],additionalProperties:!1},r3={type:"object",properties:{assetId:{type:"string"},nodeId:{type:"string"},position:ae,rotation:ae,scale:ae},required:["nodeId"],anyOf:[{required:["position"]},{required:["rotation"]},{required:["scale"]}],additionalProperties:!1},n3={type:"object",properties:{assetId:{type:"string"},nodeId:{type:"string"},name:{type:"string",minLength:1,maxLength:80}},required:["nodeId","name"],additionalProperties:!1},o3={type:"object",properties:{nodeId:{type:"string"},previousName:{type:"string"},name:{type:"string"},selectedNodeId:{anyOf:[{type:"string"},{type:"null"}]},nodes:{type:"array",items:kl}},required:["nodeId","previousName","name","selectedNodeId","nodes"],additionalProperties:!1},a3={type:"object",properties:{assetId:{type:"string"},nodeId:{type:"string"},parentNodeId:{type:"string"}},required:["nodeId","parentNodeId"],additionalProperties:!1},i3={type:"object",properties:{assetId:{type:"string"},nodeId:{type:"string"}},required:["nodeId"],additionalProperties:!1},s3={type:"object",properties:{nodeId:{type:"string"},assetId:{type:"string"}},additionalProperties:!1},c3={type:"object",properties:{assetId:{type:"string"},nodeId:{type:"string"},sourceNodePath:{type:"string"},nodeCount:{type:"number"},meshCount:{type:"number"},primitiveCount:{type:"number"},materialCount:{type:"number"},textureCount:{type:"number"},nodes:{type:"array",items:{type:"object",additionalProperties:!0}},meshes:{type:"array",items:{type:"object",additionalProperties:!0}},materials:{type:"array",items:{type:"object",additionalProperties:!0}}},additionalProperties:!0},d3={type:"object",properties:{stage:zo,nodeId:{type:"string"},assetId:{type:"string"},structure:c3,diagnostics:{type:"array",items:$e}},required:["stage","assetId","structure"],additionalProperties:!1},l3={type:"object",properties:{ownerNodePath:{type:"string"},nodeIndex:{type:"number"},nodeIndexPath:{type:"array",items:{type:"number"}},meshIndex:{type:"number"},primitiveIndex:{type:"number"},sourceMaterialIndex:{type:"number"},sourceMeshName:{type:"string"},triangleCount:{type:"number"},boundingBox:{type:"object",additionalProperties:!0}},required:["ownerNodePath","meshIndex","primitiveIndex"],additionalProperties:!1},u3={type:"object",properties:{slotId:{type:"string"},label:{type:"string"},sourceSurfaces:{type:"array",items:l3},materialName:{type:"string"},materialNames:{type:"array",items:{type:"string"}},bindingPath:{type:"string"},materialAssetIdPath:{type:"string"},editable:{type:"boolean"},readonlyReason:{type:"string"}},required:["label","sourceSurfaces","editable"],additionalProperties:!0},m3={type:"object",properties:{nodeId:{type:"string"},assetId:{type:"string"},includeReadonly:{type:"boolean"}},additionalProperties:!1},p3={type:"object",properties:{stage:zo,nodeId:{type:"string"},assetId:{type:"string"},slots:{type:"array",items:u3},diagnostics:{type:"array",items:$e}},required:["stage","slots"],additionalProperties:!1},Rf={type:"string",enum:["scene","prefab"]},xc={type:"object",properties:{id:{type:"string"},name:{type:"string"},shaderId:{type:"string"},definitionVersion:{type:"number",minimum:1},properties:{type:"object",additionalProperties:!0},origin:{type:"object",additionalProperties:!0}},required:["id","name","shaderId","properties"],additionalProperties:!1},f3={type:"object",properties:{query:{type:"string"},path:{type:"string"},shaderId:{type:"string"},cursor:{type:"string"},limit:{type:"number",minimum:1,maximum:200}},additionalProperties:!1},g3={type:"object",properties:{items:{type:"array",items:xc},total:{type:"number"},nextCursor:{type:"string"}},required:["items","total"],additionalProperties:!1},h3={type:"object",properties:{materialAssetId:{type:"string"}},required:["materialAssetId"],additionalProperties:!1},b3={type:"object",properties:{asset:xc,referenceCount:{type:"number"}},required:["asset","referenceCount"],additionalProperties:!1},y3={type:"object",properties:{shaderId:{type:"string"},name:{type:"string"}},required:["shaderId"],additionalProperties:!1},S3={type:"object",properties:{asset:xc,changed:{type:"boolean"},revision:{type:"number"}},required:["asset","changed","revision"],additionalProperties:!1},I3={type:"object",properties:{materialAssetId:{type:"string",minLength:1}},required:["materialAssetId"],additionalProperties:!1},E3={type:"object",properties:{sourceMaterialAssetId:{type:"string"},asset:xc,changed:{type:"boolean"},revision:{type:"number"}},required:["sourceMaterialAssetId","asset","changed","revision"],additionalProperties:!1},T3={type:"object",properties:{materialAssetId:{type:"string",minLength:1}},required:["materialAssetId"],additionalProperties:!1},A3={type:"object",properties:{materialAssetId:{type:"string"},changed:{type:"boolean"},revision:{type:"number"}},required:["materialAssetId","changed","revision"],additionalProperties:!1},P3={type:"object",properties:{materialAssetId:{type:"string"},name:{type:"string"}},required:["materialAssetId","name"],additionalProperties:!1},x3={type:"object",properties:{asset:xc,changed:{type:"boolean"},revision:{type:"number"}},required:["asset","changed","revision"],additionalProperties:!1},M3={type:"object",properties:{materialAssetId:{type:"string"},shaderId:{type:"string"},allowReset:{type:"boolean"}},required:["materialAssetId","shaderId"],additionalProperties:!1},D3={type:"object",properties:{asset:xc,previousShaderId:{type:"string"},changed:{type:"boolean"},revision:{type:"number"},preservedPaths:{type:"array",items:{type:"string"}},resetPaths:{type:"array",items:{type:"string"}}},required:["asset","previousShaderId","changed","revision","preservedPaths","resetPaths"],additionalProperties:!1},uv={type:"object",properties:{shaderId:{type:"string"},version:{type:"number"},runtimeKind:{type:"string"},displayName:{type:"string"},builtin:{type:"boolean"},sourceFile:{type:"string"},sectionCount:{type:"number"},fieldCount:{type:"number"}},required:["shaderId","version","runtimeKind","displayName","builtin","sectionCount","fieldCount"],additionalProperties:!1},O3={type:"object",properties:{query:{type:"string"},builtin:{type:"boolean"},cursor:{type:"string"},limit:{type:"number",minimum:1,maximum:200}},additionalProperties:!1},R3={type:"object",properties:{items:{type:"array",items:uv},total:{type:"number"},nextCursor:{type:"string"}},required:["items","total"],additionalProperties:!1},C3={type:"object",properties:{shaderId:{type:"string"}},required:["shaderId"],additionalProperties:!1},w3={type:"object",properties:{definition:{type:"object",properties:{...uv.properties,propertiesSchema:{type:"object",additionalProperties:!0},defaultProperties:{type:"object",additionalProperties:!0},inspector:{type:"object",additionalProperties:!0}},required:["shaderId","version","runtimeKind","displayName","builtin","sectionCount","fieldCount","propertiesSchema","defaultProperties","inspector"],additionalProperties:!1}},required:["definition"],additionalProperties:!1},v3={type:"object",properties:{objectId:{type:"string"},shaderId:{type:"string"},materialAssetId:{type:"string"},frameMode:{type:"string",enum:["on-demand","continuous"]},effectiveVisible:{type:"boolean"}},required:["objectId","shaderId","frameMode","effectiveVisible"],additionalProperties:!1},_3={type:"object",properties:{objectId:{type:"string"},shaderId:{type:"string"},frameMode:{type:"string",enum:["on-demand","continuous"]},cursor:{type:"string"},limit:{type:"number",minimum:1,maximum:200}},additionalProperties:!1},k3={type:"object",properties:{items:{type:"array",items:v3},total:{type:"number"},nextCursor:{type:"string"},frameDemand:{type:"object",properties:{continuous:{type:"boolean"},continuousParticipantCount:{type:"number"}},required:["continuous","continuousParticipantCount"],additionalProperties:!1}},required:["items","total","frameDemand"],additionalProperties:!1},j3={type:"object",properties:{objectIds:{type:"array",minItems:1,maxItems:64,uniqueItems:!0,items:{type:"string",minLength:1}}},required:["objectIds"],additionalProperties:!1},N3={type:"object",properties:{r:{type:"number"},g:{type:"number"},b:{type:"number"}},required:["r","g","b"],additionalProperties:!1},G3={type:"object",properties:{materialIndex:{type:"number",minimum:0},name:{type:"string",maxLength:160},type:{type:"string",maxLength:160},colorSource:{type:"string",enum:["albedoColor","diffuseColor","baseColor","none"]},baseColor:{anyOf:[N3,{type:"null"}]},alpha:{anyOf:[{type:"number"},{type:"null"}]},metallic:{anyOf:[{type:"number"},{type:"null"}]},roughness:{anyOf:[{type:"number"},{type:"null"}]},meshCount:{type:"number",minimum:1},sharedPrimitiveSource:{type:"boolean"},writablePreviewTarget:{type:"boolean"}},required:["materialIndex","name","type","colorSource","baseColor","alpha","metallic","roughness","meshCount","sharedPrimitiveSource","writablePreviewTarget"],additionalProperties:!1},L3={type:"object",properties:{objectId:{type:"string"},projected:{type:"boolean"},projectionKind:{type:"string",enum:["fallback","imported","generated"]},leaseRevision:{anyOf:[{type:"number",minimum:1},{type:"null"}]},materialCount:{type:"number",minimum:0},returnedMaterialCount:{type:"number",minimum:0,maximum:16},truncated:{type:"boolean"},materials:{type:"array",maxItems:16,items:G3}},required:["objectId","projected","leaseRevision","materialCount","returnedMaterialCount","truncated","materials"],additionalProperties:!1},F3={type:"object",properties:{items:{type:"array",maxItems:64,items:L3},requestedCount:{type:"number",minimum:1,maximum:64},projectedCount:{type:"number",minimum:0,maximum:64}},required:["items","requestedCount","projectedCount"],additionalProperties:!1},$3={type:"object",properties:{scope:Rf,kind:{type:"string",enum:["root","slot"]},materialAssetId:{type:"string"},objectId:{type:"string"},objectName:{type:"string"},prefabAssetId:{type:"string"},nodeId:{type:"string"},slotId:{type:"string"},bindingPath:{type:"string"},label:{type:"string"}},required:["scope","kind","materialAssetId","bindingPath","label"],additionalProperties:!1},B3={type:"object",properties:{materialAssetId:{type:"string"},scope:Rf,cursor:{type:"string"},limit:{type:"number",minimum:1,maximum:200}},required:["materialAssetId"],additionalProperties:!1},z3={type:"object",properties:{materialAssetId:{type:"string"},items:{type:"array",items:$3},total:{type:"number"},nextCursor:{type:"string"}},required:["materialAssetId","items","total"],additionalProperties:!1},CI={type:"object",properties:{scope:Rf,objectId:{type:"string"},prefabAssetId:{type:"string"},nodeId:{type:"string"},slotId:{type:"string"}},required:["scope"],additionalProperties:!1},mv={type:"object",properties:{target:CI,kind:{type:"string",enum:["root","slot"]},bindingPath:{type:"string"},authoredMaterialAssetId:{anyOf:[{type:"string"},{type:"null"}]},effectiveMaterialAssetId:{anyOf:[{type:"string"},{type:"null"}]},resolvedSource:{type:"string",enum:["authored","prefab-node","prefab-root","glb-source","default"]}},required:["target","kind","bindingPath","authoredMaterialAssetId","effectiveMaterialAssetId","resolvedSource"],additionalProperties:!1},V3={type:"object",properties:{scope:Rf,objectId:{type:"string"},prefabAssetId:{type:"string"},nodeId:{type:"string"},cursor:{type:"string"},limit:{type:"number",minimum:1,maximum:200}},additionalProperties:!1},U3={type:"object",properties:{items:{type:"array",items:mv},total:{type:"number"},nextCursor:{type:"string"}},required:["items","total"],additionalProperties:!1},H3={type:"object",properties:{materialAssetId:{type:"string"},targets:{type:"array",minItems:1,maxItems:200,items:CI}},required:["materialAssetId","targets"],additionalProperties:!1},K3={type:"object",properties:{targets:{type:"array",minItems:1,maxItems:200,items:CI}},required:["targets"],additionalProperties:!1},rv={type:"object",properties:{changed:{type:"boolean"},changedCount:{type:"number"},revision:{type:"number"},bindings:{type:"array",items:mv}},required:["changed","changedCount","revision","bindings"],additionalProperties:!1},W3={type:"object",properties:{materialAssetId:{type:"string"},includeSchema:{type:"boolean"}},required:["materialAssetId"],additionalProperties:!1},q3={type:"object",properties:{materialAssetId:{type:"string"},shaderId:{type:"string"},properties:{type:"object",additionalProperties:!0},defaults:{type:"object",additionalProperties:!0},schema:{type:"object",additionalProperties:!0}},required:["materialAssetId","shaderId","properties","defaults"],additionalProperties:!1},Y3={type:"object",properties:{path:{type:"string"},value:{},reset:{type:"boolean"}},required:["path"],additionalProperties:!1},J3={type:"object",properties:{materialAssetId:{type:"string"},changes:{type:"array",minItems:1,maxItems:100,items:Y3}},required:["materialAssetId","changes"],additionalProperties:!1},X3={type:"object",properties:{materialAssetId:{type:"string"},shaderId:{type:"string"},changed:{type:"boolean"},changedPaths:{type:"array",items:{type:"string"}},revision:{type:"number"},properties:{type:"object",additionalProperties:!0}},required:["materialAssetId","shaderId","changed","changedPaths","revision","properties"],additionalProperties:!1},Er={type:"object",properties:{selectedIds:{type:"array",items:{type:"string"}},activeId:{anyOf:[{type:"string"},{type:"null"}]}},required:["selectedIds","activeId"],additionalProperties:!1},Ra={type:"object",properties:{id:{type:"string"},name:{type:"string"},label:{type:"string"},type:{type:"string"},sourceAssetId:{type:"string"},path:{type:"string"},parentId:{anyOf:[{type:"string"},{type:"null"}]},selectable:{type:"boolean"},locked:{type:"boolean"},transform:_l,bounds:DI},required:["id"],additionalProperties:!1},Q3={type:"object",properties:{includeUnselectable:{type:"boolean"},name:{type:"string"},type:{type:"string"},parentId:{anyOf:[{type:"string"},{type:"null"}]},sourceAssetId:{type:"string"},query:{type:"string"},cursor:{type:"string",minLength:1},limit:{type:"integer",minimum:1,maximum:1e3}},additionalProperties:!1},Z3={type:"object",properties:{objects:{type:"array",items:Ra},totalCount:{type:"integer",minimum:0},returnedCount:{type:"integer",minimum:0},nextCursor:{type:"string"}},required:["objects","totalCount","returnedCount"],additionalProperties:!1},eY={type:"object",properties:{objectId:{type:"string"},name:{type:"string"},path:{type:"string"},type:{type:"string"},query:{type:"string"},includeUnselectable:{type:"boolean"}},additionalProperties:!1},tY={type:"object",properties:{objects:{type:"array",items:Ra},resolvedObject:{anyOf:[Ra,{type:"null"}]},ambiguous:{type:"boolean"}},required:["objects","resolvedObject","ambiguous"],additionalProperties:!1},rY={type:"object",properties:{objectId:{type:"string"},objectIds:{type:"array",items:{type:"string"}},activeId:{anyOf:[{type:"string"},{type:"null"}]}},oneOf:[{required:["objectId"],not:{required:["objectIds"]}},{required:["objectIds"],not:{required:["objectId"]}}],additionalProperties:!1},nY={type:"object",properties:{selection:Er},required:["selection"],additionalProperties:!1},Vo={objectId:{type:"string"},nodeId:{type:"string"},assetId:{type:"string"}},Pn={type:"object",properties:Vo,additionalProperties:!1},oY={type:"string",enum:["low","medium","high","ultra"]},pv={type:"object",properties:{cast:{type:"boolean"},receive:{type:"boolean"}},required:["cast","receive"],additionalProperties:!1},aY={type:"object",properties:{cast:{type:"boolean"},receive:{type:"boolean"}},anyOf:[{required:["cast"]},{required:["receive"]}],additionalProperties:!1},iY={type:"object",properties:{opacity:{type:"number"},softness:{type:"number"},bias:{type:"number"},normalBias:{type:"number"},maxDistance:{type:"number"},resolution:{type:"number",enum:[512,1024,2048,4096]},cascadeCount:{type:"number",enum:[1,2,4]},bakeSamples:{type:"number"},blurKernel:{type:"number"}},required:["opacity","softness","bias","normalBias","maxDistance","resolution","cascadeCount","bakeSamples","blurKernel"],additionalProperties:!1},Nl={type:"object",properties:{casterId:{type:"string"},receiverIds:{type:"array",items:{type:"string"}},lightId:{type:"string"},backend:{type:"string",enum:["none","dynamic-map","static-baked","blob","projected"]},mode:{type:"string",enum:["none","dynamic","static","blob","projected"]},quality:{type:"string",enum:["low","medium","high","ultra"]},params:iY,stale:{type:"boolean"},diagnostics:{type:"array",items:$e}},required:["casterId","receiverIds","backend","mode","quality","params","diagnostics"],additionalProperties:!1},wI={type:"object",properties:{receiverId:{type:"string"},source:{type:"string",enum:["explicit","prefab","auto","scene-default"]},score:{type:"number"},bounds:DI,boundsCenter:ae,active:{type:"boolean"},visible:{type:"boolean"},receive:{type:"boolean"},suitability:{type:"object",properties:{score:{type:"number"},overlap:{type:"number"},distance:{type:"number"},material:{type:"string"},light:{type:"string"},reasons:{type:"array",items:{type:"string"}}},additionalProperties:!1},diagnostics:{type:"array",items:$e}},required:["receiverId","source","score"],additionalProperties:!1},fv={type:"object",properties:{objectId:{type:"string"},nodeId:{type:"string"},label:{type:"string"},kind:{type:"string"},active:{type:"boolean"},visible:{type:"boolean"},bounds:DI,transform:_l,diagnostics:{type:"array",items:$e}},additionalProperties:!1},gv={type:"object",properties:{lightId:{type:"string"},label:{type:"string"},type:{type:"string"},direction:ae,directionSource:{type:"string",enum:["light.direction","transform.rotation","unknown"]},orientationDiagnostics:{type:"array",items:$e},position:ae,intensity:{type:"number"},diagnostics:{type:"array",items:$e}},additionalProperties:!1},hv={type:"object",properties:{kind:{type:"string",enum:["none","estimated","artifact","unknown"]},receiverId:{type:"string"},center:ae,size:ae,normal:ae,direction:ae,area:{type:"number"},confidence:{type:"number",minimum:0,maximum:1},diagnostics:{type:"array",items:$e}},required:["kind","confidence"],additionalProperties:!1},sY={type:"object",properties:{backend:{type:"string"},renderableShadowPrimitiveCount:{type:"number"},casterRuntimeObjectCount:{type:"number"},receiverRuntimeObjectCount:{type:"number"},shadowMapExperiment:{type:"object",properties:{enabled:{type:"boolean"},planRevision:{type:["number","null"]},planFingerprint:{type:["string","null"]},effectivePlan:{type:["object","null"],additionalProperties:!0},lightEntityId:{type:["string","null"]},generatorAllocated:{type:"boolean"},resolution:{type:["number","null"]},mapResolutions:{type:["object","null"],properties:{static:{type:"number"},dynamic:{type:"number"},composite:{type:"number"}},required:["static","dynamic","composite"],additionalProperties:!1},configuredMapResolutions:{type:["object","null"],properties:{static:{type:"number"},dynamic:{type:"number"},composite:{type:"number"}},required:["static","dynamic","composite"],additionalProperties:!1},diagnosticThresholds:{type:["object","null"],properties:{staticCasterCountWarning:{type:"number"},dynamicCasterCountWarning:{type:"number"},renderableCountWarning:{type:"number"}},required:["staticCasterCountWarning","dynamicCasterCountWarning","renderableCountWarning"],additionalProperties:!1},filter:{type:["string","null"],enum:["hard","low-pcf",null]},appearance:{type:["object","null"],properties:{strength:{type:"number"},darkness:{type:"number"},softness:{type:"number"}},required:["strength","darkness","softness"],additionalProperties:!1},renderListCount:{type:"number"},receiverMeshCount:{type:"number"},boundMeshCount:{type:"number"},backend:{type:["string","null"],enum:["split-static-dynamic","single-map","single-map-fallback",null]},fallbackReason:{type:["string","null"]},fallbackWarningEmitted:{type:"boolean"},depth:{type:["object","null"],properties:{backend:{type:"string",enum:["split-static-dynamic","single-map","single-map-fallback"]},fallbackReason:{type:["string","null"]},receiverFilter:{type:"string",enum:["hard","poisson-low-pcf","native-low-pcf","native-soft-kernel","native-contact-hardening"]},appearance:{type:"object",properties:{strength:{type:"number"},darkness:{type:"number"},softness:{type:"number"}},required:["strength","darkness","softness"],additionalProperties:!1},gpuCapability:{type:"object",properties:{engine:{type:"string",enum:["webgl","webgpu"]},fragmentDepthSupported:{type:"boolean"},nativeShadowComparison:{type:"boolean"},fullFloatRender:{type:"boolean"},fullFloatLinearFiltering:{type:"boolean"},maxRenderTextureSize:{type:"number"},halfFloatRender:{type:"boolean"},halfFloatLinearFiltering:{type:"boolean"},splitSupported:{type:"boolean"}},required:["engine","maxRenderTextureSize","halfFloatRender","halfFloatLinearFiltering","splitSupported"],additionalProperties:!1},textureFormat:{type:"string",enum:["r-half-float","r-full-float","single-map"]},static:{type:"object",properties:{resolution:{type:"number"},candidateMeshCount:{type:"number"},retainedMeshCount:{type:"number"},culledMeshCount:{type:"number"},renderListCount:{type:"number"},refreshCount:{type:"number"},renderCount:{type:"number"},lastRefreshReasons:{type:"array",items:{type:"string"}}},required:["resolution","candidateMeshCount","retainedMeshCount","culledMeshCount","renderListCount","refreshCount","renderCount","lastRefreshReasons"],additionalProperties:!1},dynamic:{type:"object",properties:{resolution:{type:"number"},candidateMeshCount:{type:"number"},retainedMeshCount:{type:"number"},culledMeshCount:{type:"number"},renderListCount:{type:"number"},refreshCount:{type:"number"},renderCount:{type:"number"},lastRefreshReasons:{type:"array",items:{type:"string"}}},required:["resolution","candidateMeshCount","retainedMeshCount","culledMeshCount","renderListCount","refreshCount","renderCount","lastRefreshReasons"],additionalProperties:!1},compositeResolution:{type:"number"},compositeRefreshCount:{type:"number"},compositeRenderCount:{type:"number"},compositorReady:{type:"boolean"}},required:["backend","fallbackReason","receiverFilter","appearance","gpuCapability","textureFormat","static","dynamic","compositeResolution","compositeRefreshCount","compositeRenderCount","compositorReady"],additionalProperties:!1},culling:{type:"object",properties:{enabled:{type:"boolean"},guardBandRatio:{type:"number"},coverageRevision:{type:"number"},cameraId:{type:["string","null"]},projectionSignature:{type:["string","null"]},coverage:{type:["object","null"],properties:{min:{type:"array",items:{type:"number"},minItems:3,maxItems:3},max:{type:"array",items:{type:"number"},minItems:3,maxItems:3}},required:["min","max"],additionalProperties:!1},conservative:{type:"boolean"},rebuildCount:{type:"number"},stable:{type:"boolean"},lastInvalidationReason:{type:["string","null"]},coverageMode:{type:"string",enum:["fixed","scene-fit"]},authoredCenter:{type:["array","null"],items:{type:"number"},minItems:3,maxItems:3},effectiveCenter:{type:["array","null"],items:{type:"number"},minItems:3,maxItems:3},authoredExtent:{type:["array","null"],items:{type:"number"},minItems:3,maxItems:3},effectiveExtent:{type:["array","null"],items:{type:"number"},minItems:3,maxItems:3},anchor:{type:["array","null"],items:{type:"number"},minItems:3,maxItems:3}},required:["enabled","guardBandRatio","coverageRevision","cameraId","projectionSignature","coverage","conservative","rebuildCount","stable","lastInvalidationReason"],additionalProperties:!1},activity:{type:"object",properties:{trackedEntityStateCount:{type:"number"},registeredActivitySourceCount:{type:"number"},activeActivitySourceCount:{type:"number"},pendingActivitySourceCount:{type:"number"},activeActivityCasterCount:{type:"number"},activeActivityKindCounts:{type:"object",additionalProperties:{type:"number"}},pendingDirtyReasons:{type:"array",items:{type:"string"}},untrackedDynamicCasterCount:{type:"number"},untrackedDynamicCasterEntityIds:{type:"array",items:{type:"string"}},sources:{type:"array",items:{type:"object",additionalProperties:!0}}},required:["trackedEntityStateCount","registeredActivitySourceCount","activeActivitySourceCount","pendingActivitySourceCount","activeActivityCasterCount","activeActivityKindCounts","pendingDirtyReasons","untrackedDynamicCasterCount","untrackedDynamicCasterEntityIds","sources"],additionalProperties:!1},automaticActivity:{type:"object",properties:{observedAnimationGroupCount:{type:"number"},boundAnimationGroupCount:{type:"number"},activeAnimationGroupCount:{type:"number"},registeredActivitySourceCount:{type:"number"},unresolvedActiveAnimationGroupCount:{type:"number"},candidateMeshCount:{type:"number"},candidateRevision:{type:"number"},targetResolutionCount:{type:"number"},cachedNegativeAnimationGroupCount:{type:"number"}},required:["observedAnimationGroupCount","boundAnimationGroupCount","activeAnimationGroupCount","registeredActivitySourceCount","unresolvedActiveAnimationGroupCount"],additionalProperties:!1},runtime:{type:"object",properties:{planSchemaVersion:{type:["number","null"],enum:[2,3,null]},sourcePlanRevision:{type:["number","null"]},effectivePlanRevision:{type:["number","null"]},overlayRevision:{type:"number"},incrementalMutationCount:{type:"number"},effectivePlanMaterializationCount:{type:"number"},registrationCount:{type:"number"},activityOwnerCount:{type:"number"},registrations:{type:"array",items:{type:"object",properties:{entityId:{type:"string"},behaviorProfileId:{type:"string"},renderableIds:{type:"array",items:{type:"string"}},activitySourceIds:{type:"array",items:{type:"string"}}},required:["entityId","behaviorProfileId","renderableIds","activitySourceIds"],additionalProperties:!1}}},required:["planSchemaVersion","sourcePlanRevision","effectivePlanRevision","overlayRevision","registrationCount","activityOwnerCount","registrations"],additionalProperties:!1},refreshCount:{type:"number"},lastRefreshReasons:{type:"array",items:{type:"string"}},worldUnitsPerTexel:{type:["array","null"],items:{type:"number"}},worldUnitsPerTexelByMap:{type:["object","null"],properties:{static:{type:"array",items:{type:"number"},minItems:2,maxItems:2},dynamic:{type:"array",items:{type:"number"},minItems:2,maxItems:2},composite:{type:"array",items:{type:"number"},minItems:2,maxItems:2}},required:["static","dynamic","composite"],additionalProperties:!1},registry:{},diagnostics:{type:"array",items:{type:"object",additionalProperties:!0}}},required:["enabled","planRevision","planFingerprint","effectivePlan","lightEntityId","generatorAllocated","resolution","mapResolutions","configuredMapResolutions","diagnosticThresholds","filter","appearance","renderListCount","receiverMeshCount","boundMeshCount","backend","fallbackReason","fallbackWarningEmitted","depth","culling","activity","automaticActivity","runtime","refreshCount","lastRefreshReasons","worldUnitsPerTexel","worldUnitsPerTexelByMap","registry","diagnostics"],additionalProperties:!1},planar:{type:"object",properties:{strategy:{type:"string",enum:["auto","projected-mesh","convex-hull"]},sourceMeshCount:{type:"number"},projectedMeshCount:{type:"number"},convexHullMeshCount:{type:"number"},alphaCutoutMeshCount:{type:"number"},instancedCasterCount:{type:"number"},batchMeshCount:{type:"number"},instancedBatchIds:{type:"array",items:{type:"string"}},instancedBatchNames:{type:"array",items:{type:"string"}},independentProjectedMeshCount:{type:"number"},visibleInstanceCount:{type:"number"},alphaCutoutChannels:{type:"array",items:{type:"string",enum:["alpha","luminance","red"]}},alphaCutoutUvSets:{type:"array",items:{type:"number"}},alphaCutoutLevels:{type:"array",items:{type:"number"}},fallbackReasons:{type:"array",items:{type:"string"}},instancingFallbackReasons:{type:"array",items:{type:"string"}},casters:{type:"array",items:{type:"object",properties:{sourceName:{type:"string"},sourceMeshNames:{type:"array",items:{type:"string"}},sourceNodeId:{type:"string"},sourceNodeIds:{type:"array",items:{type:"string"}},shadowName:{type:"string"},strategy:{type:"string",enum:["auto","projected-mesh","convex-hull"]},hasSkeleton:{type:"boolean"},projectedMeshCount:{type:"number"},convexHullMeshCount:{type:"number"},alphaCutoutMeshCount:{type:"number"},instancedCasterCount:{type:"number"},batchMeshCount:{type:"number"},instancedBatchIds:{type:"array",items:{type:"string"}},instancedBatchNames:{type:"array",items:{type:"string"}},independentProjectedMeshCount:{type:"number"},visibleInstanceCount:{type:"number"},alphaCutoutChannels:{type:"array",items:{type:"string",enum:["alpha","luminance","red"]}},fallbackReasons:{type:"array",items:{type:"string"}},instancingFallbackReasons:{type:"array",items:{type:"string"}}},required:["sourceName","shadowName","strategy","hasSkeleton","projectedMeshCount","convexHullMeshCount","alphaCutoutMeshCount"],additionalProperties:!1}}},additionalProperties:!1},artifactId:{type:"string"},artifactStale:{type:"boolean"},diagnostics:{type:"array",items:$e}},additionalProperties:!1},cY={type:"object",properties:Pn.properties,additionalProperties:!1},dY={type:"object",properties:{target:Pn,policy:pv,plan:Nl,diagnostics:{type:"array",items:$e}},required:["target","policy","plan"],additionalProperties:!1},lY={type:"object",properties:{...Vo,policy:aY},required:["policy"],additionalProperties:!1},uY={type:"object",properties:{target:Pn,changed:{type:"boolean"},policy:pv,plan:Nl,diagnostics:{type:"array",items:$e}},required:["target","changed","policy","plan"],additionalProperties:!1},mY={type:"object",additionalProperties:!1},pY={type:"object",properties:{configured:{type:"boolean"},readonly:{type:"boolean"},config:{type:["object","null"],additionalProperties:!0},qualityProfileIds:{type:"array",items:{type:"string"}},behaviorProfileIds:{type:"array",items:{type:"string"}}},required:["configured","readonly","config","qualityProfileIds","behaviorProfileIds"],additionalProperties:!1},fY={type:"object",additionalProperties:!1},gY={type:"object",properties:{plan:{type:["object","null"],additionalProperties:!0}},required:["plan"],additionalProperties:!1},hY={type:"object",additionalProperties:!1},bY={type:"object",properties:{snapshot:{type:["object","null"],additionalProperties:!0}},required:["snapshot"],additionalProperties:!1},yY={type:"object",properties:{objectId:{type:"string"},nodeId:{type:"string"},includeAuto:{type:"boolean"}},additionalProperties:!1},SY={type:"object",properties:{receivers:{type:"array",items:wI},diagnostics:{type:"array",items:$e}},required:["receivers"],additionalProperties:!1},IY={type:"object",properties:{...Vo,receiverIds:{type:"array",items:{type:"string"}}},additionalProperties:!1},EY={type:"object",properties:{target:Pn,plan:Nl,caster:fv,light:gv,footprint:hv,receivers:{type:"array",items:wI},diagnostics:{type:"array",items:$e}},required:["target","plan"],additionalProperties:!1},TY={type:"object",properties:{...Vo,receiverIds:{type:"array",items:{type:"string"}},quality:oY,force:{type:"boolean"}},additionalProperties:!1},AY={type:"object",properties:{target:Pn,baked:{type:"boolean"},plan:Nl,artifactId:{type:"string"},stale:{type:"boolean"},diagnostics:{type:"array",items:$e}},required:["target","baked","plan","stale"],additionalProperties:!1},PY={type:"object",properties:Vo,additionalProperties:!1},xY={type:"object",properties:{target:Pn,invalidated:{type:"boolean"},stale:{type:"boolean"},diagnostics:{type:"array",items:$e}},required:["target","invalidated","stale"],additionalProperties:!1},MY={type:"object",properties:Vo,additionalProperties:!1},bv={type:"object",properties:{target:Pn,caster:fv,plan:Nl,light:gv,receivers:{type:"array",items:wI},footprint:hv,runtimeEvidence:sY,diagnostics:{type:"array",items:$e}},required:["target","plan","receivers","footprint","runtimeEvidence"],additionalProperties:!1},DY={type:"object",properties:{...Vo,showCasterBounds:{type:"boolean"},showReceiverBounds:{type:"boolean"},showLightDirection:{type:"boolean"},showFootprint:{type:"boolean"},showArtifactBounds:{type:"boolean"},receiverIds:{type:"array",items:{type:"string"}}},additionalProperties:!1},OY={type:"object",properties:{enabled:{type:"boolean"},target:Pn,overlayIds:{type:"array",items:{type:"string"}},diagnostics:{type:"array",items:$e}},required:["enabled","overlayIds"],additionalProperties:!1},RY={type:"object",properties:{},additionalProperties:!1},CY={type:"object",properties:{cleared:{type:"boolean"},diagnostics:{type:"array",items:$e}},required:["cleared"],additionalProperties:!1},wY={type:"object",properties:{...Vo,receiverIds:{type:"array",items:{type:"string"}}},additionalProperties:!1},yv={type:"object",properties:{target:Pn,visible:{type:"boolean"},visibleScore:{type:"number",minimum:0,maximum:1},coverage:{type:"number",minimum:0,maximum:1},contrastDelta:{type:"number"},renderableShadowPrimitiveCount:{type:"number"},measurementKind:{type:"string",enum:["pixel-readback","structural"]},diagnostics:{type:"array",items:$e}},required:["target","visible","visibleScore","coverage","renderableShadowPrimitiveCount","measurementKind"],additionalProperties:!1},vY={type:"object",properties:{objectId:{type:"string"},position:ae,offset:ae},required:["objectId"],oneOf:[{required:["position"],not:{required:["offset"]}},{required:["offset"],not:{required:["position"]}}],additionalProperties:!1},nv={type:"object",properties:{objectId:{type:"string"},before:_l,after:_l,selection:Er},required:["objectId","before","after","selection"],additionalProperties:!1},_Y={type:"object",properties:{objectId:{type:"string"},changes:{type:"array",minItems:1,maxItems:9,items:{type:"object",properties:{path:{type:"string",enum:["transform.position.x","transform.position.y","transform.position.z","transform.rotation.x","transform.rotation.y","transform.rotation.z","transform.scale.x","transform.scale.y","transform.scale.z"]},expected:{type:"number"},value:{type:"number"}},required:["path","expected","value"],additionalProperties:!1}},position:ae,rotation:ae,scale:ae,expected:{type:"object",properties:{position:ae,rotation:ae,scale:ae},additionalProperties:!1}},required:["objectId"],oneOf:[{required:["changes"],not:{anyOf:[{required:["position"]},{required:["rotation"]},{required:["scale"]},{required:["expected"]}]}},{not:{required:["changes"]},anyOf:[{required:["position"]},{required:["rotation"]},{required:["scale"]}]}],additionalProperties:!1},kY={type:"object",properties:{objectId:{type:"string"}},required:["objectId"],additionalProperties:!1},jY={type:"object",properties:{objectId:{type:"string"},focused:{type:"boolean"}},required:["objectId","focused"],additionalProperties:!1},NY={type:"object",properties:{},additionalProperties:!1},GY={type:"object",properties:{frameStats:{type:"object",properties:{fps:{anyOf:[{type:"number"},{type:"null"}]},frameCount:{type:"number"},mode:{type:"string",enum:["idle","continuous"]},lastFrameMs:{anyOf:[{type:"number"},{type:"null"}]},activeReasons:{type:"array",items:{type:"string"}}},required:["fps","frameCount","mode","lastFrameMs","activeReasons"],additionalProperties:!1},frameDemand:{type:"object",properties:{continuous:{type:"boolean"},continuousParticipantCount:{type:"number"}},required:["continuous","continuousParticipantCount"],additionalProperties:!1},projectedNodeCount:{type:"number"},frameParticipantCount:{type:"number"}},required:["frameStats","frameDemand","projectedNodeCount","frameParticipantCount"],additionalProperties:!1},LY={type:"object",properties:{},additionalProperties:!1},FY={type:"object",properties:{focused:{type:"boolean"},selection:Er},required:["focused","selection"],additionalProperties:!1},vI={type:"string",enum:["perspective","top","bottom","front","back","left","right","iso","threeQuarterTop"]},Sv={oneOf:[{type:"object",properties:{kind:{type:"string",enum:["selection"]}},required:["kind"],additionalProperties:!1},{type:"object",properties:{kind:{type:"string",enum:["scene"]}},required:["kind"],additionalProperties:!1},{type:"object",properties:{kind:{type:"string",enum:["object"]},objectId:{type:"string"}},required:["kind","objectId"],additionalProperties:!1},{type:"object",properties:{kind:{type:"string",enum:["point"]},point:ae},required:["kind","point"],additionalProperties:!1}]},$Y={type:"object",properties:{viewPreset:vI,projectionMode:{type:"string",enum:["perspective","orthographic"]},target:ae,position:ae,alpha:{type:"number"},beta:{type:"number"},radius:{type:"number"},selection:Er},required:["viewPreset","projectionMode","selection"],additionalProperties:!1},BY={type:"object",properties:{},additionalProperties:!1},zY={type:"object",properties:{preset:vI,target:Sv,radius:{type:"number",exclusiveMinimum:0},distanceScale:{type:"number",exclusiveMinimum:0}},required:["preset"],additionalProperties:!1},ov={type:"object",properties:{changed:{type:"boolean"},viewPreset:vI,projectionMode:{type:"string",enum:["perspective","orthographic"]},target:ae,radius:{type:"number"},selection:Er},required:["changed","viewPreset","projectionMode","selection"],additionalProperties:!1},VY={type:"object",properties:{target:Sv,yawDeltaDeg:{type:"number"},pitchDeltaDeg:{type:"number"},distanceScale:{type:"number",exclusiveMinimum:0}},additionalProperties:!1},UY={type:"object",properties:{objectId:{type:"string"},authoredVisible:{type:"boolean"},previewVisible:{type:"boolean"},overrideVisible:{type:"boolean"},isolated:{type:"boolean"},diagnostics:{type:"array",items:$e}},required:["objectId","authoredVisible","previewVisible","isolated"],additionalProperties:!1},HY={type:"object",properties:{},additionalProperties:!1},_I={type:"object",properties:{isolated:{type:"boolean"},isolatedObjectIds:{type:"array",items:{type:"string"}},entries:{type:"array",items:UY},reason:{type:"string"},diagnostics:{type:"array",items:$e}},required:["isolated","isolatedObjectIds","entries"],additionalProperties:!1},KY={type:"object",properties:{objectIds:{type:"array",items:{type:"string"},minItems:1},visible:{type:"boolean"},reason:{type:"string"}},required:["objectIds","visible"],additionalProperties:!1},PI={type:"object",properties:{changed:{type:"boolean"},snapshot:_I,diagnostics:{type:"array",items:$e}},required:["changed","snapshot"],additionalProperties:!1},WY={type:"object",properties:{...Vo,receiverIds:{type:"array",items:{type:"string"}},includeAmbientLights:{type:"boolean"},showOverlay:{type:"boolean"},reason:{type:"string"}},additionalProperties:!1},qY={type:"object",properties:{entered:{type:"boolean"},target:Pn,keptObjectIds:{type:"array",items:{type:"string"}},hiddenObjectIds:{type:"array",items:{type:"string"}},protectedReceiverIds:{type:"array",items:{type:"string"}},lightIds:{type:"array",items:{type:"string"}},ambientLightIds:{type:"array",items:{type:"string"}},overlayIds:{type:"array",items:{type:"string"}},snapshot:_I,inspect:bv,visibilityMeasure:yv,diagnostics:{type:"array",items:$e}},required:["entered","target","keptObjectIds","hiddenObjectIds","protectedReceiverIds","lightIds","ambientLightIds","overlayIds","snapshot","inspect","visibilityMeasure"],additionalProperties:!1},YY={type:"object",properties:{},additionalProperties:!1},JY={type:"object",properties:{cleared:{type:"boolean"},overlayCleared:{type:"boolean"},visibilityCleared:{type:"boolean"},diagnostics:{type:"array",items:$e}},required:["cleared","overlayCleared","visibilityCleared"],additionalProperties:!1},XY={type:"object",properties:{},additionalProperties:!1},QY={type:"object",properties:{objectIds:{type:"array",items:{type:"string"},minItems:1},includeShadowDependencies:{type:"boolean"},shadowTarget:Pn,reason:{type:"string"}},required:["objectIds"],additionalProperties:!1},ZY={type:"object",properties:{objectId:{type:"string"}},additionalProperties:!1},eJ={type:"object",properties:{severity:{type:"string",enum:["info","warning","error"]},phase:{type:"string",enum:["load","asset-update","projection","edit","save","run","export","runtime-resolution"]},source:{type:"string"}},additionalProperties:!1},tJ={type:"object",properties:{kind:{type:"string"},id:{type:"string"},label:{type:"string"}},required:["kind"],additionalProperties:!1},Iv={type:"object",properties:{scopeId:{type:"string"},objectId:{type:"string"},assetId:{type:"string"},rowId:{type:"string"},prefabAssetId:{type:"string"},prefabNodeId:{type:"string"},materialSlotId:{type:"string"},regionId:{type:"string"},sectionId:{type:"string"},path:{type:"string"}},additionalProperties:!1},rJ={type:"object",properties:{id:{type:"string"},kind:{type:"string",enum:["locate","reconcile"]},label:{type:"string"},locator:Iv},required:["id","kind","label"],additionalProperties:!1},nJ={type:"object",properties:{code:{type:"string"},severity:{type:"string",enum:["info","warning","error"]},phase:{type:"string"},source:{type:"string"},producer:{type:"string"},message:{type:"string"},suggestion:{type:"string"},subject:tJ,locator:Iv,actions:{type:"array",items:rJ,maxItems:16},details:{type:"object",additionalProperties:!0}},required:["code","severity","phase","source","producer","message"],additionalProperties:!1},oJ={type:"object",properties:{scopeId:{type:"string"},documentRevision:{type:"number"},projectionRevision:{type:"number"},diagnostics:{type:"array",items:nJ},errorCount:{type:"number"},warningCount:{type:"number"},infoCount:{type:"number"}},required:["scopeId","documentRevision","diagnostics","errorCount","warningCount","infoCount"],additionalProperties:!1},aJ={type:"object",properties:{},additionalProperties:!1},iJ={type:"object",properties:{id:{type:"string"},label:{type:"string"},location:{type:"string"},purpose:{type:"string"},primaryCapabilities:{type:"array",items:{type:"string"}},fallbackTools:{type:"array",items:{type:"string"}},notes:{type:"array",items:{type:"string"}}},required:["id","label","location","purpose","primaryCapabilities"],additionalProperties:!1},sJ={type:"object",properties:{mode:{type:"string"},editorReady:{type:"boolean"},sessionActive:{type:"boolean"},regions:{type:"array",items:iJ},recommendedOperationOrder:{type:"array",items:{type:"string"}},l0FallbackRules:{type:"array",items:{type:"string"}}},required:["mode","editorReady","sessionActive","regions","recommendedOperationOrder","l0FallbackRules"],additionalProperties:!1},cJ={type:"object",properties:{includeObjects:{type:"boolean"},includeUnselectable:{type:"boolean"},objectLimit:{type:"number",minimum:0,maximum:500}},additionalProperties:!1},dJ={type:"object",properties:{},additionalProperties:!1},lJ={type:"object",properties:{id:{type:"string"},scope:{type:"string"},parentId:{type:"string"},state:{type:"string"}},required:["id","scope","state"],additionalProperties:!1},uJ={type:"object",properties:{id:{type:"string"},type:{type:"string"},startedAt:{type:"number"},traceId:{type:"string"},transactionId:{type:"string"},sourcePluginId:{type:"string"}},required:["id","type","startedAt"],additionalProperties:!1},mJ={type:"object",properties:{revision:{type:"number"},transitioning:{type:"boolean"},activeTransition:uJ,application:{type:"string"},project:{type:"string"},mode:{type:"string"},document:{type:"string"},preview:{type:"string"},scopes:{type:"array",items:lJ}},required:["revision","transitioning","application","project","mode","document","preview","scopes"],additionalProperties:!1},pJ={type:"object",properties:{code:{type:"string"},message:{type:"string"},severity:{type:"string"},pluginId:{type:"string"}},required:["code","message","severity"],additionalProperties:!1},Cf={mode:{type:"string"},editorReady:{type:"boolean"},busy:{type:"boolean"},status:{type:"string"},statusTone:{type:"string"},statusDetails:{type:"string"},sessionActive:{type:"boolean"},lifecycle:mJ,recentDiagnostics:{type:"array",items:pJ,maxItems:5}},wf=["mode","editorReady","busy","status","sessionActive"],av={type:"object",properties:Cf,required:[...wf],additionalProperties:!1},fJ={type:"object",properties:{timeoutMs:{type:"number",minimum:0,maximum:6e4}},additionalProperties:!1},gJ={type:"object",properties:{...Cf,entered:{type:"boolean"},alreadyEditor:{type:"boolean"}},required:[...wf,"entered","alreadyEditor"],additionalProperties:!1},hJ={type:"object",properties:{},additionalProperties:!1},bJ={type:"object",properties:{...Cf,saved:{type:"boolean"},runScheduled:{type:"boolean"}},required:[...wf,"saved","runScheduled"],additionalProperties:!1},yJ={type:"object",properties:{},additionalProperties:!1},SJ={type:"object",properties:{...Cf,discarded:{type:"boolean"},runScheduled:{type:"boolean"}},required:[...wf,"discarded","runScheduled"],additionalProperties:!1},IJ={type:"object",properties:{timeoutMs:{type:"number",minimum:0,maximum:6e4},pollIntervalMs:{type:"number",minimum:1,maximum:1e3}},additionalProperties:!1},vf={type:"object",properties:{objectId:{type:"string",minLength:1},parentId:{anyOf:[{type:"string"},{type:"null"}]},previousSiblingId:{anyOf:[{type:"string"},{type:"null"}]},nextSiblingId:{anyOf:[{type:"string"},{type:"null"}]}},required:["objectId","parentId","previousSiblingId","nextSiblingId"],additionalProperties:!1},EJ={type:"object",properties:{objectId:{type:"string",minLength:1},name:{type:"string"},parentId:{anyOf:[{type:"string"},{type:"null"}]},activeId:{anyOf:[{type:"string"},{type:"null"}]}},additionalProperties:!1},TJ={type:"object",properties:{createdId:{type:"string"},object:Ra,selection:Er},required:["createdId","selection"],additionalProperties:!1},AJ={type:"object",properties:{objectId:{type:"string",minLength:1},shape:{type:"string",enum:["cube","sphere","plane","capsule"]},name:{type:"string"},parentId:{anyOf:[{type:"string"},{type:"null"}]},activeId:{anyOf:[{type:"string"},{type:"null"}]}},required:["shape"],additionalProperties:!1},PJ={type:"object",properties:{createdId:{type:"string"},object:Ra,selection:Er},required:["createdId","selection"],additionalProperties:!1},xJ={type:"object",properties:{assetId:{type:"string"},name:{type:"string"},position:ae,rotation:ae,scale:ae,select:{type:"boolean"},focus:{type:"boolean"}},required:["assetId"],additionalProperties:!1},MJ={type:"object",properties:{assetId:{type:"string"},createdId:{type:"string"},object:Ra,selection:Er,focused:{type:"boolean"},status:{type:"string"}},required:["assetId","createdId","selection","status"],additionalProperties:!1},DJ={type:"object",properties:{objectId:{type:"string"},objectIds:{type:"array",items:{type:"string"}},activeId:{anyOf:[{type:"string"},{type:"null"}]},expectedNodes:{type:"array",minItems:1,maxItems:64,items:vf}},oneOf:[{required:["objectId"],not:{required:["objectIds"]}},{required:["objectIds"],not:{required:["objectId"]}}],additionalProperties:!1},OJ={type:"object",properties:{objectIds:{type:"array",minItems:1,maxItems:64,uniqueItems:!0,items:{type:"string",minLength:1}},activeId:{anyOf:[{type:"string"},{type:"null"}]},expectedNodes:{type:"array",minItems:1,maxItems:64,items:vf}},required:["objectIds","expectedNodes"],additionalProperties:!1},RJ={type:"object",properties:{createdIds:{type:"array",items:{type:"string"}},selectedIds:{type:"array",items:{type:"string"}},activeId:{anyOf:[{type:"string"},{type:"null"}]},selection:Er},required:["createdIds","selectedIds","activeId","selection"],additionalProperties:!1},CJ={type:"object",properties:{objectIds:{type:"array",minItems:2,maxItems:64,uniqueItems:!0,items:{type:"string",minLength:1}},name:{type:"string",minLength:1},parentId:{anyOf:[{type:"string"},{type:"null"}]},insertBeforeId:{anyOf:[{type:"string"},{type:"null"}]},preserveWorldTransform:{type:"boolean"},expectedNodes:{type:"array",minItems:2,maxItems:64,items:vf}},required:["objectIds","name","expectedNodes"],additionalProperties:!1},wJ={type:"object",properties:{createdId:{type:"string"},movedIds:{type:"array",items:{type:"string"}},selection:Er},required:["createdId","movedIds","selection"],additionalProperties:!1},vJ={type:"object",properties:{objectId:{type:"string",minLength:1},expectedName:{type:"string"},name:{type:"string",minLength:1}},required:["objectId","expectedName","name"],additionalProperties:!1},_J={type:"object",properties:{objectId:{type:"string"},before:{type:"string"},after:{type:"string"}},required:["objectId","before","after"],additionalProperties:!1},kJ={type:"object",properties:{objectIds:{type:"array",minItems:1,maxItems:64,uniqueItems:!0,items:{type:"string",minLength:1}},targetId:{anyOf:[{type:"string"},{type:"null"}]},placement:{type:"string",enum:["inside","before","after","root"]},parentId:{anyOf:[{type:"string"},{type:"null"}]},beforeId:{anyOf:[{type:"string"},{type:"null"}]},afterId:{anyOf:[{type:"string"},{type:"null"}]},preserveWorldTransform:{type:"boolean"},expectedNodes:{type:"array",minItems:1,maxItems:64,items:vf}},required:["objectIds","placement","expectedNodes"],additionalProperties:!1},jJ={type:"object",properties:{movedIds:{type:"array",items:{type:"string"}}},required:["movedIds"],additionalProperties:!1},NJ={type:"object",properties:{objectId:{type:"string",minLength:1},expectedEnabled:{type:"boolean"},enabled:{type:"boolean"}},required:["objectId","expectedEnabled","enabled"],additionalProperties:!1},GJ={type:"object",properties:{objectId:{type:"string"},before:{type:"boolean"},after:{type:"boolean"}},required:["objectId","before","after"],additionalProperties:!1},LJ={type:"object",properties:{deletedIds:{type:"array",items:{type:"string"}},fallbackSelectionId:{anyOf:[{type:"string"},{type:"null"}]},selection:Er},required:["deletedIds","selection"],additionalProperties:!1},FJ={type:"object",properties:{objectIds:{type:"array",minItems:1,maxItems:200,uniqueItems:!0,items:{type:"string",minLength:1}},paths:{type:"array",minItems:1,maxItems:128,uniqueItems:!0,items:{type:"string",minLength:1}},includeSchema:{type:"boolean"}},required:["objectIds","paths"],additionalProperties:!1},$J={type:"object",properties:{path:{type:"string"},label:{type:"string"},valueType:{type:"string"},control:{type:"string"},readOnly:{type:"boolean"},persistence:{type:"string"},commitMode:{type:"string"},min:{type:"number"},max:{type:"number"},step:{type:"number"},precision:{type:"number"},options:{type:"array",items:{type:"object",properties:{label:{type:"string"},value:{},disabled:{type:"boolean"}},required:["label","value"],additionalProperties:!1}}},required:["path","label","valueType","control","readOnly","persistence","commitMode"],additionalProperties:!1},BJ={type:"object",properties:{path:{type:"string"},value:{},present:{type:"boolean"},schema:$J},required:["path","value","present"],additionalProperties:!1},zJ={type:"object",properties:{documentRevision:{type:"integer",minimum:0},objects:{type:"array",items:{type:"object",properties:{objectId:{type:"string"},properties:{type:"array",items:BJ}},required:["objectId","properties"],additionalProperties:!1}},objectCount:{type:"integer",minimum:0},propertyCount:{type:"integer",minimum:0}},required:["documentRevision","objects","objectCount","propertyCount"],additionalProperties:!1},VJ={type:"object",properties:{targetObjectId:{type:"string"},sourceObjectId:{type:"string"},sourceObjectName:{type:"string"},kind:{type:"string"},path:{type:"string"},relationId:{type:"string"}},required:["targetObjectId","kind","path"],additionalProperties:!1},UJ={type:"object",properties:{objectId:{type:"string",minLength:1},kind:{type:"string"},cursor:{type:"string",minLength:1},limit:{type:"integer",minimum:1,maximum:1e3}},required:["objectId"],additionalProperties:!1},HJ={type:"object",properties:{objectId:{type:"string"},references:{type:"array",items:VJ},coverage:dv,totalCount:{type:"integer",minimum:0},returnedCount:{type:"integer",minimum:0},nextCursor:{type:"string"}},required:["objectId","references","coverage","totalCount","returnedCount"],additionalProperties:!1},KJ={type:"object",properties:{targets:{type:"array",minItems:1,maxItems:5e3,items:{type:"object",properties:{objectId:{type:"string",minLength:1},changes:{type:"array",minItems:1,maxItems:128,items:{type:"object",properties:{path:{type:"string",minLength:1},expected:{},value:{}},required:["path","value"],additionalProperties:!1}}},required:["objectId","changes"],additionalProperties:!1}}},required:["targets"],additionalProperties:!1},WJ={type:"object",properties:{requestedObjectCount:{type:"number"},validatedPropertyCount:{type:"number"},changed:{type:"boolean"},changedObjectCount:{type:"number"},sampleChangedObjectIds:{type:"array",items:{type:"string"}}},required:["requestedObjectCount","validatedPropertyCount","changedObjectCount","sampleChangedObjectIds"],additionalProperties:!1},qJ={type:"object",properties:{mode:{type:"string"},status:{type:"string"},statusTone:{type:"string"},statusDetails:{type:"string"},dirty:{type:"boolean"},busy:{type:"boolean"},selection:Er,object:{anyOf:[Ra,{type:"null"}]},diagnostics:{type:"array",items:$e}},required:["mode","status","selection"],additionalProperties:!1},YJ={type:"object",properties:{mode:{type:"string"},busy:{type:"boolean"},dirty:{type:"boolean"},status:{type:"string"},statusTone:{type:"string"},selection:Er,objectCount:{type:"number"},objects:{type:"array",items:Ra}},required:["mode","busy","dirty","status","selection","objectCount"],additionalProperties:!1},JJ={type:"object",properties:{expectedRevision:{type:"integer",minimum:0},rootId:{type:"string",minLength:1},maxDepth:{type:"integer",minimum:0},text:{type:"string"},cursor:{type:"string",minLength:1},limit:{type:"integer",minimum:1,maximum:1e3}},additionalProperties:!1},XJ={type:"object",properties:{id:{type:"string"},label:{type:"string"},parentId:{anyOf:[{type:"string"},{type:"null"}]},role:{type:"string"},selectable:{type:"boolean"},canHaveChildren:{type:"boolean"},renamable:{type:"boolean"},deletable:{type:"boolean"},draggable:{type:"boolean"},authoredEnabled:{type:"boolean"},editorVisible:{type:"boolean"},editorLocked:{type:"boolean"}},required:["id","label","parentId","selectable","canHaveChildren","renamable","deletable","draggable"],additionalProperties:!1},QJ={type:"object",properties:{id:{type:"string"},label:{type:"string"},description:{type:"string"},effect:{type:"string"},targetPolicy:{type:"string"},menu:{anyOf:[{type:"boolean",enum:[!1]},{type:"object",properties:{path:{type:"array",items:{type:"object",properties:{id:{type:"string"},label:{type:"string"},order:{type:"number"}},required:["id","label"],additionalProperties:!1}},group:{type:"string"},order:{type:"number"}},additionalProperties:!1}]},shortcut:{type:"string"},danger:{type:"boolean"},disabledReason:{type:"string"},payload:{type:"object",additionalProperties:!0}},required:["id","label","effect","targetPolicy"],additionalProperties:!1},ZJ={type:"object",properties:{scopeKey:{type:"string"},scopeType:{type:"string"},revision:{type:"number"},title:{type:"string"},readonly:{type:"boolean"},nodes:{type:"array",items:XJ},selectedIds:{type:"array",items:{type:"string"}},activeId:{anyOf:[{type:"string"},{type:"null"}]},primaryOperationId:{type:"string"},capabilities:{type:"object",additionalProperties:{type:"boolean"}},totalCount:{type:"number"},returnedCount:{type:"number"},nextCursor:{type:"string"}},required:["scopeKey","scopeType","revision","title","readonly","nodes","selectedIds","activeId","capabilities","totalCount","returnedCount"],additionalProperties:!1},e4={type:"object",properties:{scopeKey:{type:"string"},expectedRevision:{type:"number"},contextNodeId:{anyOf:[{type:"string"},{type:"null"}]},targetIds:{type:"array",items:{type:"string"}},activeId:{anyOf:[{type:"string"},{type:"null"}]}},additionalProperties:!1},t4={type:"object",properties:{scopeKey:{type:"string"},revision:{type:"number"},operations:{type:"array",items:QJ}},required:["scopeKey","revision","operations"],additionalProperties:!1},r4={type:"object",properties:{scopeKey:{type:"string"},expectedRevision:{type:"number"},operationId:{type:"string"},contextNodeId:{anyOf:[{type:"string"},{type:"null"}]},targetIds:{type:"array",items:{type:"string"}},activeId:{anyOf:[{type:"string"},{type:"null"}]},input:{type:"object",additionalProperties:!0}},required:["scopeKey","expectedRevision","operationId"],additionalProperties:!1},n4={type:"object",properties:{ok:{type:"boolean"},changed:{type:"boolean"},revision:{type:"number"},diagnostics:{type:"array",items:$e}},required:["ok","changed","revision","diagnostics"],additionalProperties:!1},Gl={[b.ASSET_ANALYSIS_GET]:{inputSchema:Dq,outputSchema:Rq},[b.ASSET_IMPORT]:{inputSchema:gq,outputSchema:hq},[b.ASSET_INFO_GET]:{inputSchema:Sq,outputSchema:Iq},[b.ASSET_LIBRARY_LIST]:{inputSchema:pq,outputSchema:fq},[b.ASSET_LIBRARY_REFRESH]:{inputSchema:bq,outputSchema:yq},[b.ASSET_REFERENCES_LIST]:{inputSchema:Tq,outputSchema:Aq},[b.AUTHORING_VALIDATION_LIST]:{inputSchema:xq,outputSchema:Mq},[b.EDITOR_SNAPSHOT_GET]:{inputSchema:cJ,outputSchema:YJ},[b.EDITOR_STATE_GET]:{inputSchema:ZY,outputSchema:qJ},[b.EDITOR_DIAGNOSTICS_LIST]:{inputSchema:eJ,outputSchema:oJ},[b.EDITOR_UI_REGIONS_GET]:{inputSchema:aJ,outputSchema:sJ},[b.HOST_EDITOR_ENTER]:{inputSchema:fJ,outputSchema:gJ},[b.HOST_EDITOR_SAVE_AND_RUN]:{inputSchema:hJ,outputSchema:bJ},[b.HOST_EDITOR_DISCARD_AND_RUN]:{inputSchema:yJ,outputSchema:SJ},[b.HOST_EDITOR_WAIT_READY]:{inputSchema:IJ,outputSchema:av},[b.HOST_MODE_GET]:{inputSchema:dJ,outputSchema:av},[b.HIERARCHY_SCOPE_GET]:{inputSchema:JJ,outputSchema:ZJ},[b.HIERARCHY_OPERATIONS_LIST]:{inputSchema:e4,outputSchema:t4},[b.HIERARCHY_OPERATION_EXECUTE]:{inputSchema:r4,outputSchema:n4},[b.MATERIAL_ASSETS_LIST]:{inputSchema:f3,outputSchema:g3},[b.MATERIAL_ASSET_GET]:{inputSchema:h3,outputSchema:b3},[b.MATERIAL_ASSET_CREATE]:{inputSchema:y3,outputSchema:S3},[b.MATERIAL_ASSET_DELETE]:{inputSchema:T3,outputSchema:A3},[b.MATERIAL_ASSET_DUPLICATE]:{inputSchema:I3,outputSchema:E3},[b.MATERIAL_ASSET_RENAME]:{inputSchema:P3,outputSchema:x3},[b.MATERIAL_ASSET_SET_SHADER]:{inputSchema:M3,outputSchema:D3},[b.MATERIAL_SHADER_DEFINITIONS_LIST]:{inputSchema:O3,outputSchema:R3},[b.MATERIAL_SHADER_DEFINITION_GET]:{inputSchema:C3,outputSchema:w3},[b.MATERIAL_FRAME_PARTICIPANTS_LIST]:{inputSchema:_3,outputSchema:k3},[b.MATERIAL_PROJECTION_SNAPSHOT_GET]:{inputSchema:j3,outputSchema:F3},[b.MATERIAL_REFERENCES_LIST]:{inputSchema:B3,outputSchema:z3},[b.MATERIAL_BINDINGS_LIST]:{inputSchema:V3,outputSchema:U3},[b.MATERIAL_BINDING_SET]:{inputSchema:H3,outputSchema:rv},[b.MATERIAL_BINDING_CLEAR]:{inputSchema:K3,outputSchema:rv},[b.MATERIAL_PROPERTIES_GET]:{inputSchema:W3,outputSchema:q3},[b.MATERIAL_PROPERTIES_PATCH]:{inputSchema:J3,outputSchema:X3},[b.OBJECT_CREATE_FROM_ASSET]:{inputSchema:xJ,outputSchema:MJ},[b.OBJECT_CREATE_GROUP]:{inputSchema:EJ,outputSchema:TJ},[b.OBJECT_CREATE_PRIMITIVE]:{inputSchema:AJ,outputSchema:PJ},[b.OBJECT_DELETE]:{inputSchema:DJ,outputSchema:LJ},[b.OBJECT_DUPLICATE]:{inputSchema:OJ,outputSchema:RJ},[b.OBJECT_GROUP]:{inputSchema:CJ,outputSchema:wJ},[b.OBJECT_MOVE]:{inputSchema:kJ,outputSchema:jJ},[b.OBJECT_PROPERTIES_GET]:{inputSchema:FJ,outputSchema:zJ},[b.OBJECT_PROPERTIES_PATCH_MANY]:{inputSchema:KJ,outputSchema:WJ},[b.OBJECT_REFERENCES_LIST]:{inputSchema:UJ,outputSchema:HJ},[b.OBJECT_RENAME]:{inputSchema:vJ,outputSchema:_J},[b.OBJECT_RESOLVE]:{inputSchema:eY,outputSchema:tY},[b.OBJECT_SET_ENABLED]:{inputSchema:NJ,outputSchema:GJ},[b.PREFAB_MATERIAL_SLOTS_LIST]:{inputSchema:m3,outputSchema:p3},[b.PREFAB_ASSET_CREATE_FROM_ASSET]:{inputSchema:Nq,outputSchema:AI},[b.PREFAB_ASSET_CREATE_FROM_OBJECT]:{inputSchema:Gq,outputSchema:AI},[b.PREFAB_ASSET_DUPLICATE]:{inputSchema:Lq,outputSchema:AI},[b.PREFAB_ASSET_RENAME]:{inputSchema:Fq,outputSchema:$q},[b.PREFAB_DRAFT_COMMIT]:{inputSchema:Bq,outputSchema:zq},[b.PREFAB_NODE_CREATE_FROM_ASSET]:{inputSchema:Xq,outputSchema:Oa},[b.PREFAB_NODE_CREATE_GROUP]:{inputSchema:Zq,outputSchema:Oa},[b.PREFAB_NODE_CREATE_MARKER]:{inputSchema:e3,outputSchema:Oa},[b.PREFAB_NODE_CREATE_PRIMITIVE]:{inputSchema:Qq,outputSchema:Oa},[b.PREFAB_NODE_DELETE]:{inputSchema:i3,outputSchema:Oa},[b.PREFAB_NODE_REPARENT]:{inputSchema:a3,outputSchema:Oa},[b.PREFAB_NODE_RENAME]:{inputSchema:n3,outputSchema:o3},[b.PREFAB_NODE_SELECT]:{inputSchema:Yq,outputSchema:Jq},[b.PREFAB_NODE_SET_TRANSFORM]:{inputSchema:r3,outputSchema:Oa},[b.PREFAB_NODE_SET_MARKER]:{inputSchema:t3,outputSchema:Oa},[b.PREFAB_RESOLVE]:{inputSchema:Cq,outputSchema:wq},[b.PREFAB_SCENE_GET]:{inputSchema:Wq,outputSchema:qq},[b.PREFAB_SOURCE_STRUCTURE_GET]:{inputSchema:s3,outputSchema:d3},[b.PREFAB_STAGE_EXIT]:{inputSchema:kq,outputSchema:jq},[b.PREFAB_STAGE_OPEN]:{inputSchema:vq,outputSchema:_q},[b.PREFAB_STAGE_SAVE]:{inputSchema:ev,outputSchema:tv},[b.PREFAB_STAGE_DISCARD]:{inputSchema:ev,outputSchema:tv},[b.SCENE_OBJECTS_LIST]:{inputSchema:Q3,outputSchema:Z3},[b.SELECTION_SET]:{inputSchema:rY,outputSchema:nY},[b.SHADOW_POLICY_GET]:{inputSchema:cY,outputSchema:dY},[b.SHADOW_POLICY_SET]:{inputSchema:lY,outputSchema:uY},[b.SHADOW_MAP_EXPERIMENT_CONFIG_GET]:{inputSchema:mY,outputSchema:pY},[b.SHADOW_MAP_EXPERIMENT_PLAN_PREVIEW]:{inputSchema:fY,outputSchema:gY},[b.SHADOW_MAP_EXPERIMENT_RUNTIME_SNAPSHOT]:{inputSchema:hY,outputSchema:bY},[b.SHADOW_DEBUG_INSPECT]:{inputSchema:MY,outputSchema:bv},[b.SHADOW_DEBUG_CONTEXT_CLEAR]:{inputSchema:YY,outputSchema:JY},[b.SHADOW_DEBUG_CONTEXT_ENTER]:{inputSchema:WY,outputSchema:qY},[b.SHADOW_DEBUG_OVERLAY_CLEAR]:{inputSchema:RY,outputSchema:CY},[b.SHADOW_DEBUG_OVERLAY_SET]:{inputSchema:DY,outputSchema:OY},[b.SHADOW_DEBUG_VISIBILITY_MEASURE]:{inputSchema:wY,outputSchema:yv},[b.SHADOW_RECEIVERS_LIST]:{inputSchema:yY,outputSchema:SY},[b.SHADOW_RESOLVE_PREVIEW]:{inputSchema:IY,outputSchema:EY},[b.SHADOW_STATIC_BAKE]:{inputSchema:TY,outputSchema:AY},[b.SHADOW_STATIC_INVALIDATE]:{inputSchema:PY,outputSchema:xY},[b.TRANSFORM_MOVE]:{inputSchema:vY,outputSchema:nv},[b.TRANSFORM_SET]:{inputSchema:_Y,outputSchema:nv},[b.VIEWPORT_CAMERA_GET]:{inputSchema:BY,outputSchema:$Y},[b.VIEWPORT_CAMERA_ORBIT]:{inputSchema:VY,outputSchema:ov},[b.VIEWPORT_CAMERA_SET_PRESET]:{inputSchema:zY,outputSchema:ov},[b.VIEWPORT_FRAME_SELECTION]:{inputSchema:LY,outputSchema:FY},[b.VIEWPORT_FOCUS_OBJECT]:{inputSchema:kY,outputSchema:jY},[b.VIEWPORT_RENDER_STATS_GET]:{inputSchema:NY,outputSchema:GY},[b.VIEWPORT_ISOLATION_ENTER]:{inputSchema:QY,outputSchema:PI},[b.VIEWPORT_VISIBILITY_CLEAR]:{inputSchema:XY,outputSchema:PI},[b.VIEWPORT_VISIBILITY_SET]:{inputSchema:KY,outputSchema:PI},[b.VIEWPORT_VISIBILITY_SNAPSHOT]:{inputSchema:HY,outputSchema:_I}};var _f="/__fps_editor_agent/v1",kI="/__fps_editor_agent/v1/asset-source-grants";var o4={type:"object",properties:{id:{type:"string",maxLength:128},label:{type:"string",maxLength:128},commandType:{type:"string",maxLength:128},createdAt:{type:"number"},origin:{type:"object",properties:{principal:{type:"object",properties:{type:{type:"string",minLength:1,maxLength:128},id:{type:"string",minLength:1,maxLength:256}},required:["type"],additionalProperties:!1},source:{type:"string",minLength:1,maxLength:128},sessionId:{type:"string",minLength:1,maxLength:256},surface:{type:"string",minLength:1,maxLength:128}},required:["principal","source","sessionId"],additionalProperties:!1}},required:["id","label","commandType","createdAt"],additionalProperties:!1},Ev={type:"object",properties:{jsonByteLength:{type:"integer",minimum:0},jsonCharacterLength:{type:"integer",minimum:0},rootType:{type:"string",enum:["object","array","string","number","boolean","null"]},topLevelEntryCount:{type:"integer",minimum:0}},required:["jsonByteLength","jsonCharacterLength","rootType","topLevelEntryCount"],additionalProperties:!1},Tv={type:"object",properties:{expectedDocumentRevision:{type:"integer",minimum:0}},additionalProperties:!1},Av={type:"object",properties:{serviceInstanceId:{type:"string",minLength:1,maxLength:256},documentRevision:{type:"integer",minimum:0},documentStructureRevision:{type:"integer",minimum:0},eventCursor:{type:"integer",minimum:0},dirty:{type:"boolean"},canUndo:{type:"boolean"},canRedo:{type:"boolean"},history:{type:"object",properties:{entries:{type:"array",maxItems:20,items:o4},totalCount:{type:"integer",minimum:0},returnedCount:{type:"integer",minimum:0,maximum:20}},required:["entries","totalCount","returnedCount"],additionalProperties:!1},documents:{type:"object",properties:{working:Ev,saved:Ev},required:["working","saved"],additionalProperties:!1},projection:{const:"summary"}},required:["serviceInstanceId","documentRevision","documentStructureRevision","eventCursor","dirty","canUndo","canRedo","history","documents","projection"],additionalProperties:!1},kf=64,jf=64,Pv=64,xv=64,Ll=32*1024,Nf=5e3,Gf=8*1024*1024,Lf=128,Ff=256*1024,Mv=100;var xn=(e,t)=>({kind:"number",...e!=null?{min:e}:{},...t!=null?{max:t}:{}}),Yi={kind:"texture"},Dv={kind:"color"},a4={kind:"enum",values:["lit","unlit"]},i4={kind:"enum",values:["opaque","mask","blend"]},Cv={lightingModel:a4,baseColor:{kind:"object",properties:{color:Dv,texture:Yi,brightness:xn(0),saturation:xn(0),contrast:xn(0),hue:xn(-180,180)}},normal:{kind:"object",properties:{texture:Yi,strength:xn(0)}},emission:{kind:"object",properties:{color:Dv,intensity:xn(0),texture:Yi,maskTexture:Yi}},alpha:{kind:"object",properties:{mode:i4,opacity:xn(0,1),cutoff:xn(0,1),texture:Yi}}},s4={kind:"object",properties:{...Cv,metallic:xn(0,1),roughness:xn(0,1),metallicRoughness:{kind:"object",properties:{texture:Yi}},occlusion:{kind:"object",properties:{texture:Yi,strength:xn(0)}}}},c4={kind:"object",properties:Cv},d4={lightingModel:"lit",baseColor:{color:{r:1,g:1,b:1},brightness:1,saturation:1,contrast:1,hue:0},metallic:0,roughness:1,emission:{color:{r:0,g:0,b:0},intensity:0}},l4={lightingModel:"lit",baseColor:{color:{r:1,g:1,b:1},brightness:1,saturation:1,contrast:1,hue:0},emission:{color:{r:0,g:0,b:0},intensity:0}},Ov=[{id:"surface",title:"Surface",order:40},{id:"geometry",title:"Geometry",order:50},{id:"emission",title:"Emission",order:60},{id:"alpha",title:"Alpha",order:70}],Ji={path:"properties.lightingModel",operator:"equals",value:"lit",inactiveReasonKey:"litMaterial"},wv=[Dc("properties.lightingModel","surface",1,"enum","assetLightingModel","lightingModel","lit",{options:[{value:"lit",labelKey:"assetLightingModelLit"},{value:"unlit",labelKey:"assetLightingModelUnlit"}],binding:"lightingModel",updateClass:"define"}),Dc("properties.baseColor.color","surface",2,"color","assetBaseColor","baseColor",{r:1,g:1,b:1},{binding:"baseColor.color"}),Oc("properties.baseColor.texture.textureAssetId","properties.baseColor.texture","surface",3,"assetBaseTexture","baseTexture","baseColor.texture"),Mn("properties.baseColor.brightness","surface",4,"assetBrightness","brightness",1,{softMin:0,softMax:4,step:.05,conditions:[Mc("properties.baseColor.texture.textureAssetId","baseTexture")]}),Mn("properties.baseColor.saturation","surface",5,"assetSaturation","saturation",1,{softMin:0,softMax:2,step:.05,conditions:[Mc("properties.baseColor.texture.textureAssetId","baseTexture")]}),Mn("properties.baseColor.contrast","surface",6,"assetContrast","contrast",1,{softMin:0,softMax:2,step:.05,conditions:[Mc("properties.baseColor.texture.textureAssetId","baseTexture")]}),Mn("properties.baseColor.hue","surface",7,"assetHue","hue",0,{step:1,conditions:[Mc("properties.baseColor.texture.textureAssetId","baseTexture")]}),Oc("properties.normal.texture.textureAssetId","properties.normal.texture","geometry",10,"assetNormalTexture","normalTexture","normal.texture",[Ji]),Mn("properties.normal.strength","geometry",11,"assetNormalStrength","normalStrength",1,{softMin:0,softMax:4,step:.05,conditions:[Ji,Mc("properties.normal.texture.textureAssetId","normalTexture")]}),Dc("properties.emission.color","emission",50,"color","assetEmissionColor","emissionColor",{r:0,g:0,b:0},{binding:"emission.color"}),Mn("properties.emission.intensity","emission",51,"assetEmissionIntensity","emissionIntensity",0,{softMin:0,softMax:8,step:.05}),Oc("properties.emission.texture.textureAssetId","properties.emission.texture","emission",52,"assetEmissionTexture","emissionTexture","emission.texture"),Dc("properties.alpha.mode","alpha",60,"enum","assetAlphaMode","alphaMode","opaque",{options:[{value:"opaque",labelKey:"assetAlphaModeOpaque"},{value:"mask",labelKey:"assetAlphaModeMask"},{value:"blend",labelKey:"assetAlphaModeBlend"}],binding:"alpha.mode",updateClass:"pipeline"}),Mn("properties.alpha.opacity","alpha",61,"assetAlphaOpacity","alphaOpacity",1,{step:.05,conditions:[{path:"properties.alpha.mode",operator:"equals",value:"blend",inactiveReasonKey:"alphaBlend"}]}),Mn("properties.alpha.cutoff","alpha",62,"assetAlphaCutoff","alphaCutoff",.5,{step:.01,conditions:[{path:"properties.alpha.mode",operator:"equals",value:"mask",inactiveReasonKey:"alphaMask"}]}),Oc("properties.alpha.texture.textureAssetId","properties.alpha.texture","alpha",63,"assetAlphaTexture","alphaTexture","alpha.texture",[{path:"properties.alpha.mode",operator:"not-equals",value:"opaque",inactiveReasonKey:"alphaTransparency"}])],u4=[...wv,Mn("properties.metallic","geometry",20,"assetMetallic","metallic",0,{step:.05,conditions:[Ji]}),Mn("properties.roughness","geometry",21,"assetRoughness","roughness",1,{step:.05,conditions:[Ji]}),Oc("properties.metallicRoughness.texture.textureAssetId","properties.metallicRoughness.texture","geometry",22,"assetMetallicRoughnessTexture","metallicRoughnessTexture","metallicRoughness.texture",[Ji]),Oc("properties.occlusion.texture.textureAssetId","properties.occlusion.texture","geometry",23,"assetOcclusionTexture","occlusionTexture","occlusion.texture",[Ji]),Mn("properties.occlusion.strength","geometry",24,"assetOcclusionStrength","occlusionStrength",1,{softMin:0,softMax:4,step:.05,conditions:[Ji,Mc("properties.occlusion.texture.textureAssetId","occlusionTexture")]})],m4=[{shaderId:"fps.builtin.pbr",version:1,runtimeKind:"pbr",displayName:"PBR",propertiesSchema:s4,defaultProperties:d4,inspector:{sections:Ov,fields:u4}},{shaderId:"fps.builtin.standard",version:1,runtimeKind:"standard",displayName:"Standard",propertiesSchema:c4,defaultProperties:l4,inspector:{sections:Ov,fields:wv}}],Dn=p4(m4);function p4(e){let t=new Map;for(let n of e){g4(n,t);let o=h4(n);t.set(n.shaderId,Nv(o))}let r=Object.freeze([...t.values()]);return Object.freeze({get(n){return typeof n=="string"?t.get(n)??null:null},list(){return r}})}function Rc(e,t=Dn){return t.get(e)}function Uo(e){return Rc(e)}function f4(e,t,r=Dn){let n=$f(t);return r.get(e)?.inspector.fields.find(a=>a.path===n)??null}function vv(e,t,r=Dn){let n=$f(t),o=Rc(e,r);if(!o||!n)return{found:!1};let a=o.inspector.fields.find(c=>c.path===n);return a?{found:!0,value:structuredClone(a.defaultValue)}:o.inspector.fields.find(c=>c.control==="texture"&&c.schemaPath===n)?{found:!0,value:null}:Ca(e,n,r)?.kind==="texture"?{found:!0,value:null}:{found:!1}}function Ca(e,t,r=Dn){let n=Rc(e,r);if(!n)return null;let o=f4(e,t,r),i=(o?.schemaPath??$f(t)).replace(/^properties\./,"").split(".").filter(Boolean);if(i.length===0)return null;let s=n.propertiesSchema;for(let c=0;c<i.length;c+=1){let d=i[c];if(s.kind==="texture"&&c===i.length-1&&(d==="url"||d==="textureAssetId"))return{kind:"string",nullable:!0};if(s.kind!=="object")return null;let u=s.properties[d];if(!u)return null;s=u}return o?.control==="texture"&&s.kind==="texture"?{kind:"string",nullable:!0}:s}function NI(e){let t=Uo(e);if(!t)throw new Error(`Unknown built-in material shader: ${e}`);return structuredClone(t.defaultProperties)}function _v(e,t,r="properties",n=Dn){let o=Rc(e,n);if(!o)return[{path:"shaderId",message:`Unknown material shader: ${String(e)}`}];let a=[];return GI(o.propertiesSchema,t,r,a),a}function Dc(e,t,r,n,o,a,i,s){return{path:e,sectionId:t,order:r,control:n,labelKey:o,tooltipKey:a,defaultValue:i,updateClass:"uniform",...s}}function Mn(e,t,r,n,o,a,i={}){return Dc(e,t,r,"number",n,o,a,{binding:e.replace(/^properties\./,""),step:i.step??.05,displayPrecision:2,precision:2,...i})}function Oc(e,t,r,n,o,a,i,s){return Dc(e,r,n,"texture",o,a,"",{schemaPath:t,binding:i,updateClass:"texture",conditions:s})}function Mc(e,t){return{path:e,operator:"truthy",inactiveReasonKey:t}}function g4(e,t){if(!oa(e.shaderId)&&!ci(e.shaderId))throw new Error("Material Shader Definition shaderId must be a supported built-in id or a lowercase namespaced project id.");if(!Number.isInteger(e.version)||e.version<=0)throw new Error(`Material Shader Definition ${e.shaderId} must use a positive integer version.`);if(t.has(e.shaderId))throw new Error(`Duplicate Material Shader Definition: ${e.shaderId}`);if(e.sourceFile!=null&&!y4(e.sourceFile))throw new Error(`Material Shader Definition ${e.shaderId} sourceFile must be a safe project-relative path.`);kv(e.shaderId,e.propertiesSchema,"properties");let r=[];if(GI(e.propertiesSchema,e.defaultProperties,"properties",r),r.length>0){let a=r[0];throw new Error(`Material Shader Definition ${e.shaderId} default ${a.path} ${a.message}.`)}let n=new Set;for(let a of e.inspector.sections){if(!a.id.trim()||n.has(a.id))throw new Error(`Material Shader Definition ${e.shaderId} contains an invalid or duplicate section: ${a.id}`);n.add(a.id)}let o=new Set;for(let a of e.inspector.fields){if(!a.path.startsWith("properties.")||o.has(a.path))throw new Error(`Material Shader Definition ${e.shaderId} contains an invalid or duplicate field: ${a.path}`);if(!n.has(a.sectionId))throw new Error(`Material Shader Definition ${e.shaderId} field ${a.path} references an unknown section.`);b4(e,a),o.add(a.path)}}function h4(e){let t=structuredClone(e);return{...t,inspector:{...t.inspector,fields:t.inspector.fields.map(r=>{if(r.control!=="number")return r;let n=jv(t.propertiesSchema,r.schemaPath??r.path);return n?.kind!=="number"?r:{...r,...n.min!=null?{min:n.min}:{},...n.max!=null?{max:n.max}:{}}})}}}function b4(e,t){let r=[["min",t.min],["max",t.max],["softMin",t.softMin],["softMax",t.softMax]];for(let[o,a]of r)if(a!=null&&!Number.isFinite(a))throw new Error(`Material Shader Definition ${e.shaderId} field ${t.path} ${o} must be finite.`);if(t.control!=="number"){if(r.some(([,o])=>o!=null))throw new Error(`Material Shader Definition ${e.shaderId} field ${t.path} uses numeric ranges with a non-number control.`);return}let n=jv(e.propertiesSchema,t.schemaPath??t.path);if(n?.kind!=="number")throw new Error(`Material Shader Definition ${e.shaderId} field ${t.path} must reference a number schema.`);for(let[o,a,i]of[["min",t.min,n.min],["max",t.max,n.max]])if(a!=null&&a!==i)throw new Error(`Material Shader Definition ${e.shaderId} field ${t.path} ${o} must match propertiesSchema.`);if(t.softMin!=null&&t.softMax!=null&&t.softMin>t.softMax)throw new Error(`Material Shader Definition ${e.shaderId} field ${t.path} softMin must not exceed softMax.`);if(n.min!=null&&t.softMin!=null&&t.softMin<n.min)throw new Error(`Material Shader Definition ${e.shaderId} field ${t.path} softMin must not be below the schema minimum.`);if(n.max!=null&&t.softMax!=null&&t.softMax>n.max)throw new Error(`Material Shader Definition ${e.shaderId} field ${t.path} softMax must not exceed the schema maximum.`)}function kv(e,t,r){if(t.kind==="object"){for(let[n,o]of Object.entries(t.properties))kv(e,o,`${r}.${n}`);return}if(t.kind==="number"){if(t.min!=null&&!Number.isFinite(t.min))throw new Error(`Material Shader Definition ${e} number field ${r} min must be finite.`);if(t.max!=null&&!Number.isFinite(t.max))throw new Error(`Material Shader Definition ${e} number field ${r} max must be finite.`);if(t.min!=null&&t.max!=null&&t.min>t.max)throw new Error(`Material Shader Definition ${e} number field ${r} min must not exceed max.`);return}if(t.kind==="color"&&t.channels!=null&&t.channels!==3&&t.channels!==4)throw new Error(`Material Shader Definition ${e} color field ${r} channels must be 3 or 4.`)}function y4(e){let t=e.trim();return!t||t.startsWith("/")||t.includes("\\")||t.includes(":")?!1:!t.split("/").includes("..")}function $f(e){let t=e.trim();return t.startsWith("properties.")?t:`properties.${t}`}function jv(e,t){let r=$f(t).replace(/^properties\./,"").split(".").filter(Boolean);if(r.length===0)return null;let n=e;for(let o of r){if(n.kind!=="object")return null;let a=n.properties[o];if(!a)return null;n=a}return n}function GI(e,t,r,n){if(e.kind==="object"){if(!jI(t)){n.push({path:r,message:"must be an object"});return}for(let a of Object.keys(t))Object.prototype.hasOwnProperty.call(e.properties,a)||n.push({path:`${r}.${a}`,message:"is not supported by the selected shader"});for(let[a,i]of Object.entries(e.properties))t[a]!==void 0&&GI(i,t[a],`${r}.${a}`,n);return}if(e.kind==="number"){if(typeof t!="number"||!Number.isFinite(t)){n.push({path:r,message:"must be a finite number"});return}e.min!=null&&t<e.min&&n.push({path:r,message:`must be greater than or equal to ${e.min}`}),e.max!=null&&t>e.max&&n.push({path:r,message:`must be less than or equal to ${e.max}`});return}if(e.kind==="boolean"){typeof t!="boolean"&&n.push({path:r,message:"must be a boolean"});return}if(e.kind==="string"){t!==null&&typeof t!="string"?n.push({path:r,message:"must be a string"}):t===null&&!e.nullable&&n.push({path:r,message:"must not be null"});return}if(e.kind==="enum"){(typeof t!="string"||!e.values.includes(t))&&n.push({path:r,message:`must be one of: ${e.values.join(", ")}`});return}if(e.kind==="color"){let a=e.channels===4?["r","g","b","a"]:["r","g","b"];Rv(t,r,a,n,e.channels===4?"an RGBA object":"an RGB object");return}if(e.kind==="vec2"||e.kind==="vec3"){Rv(t,r,e.kind==="vec2"?["x","y"]:["x","y","z"],n,`a ${e.kind} object`);return}if(t===null)return;if(!jI(t)){n.push({path:r,message:"must be a texture reference object or null"});return}Object.keys(t).some(a=>a!=="url"&&a!=="textureAssetId")&&n.push({path:r,message:"must contain only url or textureAssetId"});for(let a of["url","textureAssetId"]){let i=t[a];i!==void 0&&(typeof i!="string"||!i.trim())&&n.push({path:`${r}.${a}`,message:"must be a non-empty string"})}}function Rv(e,t,r,n,o){if(!jI(e)){n.push({path:t,message:`must be ${o}`});return}Object.keys(e).some(a=>!r.includes(a))&&n.push({path:t,message:`must contain only ${r.join(", ")}`});for(let a of r)(typeof e[a]!="number"||!Number.isFinite(e[a]))&&n.push({path:`${t}.${a}`,message:"must be a finite number"})}function Nv(e){if(e&&typeof e=="object"&&!Object.isFrozen(e)){Object.freeze(e);for(let t of Object.values(e))Nv(t)}return e}function jI(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Gv(e,t,r,n={}){let o=t.find(a=>a.path===r.path);if(!o)throw new Error(`Serialized property descriptor not found: ${r.path}`);if(o.readOnly===!0||typeof o.setValue!="function")throw new Error(`Serialized property is read-only: ${r.path}`);return o.setValue(e,r.value,{...n,targetId:r.targetId})}var Lv="summary";function On(){return{position:{x:0,y:0,z:0},rotation:{x:0,y:0,z:0},scale:{x:1,y:1,z:1}}}function S4(){return[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]}function zf(e){let t=Hv(e);return t&&I4(t)?{mode:"matrix",matrix:t}:null}function Fv(e){return Jr(e)?{mode:"matrix",matrix:zI(e.matrix)}:{...e.mode==="trs"?{mode:"trs"}:{},position:Bf(e.position),rotation:Bf(e.rotation),scale:Bf(e.scale)}}function Jr(e){return e.mode==="matrix"}function Cc(e){return e.mode!=="matrix"}function $v(e){return Jr(e)?{x:e.matrix[12],y:e.matrix[13],z:e.matrix[14]}:Bf(e.position)}function I4(e){return!!Hv(e)&&Math.abs(e[3])<=1e-6&&Math.abs(e[7])<=1e-6&&Math.abs(e[11])<=1e-6&&Math.abs(e[15]-1)<=1e-6&&!!zv(e)}function wa(e){if(Jr(e))return zI(e.matrix);let t=E4(e.rotation),r=t.x,n=t.y,o=t.z,a=t.w,i=r+r,s=n+n,c=o+o,d=r*i,u=r*s,l=r*c,m=n*s,p=n*c,h=o*c,g=a*i,f=a*s,y=a*c,A=e.scale.x,T=e.scale.y,D=e.scale.z;return[(1-(m+h))*A,(u+y)*A,(l-f)*A,0,(u-y)*T,(1-(d+h))*T,(p+g)*T,0,(l+f)*D,(p-g)*D,(1-(d+m))*D,0,e.position.x,e.position.y,e.position.z,1]}function Bv(e,t){return[e[0]*t[0]+e[1]*t[4]+e[2]*t[8]+e[3]*t[12],e[0]*t[1]+e[1]*t[5]+e[2]*t[9]+e[3]*t[13],e[0]*t[2]+e[1]*t[6]+e[2]*t[10]+e[3]*t[14],e[0]*t[3]+e[1]*t[7]+e[2]*t[11]+e[3]*t[15],e[4]*t[0]+e[5]*t[4]+e[6]*t[8]+e[7]*t[12],e[4]*t[1]+e[5]*t[5]+e[6]*t[9]+e[7]*t[13],e[4]*t[2]+e[5]*t[6]+e[6]*t[10]+e[7]*t[14],e[4]*t[3]+e[5]*t[7]+e[6]*t[11]+e[7]*t[15],e[8]*t[0]+e[9]*t[4]+e[10]*t[8]+e[11]*t[12],e[8]*t[1]+e[9]*t[5]+e[10]*t[9]+e[11]*t[13],e[8]*t[2]+e[9]*t[6]+e[10]*t[10]+e[11]*t[14],e[8]*t[3]+e[9]*t[7]+e[10]*t[11]+e[11]*t[15],e[12]*t[0]+e[13]*t[4]+e[14]*t[8]+e[15]*t[12],e[12]*t[1]+e[13]*t[5]+e[14]*t[9]+e[15]*t[13],e[12]*t[2]+e[13]*t[6]+e[14]*t[10]+e[15]*t[14],e[12]*t[3]+e[13]*t[7]+e[14]*t[11]+e[15]*t[15]]}function zv(e){let t=e[0],r=e[1],n=e[2],o=e[3],a=e[4],i=e[5],s=e[6],c=e[7],d=e[8],u=e[9],l=e[10],m=e[11],p=e[12],h=e[13],g=e[14],f=e[15],y=t*i-r*a,A=t*s-n*a,T=t*c-o*a,D=r*s-n*i,P=r*c-o*i,C=n*c-o*s,E=d*h-u*p,S=d*g-l*p,w=d*f-m*p,M=u*g-l*h,_=u*f-m*h,B=l*f-m*g,re=y*B-A*_+T*M+D*w-P*S+C*E;if(!Number.isFinite(re)||Math.abs(re)<1e-6)return null;let U=1/re;return[(i*B-s*_+c*M)*U,(n*_-r*B-o*M)*U,(h*C-g*P+f*D)*U,(l*P-u*C-m*D)*U,(s*w-a*B-c*S)*U,(t*B-n*w+o*S)*U,(g*T-p*C-f*A)*U,(d*C-l*T+m*A)*U,(a*_-i*w+c*E)*U,(r*w-t*_-o*E)*U,(p*P-h*T+f*y)*U,(u*T-d*P-m*y)*U,(i*S-a*M-s*E)*U,(t*M-r*S+n*E)*U,(h*A-p*D-g*y)*U,(d*D-u*A+l*y)*U]}function BI(e){let t={x:e[12],y:e[13],z:e[14]},r={x:LI(e[0],e[1],e[2]),y:LI(e[4],e[5],e[6]),z:LI(e[8],e[9],e[10])};if(x4(e)<=0&&(r.y*=-1),!$I(t)||!$I(r)||Math.abs(r.x)<1e-6||Math.abs(r.y)<1e-6||Math.abs(r.z)<1e-6)return null;let n=1/r.x,o=1/r.y,a=1/r.z,i=[e[0]*n,e[1]*n,e[2]*n,0,e[4]*o,e[5]*o,e[6]*o,0,e[8]*a,e[9]*a,e[10]*a,0,0,0,0,1];if(!M4(i))return null;let s=P4(A4(i));if(!s)return null;let c=T4(s);if(!$I(c))return null;let d={position:t,rotation:c,scale:r};return Uf(wa(d),e,1e-5)?d:null}function Vv(e,t={}){let r=BI(e);return r||(t.allowMatrixFallback?zf(e):null)}function Uv(e){let t=S4();for(let r of e)t=Bv(wa(r),t);return Vv(t,{allowMatrixFallback:!0})}function Vf(e,t,r={}){let n=zv(wa(e));return n?Vv(Bv(wa(t),n),r):null}function Uf(e,t,r=1e-6){return e.length===t.length&&e.every((n,o)=>Math.abs(n-t[o])<=r)}function zI(e){return[e[0],e[1],e[2],e[3],e[4],e[5],e[6],e[7],e[8],e[9],e[10],e[11],e[12],e[13],e[14],e[15]]}function Hv(e){return e.length!==16||!e.every(Number.isFinite)?null:zI(e)}function Bf(e){return{x:e.x,y:e.y,z:e.z}}function E4(e){let t=e.z*.5,r=e.x*.5,n=e.y*.5,o=Math.sin(t),a=Math.cos(t),i=Math.sin(r),s=Math.cos(r),c=Math.sin(n),d=Math.cos(n);return{x:d*i*a+c*s*o,y:c*s*a-d*i*o,z:d*s*o-c*i*a,w:d*s*a+c*i*o}}function T4(e){let t=e.z,r=e.x,n=e.y,o=e.w,a=n*t-r*o,i=.4999999;if(a<-i)return{x:Math.PI/2,y:2*Math.atan2(n,o),z:0};if(a>i)return{x:-Math.PI/2,y:2*Math.atan2(n,o),z:0};let s=o*o,c=t*t,d=r*r,u=n*n;return{z:Math.atan2(2*(r*n+t*o),-c-d+u+s),x:Math.asin(-2*a),y:Math.atan2(2*(t*r+n*o),c-d-u+s)}}function A4(e){let t=e[0],r=e[4],n=e[8],o=e[1],a=e[5],i=e[9],s=e[2],c=e[6],d=e[10],u=t+a+d;if(u>0){let m=.5/Math.sqrt(u+1);return{w:.25/m,x:(c-i)*m,y:(n-s)*m,z:(o-r)*m}}if(t>a&&t>d){let m=2*Math.sqrt(1+t-a-d);return{w:(c-i)/m,x:.25*m,y:(r+o)/m,z:(n+s)/m}}if(a>d){let m=2*Math.sqrt(1+a-t-d);return{w:(n-s)/m,x:(r+o)/m,y:.25*m,z:(i+c)/m}}let l=2*Math.sqrt(1+d-t-a);return{w:(o-r)/l,x:(n+s)/l,y:(i+c)/l,z:.25*l}}function P4(e){let t=Math.sqrt(e.x*e.x+e.y*e.y+e.z*e.z+e.w*e.w);return!Number.isFinite(t)||t<1e-6?null:{x:e.x/t,y:e.y/t,z:e.z/t,w:e.w/t}}function x4(e){let t=e[0],r=e[1],n=e[2],o=e[3],a=e[4],i=e[5],s=e[6],c=e[7],d=e[8],u=e[9],l=e[10],m=e[11],p=e[12],h=e[13],g=e[14],f=e[15],y=l*f-g*m,A=u*f-h*m,T=u*g-h*l,D=d*f-p*m,P=d*g-l*p,C=d*h-p*u,E=+(i*y-s*A+c*T),S=-(a*y-s*D+c*P),w=+(a*A-i*D+c*C),M=-(a*T-i*P+s*C);return t*E+r*S+n*w+o*M}function LI(e,t,r){return Math.sqrt(e*e+t*t+r*r)}function M4(e){let t={x:e[0],y:e[1],z:e[2]},r={x:e[4],y:e[5],z:e[6]},n={x:e[8],y:e[9],z:e[10]};return Math.abs(FI(t,r))<1e-6&&Math.abs(FI(t,n))<1e-6&&Math.abs(FI(r,n))<1e-6}function FI(e,t){return e.x*t.x+e.y*t.y+e.z*t.z}function $I(e){return Number.isFinite(e.x)&&Number.isFinite(e.y)&&Number.isFinite(e.z)}var D4={supportsShear:!0,supportsMatrixTransform:!0};function Hf(e={}){let t={...D4,...e.storageCapabilities};return{allowMatrixFallback:(e.allowMatrixFallback??!0)&&t.supportsMatrixTransform&&t.supportsShear,storageCapabilities:t}}var Kv=Symbol("fps.editor.command-composed-authority-registration");function Wv(e){return Object.defineProperty(e,Kv,{value:!0,enumerable:!1,configurable:!1,writable:!1}),e}function qv(e){return e[Kv]===!0}var O4=200,R4=128*1024,XI=20;function t_(e={}){let t=new Map,r=new Map,n=new Map,o=e.now??Date.now,a=e.createOperationId??V4(),i=Zv(e.maxRetainedOperations,O4),s=Zv(e.maxResultBytes,R4),c=0,d=!1,u,l="",m=P=>{try{let C=o();return typeof C=="number"&&Number.isFinite(C)?C:P}catch{return P}},p={get catalogRevision(){return c},get executionAuthorityInstalled(){return u!==void 0},registerCommand(P){h();let C=C4(P),E=C.manifest.id;if(t.has(E))throw new Error(`Editor command is already registered: ${E}`);t.set(E,C),c+=1;let S=!0;return()=>{if(S&&(S=!1,t.get(E)===C)){t.delete(E);for(let[w,M]of n)M.registration===C&&n.delete(w);c+=1}}},installExecutionInterceptor(P,C={}){if(h(),typeof P!="function")throw new Error("Editor command execution interceptor is required.");if(u)throw new Error("Editor command execution authority is already installed.");u=P,l=C.scopeId?.trim()??"";let E=!0;return()=>{E&&(E=!1,u===P&&(u=void 0,l=""))}},listManifests(){return h(),[...t.values()].map(P=>Fl(P.manifest))},async getCatalog(P={}){h();let C=G4(P),E=[...t.values()].filter(w=>!C.target||w.manifest.target===C.target).filter(w=>!C.access||w.manifest.access===C.access).map(w=>({registration:w,score:L4(w.manifest,C.text)})).filter(w=>w.score>=0).sort((w,M)=>M.score-w.score||w.registration.manifest.id.localeCompare(M.registration.manifest.id)).slice(0,C.limit),S=await Promise.all(E.map(async({registration:w})=>({manifest:Fl(w.manifest),availability:await UI(w)})));return{catalogRevision:c,commands:S}},async describeCommand(P){h();let C=Bl(P),E=t.get(C);return E?{manifest:Fl(E.manifest),availability:await UI(E)}:null},invoke(P){h();let C=Bl(P?.commandId),E=t.get(C),S=Yv(P,E?.validateInput===!1),w=kc({intentCommandId:S.intentCommandId??null,input:S.input===void 0?{presence:"omitted"}:{presence:"provided",value:S.input},expectedRevision:S.expectedRevision??null}),M=S.idempotencyKey?F4(S,l):void 0;if(M){let B=n.get(M);if(B){if(B.fingerprint===w)return HI(B,!0);let re=g(S,E,w);return r.set(re.snapshot.operationId,re),re.completion=T(re,Promise.resolve(A(re,[{severity:"error",source:"command-system",code:"command.idempotencyConflict",message:`Idempotency key was reused with different input: ${S.idempotencyKey}`}]))),D(),HI(re,!1)}}let _=g(S,E,w,M);return r.set(_.snapshot.operationId,_),M&&n.set(M,_),_.completion=T(_,f(_)),HI(_,!1)},execute(P){return p.invoke(P).completion},getOperation(P){let C=r.get(P);return C?Kf(C.snapshot):null},getOperationByRequestId(P){let C=YI(P,"requestId"),E=null;for(let S of r.values())S.snapshot.requestId===C&&(E=S);return E?Kf(E.snapshot):null},cancelOperation(P){let C=r.get(P);return!C||C.snapshot.status!=="accepted"?!1:(C.controller.abort(),!0)},dispose(){if(!d){d=!0,t.clear(),u=void 0,c+=1;for(let P of r.values())P.snapshot.status==="accepted"&&P.controller.abort();n.clear()}}};return p;function h(){if(d)throw new Error("Editor Command System is disposed.")}function g(P,C,E,S){let M={operationId:YI(a(),"operationId"),requestId:P.requestId,commandId:P.commandId,...P.intentCommandId?{intentCommandId:P.intentCommandId}:{},status:"accepted",source:P.source,principal:{...P.principal},origin:Pa(P),createdAt:m(0),...P.traceId?{traceId:P.traceId}:{},...P.traceStepId?{traceStepId:P.traceStepId}:{},...P.transactionId?{transactionId:P.transactionId}:{}};return{controller:new AbortController,fingerprint:E,...S?{idempotencyScope:S}:{},...C?{registration:C}:{},invocation:P,snapshot:M,completion:Promise.resolve(void 0)}}async function f(P){if(P.controller.signal.aborted)return y(P);let C=P.registration;if(!C)return A(P,[{severity:"error",source:"command-system",code:"command.notFound",message:`Editor command is not registered: ${P.invocation.commandId}`}]);if(C.manifest.target==="authoring"&&C.manifest.access==="write"&&!u)return A(P,[{severity:"error",source:"command-system",code:"command.authorityUnavailable",message:"Editor authoring authority is unavailable."}]);try{let E={...P.invocation,operationId:P.snapshot.operationId,manifest:Fl(C.manifest),signal:P.controller.signal,...C.authorityTransaction?{authorityTransaction:C.authorityTransaction}:{}},S=async M=>{let _=await UI(C,P.controller.signal);if(P.controller.signal.aborted)return VI(P.invocation.commandId);if(!_.available)return{ok:!1,diagnostics:_.reasons};let B=P.invocation.input!==void 0?P.invocation.input:C.manifest.presentation?.inputMode==="none"?{}:null;if(C.validateInput!==!1){let ze=WI(B,C.manifest.inputSchema,"$","command.inputInvalid");if(ze.length)return{ok:!1,diagnostics:ze}}if(P.controller.signal.aborted)return VI(P.invocation.commandId);P.snapshot={...P.snapshot,status:"running",startedAt:m(P.snapshot.createdAt)};let re=M===void 0?E:{...E,authorityContext:M},U=Promise.resolve(C.handler(B,re)),Be=C.authorityTransaction==="composed"?await U:await r_(U,P.controller.signal);if(Be===Wf)return VI(P.invocation.commandId);if(!Be.ok)return{ok:!1,diagnostics:$l(Be.diagnostics)};if(C.validateOutput!==!1){let ze=WI(Be.output,C.manifest.outputSchema,"$","command.outputInvalid");if(ze.length)return{ok:!1,diagnostics:ze}}let Oe=Be.diagnostics?.length?$l(Be.diagnostics):void 0;return{ok:!0,output:$4(Be.output,s),...Oe?{diagnostics:Oe}:{}}},w=u?await u(E,S):await S();if(!w.ok){let M=$l(w.diagnostics);return M.some(_=>_.code==="command.cancelled")?A(P,M,"cancelled"):A(P,M)}return P.snapshot={...P.snapshot,status:"completed",completedAt:m(P.snapshot.startedAt??P.snapshot.createdAt),output:w.output,...w.diagnostics?.length?{diagnostics:[...w.diagnostics]}:{}},D(),Kf(P.snapshot)}catch(E){return P.controller.signal.aborted?y(P):A(P,[{severity:"error",source:"command-system",code:E instanceof qf?"command.resultTooLarge":"command.exception",message:E instanceof Error?E.message:String(E)}])}}function y(P){return A(P,[{severity:"warning",source:"command-system",code:"command.cancelled",message:`Editor command was cancelled: ${P.invocation.commandId}`}],"cancelled")}function A(P,C,E="failed"){return P.snapshot={...P.snapshot,status:E,completedAt:m(P.snapshot.startedAt??P.snapshot.createdAt),diagnostics:$l(C)},D(),Kf(P.snapshot)}async function T(P,C){let E=await C;try{e.onOperationSettled?.({invocation:Yv(P.invocation,P.registration?.validateInput===!1),...P.registration?{manifest:Fl(P.registration.manifest)}:{},operation:structuredClone(E)})}catch{}return E}function D(){if(!(r.size<=i)){for(let[P,C]of r)if(z4(C.snapshot.status)&&(r.delete(P),r.size<=i))break}}}function C4(e){if(!e||typeof e!="object")throw new Error("Editor command registration must be an object.");if(typeof e.handler!="function")throw new Error("Editor command handler is required.");if(e.available!==void 0&&typeof e.available!="function")throw new Error("Editor command availability must be a function.");if(e.authorityTransaction!==void 0&&e.authorityTransaction!=="isolated"&&e.authorityTransaction!=="composed")throw new Error("Editor command authority transaction mode is invalid.");if(e.authorityTransaction==="composed"&&!qv(e))throw new Error("Composed Editor command authority is reserved for the owning Authoring Host.");return{manifest:QI(e.manifest),...e.available?{available:e.available}:{},handler:e.handler,...e.validateInput===!1?{validateInput:!1}:{},...e.validateOutput===!1?{validateOutput:!1}:{},...e.authorityTransaction?{authorityTransaction:e.authorityTransaction}:{}}}function QI(e){if(!e||typeof e!="object")throw new Error("Editor command manifest is required.");if(e.schemaVersion!==1)throw new Error(`Unsupported Editor command schema version: ${String(e.schemaVersion)}`);let t=Bl(e.id);if(!Number.isInteger(e.version)||e.version<=0)throw new Error(`Editor command version must be a positive integer: ${t}`);let r=Zi(e.title,`Editor command title is required: ${t}`);if(!new Set(["workspace-service","tooling","authoring","view","renderer"]).has(e.target))throw new Error(`Editor command target is invalid: ${t}`);if(e.access!=="read"&&e.access!=="write")throw new Error(`Editor command access is invalid: ${t}`);if(!new Set(["experimental","stable","deprecated"]).has(e.stability))throw new Error(`Editor command stability is invalid: ${t}`);if(!e.effects||typeof e.effects!="object")throw new Error(`Editor command effects are required: ${t}`);if(!new Set(["none","view","authoring","filesystem"]).has(e.effects.persistence))throw new Error(`Editor command persistence is invalid: ${t}`);if(typeof e.effects.undoable!="boolean"||typeof e.effects.idempotent!="boolean")throw new Error(`Editor command effects flags are invalid: ${t}`);if(e.transaction&&(e.transaction.compatible!==!0||e.transaction.sideEffects!=="authoring"||e.transaction.phase!=="mutation"||e.target!=="authoring"||e.access!=="write"||e.effects.persistence!=="authoring"))throw new Error(`Editor command transaction policy is invalid: ${t}`);let i=yt(e.description),s={schemaVersion:1,id:t,version:e.version,title:r,...i?{description:i}:{},target:e.target,access:e.access,stability:e.stability,inputSchema:Jv(e.inputSchema,`${t}.inputSchema`),outputSchema:Jv(e.outputSchema,`${t}.outputSchema`),...e.requires?{requires:w4(e.requires,t)}:{},effects:Object.freeze({...e.effects}),...e.transaction?{transaction:Object.freeze({...e.transaction})}:{},...e.presentation?{presentation:v4(e.presentation,t,e.inputSchema)}:{}};return Object.freeze(s)}function w4(e,t){for(let r of["editorReady","viewAttached","rendererAttached"])if(e[r]!==void 0&&typeof e[r]!="boolean")throw new Error(`Editor command requirement ${r} is invalid: ${t}`);return Object.freeze({...e.editorReady!==void 0?{editorReady:e.editorReady}:{},...e.viewAttached!==void 0?{viewAttached:e.viewAttached}:{},...e.rendererAttached!==void 0?{rendererAttached:e.rendererAttached}:{},...e.activeScope?{activeScope:Object.freeze(vc(e.activeScope,t))}:{},...e.permissions?{permissions:Object.freeze(vc(e.permissions,t))}:{}})}function v4(e,t,r){let n=yt(e.category),o=yt(e.shortcut),a=new Set(["none","inline-json","schema-form"]);if(e.inputMode!==void 0&&!a.has(e.inputMode))throw new Error(`Editor command presentation input mode is invalid: ${t}`);let i=e.menu?Object.freeze({path:Object.freeze(vc(e.menu.path,t)),...yt(e.menu.group)?{group:e.menu.group.trim()}:{},...e.menu.order!==void 0?{order:B4(e.menu.order,`${t}.menu.order`)}:{}}):void 0,s=e.selectionBinding?_4(e.selectionBinding,t,r):void 0;return Object.freeze({...n?{category:n}:{},...e.aliases?{aliases:Object.freeze(vc(e.aliases,t))}:{},...e.keywords?{keywords:Object.freeze(vc(e.keywords,t))}:{},...e.examples?{examples:Object.freeze(vc(e.examples,t))}:{},...o?{shortcut:o}:{},...i?{menu:i}:{},...e.inputMode?{inputMode:e.inputMode}:{},...s?{selectionBinding:s}:{}})}function _4(e,t,r){let n=yt(e.activeId),o=yt(e.selectedIds);if(!n&&!o)throw new Error(`Editor command selection binding is empty: ${t}`);let a=r.properties&&typeof r.properties=="object"?r.properties:{};if(n&&a[n]?.type!=="string")throw new Error(`Editor command active selection binding must target a string property: ${t}.${n}`);if(o&&(a[o]?.type!=="array"||a[o]?.items?.type!=="string"))throw new Error(`Editor command multi-selection binding must target a string array property: ${t}.${o}`);return Object.freeze({...n?{activeId:n}:{},...o?{selectedIds:o}:{}})}function Yv(e,t=!1){if(!e||typeof e!="object")throw new Error("Editor command invocation is required.");let r=Bl(e.commandId),n=e.intentCommandId===void 0?void 0:Bl(e.intentCommandId),o=YI(e.requestId,"requestId");if(!e.principal||typeof e.principal!="object")throw new Error("Editor command principal is required.");let a=Zi(e.principal.type,"Editor command principal type is required."),i=Zi(e.source,"Editor command source is required."),s=yt(e.principal.id),c=yt(e.idempotencyKey),d=yt(e.traceId),u=yt(e.traceStepId),l=yt(e.transactionId),m=yt(e.clientId),p=yt(e.sessionId),h=yt(e.surface);return Object.freeze({commandId:r,...n?{intentCommandId:n}:{},...e.input!==void 0?{input:t?qI(e.input,"$input"):_c(e.input,"$input")}:{},requestId:o,...c?{idempotencyKey:c}:{},principal:Object.freeze({type:a,...s?{id:s}:{}}),source:i,...p?{sessionId:p}:{},...h?{surface:h}:{},...e.expectedRevision?{expectedRevision:Object.freeze(k4(e.expectedRevision))}:{},...d?{traceId:d}:{},...u?{traceStepId:u}:{},...l?{transactionId:l}:{},...m?{clientId:m}:{}})}function k4(e){let t={};if(e.serviceInstanceId!==void 0){let r=Zi(e.serviceInstanceId,"expectedRevision.serviceInstanceId");t.serviceInstanceId=r}for(let r of["document","scope","catalog"]){let n=e[r];if(n!==void 0){if(!Number.isSafeInteger(n)||n<0)throw new Error(`Editor command expected revision is invalid: ${r}`);t[r]=n}}return t}var Wf=Symbol("editor-command-aborted");async function r_(e,t){return t.aborted?Wf:new Promise((r,n)=>{let o=()=>r(Wf);t.addEventListener("abort",o,{once:!0}),e.then(a=>{t.removeEventListener("abort",o),r(a)},a=>{t.removeEventListener("abort",o),n(a)})})}function VI(e){return{ok:!1,diagnostics:[{severity:"warning",source:"command-system",code:"command.cancelled",message:`Editor command was cancelled: ${e}`}]}}async function UI(e,t){if(!e.available)return{available:!0,reasons:[]};try{let r=Promise.resolve(e.available()),n=t?await r_(r,t):await r;return n===Wf?Xi("Editor command was cancelled.","command.cancelled"):n===!0?{available:!0,reasons:[]}:n===!1?Xi("Editor command is unavailable."):typeof n=="string"?Xi(n.trim()||"Editor command is unavailable."):!n||typeof n!="object"||typeof n.available!="boolean"?Xi("Editor command availability returned an invalid result.","command.availabilityInvalid"):{available:n.available,reasons:n.available||n.reasons?.length?$l(n.reasons??[]):Xi("Editor command is unavailable.").reasons}}catch(r){return Xi(r instanceof Error?r.message:String(r),"command.availabilityException")}}function Xi(e,t="command.unavailable"){return{available:!1,reasons:[{severity:"error",source:"command-system",code:t,message:e}]}}function WI(e,t,r,n){let o=[];return va(e,t,r,o),o.slice(0,XI).map(a=>({severity:"error",source:"command-system",code:n,message:a,path:a.split(":",1)[0]}))}function ZI(e,t,r="command.inputInvalid"){return WI(e,t,"$",r)}function Jv(e,t){let r=n_(e,t);return wc(r,t),r}function wc(e,t){if(typeof e=="boolean")return;if(!Xr(e))throw new Error(`Editor command JSON Schema is invalid at ${t}.`);let r=e,n=new Set(["null","object","array","string","number","integer","boolean"]);if("type"in r){let o=typeof r.type=="string"?[r.type]:r.type;if(!Array.isArray(o)||o.length===0||o.some(a=>typeof a!="string"||!n.has(a))||new Set(o).size!==o.length)throw new Error(`Editor command JSON Schema type is invalid at ${t}.type.`)}if("required"in r&&(!Array.isArray(r.required)||r.required.some(o=>typeof o!="string"||o.length===0)||new Set(r.required).size!==r.required.length))throw new Error(`Editor command JSON Schema required is invalid at ${t}.required.`);if("properties"in r){if(!Xr(r.properties))throw new Error(`Editor command JSON Schema properties is invalid at ${t}.properties.`);for(let[o,a]of Object.entries(r.properties))wc(a,`${t}.properties.${o}`)}if("additionalProperties"in r&&typeof r.additionalProperties!="boolean"&&!Xr(r.additionalProperties))throw new Error(`Editor command JSON Schema additionalProperties is invalid at ${t}.additionalProperties.`);Xr(r.additionalProperties)&&wc(r.additionalProperties,`${t}.additionalProperties`),"items"in r&&wc(r.items,`${t}.items`);for(let o of["allOf","anyOf","oneOf"]){if(!(o in r))continue;let a=r[o];if(!Array.isArray(a)||a.length===0)throw new Error(`Editor command JSON Schema ${o} is invalid at ${t}.${o}.`);a.forEach((i,s)=>wc(i,`${t}.${o}[${s}]`))}if("not"in r&&wc(r.not,`${t}.not`),"enum"in r&&(!Array.isArray(r.enum)||r.enum.length===0))throw new Error(`Editor command JSON Schema enum is invalid at ${t}.enum.`);for(let o of["minLength","maxLength","minItems","maxItems","minProperties","maxProperties"])if(o in r&&(!Number.isSafeInteger(r[o])||r[o]<0))throw new Error(`Editor command JSON Schema ${o} is invalid at ${t}.${o}.`);for(let o of["minimum","maximum","exclusiveMinimum","exclusiveMaximum"])if(o in r&&(typeof r[o]!="number"||!Number.isFinite(r[o])))throw new Error(`Editor command JSON Schema ${o} is invalid at ${t}.${o}.`);if("multipleOf"in r&&(typeof r.multipleOf!="number"||!Number.isFinite(r.multipleOf)||r.multipleOf<=0))throw new Error(`Editor command JSON Schema multipleOf is invalid at ${t}.multipleOf.`);if("uniqueItems"in r&&typeof r.uniqueItems!="boolean")throw new Error(`Editor command JSON Schema uniqueItems is invalid at ${t}.uniqueItems.`);if("pattern"in r){if(typeof r.pattern!="string")throw new Error(`Editor command JSON Schema pattern is invalid at ${t}.pattern.`);try{new RegExp(r.pattern)}catch{throw new Error(`Editor command JSON Schema pattern is invalid at ${t}.pattern.`)}}}function va(e,t,r,n){if(n.length>=XI||t===!0||t===void 0)return;if(t===!1){n.push(`${r}: value is not allowed`);return}if(!t||typeof t!="object"||Array.isArray(t)){n.push(`${r}: schema is invalid`);return}let o=t;if(Array.isArray(o.allOf))for(let i of o.allOf)va(e,i,r,n);if(Array.isArray(o.anyOf)&&(o.anyOf.some(s=>{let c=[];return va(e,s,r,c),c.length===0})||n.push(`${r}: value does not match any allowed schema`)),Array.isArray(o.oneOf)&&o.oneOf.filter(s=>{let c=[];return va(e,s,r,c),c.length===0}).length!==1&&n.push(`${r}: value must match exactly one allowed schema`),o.not!==void 0){let i=[];va(e,o.not,r,i),i.length===0&&n.push(`${r}: value matches a disallowed schema`)}if(Array.isArray(o.enum)&&!o.enum.some(i=>KI(i,e))){n.push(`${r}: value is not in the allowed enum`);return}if("const"in o&&!KI(o.const,e)){n.push(`${r}: value does not match the required constant`);return}let a=typeof o.type=="string"?[o.type]:Array.isArray(o.type)?o.type.filter(i=>typeof i=="string"):[];if(a.length&&!a.some(i=>j4(e,i))){n.push(`${r}: expected ${a.join(" or ")}`);return}if(typeof e=="string"&&(typeof o.minLength=="number"&&e.length<o.minLength&&n.push(`${r}: string is shorter than ${o.minLength}`),typeof o.maxLength=="number"&&e.length>o.maxLength&&n.push(`${r}: string is longer than ${o.maxLength}`),typeof o.pattern=="string"))try{new RegExp(o.pattern).test(e)||n.push(`${r}: string does not match pattern`)}catch{n.push(`${r}: schema pattern is invalid`)}if(typeof e=="number"&&(typeof o.minimum=="number"&&e<o.minimum&&n.push(`${r}: number is below minimum`),typeof o.maximum=="number"&&e>o.maximum&&n.push(`${r}: number is above maximum`),typeof o.exclusiveMinimum=="number"&&e<=o.exclusiveMinimum&&n.push(`${r}: number is not above exclusive minimum`),typeof o.exclusiveMaximum=="number"&&e>=o.exclusiveMaximum&&n.push(`${r}: number is not below exclusive maximum`),typeof o.multipleOf=="number"&&!N4(e,o.multipleOf)&&n.push(`${r}: number is not a multiple of ${o.multipleOf}`)),Array.isArray(e)&&(typeof o.minItems=="number"&&e.length<o.minItems&&n.push(`${r}: array has too few items`),typeof o.maxItems=="number"&&e.length>o.maxItems&&n.push(`${r}: array has too many items`),o.uniqueItems===!0&&e.some((i,s)=>e.slice(0,s).some(c=>KI(c,i)))&&n.push(`${r}: array items are not unique`),o.items!==void 0&&e.forEach((i,s)=>va(i,o.items,`${r}[${s}]`,n))),Xr(e)){let i=Xr(o.properties)?o.properties:{},s=Array.isArray(o.required)?o.required.filter(c=>typeof c=="string"):[];typeof o.minProperties=="number"&&Object.keys(e).length<o.minProperties&&n.push(`${r}: object has too few properties`),typeof o.maxProperties=="number"&&Object.keys(e).length>o.maxProperties&&n.push(`${r}: object has too many properties`);for(let c of s)Xv(e,c)||n.push(`${r}.${c}: required property is missing`);for(let[c,d]of Object.entries(e))Xv(i,c)?va(d,i[c],`${r}.${c}`,n):o.additionalProperties===!1?n.push(`${r}.${c}: additional property is not allowed`):Xr(o.additionalProperties)&&va(d,o.additionalProperties,`${r}.${c}`,n)}}function j4(e,t){switch(t){case"null":return e===null;case"object":return Xr(e);case"array":return Array.isArray(e);case"string":return typeof e=="string";case"number":return typeof e=="number"&&Number.isFinite(e);case"integer":return typeof e=="number"&&Number.isSafeInteger(e);case"boolean":return typeof e=="boolean";default:return!1}}function Xv(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function N4(e,t){let r=Qv(e),n=Qv(t),o=r.coefficient*10n**BigInt(n.scale),a=n.coefficient*10n**BigInt(r.scale);return a!==0n&&o%a===0n}function Qv(e){let t=e.toString().toLowerCase(),[r,n]=t.split("e"),o=n===void 0?0:Number(n),a=r.startsWith("-"),i=a?r.slice(1):r,[s,c=""]=i.split("."),d=`${s}${c}`.replace(/^0+(?=\d)/,"")||"0",u=BigInt(d);a&&(u=-u);let l=c.length-o;return l>=0?{coefficient:u,scale:l}:{coefficient:u*10n**BigInt(-l),scale:0}}function $l(e){return Array.isArray(e)?e.slice(0,XI).map((t,r)=>!t||typeof t!="object"?{severity:"error",source:"command-system",code:"command.diagnosticInvalid",message:`Command diagnostic is invalid at index ${r}.`}:{severity:t.severity==="info"||t.severity==="warning"?t.severity:"error",source:yt(t.source)??"command",code:yt(t.code)??"command.failed",message:yt(t.message)??"Editor command failed.",...yt(t.path)?{path:t.path.trim()}:{},...yt(t.objectId)?{objectId:t.objectId.trim()}:{},...t.details?{details:n_(t.details,"$diagnostic.details")}:{}}):Xi("Command diagnostics are invalid.").reasons}function G4(e){let t=yt(e.text)?.toLocaleLowerCase(),r=e.limit===void 0?200:e.limit;if(!Number.isInteger(r)||r<1||r>1e3)throw new Error("Editor command catalog limit must be an integer between 1 and 1000.");return{...e,...t?{text:t}:{},limit:r}}function L4(e,t){if(!t)return 0;let r=e.id.toLocaleLowerCase(),n=e.title.toLocaleLowerCase(),o=e.presentation?.aliases?.map(i=>i.toLocaleLowerCase())??[],a=e.presentation?.keywords?.map(i=>i.toLocaleLowerCase())??[];return r===t?100:o.includes(t)?90:r.startsWith(t)?80:n.startsWith(t)?70:r.includes(t)?60:n.includes(t)?50:o.some(i=>i.includes(t))?40:a.some(i=>i.includes(t))?30:e.description?.toLocaleLowerCase().includes(t)?10:-1}function HI(e,t){return{operationId:e.snapshot.operationId,requestId:e.snapshot.requestId,reused:t,completion:e.completion}}function F4(e,t){return kc([t,e.principal.type,e.principal.id??"",e.source,e.sessionId??e.clientId??"",e.commandId,e.idempotencyKey??""])}function Fl(e){return _c(e,"$manifest")}function Kf(e){return _c(e,"$operation")}function $4(e,t){if(e===void 0)throw new Error("Editor command result is not JSON-serializable: undefined.");let r;try{r=JSON.stringify(e)}catch(o){throw new Error(`Editor command result is not serializable: ${o instanceof Error?o.message:String(o)}`)}if(r===void 0)throw new Error("Editor command result is not serializable.");let n=new TextEncoder().encode(r).byteLength;if(n>t)throw new qf(`Editor command result exceeds the ${t} byte limit (${n} bytes). Request a narrower bounded projection; for paged commands, retry with a smaller limit.`);return JSON.parse(r)}var qf=class extends Error{};function n_(e,t){let r=_c(e,t);if(!Xr(r))throw new Error(`Editor command JSON object is required at ${t}.`);return Object.freeze(r)}function _c(e,t){if(e===null||typeof e=="string"||typeof e=="boolean"||typeof e=="number"&&Number.isFinite(e))return e;if(Array.isArray(e))return Object.freeze(e.map((n,o)=>_c(n,`${t}[${o}]`)));if(!Xr(e))throw new Error(`Editor command value must be JSON-compatible at ${t}.`);let r=Object.create(null);for(let[n,o]of Object.entries(e))o!==void 0&&(r[n]=_c(o,`${t}.${n}`));return Object.freeze(r)}function qI(e,t){if(e===null||typeof e=="string"||typeof e=="boolean"||typeof e=="number")return e;if(Array.isArray(e))return Object.freeze(e.map((n,o)=>qI(n,`${t}[${o}]`)));if(!Xr(e))throw new Error(`Unvalidated Editor command input must contain plain values at ${t}.`);let r=Object.create(null);for(let[n,o]of Object.entries(e))o!==void 0&&(r[n]=qI(o,`${t}.${n}`));return Object.freeze(r)}function Xr(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function KI(e,t){try{return kc(e)===kc(t)}catch{return!1}}function kc(e){if(e===null||typeof e=="string"||typeof e=="boolean")return JSON.stringify(e);if(typeof e=="number")return Number.isFinite(e)?JSON.stringify(e):Number.isNaN(e)?'"__non_json_finite_nan__"':e>0?'"__non_json_finite_infinity__"':'"__non_json_finite_negative_infinity__"';if(Array.isArray(e))return`[${e.map(kc).join(",")}]`;if(!Xr(e))throw new Error("Editor command idempotency input must be JSON-compatible.");return`{${Object.keys(e).sort().filter(t=>e[t]!==void 0).map(t=>`${JSON.stringify(t)}:${kc(e[t])}`).join(",")}}`}function vc(e,t){if(!Array.isArray(e))throw new Error(`Editor command string list is invalid: ${t}`);return[...new Set(e.map(r=>Zi(r,`Editor command string list contains an empty value: ${t}`)))]}function Bl(e){let t=Zi(e,"Editor command id is required.");if(t.length>160||/\s/.test(t))throw new Error(`Editor command id is invalid: ${t}`);return t}function YI(e,t){let r=Zi(e,`Editor command ${t} is required.`);if(r.length>256)throw new Error(`Editor command ${t} is too long.`);return r}function Zi(e,t){if(typeof e!="string"||!e.trim())throw new Error(t);return e.trim()}function yt(e){return typeof e=="string"&&e.trim()?e.trim():void 0}function B4(e,t){if(typeof e!="number"||!Number.isFinite(e))throw new Error(`Editor command number is invalid: ${t}`);return e}function Zv(e,t){return Number.isInteger(e)&&e>0?e:t}function z4(e){return e==="completed"||e==="failed"||e==="cancelled"}function V4(){let e=0;return()=>`editor-command-${Date.now().toString(36)}-${(++e).toString(36)}`}var o_=2048,U4=200,JI=1e3;function a_(e){let t=c5();return t?i5(e.signedPrefix,t):s5(e.opaquePrefix??`${e.signedPrefix}o`,e.opaqueCursorLimit??o_)}function i_(){let e=a_({signedPrefix:"h2"}),t={plan:null};return(r,n)=>H4(r,n,e,t)}async function H4(e,t,r,n){let o=Z4(t);if(o)return o;let a=t.cursor?await Q4(t.cursor,r):null;if(t.cursor&&!a)return Tr("hierarchy.scope.cursorStale","Hierarchy cursor is invalid or expired.");if(a&&(a.scopeKey!==e.scopeKey||a.revision!==e.revision))return Tr("hierarchy.scope.cursorStale","Hierarchy cursor no longer matches the active scope revision.");if(t.expectedRevision!==void 0&&t.expectedRevision!==e.revision)return Tr("hierarchy.scope.stale","Hierarchy scope revision changed before the query was read.");let i=W4(t.rootId),s=q4(t.text),c=Y4(t.maxDepth),d=J4(t.limit);if(a&&(t.rootId!==void 0&&i!==a.rootId||t.text!==void 0&&s!==a.text||t.maxDepth!==void 0&&c!==a.maxDepth||t.limit!==void 0&&d!==a.limit))return Tr("hierarchy.scope.cursorStale","Hierarchy cursor does not match the supplied query.");let u=a?.rootId??i,l=a?.text??s,m=a?.maxDepth??c,p=a?.limit??d,h=a?.offset??0,g=n.plan;if(!g||g.scopeKey!==e.scopeKey||g.revision!==e.revision||g.sourceNodes!==e.nodes||g.rootId!==u||g.maxDepth!==m||g.text!==l){let D=new Map(e.nodes.map(E=>[E.id,E]));if(u&&!D.has(u))return Tr("hierarchy.scope.rootNotFound",`Hierarchy query root was not found: ${u}`);let P=K4(e.nodes,D,u,m),C=l?P.filter(E=>E.id.toLocaleLowerCase().includes(l)||E.label.toLocaleLowerCase().includes(l)):P;g={scopeKey:e.scopeKey,revision:e.revision,sourceNodes:e.nodes,rootId:u,maxDepth:m,text:l,nodes:C},n.plan=g}let f=g.nodes;if(a&&h>=f.length)return Tr("hierarchy.scope.cursorStale","Hierarchy cursor offset no longer matches the query result.");let y=f.slice(h,h+p),A=h+y.length,T=A<f.length?await X4({v:1,scopeKey:e.scopeKey,revision:e.revision,rootId:u,maxDepth:m,text:l,limit:p,offset:A},r):void 0;return e5({...e,nodes:y,selectedIds:[...e.selectedIds],capabilities:{...e.capabilities},totalCount:f.length,returnedCount:y.length,...T?{nextCursor:T}:{}})}function K4(e,t,r,n){let o=new Map;for(let d of e){let u=d.parentId&&t.has(d.parentId)?d.parentId:null,l=o.get(u)??[];l.push(d),o.set(u,l)}let a=[],s=[...r?[t.get(r)]:o.get(null)??[]].reverse().map(d=>({node:d,depth:0})),c=new Set;for(;s.length>0;){let d=s.pop();if(c.has(d.node.id)||(c.add(d.node.id),a.push(d.node),n!==null&&d.depth>=n))continue;let u=o.get(d.node.id)??[];for(let l=u.length-1;l>=0;l-=1)s.push({node:u[l],depth:d.depth+1})}return a}function W4(e){return(e?.trim()??"")||null}function q4(e){return e?.trim().toLocaleLowerCase()??""}function Y4(e){return e===void 0?null:e}function J4(e){return e??U4}async function X4(e,t){let r=encodeURIComponent(JSON.stringify(e));return t.encode(r)}async function Q4(e,t){try{let r=await t.decode(e);if(!r)return null;let n=JSON.parse(decodeURIComponent(r));return n.v!==1||typeof n.scopeKey!="string"||!Number.isSafeInteger(n.revision)||!(n.rootId===null||typeof n.rootId=="string")||!(n.maxDepth===null||Number.isSafeInteger(n.maxDepth)&&n.maxDepth>=0)||typeof n.text!="string"||!Number.isSafeInteger(n.limit)||n.limit<1||n.limit>JI||!Number.isSafeInteger(n.offset)||n.offset<=0||n.offset%n.limit!==0?null:n}catch{return null}}function Z4(e){let t=e,r=new Set(["expectedRevision","rootId","maxDepth","text","cursor","limit"]);return Object.keys(t).some(n=>!r.has(n))?Tr("hierarchy.scope.invalidQuery","Hierarchy query contains unsupported fields."):t.expectedRevision!==void 0&&(!Number.isSafeInteger(t.expectedRevision)||t.expectedRevision<0)?Tr("hierarchy.scope.invalidQuery","expectedRevision must be a non-negative integer."):t.rootId!==void 0&&(typeof t.rootId!="string"||!t.rootId.trim())?Tr("hierarchy.scope.invalidQuery","rootId must be a non-empty string."):t.maxDepth!==void 0&&(!Number.isSafeInteger(t.maxDepth)||t.maxDepth<0)?Tr("hierarchy.scope.invalidQuery","maxDepth must be a non-negative integer."):t.text!==void 0&&typeof t.text!="string"?Tr("hierarchy.scope.invalidQuery","text must be a string."):t.cursor!==void 0&&(typeof t.cursor!="string"||!t.cursor)?Tr("hierarchy.scope.invalidQuery","cursor must be a non-empty string."):t.limit!==void 0&&(!Number.isSafeInteger(t.limit)||t.limit<1||t.limit>JI)?Tr("hierarchy.scope.invalidQuery",`limit must be an integer between 1 and ${JI}.`):null}function e5(e){return{ok:!0,output:e}}function Tr(e,t){return{ok:!1,code:e,message:t}}var t5=200,r5=1e3;function _a(e){let t=a_({signedPrefix:e.cursorPrefix}),r=e_(e.defaultLimit,t5),n=e_(e.maxLimit,r5);if(r>n)throw new Error("Bounded list defaultLimit cannot exceed maxLimit.");return async(o,a)=>{let i=n5(o,e.diagnosticPrefix,n);if(i)return i;let s=o.cursor?await a5(o.cursor,t,n):null;if(o.cursor&&!s)return Qi(`${e.diagnosticPrefix}.cursorStale`,"Cursor is invalid or expired.");let c=String(a.revision);if(s&&(s.scopeKey!==a.scopeKey||s.revision!==c))return Qi(`${e.diagnosticPrefix}.cursorStale`,"Cursor no longer matches the active scope revision.");let d=JSON.stringify(a.query);if(s&&a.queryProvided&&JSON.stringify(s.query)!==d)return Qi(`${e.diagnosticPrefix}.cursorStale`,"Cursor does not match the supplied query.");let u=o.limit??r;if(s&&o.limit!==void 0&&u!==s.limit)return Qi(`${e.diagnosticPrefix}.cursorStale`,"Cursor does not match the supplied page limit.");let l=s?.query??a.query,m=s?.limit??u,p=s?.offset??0,h=a.items.filter(A=>a.matches(A,l));if(s&&p>=h.length)return Qi(`${e.diagnosticPrefix}.cursorStale`,"Cursor offset no longer matches the query result.");let g=h.slice(p,p+m),f=p+g.length,y=f<h.length?await o5({v:1,scopeKey:a.scopeKey,revision:c,query:l,limit:m,offset:f},t):void 0;return{ok:!0,items:g,query:l,totalCount:h.length,returnedCount:g.length,...y?{nextCursor:y}:{}}}}function e_(e,t){return Number.isSafeInteger(e)&&e>0?e:t}function n5(e,t,r){return e.cursor!==void 0&&(typeof e.cursor!="string"||!e.cursor)?Qi(`${t}.invalidQuery`,"cursor must be a non-empty string."):e.limit!==void 0&&(!Number.isSafeInteger(e.limit)||e.limit<1||e.limit>r)?Qi(`${t}.invalidQuery`,`limit must be an integer between 1 and ${r}.`):null}async function o5(e,t){return t.encode(encodeURIComponent(JSON.stringify(e)))}async function a5(e,t,r){try{let n=await t.decode(e);if(!n)return null;let o=JSON.parse(decodeURIComponent(n));return o.v!==1||typeof o.scopeKey!="string"||typeof o.revision!="string"||!o.query||typeof o.query!="object"||Array.isArray(o.query)||!Number.isSafeInteger(o.limit)||o.limit<1||o.limit>r||!Number.isSafeInteger(o.offset)||o.offset<=0||o.offset%o.limit!==0?null:o}catch{return null}}function Qi(e,t){return{ok:!1,code:e,message:t}}function i5(e,t){let r=s_().getRandomValues(new Uint8Array(32)),n=t.importKey("raw",r,{name:"HMAC",hash:"SHA-256"},!1,["sign","verify"]);return Object.freeze({async encode(o){let a=new Uint8Array(await t.sign("HMAC",await n,new TextEncoder().encode(o)));return`${e}.${o}.${c_(a)}`},async decode(o){if(!o.startsWith(`${e}.`))return null;let a=o.lastIndexOf(".");if(a<=e.length+1)return null;let i=o.slice(e.length+1,a),s=d5(o.slice(a+1));return!s||!await t.verify("HMAC",await n,s,new TextEncoder().encode(i))?null:i}})}function s5(e,t){let r=new Map,n=Number.isSafeInteger(t)&&t>0?t:o_;return Object.freeze({async encode(o){let a;do a=`${e}.${c_(s_().getRandomValues(new Uint8Array(24)))}`;while(r.has(a));for(r.set(a,o);r.size>n;){let i=r.keys().next().value;if(!i)break;r.delete(i)}return a},async decode(o){return r.get(o)??null}})}function c5(){let e=globalThis.crypto?.subtle;return e&&typeof e.importKey=="function"&&typeof e.sign=="function"&&typeof e.verify=="function"&&typeof e.digest=="function"?e:null}function s_(){if(!globalThis.crypto||typeof globalThis.crypto.getRandomValues!="function")throw new Error("Runtime cursor generation requires crypto.getRandomValues().");return globalThis.crypto}function c_(e){return[...e].map(t=>t.toString(16).padStart(2,"0")).join("")}function d5(e){if(!/^[0-9a-f]{64}$/i.test(e))return null;let t=new Uint8Array(e.length/2);for(let r=0;r<t.length;r+=1)t[r]=Number.parseInt(e.slice(r*2,r*2+2),16);return t}function m_(e){return async(t,r,n)=>{let o=t.expectedDocumentRevision;if(o!==void 0&&o!==r.documentRevision)return m5("authoring.snapshot.revisionConflict",`Expected document revision ${o}, received ${r.documentRevision}.`,{expected:o,actual:r.documentRevision});let a=l_(r.workingDocument,"working document"),i=l_(r.persistedDocument,"saved document"),s=r.history.entries.slice(0,20).map(c=>({id:eE(c.id,128),label:eE(c.label,128),commandType:eE(c.commandType,128),createdAt:c.createdAt,...c.origin?{origin:structuredClone(c.origin)}:{}}));return{ok:!0,output:{serviceInstanceId:e,documentRevision:r.documentRevision,documentStructureRevision:r.documentStructureRevision,eventCursor:n,dirty:r.dirty,canUndo:r.canUndo,canRedo:r.canRedo,history:{entries:s,totalCount:r.history.entries.length,returnedCount:s.length},documents:{working:a.summary,saved:i.summary},projection:"summary"}}}}function l_(e,t){let r;try{r=JSON.stringify(e)}catch(n){throw new Error(`Editor Authoring ${t} is not JSON-serializable: ${n instanceof Error?n.message:String(n)}`)}if(r===void 0)throw new Error(`Editor Authoring ${t} is not JSON-serializable.`);return{summary:{jsonByteLength:new TextEncoder().encode(r).byteLength,jsonCharacterLength:r.length,rootType:l5(e),topLevelEntryCount:Array.isArray(e)?e.length:u5(e)?Object.keys(e).length:0}}}function l5(e){if(e===null)return"null";if(Array.isArray(e))return"array";let t=typeof e;return t==="string"||t==="number"||t==="boolean"?t:"object"}function eE(e,t){return e.length<=t?e:`${e.slice(0,t-3)}...`}function u5(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function m5(e,t,r){return{ok:!1,diagnostics:[{severity:"error",source:"authoring-snapshot",code:e,message:t,...r?{details:r}:{}}]}}var p5=Symbol("fps.editor.call-with-serialized-session-authority");var f5=200,y_=200,g5=20,h5=5e3,b5=256*1024,y5=12,S5=256,Yf=64,p_=2048,I5=64,E5=new Set(["getState","getWorkingDocument","getSource","getSelection","isDirty","canUndo","canRedo","dispatch","undo","redo","rebaseExternalDocuments"]),ka=new WeakMap,tE=new WeakMap;function S_(e){let t=Ko(e.serviceInstanceId,"serviceInstanceId"),r=e.commandSystem??t_(e.commandSystemOptions),n=e.commandSystem===void 0,o=Object.freeze({serviceInstanceId:t}),a=new Set,i=new Map,s=new Set,c=!1,d=I=>{if(!I||typeof I!="object")throw new Error("Editor Authoring Host session is required.");let R=ka.get(I);if(R&&R!==o)throw new Error("Editor Session already has a different write authority.")},u=I=>{d(I),SI(I,o);try{Wt(I,o,()=>{I.detachDocumentReferencesForWriteAuthority()})}catch(R){throw wl(I,o),R}ka.set(I,o),a.add(I),s.add(I)},l=I=>{if(d(I),a.has(I))return Object.freeze({establish(){},release(){}});let R=ka.get(I);if(SI(I,o),!R)try{Wt(I,o,()=>{I.detachDocumentReferencesForWriteAuthority()})}catch(k){throw wl(I,o),k}ka.set(I,o),s.add(I),i.set(I,(i.get(I)??0)+1);let G=!0,z=k=>{if(!G)return;G=!1;let L=(i.get(I)??1)-1;L>0?i.set(I,L):i.delete(I),k&&a.add(I),!a.has(I)&&!i.has(I)&&(ka.get(I)===o&&ka.delete(I),wl(I,o),s.delete(I))};return Object.freeze({establish:()=>z(!0),release:()=>z(!1)})},m=()=>{if(!c){c=!0;for(let I of s)ka.get(I)===o&&ka.delete(I),wl(I,o);a.clear(),i.clear(),s.clear()}};try{u(e.session)}catch(I){throw n&&r.dispose(),I}let p=z5(e.eventLimit,f5),h=e.now??Date.now,g=[],f=new Map,y=new Set,A=[],T=new Set,D=new Set,P=new Map,C=new Set,E=0,S=Number.isSafeInteger(e.initialDraftRevision)?Math.max(0,e.initialDraftRevision):e.session.getMetadata().documentRevision,w=Number.isSafeInteger(e.initialSavedRevision)?Math.max(0,e.initialSavedRevision):e.session.isDirty()?0:e.session.getMetadata().documentRevision,M=!1,_=new AbortController,B=Promise.resolve(),re=0,U=0,Be=new Set,Oe=!1,ze,Cr=new Promise(I=>{ze=I}),Dt=new Map,nt=new WeakMap,wr=new WeakMap,He=new Map,jn=new WeakSet,Q=e.session,vr=(I,R,G,z,k,L,V,H=!1)=>Object.freeze({cursor:E+1,changeId:`${t}:${E+1}`,serviceInstanceId:t,reason:I,documentRevision:R.documentRevision,workingRevision:R.documentRevision,draftRevision:S,savedRevision:w,dirty:R.dirty,canUndo:R.canUndo,canRedo:R.canRedo,history:{entries:R.history.entries.slice(0,g5).map(ce=>({...ce,...ce.origin?{origin:dr(ce.origin)}:{}}))},timestamp:G,...L?{requestId:L.requestId,operationId:L.operationId,commandId:L.commandId,...L.intentCommandId?{intentCommandId:L.intentCommandId}:{}}:{},...k?{origin:dr(k)}:{},...z?{projectionImpact:P_(z)}:{},...V?{patch:ja(V)}:{},...H?{saveOnly:!0}:{}}),_r=I=>{for(E=I.cursor,g.push(I),I.operationId&&f.set(I.operationId,I);g.length>p;){let R=g.shift();R?.operationId&&f.get(R.operationId)?.changeId===R.changeId&&f.delete(R.operationId)}for(let R of[...y])As(R,$t.readEvents(R.afterCursor,R.expectedServiceInstanceId))},As=(I,R)=>{y.delete(I)&&(I.timeout&&clearTimeout(I.timeout),I.timeout=void 0,I.resolve(R))},Ps=I=>{for(let R of[...y])y.delete(R)&&(R.timeout&&clearTimeout(R.timeout),R.timeout=void 0,R.reject(I))},Za=I=>{ge();let R=I.expectedRevisionPolicy??"current-document";if(R!=="current-document"&&R!=="handler-validated")throw new Error("Editor Authoring Host command expected revision policy is invalid.");if(R==="handler-validated"&&(I.manifest.target!=="authoring"||I.manifest.access!=="write"))throw new Error("Handler-validated revisions are reserved for authoring write commands.");let G=I.manifest.target==="authoring"&&I.manifest.access==="write",z={...I,manifest:QI(I.manifest)},{expectedRevisionPolicy:k,...L}=z,V=r.registerCommand({...L,authorityTransaction:"isolated",handler:async(Se,se)=>{let je=G?void 0:Q.beginTransaction(),Ae=G?Dt.get(se.operationId)?.session:je?.session;if(!Ae)return{ok:!1,diagnostics:[qt("command.authorityUnavailable",`Authoring transaction is unavailable: ${se.commandId}`)]};try{return await z.handler(Se,{...se,session:Ae,dispatch(Ve,ve){Ve.authoringPatch&&rE(Ve.authoringPatch);let Me=Ae.dispatch({...Ve,origin:Pa(se)},ve);return Jf(Ae,Me.documentChanged,Me.transaction?.projectionImpact,nt),Xf(Ae,Me.documentChanged,Me.transaction?.authoringPatch,wr),Ae.getState({cloneDocuments:!1})},captureAuthoringPatch(Ve){rE(Ve),Xf(Ae,!0,Ve,wr)}})}finally{je?.discard()}}});D.add(I.manifest.id),z.manifest.transaction?.compatible&&P.set(z.manifest.id,z),R==="handler-validated"&&C.add(I.manifest.id);let H=!0,ce=()=>{H&&(H=!1,T.delete(ce),D.delete(I.manifest.id),P.get(z.manifest.id)===z&&P.delete(z.manifest.id),C.delete(I.manifest.id),V())};return T.add(ce),ce},fo;try{fo=r.installExecutionInterceptor(async(I,R)=>{if(!(I.authorityTransaction==="composed"&&I.manifest.access==="write"||I.manifest.target==="authoring"&&I.manifest.access==="write"))return R();let z=Q;return j(async()=>{if(_.signal.aborted||I.signal.aborted)return Vl(I.commandId);if(Q!==z&&I.authorityTransaction!=="composed")return{ok:!1,diagnostics:[qt("command.documentScopeChanged",`Authoring document scope changed before execution: ${I.commandId}`)]};if(I.authorityTransaction!=="composed"&&!D.has(I.commandId))return{ok:!1,diagnostics:[qt("command.authorityRegistrationRequired",`Authoring write command is not registered by this Host: ${I.commandId}`)]};let k=P5(I,Q,C.has(I.commandId));if(k)return{ok:!1,diagnostics:[k]};let L=Q.getMetadata().documentRevision;if(I.authorityTransaction==="composed"){let ce=h();U+=1,Be.add(I.operationId);let Se=Object.freeze({serviceInstanceId:t,[p5]:se=>{if(!jn.has(Se))throw new Error("Editor Authoring Host serialized access is invalid or expired.");return vl(Q,o,se)}});jn.add(Se);try{try{return await vl(Q,o,()=>R(Se))}catch(se){return{ok:!1,diagnostics:[qt("command.exception",se instanceof Error?se.message:String(se))]}}}finally{jn.delete(Se);let se=Q.getMetadata();Q===z&&se.documentRevision!==L&&_r(vr("document",se,ce,void 0,Pa(I),I,void 0,I.commandId==="document.save"||I.commandId==="document.commit")),U-=1,Be.delete(I.operationId),O()}}let V=Q.beginTransaction();Dt.set(I.operationId,V);let H=!1;try{let ce=await v(R,I.commandId);if(!ce.ok)return ce;if(I.signal.aborted)return Vl(I.commandId);let Se=I.commandId==="history.undo"||I.commandId==="history.redo"?"history":I.commandId==="document.save"||I.commandId==="document.commit"?"saved":"document",se=V.session.getMetadata(),je=f_(V.session,nt),Ae=R5(V.session,wr),Ve=se.documentRevision!==L?vr(Se,se,h(),je,Pa(I),I,Ae,Se==="saved"):null;return Wt(Q,o,()=>{V.commit(Se)}),H=!0,Ve&&_r(Ve),ce}finally{Dt.delete(I.operationId),nt.delete(V.session),wr.delete(V.session),H||V.discard()}})},{scopeId:t})}catch(I){throw m(),n&&r.dispose(),I}let $t={serviceInstanceId:t,commandSystem:T5(r),registerCommand:Za,invoke(I){return ge(),r.invoke(I)},execute(I){return ge(),r.execute(I)},getMetadata(){return ge(),Q.getMetadata()},getCheckpoint(){return ge(),G5(Q.getMetadata(),Q.getPersistedDocument(),t,E,{draftRevision:S,savedRevision:w})},getSnapshot(){return ge(),es(Q.getState(),t,E,{draftRevision:S,savedRevision:w})},markDraftCheckpoint(I){ge();let R=Q.getState({cloneDocuments:!1});if(!Number.isSafeInteger(I)||I<0||I>R.documentRevision)throw new Error(`Editor draft checkpoint revision is invalid: ${I}.`);return S=Math.max(S,I),es(R,t,E,{draftRevision:S,savedRevision:w})},getReceipt(I){ge();let R=f.get(I);return R?b_(R):null},runTransactionBatch(I){return ge(),j(async()=>{let R=Q.getMetadata();if(I.baseDocumentRevision!==R.documentRevision)return Ho(R,0,[],zl("transaction.documentRevisionMismatch",`Expected document revision ${I.baseDocumentRevision}, received ${R.documentRevision}.`,void 0,{expected:I.baseDocumentRevision,actual:R.documentRevision}));let G=Q.beginTransaction(),z=G.session.beginTransaction(),k=z.session,L=[],V=new Map,H=0,ce=0;try{for(let _t=0;_t<I.operations.length;_t+=1){if(I.signal?.aborted||_.signal.aborted)return Ho(R,H,L,zl("transaction.cancelled","Authoring transaction was cancelled.",I.operations[_t],{operationIndex:_t}));let Ne=I.operations[_t],ho=P.get(Ne.commandId);if(!ho)return Ho(R,H,L,zl("command.notTransactionCompatible",`Editor command is not transaction compatible: ${Ne.commandId}`,Ne,{operationIndex:_t}));let bo;try{bo=F5(Ne.input??{},V)}catch(ut){return Ho(R,H,L,zl("transaction.referenceInvalid",ut instanceof Error?ut.message:String(ut),Ne,{operationIndex:_t}))}let ra=ZI(bo,ho.manifest.inputSchema);if(ra.length)return Ho(R,H,L,ra.map(ut=>Qf(ut,Ne,_t)));let yo=await L5(ho);if(!yo.available)return Ho(R,H,L,yo.diagnostics.map(ut=>Qf(ut,Ne,_t)));let xs=k.getMetadata().documentRevision,So;try{So=await ho.handler(bo,{commandId:Ne.commandId,input:bo,requestId:`${I.transactionId}:${Ne.opId}`,idempotencyKey:`${I.transactionId}:${Ne.opId}`,principal:I.principal,source:I.source,expectedRevision:{serviceInstanceId:t,document:I.baseDocumentRevision},...I.traceId?{traceId:I.traceId}:{},traceStepId:Ne.opId,transactionId:I.transactionId,...I.sessionId?{sessionId:I.sessionId}:{},...I.surface?{surface:I.surface}:{},operationId:`${I.transactionId}:${Ne.opId}`,manifest:ho.manifest,signal:I.signal??_.signal,session:k,dispatch(ut,yh={}){let dA=ut.type==="document.patch"||ut.type==="document.replace",lA=k.dispatch({...N5(ut),origin:Pa({principal:I.principal,source:I.source,requestId:I.transactionId,...I.sessionId?{sessionId:I.sessionId}:{},...I.surface?{surface:I.surface}:{}})},{...yh,...dA&&yh.assumeDocumentChanged===void 0?{assumeDocumentChanged:!0}:{},...dA&&yh.assumeDirty===void 0?{assumeDirty:!0}:{},mergeWithPrevious:ce>0,clonePatchInput:!1,cloneResultDocument:!1});return Jf(k,lA.documentChanged,ut.projectionImpact,nt),lA.documentChanged&&(ce+=1),k.getState({cloneDocuments:!1})},captureAuthoringPatch(){}})}catch(ut){return Ho(R,H,L,zl("command.exception",ut instanceof Error?ut.message:String(ut),Ne,{operationIndex:_t}))}if(!So.ok)return Ho(R,H,L,So.diagnostics.map(ut=>Qf(ut,Ne,_t)));let cA=ZI(So.output,ho.manifest.outputSchema,"command.outputInvalid");if(cA.length)return Ho(R,H,L,cA.map(ut=>Qf(ut,Ne,_t)));let _u=$5(So.output),NG={index:_t,opId:Ne.opId,commandId:Ne.commandId,...Ne.as?{alias:Ne.as}:{},..._u===void 0?{}:{output:_u}};if(L.push(NG),Ne.as&&_u!==void 0&&V.set(Ne.as,_u),H+=1,k.getMetadata().documentRevision<xs)throw new Error("Authoring transaction operation moved the document revision backwards.");H&31||await B5()}let Se=k.getState({cloneDocuments:!1}),se=G.session.getState({cloneDocuments:!1}),je=Se.workingDocument!==se.workingDocument;if(I.mode==="preflight"||!je)return{ok:!0,processedOperations:H,results:L,documentChanged:je,metadata:R};let Ae=f_(k,nt)??{type:"rebuild",reason:"agent-transaction-unclassified"},Ve=Pa({principal:I.principal,source:I.source,requestId:I.transactionId,...I.sessionId?{sessionId:I.sessionId}:{},...I.surface?{surface:I.surface}:{}});G.session.dispatch({type:"document.replace",document:Se.workingDocument,label:I.label?.trim()||`Agent transaction (${H} operations)`,projectionImpact:Ae,origin:Ve},{assumeDocumentChanged:!0,cloneResultDocument:!1});let ve=Se.selection;(ve.activeId!==se.selection.activeId||ve.selectedIds.join("\0")!==se.selection.selectedIds.join("\0"))&&G.session.dispatch({type:"selection.replace",selectedIds:ve.selectedIds,activeId:ve.activeId});let Me=h(),mr=G.session.getMetadata(),go=vr("document",mr,Me,Ae,Ve);Wt(Q,o,()=>{G.commit("document")});let ei=Q.getMetadata();return _r(go),{ok:!0,processedOperations:H,results:L,documentChanged:!0,metadata:ei}}finally{nt.delete(k),z.discard(),G.discard()}})},readEvents(I=E,R=t){if(ge(),R!==t)return{kind:"snapshot-required",reason:"service.restarted",snapshot:$t.getSnapshot()};let G=Number.isSafeInteger(I)&&I>=0?I:0;if(G>E)return{kind:"snapshot-required",reason:"cursor.invalid",snapshot:$t.getSnapshot()};let z=g[0]?.cursor??E+1;return G<z-1?{kind:"snapshot-required",reason:"cursor.expired",snapshot:$t.getSnapshot()}:{kind:"events",serviceInstanceId:t,latestCursor:E,events:g.filter(k=>k.cursor>G).map(b_)}},waitForEvents(I=E,R=t,G=0){ge();let z=$t.readEvents(I,R);return z.kind==="snapshot-required"||z.events.length>0||G<=0?Promise.resolve(z):new Promise((k,L)=>{let V={afterCursor:I,expectedServiceInstanceId:R,resolve:k,reject:L,timeout:void 0};V.timeout=setTimeout(()=>{if(y.has(V))try{As(V,$t.readEvents(I,R))}catch(H){if(!y.delete(V))return;V.reject(H instanceof Error?H:new Error(String(H)))}},G),V.timeout.unref?.(),y.add(V)})},async markSaved(I,R){if(ge(),!R||typeof R!="object"||!Number.isSafeInteger(R.expectedDocumentRevision)||R.expectedDocumentRevision<0)throw new Error("Editor save checkpoint expectedDocumentRevision must be a non-negative safe integer.");let G=R.expectedDocumentRevision,z=R.serializedAccess,k=Q,L=k.beginTransaction(),V,H;try{L.session.reset(I,R.source),V=L.session.getWorkingDocument(),H=L.session.getSource()}finally{L.discard()}let ce=async()=>{if(ge(),Q!==k)throw new Error("Editor save checkpoint document scope changed before commit.");let Se=Q.getState({cloneDocuments:!1}).documentRevision;if(Se!==G)throw new Error(`Editor save checkpoint revision mismatch: expected ${G}, received ${Se}.`);let se=Q.beginTransaction(),je=!1;try{let Ae=h();se.session.markSaved(V,H);let Ve=se.session.getState({cloneDocuments:!1}),ve=Wt(Q,o,()=>se.commit("saved"));je=!0,w=Math.max(w,G);let Me=vr("saved",ve,Ae,void 0,void 0,void 0,void 0,!0);return _r(Me),es(ve,t,E,{draftRevision:S,savedRevision:w})}finally{je||se.discard()}};return z?(x(z),ce()):j(ce)},async markSavedWithRelatedSession(I,R){if(ge(),!R||typeof R!="object"||!Number.isSafeInteger(R.expectedDocumentRevision)||R.expectedDocumentRevision<0)throw new Error("Editor related save checkpoint expectedDocumentRevision must be a non-negative safe integer.");if(!R.relatedSession||typeof R.relatedSession!="object")throw new Error("Editor related save checkpoint Session is required.");if(!Number.isSafeInteger(R.expectedRelatedDocumentRevision)||R.expectedRelatedDocumentRevision<0)throw new Error("Editor related save checkpoint expectedRelatedDocumentRevision must be a non-negative safe integer.");if(typeof R.mutateRelatedSession!="function")throw new Error("Editor related save checkpoint mutation is required.");let G=R.expectedDocumentRevision,z=Q,k=R.relatedSession,L=R.expectedRelatedDocumentRevision,V=R.resetHistory===!0,H=R.mutateRelatedSession,ce=R.serializedAccess;if(z===k)throw new Error("Editor related save checkpoint requires a distinct Session.");let Se=z.beginTransaction(),se,je;try{Se.session.reset(I,R.source),se=Se.session.getWorkingDocument(),je=Se.session.getSource()}finally{Se.discard()}let Ae=l(k),Ve=async()=>{if(ge(),Q!==z)throw new Error("Editor related save checkpoint document scope changed before commit.");let ve=Q.getState({cloneDocuments:!1}).documentRevision;if(ve!==G)throw new Error(`Editor related save checkpoint revision mismatch: expected ${G}, received ${ve}.`);let Me=k.getState({cloneDocuments:!1}).documentRevision;if(Me!==L)throw new Error(`Editor related save checkpoint related revision mismatch: expected ${L}, received ${Me}.`);let mr=Q.beginTransaction(),go=k.beginTransaction(),ei=!1;try{let _t=h();mr.session.markSaved(se,je,{resetHistory:V});let Ne=H(go.session);if(Ne&&typeof Ne=="object"&&"then"in Ne&&typeof Ne.then=="function")throw new Error("Editor related save checkpoint mutation must be synchronous.");let ho=mr.session.getState({cloneDocuments:!1}),bo=mr.prepareCommit("saved"),ra=go.prepareCommit("saved");bo.assertReady(),ra.assertReady();let{activeCommit:yo,relatedCommit:xs}=Wt(Q,o,()=>Wt(k,o,()=>({activeCommit:bo.commit({deferChangeNotification:!0}),relatedCommit:ra.commit({deferChangeNotification:!0})})));ei=!0,w=Math.max(w,G);let So=vr("saved",yo.state,_t,void 0,void 0,void 0,void 0,!0);return Ae.establish(),yo.notifyChange(),xs.notifyChange(),_r(So),es(yo.state,t,E,{draftRevision:S,savedRevision:w})}finally{ei||(mr.discard(),go.discard())}};try{return ce?(x(ce),await Ve()):await j(Ve)}catch(ve){throw Ae.release(),ve}},async reset(I,R,G){if(ge(),!G||!Number.isSafeInteger(G.expectedDocumentRevision)||G.expectedDocumentRevision<0)throw new Error("Editor reset expectedDocumentRevision must be a non-negative safe integer.");let z=G.expectedDocumentRevision,k=G.serializedAccess,L=Q,V=L.beginTransaction(),H,ce;try{V.session.reset(I,R),H=V.session.getWorkingDocument(),ce=V.session.getSource()}finally{V.discard()}let Se=async()=>{if(ge(),Q!==L)throw new Error("Editor reset document scope changed before commit.");let se=Q.getState({cloneDocuments:!1}).documentRevision;if(se!==z)throw new Error(`Editor reset revision mismatch: expected ${z}, received ${se}.`);let je=Q.beginTransaction(),Ae=!1;try{let Ve=h();je.session.reset(H,ce);let ve=je.session.getState({cloneDocuments:!1}),Me=Wt(Q,o,()=>je.commit("reset"));Ae=!0,w=Me.documentRevision,S=Math.max(S,Me.documentRevision);let mr=vr("reset",Me,Ve);return _r(mr),es(Me,t,E,{draftRevision:S,savedRevision:w})}finally{Ae||je.discard()}};return k?(x(k),Se()):j(Se)},async resetWithRelatedSession(I,R,G){if(ge(),!G||!Number.isSafeInteger(G.expectedDocumentRevision)||G.expectedDocumentRevision<0)throw new Error("Editor related reset expectedDocumentRevision must be a non-negative safe integer.");if(!G.relatedSession||typeof G.relatedSession!="object")throw new Error("Editor related reset Session is required.");if(!Number.isSafeInteger(G.expectedRelatedDocumentRevision)||G.expectedRelatedDocumentRevision<0)throw new Error("Editor related reset expectedRelatedDocumentRevision must be a non-negative safe integer.");if(typeof G.mutateRelatedSession!="function")throw new Error("Editor related reset mutation is required.");let z=Q,k=G.relatedSession,L=G.expectedDocumentRevision,V=G.expectedRelatedDocumentRevision,H=G.mutateRelatedSession,ce=G.serializedAccess;if(z===k)throw new Error("Editor related reset requires a distinct Session.");let Se=z.beginTransaction(),se,je;try{Se.session.reset(I,R),se=Se.session.getWorkingDocument(),je=Se.session.getSource()}finally{Se.discard()}let Ae=l(k),Ve=async()=>{if(ge(),Q!==z)throw new Error("Editor related reset document scope changed before commit.");let ve=Q.getState({cloneDocuments:!1}).documentRevision;if(ve!==L)throw new Error(`Editor related reset revision mismatch: expected ${L}, received ${ve}.`);let Me=k.getState({cloneDocuments:!1}).documentRevision;if(Me!==V)throw new Error(`Editor related reset related revision mismatch: expected ${V}, received ${Me}.`);let mr=Q.beginTransaction(),go=k.beginTransaction(),ei=!1;try{let _t=h();mr.session.reset(se,je);let Ne=H(go.session);if(Ne&&typeof Ne=="object"&&"then"in Ne&&typeof Ne.then=="function")throw new Error("Editor related reset mutation must be synchronous.");let ho=mr.session.getState({cloneDocuments:!1}),bo=vr("reset",ho,_t),ra=mr.prepareCommit("reset"),yo=go.prepareCommit("reset");ra.assertReady(),yo.assertReady();let{activeCommit:xs,relatedCommit:So}=Wt(Q,o,()=>Wt(k,o,()=>({activeCommit:ra.commit({deferChangeNotification:!0}),relatedCommit:yo.commit({deferChangeNotification:!0})})));return ei=!0,Ae.establish(),xs.notifyChange(),So.notifyChange(),_r(bo),es(xs.state,t,E)}finally{ei||(mr.discard(),go.discard())}};try{return ce?(x(ce),await Ve()):await j(Ve)}catch(ve){throw Ae.release(),ve}},async switchSession(I,R){if(ge(),!I||typeof I!="object")throw new Error("Editor Authoring Host session is required.");if(!R||!Number.isSafeInteger(R.expectedDocumentRevision)||R.expectedDocumentRevision<0)throw new Error("Editor scope switch expectedDocumentRevision must be a non-negative safe integer.");let G=R.expectedDocumentRevision,z=R.serializedAccess,k=l(I),L=Q,V=async()=>{if(ge(),Q!==L)throw new Error("Editor scope changed before scope switch commit.");let H=Q.getState({cloneDocuments:!1}).documentRevision;if(H!==G)throw new Error(`Editor scope switch revision mismatch: expected ${G}, received ${H}.`);if(Q===I)return $t.getSnapshot();let ce=Q.getState({cloneDocuments:!1}),Se=I.getState(),se=h(),je=Math.max(ce.documentRevision,Se.documentRevision)+1,Ae=Math.max(ce.documentStructureRevision,Se.documentStructureRevision)+1,Ve={...Se,documentRevision:je,documentStructureRevision:Ae},ve=vr("rebase",Ve,se),Me=es(Ve,t,ve.cursor,{draftRevision:S,savedRevision:w});return Wt(I,o,()=>{I.advanceRevisionsForScopeSwitch(je,Ae)}),k.establish(),Q=I,_r(ve),Me};try{return z?(x(z),await V()):await j(V)}catch(H){throw k.release(),H}},runExternalCommandMutation(I,R){ge();let G=Ko(I?.commandId,"commandId");Ko(I?.requestId,"requestId");let z=Ko(I?.idempotencyKey,"idempotencyKey"),k=Ko(I?.fingerprint,"fingerprint"),L=JSON.stringify([G,z]);if(!Number.isSafeInteger(I?.expectedDocumentRevision)||I.expectedDocumentRevision<0)throw new Error("External command authoring mutation expectedDocumentRevision must be a non-negative safe integer.");let V=I.expectedDocumentRevision;if(typeof R!="function")throw new Error("External command authoring mutation handler is required.");let H=He.get(L);if(H){if(H.fingerprint!==k||H.expectedDocumentRevision!==V)throw new Error(`External command authoring idempotency conflict: ${z}`);return H.result}let ce=Q;U+=1;let Se=j(()=>{let se=null,je=null,Ae=!0,Ve=A5(ce,()=>{if(!Ae)throw new Error("Browser authoring Session access is expired.")},Me=>Wt(ce,o,Me)),ve=()=>{if(Ae=!1,se!==null&&je!==null&&Q===ce){let Me=Q.getState({cloneDocuments:!1});Me.documentRevision!==se&&_r(vr("document",Me,je))}U-=1,O()};try{if(ge(),Q!==ce)throw new Error(`Browser authoring document scope changed before execution: ${G}`);if(se=Q.getState({cloneDocuments:!1}).documentRevision,se!==V)throw new Error(`Browser authoring revision mismatch for ${G}: expected ${V}, received ${se}.`);je=h();let Me=vl(ce,o,()=>R(Ve));return Me&&typeof Me=="object"&&"then"in Me&&typeof Me.then=="function"?Promise.resolve(Me).finally(ve):(ve(),Me)}catch(Me){throw ve(),Me}},!0);return He.set(L,{fingerprint:k,expectedDocumentRevision:V,result:Se}),Se},tryRunExternalCommandMutationImmediately(I,R){ge();let G=Ko(I?.commandId,"commandId");Ko(I?.requestId,"requestId");let z=Ko(I?.idempotencyKey,"idempotencyKey"),k=Ko(I?.fingerprint,"fingerprint"),L=JSON.stringify([G,z]);if(!Number.isSafeInteger(I?.expectedDocumentRevision)||I.expectedDocumentRevision<0)throw new Error("External command authoring mutation expectedDocumentRevision must be a non-negative safe integer.");let V=I.expectedDocumentRevision;if(typeof R!="function")throw new Error("External command authoring mutation handler is required.");let H=He.get(L);if(H){if(H.fingerprint!==k||H.expectedDocumentRevision!==V)throw new Error(`External command authoring idempotency conflict: ${z}`);return H.hasImmediateValue?{ok:!0,value:H.immediateValue,reused:!0}:{ok:!1,reason:"busy"}}if(re>0)return{ok:!1,reason:"busy"};let ce=Q.getState({cloneDocuments:!1}).documentRevision;if(ce!==V)throw new Error(`Browser authoring revision mismatch for ${G}: expected ${V}, received ${ce}.`);let Se=h();U+=1;let se=Q.beginTransaction(),je=!1;try{let Ae=R(se.session);if(Ae&&typeof Ae=="object"&&"then"in Ae&&typeof Ae.then=="function")throw new Error("Immediate Browser authoring mutations must be synchronous.");let Ve=se.session.getState({cloneDocuments:!1}),ve=Ve.documentRevision!==ce?vr("document",Ve,Se):null;return Wt(Q,o,()=>{se.commit("document")}),je=!0,ve&&_r(ve),He.set(L,{fingerprint:k,expectedDocumentRevision:V,result:Promise.resolve(Ae),immediateValue:Ae,hasImmediateValue:!0}),{ok:!0,value:Ae,reused:!1}}finally{je||se.discard(),U-=1,O()}},runSerializedExternalMutation(I,R,G){if(ge(),x(I),!Number.isSafeInteger(R)||R<0)throw new Error("Serialized external command mutation expectedDocumentRevision must be a non-negative safe integer.");let z=Q.getState({cloneDocuments:!1}).documentRevision;if(z!==R)throw new Error(`Serialized external command mutation revision mismatch: expected ${R}, received ${z}.`);let k=Q.beginTransaction(),L=!1;try{let V=G(k.session);if(V&&typeof V=="object"&&"then"in V&&typeof V.then=="function")throw new Error("Serialized external command mutations must be synchronous.");return Wt(Q,o,()=>{k.commit("document")}),L=!0,V}finally{L||k.discard()}},dispose(){if(!M){M=!0,tE.delete($t),Ps(new Error("Editor Authoring Host is disposed.")),_.abort();for(let I of Be)r.cancelOperation(I);for(let I of A.splice(0).reverse())I();for(let I of[...T].reverse())I();P.clear(),f.clear(),O()}},drain(){return M?Cr:Promise.resolve()}};tE.set($t,I=>{ge();let R=r.registerCommand(Wv({...I,authorityTransaction:"composed"})),G=!0,z=()=>{G&&(G=!1,T.delete(z),R())};return T.add(z),z});try{A.push(Za(x5($t,()=>E))),A.push(Za(M5((I,R)=>{Jf(I,R.documentChanged,R.transaction.projectionImpact,nt),Xf(I,R.documentChanged,C5(R.transaction.authoringPatch),wr)}))),A.push(Za(D5((I,R)=>{Jf(I,R.documentChanged,R.transaction.projectionImpact,nt),Xf(I,R.documentChanged,R.transaction.authoringPatch,wr)})))}catch(I){tE.delete($t);for(let R of A.splice(0).reverse())R();for(let R of[...T].reverse())R();throw fo(),m(),e.disposeCommandSystem!==!1&&r.dispose(),I}return $t;function ge(){if(M)throw new Error("Editor Authoring Host is disposed.")}function x(I){if(!I||typeof I!="object"||!jn.has(I))throw new Error("Editor Authoring Host serialized access is invalid or expired.")}function j(I,R=!1){let G=R&&re===0;re+=1;let z=B,k;B=new Promise(H=>{k=H});let L=()=>{re-=1,k(),O()},V=()=>{try{let H=I();return H&&typeof H=="object"&&"then"in H&&typeof H.then=="function"?Promise.resolve(H).finally(L):(L(),Promise.resolve(H))}catch(H){return L(),Promise.reject(H)}};return G?V():z.then(V)}async function v(I,R){return _.signal.aborted?Vl(R):new Promise((G,z)=>{let k=()=>G(Vl(R));_.signal.addEventListener("abort",k,{once:!0}),I().then(L=>{_.signal.removeEventListener("abort",k),G(L)},L=>{_.signal.removeEventListener("abort",k),z(L)})})}function O(){!M||Oe||U>0||re>0||(Oe=!0,fo(),m(),e.disposeCommandSystem!==!1&&r.dispose(),ze())}}function T5(e){return Object.freeze({get catalogRevision(){return e.catalogRevision},get executionAuthorityInstalled(){return e.executionAuthorityInstalled},listManifests:()=>e.listManifests(),getCatalog:t=>e.getCatalog(t),describeCommand:t=>e.describeCommand(t),invoke:t=>e.invoke(t),execute:t=>e.execute(t),getOperation:t=>e.getOperation(t),getOperationByRequestId:t=>e.getOperationByRequestId(t),cancelOperation:t=>e.cancelOperation(t)})}function A5(e,t,r){return new Proxy(Object.create(null),{get(n,o){if(t(),!E5.has(o))throw new Error(`Browser authoring Session member is unavailable: ${String(o)}.`);let a=Reflect.get(e,o,e);if(typeof a!="function")throw new Error(`Browser authoring Session method is unavailable: ${String(o)}.`);return(...i)=>(t(),r(()=>Reflect.apply(a,e,i)))},set(){throw new Error("Browser authoring Session properties are immutable.")},defineProperty(){throw new Error("Browser authoring Session properties are immutable.")},deleteProperty(){throw new Error("Browser authoring Session properties are immutable.")}})}function P5(e,t,r=!1){if(!e.idempotencyKey)return qt("command.idempotencyKeyRequired","Authoring write commands require an idempotency key.");let n=e.expectedRevision?.document;if(n===void 0)return qt("command.expectedRevisionRequired","Authoring write commands require expectedRevision.document.");if(r)return null;let o=t.getMetadata().documentRevision;return n!==o?qt("command.documentRevisionMismatch",`Expected document revision ${n}, received ${o}.`,{expected:n,actual:o}):null}function x5(e,t){let r=m_(e.serviceInstanceId);return{manifest:{schemaVersion:1,id:"authoring.snapshot.get",version:3,title:"Get Authoring Snapshot",description:"Reads bounded authoring identity, history, and document-size metadata.",target:"authoring",access:"read",stability:"stable",inputSchema:Tv,outputSchema:Av,effects:{persistence:"none",undoable:!1,idempotent:!0},presentation:{category:"Authoring",inputMode:"none",keywords:["snapshot","document","revision","summary"],examples:["{}",'{"expectedDocumentRevision":12}']}},handler:(n,o)=>r(n,o.session.getState({cloneDocuments:!1}),t())}}function M5(e){return{manifest:I_({id:"history.undo",title:"Undo",target:"authoring",access:"write",persistence:"authoring",idempotent:!1,shortcut:"Mod+Z",menu:{path:["Edit","Undo"]}}),available:()=>!0,handler:(t,r)=>{let n=r.session.undo();return n?(e(r.session,n),{ok:!0,output:E_(r.session,n)}):{ok:!1,diagnostics:[qt("history.undoUnavailable","There is no command to undo.")]}}}}function D5(e){return{manifest:I_({id:"history.redo",title:"Redo",target:"authoring",access:"write",persistence:"authoring",idempotent:!1,shortcut:"Mod+Shift+Z / Ctrl+Y",menu:{path:["Edit","Redo"]}}),handler:(t,r)=>{let n=r.session.redo();return n?(e(r.session,n),{ok:!0,output:E_(r.session,n)}):{ok:!1,diagnostics:[qt("history.redoUnavailable","There is no command to redo.")]}}}}function I_(e){return{schemaVersion:1,id:e.id,version:1,title:e.title,target:e.target,access:e.access,stability:"stable",inputSchema:{type:"object",additionalProperties:!1},outputSchema:{type:"object"},effects:{persistence:e.persistence,undoable:e.id==="history.undo"||e.id==="history.redo",idempotent:e.idempotent},presentation:{category:"History",inputMode:"none",...e.shortcut?{shortcut:e.shortcut}:{},...e.menu?{menu:e.menu}:{}}}}function E_(e,t){let r=e.getState({cloneDocuments:!1});return{documentRevision:r.documentRevision,dirty:r.dirty,canUndo:r.canUndo,canRedo:r.canRedo,...t.transaction.presentationImpact?{presentationImpact:structuredClone(t.transaction.presentationImpact)}:{},...t.transaction.projectionImpact?{projectionImpact:structuredClone(t.transaction.projectionImpact)}:{}}}var T_=["syncTransformIds","syncMetadataIds","syncAppearanceIds","reprojectIds","createdNodeIds","deletedNodeIds"];function Jf(e,t,r,n){if(!t)return;let o=r??{type:"rebuild",reason:"unclassified-document-change"},a=n.get(e);if(a?.type==="rebuild")return;if(o.type==="rebuild"){n.set(e,{type:"rebuild",...o.reason?{reason:o.reason}:{}});return}let i=a??O5();for(let s of T_)for(let c of o[s]??[]){let d=i.ids[s];if(d.has(c))continue;let u=i.idCount+1,l=i.idBytes+A_(c)+3;if(u>h5||l>b5){n.set(e,{type:"rebuild",reason:"projection-impact-budget-exceeded"});return}d.add(c),i.idCount=u,i.idBytes=l}a||n.set(e,i)}function O5(){return{type:"incremental",ids:{syncTransformIds:new Set,syncMetadataIds:new Set,syncAppearanceIds:new Set,reprojectIds:new Set,createdNodeIds:new Set,deletedNodeIds:new Set},idCount:0,idBytes:0}}function A_(e){let t=0;for(let r=0;r<e.length;r+=1){let n=e.charCodeAt(r);n<128?t+=1:n<2048?t+=2:n>=55296&&n<=56319&&r+1<e.length&&e.charCodeAt(r+1)>=56320&&e.charCodeAt(r+1)<=57343?(t+=4,r+=1):t+=3}return t}function f_(e,t){let r=t.get(e);if(!r)return;if(r.type==="rebuild")return{type:"rebuild",...r.reason?{reason:r.reason}:{}};let n={type:"incremental"};for(let o of T_)r.ids[o].size>0&&(n[o]=[...r.ids[o]]);return n}function Xf(e,t,r,n){if(!t)return;if(!r){n.delete(e);return}let o=n.get(e),a=o?w5(o,r):ja(r);rE(a),n.set(e,a)}function R5(e,t){let r=t.get(e);return r?ja(r):void 0}function C5(e){if(e){if(e.kind==="hierarchy"){let t=[];for(let r of[...e.operations].reverse())r.type==="create"?t.push({type:"delete",nodes:[{node:structuredClone(r.node),index:r.index,parentId:r.parentId}]}):r.type==="delete"?t.push(...[...r.nodes].sort((n,o)=>n.index-o.index).map(n=>({type:"create",node:structuredClone(n.node),index:n.index,parentId:n.parentId}))):r.type==="rename"?t.push({...r,before:r.after,after:r.before}):r.type==="set-enabled"?t.push({...r,before:r.after,after:r.before}):t.push({type:"move",moves:r.moves.map(n=>({targetId:n.targetId,beforeParentId:n.afterParentId,afterParentId:n.beforeParentId,beforeIndex:n.afterIndex,afterIndex:n.beforeIndex,beforeTransform:structuredClone(n.afterTransform),afterTransform:structuredClone(n.beforeTransform)}))});return{kind:"hierarchy",operations:t}}return e.kind==="material"?{kind:"material",operations:[...e.operations].reverse().map(t=>t.type==="asset-update"?{...t,before:structuredClone(t.after),after:structuredClone(t.before),affectedNodeIds:[...t.affectedNodeIds]}:{...t,before:t.after,after:t.before,affectedNodeIds:[...t.affectedNodeIds]})}:e.kind==="asset"?{kind:"asset",operations:[...e.operations].reverse().map(t=>({type:t.before===null?"remove":"upsert",assetId:t.assetId,before:structuredClone(t.after),after:structuredClone(t.before)}))}:{kind:"fields",writes:e.writes.map(t=>({targetId:t.targetId,path:t.path,before:structuredClone(t.after),after:structuredClone(t.before)}))}}}function w5(e,t){if(e.kind==="hierarchy"&&t.kind==="hierarchy")return ja({kind:"hierarchy",operations:[...e.operations,...t.operations]});if(e.kind==="material"&&t.kind==="material"){let n=new Map;for(let o of e.operations)n.set(nE(o),o);for(let o of t.operations){let a=nE(o),i=n.get(a);if(!i){n.set(a,o);continue}i.type==="asset-update"&&o.type==="asset-update"?n.set(a,{...o,before:i.before,affectedNodeIds:[...new Set([...i.affectedNodeIds,...o.affectedNodeIds])]}):i.type==="binding-update"&&o.type==="binding-update"&&n.set(a,{...o,before:i.before,affectedNodeIds:[...new Set([...i.affectedNodeIds,...o.affectedNodeIds])]})}return ja({kind:"material",operations:[...n.values()]})}if(e.kind==="asset"&&t.kind==="asset"){let n=new Map;for(let o of e.operations)n.set(o.assetId,o);for(let o of t.operations){let a=n.get(o.assetId);n.set(o.assetId,a?{type:o.after===null?"remove":"upsert",assetId:o.assetId,before:a.before,after:o.after}:o)}return ja({kind:"asset",operations:[...n.values()]})}if(e.kind!=="fields"||t.kind!=="fields")throw new Error("Editor authoring patches of different kinds cannot be merged.");let r=new Map;for(let n of e.writes)r.set(`${n.targetId}\0${n.path}`,n);for(let n of t.writes){let o=`${n.targetId}\0${n.path}`,a=r.get(o);r.set(o,a?{...n,before:a.before}:n)}return ja({kind:"fields",writes:[...r.values()]})}function rE(e){if(e.kind==="fields")k5(e);else if(e.kind==="hierarchy")j5(e);else if(e.kind==="material")v5(e);else if(e.kind==="asset")_5(e);else throw new Error("Editor authoring patch kind is invalid.");if(A_(JSON.stringify(e))>Ll)throw new Error(`Editor authoring patch exceeds the ${Ll} byte limit.`)}function ja(e){return e.kind==="hierarchy"?{kind:"hierarchy",operations:structuredClone(e.operations)}:e.kind==="material"?{kind:"material",operations:structuredClone(e.operations)}:e.kind==="asset"?{kind:"asset",operations:structuredClone(e.operations)}:{kind:"fields",writes:e.writes.map(t=>({targetId:t.targetId,path:t.path,before:structuredClone(t.before),after:structuredClone(t.after)}))}}function nE(e){return e.type==="asset-update"?`asset\0${e.materialAssetId}`:["binding",e.scope,e.containerId??"",e.targetId,e.slotId??""].join("\0")}function v5(e){if(!Array.isArray(e.operations)||e.operations.length===0||e.operations.length>Pv)throw new Error("Editor material patch operations are invalid or exceed the bounded operation limit.");let t=new Set;for(let r of e.operations){let n=nE(r);if(t.has(n))throw new Error(`Editor material patch duplicates ${n}.`);if(t.add(n),!Array.isArray(r.affectedNodeIds)||r.affectedNodeIds.some(o=>typeof o!="string"||o.length===0))throw new Error("Editor material patch affected node ids are invalid.");if(r.type==="asset-update"){if(!r.materialAssetId||r.before!==null&&typeof r.before!="object"||r.after!==null&&typeof r.after!="object")throw new Error("Editor material asset patch is invalid.");continue}if(!r.targetId||!["scene","prefab"].includes(r.scope)||r.containerId!==void 0&&!r.containerId||r.slotId!==void 0&&!r.slotId)throw new Error("Editor material binding patch is invalid.")}}function _5(e){if(!Array.isArray(e.operations)||e.operations.length===0||e.operations.length>xv)throw new Error("Editor asset patch operations are invalid or exceed the bounded operation limit.");let t=new Set;for(let r of e.operations){if(!r.assetId||t.has(r.assetId))throw new Error(`Editor asset patch identity is invalid or duplicated: ${r.assetId}.`);if(t.add(r.assetId),r.type==="upsert"){if(!r.after||r.after.id!==r.assetId)throw new Error(`Editor asset upsert payload is invalid: ${r.assetId}.`)}else if(r.type==="remove"){if(!r.before||r.after!==null)throw new Error(`Editor asset remove payload is invalid: ${r.assetId}.`)}else throw new Error(`Editor asset patch operation is invalid: ${r.assetId}.`)}}function k5(e){if(!Array.isArray(e.writes)||e.writes.length===0||e.writes.length>kf)throw new Error("Editor authoring patch writes are invalid or exceed the bounded write limit.");let t=new Set;for(let r of e.writes){if(!r||typeof r.targetId!="string"||r.targetId.length===0||typeof r.path!="string"||r.path.length===0)throw new Error("Editor authoring patch write identity is invalid.");let n=`${r.targetId}\0${r.path}`;if(t.has(n))throw new Error(`Editor authoring patch write is duplicated: ${r.path}.`);t.add(n)}}function j5(e){if(!Array.isArray(e.operations)||e.operations.length===0||e.operations.length>jf)throw new Error("Editor hierarchy patch operations are invalid or exceed the bounded operation limit.");for(let t of e.operations){if(t.type==="create"){g_(t.node,t.index);continue}if(t.type==="delete"){if(!Array.isArray(t.nodes)||t.nodes.length===0||t.nodes.length>jf)throw new Error("Editor hierarchy delete patch nodes are invalid.");let n=new Set;for(let o of t.nodes){let a=g_(o.node,o.index);if(n.has(a))throw new Error(`Editor hierarchy delete patch duplicates node ${a}.`);n.add(a)}continue}if(t.type==="rename"||t.type==="set-enabled"){h_(t.targetId);continue}if(t.type!=="move"||!Array.isArray(t.moves)||t.moves.length===0||t.moves.length>jf)throw new Error("Editor hierarchy move patch is invalid.");let r=new Set;for(let n of t.moves){if(h_(n.targetId),!Number.isInteger(n.beforeIndex)||n.beforeIndex<0||!Number.isInteger(n.afterIndex)||n.afterIndex<0)throw new Error(`Editor hierarchy move index is invalid for ${n.targetId}.`);if(r.has(n.targetId))throw new Error(`Editor hierarchy move patch duplicates node ${n.targetId}.`);r.add(n.targetId)}}}function g_(e,t){let r=e?.id;if(typeof r!="string"||r.length===0||!Number.isInteger(t)||t<0)throw new Error("Editor hierarchy node snapshot is invalid.");return r}function h_(e){if(typeof e!="string"||e.length===0)throw new Error("Editor hierarchy target id is invalid.")}function N5(e){if(!e.projectionImpact&&!e.presentationImpact&&!e.authoringPatch)return e;let{projectionImpact:t,presentationImpact:r,authoringPatch:n,...o}=e;return o}function b_(e){return{...e,...e.history?{history:{entries:e.history.entries.map(t=>({...t,...t.origin?{origin:dr(t.origin)}:{}}))}}:{},...e.origin?{origin:dr(e.origin)}:{},...e.projectionImpact?{projectionImpact:P_(e.projectionImpact)}:{},...e.patch?{patch:ja(e.patch)}:{}}}function P_(e){return e.type==="rebuild"?{type:"rebuild",...e.reason?{reason:e.reason}:{}}:{type:"incremental",...e.syncTransformIds?{syncTransformIds:[...e.syncTransformIds]}:{},...e.syncMetadataIds?{syncMetadataIds:[...e.syncMetadataIds]}:{},...e.syncAppearanceIds?{syncAppearanceIds:[...e.syncAppearanceIds]}:{},...e.reprojectIds?{reprojectIds:[...e.reprojectIds]}:{},...e.createdNodeIds?{createdNodeIds:[...e.createdNodeIds]}:{},...e.deletedNodeIds?{deletedNodeIds:[...e.deletedNodeIds]}:{}}}function es(e,t,r,n){return{serviceInstanceId:t,documentRevision:e.documentRevision,documentStructureRevision:e.documentStructureRevision,eventCursor:r,dirty:e.dirty,canUndo:e.canUndo,canRedo:e.canRedo,history:{entries:e.history.entries.slice(0,y_).map(o=>({...o,...o.origin?{origin:dr(o.origin)}:{}}))},document:e.workingDocument,savedDocument:e.persistedDocument,workingRevision:e.documentRevision,...n||{}}}function G5(e,t,r,n,o){return{serviceInstanceId:r,documentRevision:e.documentRevision,documentStructureRevision:e.documentStructureRevision,eventCursor:n,dirty:e.dirty,canUndo:e.canUndo,canRedo:e.canRedo,history:{entries:e.history.entries.slice(0,y_).map(a=>({...a,...a.origin?{origin:dr(a.origin)}:{}}))},savedDocument:t,workingRevision:e.documentRevision,...o||{}}}function Ho(e,t,r,n){return{ok:!1,processedOperations:t,results:r,diagnostics:Array.isArray(n)?[...n]:[n],metadata:e}}function zl(e,t,r,n={}){return{severity:"error",source:"command-system",code:e,message:t,details:{...n,...r?{opId:r.opId,commandId:r.commandId}:{}}}}function Qf(e,t,r){return{...e,...e.details?{details:{...e.details,operationIndex:r,opId:t.opId,commandId:t.commandId}}:{details:{operationIndex:r,opId:t.opId,commandId:t.commandId}}}}async function L5(e){if(!e.available)return{available:!0,diagnostics:[]};try{let t=await e.available();return t===!0?{available:!0,diagnostics:[]}:t===!1?{available:!1,diagnostics:[qt("command.unavailable","Editor command is unavailable.")]}:typeof t=="string"?{available:!1,diagnostics:[qt("command.unavailable",t.trim()||"Editor command is unavailable.")]}:!t||typeof t!="object"||typeof t.available!="boolean"?{available:!1,diagnostics:[qt("command.availabilityInvalid","Editor command availability returned an invalid result.")]}:{available:t.available,diagnostics:t.reasons?.length?t.reasons.map(r=>({...r,...r.details?{details:{...r.details}}:{}})):t.available?[]:[qt("command.unavailable","Editor command is unavailable.")]}}catch(t){return{available:!1,diagnostics:[qt("command.availabilityException",t instanceof Error?t.message:String(t))]}}}function F5(e,t){let r=0,n=(o,a)=>{if(r+=1,a>I5||r>1e5)throw new Error("Transaction input exceeds the reference resolution limit.");if(o===null||typeof o=="string"||typeof o=="number"||typeof o=="boolean")return o;if(Array.isArray(o))return o.map(c=>n(c,a+1));let i=Object.entries(o);if(i.length===1&&i[0]?.[0]==="$ref"){let c=i[0][1];if(typeof c!="string"||!c.trim())throw new Error("Transaction reference must be a non-empty string.");let[d,...u]=c.split(".");if(!d||!t.has(d))throw new Error(`Transaction reference alias is unavailable: ${d||c}`);let l=t.get(d);for(let m of u){if(!m||l===null||typeof l!="object")throw new Error(`Transaction reference path is unavailable: ${c}`);if(Array.isArray(l)){let p=Number(m);if(!Number.isSafeInteger(p)||p<0||p>=l.length)throw new Error(`Transaction reference path is unavailable: ${c}`);l=l[p]}else if(Object.prototype.hasOwnProperty.call(l,m))l=l[m];else throw new Error(`Transaction reference path is unavailable: ${c}`)}if(l===void 0)throw new Error(`Transaction reference path is unavailable: ${c}`);return n(l,a+1)}let s=Object.create(null);for(let[c,d]of i)d!==void 0&&(s[c]=n(d,a+1));return s};return n(e,0)}function $5(e){if(e===void 0)return;let t=0,r=o=>({truncated:!0,reason:o}),n=(o,a)=>{if(t+=1,a>y5)return r("max-depth");if(t>S5)return r("max-nodes");if(o===null||typeof o=="boolean")return o;if(typeof o=="number")return Number.isFinite(o)?o:String(o);if(typeof o=="string")return o.length<=p_?o:`${o.slice(0,p_)}...`;if(Array.isArray(o)){let c=o.slice(0,Yf).map(d=>n(d,a+1));return o.length>Yf&&c.push(r("max-array-entries")),c}if(!o||typeof o!="object")return String(o);let i=Object.create(null),s=Object.entries(o).slice(0,Yf);for(let[c,d]of s)i[c]=n(d,a+1);return Object.keys(o).length>Yf&&(i.__truncated__=r("max-object-entries")),i};return n(e,0)}function B5(){return new Promise(e=>setTimeout(e,0))}function Vl(e){return{ok:!1,diagnostics:[qt("command.cancelled",`Editor command was cancelled: ${e}`)]}}function qt(e,t,r){return{severity:"error",source:"command-system",code:e,message:t,...r?{details:r}:{}}}function Ko(e,t){if(typeof e!="string"||!e.trim())throw new Error(`Editor Authoring Host ${t} is required.`);return e.trim()}function z5(e,t){return Number.isInteger(e)&&e>0?e:t}var V5=200,U5=100,H5=2e3;function M_(e={}){let t=Zf(e.maxTraces,V5),r=Zf(e.maxStepsPerTrace,U5),n=Zf(e.maxSummaryCharacters,H5),o=new Map;return Object.freeze({recordOperation(a){let i=a.operation,s=a.invocation.traceId??`operation:${i.operationId}`,c=oE(i.createdAt),d=oE(i.completedAt??i.startedAt??i.createdAt),u=i.startedAt??i.createdAt,l=i.completedAt??u,m=o.get(s),p=K5(i.diagnostics??[]),h=i.intentCommandId??i.commandId,g={id:a.invocation.traceStepId??i.operationId,traceId:s,source:q5(a.invocation.source),layer:a.manifest?.target==="renderer"?"L1":"L2",action:h,status:i.status==="completed"?"ok":"failed",startedAt:oE(u),endedAt:d,durationMs:Math.max(0,l-u),queueWaitMs:Math.max(0,u-i.createdAt),totalDurationMs:Math.max(0,l-i.createdAt),commandId:i.commandId,...i.intentCommandId?{intentCommandId:i.intentCommandId}:{},requestId:i.requestId,origin:structuredClone(i.origin),inputSummary:x_(a.invocation.input,n),...i.output!==void 0?{outputSummary:x_(i.output,n)}:{},...p.length?{diagnostics:p}:{}},f=[...m?.steps??[],g].slice(-r),y=f.reduce((T,D)=>T+(D.diagnostics?.length??0),0),A={schemaVersion:1,traceId:s,status:f.some(T=>T.status==="failed")?"failed":"ok",createdAt:m?.createdAt??c,updatedAt:d,stepCount:f.length,diagnosticCount:y,artifactCount:0,lastAction:h,...p[0]?.message?{lastMessage:p[0].message}:{},steps:f};for(o.delete(s),o.set(s,A);o.size>t;)o.delete(o.keys().next().value)},read(a){let i=a.traceId?o.has(a.traceId)?[o.get(a.traceId)]:[]:[...o.values()].reverse(),s=Y5(a.cursor),c=Zf(a.limit,100),d=i.slice(s,s+c).map(W5),u=s+d.length;return{traces:d,...u<i.length?{nextCursor:String(u)}:{}}},clear(){o.clear()}})}function x_(e,t){let r;try{r=JSON.stringify(e===void 0?null:e)}catch{r='"[unserializable]"'}return{preview:r.length>t?`${r.slice(0,t)}\u2026`:r,characters:r.length,truncated:r.length>t}}function K5(e){return e.map(t=>structuredClone(t))}function W5(e){return structuredClone(e)}function q5(e){return e==="agent-cli"?"agent":"editor"}function oE(e){return new Date(Number.isFinite(e)?e:0).toISOString()}function Y5(e){if(e===void 0)return 0;let t=Number(e);if(!Number.isSafeInteger(t)||t<0)throw new Error("Trace cursor is invalid.");return t}function Zf(e,t){return Number.isSafeInteger(e)&&Number(e)>0?Number(e):t}var C_=100,J5=100,X5=32,D_=32,Q5=50,w_=3e4;function v_(e){let t=e.host,r=e.now??Date.now,n=Hl(e.maxCatalogPageSize,C_),o=Hl(e.maxTracePageSize,J5),a=Hl(e.maxBrowserAttachments,X5),i=Hl(e.browserAttachmentLeaseMs,4e4),s=Math.max(i*2,6e4),c=Hl(e.browserOperationTimeoutMs,3e4),d=new Map,u=new Map,l=new Map,m=new Map,p=0,h=0,g=!1,f=setInterval($t,Math.min(1e3,Math.max(25,Math.floor(i/2))));return f.unref?.(),Object.freeze({serviceInstanceId:t.serviceInstanceId,async handle(x,j=["read","write"],v){if(g)return de("service.disposed","Editor Service Gateway is disposed.");if($t(),!x||typeof x!="object"||typeof x.kind!="string")return de("request.invalid","Editor Service Gateway request is invalid.");try{switch(x.kind){case"status":return{ok:!0,kind:"status",status:y()};case"commands.list":return{ok:!0,kind:"commands",page:await ze("",x.cursor,x.limit)};case"commands.search":return{ok:!0,kind:"commands",page:await ze(x.query,x.cursor,x.limit)};case"commands.describe":return{ok:!0,kind:"command",command:await Cr(x.commandId)};case"command.invoke":return Dt(x.invocation,x.timeoutMs,x.includeAuthoringSnapshot===!0,j,v);case"operation.get":{let O=x,I=typeof O.operationId=="string",R=typeof O.requestId=="string";if(I===R)return de("operation.identityInvalid","Operation query requires exactly one operationId or requestId.");let G=I?t.commandSystem.getOperation(O.operationId):t.commandSystem.getOperationByRequestId(O.requestId),z=G?t.getReceipt(G.operationId):null;return{ok:!0,kind:"operation",operation:G,...z?{authoringReceipt:z}:{}}}case"operation.cancel":return l.get(x.operationId)?.dispatched?{ok:!0,kind:"cancel",cancelled:!1,operation:t.commandSystem.getOperation(x.operationId)}:{ok:!0,kind:"cancel",cancelled:t.commandSystem.cancelOperation(x.operationId),operation:t.commandSystem.getOperation(x.operationId)};case"trace.get":{let O=aE(x.limit,o);return{ok:!0,kind:"traces",page:e.readTraces?await e.readTraces({traceId:x.traceId,cursor:x.cursor,limit:O}):{traces:[]}}}case"authoring.snapshot":{let O=x.afterEventCursor===void 0?{kind:"snapshot-required",reason:"cursor.invalid",snapshot:t.getSnapshot()}:x.timeoutMs===void 0?t.readEvents(x.afterEventCursor,x.serviceInstanceId):await t.waitForEvents(x.afterEventCursor,x.serviceInstanceId,iE(x.timeoutMs));if(O.kind==="snapshot-required"){let I=await e.readAuthoringPersistence?.();I&&(O.snapshot={...O.snapshot,persistence:{...I}})}return{ok:!0,kind:"authoring.snapshot",result:O}}case"authoring.checkpoint":{if(x.serviceInstanceId!==t.serviceInstanceId)return de("service.instanceConflict",`Editor Service instance changed: expected ${x.serviceInstanceId}, current ${t.serviceInstanceId}.`);let O=t.getMetadata();if(x.documentRevision!==O.documentRevision)return de("authoring.checkpointRevisionMismatch",`Editor checkpoint revision changed: expected ${x.documentRevision}, current ${O.documentRevision}.`);let I=t.getCheckpoint(),R=await e.readAuthoringPersistence?.();return{ok:!0,kind:"authoring.checkpoint",checkpoint:{...I,...R?{persistence:{...R}}:{}}}}case"document.export.get":return{ok:!0,kind:"document.export",artifact:e.readDocumentExport?await e.readDocumentExport(lr(x.transactionId,"transactionId")):null};case"document.export.discard":return j.includes("write")?{ok:!0,kind:"document.export.discard",discarded:e.discardDocumentExport?await e.discardDocumentExport(lr(x.transactionId,"transactionId")):!1}:de("auth.writeScopeRequired","Write scope is required to discard a prepared document export.");case"transaction.begin":return j.includes("write")?A(x,v):Oe("begin");case"transaction.append":return j.includes("write")?T(x,v):Oe("append");case"transaction.preflight":return j.includes("write")?D(x,v):Oe("preflight");case"transaction.commit":return j.includes("write")?P(x,v):Oe("commit");case"transaction.get":return C(x,v);case"transaction.abort":return j.includes("write")?E(x,v):Oe("abort");case"attachment.register":return jn(x.attachment);case"attachment.poll":return Q(x.attachmentId,x.leaseId,x.timeoutMs);case"attachment.result":return vr(x.attachmentId,x.leaseId,x.result);case"attachment.unregister":return _r(x.attachmentId,x.leaseId);default:return de("request.unknown","Editor Service Gateway request kind is unknown.")}}catch(O){return de("request.failed",O instanceof Error?O.message:String(O))}},forwardBrowserCommand:He,dispose(){if(!g){g=!0,clearInterval(f);for(let x of d.values())Ps(x,"attachment.disconnected");d.clear();for(let x of l.values())fo(x,{ok:!1,diagnostics:[Rn("service.disposed","Editor Service Gateway is disposed.")]});l.clear(),m.clear()}}});function y(){let x=t.getMetadata(),j=[...d.values()].filter(v=>v.connected).map(v=>({attachmentId:v.registration.attachmentId,...v.registration.label?{label:v.registration.label}:{},targets:v.registration.targets,commandCount:v.registration.commandIds.length,...v.registration.ownerId?{ownerId:v.registration.ownerId,ownerGeneration:v.registration.ownerGeneration}:{}})).sort((v,O)=>v.attachmentId.localeCompare(O.attachmentId));return{ok:!0,protocolVersion:2,serviceInstanceId:t.serviceInstanceId,canonicalProjectRoot:e.canonicalProjectRoot,packageVersion:e.packageVersion,buildKey:e.buildKey,startedAt:e.startedAt,documentRevision:x.documentRevision,catalogRevision:t.commandSystem.catalogRevision,dirty:x.dirty,transactions:{active:[...m.values()].filter(v=>!Ul(v.state)).length,retained:[...m.values()].filter(v=>Ul(v.state)).length,maxOperationsPerTransaction:Nf,maxBytesPerTransaction:Gf,maxOperationsPerAppend:Lf,maxBytesPerAppend:Ff},browserAttachmentCount:j.length,browserAttachments:j,warnings:e6(j),recovery:e.recovery?{...e.recovery}:{draftJournal:!1,unsavedWorkingStateRecovered:!1,message:"Service restart loads the last saved checkpoint; unsaved working state is not recoverable."}}}function A(x,j){let v=w(j);if(x.serviceInstanceId!==void 0&&x.serviceInstanceId!==t.serviceInstanceId)return Be(x.serviceInstanceId);if(!Number.isSafeInteger(x.expectedDocumentRevision)||x.expectedDocumentRevision<0)return de("transaction.documentRevisionInvalid","Transaction expectedDocumentRevision must be a non-negative safe integer.");let O=x.transactionId===void 0?void 0:lr(x.transactionId,"transactionId"),I=O?m.get(O):void 0;if(I)return I.baseDocumentRevision!==x.expectedDocumentRevision||I.label!==jc(x.label)||I.traceId!==jc(x.traceId)||!O_(I.origin,v)?de("transaction.idempotencyConflict",`Transaction ID was reused with different input: ${O}`):M(I);let R=t.getMetadata();if(x.expectedDocumentRevision!==R.documentRevision)return de("transaction.documentRevisionMismatch",`Expected document revision ${x.expectedDocumentRevision}, received ${R.documentRevision}.`);if([...m.values()].filter(V=>!Ul(V.state)).length>=D_)return de("transaction.activeLimitExceeded",`Active transaction limit reached: ${D_}.`);let z=O??`${t.serviceInstanceId}:transaction:${++h}`,k=ge(),L={transactionId:z,serviceInstanceId:t.serviceInstanceId,baseDocumentRevision:x.expectedDocumentRevision,...jc(x.label)?{label:jc(x.label)}:{},...jc(x.traceId)?{traceId:jc(x.traceId)}:{},origin:v,operations:[],results:[],createdAt:k,state:"open",acceptedOperations:0,acceptedBytes:0,processedOperations:0,dirty:R.dirty,diagnostics:[],updatedAt:k};return m.set(z,L),M(L)}function T(x,j){let v=S(x.transactionId,x.serviceInstanceId,j);if(!v.ok)return v.response;let O=v.record;if(O.state!=="open")return de("transaction.stateConflict",`Transaction cannot append while ${O.state}: ${O.transactionId}`);if(!Number.isSafeInteger(x.sequence)||x.sequence<0)return de("transaction.sequenceInvalid","Transaction append sequence must be a non-negative safe integer.");let I=t6(x.operations);if(I.length===0)return de("transaction.appendEmpty","Transaction append requires at least one operation.");if(I.length>Lf)return de("transaction.appendOperationLimitExceeded",`Transaction append exceeds ${Lf} operations.`);let R=r6(I);if(R>Ff)return de("transaction.appendByteLimitExceeded",`Transaction append exceeds ${Ff} bytes.`);if(x.sequence<O.operations.length){let k=O.operations.slice(x.sequence,x.sequence+I.length);return x.sequence+I.length<=O.operations.length&&JSON.stringify(k)===JSON.stringify(I)?M(O):de("transaction.appendIdempotencyConflict",`Transaction append sequence ${x.sequence} conflicts with accepted operations.`)}if(x.sequence!==O.operations.length)return de("transaction.sequenceMismatch",`Expected append sequence ${O.operations.length}, received ${x.sequence}.`);if(O.operations.length+I.length>Nf)return de("transaction.operationLimitExceeded",`Transaction exceeds ${Nf} operations.`);if(O.acceptedBytes+R>Gf)return de("transaction.byteLimitExceeded",`Transaction exceeds ${Gf} bytes.`);let G=new Set(O.operations.map(k=>k.opId)),z=new Set(O.operations.flatMap(k=>k.as?[k.as]:[]));for(let k of I){if(G.has(k.opId))return de("transaction.opIdConflict",`Transaction operation ID is duplicated: ${k.opId}`);if(k.as&&z.has(k.as))return de("transaction.aliasConflict",`Transaction alias is duplicated: ${k.as}`);G.add(k.opId),k.as&&z.add(k.as)}return O.operations.push(...I),O.acceptedOperations+=I.length,O.acceptedBytes+=R,O.updatedAt=ge(),M(O)}async function D(x,j){let v=S(x.transactionId,x.serviceInstanceId,j);if(!v.ok)return v.response;let O=v.record;if(O.state==="preflighted")return M(O);if(O.state!=="open")return de("transaction.stateConflict",`Transaction cannot preflight while ${O.state}: ${O.transactionId}`);if(O.operations.length===0)return de("transaction.empty","Transaction has no operations.");O.state="preflighting",O.updatedAt=ge();try{let I=await t.runTransactionBatch({transactionId:O.transactionId,baseDocumentRevision:O.baseDocumentRevision,operations:O.operations,mode:"preflight",...O.label?{label:O.label}:{},principal:Yt(O.origin.principal),source:O.origin.source,sessionId:O.origin.sessionId,...O.origin.surface?{surface:O.origin.surface}:{},...O.traceId?{traceId:O.traceId}:{}});_(O,I),O.state=I.ok?"preflighted":"failed"}catch(I){B(O,"transaction.preflightException",I)}return O.updatedAt=ge(),Ul(O.state)&&re(O),M(O)}async function P(x,j){let v=S(x.transactionId,x.serviceInstanceId,j);if(!v.ok)return v.response;let O=v.record;if(O.state==="working_committed")return M(O);if(O.state!=="open"&&O.state!=="preflighted")return de("transaction.stateConflict",`Transaction cannot commit while ${O.state}: ${O.transactionId}`);if(O.operations.length===0)return de("transaction.empty","Transaction has no operations.");O.state="committing",O.updatedAt=ge();try{let I=await t.runTransactionBatch({transactionId:O.transactionId,baseDocumentRevision:O.baseDocumentRevision,operations:O.operations,mode:"commit",...O.label?{label:O.label}:{},principal:Yt(O.origin.principal),source:O.origin.source,sessionId:O.origin.sessionId,...O.origin.surface?{surface:O.origin.surface}:{},...O.traceId?{traceId:O.traceId}:{}});_(O,I),I.ok?(O.state="working_committed",O.committedRevision=I.metadata.documentRevision):O.state="failed"}catch(I){B(O,"transaction.commitException",I)}return O.updatedAt=ge(),re(O),M(O)}function C(x,j){let v=S(x.transactionId,x.serviceInstanceId,j);return v.ok?M(v.record,x.cursor,x.limit):v.response}function E(x,j){let v=S(x.transactionId,x.serviceInstanceId,j);if(!v.ok)return v.response;let O=v.record;return O.state==="aborted"?M(O):O.state!=="open"&&O.state!=="preflighted"?de("transaction.stateConflict",`Transaction cannot abort while ${O.state}: ${O.transactionId}`):(O.state="aborted",O.updatedAt=ge(),re(O),M(O))}function S(x,j,v){if(j!==t.serviceInstanceId)return{ok:!1,response:Be(j)};let O=lr(x,"transactionId"),I=m.get(O);return I?O_(I.origin,w(v))?{ok:!0,record:I}:{ok:!1,response:de("transaction.originConflict",`Transaction belongs to another trusted authoring session: ${O}`)}:{ok:!1,response:de("transaction.notFound",`Transaction was not found in this Editor Service instance: ${O}`)}}function w(x){return x?Yt(x):{principal:{type:"agent",id:"fps-editor-agent"},source:"agent-cli",sessionId:`agent:${t.serviceInstanceId}`,surface:"agent-transaction"}}function M(x,j,v){let O=aE(v,Mv),I=s6(j,x),R=x.results.slice(I,I+O).map(k=>Yt(k)),G=I+R.length;return{ok:!0,kind:"transaction",transaction:{transactionId:x.transactionId,serviceInstanceId:x.serviceInstanceId,state:x.state,phase:n6(x.state),baseDocumentRevision:x.baseDocumentRevision,...x.committedRevision===void 0?{}:{workingDocumentRevision:x.committedRevision},dirty:x.dirty,acceptedOperations:x.acceptedOperations,acceptedBytes:x.acceptedBytes,processedOperations:x.processedOperations,createdAt:x.createdAt,updatedAt:x.updatedAt,allowedActions:o6(x.state),retry:a6(x),diagnostics:x.diagnostics.map(k=>Yt(k)),results:{offset:I,returned:R.length,total:x.results.length,items:R,...G<x.results.length?{nextCursor:i6(x,G)}:{}}}}}function _(x,j){x.processedOperations=j.processedOperations,x.results.splice(0,x.results.length,...j.results.map(v=>Yt(v))),x.diagnostics=j.ok?[]:j.diagnostics.map(v=>Yt(v)),x.dirty=j.metadata.dirty}function B(x,j,v){x.state="failed",x.diagnostics=[Rn(j,v instanceof Error?v.message:String(v))]}function re(x){x.operations.splice(0,x.operations.length),U()}function U(){let x=[...m.values()].filter(j=>Ul(j.state)).sort((j,v)=>j.updatedAt-v.updatedAt||j.transactionId.localeCompare(v.transactionId));for(;x.length>Q5;){let j=x.shift();j&&m.delete(j.transactionId)}}function Be(x){return de("transaction.serviceInstanceChanged",`Editor Service instance changed: expected ${x}, current ${t.serviceInstanceId}.`)}function Oe(x){return de("auth.writeScopeRequired",`Write scope is required to ${x} an authoring transaction.`)}async function ze(x,j,v){let O=typeof x=="string"?x.trim().toLocaleLowerCase():"",I=t.commandSystem.catalogRevision,R=d6(j,I,O),G=aE(v,n),z=t.commandSystem.listManifests().filter(H=>l6(H,O)).sort((H,ce)=>H.id.localeCompare(ce.id)),k=z.slice(R,R+G),L=(await Promise.all(k.map(H=>Cr(H.id)))).filter(H=>H!==null),V=R+k.length;return{catalogRevision:I,commands:L,...V<z.length?{nextCursor:c6(I,O,V)}:{}}}async function Cr(x){let j=await t.commandSystem.describeCommand(x);if(!j||j.manifest.target!=="view"&&j.manifest.target!=="renderer")return j;let v=j.manifest.target;return[...d.values()].some(I=>I.connected&&I.registration.targets.includes(v)&&I.registration.commandIds.includes(j.manifest.id))?j:{manifest:j.manifest,availability:{available:!1,reasons:[Rn(`${v}.sessionUnavailable`,`No Browser attachment is available for ${j.manifest.id}.`)]}}}async function Dt(x,j,v,O,I){let R=Yt(x);I&&(R.principal=Yt(I.principal),R.source=I.source,R.sessionId=I.sessionId,I.surface?R.surface=I.surface:delete R.surface);let G=R.expectedRevision?.serviceInstanceId;if(G!==void 0&&G!==t.serviceInstanceId)return de("service.instanceConflict",`Editor Service instance changed: expected ${G}, current ${t.serviceInstanceId}.`);let z=await t.commandSystem.describeCommand(R.commandId);if(!z)return de("command.unknown",`Editor command is not registered: ${R.commandId}`);if(z.manifest.access==="write"&&!O.includes("write"))return de("auth.writeScopeRequired",`Write scope is required: ${R.commandId}`);let k=wr(z.manifest,R.clientId);if(!k.ok)return de(k.code,k.message);k.clientId&&(R.clientId=k.clientId);let L=t.invoke(R),V=iE(j);return V===0||await m6(L.completion,V),nt(L.operationId,v)}function nt(x,j){let v=t.commandSystem.getOperation(x);return{ok:!0,kind:"operation",operation:v,...v?(()=>{let O=t.getReceipt(v.operationId);return O?{authoringReceipt:O}:{}})():{},...j&&v?.status==="completed"?{authoringSnapshot:t.getSnapshot()}:{}}}function wr(x,j){let v=j;for(let O of["view","renderer"]){if(!(O==="view"?x.requires?.viewAttached===!0:x.requires?.rendererAttached===!0))continue;if(!v){let z=[...d.values()].filter(k=>k.connected&&k.registration.targets.includes(O)&&k.registration.commandIds.includes(x.id));if(z.length===1)v=z[0].registration.attachmentId;else if(z.length>1)return{ok:!1,code:`${O}.clientIdRequired`,message:`Multiple Browser attachments can execute ${x.id}; pass --client-id with one of: ${z.map(k=>k.registration.attachmentId).sort().join(", ")}.`}}let R=v?d.get(v):void 0,G=x.target!==O||R?.registration.commandIds.includes(x.id)===!0;if(!(R?.connected&&R.registration.targets.includes(O)&&G))return{ok:!1,code:`${O}.sessionUnavailable`,message:`The requested Browser attachment is unavailable for ${x.id}${v?`: ${v}`:"."}`}}return{ok:!0,...v?{clientId:v}:{}}}function He(x,j){let v=x.clientId?d.get(x.clientId):void 0;if(!v)return Promise.resolve({ok:!1,diagnostics:[Rn(`${j}.sessionUnavailable`,`No Browser attachment is available for ${x.commandId}.`)]});if(!v.connected||!v.registration.targets.includes(j)||!v.registration.commandIds.includes(x.commandId))return Promise.resolve({ok:!1,diagnostics:[Rn(`${j}.sessionUnavailable`,`The requested Browser attachment is unavailable for ${x.commandId}: ${x.clientId}.`)]});if(l.has(x.operationId))return Promise.resolve({ok:!1,diagnostics:[Rn("attachment.operationConflict",`Browser command is already forwarded: ${x.operationId}`)]});let O={requestId:x.requestId,operationId:x.operationId,invocation:u6(x)};return new Promise(I=>{let R={attachmentId:v.registration.attachmentId,request:O,resolve:I,signal:x.signal,onAbort:()=>{fo(R,{ok:!1,diagnostics:[Rn("command.cancelled",`Browser command was cancelled: ${x.commandId}`)]})},dispatched:!1,settled:!1};l.set(x.operationId,R),x.signal.addEventListener("abort",R.onAbort,{once:!0}),R.timeout=setTimeout(()=>{fo(R,{ok:!1,diagnostics:[Rn("command.timeout",`Browser command timed out: ${x.commandId}`)]})},c),R.timeout.unref?.(),v.operations.add(x.operationId);let G=v.waiters.values().next().value;G?(v.waiters.delete(G),R.dispatched=!0,G(Yt(O))):v.queued.push(O)})}function jn(x){let j=Z5(x),v=[],O=j.ownerGeneration;if(j.ownerId){let L=u.get(j.ownerId)?.generation;if(v=[...d.entries()].filter(([,V])=>V.registration.ownerId===j.ownerId),j.claimMode==="if-vacant"&&v.length>0)return de("attachment.ownerConflict",`Browser attachment owner is currently active: ${j.ownerId}.`);if(O===void 0){if(L===Number.MAX_SAFE_INTEGER)return de("attachment.ownerGenerationExhausted",`Browser attachment owner generation is exhausted: ${j.ownerId}.`);O=(L??0)+1}else if(L!==void 0&&O<L)return de("attachment.ownerGenerationStale",`Browser attachment owner generation is stale: ${j.ownerId}@${O}; latest is ${L}.`);if(L===O&&v.length>0)return de("attachment.ownerConflict",`Browser attachment owner is already registered: ${j.ownerId}@${O}.`)}let I=j.ownerId?Object.freeze({...j,ownerGeneration:O}):j,R=v.some(([L])=>L===I.attachmentId);if(d.has(I.attachmentId)&&!R)return de("attachment.conflict",`Browser attachment is already registered: ${I.attachmentId}`);if(d.size-v.length+1>a)return de("attachment.limitExceeded",`Browser attachment limit reached: ${a}.`);let z=new Map(t.commandSystem.listManifests().map(L=>[L.id,L]));for(let L of I.commandIds){let V=z.get(L);if(!V||V.target!=="view"&&V.target!=="renderer"||!I.targets.includes(V.target))return de("attachment.commandMismatch",`Browser attachment command does not match its registered target: ${L}`)}for(let[L,V]of v)Ps(V,"attachment.ownerReplaced"),d.delete(L);let k=`${t.serviceInstanceId}:${++p}`;return d.set(I.attachmentId,{registration:I,leaseId:k,queued:[],waiters:new Set,operations:new Set,connected:!0,lastSeenAt:ge()}),I.ownerId&&u.set(I.ownerId,{generation:I.ownerGeneration,lastSeenAt:ge()}),{ok:!0,kind:"attachment",attachmentId:I.attachmentId,leaseId:k,...I.ownerGeneration===void 0?{}:{ownerGeneration:I.ownerGeneration}}}async function Q(x,j,v){let O=d.get(lr(x,"attachmentId"));if(!O?.connected)return de("attachment.notFound",`Browser attachment was not found: ${x}`);let I=As(O,j);if(I)return I;O.lastSeenAt=ge();let R=O.queued.shift();if(R){let k=l.get(R.operationId);return k&&(k.dispatched=!0),{ok:!0,kind:"attachment.poll",request:Yt(R)}}let G=Math.min(iE(v),w_);if(G===0)return{ok:!0,kind:"attachment.poll",request:null};let z=await new Promise(k=>{let L=!1,V=ce=>{L||(L=!0,clearTimeout(H),O.waiters.delete(V),k(ce))},H=setTimeout(()=>V(null),G);O.waiters.add(V)});return O.connected&&(O.lastSeenAt=ge()),{ok:!0,kind:"attachment.poll",request:z}}function vr(x,j,v){let O=d.get(lr(x,"attachmentId"));if(O){let R=As(O,j);if(R)return R}let I=l.get(lr(v?.operationId,"operationId"));return!O||!I||I.attachmentId!==x||I.request.requestId!==v.requestId||!I.dispatched||I.settled?{ok:!0,kind:"attachment.result",accepted:!1}:(O.lastSeenAt=ge(),fo(I,v.ok?{ok:!0,output:p6(v.output),...v.diagnostics?.length?{diagnostics:Yt(v.diagnostics)}:{}}:{ok:!1,diagnostics:v.diagnostics?.length?Yt(v.diagnostics):[Rn("command.executionFailed",`Browser command failed: ${I.request.invocation.commandId}`)]}),{ok:!0,kind:"attachment.result",accepted:!0})}function _r(x,j){let v=lr(x,"attachmentId"),O=d.get(v);if(!O)return{ok:!0,kind:"attachment.unregister",removed:!1};let I=As(O,j);return I||(Ps(O,"attachment.disconnected"),Za(O),d.delete(v),{ok:!0,kind:"attachment.unregister",removed:!0})}function As(x,j){return!x.registration.ownerId||j===x.leaseId?null:de("attachment.leaseMismatch",`Browser attachment lease is no longer current: ${x.registration.attachmentId}.`)}function Ps(x,j){x.connected=!1;for(let v of x.waiters)v(null);x.waiters.clear(),x.queued.splice(0);for(let v of x.operations){let O=l.get(v);!O||O.settled||fo(O,{ok:!1,diagnostics:[Rn(j,`Browser attachment disconnected: ${x.registration.attachmentId}`)]})}x.operations.clear()}function Za(x,j=ge()){let v=x.registration.ownerId,O=x.registration.ownerGeneration;!v||O===void 0||u.set(v,{generation:O,lastSeenAt:j})}function fo(x,j){if(x.settled)return;x.settled=!0;let v=d.get(x.attachmentId);if(v){let O=v.queued.findIndex(I=>I.operationId===x.request.operationId);O>=0&&v.queued.splice(O,1),v.operations.delete(x.request.operationId)}l.delete(x.request.operationId),x.signal.removeEventListener("abort",x.onAbort),x.timeout&&clearTimeout(x.timeout),x.timeout=void 0,x.resolve(j)}function $t(){if(g)return;let x=ge();for(let[v,O]of d)x-O.lastSeenAt<=i||(Ps(O,"attachment.leaseExpired"),Za(O,x),d.delete(v));let j=new Set([...d.values()].map(v=>v.registration.ownerId).filter(v=>v!==void 0));for(let[v,O]of u)j.has(v)||x-O.lastSeenAt<=s||u.delete(v)}function ge(){let x=r();return Number.isFinite(x)?x:Date.now()}}function Z5(e){let t=lr(e?.attachmentId,"attachmentId"),r=[...new Set(e?.targets??[])];if(r.length===0||r.some(s=>s!=="view"&&s!=="renderer"))throw new Error("Browser attachment targets must contain view or renderer.");let n=[...new Set((e?.commandIds??[]).map(s=>lr(s,"commandId")))],o=e?.ownerId===void 0?void 0:lr(e.ownerId,"ownerId"),a=e?.ownerGeneration,i=e?.claimMode;if(o===void 0&&a!==void 0)throw new Error("Browser attachment ownerGeneration requires ownerId.");if(a!==void 0&&(!Number.isSafeInteger(a)||a<1))throw new Error("Browser attachment ownerGeneration must be a positive safe integer.");if(i!==void 0&&i!=="replace"&&i!=="if-vacant")throw new Error("Browser attachment claimMode must be replace or if-vacant.");if(o===void 0&&i!==void 0)throw new Error("Browser attachment claimMode requires ownerId.");return Object.freeze({attachmentId:t,targets:Object.freeze(r),commandIds:Object.freeze(n),...e.label?.trim()?{label:e.label.trim()}:{},...e.connectedAt?.trim()?{connectedAt:e.connectedAt.trim()}:{},...o?{ownerId:o,...a===void 0?{}:{ownerGeneration:a},...i===void 0?{}:{claimMode:i}}:{}})}function e6(e){let t=[],r=new Map,n=[];for(let o of e)if(o.ownerId){let a=r.get(o.ownerId)??[];a.push(o.attachmentId),r.set(o.ownerId,a)}else o.label==="Local Editor Command Host"&&n.push(o.attachmentId);for(let[o,a]of r)a.length<2||t.push(Object.freeze({code:"attachment.duplicateOwner",message:`Multiple Browser attachments share owner ${o}.`,attachmentIds:Object.freeze([...a].sort())}));return n.length>1&&t.push(Object.freeze({code:"attachment.possibleDuplicateLocalEditorHost",message:"Multiple legacy Local Editor Command Hosts are active without owner identity.",attachmentIds:Object.freeze([...n].sort())})),Object.freeze(t)}function lr(e,t){if(typeof e!="string"||!e.trim())throw new Error(`${t} must be a non-empty string.`);return e.trim()}function jc(e){return typeof e=="string"&&e.trim()?e.trim():void 0}function t6(e){if(!Array.isArray(e))throw new Error("Transaction operations must be an array.");return e.map((t,r)=>{if(!t||typeof t!="object"||Array.isArray(t))throw new Error(`Transaction operation ${r} must be an object.`);let n=t,o=lr(n.opId,`operations[${r}].opId`),a=lr(n.commandId,`operations[${r}].commandId`),i=n.as===void 0?void 0:lr(n.as,`operations[${r}].as`);return{opId:o,commandId:a,...n.input===void 0?{}:{input:Yt(n.input)},...i?{as:i}:{}}})}function r6(e){let t=JSON.stringify(e);return t===void 0?0:new TextEncoder().encode(t).byteLength}function Ul(e){return e==="working_committed"||e==="failed"||e==="aborted"}function n6(e){switch(e){case"open":return"append";case"preflighting":case"preflighted":return"preflight";case"committing":return"commit";case"working_committed":return"complete";case"failed":return"failed";case"aborted":return"aborted"}}function o6(e){switch(e){case"open":return["append","preflight","commit","get","abort"];case"preflighting":case"committing":return["get"];case"preflighted":return["preflight","commit","get","abort"];case"working_committed":return["get","document.export","document.commit"];case"failed":case"aborted":return["get"]}}function a6(e){let t=e.diagnostics.some(r=>r.code==="transaction.documentRevisionMismatch"||r.code==="command.documentRevisionMismatch"||r.code==="service.instanceConflict"||r.code==="transaction.serviceInstanceChanged");return{retryable:e.state==="preflighting"||e.state==="committing",requiresRebase:t}}function i6(e,t){return`${eg(e.transactionId)}.${e.results.length}.${t}`}function s6(e,t){if(e===void 0)return 0;let r=/^([0-9a-f]+)\.(\d+)\.(\d+)$/.exec(e);if(!r||r[1]!==eg(t.transactionId)||Number(r[2])!==t.results.length)throw new Error("Transaction result cursor is invalid or stale.");let n=Number(r[3]);if(!Number.isSafeInteger(n)||n<0||n>t.results.length)throw new Error("Transaction result cursor offset is invalid.");return n}function Hl(e,t){return Number.isSafeInteger(e)&&e>0?e:t}function aE(e,t){if(e===void 0)return Math.min(C_,t);if(!Number.isSafeInteger(e)||e<=0)throw new Error("Pagination limit must be a positive safe integer.");return Math.min(e,t)}function iE(e){if(e===void 0)return 1e4;if(!Number.isSafeInteger(e)||e<0)throw new Error("timeoutMs must be a non-negative safe integer.");return Math.min(e,w_)}function c6(e,t,r){return`${e}.${r}.${eg(t)}`}function d6(e,t,r){if(e===void 0)return 0;let n=/^(\d+)\.(\d+)\.([0-9a-f]+)$/.exec(e);if(!n||Number(n[1])!==t||n[3]!==eg(r))throw new Error("Command catalog cursor is invalid or stale.");let o=Number(n[2]);if(!Number.isSafeInteger(o)||o<0)throw new Error("Command catalog cursor offset is invalid.");return o}function eg(e){let t=2166136261;for(let r=0;r<e.length;r+=1)t^=e.charCodeAt(r),t=Math.imul(t,16777619);return(t>>>0).toString(16)}function l6(e,t){return t?[e.id,e.title,e.description??"",...e.presentation?.aliases??[],...e.presentation?.keywords??[]].some(r=>r.toLocaleLowerCase().includes(t)):!0}function de(e,t){return{ok:!1,diagnostics:[Rn(e,t)]}}function Rn(e,t){return{severity:"error",source:"transport",code:e,message:t}}function u6(e){return Yt({commandId:e.commandId,...e.intentCommandId?{intentCommandId:e.intentCommandId}:{},...e.input!==void 0?{input:e.input}:{},requestId:e.requestId,...e.idempotencyKey?{idempotencyKey:e.idempotencyKey}:{},...e.expectedRevision?{expectedRevision:e.expectedRevision}:{},principal:e.principal,source:e.source,...e.sessionId?{sessionId:e.sessionId}:{},...e.surface?{surface:e.surface}:{},...e.traceId?{traceId:e.traceId}:{},...e.traceStepId?{traceStepId:e.traceStepId}:{},...e.transactionId?{transactionId:e.transactionId}:{},...e.clientId?{clientId:e.clientId}:{}})}function m6(e,t){return new Promise(r=>{let n=!1,o=()=>{n||(n=!0,clearTimeout(a),r())},a=setTimeout(o,t);e.then(o,o)})}function Yt(e){return typeof structuredClone=="function"?structuredClone(e):JSON.parse(JSON.stringify(e))}function O_(e,t){return e.principal.type===t.principal.type&&e.principal.id===t.principal.id&&e.source===t.source&&e.sessionId===t.sessionId&&e.surface===t.surface}function p6(e){let t=JSON.stringify(e??null);return t===void 0?null:JSON.parse(t)}function J(e){return typeof e=="number"&&Number.isFinite(e)}function ts(e){return e==null||typeof e=="string"}function rs(e){return e==null||typeof e=="string"&&e.trim().length>0}function tg(e){return Array.isArray(e)&&e.every(t=>typeof t=="string")}function rg(e){return e==null||typeof e=="boolean"}function Pr(e){if(!e||typeof e!="object")return!1;let t=e;return J(t.x)&&J(t.y)&&J(t.z)}function ng(e){if(!e||typeof e!="object")return!1;let t=e;return J(t.x)&&J(t.y)}function Kl(e){if(J(e))return e>=0;if(!e||typeof e!="object")return!1;let t=e;return J(t.x)&&t.x>=0&&J(t.y)&&t.y>=0&&J(t.z)&&t.z>=0}function ro(e){if(!e||typeof e!="object")return!1;let t=e;return J(t.r)&&J(t.g)&&J(t.b)}function no(e){return J(e)&&e>0}function Wl(e){return J(e)&&e>=0}function og(e){return J(e)&&e>=0&&e<=1}function ag(e){if(!e||typeof e!="object")return!1;let t=e;return!(t.position!==void 0&&!Pr(t.position)||t.rotation!==void 0&&!Pr(t.rotation)||t.rotationDeg!==void 0&&!Pr(t.rotationDeg)||t.scale!==void 0&&!Kl(t.scale))}function ig(e){return e==="orthographic"||e==="perspective"}function sg(e){return e==="hemispheric"||e==="directional"}var oo=["group","instance","transform","primitive"],__=["instance","transform","primitive"],f6=["position","rotation","scale"],g6=["x","y","z"];function h6(e){return{path:`transform.${e}`,appliesTo:oo,validate:t=>t==null||(e==="scale"?Kl(t):Pr(t))}}function b6(e,t){return{path:`transform.${e}.${t}`,appliesTo:oo,...e==="scale"?{allowDelete:!1}:{},validate:r=>r==null||(e==="scale"?Wl(r):J(r))}}function y6(e){return[h6(e),...g6.map(t=>b6(e,t))]}var sE=[{path:"name",appliesTo:oo,validate:ts},{path:"parentId",appliesTo:oo,validate:ts},{path:"enabled",appliesTo:oo,validate:rg},{path:"shadow.cast",appliesTo:__,validate:e=>typeof e=="boolean"},{path:"shadow.receive",appliesTo:__,validate:e=>typeof e=="boolean"},{path:"transform",appliesTo:oo,validate:e=>e==null||ag(e)},...f6.flatMap(y6),{path:"transform.rotationDeg",appliesTo:oo,validate:e=>e==null||Pr(e)},{path:"transform.rotationDeg.x",appliesTo:oo,validate:e=>e==null||J(e)},{path:"transform.rotationDeg.y",appliesTo:oo,validate:e=>e==null||J(e)},{path:"transform.rotationDeg.z",appliesTo:oo,validate:e=>e==null||J(e)},{path:"instance.assetId",appliesTo:["instance"],validate:e=>typeof e=="string"&&e.trim().length>0,allowDelete:!1},{path:"primitive.shape",appliesTo:["primitive"],validate:e=>e==="cube"||e==="sphere"||e==="plane"||e==="capsule",allowDelete:!1},{path:"camera.projection",appliesTo:["transform"],validate:ig,allowDelete:!1},{path:"camera.alpha",appliesTo:["transform"],validate:J,allowDelete:!1},{path:"camera.beta",appliesTo:["transform"],validate:J,allowDelete:!1},{path:"camera.radius",appliesTo:["transform"],validate:no,allowDelete:!1},{path:"camera.orthoSize",appliesTo:["transform"],validate:no,allowDelete:!1},{path:"camera.fov",appliesTo:["transform"],validate:no,allowDelete:!1},{path:"camera.targetOffset",appliesTo:["transform"],validate:e=>e==null||Pr(e)},{path:"camera.targetOffset.x",appliesTo:["transform"],validate:J,allowDelete:!1},{path:"camera.targetOffset.y",appliesTo:["transform"],validate:J,allowDelete:!1},{path:"camera.targetOffset.z",appliesTo:["transform"],validate:J,allowDelete:!1},{path:"camera.minZ",appliesTo:["transform"],validate:no,allowDelete:!1},{path:"camera.maxZ",appliesTo:["transform"],validate:no,allowDelete:!1},{path:"camera.lowerBetaLimit",appliesTo:["transform"],validate:J,allowDelete:!1},{path:"camera.upperBetaLimit",appliesTo:["transform"],validate:J,allowDelete:!1},{path:"camera.lowerRadiusLimit",appliesTo:["transform"],validate:no,allowDelete:!1},{path:"camera.upperRadiusLimit",appliesTo:["transform"],validate:no,allowDelete:!1},{path:"camera.inertia",appliesTo:["transform"],validate:og,allowDelete:!1},{path:"camera.targetScreenOffset",appliesTo:["transform"],validate:e=>e==null||ng(e)},{path:"camera.targetScreenOffset.x",appliesTo:["transform"],validate:J,allowDelete:!1},{path:"camera.targetScreenOffset.y",appliesTo:["transform"],validate:J,allowDelete:!1},{path:"light.type",appliesTo:["transform"],validate:sg,allowDelete:!1},{path:"light.intensity",appliesTo:["transform"],validate:Wl,allowDelete:!1},{path:"light.direction",appliesTo:["transform"],validate:Pr,allowDelete:!1},{path:"light.direction.x",appliesTo:["transform"],validate:J,allowDelete:!1},{path:"light.direction.y",appliesTo:["transform"],validate:J,allowDelete:!1},{path:"light.direction.z",appliesTo:["transform"],validate:J,allowDelete:!1},{path:"light.diffuseColor",appliesTo:["transform"],validate:e=>e==null||ro(e)},{path:"light.groundColor",appliesTo:["transform"],validate:e=>e==null||ro(e)},{path:"marker.type",appliesTo:["transform"],validate:ts,allowDelete:!1},{path:"marker.kind",appliesTo:["transform"],validate:rs},{path:"marker.tags",appliesTo:["transform"],validate:e=>e==null||tg(e)},{path:"marker.note",appliesTo:["transform"],validate:ts},{path:"marker.color",appliesTo:["transform"],validate:e=>e==null||ro(e)},{path:"marker.color.r",appliesTo:["transform"],validate:e=>e==null||J(e),allowDelete:!1},{path:"marker.color.g",appliesTo:["transform"],validate:e=>e==null||J(e),allowDelete:!1},{path:"marker.color.b",appliesTo:["transform"],validate:e=>e==null||J(e),allowDelete:!1}];import{randomUUID as Du}from"node:crypto";import{readFile as OQ}from"node:fs/promises";import RQ from"node:path";var st=["instance","transform","primitive"];function xr(e){return{path:e,appliesTo:st,validate:t=>t==null||ro(t)}}function Ce(e){return{path:e,appliesTo:st,validate:t=>t==null||J(t)}}function k_(e){return{path:e,appliesTo:st,validate:t=>t==null||typeof t=="boolean"}}function St(e){return{path:e,appliesTo:st,validate:rs}}function I6(e){return{path:e,appliesTo:st,validate:t=>t==null||t==="opaque"||t==="mask"||t==="blend"}}function E6(e){return{path:e,appliesTo:st,validate:t=>t==null||t==="lit"||t==="unlit"}}var T6=[{path:"transformType",appliesTo:["transform"],validate:e=>e==null||typeof e=="string"},{path:"rendering.renderingGroupId",appliesTo:st,validate:e=>e==null||e===0||e===1||e===2||e===3},{path:"rendering.alphaIndex",appliesTo:st,validate:e=>e==null||J(e)},xr("overrides.material.albedoColor"),xr("overrides.material.diffuseColor"),xr("overrides.material.emissiveColor"),Ce("overrides.material.metallic"),Ce("overrides.material.roughness"),Ce("overrides.material.contrast"),Ce("overrides.material.brightness"),Ce("overrides.material.saturation"),Ce("overrides.material.hue"),Ce("overrides.material.colorDensity"),Ce("overrides.material.alpha"),Ce("overrides.material.alphaCutOff"),Ce("overrides.material.transparencyMode"),k_("overrides.material.backFaceCulling"),St("overrides.material.albedoTexture.url"),St("overrides.material.normalTexture.url"),Ce("overrides.material.normalTexture.level"),St("overrides.material.metallicTexture.url"),St("overrides.material.occlusionTexture.url"),St("overrides.material.emissiveTexture.url"),St("overrides.material.opacityTexture.url"),xr("overrides.material.pbr.albedoColor"),Ce("overrides.material.pbr.baseWeight"),xr("overrides.material.pbr.reflectivityColor"),Ce("overrides.material.pbr.microSurface"),xr("overrides.material.pbr.emissiveColor"),xr("overrides.material.pbr.ambientColor"),Ce("overrides.material.pbr.lightFalloff"),Ce("overrides.material.pbr.directIntensity"),Ce("overrides.material.pbr.emissiveIntensity"),Ce("overrides.material.pbr.environmentIntensity"),Ce("overrides.material.pbr.specularIntensity"),Ce("overrides.material.pbr.metallicF0Factor"),Ce("overrides.material.pbr.indexOfRefraction"),xr("overrides.material.standard.diffuseColor"),xr("overrides.material.standard.specularColor"),Ce("overrides.material.standard.specularPower"),xr("overrides.material.standard.emissiveColor"),xr("overrides.material.standard.ambientColor"),k_("overrides.material.standard.useSpecularOverAlpha"),{path:"overrides.materialBinding.materialAssetId",appliesTo:st,validate:rs},E6("overrides.materialBinding.override.lightingModel"),xr("overrides.materialBinding.override.baseColor.color"),{path:"overrides.materialBinding.override.baseColor.color.r",appliesTo:st,validate:e=>e==null||J(e),allowDelete:!1},{path:"overrides.materialBinding.override.baseColor.color.g",appliesTo:st,validate:e=>e==null||J(e),allowDelete:!1},{path:"overrides.materialBinding.override.baseColor.color.b",appliesTo:st,validate:e=>e==null||J(e),allowDelete:!1},St("overrides.materialBinding.override.baseColor.texture.url"),St("overrides.materialBinding.override.baseColor.texture.textureAssetId"),Ce("overrides.materialBinding.override.baseColor.brightness"),Ce("overrides.materialBinding.override.baseColor.saturation"),Ce("overrides.materialBinding.override.baseColor.contrast"),Ce("overrides.materialBinding.override.baseColor.hue"),St("overrides.materialBinding.override.normal.texture.url"),St("overrides.materialBinding.override.normal.texture.textureAssetId"),Ce("overrides.materialBinding.override.normal.strength"),Ce("overrides.materialBinding.override.metallic"),Ce("overrides.materialBinding.override.roughness"),St("overrides.materialBinding.override.metallicRoughness.texture.url"),St("overrides.materialBinding.override.metallicRoughness.texture.textureAssetId"),St("overrides.materialBinding.override.occlusion.texture.url"),St("overrides.materialBinding.override.occlusion.texture.textureAssetId"),Ce("overrides.materialBinding.override.occlusion.strength"),xr("overrides.materialBinding.override.emission.color"),{path:"overrides.materialBinding.override.emission.color.r",appliesTo:st,validate:e=>e==null||J(e),allowDelete:!1},{path:"overrides.materialBinding.override.emission.color.g",appliesTo:st,validate:e=>e==null||J(e),allowDelete:!1},{path:"overrides.materialBinding.override.emission.color.b",appliesTo:st,validate:e=>e==null||J(e),allowDelete:!1},Ce("overrides.materialBinding.override.emission.intensity"),St("overrides.materialBinding.override.emission.texture.url"),St("overrides.materialBinding.override.emission.texture.textureAssetId"),St("overrides.materialBinding.override.emission.maskTexture.url"),St("overrides.materialBinding.override.emission.maskTexture.textureAssetId"),I6("overrides.materialBinding.override.alpha.mode"),Ce("overrides.materialBinding.override.alpha.opacity"),Ce("overrides.materialBinding.override.alpha.cutoff"),St("overrides.materialBinding.override.alpha.texture.url"),St("overrides.materialBinding.override.alpha.texture.textureAssetId"),{path:"overrides.outline",appliesTo:st,validate:e=>e==null||A6(e)},{path:"overrides.outline.strategy",appliesTo:st,validate:e=>e==null||e==="babylon-default"},{path:"overrides.outline.renderOutline",appliesTo:st,validate:e=>e==null||typeof e=="boolean"},Ce("overrides.outline.outlineWidth"),{path:"overrides.outline.outlineColor",appliesTo:st,validate:e=>e==null||ro(e)},{path:"overrides.outline.outlineColor.r",appliesTo:st,validate:e=>e==null||J(e),allowDelete:!1},{path:"overrides.outline.outlineColor.g",appliesTo:st,validate:e=>e==null||J(e),allowDelete:!1},{path:"overrides.outline.outlineColor.b",appliesTo:st,validate:e=>e==null||J(e),allowDelete:!1}],j_=[...sE,...T6];function A6(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let t=e;return(t.strategy==null||t.strategy==="babylon-default")&&(t.renderOutline==null||typeof t.renderOutline=="boolean")&&(t.outlineWidth==null||J(t.outlineWidth))&&(t.outlineColor==null||ro(t.outlineColor))}function cE(e,t){let r=j_.find(n=>n.path===e)??null;return!r||!r.appliesTo.includes(t)?null:r}var Na="scene.materialAssets.",dE="__fps_duplicate_material_asset__:",P6="mat_";function x6(e){return String(e??"").trim().toLowerCase().replace(/[^a-z0-9]+/g,"")}function Nc(e){let t=x6(e);return`${P6}${t||"material"}`}function uE(){let e=globalThis.crypto?.randomUUID?.();if(e)return e;let t=Math.random().toString(36).slice(2,12);return`${Date.now().toString(36)}-${t}`}function Ga(e){return e==="overrides.materialBinding.materialAssetId"||ur(e,"materialAssetId")!=null}function mE(e){if(Ga(e))return!0;let t="overrides.materialBinding.override.";if(e.startsWith(t))return lE(`properties.${e.slice(t.length)}`);let r=M6(e);return r?lE(`properties.${r}`):!1}function pE(e){return e==="overrides.materialBinding.materialAssetId"||e.startsWith("overrides.materialBinding.override.")||ur(e,"materialAssetId")!=null||ur(e,"override")!=null}function ur(e,t){let r="overrides.materialSlotBindings.";if(!e.startsWith(r))return null;let n=e.slice(r.length);if(t==="materialAssetId"){let c=".materialAssetId";if(!n.endsWith(c))return null;let d=n.slice(0,-c.length);return d||null}let o=".override.",a=n.lastIndexOf(o);if(a<0)return null;let i=n.slice(0,a),s=n.slice(a+o.length);return i&&s?i:null}function M6(e){let t="overrides.materialSlotBindings.";if(!e.startsWith(t))return null;let r=e.slice(t.length),n=".override.",o=r.lastIndexOf(n);if(o<0)return null;let a=r.slice(0,o),i=r.slice(o+n.length);return a&&i?i:null}function lE(e){return e.endsWith(".texture.url")||e.endsWith(".maskTexture.url")||e.endsWith(".texture.textureAssetId")||e.endsWith(".maskTexture.textureAssetId")}function Mr(e,t){if(e==="name"&&typeof t=="string")return t.trim();if(lE(e)&&typeof t=="string"){let r=t.trim();return r||null}return(e==="properties.alpha.mode"||e==="properties.lightingModel")&&typeof t=="string"?t.trim():t}function ao(e,t,r,n=Dn){let o=Mr(e,t);if(e==="name")return typeof o=="string"&&o.length>0;let a=D6(e,r,n);return a?O6(a,o):!1}function D6(e,t,r){if(t!=null)return Ca(t,e,r);for(let n of r.list()){let o=Ca(n.shaderId,e,r);if(o)return o}return null}function O6(e,t){if(t==null)return e.kind==="texture"||e.kind==="string"&&e.nullable===!0;if(e.kind==="number")return!(!J(t)||e.min!=null&&t<e.min||e.max!=null&&t>e.max);if(e.kind==="boolean")return typeof t=="boolean";if(e.kind==="string")return typeof t=="string"&&t.trim().length>0;if(e.kind==="enum")return typeof t=="string"&&e.values.includes(t);if(e.kind==="color")return e.channels===4?C6(t):R6(t);if(e.kind==="vec2"||e.kind==="vec3"){if(!t||typeof t!="object"||Array.isArray(t))return!1;let r=t,n=e.kind==="vec2"?["x","y"]:["x","y","z"];return Object.keys(r).every(o=>n.includes(o))&&n.every(o=>J(r[o]))}if(e.kind==="texture"){if(!t||typeof t!="object"||Array.isArray(t))return!1;let r=t;return Object.keys(r).every(n=>n==="url"||n==="textureAssetId")&&["url","textureAssetId"].every(n=>r[n]===void 0||typeof r[n]=="string"&&r[n].trim().length>0)}return!1}function ql(e){return typeof e!="string"||!e.startsWith(dE)?null:e.slice(dE.length).trim()||null}function N_(e){return e.trim().replace(/^\/+|\/+$/g,"")}function R6(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let t=e;return Object.keys(t).every(r=>r==="r"||r==="g"||r==="b")&&J(t.r)&&J(t.g)&&J(t.b)}function C6(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let t=e;return Object.keys(t).every(r=>r==="r"||r==="g"||r==="b"||r==="a")&&J(t.r)&&J(t.g)&&J(t.b)&&J(t.a)}var w6={r:.78,g:.78,b:.78};function La(e,t={}){let r=e??{},n=k6(r.baseColor?.texture,t),o=_6(r,t),a=v6(r,t);return{kind:"material-sphere",baseColor:j6(r),metallic:Yl(r.metallic??0),roughness:Yl(r.roughness??1),...r.emission?.color?{emissionColor:F_(r.emission.color)}:{},emissionIntensity:N6(r.emission?.intensity,0),textureUrl:n,profile:o,properties:structuredClone(e??{}),...a.length>0?{textureResources:a}:{}}}function v6(e,t){return[["baseColor",e.baseColor?.texture],["normal",e.normal?.texture],["metallicRoughness",e.metallicRoughness?.texture],["occlusion",e.occlusion?.texture],["emission",e.emission?.texture],["emissionMask",e.emission?.maskTexture],["alpha",e.alpha?.texture]].flatMap(([n,o])=>{let a=fE(o,t);return a?[{channel:n,...a}]:[]})}function _6(e,t){let r=structuredClone(e),n=ns(r.baseColor?.texture,t);n&&(r.baseColor={...r.baseColor??{},texture:n});let o=ns(r.normal?.texture,t);o&&(r.normal={...r.normal??{},texture:o});let a=ns(r.metallicRoughness?.texture,t);a&&(r.metallicRoughness={...r.metallicRoughness??{},texture:a});let i=ns(r.occlusion?.texture,t);i&&(r.occlusion={...r.occlusion??{},texture:i});let s=ns(r.emission?.texture,t),c=ns(r.emission?.maskTexture,t);(s||c)&&(r.emission={...r.emission??{},...s?{texture:s}:{},...c?{maskTexture:c}:{}});let d=ns(r.alpha?.texture,t);return d&&(r.alpha={...r.alpha??{},texture:d}),r}function ns(e,t){if(!e)return;let r=fE(e,t);if(r?.state==="missing")return{...e,url:null};let n=r?.url;return{...e,...n?{url:n}:{}}}function k6(e,t){let r=fE(e,t);return r?.state==="ready"?r.url:void 0}function fE(e,t){let r=typeof e?.textureAssetId=="string"?e.textureAssetId.trim():"";if(r){let o=t.resolveTextureAssetUrl?.(r)?.trim();if(o)return{reference:r,state:"ready",url:o};let a=t.textureAssets?.find(i=>i.id===r)?.url?.trim();if(a)return{reference:r,state:"ready",url:a};if(t.resolveTextureAssetUrl||Array.isArray(t.textureAssets))return{reference:r,state:"missing"}}let n=typeof e?.url=="string"?e.url.trim():"";return n?{reference:r||n,state:"ready",url:n}:null}function L_(e,t){let r=e??{},n=G_(r.metallic??0),o=G_(r.roughness??1);return`M ${n} / R ${o} - ${t}`}function j6(e){let r=(e.baseColor??{}).color??w6;return F_(r)}function F_(e){return{r:Yl(e.r),g:Yl(e.g),b:Yl(e.b)}}function Yl(e){return Number.isFinite(e)?Math.min(1,Math.max(0,e)):0}function G_(e){return Number.isFinite(e)?Number.isInteger(e)?String(e):e.toFixed(2).replace(/0+$/,"").replace(/\.$/,""):"0"}function N6(e,t){return typeof e=="number"&&Number.isFinite(e)?e:t}function me(e,t){return t?e.scene.materialAssets?.find(r=>r.id===t)??null:null}function Gc(e,t){return!!me(e,t)}function W_(e,t){return t?{state:"asset",materialAssetId:t.id,materialAsset:t}:e?.materialAssetId?{state:"missing-asset",materialAssetId:e.materialAssetId}:e?.override?{state:"override"}:{state:"inherit"}}function os(e,t){let r=new Set;for(let n of gE(e,t))r.add(n.gameObjectId);return[...r]}function gE(e,t){let r=t.trim();return r?io(e).filter(n=>n.materialAssetId===r):[]}function io(e){let t=[],r=new Map(e.assets.map(n=>[n.id,n]));for(let n of e.scene.gameObjects){let o=U6(n),a=cg(n.overrides?.materialBinding);a&&t.push({kind:"root",scope:"scene",gameObjectId:n.id,gameObjectName:n.name,materialAssetId:a,bindingPath:"overrides.materialBinding.materialAssetId",label:o});let i=Qr(e,n,r),s=new Map(i.filter(d=>!!d.slotId).map(d=>[d.slotId,d])),c=n.overrides?.materialSlotBindings??{};for(let[d,u]of Object.entries(c)){let l=cg(u);if(!l)continue;let m=s.get(d),p=H6(m,d);t.push({kind:"slot",scope:"scene",gameObjectId:n.id,gameObjectName:n.name,materialAssetId:l,bindingPath:`overrides.materialSlotBindings.${d}.materialAssetId`,label:`${o} / ${p}`,slotId:d,ownerNodePath:so(m)??d})}}for(let n of e.assets)if(!(n.type!=="prefab"||!n.prefab)){$_(t,{ownerId:n.id,ownerName:n.displayName??n.id,prefabAssetId:n.id,path:`assets.${n.id}.prefab.overrides`,overrides:n.prefab.overrides});for(let o of n.prefab.nodes??[])$_(t,{ownerId:`${n.id}:${o.id}`,ownerName:`${n.displayName??n.id} / ${o.name??o.id}`,prefabAssetId:n.id,prefabNodeId:o.id,path:`assets.${n.id}.prefab.nodes.${o.id}.overrides`,overrides:o.overrides})}return t}function $_(e,t){let r=cg(t.overrides?.materialBinding);r&&e.push({kind:"root",scope:"prefab",gameObjectId:t.ownerId,gameObjectName:t.ownerName,materialAssetId:r,bindingPath:`${t.path}.materialBinding.materialAssetId`,label:t.ownerName,prefabAssetId:t.prefabAssetId,...t.prefabNodeId?{prefabNodeId:t.prefabNodeId}:{}});for(let[n,o]of Object.entries(t.overrides?.materialSlotBindings??{})){let a=cg(o);a&&e.push({kind:"slot",scope:"prefab",gameObjectId:t.ownerId,gameObjectName:t.ownerName,materialAssetId:a,bindingPath:`${t.path}.materialSlotBindings.${n}.materialAssetId`,label:`${t.ownerName} / ${n}`,slotId:n,ownerNodePath:n,prefabAssetId:t.prefabAssetId,...t.prefabNodeId?{prefabNodeId:t.prefabNodeId}:{}})}}function q_(e){let t=[...new Set((e.scene.materialAssets??[]).map(s=>s.id?.trim()).filter(s=>!!s))],r=new Set(t),n=io(e),o=n.filter(s=>!r.has(s.materialAssetId)),a=new Map;for(let s of o){let c=a.get(s.materialAssetId)??[];c.push(s),a.set(s.materialAssetId,c)}let i=[...a.entries()].map(([s,c])=>({kind:"missing-material-asset",materialAssetId:s,usages:c}));return{ok:i.length===0,materialAssetIds:t,references:n,missingMaterialAssetIds:i.map(s=>s.materialAssetId),missingReferences:o,issues:i}}function Qr(e,t,r){let n=new Map;for(let o of Xl(e,t,r))n.set(o.slotId,o);return[...n.values()].sort((o,a)=>(o.label??o.slotId).localeCompare(a.label??a.slotId)||o.slotId.localeCompare(a.slotId))}function Y_(e,t){return Xl(e,t).length>0}function Fa(e){return[...new Set(e.sourceSurfaces.map(t=>t.sourceMaterialIndex).filter(t=>Number.isInteger(t)))].sort((t,r)=>t-r)}function so(e){return e?.sourceSurfaces[0]?.ownerNodePath??null}function J_(e){return e.slotId}function Jl(e){return`overrides.materialSlotBindings.${e.slotId}.materialAssetId`}function hE(e,t){return e.overrides?.materialSlotBindings?.[t.slotId]}function Xl(e,t,r){let n=Rt(t);if(!n)return[];let a=(r?.get(n.assetId)??e.assets.find(s=>s.id===n.assetId))?.metadata?.materialSlots;if(!Array.isArray(a))return[];let i=[];for(let s of a){let c=bE(s);c&&i.push(c)}return i}function bE(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e,r=typeof t.slotId=="string"&&t.slotId.trim()?t.slotId.trim():"",n=Array.isArray(t.sourceSurfaces)?t.sourceSurfaces:null,o=G6(n);if(!r||!n||o.length===0||o.length!==n.length)return null;let a=typeof t.label=="string"&&t.label.trim()?t.label.trim():o[0].ownerNodePath,i=typeof t.materialName=="string"&&t.materialName.trim()?t.materialName.trim():"",s=Array.isArray(t.materialNames)?t.materialNames.filter(d=>typeof d=="string"&&!!d.trim()).map(d=>d.trim()):void 0,c=F6(t.sourceMaterialProfiles);return{slotId:r,label:a,sourceSurfaces:o,...i?{materialName:i}:{},...s&&s.length>0?{materialNames:s}:{},...c&&c.length>0?{sourceMaterialProfiles:c}:{}}}function G6(e){return Array.isArray(e)?e.flatMap(t=>{let r=V6(t);if(!r)return[];let n=N_(typeof r.ownerNodePath=="string"?r.ownerNodePath:""),o=Number.isInteger(r.meshIndex)&&r.meshIndex>=0?r.meshIndex:void 0,a=Number.isInteger(r.primitiveIndex)&&r.primitiveIndex>=0?r.primitiveIndex:void 0;if(!n||o==null||a==null)return[];let i=Number.isInteger(r.nodeIndex)&&r.nodeIndex>=0?r.nodeIndex:void 0,s=Array.isArray(r.nodeIndexPath)?r.nodeIndexPath.filter(m=>Number.isInteger(m)&&m>=0):void 0,c=Number.isInteger(r.sourceMaterialIndex)&&r.sourceMaterialIndex>=0?r.sourceMaterialIndex:void 0,d=typeof r.sourceMeshName=="string"&&r.sourceMeshName.trim()?r.sourceMeshName.trim():void 0,u=typeof r.triangleCount=="number"&&Number.isFinite(r.triangleCount)&&r.triangleCount>=0?r.triangleCount:void 0,l=L6(r.boundingBox);return[{ownerNodePath:n,...i!=null?{nodeIndex:i}:{},...s&&s.length>0?{nodeIndexPath:s}:{},meshIndex:o,primitiveIndex:a,...c!=null?{sourceMaterialIndex:c}:{},...d?{sourceMeshName:d}:{},...u!=null?{triangleCount:u}:{},...l?{boundingBox:l}:{}}]}):[]}function L6(e){if(!e||typeof e!="object"||Array.isArray(e))return;let t=e,r=B_(t.min),n=B_(t.max);if(!(!r&&!n))return{...r?{min:r}:{},...n?{max:n}:{}}}function B_(e){if(!Array.isArray(e)||e.length<3)return null;let[t,r,n]=e;return typeof t=="number"&&Number.isFinite(t)&&typeof r=="number"&&Number.isFinite(r)&&typeof n=="number"&&Number.isFinite(n)?[t,r,n]:null}function F6(e){if(!Array.isArray(e))return;let t=e.map($6).filter(r=>!!r);return t.length>0?t:void 0}function $6(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e;if(!Number.isInteger(t.sourceMaterialIndex))return null;let r=typeof t.materialName=="string"&&t.materialName.trim()?t.materialName.trim():"",n=t.profile&&typeof t.profile=="object"&&!Array.isArray(t.profile)?t.profile:void 0,o=B6(t.textureHints);return{sourceMaterialIndex:t.sourceMaterialIndex,...r?{materialName:r}:{},...n?{profile:n}:{},...o&&o.length>0?{textureHints:o}:{}}}function B6(e){if(!Array.isArray(e))return;let t=e.map(z6).filter(r=>!!r);return t.length>0?t:void 0}function z6(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e,r=typeof t.profilePath=="string"&&t.profilePath.trim()?t.profilePath.trim():"",n=typeof t.reason=="string"&&t.reason.trim()?t.reason.trim():"";return!r||!n?null:{profilePath:r,reason:n,...Number.isInteger(t.textureIndex)?{textureIndex:t.textureIndex}:{},...Number.isInteger(t.imageIndex)?{imageIndex:t.imageIndex}:{},...Number.isInteger(t.bufferView)?{bufferView:t.bufferView}:{},...typeof t.mimeType=="string"&&t.mimeType.trim()?{mimeType:t.mimeType.trim()}:{},...typeof t.uri=="string"&&t.uri.trim()?{uri:t.uri.trim()}:{}}}function V6(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function U6(e){return e.name?.trim()||e.id}function cg(e){return typeof e?.materialAssetId=="string"?e.materialAssetId.trim():""}function H6(e,t){return e?.label?.trim()||so(e)?.trim()||e?.slotId?.trim()||t}var dg=class{constructor(t){this.byMaterialId=new Map,this.byOwnerId=new Map;for(let r of io(t)){let n=this.byMaterialId.get(r.materialAssetId)??[];n.push(r),this.byMaterialId.set(r.materialAssetId,n);let o=this.byOwnerId.get(r.gameObjectId)??[];o.push(r),this.byOwnerId.set(r.gameObjectId,o)}}forMaterial(t){return this.byMaterialId.get(t.trim())??[]}forOwner(t){return this.byOwnerId.get(t)??[]}},z_=new WeakMap;function K6(e){let t=z_.get(e);return t||(t=new dg(e),z_.set(e,t)),t}function yE(e){return e?.system?.preset}function V_(e,t){let r=yE(e);return r==="default-pbr"?t.defaultMaterial:r==="default-standard"?t.defaultStandardMaterial:e.name||e.id}function U_(e,t){let r=yE(e);return r==="default-pbr"?t.defaultMaterialMeta:r==="default-standard"?t.defaultStandardMaterialMeta:t.formatMaterialMeta(e.id)}function W6(e,t){let r=e.currentAsset??null,n=!!r&&!e.currentValue,o=r&&!n?H_(e.document,r.id,e.ownershipText,t):null,a=r?U_(r,e.displayText):e.currentValue?e.pickerText.summaryMissingAsset:e.pickerText.summaryInherit,i=o?K_(a,o):a;return{pickerKind:"material",pickerTitle:e.pickerText.materialPickerTitle,pickerTrigger:"preview",placeholder:e.currentValue?e.pickerText.summaryMissingAsset:e.pickerText.inheritNone,...r?{currentMaterialAssetId:r.id,currentMaterialShaderId:r.shaderId,...r.definitionVersion!=null?{currentMaterialDefinitionVersion:r.definitionVersion}:{}}:{},currentLabel:r?V_(r,e.displayText):e.currentValue?e.currentValue:e.pickerText.inheritNone,currentMeta:i,...o?.usageLabel?{currentUsageLabel:o.usageLabel}:{},...o?.editImpactLabel?{currentEditImpactLabel:o.editImpactLabel}:{},...o?{currentOwnership:o}:{},currentPreview:r?La(r.properties,e.previewContext):void 0,candidates:[{label:e.pickerText.inheritNone,value:"",meta:e.pickerText.summaryInherit},...e.materialAssets.map(s=>{let c=H_(e.document,s.id,e.ownershipText,t);return{label:V_(s,e.displayText),value:s.id,meta:K_(U_(s,e.displayText),c),kind:"material",preview:La(s.properties,e.previewContext),...c?.usageLabel?{usageLabel:c.usageLabel}:{},...c?{ownership:c}:{}}})]}}function H_(e,t,r,n){if(!e||!n)return null;let o=t.trim(),a=n.forMaterial(o),i=a.length;return{materialAssetId:o,usage:{count:i,items:a.map(s=>structuredClone(s))},usageCount:i,used:i>0,shared:i>1,...r?{usageLabel:r.formatUsageCount(i),editImpactLabel:r.formatEditImpact(i),duplicateImpactLabel:r.formatDuplicateImpact(i)}:{}}}function K_(e,t){return[e,t?.usageLabel].filter(Boolean).join(" \xB7 ")}function q6(e,t,r={}){return(e.scene.materialAssets??[]).map(n=>{let o=t.forMaterial(n.id);return{id:`material:${n.id}`,assetId:n.id,kind:"material",label:n.name||n.id,meta:L_(n.properties,n.id),preview:La(n.properties,r),material:{id:n.id,name:n.name||n.id,shaderId:n.shaderId,...n.definitionVersion!=null?{definitionVersion:n.definitionVersion}:{},readonly:n.system?.readonly===!0||yE(n)!=null,usage:{count:o.length,items:o.map(a=>structuredClone(a))},properties:structuredClone(n.properties)},placeable:!1}})}var Y6={createUsageIndex(e){return new dg(e)},getCachedUsageIndex:K6,createPickerControlOptions:W6,createBrowserAssetItems:q6},Wo=Y6;var as=1,SE="prefab-root",J6="prefab-model",TE="prefab.";function Lc(e){let t=IE(e);return!t||t.prefab!=null||t.transformType==="camera"||t.transformType==="light"||t.camera!=null||t.light!=null?!1:t.kind==="primitive"||IE(t.primitive)?!0:Array.isArray(t.components)&&t.components.some(r=>{let n=IE(r)?.type;return n==="ModelRenderer"||n==="ImageRenderer"})}function IE(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}var Kue=Symbol("unsupported-editor-scene-authored-clone-value");function we(e){return e.components.find(s8)??null}function Rt(e){return e.components.find(c8)??null}function Fc(e){return e.components.find(d8)??null}function xt(e){return e?.type==="prefab"&&fe(e.prefab?.sourceAssetId)!=null}function Zr(e,t){let r=e.assets.find(n=>n.id===t);return r&&xt(r)?r:null}function Q_(e,t){return typeof t=="string"&&t.trim().length>0?e.assets.some(r=>xt(r)&&r.prefab.sourceAssetId===t):!1}function lg(e){return fe(e?.prefab?.prefabId)!=null}function Ql(e){return fe(e?.prefab?.sourceAssetId)}function Mt(e){if(!e?.prefab)return null;let t=xE(e.prefab),r=fe(e.prefab.rootNodeId);if(r&&t.some(o=>o.id===r))return r;let n=t.find(o=>o.kind==="root"&&!o.parentId);return n?n.id:null}function Ct(e){return e?.prefab?xE(e.prefab):[]}function ug(e,t){let r=fe(t);return r?Ct(e).find(n=>n.id===r)??null:null}function X6(e,t){let r=fe(t);return Ct(e).filter(n=>{let o=fe(n.parentId);return r?o===r:!o})}function Cn(e){if(!xt(e))return be(e,!1,null,[{code:"prefab.invalidDefinition",severity:"error",message:`Asset "${e.id}" is not a valid prefab definition.`,assetId:e.id}]);let t=xE(e.prefab),r=Mt(e);if(e.prefab.compositionVersion!==as||t.length===0||!r)return be(e,!1,null,[{code:"schema.unsupportedVersion",severity:"error",message:`Prefab asset "${e.id}" must use composition version ${as} with an explicit root node.`,assetId:e.id}]);let n=ok(e);return be(n,JSON.stringify(n.prefab)!==JSON.stringify(e.prefab))}function Zl(e,t,r){let n=fe(t),o=n?e.assets.find(l=>l.id===n&&xt(l)):null;if(!o)return be({id:n??String(t??""),type:"prefab",prefab:{sourceAssetId:""}},!1,null,[{code:"prefab.invalidDefinition",severity:"error",message:`Prefab asset "${t}" was not found.`,assetId:t}]);let a=uk(r);if(!a.ok)return be(o,!1,null,[{code:"prefab.invalidName",severity:"error",message:a.message,assetId:o.id}]);let i=a.name,s=i.toLowerCase(),c=e.assets.find(l=>l.id!==o.id&&xt(l)&&fe(l.displayName)?.toLowerCase()===s);if(c)return be(o,!1,null,[{code:"prefab.nameConflict",severity:"error",message:`Prefab asset name "${i}" is already used by "${c.id}".`,assetId:o.id}]);if(o.displayName===i)return be(o,!1);let d=ok({...structuredClone(o),displayName:i}),u=Mt(d);if(u&&Array.isArray(d.prefab?.nodes)){let l=d.prefab.nodes.findIndex(m=>m.id===u);l>=0&&(d.prefab.nodes=[...d.prefab.nodes],d.prefab.nodes[l]={...structuredClone(d.prefab.nodes[l]),name:i})}return be(d,!0)}function mg(e,t,r){let n=Cn(e);if(!n.ok)return n;let o=fe(t),a=o?ug(n.prefabAsset,o):null;if(!a)return be(n.prefabAsset,!1,null,[{code:"prefab.nodeNotFound",severity:"error",message:`Prefab node "${t}" was not found.`,assetId:e.id,nodeId:t}]);let i=Mt(n.prefabAsset);if(a.id===i)return be(n.prefabAsset,!1,a,[{code:"prefab.rootRenameRejected",severity:"error",message:"Prefab root node name follows the prefab asset displayName; use prefab.asset.rename instead.",assetId:e.id,nodeId:a.id}]);let s=uk(r);if(!s.ok)return be(n.prefabAsset,!1,a,[{code:"prefab.invalidName",severity:"error",message:s.message,assetId:e.id,nodeId:a.id}]);let c=s.name,u=X6(n.prefabAsset,a.parentId).find(l=>l.id!==a.id&&fe(l.name)?.toLowerCase()===c.toLowerCase());return u?be(n.prefabAsset,!1,a,[{code:"prefab.nameConflict",severity:"error",message:`Prefab node name "${c}" is already used by sibling "${u.id}".`,assetId:e.id,nodeId:a.id,parentId:a.parentId}]):Ag(n.prefabAsset,a.id,l=>({...l,name:c}))}function pg(e,t,r={}){let n=Cn(e);if(!n.ok)return n;if(t.id===e.id)return be(n.prefabAsset,!1,null,[{code:"prefab.selfReferenceRejected",severity:"error",message:`Prefab "${e.id}" cannot contain itself directly.`,assetId:t.id}]);let o=Eg(n.prefabAsset,r.parentId);if(!o.ok)return be(n.prefabAsset,!1,null,o.diagnostics);let a=Ct(n.prefabAsset),i=xt(t),s=t.type!=="prefab"&&(t.type==="glb"||t.type==="model"||t.type==="gltf");if(!i&&!s)return be(n.prefabAsset,!1,null,[{code:"prefab.assetUnsupported",severity:"error",message:`Asset "${t.id}" cannot be added to a prefab composition.`,assetId:t.id}]);let c={id:r.id??eu(a,`${i?"prefab":"model"}-${t.id}`),...r.guid?{guid:r.guid}:{},name:r.name??t.displayName??t.id,parentId:o.parentId,kind:i?"prefabInstance":"model",...r.transform?{transform:structuredClone(r.transform)}:{},...i?{childPrefabId:t.id}:{sourceAssetId:t.id},...fe(r.sourceNodePath)?{sourceNodePath:fe(r.sourceNodePath)}:{}};return Tg(n.prefabAsset,c)}function fg(e,t){let r=Cn(e);if(!r.ok)return r;let n=Eg(r.prefabAsset,t.parentId);if(!n.ok)return be(r.prefabAsset,!1,null,n.diagnostics);let o=fe(t.shape);if(!o)return be(r.prefabAsset,!1,null,[{code:"prefab.assetUnsupported",severity:"error",message:"Prefab primitive shape must be a non-empty string.",assetId:e.id}]);let a=Ct(r.prefabAsset),i={id:t.id??eu(a,`primitive-${o}`),...t.guid?{guid:t.guid}:{},name:t.name??`${o[0].toUpperCase()}${o.slice(1)}`,parentId:n.parentId,kind:"primitive",primitive:{shape:o},...t.transform?{transform:structuredClone(t.transform)}:{}};return Tg(r.prefabAsset,i)}function gg(e,t={}){let r=Cn(e);if(!r.ok)return r;let n=Eg(r.prefabAsset,t.parentId);if(!n.ok)return be(r.prefabAsset,!1,null,n.diagnostics);let o=Ct(r.prefabAsset),a={id:t.id??eu(o,"group"),...t.guid?{guid:t.guid}:{},name:t.name??"Empty",parentId:n.parentId,kind:"group",...t.transform?{transform:structuredClone(t.transform)}:{}};return Tg(r.prefabAsset,a)}function hg(e,t){let r=Cn(e);if(!r.ok)return r;let n=ek(t.markerType);if(!n)return be(r.prefabAsset,!1,null,[{code:"prefab.invalidMarkerType",severity:"error",message:"Prefab Marker type must be a valid catalog definition.",assetId:e.id}]);let o=Eg(r.prefabAsset,t.parentId);if(!o.ok)return be(r.prefabAsset,!1,null,o.diagnostics);let a=Ct(r.prefabAsset),i=eu(a,t.id??`marker-${n.type}`),s=rk(a,i,t.target??null);if(!s.ok)return be(r.prefabAsset,!1,null,[s.diagnostic]);let c=nk(t);if(!c.ok)return be(r.prefabAsset,!1,null,[c.diagnostic]);let d=Z_(n,s.target,c.values),u={id:i,...t.guid?{guid:t.guid}:{},name:t.name?.trim()||n.label,parentId:o.parentId,kind:"marker",transform:structuredClone(t.transform??t8()),marker:d};return Tg(r.prefabAsset,u)}function bg(e,t,r){let n=Cn(e);if(!n.ok)return n;let o=Ct(n.prefabAsset),a=o.find(u=>u.id===t);if(!a)return be(n.prefabAsset,!1,null,[{code:"prefab.nodeNotFound",severity:"error",message:`Prefab node "${t}" was not found.`,assetId:e.id,nodeId:t}]);if(a.kind!=="marker"||!a.marker)return be(n.prefabAsset,!1,null,[{code:"prefab.markerNodeRequired",severity:"error",message:`Prefab node "${t}" is not a Marker node.`,assetId:e.id,nodeId:t}]);let i=r.markerType===void 0?{type:a.marker.type,label:a.name??a.marker.type,kind:a.marker.kind}:ek(r.markerType);if(!i)return be(n.prefabAsset,!1,null,[{code:"prefab.invalidMarkerType",severity:"error",message:"Prefab Marker type must be a valid catalog definition.",assetId:e.id,nodeId:t}]);let s=Z6(a.marker),c=Object.prototype.hasOwnProperty.call(r,"target")?rk(o,t,r.target??null):{ok:!0,target:s};if(!c.ok)return be(n.prefabAsset,!1,null,[c.diagnostic]);let d=nk({...Object.prototype.hasOwnProperty.call(r,"tags")?{tags:r.tags}:{},...r.note!==null&&Object.prototype.hasOwnProperty.call(r,"note")?{note:r.note}:{},...r.color!==null&&Object.prototype.hasOwnProperty.call(r,"color")?{color:r.color}:{}});return d.ok?Ag(n.prefabAsset,t,u=>({...u,marker:Q6(u.marker,i,c.target,r)})):be(n.prefabAsset,!1,null,[d.diagnostic])}function Q6(e,t,r,n){let o=structuredClone(e);if(n.markerType!==void 0||Object.prototype.hasOwnProperty.call(n,"target")){let a=Z_(t,r,{});o.schemaVersion=a.schemaVersion,o.type=a.type,o.kind=a.kind,o.geometry=a.geometry,a.target?o.target=a.target:delete o.target}if(Object.prototype.hasOwnProperty.call(n,"tags")){let a=n.tags?.map(i=>i.trim()).filter(Boolean)??[];a.length>0?o.tags=a:delete o.tags}return Object.prototype.hasOwnProperty.call(n,"note")&&(n.note!==null?o.note=n.note:delete o.note),Object.prototype.hasOwnProperty.call(n,"color")&&(n.color!=null?o.color={...n.color}:delete o.color),o}function Z_(e,t,r){let n=tk(e.kind),o=t?structuredClone(t):null,a=n==="region"?{kind:"box"}:n==="object"&&o?{kind:"object-bounds",target:structuredClone(o)}:{kind:"point",...o?{target:structuredClone(o)}:{}};return{schemaVersion:1,type:e.type,kind:n,...r.tags?.length?{tags:[...r.tags]}:{},...r.note!==void 0?{note:r.note}:{},...r.color?{color:{...r.color}}:{},...o?{target:o}:{},geometry:a}}function ek(e){let t=fe(e?.type),r=fe(e?.label);return!t||!r?null:{type:t,label:r,kind:tk(e?.kind)}}function tk(e){let t=fe(e);return t==="object-bound"||t==="object-bounds"?"object":t??"point"}function rk(e,t,r){if(!r)return{ok:!0,target:null};let n=fe(r.id),o=n?e.find(i=>i.id===n):null,a=o?.kind==="marker"?"marker":"scene-object";return!n||!o||n===t||r.kind!==a?{ok:!1,diagnostic:{code:"prefab.invalidMarkerTarget",severity:"error",message:`Prefab Marker target "${n??""}" must resolve to another node in the same composition.`,nodeId:t,...n?{parentId:n}:{}}}:{ok:!0,target:{kind:a,id:n,...typeof r.label=="string"?{label:r.label}:{}}}}function Z6(e){return e.target?structuredClone(e.target):e.geometry.kind==="point"&&e.geometry.target||e.geometry.kind==="object-bounds"?structuredClone(e.geometry.target):null}function nk(e){let t=e.tags===void 0?void 0:Array.isArray(e.tags)&&e.tags.every(o=>typeof o=="string")?e.tags.map(o=>o.trim()).filter(Boolean):null,r=e.note===void 0?void 0:typeof e.note=="string"?e.note:null,n=e.color===void 0?void 0:e8(e.color);return t===null||r===null||e.color!==void 0&&!n?{ok:!1,diagnostic:{code:"prefab.invalidMarkerValue",severity:"error",message:"Prefab Marker tags, note, or color payload is invalid."}}:{ok:!0,values:{...t?.length?{tags:t}:{},...r!==void 0?{note:r}:{},...n?{color:n}:{}}}}function e8(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e,{r,g:n,b:o}=t;return EE(r)&&EE(n)&&EE(o)?{r,g:n,b:o}:null}function EE(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0&&e<=1}function t8(){return{type:"Transform",position:{x:0,y:0,z:0},rotation:{x:0,y:0,z:0},scale:{x:1,y:1,z:1}}}function yg(e,t,r){let n=Cn(e);return n.ok?!r||r.type!=="Transform"?be(n.prefabAsset,!1,null,[{code:"prefab.invalidTransform",severity:"error",message:`Prefab node "${t}" requires a Transform component payload.`,assetId:e.id,nodeId:t}]):Ag(n.prefabAsset,t,o=>({...o,transform:structuredClone(r)})):n}function Sg(e,t,r,n={}){let o=Cn(e);if(!o.ok)return o;let a=Mt(o.prefabAsset);if(t===a)return be(o.prefabAsset,!1,null,[{code:"prefab.rootReparentRejected",severity:"error",message:"Prefab root node cannot be reparented.",assetId:e.id,nodeId:t}]);let i=Ct(o.prefabAsset),s=i.find(f=>f.id===t);if(!s)return be(o.prefabAsset,!1,null,[{code:"prefab.nodeNotFound",severity:"error",message:`Prefab node "${t}" was not found.`,assetId:e.id,nodeId:t}]);if(!i.some(f=>f.id===r))return be(o.prefabAsset,!1,null,[{code:"prefab.parentNotFound",severity:"error",message:`Prefab parent node "${r}" was not found.`,assetId:e.id,nodeId:t,parentId:r}]);if(t===r||r8(i,r,t))return be(o.prefabAsset,!1,null,[{code:"prefab.cycleReparentRejected",severity:"error",message:`Prefab node "${t}" cannot be parented under its own descendant "${r}".`,assetId:e.id,nodeId:t,parentId:r}]);let c=n.beforeId??null,d=n.afterId??null;if(c&&d)return be(o.prefabAsset,!1,s,[{code:"prefab.moveAnchorAmbiguous",severity:"error",message:"Prefab node move accepts either beforeId or afterId, not both.",assetId:e.id,nodeId:t,parentId:r}]);let u=c??d,l=u?i.find(f=>f.id===u):null;if(u&&(!l||l.id===t||l.parentId!==r))return be(o.prefabAsset,!1,s,[{code:"prefab.moveAnchorInvalid",severity:"error",message:`Prefab move anchor "${u}" is not a sibling under parent "${r}".`,assetId:e.id,nodeId:t,parentId:r}]);if(!u&&n.placement===void 0)return Ag(o.prefabAsset,t,f=>({...f,parentId:r}));let m={...structuredClone(s),parentId:r},p=i.filter(f=>f.id!==t),h=u?p.findIndex(f=>f.id===u)+(d?1:0):p.length;p.splice(h,0,m);let g=structuredClone(o.prefabAsset);return g.prefab=structuredClone(g.prefab),g.prefab.compositionVersion=as,g.prefab.nodes=p,be(g,JSON.stringify(i)!==JSON.stringify(p),m,[],{selectedNodeId:t})}function Ig(e,t){let r=Cn(e);if(!r.ok)return r;let n=Mt(r.prefabAsset);if(t===n)return be(r.prefabAsset,!1,null,[{code:"prefab.rootDeleteRejected",severity:"error",message:"Prefab root node cannot be deleted.",assetId:e.id,nodeId:t}]);let o=Ct(r.prefabAsset),a=o.find(c=>c.id===t);if(!a)return be(r.prefabAsset,!1,null,[{code:"prefab.nodeNotFound",severity:"error",message:`Prefab node "${t}" was not found.`,assetId:e.id,nodeId:t}]);let i=new Set;ak(o,t,i);let s=structuredClone(r.prefabAsset);return s.prefab=structuredClone(s.prefab),s.prefab.nodes=o.filter(c=>!i.has(c.id)),be(s,!0,a,[],{deletedNodeIds:[...i]})}function be(e,t,r=null,n=[],o={}){return{ok:n.every(a=>a.severity!=="error"),changed:t,prefabAsset:e,...o.selectedNodeId?{selectedNodeId:o.selectedNodeId}:{},...o.createdNodeId?{createdNodeId:o.createdNodeId}:{},...o.deletedNodeIds?{deletedNodeIds:[...o.deletedNodeIds]}:{},...r?{node:structuredClone(r)}:{},diagnostics:n.map(a=>({...a}))}}function ok(e){let t=structuredClone(e),r=Ct(e);t.prefab=structuredClone(t.prefab),t.prefab.compositionVersion=as,t.prefab.nodes=r;let n=Mt({...e,prefab:{...e.prefab,nodes:r}});return n?t.prefab.rootNodeId=n:delete t.prefab.rootNodeId,t}function Eg(e,t){let r=Mt(e),n=fe(t)??r;return!n||!ug(e,n)?{ok:!1,diagnostics:[{code:"prefab.parentNotFound",severity:"error",message:`Prefab parent node "${n??t??"root"}" was not found.`,assetId:e.id,...n?{parentId:n}:{}}]}:{ok:!0,parentId:n}}function Tg(e,t){let r=structuredClone(e),n=Ct(e),o=eu(n,t.id),a={...structuredClone(t),id:o};r.prefab=structuredClone(r.prefab),r.prefab.compositionVersion=as;let i=Mt(e);return i?r.prefab.rootNodeId=i:delete r.prefab.rootNodeId,r.prefab.nodes=[...n,a],be(r,!0,a,[],{createdNodeId:a.id,selectedNodeId:a.id})}function Ag(e,t,r){let n=Ct(e),o=n.findIndex(d=>d.id===t);if(o<0)return be(e,!1,null,[{code:"prefab.nodeNotFound",severity:"error",message:`Prefab node "${t}" was not found.`,assetId:e.id,nodeId:t}]);let a=r(structuredClone(n[o])),i=[...n];i[o]=a;let s=structuredClone(e);s.prefab=structuredClone(s.prefab),s.prefab.compositionVersion=as;let c=Mt(e);return c?s.prefab.rootNodeId=c:delete s.prefab.rootNodeId,s.prefab.nodes=i,be(s,JSON.stringify(n[o])!==JSON.stringify(a),a,[],{selectedNodeId:a.id})}function eu(e,t){let r=new Set(e.map(i=>i.id)),n=pk(t)??"prefab_node";if(!r.has(n))return n;let o=1,a=`${n}_${o}`;for(;r.has(a);)o+=1,a=`${n}_${o}`;return a}function r8(e,t,r){let n=e.find(a=>a.id===t),o=new Set;for(;n?.parentId;){if(n.parentId===r)return!0;if(o.has(n.parentId))return!1;o.add(n.parentId),n=e.find(a=>a.id===n?.parentId)}return!1}function ak(e,t,r){if(!r.has(t)){r.add(t);for(let n of e.filter(o=>o.parentId===t))ak(e,n.id,r)}}function PE(e,t={}){let r={...t.defaults??{},shadow:t.defaults?.shadow??{cast:"none",receive:"none"}},{shadow:n,...o}=r;return{id:t.id??`${e.id}-prefab`,...t.guid?{guid:t.guid}:{},type:"prefab",displayName:t.displayName??AE(e),category:t.category??"Prefab",prefab:{sourceAssetId:e.id,...e.guid?{sourceAssetGuid:e.guid}:{},defaults:r,compositionVersion:as,rootNodeId:SE,nodes:[{id:SE,name:t.displayName??AE(e),kind:"root",...Object.keys(o).length>0?{defaults:o}:{}},{id:J6,name:e.displayName??e.id,parentId:SE,kind:"model",sourceAssetId:e.id}]},...t.metadata?{metadata:{...t.metadata}}:{}}}function xE(e){if(!Array.isArray(e.nodes))return[];let t=[];for(let r of e.nodes){let n=n8(r);n&&!t.some(o=>o.id===n.id)&&t.push(n)}return structuredClone(t)}function n8(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e,r=fe(t.id);return!r||!o8(t.kind)?null:{id:r,...fe(t.guid)?{guid:fe(t.guid)}:{},...fe(t.name)?{name:fe(t.name)}:{},...fe(t.parentId)?{parentId:fe(t.parentId)}:{},kind:t.kind,...t.transform?{transform:structuredClone(t.transform)}:{},...fe(t.sourceAssetId)?{sourceAssetId:fe(t.sourceAssetId)}:{},...fe(t.sourceNodePath)?{sourceNodePath:fe(t.sourceNodePath)}:{},...fe(t.childPrefabId)?{childPrefabId:fe(t.childPrefabId)}:{},...t.primitive?{primitive:structuredClone(t.primitive)}:{},...t.light?{light:structuredClone(t.light)}:{},...t.marker?{marker:structuredClone(t.marker)}:{},...t.defaults?{defaults:structuredClone(t.defaults)}:{},...t.overrides?{overrides:structuredClone(t.overrides)}:{},...t.metadata?{metadata:structuredClone(t.metadata)}:{}}}function o8(e){return e==="root"||e==="group"||e==="model"||e==="primitive"||e==="light"||e==="prefabInstance"||e==="marker"||e==="collision"}function ik(e){let t=Ql(e.prefabAsset);if(!t)throw new Error(`Prefab asset "${e.prefabAsset.id}" does not define a source asset.`);let r=e.prefabAsset.prefab?.defaults;return{id:e.id,...e.guid?{guid:e.guid}:{},name:e.name??e.prefabAsset.displayName??e.prefabAsset.id,kind:"instance",...e.parentId?{parentId:e.parentId}:{},active:e.active??r?.active??!0,prefab:{prefabId:e.prefabAsset.id,...e.prefabAsset.guid?{prefabGuid:e.prefabAsset.guid}:{},sourceAssetId:t},...e.metadata?{metadata:{...e.metadata}}:{},...e.overrides!==void 0?{overrides:e.overrides}:{},components:[e.transform,{type:"ModelRenderer",assetId:t}]}}function sk(e,t,r={}){let n=mk(e,t);if(!n)return null;let o=Rt(n),a=fe(o?.assetId);if(!a)return null;let i=e.assets.find(c=>c.id===a);if(!i||xt(i))return null;let s=r.displayName??AE({id:n.id,displayName:n.name??i.displayName});return PE(i,{id:r.id??ru(e,`${n.id}-prefab`),guid:r.guid??r.createGuid?.()??xg(),displayName:s,category:r.category,defaults:r.defaults,metadata:r.metadata})}function ck(e,t,r={}){let n=e.assets.find(i=>i.id===t);if(!n||!xt(n))return null;let o=structuredClone(n.prefab),a=r.displayName??l8(e.assets.map(i=>i.displayName??i.id),`${n.displayName??n.id} Copy`);return{...structuredClone(n),id:r.id??ru(e,`${n.id}_copy`),guid:r.guid??r.createGuid?.()??xg(),displayName:a,category:r.category??n.category,prefab:{...o,...o.defaults?{defaults:{...o.defaults}}:{}},...r.metadata?{metadata:{...r.metadata}}:{}}}function dk(e){if(!e.startsWith(TE))return null;let t=e.slice(TE.length);return pE(t)?t:null}function ME(e){return dk(e)?.endsWith(".materialAssetId")===!0}function Pg(e){return e.startsWith(TE)&&e.endsWith(".materialAssetId")&&ME(e)}function tu(e,t,r){let n=dk(t);if(!n||!xt(e))return e;let o=u8(n);if(!o)return e;let a=structuredClone(e);a.prefab=structuredClone(a.prefab??e.prefab),p8(a.prefab,o,r);let i=fk(a.prefab?.overrides);return i?a.prefab.overrides=i:delete a.prefab.overrides,JSON.stringify(a)===JSON.stringify(e)?e:a}function lk(e,t){let r=fe(e?.materialAssetId),n=fe(t?.materialAssetId),o=Cs(e?.override,t?.override);return DE({...n??r?{materialAssetId:n??r}:{},...is(o)?{override:o}:{}})}function a8(e,t){let r={},n=lk(e?.materialBinding,t?.materialBinding);n&&(r.materialBinding=n);let o=g8(e?.materialSlotBindings,t?.materialSlotBindings);return o&&(r.materialSlotBindings=o),is(r)?r:void 0}function $c(e,t){let r=i8(e,t);if(!(!r.gameObject||!r.prefab))return a8(r.definition?.prefab?.overrides,h8(r.gameObject.overrides))}function i8(e,t){let r=typeof t=="string"?mk(e,t):t,n=typeof t=="string"?t:t.id,o=[],a=lg(r)?r.prefab:null;if(!r||!a)return o.push({code:"not-prefab-instance",severity:"info",message:r?`GameObject "${r.id}" is not a prefab instance.`:`GameObject "${n}" was not found.`}),{gameObject:r,prefab:null,definition:null,sourceAsset:null,diagnostics:o};let i=e.assets.find(d=>d.id===a.prefabId&&xt(d));i||o.push({code:"missing-prefab-definition",severity:"error",message:`Prefab definition "${a.prefabId}" was not found.`,prefabId:a.prefabId});let s=Ql(i)??fe(a.sourceAssetId);i&&a.sourceAssetId&&s&&a.sourceAssetId!==s&&o.push({code:"source-asset-mismatch",severity:"warning",message:`Prefab instance source "${a.sourceAssetId}" does not match definition source "${s}".`,prefabId:a.prefabId,expectedSourceAssetId:s,actualSourceAssetId:a.sourceAssetId});let c=s?e.assets.find(d=>d.id===s):void 0;if(s&&!c&&o.push({code:"missing-source-asset",severity:"error",message:`Prefab source asset "${s}" was not found.`,prefabId:a.prefabId,sourceAssetId:s}),s){let d=e.assets.filter(u=>xt(u)&&Ql(u)===s).map(u=>u.id);d.length>1&&o.push({code:"duplicate-source-prefab",severity:"info",message:`Source asset "${s}" is referenced by ${d.length} prefab definitions.`,prefabId:a.prefabId,sourceAssetId:s})}return{gameObject:r,prefab:a,definition:i??null,sourceAsset:c??null,diagnostics:o}}function It(e){return e.kind==="group"||e.kind==="instance"||e.kind==="transform"||e.kind==="primitive"?e.kind:lg(e)?"instance":e.primitive?"primitive":Rt(e)?"instance":Fc(e)||e.transformType?"transform":"group"}function s8(e){return e.type==="Transform"}function c8(e){return e.type==="ModelRenderer"}function d8(e){return e.type==="ImageRenderer"}function fe(e){return typeof e=="string"&&e.trim().length>0?e.trim():null}function uk(e){if(typeof e!="string")return{ok:!1,message:"Prefab name must be a string."};let t=e.trim();return t?t.length>80?{ok:!1,message:"Prefab name cannot be longer than 80 characters."}:/[\u0000-\u001f\u007f/\\]/u.test(t)?{ok:!1,message:"Prefab name cannot contain control characters, /, or \\."}:{ok:!0,name:t}:{ok:!1,message:"Prefab name cannot be empty."}}function mk(e,t){return e.scene.gameObjects.find(r=>r.id===t)??null}function AE(e){return`${fe(e.displayName)??fe(e.id)??"Prefab"} Prefab`}function xg(){return`prefab_${globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`}`}function ru(e,t){let r=new Set(e.assets.map(i=>i.id)),n=pk(t)??"prefab";if(!r.has(n))return n;let o=1,a=`${n}_${o}`;for(;r.has(a);)o+=1,a=`${n}_${o}`;return a}function l8(e,t){let r=new Set(e.map(a=>fe(a)).filter(a=>!!a));if(!r.has(t))return t;let n=1,o=`${t} ${n}`;for(;r.has(o);)n+=1,o=`${t} ${n}`;return o}function pk(e){let t=fe(e);return t&&t.replace(/\s+/g,"_").replace(/[^a-zA-Z0-9_:-]/g,"_").replace(/_+/g,"_").replace(/^_+|_+$/g,"")||null}function u8(e){if(e==="overrides.materialBinding.materialAssetId")return["overrides","materialBinding","materialAssetId"];let t="overrides.materialBinding.override.";if(e.startsWith(t)){let o=e.slice(t.length);return X_(["overrides","materialBinding","override"],o)}let r=ur(e,"materialAssetId");if(r)return["overrides","materialSlotBindings",r,"materialAssetId"];let n=ur(e,"override");if(n){let o=m8(e);return o?X_(["overrides","materialSlotBindings",n,"override"],o):null}return null}function m8(e){let t=".override.",r=e.lastIndexOf(t);if(r<0)return null;let n=e.slice(r+t.length);return n||null}function X_(e,t){let r=t.split(".").filter(Boolean);return r.length===0||r.some(gk)?null:[...e,...r]}function p8(e,t,r){if(t.some(gk))return;let n=e;for(let a of t.slice(0,-1)){let i=n[a];(!i||typeof i!="object"||Array.isArray(i))&&(n[a]={}),n=n[a]}let o=t[t.length-1];o&&(r==null?delete n[o]:n[o]=structuredClone(r))}function fk(e){if(!e||typeof e!="object"||Array.isArray(e))return;let t=e,r={},n=DE(t.materialBinding);n&&(r.materialBinding=n);let o=f8(t.materialSlotBindings);return o&&(r.materialSlotBindings=o),is(r)?r:void 0}function DE(e){if(!e||typeof e!="object"||Array.isArray(e))return;let t=e,r=fe(t.materialAssetId),n=Cs(t.override),o={...r?{materialAssetId:r}:{},...is(n)?{override:n}:{}};return is(o)?o:void 0}function f8(e){if(!e||typeof e!="object"||Array.isArray(e))return;let t={};for(let[r,n]of Object.entries(e)){let o=fe(r);if(!o)continue;let a=DE(n);a&&(t[o]=a)}return is(t)?t:void 0}function g8(e,t){let r=new Set([...Object.keys(e??{}),...Object.keys(t??{})]),n={};for(let o of r){let a=lk(e?.[o],t?.[o]);a&&(n[o]=a)}return is(n)?n:void 0}function h8(e){return fk(e)}function is(e){return!!e&&typeof e=="object"&&!Array.isArray(e)&&Object.keys(e).length>0}function gk(e){return e==="__proto__"||e==="prototype"||e==="constructor"}function hk(e,t){let r=yk(e);if(r||ss("schema.invalidType",t),r.type!=="Transform"&&ss("schema.invalidValue",`${t}.type`),r.mode==="matrix"){RE(r,["type","mode","matrix"],t),(!Array.isArray(r.matrix)||r.matrix.length!==16)&&ss("schema.invalidType",`${t}.matrix`),r.matrix.forEach((n,o)=>bk(n,`${t}.matrix[${o}]`));return}RE(r,["type","mode","position","rotation","scale"],t),r.mode!==void 0&&r.mode!=="trs"&&ss("schema.invalidValue",`${t}.mode`),OE(r.position,`${t}.position`),OE(r.rotation,`${t}.rotation`),r.scale!==void 0&&OE(r.scale,`${t}.scale`)}function OE(e,t){let r=yk(e);r||ss("schema.invalidType",t),RE(r,["x","y","z"],t);for(let n of["x","y","z"])bk(r[n],`${t}.${n}`)}function RE(e,t,r){let n=new Set(t);for(let o of Object.keys(e))n.has(o)||ss("schema.invalidValue",`${r}.${o}`)}function bk(e,t){(typeof e!="number"||!Number.isFinite(e))&&ss("schema.invalidValue",t)}function yk(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function ss(e,t){throw new Error(`${e}: ${t}`)}function co(e,t,r){let n=t.split(".").filter(Boolean);if(n.some(b8))return;let o=e;for(let i of n.slice(0,-1)){let s=o[i];(!s||typeof s!="object"||Array.isArray(s))&&(o[i]={}),o=o[i]}let a=n[n.length-1];a&&(r==null?delete o[a]:o[a]=structuredClone(r))}function b8(e){return e==="__proto__"||e==="prototype"||e==="constructor"}function CE(e){let t=$a(e.overrides);if(!t)return;let r=Sk(t.material);r?t.material=r:delete t.material;let n=$a(t.materialSlotBindings);if(n){for(let[i,s]of Object.entries(n)){let c=$a(s);if(!c){delete n[i];continue}let d=Sk(c.override);d?c.override=d:delete c.override,Object.keys(c).length===0&&delete n[i]}Object.keys(n).length===0&&delete t.materialSlotBindings}let o=$a(t.childTransforms);o&&Object.keys(o).length===0&&delete t.childTransforms;let a=$a(t.childOutlines);a&&Object.keys(a).length===0&&delete t.childOutlines,Object.keys(t).length===0&&delete e.overrides}function Sk(e){let t=$a(e);if(!t)return;let r=structuredClone(t);for(let n of["albedoTexture","normalTexture","metallicTexture"]){let o=$a(r[n]);o&&Object.keys(o).length===0&&delete r[n]}for(let n of["pbr","standard"]){let o=$a(r[n]);o&&Object.keys(o).length===0&&delete r[n]}return Object.keys(r).length>0?r:void 0}function $a(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function Ik(e,t){if(y8(e))try{return e[t]}catch{return}}function y8(e){return!!e&&(typeof e=="object"||typeof e=="function")}function Mg(e,t=new WeakSet,r=0){if(e==null||typeof e=="string"||typeof e=="boolean")return e;if(typeof e=="number")return Number.isFinite(e)?S8(e):"[NonFiniteNumber]";if(typeof e=="bigint")return String(e);if(typeof e=="function")return`[Function ${e.name||"anonymous"}]`;if(typeof e=="symbol"||typeof e!="object")return String(e);if(t.has(e))return"[Circular]";if(r>6)return"[MaxDepth]";if(t.add(e),Array.isArray(e))return e.map(a=>Mg(a,t,r+1));let n=e,o={};for(let a of Object.keys(n).sort())o[a]=Mg(Ik(n,a),t,r+1);return o}function S8(e){return Math.round(e*1e6)/1e6}function Dg(e){let t=e.properties.filter(r=>!!r).map((r,n)=>r.order==null?{...r,order:n}:r);return t.length===0&&e.omitWhenEmpty!==!1?null:{id:e.id,title:e.title,order:e.order,placement:"body",summary:e.summary,persistence:e.persistence??(e.runtimeOnly?"runtime":"readonly"),runtimeOnly:e.runtimeOnly,effect:e.effect??(e.runtimeOnly?"runtime":void 0),disabledReason:e.disabledReason,collapsedByDefault:e.collapsedByDefault,tags:e.tags,properties:t}}function wn(e){if(!I8(e.value))return null;let t=Mg(e.value);return{path:e.path,label:e.label,valueType:e.valueType??E8(t),control:"readonly",value:t,readOnly:!0,persistence:e.persistence??"readonly",commitMode:"blur",order:e.order,tags:A8(e.source,e.tags),tooltip:e.tooltip,effect:e.effect??T8(e.source,e.persistence),disabledReason:e.disabledReason}}function Bc(e){let t=Object.fromEntries(Object.entries(e.params).filter(r=>typeof r[1]=="string"&&r[1].length>0));return{path:e.path,label:e.label,valueType:"string",control:"custom",customControl:"inspector-action-button",controlOptions:{actionId:e.actionId,label:e.buttonLabel??e.label,icon:e.icon,params:t,...e.disabled?{disabled:!0}:{},...e.disabledReason?{disabledReason:e.disabledReason}:{}},value:e.actionId,readOnly:!1,persistence:"readonly",commitMode:"immediate",order:e.order,tooltip:e.disabledReason??e.tooltip,effect:e.effect,disabledReason:e.disabled?e.disabledReason:void 0}}function I8(e){return e!=null&&!(typeof e=="number"&&!Number.isFinite(e))}function E8(e){return typeof e=="string"?"string":typeof e=="number"?"number":typeof e=="boolean"?"boolean":e&&typeof e=="object"?"object":"unknown"}function T8(e,t){if(t==="runtime"||e==="Runtime")return"runtime";if(e==="Derived")return"derived"}function A8(e,t){let r=[...e?[e]:[],...t??[]];return r.length>0?[...new Set(r)]:void 0}var Ek={x:-.3,y:-1,z:-.2};var _E=-90,kE=90;function Cg(e,t=Ek){let r=e&&D8(e)?e:t,n=Math.hypot(r.x,r.y,r.z);if(!Number.isFinite(n)||n<=1e-6){let o=Math.hypot(t.x,t.y,t.z)||1;return{x:t.x/o,y:t.y/o,z:t.z/o}}return{x:r.x/n,y:r.y/n,z:r.z/n}}function P8(e,t){let r=Rg(vg(e)),n=Rg(xk(t,_E,kE)),o=Math.cos(n);return{x:wE(o*Math.cos(r)),y:wE(-Math.sin(n)),z:wE(o*Math.sin(r))}}function x8(e,t=Ek){let{horizontalAngleDeg:r,elevationAngleDeg:n}=O8({direction:t,rotation:e});return P8(r,n)}function M8(e,t){let r=Ak(e);return{x:Rg(r.elevationAngleDeg),y:Rg(r.horizontalAngleDeg),z:vE(t?.z)?t.z:0}}function zc(e){if(!Tk(e.light))return e;let t=we(e);if(!t||!("rotation"in t))return e;let r=x8(t.rotation,e.light.direction);return Pk(r,Cg(e.light.direction))?e:{...e,light:{...e.light,direction:r}}}function wg(e){if(!Tk(e.light))return e;let t=we(e);if(!t||!("rotation"in t))return e;let r=M8(e.light.direction,t.rotation);return Pk(r,t.rotation)?e:{...e,components:e.components.map(n=>n===t?{...t,rotation:r}:n)}}function vg(e){let t=((e+180)%360+360)%360-180;return t===-180?180:t}function D8(e){return typeof e.x=="number"&&Number.isFinite(e.x)&&typeof e.y=="number"&&Number.isFinite(e.y)&&typeof e.z=="number"&&Number.isFinite(e.z)}function Tk(e){return e?.type==="directional"}function Ak(e){let t=Cg(e);return{horizontalAngleDeg:vg(Og(Math.atan2(t.z,t.x))),elevationAngleDeg:Og(Math.asin(xk(-t.y,-1,1)))}}function O8(e){let t=Ak(e.direction);return{horizontalAngleDeg:vE(e.rotation?.y)?Og(e.rotation.y):t.horizontalAngleDeg,elevationAngleDeg:vE(e.rotation?.x)?Og(e.rotation.x):t.elevationAngleDeg}}function vE(e){return typeof e=="number"&&Number.isFinite(e)}function Pk(e,t,r=1e-6){return Math.abs(e.x-t.x)<=r&&Math.abs(e.y-t.y)<=r&&Math.abs(e.z-t.z)<=r}function Og(e){return e*180/Math.PI}function Rg(e){return e*Math.PI/180}function wE(e){return Math.round(e*1e6)/1e6}function xk(e,t,r){return Math.min(r,Math.max(t,e))}var jE="light.directionHorizontalAngleDeg",NE="light.directionElevationAngleDeg";function Mk(e,t){if(t==null||typeof t=="string"&&!t.trim())return null;let r=R8(t);return r==null?t:e===jE?Math.round(vg(r)):e===NE?Math.round(C8(r,_E,kE)):t}function R8(e){if(typeof e!="number"&&typeof e!="string"||typeof e=="string"&&!e.trim())return null;let t=typeof e=="number"?e:Number(e);return Number.isFinite(t)?t:null}function C8(e,t,r){return Math.min(r,Math.max(t,e))}function GE(e){return t=>Vc({...e,value:t})}function Vc(e){let t=w8(e);if(t)return t;let r=cE(e.path,e.nodeKind);return r?e.value==null&&r.allowDelete===!1?{ok:!1,message:`Scene node field cannot be deleted: ${e.path}.`}:r.validate(e.value)?{ok:!0,value:e.value}:{ok:!1,message:`Invalid value for scene node field: ${e.path}.`}:{ok:!1,message:`Unsupported scene node field: ${e.path}.`}}function _g(e,t){return/^overrides\.material\.(albedoTexture|normalTexture|metallicTexture)\.url$/.test(e)&&typeof t=="string"?Dk(t):t}function LE(e,t,r={}){if((r.isDirectionalLightAnglePath??Ok)(e))return Mk(e,t);if(e==="marker.type"&&typeof t=="string"||e==="marker.target.objectId"&&typeof t=="string")return t.trim();if(e==="marker.tags")return _8(t);if(e==="marker.note"&&typeof t=="string"){let n=t.trim();return n||null}return mE(e)&&typeof t=="string"?Dk(t):_g(e,t)}function FE(e){return t=>v8(t,e)}function w8(e){for(let t of e.extraValidators??[]){let r=t({path:e.path,nodeKind:e.nodeKind,value:e.value,document:e.document});if(r)return r}return null}function v8(e,t){if(e.path==="camera.inspectorLanguage")return e.value==="zh"||e.value==="en"?{ok:!0,value:e.value}:{ok:!1,message:"Invalid value for scene node field: camera.inspectorLanguage."};if(e.path==="light.inspectorLanguage")return e.value==="zh"||e.value==="en"?{ok:!0,value:e.value}:{ok:!1,message:"Invalid value for scene node field: light.inspectorLanguage."};if((t.isDirectionalLightAnglePath??Ok)(e.path))return typeof e.value=="number"&&Number.isFinite(e.value)?{ok:!0,value:e.value}:{ok:!1,message:`Invalid value for scene node field: ${e.path}.`};if(e.path==="metadata.artistMaterialInspectorLanguage")return e.value==="zh"||e.value==="en"?{ok:!0,value:e.value}:{ok:!1,message:`Invalid value for scene node field: ${e.path}.`};if(e.path==="instance.assetId"&&e.document&&typeof e.value=="string"&&!(e.document.assets??[]).some(r=>r.id===e.value))return{ok:!1,message:`Asset not found: ${e.value}.`};if(Ga(e.path)&&e.document&&typeof e.value=="string"&&e.value&&!t.hasMaterialAsset(e.document,e.value))return{ok:!1,message:`Material asset not found: ${e.value}.`};if(Ga(e.path))return e.value==null||typeof e.value=="string"&&e.value.trim().length>0?{ok:!0,value:e.value}:{ok:!1,message:`Invalid value for scene node field: ${e.path}.`};if(mE(e.path))return e.value==null||typeof e.value=="string"&&e.value.trim().length>0?{ok:!0,value:e.value}:{ok:!1,message:`Invalid value for scene node field: ${e.path}.`};if(e.path==="marker.target.objectId"){if(typeof e.value!="string")return{ok:!1,message:"Marker target must be a scene object id."};let r=e.value.trim();if(!r)return{ok:!0,value:""};let n=e.document?.scene?.gameObjects?.find(o=>o.id===r)??null;return n&&!t.isMarkerGameObject(n)?{ok:!0,value:r}:{ok:!1,message:`Marker target object not found: ${r}.`}}return null}function Dk(e){let t=e.trim();return t||null}function _8(e){let r=(Array.isArray(e)?e:typeof e=="string"?e.split(","):[]).map(n=>typeof n=="string"?n.trim():"").filter((n,o,a)=>n.length>0&&a.indexOf(n)===o);return r.length>0?r:null}function Ok(e){return e===jE||e===NE}function nu(e){return{...e.property,readOnly:!1,persistence:"document",document:e.document??void 0,validate:GE({path:e.property.path,nodeKind:e.nodeKind,document:e.document,extraValidators:e.extraValidators})}}function vn(e,t){return t==="scale"?e.scale??{x:1,y:1,z:1}:e[t]}function Ba(e){return e*180/Math.PI}function za(e){return e*Math.PI/180}function Uc(e){return Math.round(e*1e6)/1e6}var Rk="scene.main",Ck="scene";function wk(e){let t=e.meta?.authoringSource;return{sourceId:t?.sourceId||Rk,sourceType:t?.sourceType||Ck,revision:typeof t?.revision=="number"?t.revision:1}}function vk(e){let t=k8(e);return t.shadows.planar.enabled?"planar":t.shadows.blob.enabled?"blob":t.shadows.staticProjected.enabled?"static":t.shadows.enabled?"dynamic":"none"}function k8(e){return e&&typeof e=="object"&&"environment"in e&&"postProcess"in e&&"shadows"in e&&"renderingGroups"in e&&"shadowMeshes"in e?e:mt(e)}var j8="main_camera",N8="environment_light",G8="sun_light";function $E(e){return It(e)==="group"}function Va(e){return!!we(e)}function ou(e){return It(e)==="transform"&&(e.transformType==="camera"||!!e.camera)}function _k(e){return It(e)==="transform"&&(e.transformType==="light"||!!e.light)}function qo(e){return e.id===j8||e.id===N8||e.id===G8||ou(e)||_k(e)}var Hc="root",L8="go_",BE="GameObject";function Et(e){return e===Hc}function wt(e){return Et(e.id)}function Yo(){let e=globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;return`${L8}${e}`}function Ua(e,t){let r=new Set(e),n=Kc(t)||"game_object";if(!r.has(n))return n;let o=2;for(;r.has(`${n}_${o}`);)o+=1;return`${n}_${o}`}function kk(e,t=BE){return zE(e)??zE(t)??BE}function Jo(e,t,r={}){let n=kk(t,r.fallbackName??BE),o=new Set(e.map(s=>zE(s)).filter(s=>!!s));if(!r.alwaysAppendSuffix&&!o.has(n))return n;let a=1,i=`${n}_${a}`;for(;o.has(i);)a+=1,i=`${n}_${a}`;return i}function zE(e){let t=String(e??"").trim();return t&&t.replace(/\s+/g,"_").replace(/_+/g,"_").replace(/^_+|_+$/g,"")||null}function Kc(e){return e.trim().toLowerCase().replace(/[^a-z0-9_]+/g,"_").replace(/^_+|_+$/g,"")||"asset"}var F8=On();function lo(e,t){if(Et(t))return On();let r=ke(e,t);if(!r)return null;let n=[],o=jk(e),a=new Set,i=r;for(;i&&!a.has(i.id);)a.add(i.id),n.unshift(i),i=i.parentId?o.get(i.parentId):void 0;return Uv(n.map(cs))}function ke(e,t){return e.scene.gameObjects.find(r=>r.id===t)??null}function jk(e){return new Map(e.scene.gameObjects.map(t=>[t.id,t]))}function kg(e,t,r,n){let o=t?lo(e,t):On();return o?Vf(o,r,n):null}function au(e,t,r,n={}){let o=Hf(n);return kg(e,t,r,{allowMatrixFallback:o.allowMatrixFallback})}function cs(e){return wt(e)?On():jg(e)}function jg(e){let t=we(e);return t?Ft(t)?zf(t.matrix)??On():{position:{...t.position},rotation:{...t.rotation},scale:{...$8(t,"scale")}}:On()}function Nk(e,t){return{...e,components:e.components.map(r=>r.type!=="Transform"?r:Xo(t)??r)}}function Xo(e){let t=ds(e);return t?Jr(t)?{type:"Transform",mode:"matrix",matrix:t.matrix}:{type:"Transform",...t.mode==="trs"?{mode:"trs"}:{},position:{...t.position},rotation:{...t.rotation},scale:{...t.scale}}:null}function ds(e){return Jr(e)?zf(e.matrix):Fv(e)}function Ha(e){let t=Xo(e);if(!t)throw new Error("Invalid matrix Transform component.");return t}function Ft(e){return e.mode==="matrix"}function VE(e){return e.mode!=="matrix"}function $8(e,t){return B8(e)?t==="scale"?e.scale??{x:1,y:1,z:1}:e[t]:t==="scale"?{x:1,y:1,z:1}:{x:0,y:0,z:0}}function B8(e){return!!e.position&&!!e.rotation}function Jt(e){return e.scene.gameObjects.find(t=>t.id===Hc&&!!we(t))?.id??e.scene.gameObjects.find(t=>!t.parentId&&!!we(t))?.id}function Qo(e){let t=Jt(e),r=new Map(e.scene.gameObjects.map(n=>[n.id,n]));return e.scene.gameObjects.filter(n=>n.id!==Hc).map(n=>{let o=qo(n),a=Va(n),i=n.active!==!1;return{id:n.id,label:n.name??n.id,parentId:n.parentId===t?null:n.parentId??null,depth:Math.max(0,V8(r,n)-(t?1:0)),role:a&&$E(n)?"group":"object",...lg(n)?{icon:"prefab"}:{},selectable:!0,enabled:i&&U8(r,n.parentId,t),directEnabled:i,canToggleEnabled:!o,enableToggleDisabledReason:o?"Protected system objects cannot be hidden from Hierarchy.":void 0,protected:o,canHaveChildren:!o&&a,renamable:!o,deletable:!o,draggable:!o}})}function V8(e,t){let r=new Set,n=0,o=t.parentId??null;for(;o;){if(r.has(o))return n;r.add(o);let a=e.get(o);if(!a)return n;n+=1,o=a.parentId??null}return n}function U8(e,t,r){let n=new Set,o=t??null;for(;o;){if(n.has(o))return!0;n.add(o);let a=e.get(o);if(!a)return!0;if(a.id!==r&&a.active===!1)return!1;o=a.parentId??null}return!0}function UE(e,t){return[...en(e,t)]}function en(e,t){let r=new Set,n=new Map;for(let i of e.scene.gameObjects){r.add(i.id);let s=i.parentId;if(!s)continue;let c=n.get(s);c?c.push(i.id):n.set(s,[i.id])}let o=new Set,a=[];for(let i of t)!r.has(i)||o.has(i)||(o.add(i),a.push(i));for(let i=0;i<a.length;i+=1)for(let s of n.get(a[i])??[])o.has(s)||(o.add(s),a.push(s));return o}function WE(e){let t=[Gk(e)],r=Fk(e);r&&t.push(r);let n=zk(e);n&&t.push(n);let o=Hk(e);o&&t.push(o);let a=qk(e);a&&t.push(a);let i=W8(e);i&&t.push(i);let s=Xk(e);s&&t.push(s);let c=Qk(e);c&&t.push(c);let d=ej(e);return d&&t.push(d),t}function Gk(e){return{id:"common",title:"Common",order:10,placement:"body",summary:Gg(e),persistence:"document",collapsedByDefault:!1,properties:Lk(e)}}function Lk(e){let{document:t,gameObject:r}=e,n=Gg(e),o=[Dr("id","ID",r.id,0),uo(e,{document:t,path:"name",label:"Name",valueType:"string",control:"string",value:r.name??r.id,commitMode:"blur",order:1}),uo(e,{document:t,path:"enabled",label:"Enabled",valueType:"boolean",control:"boolean",value:r.active!==!1,commitMode:"immediate",order:2}),Dr("kind.resolved","Resolved Kind",n,3),Dr("kind.explicit","Explicit Kind",r.kind??"inferred",4),Dr("common.activeField","Active Field",r.active??"default:true",5)];return n==="transform"?o.push(uo(e,{document:t,path:"transformType",label:"Transform Type",valueType:"enum",control:"enum",value:r.transformType??"plain",commitMode:"immediate",order:6,options:e.transformTypeOptions??oj})):o.push(Dr("common.transformType","Transform Type",r.transformType??"none",6)),o}function Fk(e){return Dg({id:"hierarchySource",title:"Hierarchy / Source",order:15,summary:$k(e),collapsedByDefault:!0,tags:["Document","Derived"],properties:Bk(e)})}function $k(e){let t=e.gameObject.parentId?ke(e.document,e.gameObject.parentId):null;return t?`Parent: ${t.name??t.id}`:"Scene root"}function Bk(e){let{document:t,gameObject:r}=e,n=[],o=r.parentId?ke(t,r.parentId):null,a=t.scene.gameObjects.filter(d=>d.parentId===r.id),i=Math.max(UE(t,[r.id]).length-1,0),s=wk(t),c=t.scene.gameObjects.filter(d=>d.parentId===r.parentId).findIndex(d=>d.id===r.id);return rt(n,{path:"hierarchy.parentId",label:"Parent ID",value:r.parentId??"none",order:0,source:"Document"}),rt(n,{path:"hierarchy.parentName",label:"Parent Name",value:o?o.name??o.id:r.parentId?"missing":"none",order:1,source:"Document"}),rt(n,{path:"hierarchy.childCount",label:"Children",value:a.length,order:2,source:"Derived"}),rt(n,{path:"hierarchy.descendantCount",label:"Descendants",value:i,order:3,source:"Derived"}),rt(n,{path:"hierarchy.siblingIndex",label:"Sibling Index",value:c>=0?c:"unknown",order:4,source:"Derived"}),rt(n,{path:"document.gameObjectIndex",label:"Document Index",value:t.scene.gameObjects.findIndex(d=>d.id===r.id),order:5,source:"Derived"}),rt(n,{path:"document.schemaVersion",label:"Schema Version",value:t.schemaVersion,order:6,source:"Document"}),rt(n,{path:"source.sourceId",label:"Source ID",value:s.sourceId,order:7,source:"Document"}),rt(n,{path:"source.sourceType",label:"Source Type",value:s.sourceType,order:8,source:"Document"}),rt(n,{path:"source.revision",label:"Revision",value:s.revision??"none",order:9,source:"Document"}),n}function zk(e){return we(e.gameObject)?{id:"transform",title:"Transform",order:20,placement:"body",summary:Uk(e),persistence:"document",collapsedByDefault:!1,properties:Vk(e)}:null}function Vk(e){if(!we(e.gameObject))return[];let r=Gg(e),n=wt(e.gameObject),o=n?e.rootTransform??On():jg(e.gameObject);if(Jr(o))return H8(o,0);let a=!!e.gameObject.parentId,i=[],s=0;for(let c of["position","rotation","scale"]){let d=rX(o,c);for(let u of["x","y","z"]){let l=`transform.${c}.${u}`,m=c==="rotation"?Uc(Ba(d[u])):d[u];n?i.push(Dr(l,`${KE(c)}.${u}`,m,s)):i.push(uo(e,{document:null,path:l,label:`${a?`Local ${KE(c)}`:KE(c)}.${u}`,valueType:"number",control:"number",value:m,commitMode:"live",order:s,displayPrecision:c==="rotation"?2:3,precision:4,step:c==="rotation"?1:c==="scale"?.01:.1,stepPrecision:c==="rotation"?.1:c==="scale"?.001:.01},r)),s+=1}}if(a){let c=lo(e.document,e.gameObject.id);if(c&&!Jr(c))for(let d of["x","y","z"])i.push(Dr(`transform.worldPosition.${d}`,`World Position.${d}`,c.position[d],s)),s+=1}return i}function Uk(e){let t=e.gameObject.parentId?ke(e.document,e.gameObject.parentId):null;if(wt(e.gameObject))return"Identity Root";let r=we(e.gameObject);return r&&Ft(r)?"Matrix Transform":`Relative to: ${t?t.name??t.id:"Scene"}`}function H8(e,t){if(!Jr(e))return[];let r=[Dr("transform.mode","Mode","Matrix Transform",t)],n=t+1;for(let a=0;a<4;a+=1)r.push(Dr(`transform.matrix.row${a}`,`Matrix Row ${a+1}`,e.matrix.slice(a*4,a*4+4).map(Ng).join(", "),n)),n+=1;let o=BI(e.matrix);return r.push(Dr("transform.matrix.trsApproximation","TRS Approximation",o?[`P ${HE(o.position)}`,`R ${HE({x:Ba(o.rotation.x),y:Ba(o.rotation.y),z:Ba(o.rotation.z)})}`,`S ${HE(o.scale)}`].join(" | "):"Not representable as TRS",n)),r}function Hk(e){let t=Rt(e.gameObject),r=Fc(e.gameObject),n=t?.assetId??r?.assetId;return n?{id:"renderer",title:r?"Image Renderer / Asset":"Renderer / Asset",order:30,placement:"body",summary:Wk(e.document,n),persistence:"document",collapsedByDefault:!0,properties:r?K8(e,r):Kk(e)}:null}function K8(e,t){let r=iu(e.document,t.assetId);return[Dr("imageRenderer.assetId","Texture Asset",r?.displayName??t.assetId,0),Dr("imageRenderer.size","Image Size",`${t.size.width} \xD7 ${t.size.height}`,1),Dr("imageRenderer.assetType","Asset Type",r?.type??"texture",2)]}function Kk(e){let t=Rt(e.gameObject);if(!t)return[];let{document:r}=e,n=iu(r,t.assetId),o=[uo(e,{document:r,path:"instance.assetId",label:"Asset",valueType:"enum",control:"enum",value:t.assetId,commitMode:"immediate",order:0,options:r.assets.map(a=>({label:a.displayName??a.id,value:a.id}))})];return rt(o,{path:"renderer.assetId",label:"Renderer Asset ID",value:t.assetId,order:1,source:"Document"}),rt(o,{path:"asset.id",label:"Asset ID",value:n?.id??"missing",order:2,source:"Asset"}),rt(o,{path:"asset.type",label:"Asset Type",value:n?.type??"missing",order:3,source:"Asset"}),rt(o,{path:"asset.guid",label:"GUID",value:n?.guid??"missing",order:4,source:"Asset"}),rt(o,{path:"asset.displayName",label:"Display Name",value:n?.displayName??"none",order:5,source:"Asset"}),rt(o,{path:"asset.category",label:"Category",value:n?.category??"none",order:6,source:"Asset"}),rt(o,{path:"asset.materialMode",label:"Material Mode",value:n?.materialMode??"none",order:7,source:"Asset"}),rt(o,{path:"asset.defaults",label:"Defaults",value:n?.defaults??"none",order:8,source:"Asset",tags:["Raw"]}),o}function Wk(e,t){let r=iu(e,t);return r?r.displayName??r.id:`Missing asset: ${t}`}function qk(e){let t=e.gameObject.primitive;return t?{id:"primitive",title:"Primitive",order:32,placement:"body",summary:t.shape,persistence:"document",collapsedByDefault:!1,properties:Yk(e)}:null}function Yk(e){let t=e.gameObject.primitive;return t?[uo(e,{document:e.document,path:"primitive.shape",label:"Shape",valueType:"enum",control:"enum",value:t.shape,commitMode:"immediate",order:0,options:e.primitiveShapeOptions??nX})]:[]}function W8(e){if(e.gameObject.prefab)return q8(e);if(!nj(e))return null;let t=Tt(e.gameObject.shadow).shadow,r=uo(e,{document:e.document,path:"shadow.cast",label:"\u6295\u5C04\u9634\u5F71",valueType:"boolean",control:"boolean",value:t?.cast==="enabled",commitMode:"immediate",order:0,tooltip:"\u5F00\u542F\u540E\u8BE5\u7269\u4F53\u6295\u5C04\u9634\u5F71\uFF1B\u5173\u95ED\u540E\u8BE5\u7269\u4F53\u4E0D\u8FDB\u5165\u9634\u5F71\u6295\u5C04\u5019\u9009\u96C6\u3002"}),n=uo(e,{document:e.document,path:"shadow.receive",label:"\u63A5\u6536\u9634\u5F71",valueType:"boolean",control:"boolean",value:t?.receive==="enabled",commitMode:"immediate",order:1,tooltip:"\u5F00\u542F\u540E\u8BE5\u7269\u4F53\u63A5\u6536\u9634\u5F71\uFF1B\u5173\u95ED\u540E\u6750\u8D28\u4E0D\u91C7\u6837\u9634\u5F71\u7ED3\u679C\u3002"}),o=Jk(e.renderingProfile),a=e.renderingProfile!==void 0&&vk(o)==="none";return{id:"shadow",title:"\u9634\u5F71",order:34,placement:"body",...a?{summary:"\u9879\u76EE\u9634\u5F71\u540E\u7AEF\u5F53\u524D\u5DF2\u5173\u95ED\uFF1B\u53C2\u4E0E\u8D44\u683C\u4ECD\u4F1A\u4FDD\u5B58\u3002"}:{},persistence:"document",collapsedByDefault:!1,properties:[r,n,...a?[Y8()]:[]]}}function q8(e){let t=e.gameObject.prefab?.prefabId,r=t?e.document.assets.find(i=>i.id===t)?.prefab?.defaults?.shadow:void 0,n=Tt(r).shadow,o=!!t,a=[{path:"shadow.cast",label:"\u6295\u5C04\u9634\u5F71",valueType:"boolean",control:"boolean",value:n?.cast==="enabled",readOnly:!o,persistence:o?"document":"readonly",commitMode:"immediate",order:0,tooltip:o?"\u4FEE\u6539\u4F1A\u5F71\u54CD\u8BE5 Prefab \u7684\u5168\u90E8\u5B9E\u4F8B\uFF1B\u8BBE\u7F6E\u4FDD\u5B58\u5728 Prefab definition root\u3002":"\u53EA\u8BFB\uFF1A\u7F3A\u5C11 Prefab definition\uFF0C\u65E0\u6CD5\u4FEE\u6539\u9634\u5F71\u53C2\u4E0E\u8D44\u683C\u3002"},{path:"shadow.receive",label:"\u63A5\u6536\u9634\u5F71",valueType:"boolean",control:"boolean",value:n?.receive==="enabled",readOnly:!o,persistence:o?"document":"readonly",commitMode:"immediate",order:1,tooltip:o?"\u4FEE\u6539\u4F1A\u5F71\u54CD\u8BE5 Prefab \u7684\u5168\u90E8\u5B9E\u4F8B\uFF1B\u8BBE\u7F6E\u4FDD\u5B58\u5728 Prefab definition root\u3002":"\u53EA\u8BFB\uFF1A\u7F3A\u5C11 Prefab definition\uFF0C\u65E0\u6CD5\u4FEE\u6539\u9634\u5F71\u53C2\u4E0E\u8D44\u683C\u3002"},...t?[Bc({path:"prefab.edit-definition",label:"\u8FDB\u5165 Prefab",buttonLabel:"Edit Prefab",actionId:"asset.edit-prefab",order:2,icon:"box",tooltip:"\u5728 Prefab Stage \u4E2D\u7F16\u8F91 definition root \u7684\u9634\u5F71\u53C2\u4E0E\u8D44\u683C\u3002",params:{assetId:t,browserAssetId:`prefab:${t}`,assetKind:"prefab"},disabled:!1})]:[]];return{id:"shadow",title:"\u9634\u5F71",order:34,summary:o?"\u4FEE\u6539\u4F1A\u5F71\u54CD\u8BE5 Prefab \u7684\u5168\u90E8\u5B9E\u4F8B":"\u7531 Prefab definition root \u7BA1\u7406",persistence:o?"document":"readonly",collapsedByDefault:!1,properties:a}}function Y8(){return{path:"rendering.shadows.open",label:"\u6253\u5F00 Rendering / Shadows",valueType:"string",control:"custom",customControl:"open-right-dock-tab",controlOptions:{targetTab:"rendering",label:"\u6253\u5F00 Rendering / Shadows",icon:"world"},value:"\u6253\u5F00 Rendering / Shadows",readOnly:!0,persistence:"readonly",commitMode:"immediate",order:2,tags:["Rendering"],effect:"active"}}function Jk(e){return e&&typeof e=="object"&&"environment"in e&&"postProcess"in e&&"shadows"in e&&"renderingGroups"in e&&"shadowMeshes"in e?e:mt(e)}function Xk(e){if(!J8(e))return null;let t=Jk(e.renderingProfile),r=X8(e.gameObject.rendering?.renderingGroupId),n=t.renderingGroups.slots.find(a=>a.renderingGroupId===r)??t.renderingGroups.slots[0],o=Q8(e.gameObject)??null;return{id:"rendering",title:"Rendering",order:36,placement:"body",summary:Z8(n,o),persistence:"document",collapsedByDefault:!1,properties:[uo(e,{document:e.document,path:"rendering.renderingGroupId",label:"Rendering Group",valueType:"enum",control:"enum",value:r,commitMode:"immediate",order:0,options:t.renderingGroups.slots.map(a=>({label:`${a.renderingGroupId}: ${a.name}`,value:a.renderingGroupId}))}),uo(e,{document:e.document,path:"rendering.alphaIndex",label:"Alpha Order",valueType:"enum",control:"enum",value:o,commitMode:"immediate",order:1,options:eX(n,o)})]}}function Qk(e){return Dg({id:"components",title:"Scripts / Components",order:65,summary:qE(e.gameObject),collapsedByDefault:!0,tags:["Document"],properties:Zk(e.gameObject)})}function qE(e){return e.components.map(t=>t.type).join(", ")||"none"}function Zk(e){let t=[];return rt(t,{path:"components.count",label:"Count",value:e.components.length,order:0,source:"Document"}),rt(t,{path:"components.types",label:"Types",value:qE(e),order:1,source:"Document"}),e.components.forEach((r,n)=>{rt(t,{path:`components.${n}`,label:`${r.type} ${n}`,value:r,order:n+2,source:"Document",tags:["Component","Raw"]})}),t}function ej(e){let t=e.assetId??Rt(e.gameObject)?.assetId??Fc(e.gameObject)?.assetId??null,r=tj({document:e.document,gameObject:e.gameObject,assetId:t});return r.length===0?null:{id:"metadata",title:"Metadata",order:80,placement:"body",summary:rj({document:e.document,gameObject:e.gameObject,assetId:t}),persistence:"readonly",collapsedByDefault:!0,tags:["Document","Asset"],properties:r}}function tj(e){let t=[],r=e.assetId?iu(e.document,e.assetId):null;return rt(t,{path:"metadata.document",label:"Document Meta",value:e.document.meta??"none",order:0,source:"Document",tags:["Raw"]}),rt(t,{path:"metadata.gameObject",label:"GameObject Metadata",value:e.gameObject.metadata??"none",order:1,source:"Document",tags:["Raw"]}),rt(t,{path:"metadata.asset",label:"Asset Metadata",value:r?.metadata??"none",order:2,source:"Asset",tags:["Raw"]}),t}function rj(e){let t=e.assetId?iu(e.document,e.assetId):null,r=[e.document.meta?"Document":null,e.gameObject.metadata?"GameObject":null,t?.metadata?"Asset":null].filter(n=>!!n);return r.length>0?r.join(" + "):"none"}function uo(e,t,r=Gg(e)){let{document:n,...o}=t;return nu({document:n??null,nodeKind:r,property:o,extraValidators:e.extraValidators})}function rt(e,t){let r=wn(t);r&&e.push(r)}function Dr(e,t,r,n){return wn({path:e,label:t,value:r,order:n,persistence:"readonly",source:"Document"})}function Gg(e){return e.nodeKind??It(e.gameObject)}function nj(e){let t=e.gameObject;return wt(t)?!1:Lc(t)}function J8(e){let t=e.gameObject;if(wt(t)||t.transformType==="camera"||t.transformType==="light"||t.camera||t.light)return!1;let r=e.nodeKind??It(t);return r==="instance"||r==="primitive"||r==="transform"}function X8(e){return e===1||e===2||e===3?e:0}function Q8(e){let t=e.rendering?.alphaIndex;if(typeof t=="number"&&Number.isFinite(t))return t}function Z8(e,t){return t==null?`${e.name} \xB7 Babylon \u9ED8\u8BA4`:`${e.name} \xB7 ${tX(e,t)}`}function eX(e,t){let r=[{label:"Babylon \u9ED8\u8BA4",value:null},...e.alphaIndexPresets.map(n=>({label:`${n.name} (${n.alphaIndex})`,value:n.alphaIndex}))];return t!=null&&!e.alphaIndexPresets.some(n=>n.alphaIndex===t)&&r.push({label:`\u672A\u547D\u540D\u503C ${t}`,value:t,batchCompatibility:"ignore"}),r}function tX(e,t){let r=e.alphaIndexPresets.find(n=>n.alphaIndex===t);return r?r.name:`\u672A\u547D\u540D\u503C ${t}`}function rX(e,t){return t==="scale"?e.scale??{x:1,y:1,z:1}:e[t]}function HE(e){return`${Ng(e.x)}, ${Ng(e.y)}, ${Ng(e.z)}`}function Ng(e){return Uc(e).toString()}function KE(e){return e==="position"?"Position":e==="rotation"?"Rotation":"Scale"}function iu(e,t){return e.assets.find(r=>r.id===t)??null}var oj=[{label:"Plain",value:"plain"},{label:"Light",value:"light"},{label:"Camera",value:"camera"}],nX=[{label:"Cube",value:"cube"},{label:"Sphere",value:"sphere"},{label:"Plane",value:"plane"},{label:"Capsule",value:"capsule"}];var oX=["position","rotation","scale"],aX=["x","y","z"];function sj(e){let t=[{path:"gameObject.id",label:"ID",valueType:"string",readOnly:!0,getValue:()=>e.gameObject.id},{path:"gameObject.name",label:"Name",valueType:"string",readOnly:!0,getValue:()=>e.gameObject.name??e.gameObject.id}],r=we(e.gameObject);if(r){let o=wt(e.gameObject),a=o?On():VE(r)?r:null;if(!a)return t;for(let i of oX)for(let s of aX)t.push(lX({gameObject:e.gameObject,vectorName:i,axis:s,rootTransform:o,displayTransform:a,validateField:e.validateField}))}let n=Rt(e.gameObject);return n&&t.push({path:"modelRenderer.assetId",label:"Asset ID",valueType:"asset",readOnly:!0,getValue:()=>n.assetId}),dX(e.gameObject)&&t.push(...iX({gameObject:e.gameObject,validateField:e.validateField})),t}function iX(e){return[aj({...e,path:"shadow.cast",label:"Caster",valueType:"boolean",defaultValue:!1}),aj({...e,path:"shadow.receive",label:"Receiver",valueType:"boolean",defaultValue:!1})]}function aj(e){return{path:e.path,label:e.label,valueType:e.valueType,...e.options?{options:e.options}:{},getValue:()=>sX(e.gameObject,e.path,e.defaultValue),setValue:(t,r,n)=>{if(!n.targetId)return t;let o=_g(e.path,r),a=e.validateField?.({document:t,gameObject:e.gameObject,nodeKind:It(e.gameObject),path:e.path,value:o});return a&&!a.ok?t:ls(t,n.targetId,e.path,o)}}}function sX(e,t,r){let n=cX(e);return t==="shadow.cast"?ij(n.cast):t==="shadow.receive"?ij(n.receive):r}function ij(e){return e==="enabled"}function cX(e){return Tt(e.shadow).shadow??{}}function dX(e){if(wt(e)||e.transformType==="camera"||e.transformType==="light"||e.camera||e.light)return!1;let t=It(e);return t==="instance"||t==="primitive"||t==="transform"}function lX(e){return{path:`transform.${e.vectorName}.${e.axis}`,label:`${e.vectorName}.${e.axis}`,valueType:"number",readOnly:e.rootTransform,getValue:()=>{let r=vn(e.displayTransform,e.vectorName)[e.axis];return e.vectorName==="rotation"?Uc(Ba(r)):r},...e.rootTransform?{}:{setValue:(r,n,o)=>uX({document:r,targetId:o.targetId,vectorName:e.vectorName,axis:e.axis,value:n,validateField:e.validateField})}}}function uX(e){let t=Number(e.value);if(!e.targetId||!Number.isFinite(t))return e.document;let r=ke(e.document,e.targetId),n=r?we(r):null;if(!r||!n||Ft(n))return e.document;let o=`transform.${e.vectorName}.${e.axis}`,a=e.validateField?.({document:e.document,gameObject:r,nodeKind:It(r),path:o,value:t});if(a&&!a.ok)return e.document;let i=e.vectorName==="rotation"?za(t):t,s=e.vectorName==="position"?{...n.position,[e.axis]:i}:n.position,c=e.vectorName==="rotation"?{...n.rotation,[e.axis]:i}:n.rotation,d=e.vectorName==="scale"?{...vn(n,"scale"),[e.axis]:i}:vn(n,"scale");return mX(e.document,e.targetId,{position:s,rotation:c,scale:d})}function mX(e,t,r){return{...e,scene:{...e.scene,gameObjects:e.scene.gameObjects.map(n=>n.id===t?Nk(n,r):n)}}}function JE(e,t){let r=t.name.trim();if(!r)return null;let n=ke(e,t.id);return!n||n.name===r?null:{label:`Rename ${n.name??n.id} to ${r}`,patch:{kind:"game-object.rename",targetId:t.id,name:r},changedId:t.id}}function XE(e,t){let r=SX(e,t);if(r===null)return null;let n=Jo(oT(e),t.name,{fallbackName:"Empty"}),o=pX(e.scene.gameObjects.map(i=>i.id),t.objectId,n);if(!o)return null;let a={id:o,guid:Yo(),name:n,kind:"transform",transformType:"plain",...r?{parentId:r}:{},active:!0,components:[{type:"Transform",position:{x:0,y:0,z:0},rotation:{x:0,y:0,z:0},scale:{x:1,y:1,z:1}}]};return{label:`Create empty ${n}`,patch:{kind:"game-object.create-group",gameObject:a},createdId:o,changedIds:[o]}}function pX(e,t,r){return t===void 0?Ua(e,r):Ua([],t)===t&&!e.includes(t)?t:null}function Fg(e,t,r={}){let n=Qo(e),o=Yw(n,t);if(!o.ok)return o;let a=Da(n,t.ids);if(a.some(Et))return{ok:!1,reason:"Root GameObject cannot be moved."};let i=rT(e,t);if(i&&!nT(e,i))return{ok:!1,reason:`${i} cannot have children.`};if(t.preserveWorldTransform!==!1)for(let s of a){let c=ke(e,s);if(!c)return{ok:!1,reason:`GameObject not found: ${s}`};if(!we(c))return{ok:!1,reason:`${s} has no Transform to preserve.`};if(!lj(e,s,i,t,r))return{ok:!1,reason:"Cannot preserve world transform under the target parent."}}return{ok:!0}}function QE(e,t,r={}){if(!Fg(e,t,r).ok)return null;let o=Qo(e),a=Da(o,t.ids),i=rT(e,t),s=a.map(l=>{let m=ke(e,l);if(!m||!we(m))return null;let p=t.preserveWorldTransform===!1?cs(m):lj(e,l,i,t,r),h=p?ds(p):null;return h?i?{targetId:l,parentId:i,transform:h}:{targetId:l,transform:h}:null}).filter(l=>!!l);if(s.length!==a.length)return null;let c=IX(e,a,t),d=e.scene.gameObjects.map(l=>l.id);return!s.some(l=>{let m=ke(e,l.targetId);return!m||m.parentId!==l.parentId||!AX(cs(m),l.transform)})&&PX(d,c)?null:{label:`Move ${a.length} GameObject${a.length===1?"":"s"}`,patch:{kind:"game-object.hierarchy-move",moves:s,order:c},changedIds:a}}function $g(e,t,r={}){let n=Qo(e),o=Jw(n,t);if(!o.ok)return o;let a=Da(n,t.ids);if(a.some(Et))return{ok:!1,reason:"Root GameObject cannot be grouped."};let i=dj(e,t.parentId??null);if(i&&!nT(e,i))return{ok:!1,reason:`${i} cannot have children.`};if(t.preserveWorldTransform!==!1){let s=fj(e,a),c=s?{position:s,rotation:{x:0,y:0,z:0},scale:{x:1,y:1,z:1}}:null;if(!c||!au(e,i,c,r))return{ok:!1,reason:"Cannot preserve world transform under the target parent."};for(let d of a){let u=ke(e,d);if(!u)return{ok:!1,reason:`GameObject not found: ${d}`};if(!we(u))return{ok:!1,reason:`${d} has no Transform to preserve.`};let l=lo(e,d);if(!l||!uj(c,l,r))return{ok:!1,reason:"Cannot preserve world transform under the target parent."}}}return{ok:!0}}function ZE(e,t,r={}){if(!$g(e,t,r).ok)return null;let o=Qo(e),a=Da(o,t.ids);if(a.length===0)return null;let i=dj(e,t.parentId??null),s=fj(e,a);if(!s)return null;let c={position:s,rotation:{x:0,y:0,z:0},scale:{x:1,y:1,z:1}},d=au(e,i,c,r);if(!d)return null;let u=Jo(oT(e),t.name,{fallbackName:"Parent"}),l=Ua(e.scene.gameObjects.map(g=>g.id),u),m={id:l,guid:Yo(),name:u,kind:"transform",transformType:"plain",...i?{parentId:i}:{},active:!0,components:[Ha(d)]},p={};for(let g of a){let f=ke(e,g);if(!f)return null;if(t.preserveWorldTransform===!1){p[g]=cs(f);continue}let y=lo(e,g);if(!y)return null;let A=uj(c,y,r);if(!A)return null;p[g]=A}let h=EX(e,l,a,t.insertBeforeId??null);return{label:`Create Parent for ${a.length} GameObject${a.length===1?"":"s"}`,patch:{kind:"game-object.group-selection",gameObject:m,childIds:a,childTransforms:p,order:h},createdId:l,changedIds:[l,...a]}}function eT(e){let t=e.isProtectedDuplicateSource??fX,r=Qo(e.document),n=new Set(Da(r,e.targetIds).filter(f=>{let y=ke(e.document,f);return!!y&&!wt(y)&&!t(y,e.document)&&!hX(e.document,y.id,t)})),o=tT(e.document).filter(f=>n.has(f));if(o.length===0)return null;let a=en(e.document,o),i=new Map,s=new Set(e.document.scene.gameObjects.map(f=>f.id)),c=new Map,d=oT(e.document),u=bX(e.document,o,a,t);for(let f of u){let y=ke(e.document,f),A=Jo(d,y.name,{alwaysAppendSuffix:!0,fallbackName:y.id});d.push(A);let T=Ua([...s],A);s.add(T),i.set(y.id,T),c.set(y.id,A)}let l=u.map(f=>ke(e.document,f)).filter(f=>!!f&&i.has(f.id)).map(f=>{let y=structuredClone(f);return y.id=i.get(f.id),y.guid=Yo(),y.name=c.get(f.id),y.parentId&&i.has(y.parentId)&&(y.parentId=i.get(y.parentId)),y});if(l.length===0)return null;let m=l.map(f=>f.id),p=o.map(f=>i.get(f)).filter(f=>!!f),h=gX(e.document,o,e.activeId),g=h&&i.has(h)?i.get(h):p[p.length-1]??m[m.length-1]??null;return{label:`Duplicate ${m.length} object${m.length===1?"":"s"}`,patch:{kind:"game-object.duplicate-selection",gameObjects:l,order:yX(e.document,o,i)},createdIds:m,selectedIds:p,activeId:g,changedIds:m}}function fX(e){return qo(e)}function gX(e,t,r){if(r&&t.includes(r))return r;if(r){for(let n of t)if(en(e,[n]).has(r))return n}return t[t.length-1]??null}function hX(e,t,r){let n=new Map(e.scene.gameObjects.map(i=>[i.id,i])),o=new Set,a=n.get(t);for(;a?.parentId;){if(o.has(a.parentId))return!0;o.add(a.parentId);let i=n.get(a.parentId);if(!i)return!1;if(r(i,e))return!0;a=i}return!1}function bX(e,t,r,n){let o=tT(e),a=new Map(o.map((l,m)=>[l,m])),i=new Map(e.scene.gameObjects.map(l=>[l.id,l])),s=new Map;for(let l of e.scene.gameObjects){let m=l.parentId&&i.has(l.parentId)?l.parentId:null,p=s.get(m)??[];p.push(l.id),s.set(m,p)}for(let l of s.values())l.sort((m,p)=>(a.get(m)??Number.MAX_SAFE_INTEGER)-(a.get(p)??Number.MAX_SAFE_INTEGER));let c=[],d=new Set,u=l=>{if(d.has(l)||!r.has(l))return;d.add(l);let m=ke(e,l);if(!(!m||wt(m)||n(m,e))){c.push(m.id);for(let p of s.get(m.id)??[])u(p)}};for(let l of t)u(l);return c}function yX(e,t,r){let n=tT(e),o=new Map;for(let i of t){let s=en(e,[i]),c=n.filter(l=>s.has(l)),d=c.map(l=>r.get(l)).filter(l=>!!l),u=c[c.length-1];u&&d.length>0&&o.set(u,d)}let a=[];for(let i of n){a.push(i);let s=o.get(i);s&&a.push(...s)}return a}function tT(e){let t=e.scene.gameObjects,r=new Map(t.map(c=>[c.id,c])),n=new Map;for(let c of t){let d=c.parentId&&r.has(c.parentId)?c.parentId:null,u=n.get(d)??[];u.push(c.id),n.set(d,u)}let o=[],a=new Set,i=c=>{if(!(a.has(c)||!r.has(c))){a.add(c),o.push(c);for(let d of n.get(c)??[])i(d)}},s=Jt(e);s&&i(s);for(let c of n.get(null)??[])i(c);for(let c of t)i(c.id);return o}function SX(e,t){if(t.parentId){let n=ke(e,t.parentId);return n&&Va(n)?n.id:null}let r=t.activeId?ke(e,t.activeId):null;if(r&&Va(r))return r.id;if(r?.parentId){let n=ke(e,r.parentId);if(n&&Va(n))return n.id}return Jt(e)}function rT(e,t){if(t.placement==="root")return Jt(e);if(t.placement==="inside"&&t.targetId)return t.targetId;let r=t.targetId?ke(e,t.targetId):null;return t.parentId??r?.parentId??Jt(e)}function dj(e,t){return t&&nT(e,t)?t:Jt(e)}function nT(e,t){let r=ke(e,t);return!!r&&Va(r)}function lj(e,t,r,n,o={}){let a=lo(e,t);if(!a)return null;let i=ke(e,t);if(!i)return null;let s=n?o.resolveLocalTransform?.({document:e,intent:n,gameObject:i,parentId:r,worldTransform:a}):null;if(s)return ds(s);let c=au(e,r,a,o.preserveWorldPolicy);return c?ds(c):null}function uj(e,t,r={}){let n=Hf(r),o=Vf(e,t,{allowMatrixFallback:n.allowMatrixFallback});return o?ds(o):null}function IX(e,t,r){let n=mj(e,t),o=new Set(n),a=e.scene.gameObjects.map(s=>s.id).filter(s=>!o.has(s)),i=TX(e,a,{placement:r.placement,targetId:r.targetId??null,beforeId:r.beforeId??null,afterId:r.afterId??null,parentId:rT(e,r)});return pj(a,n,i)}function EX(e,t,r,n){let o=mj(e,r),a=new Set(o),i=e.scene.gameObjects.map(l=>l.id),s=i.filter(l=>!a.has(l)),c=Math.min(...r.map(l=>i.indexOf(l)).filter(l=>l>=0)),d=Number.isFinite(c)?s.filter(l=>i.indexOf(l)<c).length:s.length,u=n?Math.max(0,s.indexOf(n)):d;return pj(s,[t,...o],u)}function mj(e,t){let r=en(e,[...t]);return e.scene.gameObjects.map(n=>n.id).filter(n=>r.has(n))}function TX(e,t,r){return r.beforeId?cj(t.indexOf(r.beforeId),t.length):r.afterId?Lg(e,t,r.afterId):r.placement==="before"&&r.targetId?cj(t.indexOf(r.targetId),t.length):r.placement==="after"&&r.targetId||r.placement==="inside"&&r.targetId?Lg(e,t,r.targetId):r.placement==="root"?t.length:r.parentId?Lg(e,t,r.parentId):t.length}function Lg(e,t,r){let n=en(e,[r]),o=t.indexOf(r);if(o<0)return t.length;for(let a=o+1;a<t.length&&n.has(t[a]);a+=1)o=a;return o+1}function pj(e,t,r){let n=Math.max(0,Math.min(r,e.length));return[...e.slice(0,n),...t,...e.slice(n)]}function cj(e,t){return e>=0?e:t}function fj(e,t){let r=t.map(o=>lo(e,o)).filter(o=>!!o);if(r.length===0)return null;let n=r.map($v);return{x:n.reduce((o,a)=>o+a.x,0)/n.length,y:n.reduce((o,a)=>o+a.y,0)/n.length,z:n.reduce((o,a)=>o+a.z,0)/n.length}}function oT(e){return e.scene.gameObjects.map(t=>t.name??t.id)}function AX(e,t){return!Cc(e)||!Cc(t)?Uf(wa(e),wa(t)):YE(e.position,t.position)&&YE(e.rotation,t.rotation)&&YE(e.scale,t.scale)}function YE(e,t){return Math.abs(e.x-t.x)<1e-6&&Math.abs(e.y-t.y)<1e-6&&Math.abs(e.z-t.z)<1e-6}function PX(e,t){return e.length===t.length&&e.every((r,n)=>r===t[n])}var Bg=Ua,zg=Kc;function xX(e){let t=e.scene.gameObjects.filter(r=>!!Rt(r)||!!Fc(r)||!!r.primitive).length;return{x:t%5*1.8-3.6,y:0,z:Math.floor(t/5)*1.8+1.8}}function gj(e,t){let r=t&&Cc(t)?t:null;return{position:r?.position?{...r.position}:xX(e),rotation:r?.rotation?{...r.rotation}:{x:0,y:0,z:0},scale:r?.scale?{...r.scale}:{x:1,y:1,z:1}}}function hj(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let t=e;return t.kind==="texture"||t.type==="texture"}function us(e){return hj(e)?!0:!e||typeof e!="object"||Array.isArray(e)||e.placeable!==!1}function Ug(e,t){return{...e,guid:t.guid??e.guid,displayName:t.displayName||e.displayName,category:t.category??e.category,warmupCount:t.warmupCount??e.warmupCount,singleton:t.singleton??e.singleton,materialMode:t.materialMode??e.materialMode,defaults:Vg(t.defaults??e.defaults),prefab:Vg(t.prefab??e.prefab),external:Vg(t.external??e.external),metadata:Vg(t.metadata??e.metadata)}}function Vg(e){return e==null?void 0:structuredClone(e)}function cu(e,t,r,n={}){if(t.type==="prefab"){let s=bj(e,t),c=s?Ug(s,t):su(t),d=Sj(e,t,c,r,n),u=DX(s?e.assets.map(l=>l.id===c.id?c:l):[...e.assets,c],c);return{document:{...e,assets:u,scene:{...e.scene,gameObjects:[...e.scene.gameObjects,d]}},gameObject:d}}let o=bj(e,t),a=o?Ug(o,t):su(t),i=t.type==="texture"?MX(e,t,a.id,r,n):yj(e,t,a.id,r,n);return{document:{...e,assets:o?e.assets.map(s=>s.id===a.id?a:s):[...e.assets,a],scene:{...e.scene,gameObjects:[...e.scene.gameObjects,i]}},gameObject:i}}function MX(e,t,r,n,o={}){let a=e.scene.gameObjects.map(u=>u.id),i=Jo(aT(e),o.name??t.displayName,{fallbackName:t.assetId}),s=Bg(a,zg(i)),c=Jt(e),d=iT(e,c,n,o);return{id:s,guid:(o.createGameObjectGuid??Yo)(),name:i,kind:"transform",...c?{parentId:c}:{},active:!0,shadow:{cast:"none",receive:"none"},metadata:{...t.metadata??{},assetId:t.assetId,assetType:"texture"},components:[Ha(d),{type:"ImageRenderer",assetId:r,size:{width:1,height:1}}]}}function su(e){return{id:e.assetId,guid:e.guid,type:e.type,displayName:e.displayName,category:e.category,warmupCount:e.warmupCount,singleton:e.singleton,materialMode:e.materialMode,defaults:Hg(e.defaults),prefab:Hg(e.prefab),external:Hg(e.external),metadata:Hg(e.metadata)}}function yj(e,t,r,n,o={}){let a=e.scene.gameObjects.map(u=>u.id),i=Jo(aT(e),o.name??t.displayName,{fallbackName:t.assetId}),s=Bg(a,zg(i)),c=Jt(e),d=iT(e,c,n,o);return{id:s,guid:(o.createGameObjectGuid??Yo)(),name:i,...c?{parentId:c}:{},active:!0,shadow:{cast:"none",receive:"none"},components:[Ha(d),{type:"ModelRenderer",assetId:r}]}}function Sj(e,t,r,n,o={}){let a=e.scene.gameObjects.map(u=>u.id),i=Jo(aT(e),o.name??t.displayName,{fallbackName:t.assetId}),s=Bg(a,zg(i)),c=Jt(e),d=iT(e,c,n,o);return ik({id:s,guid:(o.createGameObjectGuid??Yo)(),name:i,...c?{parentId:c}:{},prefabAsset:r,transform:Ha(d),metadata:{...t.metadata??{},assetId:t.assetId,assetType:"prefab"}})}function aT(e){return e.scene.gameObjects.map(t=>t.name??t.id)}function bj(e,t){return e.assets.find(r=>r.id===t.assetId||r.guid&&r.guid===t.guid)}function DX(e,t){let r=Ql(t);if(!r||e.some(a=>a.id===r))return[...e];let n=t.prefab?.sourceAssetGuid,o=!!n&&!e.some(a=>a.guid===n);return[...e,{id:r,...o?{guid:n}:{},type:"glb",displayName:r,category:"Model",metadata:{sourcePrefabId:t.id}}]}function iT(e,t,r,n){let o=gj(e,r);return t?n.resolveLocalTransform?.({document:e,parentId:t,worldTransform:o})??kg(e,t,o)??o:o}function Hg(e){return e==null?void 0:structuredClone(e)}var ms="mat_default_pbr",Wc="mat_default_standard",OX="00000000-0000-4000-8000-000000000001",RX="00000000-0000-4000-8000-000000000002",ps=ms,Kg={id:ms,guid:OX,name:"Default PBR Material",shaderId:"fps.builtin.pbr",definitionVersion:1,system:{readonly:!0,preset:"default-pbr"},origin:{type:"preset"},properties:NI("fps.builtin.pbr")},Gpe={id:Wc,guid:RX,name:"Default Standard Material",shaderId:"fps.builtin.standard",definitionVersion:1,system:{readonly:!0,preset:"default-standard"},origin:{type:"preset"},properties:NI("fps.builtin.standard")};function Ij(e){return e?.system?.preset==="default-pbr"||e?.id===ms?"default-pbr":e?.system?.preset==="default-standard"||e?.id===Wc?"default-standard":null}function Wg(e){let t=structuredClone(Kg.properties);if(!e||typeof e!="object")return t;let r={...t,...structuredClone(e)};return r.baseColor={...t.baseColor??{},...e.baseColor??{}},(t.normal||e.normal)&&(r.normal={...t.normal??{},...e.normal??{}}),(t.metallicRoughness||e.metallicRoughness)&&(r.metallicRoughness={...t.metallicRoughness??{},...e.metallicRoughness??{}}),(t.occlusion||e.occlusion)&&(r.occlusion={...t.occlusion??{},...e.occlusion??{}}),r.emission={...t.emission??{},...e.emission??{}},(t.alpha||e.alpha)&&(r.alpha={...t.alpha??{},...e.alpha??{}}),r}function du(e,t){let r=[...new Set(e.sourceSurfaces.map(s=>s.sourceMaterialIndex).filter(s=>Number.isInteger(s)))],n=e.materialNames??[],o=r.findIndex(s=>s===t),a=o>=0?n[o]??(r.length===1?e.materialName:null):null;if(typeof a=="string"&&a.trim())return a.trim();let i=qc(e,t)?.materialName;return typeof i=="string"&&i.trim()?i.trim():null}function qc(e,t){return e.sourceMaterialProfiles?.find(r=>r.sourceMaterialIndex===t)??null}var sT=[ms,Wc],CX="New Material";function cT(e,t,r=`${t.displayName} Material`){let n=dT(e);return{id:Nc(n),guid:n,name:lT(e,r),shaderId:t.shaderId,definitionVersion:t.version,origin:{type:"created"},properties:structuredClone(t.defaultProperties)}}function Yc(e,t,r){let n=t.name?.trim()||t.id,o=dT(e);return{id:Nc(o),guid:o,name:lT(e,r??`${n} Copy`),shaderId:t.shaderId,...t.definitionVersion!=null?{definitionVersion:t.definitionVersion}:{},origin:{type:"duplicated",sourceMaterialAssetId:t.id},properties:structuredClone(t.properties)}}function wX(e,t){let r=dT(e);return{id:Nc(r),guid:r,name:lT(e,t.name),shaderId:Kg.shaderId,definitionVersion:Kg.definitionVersion,origin:{type:"created",...t.sourceAssetId?{sourceAssetId:t.sourceAssetId}:{},...t.sourceAssetGuid?{sourceAssetGuid:t.sourceAssetGuid}:{},sourceSlotId:t.sourceSlotId,sourceMaterialIndex:t.sourceMaterialIndex,...t.sourceMaterialName?{sourceMaterialName:t.sourceMaterialName}:{}},properties:Wg(t.profile)}}function dT(e){let t=new Set((e.scene.materialAssets??[]).map(o=>o.id)),r=uE(),n=Nc(r);for(;t.has(n);)r=uE(),n=Nc(r);return r}function lT(e,t){let r=Mr("name",t),n=typeof r=="string"&&ao("name",r)?r:CX,o=new Set((e.scene.materialAssets??[]).map(s=>s.name?.trim()).filter(s=>!!s).map(s=>s.toLocaleLowerCase()));if(!o.has(n.toLocaleLowerCase()))return n;let a=2,i=`${n} ${a}`;for(;o.has(i.toLocaleLowerCase());)a+=1,i=`${n} ${a}`;return i}function Ej(e){if(e.isBindingPathAllowed&&!e.isBindingPathAllowed(e.bindingPath))return null;let t=`${e.gameObject.name?.trim()||e.gameObject.id} - ${e.sourceSlotId}`,r=wX(e.document,{profile:e.profile,name:e.sourceMaterialName?.trim()||t,...e.sourceAsset?.id?{sourceAssetId:e.sourceAsset.id}:{},...e.sourceAsset?.guid?{sourceAssetGuid:e.sourceAsset.guid}:{},sourceSlotId:e.sourceSlotId,sourceMaterialIndex:e.sourceMaterialIndex,...e.sourceMaterialName?.trim()?{sourceMaterialName:e.sourceMaterialName.trim()}:{}});return{patch:{kind:"scene.material-asset.create-and-bind",targetId:e.gameObject.id,bindingPath:e.bindingPath,materialAsset:r},changedId:e.gameObject.id,changedIds:[e.gameObject.id],createdId:r.id,reprojectIds:[e.gameObject.id]}}function qg(e,t,r,n,o){let a=e.scene.materialAssets??[],i=!1,s=a.map(c=>{if(c.id!==t)return c;let d=Pj(c,r,Mr(r,n),o);return i=i||d!==c,d});return i?{...e,scene:{...e.scene,materialAssets:s}}:e}function Tj(e,t,r=[]){let n=me(e,t),o=gE(e,t);return n?lu(n,r)?{ok:!1,reason:"readonly",materialAsset:n,usages:o}:o.length>0?{ok:!1,reason:"in-use",materialAsset:n,usages:o}:{ok:!0,materialAsset:n,usages:o}:{ok:!1,reason:"missing",usages:o}}function uT(e,t){return Tj(e,t,sT)}function vX(e,t,r=[]){return Tj(e,t,r).ok?{...e,scene:{...e.scene,materialAssets:(e.scene.materialAssets??[]).filter(o=>o.id!==t)}}:e}function fs(e){return lu(e,sT)}function mT(e,t){return vX(e,t,sT)}function pT(e,t){return Gc(e,t.id)?e:{...e,scene:{...e.scene,materialAssets:[...e.scene.materialAssets??[],structuredClone(t)]}}}function Aj(e,t,r,n){return{...e,scene:{...e.scene,gameObjects:e.scene.gameObjects.map(o=>{if(o.id!==t)return o;let a=structuredClone(o);return _X(a,r,n),a})}}}function fT(e,t,r,n){let o=Mr(e,t);return ao(e,o,r,n)?{ok:!0,value:o}:{ok:!1}}function _X(e,t,r){let n=kX(t)??t.split(".").filter(Boolean);if(n.some(jX))return;let o=e;for(let i of n.slice(0,-1)){let s=o[i];(!s||typeof s!="object"||Array.isArray(s))&&(o[i]={}),o=o[i]}let a=n[n.length-1];a&&(r==null?delete o[a]:o[a]=structuredClone(r))}function kX(e){let t=ur(e,"materialAssetId");return t?["overrides","materialSlotBindings",t,"materialAssetId"]:null}function jX(e){return e==="__proto__"||e==="prototype"||e==="constructor"}var NX=/^transform\.(position|rotation|scale)\.(x|y|z)$/;function gT(e){if(Et(e.patch.targetId)&&NX.test(e.patch.path))return e.document;let t=ke(e.document,e.patch.targetId);if(!t)return e.document;let r=e.patch.path.startsWith("transform.rotation")?xj(t):null,n=e.patch.path.startsWith("light.direction")?Mj(t):null,o=Gv(e.document,sj({gameObject:t,validateField:e.validateField}),e.patch);if(!e.patch.path.startsWith("transform.rotation")&&!e.patch.path.startsWith("light.direction"))return o;let a=ke(o,e.patch.targetId);if(!a)return o;let i=r?xj(a):null,s=n?Mj(a):null,c=r&&i&&!Dj(r,i),d=n&&s&&!Dj(n,s);return!c&&!d?o:{...o,scene:{...o.scene,gameObjects:o.scene.gameObjects.map(u=>{if(u.id!==e.patch.targetId)return u;let l=c?zc(u):u;return d?wg(l):l})}}}function xj(e){let t=we(e);return t&&"rotation"in t?t.rotation:null}function Mj(e){return e.light?.type==="directional"?e.light.direction:null}function Dj(e,t,r=1e-6){return Math.abs(e.x-t.x)<=r&&Math.abs(e.y-t.y)<=r&&Math.abs(e.z-t.z)<=r}var GX=/^transform(?:\.(position|rotation|scale)(?:\.(x|y|z))?)?$/,LX=/^transform\.(position|rotation|scale)$/,FX=/^transform\.(position|rotation|scale)\.(x|y|z)$/;function ls(e,t,r,n,o={}){return $X({document:e,targetId:t,path:r,value:n,options:o})}function hT(e,t,r,n,o={}){let a=new Set(t.filter(Boolean));if(a.size===0)return e;let i=o.normalizeFieldValue?.(r,n)??n,s=!1,c=e.scene.gameObjects.map(d=>{if(!a.has(d.id)||ST(d.id,r))return d;let u=d;if(o.validateField?.({document:e,gameObject:u,path:r,value:i})?.ok===!1||o.blockFieldPatch?.({document:e,gameObject:u,targetId:d.id,path:r,value:i}))return d;let l=yT(u,r,i,o);return l===d?d:(s=!0,l)});return s?{...e,scene:{...e.scene,gameObjects:c}}:e}function bT(e,t,r={}){let n=new Map;for(let i of t){if(!i.objectId||i.changes.length===0)continue;let s=n.get(i.objectId)??[];s.push(...i.changes),n.set(i.objectId,s)}if(n.size===0)return e;let o=!1,a=e.scene.gameObjects.map(i=>{let s=n.get(i.id);if(!s?.length)return i;let c;for(let d of s){if(ST(i.id,d.path))continue;let u=r.normalizeFieldValue?.(d.path,d.value)??d.value;r.validateField?.({document:e,gameObject:c??i,path:d.path,value:u})?.ok!==!1&&(r.blockFieldPatch?.({document:e,gameObject:c??i,targetId:i.id,path:d.path,value:u})||(c??(c=structuredClone(i)),c=wj(c,d.path,u,r,!0)))}return!c||JSON.stringify(c)===JSON.stringify(i)?i:(o=!0,c)});return o?{...e,scene:{...e.scene,gameObjects:a}}:e}function $X(e){if(ST(e.targetId,e.path))return e.document;let t=ke(e.document,e.targetId);if(!t)return e.document;let r=e.options?.normalizeFieldValue?.(e.path,e.value)??e.value;if(e.options?.validateField?.({document:e.document,gameObject:t,path:e.path,value:r})?.ok===!1||e.options?.blockFieldPatch?.({document:e.document,gameObject:t,targetId:e.targetId,path:e.path,value:r}))return e.document;let n=yT(t,e.path,r,e.options);return n===t?e.document:{...e.document,scene:{...e.document.scene,gameObjects:e.document.scene.gameObjects.map(o=>o.id===e.targetId?n:o)}}}function yT(e,t,r,n={}){let o=wj(e,t,r,n);return JSON.stringify(o)===JSON.stringify(e)?e:o}function wj(e,t,r,n,o=!1){let a=o?e:structuredClone(e),i=t.startsWith("transform.rotation")?Oj(a):null,s=t==="light.direction"||t.startsWith("light.direction.")?Rj(a):null;if(t==="name")return typeof r=="string"&&r.trim()?a.name=r.trim():delete a.name,a;if(t==="enabled")return a.active=r!==!1,a;if(t.startsWith("shadow."))return Lc(a)&&BX(a,t,r),a;if(t.startsWith("rendering.")){It(a)==="group"&&(a.kind="instance");let c=VX(t,r);return co(a,t,c),UX(a),a}if(t.startsWith("metadata."))return co(a,t,r),a.metadata&&Object.keys(a.metadata).length===0&&delete a.metadata,a;if(t==="instance.assetId"){let c=Rt(a);return c&&typeof r=="string"&&(c.assetId=r),a.kind="instance",delete a.primitive,a}if(t==="primitive.shape"){let c=(n.normalizePrimitiveShape??qX)(r);return c&&(a.kind="primitive",a.primitive={shape:c}),a}if(t==="transformType")return HX(a,r,n),a;if(KX(a,t,r)){let c=i?Oj(a):null;return i&&c&&!Cj(i,c)?zc(a):a}if(n.patchCustomTransformField?.(a,t,r))return a;if(t.startsWith("marker."))return!a.marker||typeof a.marker!="object"||(a.kind="transform",delete a.primitive,co(a,t,r)),a;if(t.startsWith("camera."))return a.kind="transform",a.transformType="camera",a.camera=vj(a.camera,n),delete a.light,n.clearCustomTransformState?.(a,"camera"),delete a.primitive,co(a,t,r),a.camera=WX(a.camera,t,n),a;if(t.startsWith("light.")){a.kind="transform",a.transformType="light",a.light=_j(a.light,n),delete a.camera,n.clearCustomTransformState?.(a,"light"),delete a.primitive,co(a,t,r),(t==="light.direction"||t.startsWith("light.direction."))&&a.light?.type==="directional"&&(a.light.direction=Cg(a.light.direction,s??void 0));let c=s?Rj(a):null;return s&&c&&!Cj(s,c)?wg(a):a}return t.startsWith("overrides.")&&(It(a)==="group"&&(a.kind="instance"),co(a,t,r),CE(a)),a}function Oj(e){let t=we(e);return t&&!Ft(t)?{...t.rotation}:null}function Rj(e){return e.light?.type==="directional"?{...e.light.direction}:null}function Cj(e,t,r=1e-6){return Math.abs(e.x-t.x)<=r&&Math.abs(e.y-t.y)<=r&&Math.abs(e.z-t.z)<=r}function BX(e,t,r){if(!zX(t,r))return;let n=e.shadow;e.shadow={cast:t==="shadow.cast"?r===!0?"enabled":"none":n?.cast==="enabled"?"enabled":"none",receive:t==="shadow.receive"?r===!0?"enabled":"none":n?.receive==="enabled"?"enabled":"none"}}function zX(e,t){return e==="shadow.cast"||e==="shadow.receive"?typeof t=="boolean":!1}function VX(e,t){return e==="rendering.renderingGroupId"?t===1||t===2||t===3?t:0:e==="rendering.alphaIndex"?J(t)?t:null:t}function UX(e){let t=e.rendering;if(!t||typeof t!="object"||Array.isArray(t)){delete e.rendering;return}Object.keys(t).length===0&&delete e.rendering}function ST(e,t){return Et(e)&&GX.test(t)}function HX(e,t,r){let n=t==="plain"||t==="light"||t==="camera",o=!n&&r.isCustomTransformType?.(t)===!0;if(!n&&!o)return;let a=t;e.kind="transform",e.transformType=a,delete e.primitive,a==="camera"?e.camera=vj(e.camera,r):delete e.camera,a==="light"?e.light=_j(e.light,r):delete e.light,o?r.applyCustomTransformType?.(e,a):r.clearCustomTransformState?.(e,a)}function KX(e,t,r){let n=t.match(LX);if(n){let a=we(e);if(!a||Ft(a))return!0;let i=n[1];return i==="scale"?(J(r)?a.scale={x:r,y:r,z:r}:Pr(r)&&(a.scale={...r}),!0):(Pr(r)&&(a[i]=i==="rotation"?{x:za(r.x),y:za(r.y),z:za(r.z)}:{...r}),!0)}let o=t.match(FX);if(o&&J(r)){let a=we(e);if(!a||Ft(a))return!0;let i=o[1],s=o[2],c=i==="rotation"?za(r):r;return i==="scale"?a.scale={...vn(a,"scale"),[s]:c}:a[i]={...a[i],[s]:c},!0}return!1}function vj(e,t){return t.mergeCameraDefaults?t.mergeCameraDefaults(e):kj(e)}function WX(e,t,r){return r.normalizeCameraAfterFieldPatch?r.normalizeCameraAfterFieldPatch(e,t):e}function _j(e,t){return t.mergeLightDefaults?t.mergeLightDefaults(e):kj(e)}function qX(e){return e==="cube"||e==="sphere"||e==="plane"||e==="capsule"?e:null}function kj(e){return YX(e)??{}}function YX(e){return e&&typeof e=="object"&&!Array.isArray(e)?structuredClone(e):null}function gs(e,t,r){let n=e.scene.gameObjects.find(a=>a.id===t);if(!n)return e;let o=JX(n,r);return JSON.stringify(o)===JSON.stringify(n)?e:{...e,scene:{...e.scene,gameObjects:e.scene.gameObjects.map(a=>a.id===t?o:a)}}}function JX(e,t){let r=jj(e),n=XX(e,t),o=jj(n);return r&&o&&!QX(r,o)?zc(n):n}function XX(e,t){return we(e)?{...e,components:e.components.map(r=>{if(r.type!=="Transform")return r;let n=r;return t.transform?Xo(t.transform)??n:Ft(n)?n:{...n,position:t.position??n.position,rotation:t.rotation??n.rotation,scale:t.scale??n.scale}})}:e}function jj(e){let t=we(e);return t&&"rotation"in t?t.rotation:null}function QX(e,t,r=1e-6){return Math.abs(e.x-t.x)<=r&&Math.abs(e.y-t.y)<=r&&Math.abs(e.z-t.z)<=r}function ZX(e){return!!e&&Jr(e)}function TT(e){let{document:t,patch:r,options:n={}}=e;if(r.kind==="serialized-property")return gT({document:t,patch:r,validateField:n.serializedProperty?.validateField});if(r.kind==="game-object.field")return ls(t,r.targetId,r.path,r.value,n.field);if(r.kind==="game-object.field-batch")return hT(t,r.targetIds,r.path,r.value,n.field);if(r.kind==="game-object.create-from-asset")return cu(t,r.assetItem,r.placement,{...n.assetPlacement??{},...r.name?{name:r.name}:{}}).document;if(r.kind==="game-object.transform")return Et(r.targetId)?t:gs(t,r.targetId,{transform:r.transform});if(r.kind==="game-object.transform-batch")return r.targets.reduce((o,a)=>{if(Et(a.targetId))return o;let i=ke(o,a.targetId),s=i?we(i):null;if(!s)return o;if(ZX(a.transform))return gs(o,a.targetId,{transform:a.transform});if(Ft(s))return o;let c=a.transform;return gs(o,a.targetId,{position:c.position?{...s.position,...c.position}:void 0,rotation:c.rotation?{...s.rotation,...c.rotation}:void 0,scale:c.scale?{...vn(s,"scale"),...c.scale}:void 0})},t);if(r.kind==="game-object.duplicate-selection"){let o=new Set(t.scene.gameObjects.map(l=>l.id)),a=n.isProtectedDuplicateSource??e9,i=new Set(t.scene.gameObjects.filter(l=>a(l,t)).map(l=>l.id)),s=new Set,c=[];for(let l of r.gameObjects)o.has(l.id)||s.has(l.id)||wt(l)||a(l,t)||(s.add(l.id),c.push(l));let d=r9(c,o,i);if(d.length===0)return t;let u=[...t.scene.gameObjects,...d];return{...t,scene:{...t.scene,gameObjects:r.order?IT(u,r.order):u}}}if(r.kind==="game-object.rename"){let o=r.name.trim();if(!o)return t;let a=t.scene.gameObjects.find(i=>i.id===r.targetId);return!a||a.name===o?t:{...t,scene:{...t.scene,gameObjects:t.scene.gameObjects.map(i=>i.id===r.targetId?{...i,name:o}:i)}}}if(r.kind==="game-object.create-group"||r.kind==="game-object.create-primitive")return t.scene.gameObjects.some(o=>o.id===r.gameObject.id)?t:{...t,scene:{...t.scene,gameObjects:[...t.scene.gameObjects,r.gameObject]}};if(r.kind==="game-object.delete-subtree"){if(r.targetIds.some(Et))return t;let o=en(t,r.targetIds);if(o.size===0)return t;let a=n.isProtectedDeleteTarget??t9;return t.scene.gameObjects.some(i=>o.has(i.id)&&a(i,t))?t:{...t,scene:{...t.scene,gameObjects:t.scene.gameObjects.filter(i=>!o.has(i.id))}}}if(r.kind==="game-object.reparent"){if(Et(r.targetId))return t;let o=t.scene.gameObjects.find(c=>c.id===r.targetId);if(!o)return t;let a=r.transform?Xo(r.transform):null;if(r.transform&&!a)return t;let i=!!a&&!Nj(we(o),a);if(o.parentId===r.parentId&&!i)return t;let s={...o,parentId:r.parentId,components:i?o.components.map(c=>c.type==="Transform"?a:c):o.components};return{...t,scene:{...t.scene,gameObjects:t.scene.gameObjects.map(c=>c.id===r.targetId?s:c)}}}if(r.kind==="game-object.hierarchy-move"){let o=r.moves.filter(l=>!Et(l.targetId)),a=new Map;for(let l of o){let m=Xo(l.transform);if(!m)return t;a.set(l.targetId,m)}let i=new Map(o.map(l=>[l.targetId,l]));if(i.size===0)return t;let s=!1,c=t.scene.gameObjects.map(l=>{let m=i.get(l.id);if(!m)return l;let p=a.get(m.targetId),h=!Nj(we(l),p);if(l.parentId===m.parentId&&!h)return l;let g={...l,parentId:m.parentId,components:h?l.components.map(f=>f.type==="Transform"?p:f):l.components};return s=!0,g}),d=IT(c,r.order),u=d.some((l,m)=>l!==t.scene.gameObjects[m]);return!s&&!u?t:{...t,scene:{...t.scene,gameObjects:d}}}if(r.kind==="game-object.group-selection"){if(wt(r.gameObject)||t.scene.gameObjects.some(s=>s.id===r.gameObject.id))return t;let o=new Set(r.childIds.filter(s=>!Et(s)));if(o.size===0)return t;let a=new Map;for(let[s,c]of Object.entries(r.childTransforms)){if(!o.has(s))continue;let d=Xo(c);if(!d)return t;a.set(s,d)}let i=t.scene.gameObjects.map(s=>{if(!o.has(s.id))return s;let c=a.get(s.id);return{...s,parentId:r.gameObject.id,components:c?s.components.map(d=>d.type!=="Transform"?d:c):s.components}});return{...t,scene:{...t.scene,gameObjects:IT([...i,r.gameObject],r.order)}}}return t}function e9(e){return qo(e)}function t9(e){return ou(e)}function r9(e,t,r){let n=new Map(e.map(a=>[a.id,a])),o=!0;for(;o;){o=!1;for(let a of[...n.values()])!a.parentId||n.has(a.parentId)||t.has(a.parentId)&&!r.has(a.parentId)||(n.delete(a.id),o=!0)}return e.filter(a=>n.has(a.id))}function IT(e,t){let r=new Map(e.map(a=>[a.id,a])),n=[],o=new Set;for(let a of t){if(o.has(a))continue;let i=r.get(a);i&&(n.push(i),o.add(a))}return[...n,...e.filter(a=>!o.has(a.id))]}function Nj(e,t){if(!e)return!1;let r=Ft(e),n=Ft(t);return r||n?r&&n&&e.matrix.every((o,a)=>o===t.matrix[a]):ET(e.position,t.position)&&ET(e.rotation,t.rotation)&&ET(vn(e,"scale"),vn(t,"scale"))}function ET(e,t){return e.x===t.x&&e.y===t.y&&e.z===t.z}function lu(e,t=[]){return e?.system?.readonly===!0||e?.system?.preset==="default-pbr"||e?.system?.preset==="default-standard"||!!e&&t.includes(e.id)}function n9(e){let t=structuredClone(e??{});return hs(t.baseColor,"texture"),t.baseColor&&Object.keys(t.baseColor).length===0&&delete t.baseColor,hs(t.normal,"texture"),t.normal&&Object.keys(t.normal).length===0&&delete t.normal,hs(t.metallicRoughness,"texture"),t.metallicRoughness&&Object.keys(t.metallicRoughness).length===0&&delete t.metallicRoughness,hs(t.occlusion,"texture"),t.occlusion&&Object.keys(t.occlusion).length===0&&delete t.occlusion,t.emission&&(hs(t.emission,"texture"),hs(t.emission,"maskTexture"),Object.keys(t.emission).length===0&&delete t.emission),hs(t.alpha,"texture"),t.alpha&&Object.keys(t.alpha).length===0&&delete t.alpha,t}function hs(e,t){if(!e)return;let r=e,n=r[t];if(n===null||!n||typeof n!="object"||Array.isArray(n))return;let o=n,a=typeof o.url=="string"?o.url.trim():"",i=typeof o.textureAssetId=="string"?o.textureAssetId.trim():"";a?o.url=a:delete o.url,i?o.textureAssetId=i:delete o.textureAssetId,Object.keys(o).length===0&&delete r[t]}function Pj(e,t,r,n){if(e.system?.readonly===!0)return e;let o=Mr(t,r);if(!ao(t,o,e.shaderId,n))return e;let a=structuredClone(e);if(t==="name")return typeof o!="string"?e:(a.name=o.trim(),a.name===e.name?e:a);if(!t.startsWith("properties."))return e;let i=t.slice(11);return!i||(a.properties=structuredClone(a.properties),o9(a.properties,i,o)||co(a.properties,i,o),Uo(a.shaderId)&&(a.properties=n9(a.properties)),_v(a.shaderId,a.properties,"properties",n).length>0)||JSON.stringify(a)===JSON.stringify(e)?e:a}function o9(e,t,r){let n=t.endsWith(".textureAssetId")?"textureAssetId":t.endsWith(".url")?"url":null;if(!n)return!1;let o=t.slice(0,-`.${n}`.length);if(!o.endsWith(".texture")&&!o.endsWith(".maskTexture"))return!1;let a=o.split(".").filter(Boolean);if(a.length<2)return!1;let i=a[a.length-1],s=e;for(let u of a.slice(0,-1)){let l=s[u];if(!l||typeof l!="object"||Array.isArray(l)){if(r==null)return!0;let m={};s[u]=m,s=m;continue}s=l}if(r==null)return s[i]=null,!0;let c=s[i],d=c&&typeof c=="object"&&!Array.isArray(c)?{...c}:{};return d[n]=r,delete d[n==="url"?"textureAssetId":"url"],s[i]=d,!0}function Lj(e,t){let r=Rt(t),n=r?e.assets.find(g=>g.id===r.assetId):null,o=typeof n?.guid=="string"&&n.guid.trim()?n.guid.trim():n?.id,a=Xl(e,t),i=new Map(a.filter(g=>!!g.slotId).map(g=>[g.slotId,g])),s=t.overrides?.materialSlotBindings??{},c=a9({document:e,assetId:n?.id,assetGuid:o,currentSlots:a,materialSlotBindings:s}),d=c.remaps,u=new Map(d.map(g=>[g.toSlotId,g])),l=new Set([...d.map(g=>g.fromSlotId),...c.coalescedSourceSlotIds]),m=new Map;for(let[g,f]of Object.entries(s))!f||l.has(g)||m.set(g,f);for(let g of d){let f=s[g.fromSlotId];f&&m.set(g.toSlotId,f)}let p=[];for(let[g,f]of a.entries()){let y=f.slotId?m.get(f.slotId):void 0,A=Jc(y),T=A?me(e,A):null,D=Fj(f),P=D[0],C=f.slotId?u.get(f.slotId):void 0;if(C){p.push({status:"changed",reason:"slot-remapped",...f.slotId?{slotId:f.slotId}:{},previousSlotId:C.fromSlotId,ownerNodePath:so(f)??void 0,label:Yg(f,g),...P==null?{}:{sourceMaterialIndex:P},...D.length>0?{sourceMaterialIndices:D}:{},materialAssetId:A,bindingPath:`overrides.materialSlotBindings.${f.slotId}.materialAssetId`,conflict:!1});continue}let E=$j(T,o,n?.id)?.sourceMaterialIndex;if(E!=null&&D.length>0&&!D.includes(E)){p.push(Gj({status:"changed",reason:"source-material-changed",...f.slotId?{slotId:f.slotId}:{},ownerNodePath:so(f)??void 0,label:Yg(f,g),...P==null?{}:{sourceMaterialIndex:P},...D.length>0?{sourceMaterialIndices:D}:{},previousSourceMaterialIndex:E,...A?{materialAssetId:A}:{},bindingPath:f.slotId?`overrides.materialSlotBindings.${f.slotId}.materialAssetId`:""}));continue}if(!A&&D.length>0){p.push({status:"unchanged",reason:"slot-current",...f.slotId?{slotId:f.slotId}:{},ownerNodePath:so(f)??void 0,label:Yg(f,g),...P==null?{}:{sourceMaterialIndex:P},...D.length>0?{sourceMaterialIndices:D}:{},bindingPath:f.slotId?`overrides.materialSlotBindings.${f.slotId}.materialAssetId`:"",conflict:!1});continue}p.push({status:"unchanged",reason:"slot-current",...f.slotId?{slotId:f.slotId}:{},ownerNodePath:so(f)??void 0,label:Yg(f,g),...P==null?{}:{sourceMaterialIndex:P},...D.length>0?{sourceMaterialIndices:D}:{},...A?{materialAssetId:A}:{},bindingPath:f.slotId?`overrides.materialSlotBindings.${f.slotId}.materialAssetId`:"",conflict:!1})}for(let[g,f]of Object.entries(s))!f||i.has(g)||l.has(g)||p.push(Gj({status:"removed",reason:"slot-removed",slotId:g,...Jc(f)?{materialAssetId:Jc(f)}:{},bindingPath:`overrides.materialSlotBindings.${g}.materialAssetId`}));let h=p.filter(s9);return{gameObjectId:t.id,...t.name?{gameObjectName:t.name}:{},...n?.id?{assetId:n.id}:{},...o?{assetGuid:o}:{},ok:h.length===0,items:p,issues:h,bindingRemaps:d,bindingRemapIssues:c.issues,counts:c9(p)}}function a9(e){let t=new Set(e.currentSlots.map(d=>d.slotId).filter(d=>!!d)),r=new Set(Object.keys(e.materialSlotBindings).filter(d=>t.has(d))),n=[],o=[],a=new Map;for(let[d,u]of Object.entries(e.materialSlotBindings)){if(!u||t.has(d))continue;let l=Jc(u),m=l?me(e.document,l):null,p=$j(m,e.assetGuid,e.assetId);if(!p){o.push({fromSlotId:d,materialAssetId:l,reason:"binding-unmatched",candidateSlotIds:[]});continue}let h=e.currentSlots.filter(g=>!!g.slotId&&Fj(g).includes(p.sourceMaterialIndex)).map(g=>g.slotId);a.set(d,{materialAssetId:l,candidateSlotIds:h,binding:u,anchored:p.sourceSlotId===d})}let i=new Map;for(let[d,u]of a){if(u.candidateSlotIds.length!==1)continue;let[l]=u.candidateSlotIds,m=i.get(l)??[];m.push(d),i.set(l,m)}let s=new Set,c=new Set;for(let[d,u]of i){u.forEach(g=>c.add(g));let l=u.filter(g=>a.get(g)?.anchored).sort((g,f)=>g.localeCompare(f));if(l.length===0){for(let g of u){let f=a.get(g);o.push({fromSlotId:g,materialAssetId:f.materialAssetId,reason:"binding-unmatched",candidateSlotIds:[]})}continue}let m=l[0],p=a.get(m);if(!u.every(g=>i9(p.binding,a.get(g).binding))||r.has(d)){for(let g of u){let f=a.get(g);o.push({fromSlotId:g,materialAssetId:f.materialAssetId,reason:"binding-ambiguous",candidateSlotIds:[d]})}continue}r.add(d),n.push({fromSlotId:m,toSlotId:d,materialAssetId:p.materialAssetId,reason:"source-material-index"});for(let g of u)g!==m&&s.add(g)}for(let[d,u]of a)c.has(d)||o.push({fromSlotId:d,materialAssetId:u.materialAssetId,reason:u.anchored&&u.candidateSlotIds.length>0?"binding-ambiguous":"binding-unmatched",candidateSlotIds:u.anchored?u.candidateSlotIds:[]});return{remaps:n,issues:o,coalescedSourceSlotIds:[...s].sort((d,u)=>d.localeCompare(u))}}function i9(e,t){return Jc(e)===Jc(t)&&AT(e.override,t.override)}function AT(e,t){if(Object.is(e,t))return!0;if(Array.isArray(e)||Array.isArray(t))return Array.isArray(e)&&Array.isArray(t)&&e.length===t.length&&e.every((i,s)=>AT(i,t[s]));if(!e||!t||typeof e!="object"||typeof t!="object")return!1;let r=e,n=t,o=Object.keys(r).sort(),a=Object.keys(n).sort();return o.length===a.length&&o.every((i,s)=>i===a[s]&&AT(r[i],n[i]))}function Fj(e){return Fa(e)}function $j(e,t,r){if(e?.origin?.type!=="imported")return null;let n=e.origin.sourceMaterialIndex;if(typeof n!="number"||!Number.isInteger(n))return null;let o=e.origin.sourceAssetGuid,a=e.origin.sourceAssetId;if((o||a)&&!(!!t&&!!o&&o===t)&&!(!!r&&!!a&&a===r)||!o&&!a&&(t||r))return null;let c=typeof e.origin.sourceSlotId=="string"&&e.origin.sourceSlotId.trim()?e.origin.sourceSlotId.trim():void 0;return{sourceMaterialIndex:n,...c?{sourceSlotId:c}:{}}}function Yg(e,t){return e.label?.trim()||so(e)?.trim()||e.slotId?.trim()||`Slot ${t+1}`}function Jc(e){return typeof e?.materialAssetId=="string"?e.materialAssetId.trim():""}function Gj(e){return{...e,conflict:!0}}function s9(e){return e.conflict}function c9(e){return e.reduce((t,r)=>(t[r.status]+=1,t),{unchanged:0,added:0,removed:0,changed:0,conflict:0})}function zj(e,t){if(e.actionId==="material.create-from-source"){let i=Ka(e.value)?e.value:null,s=Bj(i?.sourceObjectId),c=Bj(i?.sourceBindingPath),d=e.fieldPath?.trim();if(!s||!d||c!==d)return null;let u=ur(d,"materialAssetId"),l=e.document.scene.gameObjects.find(T=>T.id===s);if(!u||!l||l.overrides?.materialSlotBindings?.[u]?.materialAssetId)return null;let m=Qr(e.document,l).find(T=>T.slotId===u&&Jl(T)===d);if(!m)return null;let p=Fa(m)[0];if(p==null)return null;let h=qc(m,p)?.profile;if(!h)return null;let g=Rt(l),f=g?e.document.assets.find(T=>T.id===g.assetId)??null:null,y=du(m,p)??void 0,A=t.createSourceMaterialAssetForBindingPatch({document:e.document,gameObject:l,bindingPath:d,profile:h,sourceAsset:f,sourceSlotId:u,sourceMaterialIndex:p,...y?{sourceMaterialName:y}:{}});return A?{...A,label:`Create material ${A.patch.materialAsset.name} from GLB source`}:null}if(e.actionId==="asset.duplicate-material"){if(!e.assetId)return null;let i=t.findMaterialAsset(e.document,e.assetId);if(!i)return null;let s=t.createDuplicatedMaterialAssetCopy(e.document,i);return{label:`Duplicate material ${i.name??i.id}`,patch:{kind:"scene.material-asset.create",materialAsset:s},createdId:s.id}}if(e.actionId==="asset.delete-material"){if(!e.assetId)return null;let i=t.resolveMaterialAssetDeleteState(e.document,e.assetId);return i.ok?{label:`Delete material ${i.materialAsset.name??i.materialAsset.id}`,patch:{kind:"scene.material-asset.delete",materialAssetId:e.assetId}}:null}if(e.actionId==="asset.apply-material"){if(!e.assetId||!e.activeId)return null;let i=e.activeId;return{label:`Apply material ${e.assetId}`,patch:{kind:"game-object.field",targetId:i,path:"overrides.materialBinding.materialAssetId",value:e.assetId},changedId:i,changedIds:[i],reprojectIds:[i]}}if(e.actionId!=="asset.edit-material-field"||!e.assetId)return null;let r=t.findMaterialAsset(e.document,e.assetId);if(!r||t.isReadonlyMaterialAsset(r))return null;let n=typeof e.fieldPath=="string"?e.fieldPath.trim():"";if(!n.startsWith("properties."))return null;let o=t.normalizeMaterialAssetValue(n,e.value);if(!t.validateMaterialAssetFieldValue(n,o))return null;let a=t.collectMaterialAssetBindingIds(e.document,e.assetId);return{label:`Edit material ${r.name} ${n}`,patch:{kind:"scene.material-asset.field",materialAssetId:e.assetId,path:n,value:o},changedId:e.activeId??a[0],changedIds:a,reprojectIds:a,presentationImpact:{inspector:["material"],materials:{assetIds:[e.assetId]}}}}function Bj(e){return typeof e=="string"&&e.trim()?e.trim():null}function xT(e,t){let r=new Set,n=e.properties,o=Ka(n)?n:{},a=Ka(t.defaultProperties)?t.defaultProperties:{},i=Vj(t.propertiesSchema,o,a,"properties",r),s=new Set;Uj(o,"properties",s);let c=[...s].filter(d=>!r.has(d)).sort();return{materialAsset:{...structuredClone(e),shaderId:t.shaderId,definitionVersion:t.version,properties:i},preservedPaths:[...r].sort(),resetPaths:c}}function Vj(e,t,r,n,o){if(e.kind!=="object")return d9(e,t)?(o.add(n),structuredClone(t)):structuredClone(r);let a=Ka(t)?t:{},i=Ka(r)?r:{},s={};for(let[c,d]of Object.entries(e.properties)){let u=Object.prototype.hasOwnProperty.call(a,c),l=Object.prototype.hasOwnProperty.call(i,c);if(!u&&!l)continue;let m=Vj(d,u?a[c]:void 0,l?i[c]:void 0,`${n}.${c}`,o);m!==void 0&&(s[c]=m)}return s}function d9(e,t){if(e.kind==="number")return typeof t=="number"&&Number.isFinite(t)&&(e.min==null||t>=e.min)&&(e.max==null||t<=e.max);if(e.kind==="boolean")return typeof t=="boolean";if(e.kind==="string")return typeof t=="string"||t===null&&e.nullable===!0;if(e.kind==="enum")return typeof t=="string"&&e.values.includes(t);if(e.kind==="color")return PT(t,e.channels===4?["r","g","b","a"]:["r","g","b"]);if(e.kind==="vec2")return PT(t,["x","y"]);if(e.kind==="vec3")return PT(t,["x","y","z"]);if(t===null)return!0;if(!Ka(t))return!1;let r=Object.keys(t);return r.every(n=>n==="url"||n==="textureAssetId")&&r.every(n=>typeof t[n]=="string"&&!!t[n].trim())}function Uj(e,t,r){for(let[n,o]of Object.entries(e)){let a=`${t}.${n}`;Ka(o)&&!l9(o)?Uj(o,a,r):r.add(a)}}function l9(e){let t=Object.keys(e);return t.length===0?!0:t.every(r=>["r","g","b","a"].includes(r))||t.every(r=>["x","y","z"].includes(r))||t.every(r=>r==="url"||r==="textureAssetId")}function PT(e,t){return Ka(e)&&Object.keys(e).length===t.length&&t.every(r=>typeof e[r]=="number"&&Number.isFinite(e[r]))}function Ka(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function u9(e){return e?.system?.preset}function Kj(e,t){let r=u9(e);return r==="default-pbr"?t.defaultMaterial:r==="default-standard"?t.defaultStandardMaterial:e.name||e.id}function Jg(e,t){let r=t.trim();return r?e?.find(n=>n.url===r||n.id===r)??null:null}function Hj(e,t){return{kind:"image",url:e.url,alt:e.label,fit:"contain",...t?{resourceStatusText:{loading:t.loadingTexture,failed:t.failedTexture}}:{}}}function Wj(e){let t=e.currentTexture??Jg(e.textureAssets,e.currentValue),r=e.currentValue.trim(),n=!!r&&!t,o=!!t&&!t.disabled&&!!t.url.trim(),a=n?"missing":t?o?"ready":"failed":void 0,i=e.candidateValue??"url",s=(e.textureAssets??[]).filter(m9);return{pickerKind:"texture",pickerTitle:e.pickerText.texturePickerTitle,pickerTrigger:"preview",placeholder:e.pickerText.emptyTexture,currentLabel:n?e.pickerText.missingTexture:t?.label??(r||e.pickerText.emptyTexture),currentMeta:n?`${e.pickerText.missingTextureMeta} \xB7 ${r}`:t?.previewUnavailableReason??t?.meta??(r||e.pickerText.emptyTextureMeta),...a?{currentResourceState:a}:{},...r?{currentResourceReference:r}:{},resourceStatusText:{missing:e.pickerText.missingTexture,loading:e.pickerText.loadingTexture,failed:e.pickerText.failedTexture},currentPreview:o?Hj(t,e.pickerText):void 0,candidates:[{label:e.pickerText.clearTexture,value:"",meta:e.pickerText.clearTextureMeta},...s.map(c=>({label:c.label,value:i==="assetId"?c.id:c.url,meta:c.meta??c.id,kind:"texture",...typeof c.width=="number"?{width:c.width}:{},...typeof c.height=="number"?{height:c.height}:{},...!c.disabled&&c.url.trim()?{preview:Hj(c,e.pickerText)}:{},...c.disabled?{disabled:!0,disabledReason:c.disabledReason}:{}}))]}}function m9(e){return e.capabilities?.materialTexture===!0?!0:e.capabilities?.materialTexture===!1?!1:e.usage!=="environment"}function qj(e){return{path:`${e.pathPrefix??Na}${e.materialAsset.id}.${e.fieldPath}`,label:e.label,valueType:e.valueType,control:e.control,value:e.value,readOnly:!1,persistence:"document",commitMode:e.commitMode,order:e.order,tooltip:e.tooltip,tags:e.tags??["ArtistMaterial","MaterialAsset"],document:e.document}}var Yj={zh:{title:"\u7F8E\u672F\u6750\u8D28",slotTitle:"\u6750\u8D28\u63D2\u69FD",language:"\u8BED\u8A00",materialAsset:"\u6750\u8D28\u8D44\u4EA7",materialCard:"\u5F53\u524D\u6750\u8D28",inheritNone:"\u7EE7\u627F / \u65E0",defaultMaterial:"\u9ED8\u8BA4 PBR \u6750\u8D28",defaultMaterialMeta:"BabylonJS \u9ED8\u8BA4 PBR \u6750\u8D28",defaultStandardMaterial:"\u9ED8\u8BA4 Standard \u6750\u8D28",defaultStandardMaterialMeta:"BabylonJS \u9ED8\u8BA4 Standard \u6750\u8D28",defaultMaterialReadOnly:"\u7CFB\u7EDF\u9ED8\u8BA4\u6750\u8D28\u4E3A\u53EA\u8BFB\uFF1B\u8BF7\u9009\u62E9\u53EF\u7F16\u8F91\u6750\u8D28\u7403\u540E\u8C03\u6574\u53C2\u6570\u3002",replace:"\u66FF\u6362",batchReplaceUnsupported:"\u591A\u9009\u7EDF\u4E00\u66FF\u6362\u6750\u8D28\u6682\u672A\u63A5\u5165\uFF1B\u8BF7\u5148\u5355\u9009\u5BF9\u8C61\u66FF\u6362\u6750\u8D28\u3002",duplicateForObject:"\u590D\u5236",materialPickerTitle:"\u9009\u62E9\u6750\u8D28\u8D44\u4EA7",texturePickerTitle:"\u9009\u62E9\u8D34\u56FE\u8D44\u4EA7",emptyTexture:"\u9009\u62E9\u8D34\u56FE",emptyTextureMeta:"\u70B9\u51FB\u9009\u62E9\u8D34\u56FE\u8D44\u4EA7",clearTexture:"\u6E05\u9664\u8D34\u56FE",clearTextureMeta:"\u4E0D\u4F7F\u7528\u8D34\u56FE",missingTexture:"\u8D34\u56FE\u8D44\u4EA7\u7F3A\u5931",missingTextureMeta:"\u5F53\u524D\u5F15\u7528\u65E0\u6CD5\u5728\u9879\u76EE\u8D44\u4EA7\u5E93\u4E2D\u89E3\u6790",loadingTexture:"\u6B63\u5728\u52A0\u8F7D\u8D34\u56FE",failedTexture:"\u8D34\u56FE\u52A0\u8F7D\u5931\u8D25",assetProfile:"\u8D44\u4EA7\u53C2\u6570",assetProfileEmpty:"\u9009\u62E9\u6750\u8D28\u8D44\u4EA7\u540E\u53EF\u7F16\u8F91\u8D44\u4EA7\u53C2\u6570",assetName:"\u8D44\u4EA7\u540D\u79F0",assetKind:"Shader",assetKindPbr:"PBR \u6807\u51C6\u6750\u8D28\u7403",assetKindStandard:"Standard \u6807\u51C6\u6750\u8D28\u7403",assetLightingModel:"\u5149\u7167\u6A21\u578B",assetLightingModelLit:"\u53D7\u5149\u7167",assetLightingModelUnlit:"\u4E0D\u53D7\u5149\u7167",assetBaseColor:"\u57FA\u7840\u8272",assetBaseTexture:"\u57FA\u7840\u8D34\u56FE",assetBrightness:"\u8D34\u56FE\u4EAE\u5EA6",assetSaturation:"\u8D34\u56FE\u9971\u548C\u5EA6",assetContrast:"\u8D34\u56FE\u5BF9\u6BD4\u5EA6",assetHue:"\u8D34\u56FE\u8272\u76F8",assetNormalTexture:"\u6CD5\u7EBF\u8D34\u56FE",assetNormalStrength:"\u6CD5\u7EBF\u5F3A\u5EA6",assetMetallic:"\u91D1\u5C5E\u5EA6",assetRoughness:"\u7C97\u7CD9\u5EA6",assetMetallicRoughnessTexture:"\u91D1\u5C5E\u7C97\u7CD9\u8D34\u56FE",assetOcclusionTexture:"AO \u8D34\u56FE",assetOcclusionStrength:"AO \u5F3A\u5EA6",resetValue:"\u6062\u590D Shader \u9ED8\u8BA4\u503C",modifiedValue:"\u5DF2\u504F\u79BB Shader \u9ED8\u8BA4\u503C",inactiveReasons:{baseTexture:"\u4EC5\u5728\u5DF2\u9009\u62E9\u57FA\u7840\u8D34\u56FE\u65F6\u751F\u6548\u3002",litMaterial:"\u4EC5\u5728\u201C\u53D7\u5149\u7167\u201D\u6A21\u5F0F\u4E0B\u751F\u6548\u3002",normalTexture:"\u4EC5\u5728\u5DF2\u9009\u62E9\u6CD5\u7EBF\u8D34\u56FE\u65F6\u751F\u6548\u3002",occlusionTexture:"\u4EC5\u5728\u5DF2\u9009\u62E9 AO \u8D34\u56FE\u65F6\u751F\u6548\u3002",alphaBlend:"\u4EC5\u5728\u201C\u534A\u900F\u660E\u201D\u6A21\u5F0F\u4E0B\u751F\u6548\u3002",alphaMask:"\u4EC5\u5728\u201C\u906E\u7F69\u201D\u6A21\u5F0F\u4E0B\u751F\u6548\u3002",alphaTransparency:"\u4EC5\u5728\u201C\u906E\u7F69\u201D\u6216\u201C\u534A\u900F\u660E\u201D\u6A21\u5F0F\u4E0B\u751F\u6548\u3002"},assetEmissionColor:"\u81EA\u53D1\u5149\u8272",assetEmissionIntensity:"\u81EA\u53D1\u5149\u5F3A\u5EA6",assetEmissionTexture:"\u81EA\u53D1\u5149\u8D34\u56FE",assetEmissionMaskUrl:"\u906E\u7F69\u8D34\u56FE",assetAlphaMode:"\u900F\u660E\u6A21\u5F0F",assetAlphaModeOpaque:"\u4E0D\u900F\u660E",assetAlphaModeMask:"\u906E\u7F69",assetAlphaModeBlend:"\u534A\u900F\u660E",assetAlphaOpacity:"\u4E0D\u900F\u660E\u5EA6",assetAlphaCutoff:"Alpha \u9608\u503C",assetAlphaTexture:"Alpha \u8D34\u56FE",createSlotMaterial:"\u6DFB\u52A0\u6750\u8D28\u69FD",slotList:"\u69FD\u5217\u8868",slotId:"\u69FD ID",slotOwnerPath:"\u69FD\u8282\u70B9\u8DEF\u5F84",slotMaterialAsset:"\u69FD\u6750\u8D28\u8D44\u4EA7",slotSourceMaterial:"\u6E90\u6750\u8D28",slotBindingPath:"\u7ED1\u5B9A\u8DEF\u5F84",reimportConflicts:"\u91CD\u5BFC\u5165\u6750\u8D28\u51B2\u7A81",summaryAsset:e=>`\u8D44\u4EA7\uFF1A${e}`,summaryMissingAsset:"\u8D44\u4EA7\u7F3A\u5931",summaryCustomOverride:"\u81EA\u5B9A\u4E49\u53C2\u6570",summaryInherit:"\u7EE7\u627F",summaryAddSlot:"\u6DFB\u52A0\u69FD",summarySlotCount:e=>`${e} \u4E2A\u69FD`,formatUsageCount:e=>e>0?`\u88AB ${e} \u5904\u4F7F\u7528`:"\u672A\u88AB\u4F7F\u7528",formatMaterialEditImpact:e=>e<=0?"\u5F53\u524D\u672A\u88AB\u573A\u666F\u4F7F\u7528\uFF0C\u4FEE\u6539\u53EA\u4F1A\u6539\u53D8\u6750\u8D28\u8D44\u4EA7\u672C\u8EAB\u3002":e===1?"\u4FEE\u6539\u4F1A\u5F71\u54CD\u5F53\u524D\u7ED1\u5B9A\u3002":`\u5171\u4EAB\u6750\u8D28\uFF0C\u4FEE\u6539\u4F1A\u5F71\u54CD ${e} \u5904\u7ED1\u5B9A\u3002`,formatDuplicateMaterialImpact:e=>e<=0?"\u590D\u5236\u540E\u521B\u5EFA\u4E00\u4E2A\u53EF\u72EC\u7ACB\u7F16\u8F91\u7684\u6750\u8D28\u8D44\u4EA7\u3002":e===1?"\u590D\u5236\u540E\u5F53\u524D\u5BF9\u8C61\u6216\u69FD\u4F1A\u4F7F\u7528\u72EC\u7ACB\u6750\u8D28\u3002":`\u590D\u5236\u540E\u5F53\u524D\u5BF9\u8C61\u6216\u69FD\u4F1A\u4F7F\u7528\u72EC\u7ACB\u6750\u8D28\uFF0C\u539F ${e} \u5904\u5171\u4EAB\u7ED1\u5B9A\u4E0D\u88AB\u7EE7\u7EED\u4FEE\u6539\u3002`,formatReimportConflictSummary:e=>`\u68C0\u6D4B\u5230 ${e} \u4E2A\u6750\u8D28\u69FD\u91CD\u5BFC\u5165\u5DEE\u5F02\uFF1B\u5DF2\u4FDD\u7559\u73B0\u6709\u7ED1\u5B9A\uFF0C\u9700\u4EBA\u5DE5\u786E\u8BA4\u4E0D\u53EF\u5339\u914D\u9879\u3002`,tooltips:{language:"\u5207\u6362\u7F8E\u672F\u6750\u8D28 Inspector \u7684\u663E\u793A\u8BED\u8A00\u3002",materialAsset:"\u9009\u62E9\u9879\u76EE\u7EA7\u5171\u4EAB\u6750\u8D28\u8D44\u4EA7\uFF0C\u6216\u4F7F\u7528\u53EA\u8BFB\u7684\u9ED8\u8BA4 PBR \u6750\u8D28\u3002",slotMaterialAsset:"\u672A\u9009\u62E9\u6750\u8D28\u8D44\u4EA7\u65F6\u4FDD\u7559 GLB \u539F\u59CB\u6750\u8D28\uFF1B\u9009\u62E9\u540E\u53EA\u8986\u76D6\u5F53\u524D\u6750\u8D28\u63D2\u69FD\u3002",baseTexture:"\u9009\u62E9\u9879\u76EE\u8D34\u56FE\u4F5C\u4E3A\u57FA\u7840\u8D34\u56FE\u3002\u8D34\u56FE\u8C03\u8272\u53C2\u6570\u4F1A\u5148\u4F5C\u7528\u4E8E\u8FD9\u5F20\u8D34\u56FE\u3002",assetProfile:"\u5171\u4EAB\u6750\u8D28\u8D44\u4EA7\u7684\u53C2\u6570\u4F1A\u5F71\u54CD\u6240\u6709\u7ED1\u5B9A\u8BE5\u8D44\u4EA7\u7684\u8282\u70B9\u3002",assetName:"\u6750\u8D28\u8D44\u4EA7\u540D\u79F0\u53EA\u7528\u4E8E\u5C55\u793A\uFF1B\u7ED1\u5B9A\u4F7F\u7528\u7A33\u5B9A\u6750\u8D28 ID\uFF0C\u4E0D\u53D7\u91CD\u547D\u540D\u5F71\u54CD\u3002",assetKind:"\u9009\u62E9\u8BE5\u6750\u8D28\u5F15\u7528\u7684 Shader Definition\uFF1B\u5207\u6362\u65F6\u4F1A\u4FDD\u7559\u517C\u5BB9\u53C2\u6570\u3002",lightingModel:"\u53D7\u5149\u7167\u6750\u8D28\u4F1A\u54CD\u5E94\u73AF\u5883\u5149\u548C\u76F4\u5C04\u5149\uFF1B\u4E0D\u53D7\u5149\u7167\u6750\u8D28\u9002\u5408 UI\u3001\u7279\u6548\u3001\u56FE\u6807\u548C\u5BFC\u89C6\u6807\u8BB0\u3002",baseColor:"\u57FA\u7840\u8272\u4F5C\u4E3A\u989C\u8272\u56E0\u5B50\uFF0C\u4F1A\u5728\u57FA\u7840\u8D34\u56FE\u5B8C\u6210\u8C03\u8272\u540E\u53C2\u4E0E\u76F8\u4E58\u3002\u4FEE\u6539\u5171\u4EAB\u6750\u8D28\u8D44\u4EA7\u4F1A\u5F71\u54CD\u6240\u6709\u7ED1\u5B9A\u8BE5\u6750\u8D28\u7403\u7684\u8282\u70B9\u3002",duplicateForObject:"\u590D\u5236\u5F53\u524D\u6750\u8D28\u7403\u4E3A\u8FD9\u4E2A\u5BF9\u8C61\u6216\u69FD\u7684\u72EC\u7ACB\u6750\u8D28\uFF0C\u7136\u540E\u81EA\u52A8\u66FF\u6362\u7ED1\u5B9A\u3002",brightness:"\u57FA\u7840\u8D34\u56FE\u4EAE\u5EA6\u500D\u7387\uFF0C1 \u4E3A\u4E0D\u6539\u53D8\uFF1B\u4EC5\u5728\u6709\u57FA\u7840\u8D34\u56FE\u65F6\u5F71\u54CD\u8D34\u56FE\u3002",saturation:"\u57FA\u7840\u8D34\u56FE\u9971\u548C\u5EA6\u500D\u7387\uFF0C1 \u4E3A\u4E0D\u6539\u53D8\uFF1B\u4EC5\u5728\u6709\u57FA\u7840\u8D34\u56FE\u65F6\u5F71\u54CD\u8D34\u56FE\u3002",contrast:"\u57FA\u7840\u8D34\u56FE\u5BF9\u6BD4\u5EA6\u500D\u7387\uFF0C1 \u4E3A\u4E0D\u6539\u53D8\uFF1B\u4EC5\u5728\u6709\u57FA\u7840\u8D34\u56FE\u65F6\u5F71\u54CD\u8D34\u56FE\u3002",hue:"\u57FA\u7840\u8D34\u56FE\u8272\u76F8\u504F\u79FB\uFF0C\u5355\u4F4D\u4E3A\u5EA6\uFF1B\u4EC5\u5728\u6709\u57FA\u7840\u8D34\u56FE\u65F6\u5F71\u54CD\u8D34\u56FE\u3002",normalTexture:"\u9009\u62E9\u6CD5\u7EBF\u8D34\u56FE\uFF0C\u8FD0\u884C\u65F6\u5E94\u7528\u5230 PBR/Standard \u6750\u8D28\u7684 bump/normal \u901A\u9053\u3002",normalStrength:"\u6CD5\u7EBF\u5F3A\u5EA6\uFF0C1 \u4E3A\u8D34\u56FE\u539F\u59CB\u5F3A\u5EA6\u3002",metallic:"\u91D1\u5C5E\u5EA6\uFF0C\u8303\u56F4 0 \u5230 1\u3002",roughness:"\u7C97\u7CD9\u5EA6\uFF0C\u8303\u56F4 0 \u5230 1\u3002",metallicRoughnessTexture:"\u9009\u62E9\u91D1\u5C5E\u7C97\u7CD9\u8D34\u56FE\u3002PBR \u8FD0\u884C\u65F6\u6309 GLB \u5E38\u7528\u7EA6\u5B9A\u8BFB\u53D6\u84DD\u8272\u91D1\u5C5E\u5EA6\u3001\u7EFF\u8272\u7C97\u7CD9\u5EA6\u3002",occlusionTexture:"\u9009\u62E9\u73AF\u5883\u906E\u853D AO \u8D34\u56FE\uFF0C\u53EA\u5BF9 PBR \u6750\u8D28\u751F\u6548\u3002",occlusionStrength:"AO \u5F3A\u5EA6\uFF0C1 \u4E3A\u8D34\u56FE\u539F\u59CB\u5F3A\u5EA6\u3002",emissionColor:"\u81EA\u53D1\u5149\u989C\u8272\uFF0C\u4F1A\u4E0E\u5F3A\u5EA6\u76F8\u4E58\u3002",emissionIntensity:"\u81EA\u53D1\u5149\u5F3A\u5EA6\uFF0C0 \u8868\u793A\u65E0\u81EA\u53D1\u5149\u3002",emissionTexture:"\u9009\u62E9\u81EA\u53D1\u5149\u8D34\u56FE\uFF1B\u82E5\u672A\u8BBE\u7F6E\u5219\u517C\u5BB9\u4F7F\u7528\u65E7\u906E\u7F69\u8D34\u56FE\u3002",emissionMaskUrl:"\u9009\u62E9\u7070\u5EA6\u8D34\u56FE\u4F5C\u4E3A\u81EA\u53D1\u5149\u5F3A\u5EA6\u906E\u7F69\u3002",alphaMode:"\u900F\u660E\u6A21\u5F0F\uFF1A\u4E0D\u900F\u660E\u3001Alpha Test \u906E\u7F69\u6216 Alpha Blend \u534A\u900F\u660E\u3002",alphaOpacity:"\u6750\u8D28\u6574\u4F53\u4E0D\u900F\u660E\u5EA6\uFF0C1 \u4E3A\u5B8C\u5168\u4E0D\u900F\u660E\u3002",alphaCutoff:"\u906E\u7F69\u6A21\u5F0F\u7684 Alpha \u622A\u65AD\u9608\u503C\u3002",alphaTexture:"\u9009\u62E9 Alpha/Opacity \u8D34\u56FE\u3002",createSlotMaterial:"\u8F93\u5165 GLB \u5B50\u8282\u70B9\u6216 mesh \u7684 ownerNodePath \u6765\u6DFB\u52A0\u69FD\u7ED1\u5B9A\uFF0C\u521D\u59CB\u4F7F\u7528\u9ED8\u8BA4 PBR \u6750\u8D28\u3002",slotList:"\u6839\u8282\u70B9\u4E0A\u7684\u6750\u8D28\u69FD\u4E3A\u53EA\u8BFB\u603B\u89C8\u3002",slotOwnerPath:"\u6750\u8D28\u69FD\u5B9A\u4F4D\u5230\u7684\u5B50\u8282\u70B9\u6216 mesh \u8DEF\u5F84\u3002",reimportConflicts:"\u6A21\u578B\u91CD\u5BFC\u5165\u540E\u65E0\u6CD5\u81EA\u52A8\u5339\u914D\u6216\u6E90\u6750\u8D28\u53D8\u5316\u7684\u69FD\u3002\u73B0\u6709\u7ED1\u5B9A\u4F1A\u4FDD\u7559\uFF0C\u4E0D\u4F1A\u9759\u9ED8\u5220\u9664\u6216\u8986\u76D6\u3002"}},en:{title:"Artist Material",slotTitle:"Material Slots",language:"Language",materialAsset:"Material Asset",materialCard:"Current Material",inheritNone:"Inherit / None",defaultMaterial:"Default PBR Material",defaultMaterialMeta:"BabylonJS-style default PBR material",defaultStandardMaterial:"Default Standard Material",defaultStandardMaterialMeta:"BabylonJS-style default Standard material",defaultMaterialReadOnly:"The system default material is read-only. Choose an editable material asset to adjust parameters.",replace:"Replace",batchReplaceUnsupported:"Batch material replacement is not wired yet. Select one object to replace its material.",duplicateForObject:"Copy",materialPickerTitle:"Select Material Asset",texturePickerTitle:"Select Texture Asset",emptyTexture:"Select Texture",emptyTextureMeta:"Choose a texture asset",clearTexture:"Clear Texture",clearTextureMeta:"Do not use a texture",missingTexture:"Missing texture asset",missingTextureMeta:"The current reference cannot be resolved in the project asset library",loadingTexture:"Loading texture",failedTexture:"Texture failed to load",assetProfile:"Asset Profile",assetProfileEmpty:"Select a material asset to edit asset parameters",assetName:"Asset Name",assetKind:"Shader",assetKindPbr:"PBR standard material",assetKindStandard:"Standard material",assetLightingModel:"Lighting Model",assetLightingModelLit:"Lit",assetLightingModelUnlit:"Unlit",assetBaseColor:"Base Color",assetBaseTexture:"Base Texture",assetBrightness:"Texture Brightness",assetSaturation:"Texture Saturation",assetContrast:"Texture Contrast",assetHue:"Texture Hue",assetNormalTexture:"Normal Texture",assetNormalStrength:"Normal Strength",assetMetallic:"Metallic",assetRoughness:"Roughness",assetMetallicRoughnessTexture:"Metallic-Roughness Texture",assetOcclusionTexture:"AO Texture",assetOcclusionStrength:"AO Strength",resetValue:"Reset to shader default",modifiedValue:"Modified from shader default",inactiveReasons:{baseTexture:"Available after assigning a base texture.",litMaterial:"Available only when the lighting model is Lit.",normalTexture:"Available after assigning a normal texture.",occlusionTexture:"Available after assigning an AO texture.",alphaBlend:"Available only in Blend alpha mode.",alphaMask:"Available only in Mask alpha mode.",alphaTransparency:"Available only in Mask or Blend alpha mode."},assetEmissionColor:"Emission Color",assetEmissionIntensity:"Emission Intensity",assetEmissionTexture:"Emission Texture",assetEmissionMaskUrl:"Mask Texture",assetAlphaMode:"Alpha Mode",assetAlphaModeOpaque:"Opaque",assetAlphaModeMask:"Mask",assetAlphaModeBlend:"Blend",assetAlphaOpacity:"Opacity",assetAlphaCutoff:"Alpha Cutoff",assetAlphaTexture:"Alpha Texture",createSlotMaterial:"Add Material Slot",slotList:"Slot List",slotId:"Slot ID",slotOwnerPath:"Slot Owner Path",slotMaterialAsset:"Slot Material Asset",slotSourceMaterial:"Source Material",slotBindingPath:"Binding Path",reimportConflicts:"Reimport Material Conflicts",summaryAsset:e=>`Asset: ${e}`,summaryMissingAsset:"Missing asset",summaryCustomOverride:"Custom override",summaryInherit:"Inherit",summaryAddSlot:"Add slot",summarySlotCount:e=>`${e} slot${e===1?"":"s"}`,formatUsageCount:e=>e>0?`Used in ${e} place${e===1?"":"s"}`:"Unused",formatMaterialEditImpact:e=>e<=0?"This material is not used in the scene; edits only change the asset.":e===1?"Edits affect the current binding.":`Shared material: edits affect ${e} bindings.`,formatDuplicateMaterialImpact:e=>e<=0?"Copying creates an independently editable material asset.":e===1?"After copying, the current object or slot uses an independent material.":`After copying, the current object or slot uses an independent material; the original ${e} shared bindings are left unchanged.`,formatReimportConflictSummary:e=>`${e} material slot reimport difference${e===1?"":"s"} detected. Existing bindings are preserved until unmatched items are resolved.`,tooltips:{language:"Switch the artist material Inspector language.",materialAsset:"Choose a project-level shared material asset, or use the read-only Default PBR material.",slotMaterialAsset:"Leave this unset to preserve the original GLB material, or choose a material asset to override only this slot.",baseTexture:"Choose a project texture as the base texture. Texture adjustment parameters are applied to this texture first.",assetProfile:"Shared asset parameters affect every node bound to this material asset.",assetName:"Material asset names are display-only for bindings; stable material IDs survive renames.",assetKind:"Select the Shader Definition referenced by this material; compatible values survive a change.",lightingModel:"Lit materials respond to environment and directional lights; unlit materials are useful for UI, VFX, icons, and markers.",baseColor:"Base color is the final color factor multiplied after base texture adjustment. Editing the shared material asset affects every bound node.",duplicateForObject:"Copy the current material as an independent material for this object or slot, then bind it automatically.",brightness:"Base texture brightness multiplier. It only affects materials with a base texture; 1 leaves the texture unchanged.",saturation:"Base texture saturation multiplier. It only affects materials with a base texture; 1 leaves the texture unchanged.",contrast:"Base texture contrast multiplier. It only affects materials with a base texture; 1 leaves the texture unchanged.",hue:"Base texture hue offset in degrees. It only affects materials with a base texture.",normalTexture:"Choose a normal map applied to the runtime bump/normal channel for PBR and Standard materials.",normalStrength:"Normal strength. 1 keeps the texture at original strength.",metallic:"Metallic value from 0 to 1.",roughness:"Roughness value from 0 to 1.",metallicRoughnessTexture:"Choose a metallic-roughness texture. PBR runtime reads blue as metallic and green as roughness by the common GLB convention.",occlusionTexture:"Choose an ambient occlusion texture. Applies to PBR materials.",occlusionStrength:"Ambient occlusion strength. 1 keeps the texture at original strength.",emissionColor:"Emission color multiplied by emission intensity.",emissionIntensity:"Emission intensity. 0 means no emission.",emissionTexture:"Choose an emissive texture. If empty, the mask texture remains the fallback.",emissionMaskUrl:"Choose a grayscale texture to modulate emission intensity.",alphaMode:"Alpha mode: opaque, alpha-test mask, or alpha-blend transparency.",alphaOpacity:"Overall material opacity. 1 is fully opaque.",alphaCutoff:"Alpha-test cutoff threshold for mask mode.",alphaTexture:"Choose an alpha/opacity texture.",createSlotMaterial:"Enter a GLB child node or mesh ownerNodePath to add a slot binding with the Default PBR material.",slotList:"Material slots on the root object are a readonly overview.",slotOwnerPath:"Child node or mesh path targeted by this material slot.",reimportConflicts:"Slots whose source material changed or could not be matched after model reimport. Existing bindings are preserved instead of being silently deleted or overwritten."}}};function uu(e){return Yj[e]??Yj.zh}function Xg(e){return e.metadata?.artistMaterialInspectorLanguage==="en"?"en":"zh"}var p9={},Jj=new WeakMap;function Xj(e,t,r,n,o){return wn({path:e,label:t,value:r,order:n,persistence:"readonly",source:"Document",tooltip:o})}function Qj(e,t){return Kj(e,tN(t))}function f9(e){return{materialPickerTitle:e.materialPickerTitle,replace:e.replace,duplicateForObject:e.duplicateForObject,duplicateForObjectTooltip:e.tooltips.duplicateForObject,summaryMissingAsset:e.summaryMissingAsset,summaryInherit:e.summaryInherit,inheritNone:e.inheritNone}}function g9(e){return{formatUsageCount:e.formatUsageCount,formatEditImpact:e.formatMaterialEditImpact,formatDuplicateImpact:e.formatDuplicateMaterialImpact}}function tN(e){return{defaultMaterial:e.defaultMaterial,defaultStandardMaterial:e.defaultStandardMaterial,defaultMaterialMeta:e.defaultMaterialMeta,defaultStandardMaterialMeta:e.defaultStandardMaterialMeta,formatMaterialMeta:t=>`Material - ${t}`}}function rN(e,t,r,n,o={}){if(!t)return[];let a=o.materialShaderDefinitions?.get(t.shaderId)??Uo(t.shaderId),i=E9(e,t,r,n,o,a??void 0);if(oN(t,o))return[...i,wn({path:`scene.materialAssets.${t.id}.properties`,label:r.assetProfile,value:r.defaultMaterialReadOnly,order:n+2,source:"Document",effect:"default",disabledReason:r.defaultMaterialReadOnly,tags:["ArtistMaterial","MaterialAsset"],tooltip:r.tooltips.assetProfile})];if(!a)return i;let s=[...a.inspector.fields].sort((c,d)=>c.order-d.order||c.path.localeCompare(d.path)).map(c=>h9({document:e,materialAsset:t,definition:a,fieldDefinition:c,text:r,context:o,orderOffset:n}));return[...i,...s]}function h9(e){let{fieldDefinition:t}=e,r=Zj(e.text,t.labelKey,t.label??t.path),n=y9(e.text,t.tooltipKey,t.tooltip),o=nN(e.materialAsset.properties,t),a;if(t.control==="texture")a=T9({path:`${Na}${e.materialAsset.id}.${t.path}`,label:r,value:typeof o=="string"?o:"",order:e.orderOffset+t.order,text:e.text,context:e.context,tooltip:n});else if(t.control==="number")a=x9(e.document,e.materialAsset,t.path,r,typeof o=="number"?o:Number(t.defaultValue),e.orderOffset+t.order,t,n,e.context.materialShaderDefinitions);else if(t.control==="enum")a=M9(e.document,e.materialAsset,t.path,r,String(o),e.orderOffset+t.order,(t.options??[]).map(c=>({value:c.value,label:Zj(e.text,c.labelKey,c.label??c.value)})),n,e.context.materialShaderDefinitions);else{let c=t.control;a=Zg(e.document,e.materialAsset,t.path,r,o,e.orderOffset+t.order,c,c,"immediate",n,e.context.materialShaderDefinitions)}let i=t.control==="color"?Ca(e.definition.shaderId,t.path,e.context.materialShaderDefinitions):null;a={...a,displayPrecision:t.displayPrecision,precision:t.precision,controlOptions:{...a.controlOptions,...t.control==="color"?{colorChannels:i?.kind==="color"&&i.channels===4?4:3}:{},materialShaderSectionId:t.sectionId,materialShaderUpdateClass:t.updateClass,materialShaderBinding:t.binding}};let s=t.conditions?.find(c=>!b9(e.definition,e.materialAsset.properties,c));return s&&(a=R9(a,!1,S9(e.text,s))),D9(a,e.text,t.defaultValue)}function nN(e,t){if(t.control==="texture"){let n=MT(e,t.schemaPath??t.path);return iN(n)}let r=MT(e,t.path);return r===void 0?structuredClone(t.defaultValue):r}function MT(e,t){let r=t.replace(/^properties\./,"").split(".").filter(Boolean),n=e;for(let o of r){if(!n||typeof n!="object"||Array.isArray(n))return;n=n[o]}return n}function b9(e,t,r){let n=e.inspector.fields.find(i=>i.path===r.path),o=n?nN(t,n):MT(t,r.path);if(r.operator==="truthy")return!!o;let a=JSON.stringify(o??null)===JSON.stringify(r.value??null);return r.operator==="equals"?a:!a}function Zj(e,t,r){let n=t?e[t]:void 0;return typeof n=="string"?n:r}function y9(e,t,r){let n=t?e.tooltips[t]:void 0;return typeof n=="string"?n:r}function S9(e,t){let r=t.inactiveReasonKey?e.inactiveReasons[t.inactiveReasonKey]:void 0;return typeof r=="string"?r:t.inactiveReason??"This field is inactive for the current material state."}function I9(e){return e.defaultMaterialAssetIds??[ms,Wc]}function oN(e,t){return lu(e,I9(t))||e.system?.preset==="default-pbr"||e.system?.preset==="default-standard"}function E9(e,t,r,n,o,a){if(!oN(t,o)){let i=o.materialShaderDefinitions??Dn;return[Zg(e,t,"name",r.assetName,Qj(t,r),n,"string","string","change",r.tooltips.assetName,i),{path:`${Na}${t.id}.shaderId`,label:r.assetKind,valueType:"string",control:"enum",value:t.shaderId,readOnly:!1,persistence:"document",commitMode:"immediate",order:n+1,tooltip:r.tooltips.assetKind,tags:["ArtistMaterial","MaterialAsset","ShaderDefinition"],options:i.list().map(s=>({value:s.shaderId,label:s.displayName})),controlOptions:{materialShaderSelector:!0,shaderId:t.shaderId,shaderVersion:a?.version,shaderRuntimeKind:a?.runtimeKind,...a?.sourceFile?{shaderSourceFile:a.sourceFile}:{}},validate:s=>typeof s=="string"&&i.get(s)?{ok:!0,value:s}:{ok:!1,message:"Unknown Shader Definition."},coerce:s=>typeof s=="string"?s.trim():""}]}return[Xj(`${Na}${t.id}.name`,r.assetName,Qj(t,r),n,r.tooltips.assetName),Xj(`${Na}${t.id}.shaderId`,r.assetKind,a?.displayName??t.shaderId,n+1,r.tooltips.assetKind)]}function T9(e){let t=A9(e.context,e.value);return{path:e.path,label:e.label,valueType:"string",control:"custom",customControl:"asset-picker-card",value:e.value,readOnly:!1,persistence:"document",commitMode:"change",order:e.order,tooltip:e.tooltip,tags:["ArtistMaterial","TextureAsset"],controlOptions:aN(e.context,e.text,e.value,t),validate:r=>{let n=eN(e.context,e.path,r);return n.ok?{ok:!0,value:n.value}:{ok:!1,message:"Invalid texture selection."}},coerce:r=>{let n=eN(e.context,e.path,r);return n.ok?n.value:null}}}function aN(e,t,r,n){return{...Wj({textureAssets:e.textureAssets,currentTexture:n,currentValue:r,pickerText:P9(t),candidateValue:"assetId"})}}function A9(e,t){return Jg(e.textureAssets,t)}function iN(e){let t=typeof e?.textureAssetId=="string"?e.textureAssetId.trim():"";return t||(typeof e?.url=="string"?e.url.trim():"")}function eN(e,t,r){if(r==null||r==="")return{ok:!0,value:null};if(typeof r!="string")return{ok:!1};let n=r.trim();if(!n)return{ok:!0,value:null};if(!t.endsWith(".textureAssetId"))return{ok:!0,value:n};let o=Jg(e.textureAssets,n);return o?{ok:!0,value:o.id}:/^[A-Za-z0-9_-]+$/.test(n)?{ok:!0,value:n}:{ok:!0,value:null}}function P9(e){return{texturePickerTitle:e.texturePickerTitle,replace:e.replace,emptyTexture:e.emptyTexture,emptyTextureMeta:e.emptyTextureMeta,clearTexture:e.clearTexture,clearTextureMeta:e.clearTextureMeta,missingTexture:e.missingTexture,missingTextureMeta:e.missingTextureMeta,loadingTexture:e.loadingTexture,failedTexture:e.failedTexture}}function x9(e,t,r,n,o,a,i={},s,c){return{...Zg(e,t,r,n,o,a,"number","number","live",s,c),...i.min!=null?{min:i.min}:{},...i.max!=null?{max:i.max}:{},...i.softMin!=null?{softMin:i.softMin}:{},...i.softMax!=null?{softMax:i.softMax}:{},step:i.step??.05}}function M9(e,t,r,n,o,a,i,s,c){return{...Zg(e,t,r,n,o,a,"enum","enum","immediate",s,c),options:i,controlOptions:{variant:"segmented"}}}function Zg(e,t,r,n,o,a,i,s,c,d,u){return{...qj({document:e,materialAsset:t,fieldPath:r,label:n,value:o,order:a,valueType:i,control:s,commitMode:c,tooltip:d,pathPrefix:Na}),validate:l=>{let m=Mr(r,l);return ao(r,m,t.shaderId,u)?{ok:!0,value:m}:{ok:!1,message:`Invalid material asset field: ${r}.`}},coerce:l=>Mr(r,l)}}function D9(e,t,r){return e.readOnly?e:{...e,controlOptions:{...e.controlOptions,resetValue:structuredClone(r),modified:!O9(e.value,r),resetLabel:t.resetValue,modifiedLabel:t.modifiedValue}}}function O9(e,t){return JSON.stringify(e??null)===JSON.stringify(t??null)}function R9(e,t,r){return t?e:{...e,controlOptions:{...e.controlOptions,conditionalInactive:!0,conditionalInactiveReason:r}}}function sN(e,t,r,n){let o=r.currentAsset??me(e,r.value);return{path:r.path,label:r.label,valueType:"string",control:"custom",customControl:"asset-picker-card",value:r.value,readOnly:!1,persistence:"document",commitMode:"change",order:r.order,controlOptions:v9(Qg(e,o,r.text,r.value,n,r.previewContext),r.currentAction),tooltip:r.text.tooltips.materialAsset,tags:["ArtistMaterial","MaterialAsset"],document:e,validate:a=>{let i=ql(a);return i&&Gc(e,i)?{ok:!0,value:a}:a==null||a===""?{ok:!0,value:a}:typeof a=="string"&&Gc(e,a)?{ok:!0,value:a}:{ok:!1,message:`Material asset not found: ${String(a)}`}},coerce:a=>typeof a=="string"?a.trim():a,effect:C9(t,r.value),validation:w9(r.value,o,r.text),disabledReason:t==="group"?"Groups do not own materials.":void 0}}function C9(e,t){return e==="group"?"unsupported":t.trim()?"override":void 0}function w9(e,t,r){let n=e.trim();if(!(!n||t))return{status:"error",code:"material.asset.missing",message:`${r.summaryMissingAsset}: ${n}`}}function v9(e,t){return t?{...e,currentActionId:t.actionId,currentActionParams:Object.fromEntries(Object.entries(t.params).filter(r=>typeof r[1]=="string"&&r[1].length>0))}:e}function _9(e,t,r){return sN(e,t,r,Wo.getCachedUsageIndex(e))}function Qg(e,t,r,n,o,a={}){return{...Wo.createPickerControlOptions({materialAssets:e.scene.materialAssets??[],currentAsset:t,currentValue:n,pickerText:f9(r),displayText:tN(r),document:e,ownershipText:g9(r),previewContext:a},o),actionDisabledReason:r.batchReplaceUnsupported}}function k9(e,t,r,n,o={}){if(o.textureAssets?.length||o.resolveTextureAssetUrl)return Qg(e,t,r,n,Wo.getCachedUsageIndex(e),o);let a=Jj.get(e);a||(a=new WeakMap,Jj.set(e,a));let i=a.get(r);i||(i=new WeakMap,a.set(r,i));let s=t??p9,c=i.get(s);c||(c=new Map,i.set(s,c));let d=c.get(n);if(d)return d;let u=Qg(e,t,r,n,Wo.getCachedUsageIndex(e),o);return c.set(n,u),u}var j9={createSelectorInspectorPropertyWithUsage:sN,createSelectorInspectorPropertyWithCachedUsage:_9,createPickerControlOptionsWithUsage:Qg,createPickerControlOptionsWithCachedUsage:k9},mu=j9;function cN(e,t,r){let n=W_(e,t);if(n.state==="asset"&&n.materialAsset){let o=Ij(n.materialAsset),a=o==="default-pbr"?r.defaultMaterial:o==="default-standard"?r.defaultStandardMaterial:n.materialAsset.name??n.materialAsset.id;return r.summaryAsset(a)}return n.state==="missing-asset"?r.summaryMissingAsset:n.state==="override"?r.summaryCustomOverride:r.summaryInherit}function dN(e,t,r){let n=Qr(e,t).length;return n>0?r.summarySlotCount(n):r.summaryAddSlot}function N9(e,t,r,n,o,a={}){let i=uu(Xg(t)),s=[];return Qr(e,t).forEach((d,u)=>{let l=so(d)??d.slotId,m=hE(t,d),p=o?.materialSlotBindings?.[d.slotId]??m,h=p?.materialAssetId?me(e,p.materialAssetId):null,g=(u+1)*100,f=Jl(d),y=Fa(d)[0],A=y==null?null:qc(d,y)?.profile,T=mu.createSelectorInspectorPropertyWithUsage(e,r,{path:f,label:d.label||DT(l,u,i),value:m?.materialAssetId??"",order:g,text:i,currentAsset:h,currentAction:h?{actionId:"material.open-asset",params:{materialAssetId:h.id,browserAssetId:`material:${h.id}`,sourceObjectId:t.id,sourceBindingPath:f}}:A?{actionId:"material.create-from-source",params:{sourceObjectId:t.id,sourceBindingPath:f}}:void 0,previewContext:a},n);s.push(G9(T,d,p,i,a))}),s}function G9(e,t,r,n,o){let a=Fa(t)[0],i=a==null?t.materialNames?.[0]??t.materialName??null:du(t,a),s=a==null?null:qc(t,a)?.profile,c=s?La(Wg(s),o):void 0,d=i?`GLB \u6E90\u6750\u8D28\uFF1A${i}`:"GLB \u6E90\u6750\u8D28",u=e.controlOptions??{},l=Array.isArray(u.candidates)?u.candidates.map(p=>p&&typeof p=="object"&&!Array.isArray(p)&&p.value===""?{...p,label:"\u6062\u590D\u7EE7\u627F",meta:d,...c?{preview:c}:{}}:p):void 0,m=r?.materialAssetId&&typeof u.currentMeta=="string"&&u.currentMeta?`${u.currentMeta} \xB7 ${d}`:d;return{...e,tooltip:n.tooltips.slotMaterialAsset,controlOptions:{...u,...r?.materialAssetId?{}:{currentLabel:i?`\u7EE7\u627F GLB\uFF1A${i}`:"\u7EE7\u627F GLB \u539F\u6750\u8D28",...c?{currentPreview:c}:{}},currentMeta:m,...l?{candidates:l}:{},...i?{sourceMaterialName:i}:{}}}}function L9(e,t,r,n){let o=Qr(e,t);if(o.length===0)return[];let a=[],i=Lj(e,t),s=$c(e,t.id)??t.overrides;i.issues.length>0&&a.push(z9("asset.materialSlots.reimportConflicts",r.reimportConflicts,F9(i.issues,r),-1,r.tooltips.reimportConflicts));let c=o.map((d,u)=>$9(e,t,d,u,r,n,s));return a.push({path:"asset.materialSlots",label:r.slotList,valueType:"object",control:"custom",customControl:"material-slot-list",value:{count:o.length,slots:c},readOnly:!0,persistence:"readonly",commitMode:"immediate",order:0,controlOptions:{labels:{material:r.slotMaterialAsset,slotId:r.slotId,ownerNodePath:r.slotOwnerPath,sourceMaterial:r.slotSourceMaterial,primitive:"Primitive",triangles:"Triangles",bounds:"Bounds",bindingPath:r.slotBindingPath},slots:c},tags:["ArtistMaterial","MaterialSlot","Readonly"],tooltip:r.tooltips.slotList,document:e}),a}function F9(e,t){let r=e.map(n=>{let o=n.label||n.ownerNodePath||n.slotId||n.previousSlotId||n.bindingPath||"slot";if(n.reason==="source-material-changed"){let a=n.previousSourceMaterialIndex==null?"?":`#${n.previousSourceMaterialIndex}`,i=n.sourceMaterialIndex==null?"?":`#${n.sourceMaterialIndex}`;return`${o}: source material ${a} -> ${i}; ${n.materialAssetId??t.inheritNone}`}return n.reason==="slot-removed"?`${o}: removed slot; ${n.materialAssetId??t.inheritNone}`:`${o}: ${n.status}`});return[t.formatReimportConflictSummary(e.length),...r].join(`
|
|
21
|
+
`)}function $9(e,t,r,n,o,a,i){let s=hE(t,r),c=i?.materialSlotBindings?.[r.slotId]??s,d=me(e,c?.materialAssetId??ps),u=mu.createPickerControlOptionsWithUsage(e,d,o,s?.materialAssetId??"",a),l=Fa(r),m=l[0],p=m==null?null:du(r,m),h=r.sourceSurfaces[0],g=h.ownerNodePath;return{key:J_(r),label:r.label||DT(g,n,o),slotId:r.slotId,sourceSurfaces:structuredClone(r.sourceSurfaces),ownerNodePath:g,materialAssetId:s?.materialAssetId??"",materialLabel:u.currentLabel??o.inheritNone,materialMeta:u.currentMeta??o.summaryInherit,...u.currentPreview?{materialPreview:u.currentPreview}:{},...m==null?{}:{sourceMaterialIndex:m},...l.length?{sourceMaterialIndices:l}:{},...p?{sourceMaterialName:p}:{},...r.materialNames?.length?{materialNames:r.materialNames}:{},...r.sourceSurfaces.length===1&&typeof h.triangleCount=="number"?{triangleCount:h.triangleCount}:{},...r.sourceSurfaces.length===1&&h.boundingBox?{boundingBox:h.boundingBox}:{},bindingPath:Jl(r)}}var B9={createChildMaterialBindingInspectorPropertiesWithUsage:N9,createReadonlyMaterialSlotListInspectorPropertiesWithUsage:L9},lN=B9;function DT(e,t,r){let n=e.split("/").filter(Boolean).pop()??e;return`${r.slotMaterialAsset} ${t+1}: ${n}`}function z9(e,t,r,n,o){return wn({path:e,label:t,value:r,order:n,persistence:"readonly",source:"Document",tooltip:o})}var uN="materialAsset::",V9=5;function U9(e){return e.startsWith(uN)&&e.slice(uN.length).trim()||null}function H9(e,t,r,n,o,a){let i=[],s=Xg(t),c=uu(s),d=t.overrides?.materialBinding,u=$c(e,t.id)??t.overrides,l=u?.materialBinding??d,m=l?.materialAssetId??ps,p=me(e,m),h=l?.materialAssetId?l:{...l,materialAssetId:ps};if(!Y_(e,t)){let y="overrides.materialBinding.materialAssetId";i.push({id:"artistMaterial",title:c.title,order:46,placement:"body",summary:cN(h,p,c),persistence:"document",collapsedByDefault:!1,properties:[mu.createSelectorInspectorPropertyWithUsage(e,r,{path:y,label:c.materialCard,value:d?.materialAssetId??"",order:0,text:c,currentAsset:p,currentAction:{actionId:"material.open-asset",params:{materialAssetId:p?.id,browserAssetId:p?`material:${p.id}`:void 0,sourceObjectId:t.id,sourceBindingPath:y}},previewContext:n},a)]})}let f=r==="primitive"?[]:lN.createChildMaterialBindingInspectorPropertiesWithUsage(e,t,r,a,u,n);return f.length>0&&i.push({id:"artistMaterialSlots",title:c.slotTitle,order:48,placement:"body",summary:dN(e,t,c),persistence:"document",collapsedByDefault:!1,properties:f}),i}function K9(e,t,r,n){let o=U9(t),a=o?me(e,o):null;if(!a)return null;let i=uu("zh"),s=n.forMaterial(a.id),c=rN(e,a,i,0,r),d=`scene.materialAssets.${a.id}.properties`,u=`${d}.`,l=T=>T.path===d||T.path.startsWith(u),m=c.filter(T=>!l(T)),p=c.filter(l),h=[{path:`scene.materialAssets.${a.id}.preview`,label:a.name||a.id,valueType:"object",control:"custom",customControl:"asset-picker-card",value:a.id,readOnly:!0,persistence:"readonly",commitMode:"immediate",order:-10,controlOptions:{currentMaterialAssetId:a.id,currentMaterialShaderId:a.shaderId,...a.definitionVersion!=null?{currentMaterialDefinitionVersion:a.definitionVersion}:{},currentLabel:a.name||a.id,currentMeta:a.shaderId,currentPreview:La(a.properties,r)},document:e},...m,J9(`scene.materialAssets.${a.id}.usageCount`,"\u5F15\u7528",i.formatUsageCount(s.length),10)],g=[Bc({path:`scene.materialAssets.${a.id}.actions.locate`,label:"\u5728 Assets \u4E2D\u5B9A\u4F4D",actionId:"material.locate-asset",icon:"asset",params:{materialAssetId:a.id,browserAssetId:`material:${a.id}`},order:20,tooltip:"\u5728 Assets \u9762\u677F\u4E2D\u5B9A\u4F4D\u5F53\u524D\u6750\u8D28\u3002",disabled:!1}),Bc({path:`scene.materialAssets.${a.id}.actions.back`,label:"\u8FD4\u56DE\u6765\u6E90",actionId:"material.back-to-owner",icon:"chevron-left",params:{materialAssetId:a.id},order:21,tooltip:"\u8FD4\u56DE\u6253\u5F00\u5F53\u524D\u6750\u8D28\u524D\u7684\u5BF9\u8C61\u6216 Prefab Inspector\u3002",disabled:!1})],f=[{id:"materialAssetSummary",title:"Material",order:10,regionId:Lv,persistence:"readonly",collapsedByDefault:!1,properties:h}];f.push({id:"materialAssetNavigation",title:"\u5BFC\u822A",order:15,placement:"body",persistence:"readonly",collapsedByDefault:!1,properties:g}),f.push({id:"materialReferences",title:`\u4F7F\u7528\u4F4D\u7F6E (${s.length})`,order:20,placement:"body",persistence:"readonly",collapsedByDefault:s.length===0,properties:[{path:`scene.materialAssets.${a.id}.references.browser`,label:"\u4F7F\u7528\u4F4D\u7F6E",valueType:"object",control:"custom",customControl:"material-reference-list",controlOptions:{previewLimit:V9,items:s.map((T,D)=>({key:`${T.scope}:${T.gameObjectId}:${T.bindingPath}:${D}`,label:T.label,scope:T.scope,actionId:"material.open-owner",params:Object.fromEntries(Object.entries({materialAssetId:a.id,ownerScope:T.scope,sourceObjectId:T.gameObjectId,sourceBindingPath:T.bindingPath,slotId:T.slotId,ownerNodePath:T.ownerNodePath,prefabAssetId:T.prefabAssetId,prefabNodeId:T.prefabNodeId}).filter(P=>typeof P[1]=="string"&&P[1].length>0))}))},value:s.length,readOnly:!1,persistence:"readonly",commitMode:"immediate",order:0,tooltip:s.length>0?"\u67E5\u770B\u4F7F\u7528\u5F53\u524D\u6750\u8D28\u7684 Scene \u5BF9\u8C61\u548C Prefab \u8282\u70B9\u3002":"\u5F53\u524D\u672A\u88AB\u4EFB\u4F55\u5BF9\u8C61\u6216 Prefab \u4F7F\u7528\u3002",document:e}]});let y=r.materialShaderDefinitions?.get(a.shaderId)??Uo(a.shaderId);for(let[T,D]of[...y?.inspector.sections??[]].sort((P,C)=>P.order-C.order||P.id.localeCompare(C.id)).entries())mN(f,{id:`material${D.id.charAt(0).toUpperCase()}${D.id.slice(1)}`,title:D.title,order:D.order,properties:[...T===0?p.filter(P=>P.path===d):[],...p.filter(P=>P.controlOptions?.materialShaderSectionId===D.id)]});let A=new Set(f.flatMap(T=>T.properties.map(D=>D.path)));return mN(f,{id:"materialAdvanced",title:"Advanced",order:80,properties:p.filter(T=>!A.has(T.path))}),{targetIds:[t],activeId:t,label:a.name||a.id,document:e,selection:{targetIds:[t],activeId:t,scopeType:"scene",targetKind:"materialAsset",capabilities:["material"],document:e},sections:f}}function W9(e,t,r,n={},o){return H9(e,t,r,n,o,Wo.getCachedUsageIndex(e))}function q9(e,t,r={}){return K9(e,t,r,Wo.getCachedUsageIndex(e))}var Y9={createArtistMaterialInspectorSectionsWithCachedUsage:W9,createEditorSceneMaterialAssetInspectorObjectWithCachedUsage:q9},pN=Y9;function mN(e,t){t.properties.length!==0&&e.push({...t,placement:"body",persistence:t.properties.some(r=>r.persistence==="document")?"document":"readonly",collapsedByDefault:!1})}function J9(e,t,r,n,o){return wn({path:e,label:t,value:r,order:n,persistence:"readonly",source:"Document",tooltip:o})}function fN(){return{isCoreMaterialOverridePath:ME,isMaterialAssetIdOverridePath:Pg,addMaterialAsset:pT}}function gN(e,t=[]){return e.assets.filter(xt).flatMap(r=>{let n=r.prefab?.sourceAssetId;if(typeof n!="string"||n.length===0)return[];let o=OT(r,t);return[{id:`prefab:${r.id}`,assetId:r.id,guid:r.guid,type:"prefab",kind:"prefab",label:r.displayName??r.id,displayName:r.displayName??r.id,category:r.category??"Prefab",origin:"project",placeable:o.placeable,...o.availability?{availability:structuredClone(o.availability)}:{},dedupeKey:`prefab:${r.guid??r.id}`,prefab:{id:r.id,guid:r.guid,displayName:r.displayName??r.id,category:r.category??"Prefab",...structuredClone(r.prefab),sourceAssetId:n},metadata:structuredClone(r.metadata??{})}]})}function OT(e,t){let r=e.prefab?.sourceAssetId,n=typeof r=="string"?t.find(a=>a.assetId===r||a.id===r):void 0,o=n?.availability;return{placeable:n?.placeable!==!1&&o?.status!=="unavailable",...o?{availability:o}:{}}}function eh(e,t,r=fN()){if(e==="displayName"&&typeof t=="string")return t.trim();if(e==="prefab.defaults.active")return t??null;if(hN(e))return t==null?null:e==="prefab.defaults.shadow"?t:e==="prefab.defaults.shadow.cast"||e==="prefab.defaults.shadow.receive"?t===!0?"enabled":t===!1?"none":t:t;if(r.isMaterialAssetIdOverridePath(e)&&typeof t=="string"){let n=t.trim();return n||null}return t}function th(e,t,r=fN()){if(e==="displayName")return typeof t=="string"&&t.length>0;if(e==="prefab.defaults.active")return t==null||typeof t=="boolean";if(hN(e)){if(e==="prefab.defaults.shadow")return!!t&&typeof t=="object"&&typeof t.cast=="boolean"&&typeof t.receive=="boolean";let n=e.slice(16);return Vc({path:n,nodeKind:"instance",value:t}).ok}return r.isCoreMaterialOverridePath(e)?r.isMaterialAssetIdOverridePath(e)&&(t==null||typeof t=="string"&&t.trim().length>0):!1}function hN(e){return e==="prefab.defaults.shadow"||e==="prefab.defaults.shadow.cast"||e==="prefab.defaults.shadow.receive"}function bN(e,t,r){let n=[...e.assets];r&&!n.some(a=>a.id===r.id)&&n.push(structuredClone(r));let o=yN(t);return n.some(a=>a.id===t.id)||n.push(structuredClone(o)),n.length===e.assets.length?e:{...e,assets:n}}function rh(e,t,r,n){let o=e.assets.find(s=>s.id===t&&xt(s));if(!o)return e;let a=n&&!e.assets.some(s=>s.id===n.id)?[...e.assets,structuredClone(n)]:e.assets,i=yN({...structuredClone(r),id:t});return JSON.stringify(i)===JSON.stringify(o)&&a===e.assets?e:{...e,assets:a.map(s=>s.id===t?i:s)}}function X9(e){if(!xt(e))return e;let t=Cn(e);return t.ok?t.prefabAsset:e}function yN(e){if(!xt(e))return e;let t=X9(e),r=Mt(t);if(!r||!Array.isArray(t.prefab?.nodes))return t;let n=t.prefab.nodes.findIndex(a=>a.id===r);if(n<0)return t;let o=structuredClone(t.prefab.nodes[n]);if(o.name=t.displayName??o.name,t.prefab.defaults){let{shadow:a,...i}=t.prefab.defaults;Object.keys(i).length>0?o.defaults=structuredClone(i):delete o.defaults}else delete o.defaults;return t.prefab.nodes=[...t.prefab.nodes],t.prefab.nodes[n]=o,t}function IN(e){if(e.asset&&typeof e.asset=="object"){let r=e.asset;if(typeof r.assetId=="string")return su(e.asset);if(typeof r.id=="string")return structuredClone(e.asset)}if(!e.assetId)return null;let t=e.document.assets.find(r=>r.id===e.assetId);return t?structuredClone(t):null}function EN(e){return e==="cube"||e==="sphere"||e==="plane"||e==="capsule"?e:null}function TN(e,t){if(e.actionId==="asset.create-prefab"){let i=t.createSourceAssetFromActionInput(e);if(!i||i.type==="prefab"||t.hasPrefabForSourceAsset(e.document,i.id))return null;let s=t.createPrefabDefinitionFromAsset(e.document,i);return{label:`Create prefab ${s.displayName??s.id}`,patch:{kind:"scene.prefab-asset.create",sourceAsset:i,prefabAsset:s},createdId:s.id}}if(e.actionId==="asset.create-prefab-from-game-object"){if(!e.activeId)return null;let i=t.createPrefabDefinitionFromGameObject(e.document,e.activeId);return!i||t.hasPrefabForSourceAsset(e.document,i.prefab?.sourceAssetId)?null:{label:`Create prefab ${i.displayName??i.id} from ${e.activeId}`,patch:{kind:"scene.prefab-asset.create-from-game-object",sourceGameObjectId:e.activeId,prefabAsset:i},changedId:e.activeId,createdId:i.id,changedIds:[e.activeId],reprojectIds:[e.activeId]}}if(e.actionId==="asset.duplicate-prefab"){if(!e.assetId)return null;let i=t.createDuplicatedPrefabDefinition(e.document,e.assetId);if(!i)return null;let s=e.document.assets.find(c=>c.id===e.assetId);return{label:`Duplicate prefab ${s?.displayName??s?.id??e.assetId}`,patch:{kind:"scene.prefab-asset.duplicate",sourcePrefabAssetId:e.assetId,prefabAsset:i},createdId:i.id}}if(e.actionId==="asset.add-to-current-prefab"){if(!e.assetId||!e.targetPrefabAssetId)return null;let i=t.findPrefabAsset(e.document,e.targetPrefabAssetId),s=t.createSourceAssetFromActionInput(e),c=RT(e.value);if(!i||!s)return null;let d=pg(i,s,{parentId:e.parentNodeId,...c.name?{name:c.name}:{},...c.sourceNodePath?{sourceNodePath:c.sourceNodePath}:{},...c.transform?{transform:c.transform}:{}});if(!d.ok||!d.changed)return null;let u=nh(d.createdNodeId);return{label:`Add ${s.displayName??s.id} to prefab ${i.displayName??i.id}`,patch:{kind:"scene.prefab-asset.replace",assetId:i.id,prefabAsset:d.prefabAsset,sourceAsset:s},changedId:i.id,changedIds:[i.id],createdId:d.createdNodeId,...u?{projectionImpact:u}:{}}}if(e.actionId==="prefab.node.createPrimitive"){if(!e.targetPrefabAssetId)return null;let i=t.findPrefabAsset(e.document,e.targetPrefabAssetId),s=t.normalizePrimitiveShape(e.primitiveShape??e.value),c=RT(e.value);if(!i||!s)return null;let d=fg(i,{parentId:e.parentNodeId??e.nodeId,shape:s,...c.name?{name:c.name}:{},...c.transform?{transform:c.transform}:{}});return!d.ok||!d.changed?null:Wa(i,d.prefabAsset,`Create ${s} in prefab ${i.displayName??i.id}`,{createdId:d.createdNodeId,changedId:d.selectedNodeId??d.createdNodeId},nh(d.createdNodeId))}if(e.actionId==="prefab.node.createGroup"){if(!e.targetPrefabAssetId)return null;let i=t.findPrefabAsset(e.document,e.targetPrefabAssetId),s=RT(e.value);if(!i)return null;let c=gg(i,{parentId:e.parentNodeId??e.nodeId,...s.name?{name:s.name}:{},...s.transform?{transform:s.transform}:{}});return!c.ok||!c.changed?null:Wa(i,c.prefabAsset,`Create group in prefab ${i.displayName??i.id}`,{createdId:c.createdNodeId,changedId:c.selectedNodeId??c.createdNodeId},nh(c.createdNodeId))}if(e.actionId==="prefab.node.createMarker"){if(!e.targetPrefabAssetId)return null;let i=t.findPrefabAsset(e.document,e.targetPrefabAssetId),s=SN(e.value),c=e.markerTypes?.find(u=>u.type===s.type);if(!i||!s.valid||!c)return null;let d=hg(i,{parentId:e.parentNodeId??e.nodeId,markerType:c,...s.name?{name:s.name}:{},...s.transform?{transform:s.transform}:{},...s.hasTarget?{target:s.target}:{},...s.tags?{tags:s.tags}:{},...s.note!==void 0?{note:s.note??void 0}:{},...s.color?{color:s.color}:{}});return!d.ok||!d.changed?null:Wa(i,d.prefabAsset,`Create Marker in prefab ${i.displayName??i.id}`,{createdId:d.createdNodeId,changedId:d.selectedNodeId??d.createdNodeId},nh(d.createdNodeId))}if(e.actionId==="prefab.node.setMarker"){if(!e.targetPrefabAssetId||!e.nodeId)return null;let i=t.findPrefabAsset(e.document,e.targetPrefabAssetId),s=SN(e.value),c=s.hasType?e.markerTypes?.find(u=>u.type===s.type):void 0;if(!i||!s.valid||s.hasType&&!c)return null;let d=bg(i,e.nodeId,{...c?{markerType:c}:{},...s.hasTarget?{target:s.target}:{},...s.hasTags?{tags:s.tags??[]}:{},...s.hasNote?{note:s.note}:{},...s.hasColor?{color:s.color}:{}});return!d.ok||!d.changed?null:Wa(i,d.prefabAsset,`Set prefab Marker ${e.nodeId}`,{changedId:d.selectedNodeId??e.nodeId},{type:"incremental",reprojectIds:[d.selectedNodeId??e.nodeId]})}if(e.actionId==="prefab.node.delete"){if(!e.targetPrefabAssetId||!e.nodeId)return null;let i=t.findPrefabAsset(e.document,e.targetPrefabAssetId);if(!i)return null;let s=Ig(i,e.nodeId);return!s.ok||!s.changed?null:Wa(i,s.prefabAsset,`Delete prefab node ${e.nodeId}`,{changedId:Mt(s.prefabAsset)??i.id},{type:"incremental",deletedNodeIds:s.deletedNodeIds??[e.nodeId]})}if(e.actionId==="prefab.node.setTransform"){if(!e.targetPrefabAssetId||!e.nodeId)return null;let i=t.findPrefabAsset(e.document,e.targetPrefabAssetId),s=CT(e.value);if(!i||!s)return null;let c=yg(i,e.nodeId,s);return!c.ok||!c.changed?null:Wa(i,c.prefabAsset,`Set prefab node ${e.nodeId} transform`,{changedId:c.selectedNodeId??e.nodeId},{type:"incremental",syncTransformIds:[c.selectedNodeId??e.nodeId]})}if(e.actionId==="prefab.node.reparent"){if(!e.targetPrefabAssetId||!e.nodeId||!e.parentNodeId)return null;let i=t.findPrefabAsset(e.document,e.targetPrefabAssetId);if(!i)return null;let s=Sg(i,e.nodeId,e.parentNodeId,{...e.placement?{placement:e.placement}:{},...e.beforeNodeId!==void 0?{beforeId:e.beforeNodeId}:{},...e.afterNodeId!==void 0?{afterId:e.afterNodeId}:{}});return!s.ok||!s.changed?null:Wa(i,s.prefabAsset,`Reparent prefab node ${e.nodeId}`,{changedId:s.selectedNodeId??e.nodeId},{type:"incremental",syncTransformIds:[s.selectedNodeId??e.nodeId]})}if(e.actionId==="prefab.node.rename"){if(!e.targetPrefabAssetId||!e.nodeId)return null;let i=t.findPrefabAsset(e.document,e.targetPrefabAssetId);if(!i)return null;let s=mg(i,e.nodeId,e.value);return!s.ok||!s.changed?null:Wa(i,s.prefabAsset,`Rename prefab node ${e.nodeId}`,{changedId:s.selectedNodeId??e.nodeId},{type:"incremental",reprojectIds:[s.selectedNodeId??e.nodeId]})}if(e.actionId==="asset.rename"){if(!e.assetId)return null;let i=Zl(e.document,e.assetId,e.value);return!i.ok||!i.changed?null:{label:`Rename prefab ${e.assetId}`,patch:{kind:"scene.prefab-asset.replace",assetId:e.assetId,prefabAsset:i.prefabAsset},changedId:e.assetId,changedIds:[e.assetId]}}if(e.actionId!=="asset.edit-prefab-field"||!e.assetId)return null;let r=t.findPrefabAsset(e.document,e.assetId);if(!r)return null;let n=typeof e.fieldPath=="string"?e.fieldPath.trim():"";if(n==="displayName"){let i=Zl(e.document,e.assetId,e.value);return!i.ok||!i.changed?null:{label:`Rename prefab ${e.assetId}`,patch:{kind:"scene.prefab-asset.replace",assetId:e.assetId,prefabAsset:i.prefabAsset},changedId:e.activeId??e.assetId,changedIds:[e.assetId]}}let o=t.parseDuplicateMaterialAssetValue(e.value);if(o&&t.isPrefabMaterialAssetIdOverridePath(n)){let i=t.findMaterialAsset(e.document,o);if(!i)return null;let s=t.createDuplicatedMaterialAssetCopy(e.document,i,`${r.displayName??r.id} - ${i.name??i.id}`);return{label:`Duplicate material ${i.name??i.id} for prefab ${r.displayName??r.id}`,patch:{kind:"scene.prefab-material-asset.duplicate-and-bind",assetId:e.assetId,bindingPath:n,materialAsset:s},createdId:s.id}}let a=t.normalizePrefabAssetFieldValue(n,e.value);return t.validatePrefabAssetFieldValue(n,e.value)?{label:`Edit prefab ${r.displayName??r.id} ${n}`,patch:{kind:"scene.prefab-asset.field",assetId:e.assetId,path:n,value:a},changedId:e.activeId??void 0}:null}function Wa(e,t,r,n={},o){return{label:r,patch:{kind:"scene.prefab-asset.replace",assetId:e.id,prefabAsset:t},...n.changedId?{changedId:n.changedId}:{},...n.createdId?{createdId:n.createdId}:{},...o?{projectionImpact:o}:{},changedIds:[e.id]}}function nh(e){return e?{type:"incremental",createdNodeIds:[e]}:void 0}function CT(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e;try{return hk(t,"$.value.transform"),structuredClone(t)}catch{return null}}function RT(e){if(!e||typeof e!="object"||Array.isArray(e))return{};let t=e,r=typeof t.name=="string"&&t.name.trim()?t.name.trim():void 0,n=typeof t.sourceNodePath=="string"&&t.sourceNodePath.trim()?t.sourceNodePath.trim():void 0,o=CT(t.transform);return{...r?{name:r}:{},...n?{sourceNodePath:n}:{},...o?{transform:o}:{}}}function SN(e){if(!e||typeof e!="object"||Array.isArray(e))return{valid:!1,hasType:!1,hasTarget:!1,hasTags:!1,hasNote:!1,hasColor:!1};let t=e,r=Object.prototype.hasOwnProperty.call(t,"type"),n=Object.prototype.hasOwnProperty.call(t,"target"),o=Object.prototype.hasOwnProperty.call(t,"tags"),a=Object.prototype.hasOwnProperty.call(t,"note"),i=Object.prototype.hasOwnProperty.call(t,"color"),s=Object.prototype.hasOwnProperty.call(t,"transform"),c=CT(t.transform),d=t.target===null?null:t.target&&typeof t.target=="object"&&!Array.isArray(t.target)?structuredClone(t.target):void 0,u=t.color===null?null:t.color&&typeof t.color=="object"&&!Array.isArray(t.color)?structuredClone(t.color):void 0;return{valid:(!r||typeof t.type=="string"&&!!t.type.trim())&&(!n||d!==void 0)&&(!o||Array.isArray(t.tags)&&t.tags.every(m=>typeof m=="string"))&&(!a||t.note===null||typeof t.note=="string")&&(!i||u!==void 0)&&(!s||c!==null),hasType:r,...typeof t.type=="string"&&t.type.trim()?{type:t.type.trim()}:{},...typeof t.name=="string"&&t.name.trim()?{name:t.name.trim()}:{},...c?{transform:c}:{},hasTarget:n,...d!==void 0?{target:d}:{},hasTags:o,...Array.isArray(t.tags)?{tags:[...t.tags]}:{},hasNote:a,...t.note===null||typeof t.note=="string"?{note:t.note}:{},hasColor:i,...u!==void 0?{color:u}:{}}}function AN(e,t){let r=[];if(e.schemaVersion!==1&&r.push({severity:"error",message:"editor-scene schemaVersion must be 1",path:"schemaVersion",source:t.ref}),Array.isArray(e.assets)||r.push({severity:"error",message:"editor-scene assets must be an array",path:"assets",source:t.ref}),Array.isArray(e.scene?.gameObjects)||r.push({severity:"error",message:"editor-scene scene.gameObjects must be an array",path:"scene.gameObjects",source:t.ref}),e.scene?.materialAssets!=null&&!Array.isArray(e.scene.materialAssets)&&r.push({severity:"error",message:"editor-scene scene.materialAssets must be an array when present",path:"scene.materialAssets",source:t.ref}),Array.isArray(e.assets)&&Array.isArray(e.scene?.gameObjects)){let o=q_(e);for(let a of o.issues)for(let i of a.usages)r.push({severity:"error",message:`editor-scene material binding references missing scene.materialAssets id: ${a.materialAssetId}`,path:Q9(e,i),source:t.ref,code:"editor_scene_material_asset_missing"})}return r}function Q9(e,t){let r=e.scene.gameObjects.findIndex(o=>o.id===t.gameObjectId);return`${r>=0?`scene.gameObjects[${r}]`:`scene.gameObjects.${t.gameObjectId}`}.${t.bindingPath}`}var wT=Object.freeze({complete:!1,included:["standard scene hierarchy and renderer components","standard scene Prefab instances and Marker targets","standard Prefab definitions and composition nodes","standard Material Asset origins and textureAssetId fields","standard Marker Graph targets and relation endpoints"],limitations:[{code:"reference.coverage.projectExtensionsExcluded",message:"Project-defined extension fields are not searched because the Editor cannot infer their reference semantics safely."}]});function xN(){let e=_a({cursorPrefix:"al2",diagnosticPrefix:"asset.library"});return async(t,r,n)=>e(r,{scopeKey:"asset-library",revision:n,items:t,query:t7(r),queryProvided:oh(r),matches:r7})}function MN(){let e=_a({cursorPrefix:"so2",diagnosticPrefix:"scene.objects"});return async(t,r,n)=>e(r,{scopeKey:"scene-objects",revision:n,items:t,query:n7(r),queryProvided:oh(r),matches:o7})}function DN(){let e=_a({cursorPrefix:"pr2",diagnosticPrefix:"prefab.resolve"});return async(t,r,n)=>e(r,{scopeKey:"prefab-assets",revision:n,items:t,query:a7(r),queryProvided:oh(r),matches:i7})}function ON(){let e=_a({cursorPrefix:"ps2",diagnosticPrefix:"prefab.scene"});return async(t,r,n,o)=>{let a=ee(r.prefabAssetId)||ee(r.assetId)||"",i=a||o.stage?.assetId||"";if(!i&&!r.cursor)return{ok:!1,code:"prefab.assetIdRequired",message:"prefab.scene.get requires prefabAssetId unless that Prefab Stage is already open."};let s=t.assets.filter(p=>!!p.prefab).flatMap(p=>Ct(p).map(h=>({prefabAssetId:p.id,node:Z9(h)}))),c=await e(r,{scopeKey:"prefab-scenes",revision:n,items:s,query:{prefabAssetId:i},queryProvided:!!a,matches:(p,h)=>p.prefabAssetId===h.prefabAssetId});if(!c.ok)return c;let d=String(c.query.prefabAssetId||""),u=d?Zr(t,d):null;if(!u)return{ok:!1,code:"prefab.notFound",message:`Prefab asset was not found: ${d||i}`};let l=_T(u);return{ok:!0,output:{stage:o.stage?.assetId===u.id?o.stage:m7(u,o.dirty),prefab:l,revision:n,rootNodeId:Mt(u)??"prefab-root",selectedNodeId:o.stage?.assetId===u.id?o.selectedNodeId??null:null,nodes:c.items.map(p=>p.node),diagnostics:[],totalCount:c.totalCount,returnedCount:c.returnedCount,...c.nextCursor?{nextCursor:c.nextCursor}:{}}}}}function RN(){let e=_a({cursorPrefix:"ar2",diagnosticPrefix:"asset.references"});return async(t,r,n)=>{let o=ee(r.assetId);if(!o)return qa("asset.references.invalidQuery","assetId must be a non-empty string.");let a=d7(t,o),i=await e(r,{scopeKey:`asset-references:${o}`,revision:n,items:a,query:{assetId:o,scope:ee(r.scope)},queryProvided:r.scope!==void 0,matches:(s,c)=>!c.scope||s.scope===c.scope});return i.ok?{ok:!0,output:{assetId:o,references:i.items,coverage:_N(),totalCount:i.totalCount,returnedCount:i.returnedCount,...i.nextCursor?{nextCursor:i.nextCursor}:{}}}:i}}function CN(){let e=_a({cursorPrefix:"or2",diagnosticPrefix:"object.references"});return async(t,r,n)=>{let o=ee(r.objectId);if(!o)return qa("object.references.invalidQuery","objectId must be a non-empty string.");if(!t.scene.gameObjects.some(s=>s.id===o))return qa("object.notFound",`Scene object was not found: ${o}`);let a=l7(t,o),i=await e(r,{scopeKey:`object-references:${o}`,revision:n,items:a,query:{objectId:o,kind:ee(r.kind).toLocaleLowerCase()},queryProvided:r.kind!==void 0,matches:(s,c)=>!c.kind||s.kind.toLocaleLowerCase()===c.kind});return i.ok?{ok:!0,output:{objectId:o,references:i.items,coverage:_N(),totalCount:i.totalCount,returnedCount:i.returnedCount,...i.nextCursor?{nextCursor:i.nextCursor}:{}}}:i}}function wN(){let e=_a({cursorPrefix:"av2",diagnosticPrefix:"authoring.validation"});return async(t,r,n)=>{let o=t.meta?.authoringSource??{sourceId:"editor-scene",sourceType:"scene",revision:n},a=AN(t,{ref:o}).map(c=>({severity:c.severity,...c.code?{code:c.code}:{},message:c.message,...c.path?{path:c.path}:{},...c.source?.sourceId?{sourceId:c.source.sourceId}:{},...c.source?.sourceType?{sourceType:c.source.sourceType}:{}})),i=s7(r),s=await e(r,{scopeKey:"authoring-validation",revision:n,items:a,query:i,queryProvided:oh(r),matches:c7});return s.ok?{ok:!0,output:{documentRevision:n,diagnostics:s.items,errorCount:a.filter(c=>c.severity==="error").length,warningCount:a.filter(c=>c.severity==="warning").length,infoCount:a.filter(c=>c.severity==="info").length,totalCount:s.totalCount,returnedCount:s.returnedCount,...s.nextCursor?{nextCursor:s.nextCursor}:{}}}:s}}function vN(e,t,r,n){let o=t.objectIds.map(ee),a=t.paths.map(ee);if(o.some(l=>!l)||new Set(o).size!==o.length)return qa("object.properties.invalidTargets","objectIds must contain unique non-empty ids.");if(a.some(l=>!l)||new Set(a).size!==a.length)return qa("object.properties.invalidPaths","paths must contain unique non-empty field paths.");if(o.length>200||a.length>128||o.length*a.length>5e3)return qa("object.properties.queryTooLarge","object.properties.get supports at most 200 objects, 128 paths, and 5000 object/path values per call.");let i=new Set(e.scene.gameObjects.map(l=>l.id)),s=o.find(l=>!i.has(l));if(s)return qa("object.notFound",`Scene object was not found: ${s}`);let c=new Map(a.map(l=>[l,0])),d=o.map(l=>{let m=n(e,l),p=new Map((m?.sections??[]).flatMap(h=>h.properties).map(h=>[h.path,h]));return{objectId:l,properties:a.map(h=>{let g=p.get(h);return g?(c.set(h,(c.get(h)??0)+1),{path:h,value:g.value===void 0?null:structuredClone(g.value),present:!0,...t.includeSchema?{schema:u7(g)}:{}}):{path:h,value:null,present:!1}})}}),u=a.find(l=>c.get(l)===0);return u?qa("object.properties.unsupportedPath",`Property path is not exposed by the Inspector schema for any requested object: ${u}`):{ok:!0,output:{documentRevision:r,objects:d,objectCount:d.length,propertyCount:d.reduce((l,m)=>l+m.properties.length,0)}}}function fu(e){let t=e,r=Xt(t.metadata),n=ee(t.assetId)||ee(t.id),o=ee(t.type)||"glb",a=ee(t.kind)||(o==="prefab"?"prefab":o==="texture"?"texture":"model"),i=p7(t.availability);return{assetId:n,...ee(t.guid)?{guid:ee(t.guid)}:{},displayName:ee(t.displayName)||ee(t.label)||n,kind:a,type:o,...ee(t.category)?{category:ee(t.category)}:{},placeable:us(t)&&i?.status!=="unavailable",...PN(r.byteSize)!==null?{byteSize:PN(r.byteSize)}:{},...ee(r.contentHash)?{contentHash:ee(r.contentHash)}:{},...ee(r.relativePath)?{relativePath:ee(r.relativePath)}:{},...i?{availability:i}:{},...ee(t.origin)?{origin:ee(t.origin)}:{},...ee(t.dedupeKey)?{dedupeKey:ee(t.dedupeKey)}:{},...ee(t.materialMode)?{materialMode:ee(t.materialMode)}:{},...Object.keys(r).length?{metadata:structuredClone(r)}:{},...Object.keys(Xt(t.external)).length?{external:structuredClone(Xt(t.external))}:{},...Object.keys(Xt(t.defaults)).length?{defaults:structuredClone(Xt(t.defaults))}:{},...Object.keys(Xt(t.prefab)).length?{prefab:structuredClone(Xt(t.prefab))}:{}}}function gu(e){let t=fu(e);return{assetId:t.assetId,...t.guid?{guid:t.guid}:{},displayName:t.displayName,kind:t.kind,type:t.type,...t.category?{category:t.category}:{},placeable:t.placeable,...t.byteSize!==void 0?{byteSize:t.byteSize}:{},...t.contentHash?{contentHash:t.contentHash}:{},...t.relativePath?{relativePath:t.relativePath}:{},...t.availability?{availability:t.availability}:{}}}function hu(e,t){let r=2166136261;for(let n of t){let o=[n.assetId,n.guid??"",n.kind,n.type,n.displayName,n.placeable,n.category??"",n.relativePath??"",n.contentHash??"",n.byteSize??"",JSON.stringify(n.availability??null),JSON.stringify(n.metadataSummary??null),JSON.stringify(n.analysisSummary??null)].join("\0");for(let a=0;a<o.length;a+=1)r=Math.imul(r^o.charCodeAt(a),16777619)>>>0}return`${e}:${t.length}:${r.toString(16)}`}function _T(e,t=[]){let r=OT(e,t);return{assetId:e.id,displayName:e.displayName??e.id,...e.prefab?.sourceAssetId?{sourceAssetId:e.prefab.sourceAssetId}:{},...e.prefab?.sourceAssetGuid?{sourceAssetGuid:e.prefab.sourceAssetGuid}:{},placeable:r.placeable,readonly:!1,status:r.availability?.status??"available"}}function Z9(e){return{nodeId:e.id,...e.guid?{guid:e.guid}:{},...e.name?{name:e.name}:{},parentNodeId:e.parentId??null,kind:e.kind,...e.transform&&e.transform.mode!=="matrix"?{transform:e7(e.transform)}:{},...e.sourceAssetId?{sourceAssetId:e.sourceAssetId}:{},...e.sourceNodePath?{sourceNodePath:e.sourceNodePath}:{},...e.childPrefabId?{childPrefabId:e.childPrefabId}:{},...e.primitive?{primitive:structuredClone(e.primitive)}:{},...e.marker?{marker:structuredClone(e.marker)}:{},...e.defaults?{defaults:structuredClone(e.defaults)}:{},...e.overrides?{overrides:structuredClone(e.overrides)}:{}}}function e7(e){return{position:vT(e.position),rotation:vT(e.rotation),scale:vT(e.scale??{x:1,y:1,z:1})}}function vT(e){return{x:e.x,y:e.y,z:e.z}}function t7(e){return{includeUnplaceable:e.includeUnplaceable===!0,query:ee(e.query).toLocaleLowerCase(),kind:ee(e.kind).toLocaleLowerCase()}}function r7(e,t){if(!t.includeUnplaceable&&!e.placeable||t.kind&&String(e.kind).toLocaleLowerCase()!==t.kind)return!1;let r=String(t.query||"");return!r||[e.assetId,e.guid,e.displayName,e.kind,e.type,e.category,e.relativePath,e.contentHash].some(n=>String(n??"").toLocaleLowerCase().includes(r))}function n7(e){return{includeUnselectable:e.includeUnselectable===!0,name:ee(e.name).toLocaleLowerCase(),type:ee(e.type).toLocaleLowerCase(),parentId:e.parentId===null?null:ee(e.parentId),hasParentFilter:e.parentId!==void 0,sourceAssetId:ee(e.sourceAssetId),query:ee(e.query).toLocaleLowerCase()}}function o7(e,t){if(!t.includeUnselectable&&e.selectable===!1||t.name&&![e.name,e.label].some(n=>String(n??"").toLocaleLowerCase()===t.name)||t.type&&String(e.type??"").toLocaleLowerCase()!==t.type||t.hasParentFilter&&(e.parentId??null)!==t.parentId||t.sourceAssetId&&e.sourceAssetId!==t.sourceAssetId)return!1;let r=String(t.query||"");return!r||[e.id,e.name,e.label,e.type,e.path,e.parentId,e.sourceAssetId].some(n=>String(n??"").toLocaleLowerCase().includes(r))}function a7(e){return{assetId:ee(e.assetId),browserAssetId:ee(e.browserAssetId),name:ee(e.name).toLocaleLowerCase(),query:ee(e.query).toLocaleLowerCase(),includeUnavailable:e.includeUnavailable===!0}}function i7(e,t){if(!t.includeUnavailable&&e.placeable===!1||t.assetId&&e.assetId!==t.assetId||t.browserAssetId&&e.browserAssetId!==t.browserAssetId||t.name&&e.displayName.toLocaleLowerCase()!==t.name)return!1;let r=String(t.query||"");return!r||[e.assetId,e.browserAssetId,e.displayName,e.sourceAssetId,e.sourceAssetGuid].some(n=>String(n??"").toLocaleLowerCase().includes(r))}function s7(e){return{severity:ee(e.severity),code:ee(e.code).toLocaleLowerCase(),path:ee(e.path).toLocaleLowerCase(),query:ee(e.query).toLocaleLowerCase()}}function c7(e,t){if(t.severity&&e.severity!==t.severity||t.code&&String(e.code??"").toLocaleLowerCase()!==t.code||t.path&&!String(e.path??"").toLocaleLowerCase().includes(String(t.path)))return!1;let r=String(t.query||"");return!r||[e.code,e.message,e.path].some(n=>String(n??"").toLocaleLowerCase().includes(r))}function d7(e,t){let r=[],n=(a,i)=>{ee(i)===t&&r.push({assetId:t,...a})};for(let a=0;a<e.scene.gameObjects.length;a+=1){let i=e.scene.gameObjects[a];for(let s=0;s<i.components.length;s+=1){let c=i.components[s];c.type!=="ModelRenderer"&&c.type!=="ImageRenderer"||n({scope:"scene-object",kind:`${c.type}.assetId`,path:`scene.gameObjects[${a}].components[${s}].assetId`,objectId:i.id,...i.name?{objectName:i.name}:{}},c.assetId)}n({scope:"scene-object",kind:"prefab.prefabId",path:`scene.gameObjects[${a}].prefab.prefabId`,objectId:i.id,...i.name?{objectName:i.name}:{}},i.prefab?.prefabId),n({scope:"scene-object",kind:"prefab.sourceAssetId",path:`scene.gameObjects[${a}].prefab.sourceAssetId`,objectId:i.id,...i.name?{objectName:i.name}:{}},i.prefab?.sourceAssetId),pu(i.overrides,`scene.gameObjects[${a}].overrides`,(s,c)=>n({scope:"scene-object",kind:"material.textureAssetId",path:s,objectId:i.id,...i.name?{objectName:i.name}:{}},c))}for(let a=0;a<e.assets.length;a+=1){let i=e.assets[a];if(!i.prefab)continue;n({scope:"prefab-asset",kind:"prefab.sourceAssetId",path:`assets[${a}].prefab.sourceAssetId`,prefabAssetId:i.id},i.prefab.sourceAssetId);let s=Ct(i);for(let c=0;c<s.length;c+=1){let d=s[c],u=`assets[${a}].prefab.nodes[${c}]`;n({scope:"prefab-node",kind:"node.sourceAssetId",path:`${u}.sourceAssetId`,prefabAssetId:i.id,nodeId:d.id},d.sourceAssetId),n({scope:"prefab-node",kind:"node.childPrefabId",path:`${u}.childPrefabId`,prefabAssetId:i.id,nodeId:d.id},d.childPrefabId),pu(d.overrides,`${u}.overrides`,(l,m)=>n({scope:"prefab-node",kind:"material.textureAssetId",path:l,prefabAssetId:i.id,nodeId:d.id},m))}}let o=Array.isArray(e.scene.materialAssets)?e.scene.materialAssets:[];for(let a=0;a<o.length;a+=1){let i=o[a],s=ee(i.id);n({scope:"material-asset",kind:"origin.sourceAssetId",path:`scene.materialAssets[${a}].origin.sourceAssetId`,materialAssetId:s},Xt(i.origin).sourceAssetId),pu(i.properties,`scene.materialAssets[${a}].properties`,(c,d)=>n({scope:"material-asset",kind:"material.textureAssetId",path:c,materialAssetId:s},d))}return r.sort(kN)}function l7(e,t){let r=[],n=(s,c)=>{let d=Xt(s);d.kind==="scene-object"&&ee(d.id)===t&&r.push({targetObjectId:t,...c})};for(let s=0;s<e.scene.gameObjects.length;s+=1){let c=e.scene.gameObjects[s];if(c.parentId===t&&r.push({targetObjectId:t,sourceObjectId:c.id,...c.name?{sourceObjectName:c.name}:{},kind:"hierarchy.parent",path:`scene.gameObjects[${s}].parentId`}),!c.marker)continue;let d=`scene.gameObjects[${s}].marker`;n(c.marker.target,{sourceObjectId:c.id,...c.name?{sourceObjectName:c.name}:{},kind:"marker.target",path:`${d}.target`}),n("target"in c.marker.geometry?c.marker.geometry.target:null,{sourceObjectId:c.id,...c.name?{sourceObjectName:c.name}:{},kind:"marker.geometryTarget",path:`${d}.geometry.target`})}let o=Xt(e.scene.markerGraph),a=Array.isArray(o.markers)?o.markers:[];for(let s=0;s<a.length;s+=1){let c=Xt(a[s]);n(c.target,{kind:"markerGraph.markerTarget",path:`scene.markerGraph.markers[${s}].target`});let d=Xt(c.geometry);n(d.target,{kind:"markerGraph.geometryTarget",path:`scene.markerGraph.markers[${s}].geometry.target`})}let i=Array.isArray(o.relations)?o.relations:[];for(let s=0;s<i.length;s+=1){let c=Xt(i[s]),d=ee(c.id);n(c.from,{kind:"markerGraph.relationFrom",path:`scene.markerGraph.relations[${s}].from`,...d?{relationId:d}:{}}),n(c.to,{kind:"markerGraph.relationTo",path:`scene.markerGraph.relations[${s}].to`,...d?{relationId:d}:{}})}return r.sort(kN)}function pu(e,t,r){if(!(!e||typeof e!="object")){if(Array.isArray(e)){e.forEach((n,o)=>pu(n,`${t}[${o}]`,r));return}for(let[n,o]of Object.entries(e)){let a=`${t}.${n}`;n==="textureAssetId"?r(a,o):pu(o,a,r)}}}function u7(e){return{path:e.path,label:e.label,valueType:e.valueType,control:e.control,readOnly:e.readOnly,persistence:e.persistence,commitMode:e.commitMode,...e.min!==void 0?{min:e.min}:{},...e.max!==void 0?{max:e.max}:{},...e.step!==void 0?{step:e.step}:{},...e.precision!==void 0?{precision:e.precision}:{},...e.options?{options:e.options.map(t=>({label:t.label,value:structuredClone(t.value),...t.disabled!==void 0?{disabled:t.disabled}:{}}))}:{}}}function m7(e,t){return{assetId:e.id,label:e.displayName??e.id,...e.prefab?.sourceAssetId?{sourceAssetId:e.prefab.sourceAssetId}:{},...e.prefab?.sourceAssetGuid?{sourceAssetGuid:e.prefab.sourceAssetGuid}:{},selectedItemId:null,readonly:!1,dirty:t,documentDirty:t,canSave:t,canDiscard:t}}function _N(){return{complete:wT.complete,included:[...wT.included],limitations:wT.limitations.map(e=>({...e}))}}function kN(e,t){return e.path.localeCompare(t.path)||e.kind.localeCompare(t.kind)}function oh(e){return Object.keys(e).some(t=>t!=="cursor"&&t!=="limit")}function p7(e){let t=Xt(e);if(t.status!=="unavailable"&&t.status!=="degraded"||!Array.isArray(t.issues))return;let r=t.issues.flatMap(n=>{let o=Xt(n),a=ee(o.code),i=ee(o.reason),s=ee(o.stage),c=o.severity==="warning"||o.severity==="error"?o.severity:null;return!a||!i||!s||!c?[]:[{code:a,reason:i,stage:s,severity:c,...ee(o.relativePath)?{relativePath:ee(o.relativePath)}:{},...ee(o.nodeCode)?{nodeCode:ee(o.nodeCode)}:{},...typeof o.retryable=="boolean"?{retryable:o.retryable}:{}}]});return{status:t.status,issues:r}}function ee(e){return typeof e=="string"?e.trim():""}function Xt(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{}}function PN(e){return typeof e=="number"&&Number.isFinite(e)?e:null}function qa(e,t){return{ok:!1,code:e,message:t}}function $N(e){let t=[],r=i_(),n=MN(),o=xN(),a=RN(),i=CN(),s=wN(),c=DN(),d=ON(),u=e.materialShaderDefinitions??Dn;try{t.push(e.host.registerCommand({manifest:Te(b.HIERARCHY_SCOPE_GET),handler:async(l,m)=>{let p=e.sceneAssembly.getHierarchyItems(Ue(m)),h={scopeKey:"scene",scopeType:"scene",revision:m.session.getState({cloneDocuments:!1}).documentRevision,title:"Scene",readonly:!1,nodes:p.map(f=>({id:f.id,label:f.label,parentId:f.parentId??null,selectable:!0,canHaveChildren:!0,renamable:!0,deletable:!0,draggable:!0})),selectedIds:m.session.getSelection().selectedIds,activeId:m.session.getSelection().activeId,capabilities:{},totalCount:p.length,returnedCount:p.length},g=await r(h,l);return g.ok?{ok:!0,output:g.output}:{ok:!1,diagnostics:[{severity:"error",source:"hierarchy",code:g.code,message:g.message}]}}})),t.push(e.host.registerCommand({manifest:Te(b.SCENE_OBJECTS_LIST),handler:async(l,m)=>{let p=m.session.getState({cloneDocuments:!1}),h=p.workingDocument,g=NT(h),f=await n(h.scene.gameObjects.map(y=>Su(y,h,g)),l,p.documentRevision);return f.ok?{ok:!0,output:{objects:f.items,totalCount:f.totalCount,returnedCount:f.returnedCount,...f.nextCursor?{nextCursor:f.nextCursor}:{}}}:Ya(f)}})),t.push(e.host.registerCommand({manifest:Te(b.OBJECT_RESOLVE,{activeId:"objectId"}),handler:(l,m)=>U7(Ue(m),l)})),t.push(e.host.registerCommand({manifest:Te(b.OBJECT_PROPERTIES_GET),handler:(l,m)=>{let p=m.session.getState({cloneDocuments:!1}),h=vN(p.workingDocument,l,p.documentRevision,e.sceneAssembly.getInspectorObject);return h.ok?h:Ya(h)}})),t.push(e.host.registerCommand({manifest:Te(b.OBJECT_REFERENCES_LIST),handler:async(l,m)=>{let p=m.session.getState({cloneDocuments:!1}),h=await i(p.workingDocument,l,p.documentRevision);return h.ok?h:Ya(h)}})),t.push(e.host.registerCommand({manifest:Te(b.ASSET_LIBRARY_LIST),handler:async(l,m)=>{let p=m.session.getState({cloneDocuments:!1}),h=[...await e.listAssets(p.workingDocument)].map(gu),g=await o(h,l,hu(p.documentRevision,h));return g.ok?{ok:!0,output:{assets:g.items,totalCount:g.totalCount,returnedCount:g.returnedCount,...g.nextCursor?{nextCursor:g.nextCursor}:{}}}:Ya(g)}})),t.push(e.host.registerCommand({manifest:Te(b.ASSET_INFO_GET),handler:async(l,m)=>{let p=l.assetId.trim(),h=[...await e.listAssets(Ue(m))].find(g=>g.assetId===p||g.id===p);return h?{ok:!0,output:{asset:fu(h)}}:W("asset.notFound",`Asset was not found: ${p}`)}})),t.push(e.host.registerCommand({manifest:Te(b.ASSET_REFERENCES_LIST),handler:async(l,m)=>{let p=m.session.getState({cloneDocuments:!1}),h=await a(p.workingDocument,l,p.documentRevision);return h.ok?h:Ya(h)}})),t.push(e.host.registerCommand({manifest:Te(b.AUTHORING_VALIDATION_LIST),handler:async(l,m)=>{let p=m.session.getState({cloneDocuments:!1}),h=await s(p.workingDocument,l,p.documentRevision);return h.ok?h:Ya(h)}})),t.push(e.host.registerCommand({manifest:Te(b.PREFAB_RESOLVE),handler:async(l,m)=>{let p=m.session.getState({cloneDocuments:!1}),h=await e.listAssets(p.workingDocument),g=p.workingDocument.assets.filter(y=>!!y.prefab).map(y=>_T(y,h)),f=await c(g,l,p.documentRevision);return f.ok?{ok:!0,output:{prefabs:f.items,resolvedPrefab:f.totalCount===1?f.items[0]??null:null,ambiguous:f.totalCount>1,currentStage:null,totalCount:f.totalCount,returnedCount:f.returnedCount,...f.nextCursor?{nextCursor:f.nextCursor}:{}}}:Ya(f)}})),t.push(e.host.registerCommand({manifest:Te(b.PREFAB_SCENE_GET),handler:async(l,m)=>{let p=m.session.getState({cloneDocuments:!1}),h=await d(p.workingDocument,l,p.documentRevision,{dirty:p.dirty});return h.ok?h:Ya(h)}})),t.push(e.host.registerCommand({manifest:Te(b.MATERIAL_ASSETS_LIST),handler:(l,m)=>({ok:!0,output:b7(Ue(m),l)})})),t.push(e.host.registerCommand({manifest:Te(b.MATERIAL_ASSET_GET),handler:(l,m)=>I7(Ue(m),l.materialAssetId)})),t.push(e.host.registerCommand({manifest:Te(b.MATERIAL_ASSET_CREATE),handler:(l,m)=>E7(m,e.sceneAssembly,l,u)})),t.push(e.host.registerCommand({manifest:Te(b.MATERIAL_ASSET_DUPLICATE),handler:(l,m)=>T7(m,e.sceneAssembly,l)})),t.push(e.host.registerCommand({manifest:Te(b.MATERIAL_ASSET_DELETE),handler:(l,m)=>A7(m,e.sceneAssembly,l)})),t.push(e.host.registerCommand({manifest:Te(b.MATERIAL_ASSET_RENAME),handler:(l,m)=>P7(m,e.sceneAssembly,l)})),t.push(e.host.registerCommand({manifest:Te(b.MATERIAL_ASSET_SET_SHADER),handler:(l,m)=>x7(m,e.sceneAssembly,l,u)})),t.push(e.host.registerCommand({manifest:Te(b.MATERIAL_SHADER_DEFINITIONS_LIST),handler:l=>({ok:!0,output:y7(u,l)})})),t.push(e.host.registerCommand({manifest:Te(b.MATERIAL_SHADER_DEFINITION_GET),handler:l=>S7(u,l.shaderId)})),t.push(e.host.registerCommand({manifest:Te(b.MATERIAL_REFERENCES_LIST),handler:(l,m)=>D7(Ue(m),l)})),t.push(e.host.registerCommand({manifest:Te(b.MATERIAL_BINDINGS_LIST),handler:(l,m)=>({ok:!0,output:ch(jT(Ue(m),l),l.cursor,l.limit)})})),t.push(e.host.registerCommand({manifest:Te(b.MATERIAL_BINDING_SET),handler:(l,m)=>GN(m,e.sceneAssembly,l.targets,l.materialAssetId)})),t.push(e.host.registerCommand({manifest:Te(b.MATERIAL_BINDING_CLEAR),handler:(l,m)=>GN(m,e.sceneAssembly,l.targets,null)})),t.push(e.host.registerCommand({manifest:Te(b.MATERIAL_PROPERTIES_GET),handler:(l,m)=>O7(Ue(m),l.materialAssetId,l.includeSchema===!0,u)})),t.push(e.host.registerCommand({manifest:Te(b.MATERIAL_PROPERTIES_PATCH),handler:(l,m)=>R7(m,e.sceneAssembly,l,u)})),t.push(e.host.registerCommand({manifest:Te(b.OBJECT_CREATE_GROUP),expectedRevisionPolicy:"handler-validated",handler:(l,m)=>FN(m,e.sceneAssembly,l,e.sceneAssembly.createCreateGroupPatch)})),t.push(e.host.registerCommand({manifest:Te(b.OBJECT_CREATE_PRIMITIVE),expectedRevisionPolicy:"handler-validated",handler:(l,m)=>FN(m,e.sceneAssembly,l,e.sceneAssembly.createCreatePrimitivePatch)})),t.push(e.host.registerCommand({manifest:Te(b.OBJECT_RENAME),expectedRevisionPolicy:"handler-validated",handler:(l,m)=>j7(m,e.sceneAssembly,l)})),t.push(e.host.registerCommand({manifest:Te(b.OBJECT_MOVE),expectedRevisionPolicy:"handler-validated",handler:(l,m)=>N7(m,e.sceneAssembly,l)})),t.push(e.host.registerCommand({manifest:Te(b.OBJECT_SET_ENABLED),expectedRevisionPolicy:"handler-validated",handler:(l,m)=>F7(m,e.sceneAssembly,l)})),t.push(e.host.registerCommand({manifest:Te(b.OBJECT_DELETE,{selectedIds:"objectIds"}),expectedRevisionPolicy:"handler-validated",handler:(l,m)=>$7(m,e.sceneAssembly,l)})),t.push(e.host.registerCommand({manifest:Te(b.OBJECT_DUPLICATE),expectedRevisionPolicy:"handler-validated",handler:(l,m)=>G7(m,e.sceneAssembly,l)})),t.push(e.host.registerCommand({manifest:Te(b.OBJECT_GROUP),expectedRevisionPolicy:"handler-validated",handler:(l,m)=>L7(m,e.sceneAssembly,l)})),t.push(e.host.registerCommand({manifest:Te(b.OBJECT_PROPERTIES_PATCH_MANY),expectedRevisionPolicy:"handler-validated",handler:(l,m)=>W7(m,e.sceneAssembly,l)})),t.push(e.host.registerCommand({manifest:Te(b.TRANSFORM_MOVE,{activeId:"objectId"}),handler:(l,m)=>{let p=ah(Ue(m),l.objectId);if(!p)return W("object.notFound",`Scene object was not found: ${l.objectId}`);let h=l.position??(l.offset?{x:p.position.x+l.offset.x,y:p.position.y+l.offset.y,z:p.position.z+l.offset.z}:null);if(!h)return W("transform.invalidInput","Transform move requires position or offset.");let g=e.sceneAssembly.patchGameObjectField(Ue(m),l.objectId,"transform.position",h),f=ah(g,l.objectId);return!f||JSON.stringify(f)===JSON.stringify(p)?W("transform.unchanged",`Transform did not change: ${l.objectId}`):(m.dispatch({type:"document.replace",document:g,label:`Move ${l.objectId}`,projectionImpact:{type:"incremental",syncTransformIds:[l.objectId]}}),{ok:!0,output:{objectId:l.objectId,before:p,after:f,selection:m.session.getSelection()}})}})),t.push(e.host.registerCommand({manifest:Te(b.TRANSFORM_SET,{activeId:"objectId"}),expectedRevisionPolicy:"handler-validated",handler:(l,m)=>{let p=Ue(m),h=ah(p,l.objectId);if(!h)return W("object.notFound",`Scene object was not found: ${l.objectId}`);let g=m.session.getState({cloneDocuments:!1}).documentRevision,f="changes"in l?l.changes:null,y="changes"in l?null:l,A=f?h7(f):null;if(A)return W("transform.invalidInput",`Transform changes contain a duplicate path: ${A}.`,{objectId:l.objectId,path:A});if(!f&&!y?.expected&&m.expectedRevision?.document!==g)return W("command.documentRevisionMismatch",`Expected document revision ${m.expectedRevision?.document}, received ${g}.`,{expected:m.expectedRevision?.document,actual:g});let T=f?.filter(w=>!Object.is(jN(h,w.path),w.expected))??[],D=y?["position","rotation","scale"].filter(w=>y.expected?.[w]&&!bu(y.expected[w],h[w])):[];if(T.length>0||D.length>0){let w=T.length>0?T.map(M=>M.path):D.map(M=>`transform.${M}`);return W("authoring.remoteConflict",`Transform changed after the command base revision: ${l.objectId}.`,{objectId:l.objectId,paths:w,expected:T.length>0?Object.fromEntries(T.map(M=>[M.path,M.expected])):Object.fromEntries(D.map(M=>[M,{...y.expected[M]}])),actual:T.length>0?Object.fromEntries(T.map(M=>[M.path,jN(h,M.path)])):Object.fromEntries(D.map(M=>[M,{...h[M]}])),baseDocumentRevision:m.expectedRevision?.document??null,actualDocumentRevision:g})}let P=f?new Set(f.map(w=>w.path)):null,C=f?g7(h,f):{position:y.position?{...y.position}:{...h.position},rotation:y.rotation?{...y.rotation}:{...h.rotation},scale:y.scale?{...y.scale}:{...h.scale}},E=e.sceneAssembly.patchGameObjectTransform(p,l.objectId,{position:C.position,rotation:C.rotation,scale:C.scale}),S=ah(E,l.objectId);return!S||f7(S,h)?W("transform.unchanged",`Transform did not change: ${l.objectId}`):(m.dispatch({type:"document.replace",document:E,label:`Set transform on ${l.objectId}`,projectionImpact:{type:"incremental",syncTransformIds:[l.objectId]},presentationImpact:{inspector:["transform"]},authoringPatch:{kind:"fields",writes:["position","rotation","scale"].flatMap(w=>(P||y[w])&&!bu(h[w],S[w])?["x","y","z"].flatMap(M=>P&&!P.has(`transform.${w}.${M}`)||Object.is(h[w][M],S[w][M])?[]:[{targetId:l.objectId,path:`transform.${w}.${M}`,before:h[w][M],after:S[w][M]}]):[])}}),{ok:!0,output:{objectId:l.objectId,before:h,after:S,selection:m.session.getSelection()}})}})),t.push(e.host.registerCommand({manifest:Te(b.OBJECT_CREATE_FROM_ASSET),handler:async(l,m)=>{let p=Ue(m),h=[...await e.listAssets(p)].find(A=>A.assetId===l.assetId);if(!h)return W("asset.notFound",`Asset was not found: ${l.assetId}`);if(!us(h))return W("asset.unplaceable",`Asset is not placeable: ${l.assetId}`);let g=e.sceneAssembly.addAssetLibraryItemToDocument(p,h,_7(l)),f=e.sceneAssembly.getHierarchyItems(g.document),y=f.findIndex(A=>A.id===g.gameObject.id);return y<0?W("asset.create.invalidResult",`Created asset object is missing from the authoritative hierarchy: ${g.gameObject.id}`):(m.dispatch({type:"document.replace",document:g.document,label:`Create ${g.gameObject.name??g.gameObject.id}`,projectionImpact:{type:"incremental",createdNodeIds:[g.gameObject.id]},presentationImpact:{hierarchy:"full",inspector:"full"}}),m.captureAuthoringPatch({kind:"hierarchy",operations:[{type:"create",node:structuredClone(g.gameObject),index:y,parentId:f[y]?.parentId??null}]}),l.select!==!1&&m.session.dispatch({type:"selection.replace",selectedIds:[g.gameObject.id],activeId:g.gameObject.id,label:"Select Created Item"}),{ok:!0,output:{assetId:l.assetId,createdId:g.gameObject.id,object:Su(g.gameObject,g.document),selection:m.session.getSelection(),focused:!1,status:`Created ${g.gameObject.name??g.gameObject.id}`}})}}))}catch(l){for(let m of t.splice(0).reverse())m();throw l}return()=>{for(let l of t.splice(0).reverse())l()}}function bu(e,t){return Object.is(e.x,t.x)&&Object.is(e.y,t.y)&&Object.is(e.z,t.z)}function f7(e,t){return bu(e.position,t.position)&&bu(e.rotation,t.rotation)&&bu(e.scale,t.scale)}function BN(e){let[,t,r]=e.split(".");return[t,r]}function jN(e,t){let[r,n]=BN(t);return e[r][n]}function g7(e,t){let r={position:{...e.position},rotation:{...e.rotation},scale:{...e.scale}};for(let n of t){let[o,a]=BN(n.path);r[o][a]=n.value}return r}function h7(e){let t=new Set;for(let r of e){if(t.has(r.path))return r.path;t.add(r.path)}return null}function b7(e,t){let r=t.query?.trim().toLowerCase()??"",n=t.path?.trim().toLowerCase()??"",o=t.shaderId?.trim()??"",a=(e.scene.materialAssets??[]).map(i=>({id:i.id,name:i.name?.trim()||i.id,shaderId:i.shaderId,...i.definitionVersion!=null?{definitionVersion:i.definitionVersion}:{},properties:structuredClone(i.properties),...i.origin?{origin:structuredClone(i.origin)}:{}})).filter(i=>!o||i.shaderId===o).filter(i=>!r||`${i.name}
|
|
22
|
+
${i.id}`.toLowerCase().includes(r)).filter(i=>!n||JSON.stringify(i.origin??{}).toLowerCase().includes(n)).sort((i,s)=>i.name.localeCompare(s.name)||i.id.localeCompare(s.id));return ch(a,t.cursor,t.limit)}function y7(e,t){let r=t.query?.trim().toLowerCase()??"",n=e.list().map(zN).filter(o=>t.builtin===void 0||o.builtin===t.builtin).filter(o=>!r||`${o.displayName}
|
|
23
|
+
${o.shaderId}
|
|
24
|
+
${o.runtimeKind}`.toLowerCase().includes(r)).sort((o,a)=>o.displayName.localeCompare(a.displayName)||o.shaderId.localeCompare(a.shaderId));return ch(n,t.cursor,t.limit)}function S7(e,t){let r=t?.trim(),n=e.get(r);return n?{ok:!0,output:{definition:{...zN(n),propertiesSchema:structuredClone(n.propertiesSchema),defaultProperties:structuredClone(n.defaultProperties),inspector:structuredClone(n.inspector)}}}:W("material.shaderDefinitionNotFound",`Shader Definition was not found: ${r}`)}function zN(e){return{shaderId:e.shaderId,version:e.version,runtimeKind:e.runtimeKind,displayName:e.displayName,builtin:Uo(e.shaderId)!==null,...e.sourceFile?{sourceFile:e.sourceFile}:{},sectionCount:e.inspector.sections.length,fieldCount:e.inspector.fields.length}}function I7(e,t){let r=t?.trim(),n=me(e,r);return n?{ok:!0,output:{asset:{id:n.id,name:n.name?.trim()||n.id,shaderId:n.shaderId,...n.definitionVersion!=null?{definitionVersion:n.definitionVersion}:{},properties:structuredClone(n.properties),...n.origin?{origin:structuredClone(n.origin)}:{}},referenceCount:io(e).filter(o=>o.materialAssetId===r).length}}:W("material.assetNotFound",`Material asset was not found: ${r}`)}function E7(e,t,r,n){let o=r.shaderId?.trim(),a=n.get(o);if(!a)return W("material.shaderDefinitionNotFound",`Shader Definition was not found: ${o}`);let i=r.name?.trim();if(r.name!==void 0&&!i)return W("material.invalidName","Material name must not be empty.");let s=t.createMaterialAssetCreatePatch({document:e.session.getWorkingDocument(),definition:a,...i?{name:i}:{}});if(!s?.createdId)return W("material.assetMutationUnavailable","Material Asset creation is unavailable.");let c=e.session.getState({cloneDocuments:!1}).documentRevision;Iu(e,s);let d=me(e.session.getWorkingDocument(),s.createdId);return Xc(e,null,ea(d)),{ok:!0,output:{asset:bs(d),changed:e.session.getState({cloneDocuments:!1}).documentRevision!==c,revision:e.session.getState({cloneDocuments:!1}).documentRevision}}}function T7(e,t,r){let n=e.session.getWorkingDocument(),o=r.materialAssetId?.trim();if(!me(n,o))return W("material.assetNotFound",`Material asset was not found: ${o}`);let i=t.createMaterialAssetDuplicatePatch({document:n,materialAssetId:o});if(!i?.createdId)return W("material.assetMutationUnavailable","Material Asset duplication is unavailable.");let s=e.session.getState({cloneDocuments:!1}).documentRevision;Iu(e,i);let c=me(e.session.getWorkingDocument(),i.createdId);if(!c)throw new Error(`Duplicated Material Asset is missing after the reducer: ${i.createdId}.`);return Xc(e,null,ea(c)),{ok:!0,output:{sourceMaterialAssetId:o,asset:bs(c),changed:e.session.getState({cloneDocuments:!1}).documentRevision!==s,revision:e.session.getState({cloneDocuments:!1}).documentRevision}}}function A7(e,t,r){let n=e.session.getWorkingDocument(),o=r.materialAssetId?.trim(),a=me(n,o);if(!a)return W("material.assetNotFound",`Material asset was not found: ${o}`);let i=io(n).filter(d=>d.materialAssetId===o);if(i.length>0)return W("material.assetInUse",`Material asset is still referenced: ${o}`,{materialAssetId:o,referenceCount:i.length});let s=t.createMaterialAssetDeletePatch({document:n,materialAssetId:o});if(!s)return W("material.assetReadonly",`Material asset cannot be deleted: ${o}`);let c=e.session.getState({cloneDocuments:!1}).documentRevision;if(Iu(e,s),me(e.session.getWorkingDocument(),o))throw new Error(`Deleted Material Asset is still present after the reducer: ${o}.`);return Xc(e,ea(a),null),{ok:!0,output:{materialAssetId:o,changed:e.session.getState({cloneDocuments:!1}).documentRevision!==c,revision:e.session.getState({cloneDocuments:!1}).documentRevision}}}function P7(e,t,r){let n=e.session.getWorkingDocument(),o=r.materialAssetId?.trim(),a=me(n,o);if(!a)return W("material.assetNotFound",`Material asset was not found: ${o}`);let i=r.name?.trim();if(!i)return W("material.invalidName","Material name must not be empty.");let s=(n.scene.materialAssets??[]).find(l=>l.id!==o&&l.name?.trim().toLocaleLowerCase()===i.toLocaleLowerCase());if(s)return W("material.nameConflict",`A Material Asset named "${i}" already exists.`,{materialAssetId:o,conflictingMaterialAssetId:s.id,name:i});if(a.name===i)return{ok:!0,output:{asset:bs(a),changed:!1,revision:e.session.getState({cloneDocuments:!1}).documentRevision}};let c=t.createMaterialAssetRenamePatch({document:n,materialAssetId:o,name:i});if(!c)return W("material.assetReadonly",`Material asset is read-only: ${o}`);let d=e.session.getState({cloneDocuments:!1}).documentRevision;Iu(e,c);let u=me(e.session.getWorkingDocument(),o);return Xc(e,ea(a),ea(u),c.changedIds??c.reprojectIds??[]),{ok:!0,output:{asset:bs(u),changed:e.session.getState({cloneDocuments:!1}).documentRevision!==d,revision:e.session.getState({cloneDocuments:!1}).documentRevision}}}function x7(e,t,r,n){let o=e.session.getWorkingDocument(),a=r.materialAssetId?.trim(),i=me(o,a);if(!i)return W("material.assetNotFound",`Material asset was not found: ${a}`);let s=r.shaderId?.trim(),c=n.get(s);if(!c)return W("material.shaderDefinitionNotFound",`Shader Definition was not found: ${s}`);if(i.shaderId===s)return{ok:!0,output:{asset:bs(i),previousShaderId:i.shaderId,changed:!1,revision:e.session.getState({cloneDocuments:!1}).documentRevision,preservedPaths:[],resetPaths:[]}};let d=t.createMaterialAssetSetShaderPatch({document:o,materialAssetId:a,definition:c});if(!d)return W("material.assetReadonly",`Material asset is read-only: ${a}`);if((d.resetPaths?.length??0)>0&&r.allowReset!==!0)return W("material.shaderChangeRequiresConfirmation",`Changing to ${c.displayName} resets ${d.resetPaths.length} incompatible material properties.`,{materialAssetId:a,previousShaderId:i.shaderId,shaderId:s,preservedPaths:d.preservedPaths??[],resetPaths:d.resetPaths??[]});let u=e.session.getState({cloneDocuments:!1}).documentRevision;Iu(e,d);let l=me(e.session.getWorkingDocument(),a);return Xc(e,ea(i),ea(l),d.changedIds??d.reprojectIds??[]),{ok:!0,output:{asset:bs(l),previousShaderId:i.shaderId,changed:e.session.getState({cloneDocuments:!1}).documentRevision!==u,revision:e.session.getState({cloneDocuments:!1}).documentRevision,preservedPaths:d.preservedPaths??[],resetPaths:d.resetPaths??[]}}}function Iu(e,t){e.dispatch({type:"document.patch",patch:t.patch,label:t.label,...t.reprojectIds?.length?{projectionImpact:{type:"incremental",reprojectIds:t.reprojectIds}}:{},...t.presentationImpact?{presentationImpact:t.presentationImpact}:{}})}function Xc(e,t,r,n=[]){let o={kind:"material",operations:[{type:"asset-update",materialAssetId:typeof r?.id=="string"?r.id:typeof t?.id=="string"?t.id:"",before:t,after:r,affectedNodeIds:[...new Set(n.filter(a=>a.trim().length>0))]}]};e.captureAuthoringPatch(o)}function ea(e){return JSON.parse(JSON.stringify(bs(e)))}function M7(e,t){let r={kind:"material",operations:[{type:"binding-update",scope:t.scope,targetId:t.targetId,...t.containerId?{containerId:t.containerId}:{},...t.slotId?{slotId:t.slotId}:{},before:t.before,after:t.after,affectedNodeIds:[...new Set((t.affectedNodeIds??[]).filter(n=>n.trim().length>0))]}]};e.captureAuthoringPatch(r)}function bs(e){return{id:e.id,name:e.name?.trim()||e.id,shaderId:e.shaderId,...e.definitionVersion!=null?{definitionVersion:e.definitionVersion}:{},properties:structuredClone(e.properties),...e.origin?{origin:structuredClone(e.origin)}:{}}}function D7(e,t){let r=t.materialAssetId?.trim();if(!me(e,r))return W("material.assetNotFound",`Material asset was not found: ${r}`);let n=io(e).filter(o=>o.materialAssetId===r).filter(o=>!t.scope||o.scope===t.scope).map(o=>({scope:o.scope,kind:o.kind,materialAssetId:o.materialAssetId,...o.scope==="scene"?{objectId:o.gameObjectId}:{},...o.gameObjectName?{objectName:o.gameObjectName}:{},...o.prefabAssetId?{prefabAssetId:o.prefabAssetId}:{},...o.prefabNodeId?{nodeId:o.prefabNodeId}:{},...o.slotId?{slotId:o.slotId}:{},bindingPath:o.bindingPath,label:o.label})).sort((o,a)=>Zo(o).localeCompare(Zo(a)));return{ok:!0,output:{materialAssetId:r,...ch(n,t.cursor,t.limit)}}}function jT(e,t){let r=t.scope==="prefab"?[]:e.scene.gameObjects.filter(o=>!t.objectId||o.id===t.objectId).flatMap(o=>{let a=Qr(e,o),i=$c(e,o.id)??o.overrides;return a.length===0?[ih({scope:"scene",objectId:o.id},o.overrides?.materialBinding,i?.materialBinding,i!==o.overrides?"prefab-root":"default","overrides.materialBinding.materialAssetId")]:a.map(s=>ih({scope:"scene",objectId:o.id,slotId:s.slotId},o.overrides?.materialSlotBindings?.[s.slotId],i?.materialSlotBindings?.[s.slotId],i!==o.overrides?"prefab-root":"glb-source",`overrides.materialSlotBindings.${s.slotId}.materialAssetId`))}),n=t.scope==="scene"?[]:e.assets.filter(o=>o.type==="prefab"&&!!o.prefab).filter(o=>!t.prefabAssetId||o.id===t.prefabAssetId).flatMap(o=>{let a=t.nodeId?[]:NN(e,o,null,o.prefab.overrides,void 0),i=Mt(o),s=(o.prefab?.nodes??[]).filter(c=>c.id!==i).filter(c=>!t.nodeId||c.id===t.nodeId).flatMap(c=>NN(e,o,c,c.overrides,o.prefab.overrides));return[...a,...s]});return[...r,...n].sort((o,a)=>Zo(o.target).localeCompare(Zo(a.target)))}function NN(e,t,r,n,o){let a=w7(e,t,r),i={scope:"prefab",prefabAssetId:t.id,...r?{nodeId:r.id}:{}};return a.length===0?[ih(i,n?.materialBinding,n?.materialBinding??o?.materialBinding,o?.materialBinding?"prefab-root":"default","overrides.materialBinding.materialAssetId")]:a.map(s=>ih({...i,slotId:s},n?.materialSlotBindings?.[s],n?.materialSlotBindings?.[s]??o?.materialSlotBindings?.[s],o?.materialSlotBindings?.[s]?"prefab-root":"glb-source",`overrides.materialSlotBindings.${s}.materialAssetId`))}function ih(e,t,r,n,o){let a=LN(t?.materialAssetId),i=LN(r?.materialAssetId),s=a?"authored":i?n:e.slotId?"glb-source":"default";return{target:e,kind:e.slotId?"slot":"root",bindingPath:o,authoredMaterialAssetId:a,effectiveMaterialAssetId:i??(s==="glb-source"?null:ps),resolvedSource:s}}function GN(e,t,r,n){let o=Ue(e),a=n?.trim()||null;if(a&&!me(o,a))return W("material.assetNotFound",`Material asset was not found: ${a}`);let i=C7(r);if(!i.ok)return i.failure;let s=new Map(jT(o,{}).map(g=>[Zo(g.target),g])),c=i.targets.map(g=>s.get(Zo(g)));if(c.some(g=>!g))return W("material.invalidTarget","One or more material binding targets do not exist or require a logical slotId.");let d=c,l=i.targets[0].scope==="scene"?t.createSceneMaterialBindingPatch({document:o,materialAssetId:a,targets:c.map(g=>({objectId:g.target.objectId,path:g.bindingPath}))}):t.createPrefabMaterialBindingPatch({document:o,materialAssetId:a,targets:c.map(g=>({prefabAssetId:g.target.prefabAssetId,...g.target.nodeId?{nodeId:g.target.nodeId}:{},path:g.bindingPath}))});if(!l)return W("material.patchUnavailable","Material binding preflight rejected the atomic patch.");e.dispatch({type:"document.patch",patch:l.patch,label:l.label,...l.reprojectIds?.length?{projectionImpact:{type:"incremental",reprojectIds:l.reprojectIds}}:{},...l.presentationImpact?{presentationImpact:l.presentationImpact}:{}});let m=Ue(e),p=new Map(jT(m,{}).map(g=>[Zo(g.target),g])),h=i.targets.map(g=>p.get(Zo(g)));return i.targets.forEach((g,f)=>{let y=d[f],A=h[f];M7(e,{scope:g.scope,targetId:g.scope==="scene"?g.objectId:g.nodeId??g.prefabAssetId,...g.scope==="prefab"&&g.prefabAssetId?{containerId:g.prefabAssetId}:{},...g.slotId?{slotId:g.slotId}:{},before:y.authoredMaterialAssetId??null,after:A.authoredMaterialAssetId??null,affectedNodeIds:l.reprojectIds??[]})}),{ok:!0,output:{changed:h.some((g,f)=>JSON.stringify(g)!==JSON.stringify(d[f])),changedCount:h.filter((g,f)=>JSON.stringify(g)!==JSON.stringify(d[f])).length,revision:e.session.getState({cloneDocuments:!1}).documentRevision,bindings:h}}}function O7(e,t,r,n){let o=t?.trim(),a=me(e,o),i=a?Rc(a.shaderId,n):null;return a?i?{ok:!0,output:{materialAssetId:o,shaderId:a.shaderId,properties:structuredClone(a.properties),defaults:structuredClone(i.defaultProperties),...r?{schema:structuredClone(i.propertiesSchema)}:{}}}:W("material.shaderUnsupported",`Unsupported material shader: ${a.shaderId}`):W("material.assetNotFound",`Material asset was not found: ${o}`)}function R7(e,t,r,n){let o=Ue(e),a=r.materialAssetId?.trim(),i=me(o,a);if(!i)return W("material.assetNotFound",`Material asset was not found: ${a}`);let s=new Set,c=[];for(let l of r.changes??[]){let m=v7(l.path),p=Ca(i.shaderId,m,n),h=Object.prototype.hasOwnProperty.call(l,"value"),g=l.reset===!0;if(!m||s.has(m)||!p||p.kind==="object"||h===g)return W("material.invalidPropertyPatch",`Invalid material property change: ${l.path}`);let f=g?vv(i.shaderId,m,n):{found:!0,value:l.value};if(!f.found)return W("material.invalidPropertyPatch",`Material property cannot be reset: ${m}`);s.add(m),c.push({path:m,value:f.value})}let d=t.createMaterialPropertiesPatch({document:o,materialAssetId:a,changes:c});if(!d)return W("material.invalidPropertyPatch","Material property preflight rejected the atomic patch.");e.dispatch({type:"document.patch",patch:d.patch,label:d.label,...d.reprojectIds?.length?{projectionImpact:{type:"incremental",reprojectIds:d.reprojectIds}}:{}});let u=me(Ue(e),a);return Xc(e,ea(i),ea(u),d.reprojectIds??[]),{ok:!0,output:{materialAssetId:a,shaderId:u.shaderId,changed:JSON.stringify(i.properties)!==JSON.stringify(u.properties),changedPaths:JSON.stringify(i.properties)!==JSON.stringify(u.properties)?[...s]:[],revision:e.session.getState({cloneDocuments:!1}).documentRevision,properties:structuredClone(u.properties)}}}function C7(e){if(!Array.isArray(e)||e.length===0)return{ok:!1,failure:W("material.invalidTarget","At least one material target is required.")};let t=new Set,r=[];for(let n of e){let o=n.scope,a=n.objectId?.trim(),i=n.prefabAssetId?.trim(),s=n.nodeId?.trim(),c=n.slotId?.trim();if(o==="scene"&&(!a||i||s)||o==="prefab"&&(!i||a)||o!=="scene"&&o!=="prefab")return{ok:!1,failure:W("material.invalidTarget","Material target identity is invalid.")};let d={scope:o,...a?{objectId:a}:{},...i?{prefabAssetId:i}:{},...s?{nodeId:s}:{},...c?{slotId:c}:{}},u=Zo(d);if(t.has(u))return{ok:!1,failure:W("material.invalidTarget","Duplicate material target.")};t.add(u),r.push(d)}return new Set(r.map(n=>n.scope)).size!==1?{ok:!1,failure:W("material.invalidTarget","Scene and Prefab targets cannot be mixed.")}:r[0].scope==="prefab"&&new Set(r.map(n=>n.prefabAssetId)).size!==1?{ok:!1,failure:W("material.invalidTarget","One atomic command must target one Prefab asset.")}:{ok:!0,targets:r}}function w7(e,t,r){let n=r?.sourceAssetId??t.prefab?.sourceAssetId,o=e.assets.find(i=>i.id===n);return(Array.isArray(o?.metadata?.materialSlots)?o.metadata.materialSlots:[]).map(bE).filter(i=>!!i?.slotId).map(i=>i.slotId)}function ch(e,t,r){let n=t?/^offset:(\d+)$/.exec(t.trim()):null,o=n?Number(n[1]):0,a=Number.isSafeInteger(r)?Math.max(1,Math.min(200,Number(r))):50,i=e.slice(o,o+a),s=o+i.length;return{items:i,total:e.length,...s<e.length?{nextCursor:`offset:${s}`}:{}}}function Zo(e){return[e.scope??"",e.objectId??"",e.prefabAssetId??"",e.nodeId??"",e.slotId??""].join("\0")}function v7(e){let t=typeof e=="string"?e.trim():"";return t&&!t.startsWith("properties.")?`properties.${t}`:t}function LN(e){return typeof e=="string"&&e.trim()?e.trim():null}function _7(e){if(!(!e.position&&!e.rotation&&!e.scale))return{position:e.position??{x:0,y:0,z:0},rotation:e.rotation??{x:0,y:0,z:0},scale:e.scale??{x:1,y:1,z:1}}}function FN(e,t,r,n){let o=Ue(e),a=typeof r.parentId=="string"?r.parentId:typeof r.activeId=="string"?r.activeId:null;return a&&!t.getHierarchyItems(o).some(i=>i.id===a)?yu(a,["exists"],{exists:!0},{exists:!1}):r.objectId&&t.getHierarchyItems(o).some(i=>i.id===r.objectId)?yu(r.objectId,["exists"],{exists:!1},{exists:!0}):k7(e,t,n(o,r))}function k7(e,t,r){if(!r?.createdId)return W("command.unavailable","The requested Hierarchy create operation is unavailable.");let n=V7(r);e.dispatch({type:"document.patch",patch:r.patch,label:r.label,...n?{projectionImpact:n}:{},presentationImpact:{hierarchy:"full",inspector:"full"}});let o=Ue(e),a=o.scene.gameObjects.find(c=>c.id===r.createdId),i=t.getHierarchyItems(o),s=i.findIndex(c=>c.id===r.createdId);if(!a||s<0)throw new Error(`Created Hierarchy node is missing after the authoritative reducer: ${r.createdId}.`);return e.captureAuthoringPatch({kind:"hierarchy",operations:[{type:"create",node:structuredClone(a),index:s,parentId:i[s]?.parentId??null}]}),{ok:!0,output:{createdId:r.createdId,object:Su(a,o),selection:e.session.getSelection()}}}function j7(e,t,r){let n=Ue(e),o=n.scene.gameObjects.find(d=>d.id===r.objectId);if(!o)return W("object.notFound",`Scene object was not found: ${r.objectId}`);let a=o.name??o.id;if(a!==r.expectedName)return yu(r.objectId,["name"],{name:r.expectedName},{name:a});let i=t.createRenamePatch(n,{id:r.objectId,name:r.name});if(!i)return W("object.rename.unchanged",`Rename did not change: ${r.objectId}`);e.dispatch({type:"document.patch",patch:i.patch,label:i.label,projectionImpact:{type:"incremental",syncMetadataIds:[r.objectId]},presentationImpact:{hierarchy:{labelIds:[r.objectId]},inspector:["summary"]}});let s=Ue(e).scene.gameObjects.find(d=>d.id===r.objectId),c=s?.name??s?.id;if(!c||c===a)throw new Error(`Rename reducer did not converge: ${r.objectId}.`);return e.captureAuthoringPatch({kind:"hierarchy",operations:[{type:"rename",targetId:r.objectId,before:a,after:c}]}),{ok:!0,output:{objectId:r.objectId,before:a,after:c}}}function N7(e,t,r){let n=Ue(e),o=dh(t,n,r.expectedNodes);if(o)return o;let a={ids:[...r.objectIds],targetId:r.targetId??null,placement:r.placement,...r.parentId!==void 0?{parentId:r.parentId}:{},...r.beforeId!==void 0?{beforeId:r.beforeId}:{},...r.afterId!==void 0?{afterId:r.afterId}:{},preserveWorldTransform:r.preserveWorldTransform!==!1},i=t.validateHierarchyMove(n,a);if(!i.ok)return W("object.move.rejected",i.reason??"Hierarchy move was rejected.");let s=t.createHierarchyMovePatch(n,a);if(!s)return W("object.move.unchanged","Hierarchy move did not change the document.");e.dispatch({type:"document.patch",patch:s.patch,label:s.label,projectionImpact:{type:"incremental",syncTransformIds:s.changedIds??[...r.objectIds]},presentationImpact:{hierarchy:"full",inspector:["transform"]}});let c=Ue(e),d=s.changedIds??[...r.objectIds],u=VN(n,c,d,t.getHierarchyItems(n),t.getHierarchyItems(c));if(u.moves.length===0)throw new Error("Hierarchy move reducer produced no canonical changes.");return e.captureAuthoringPatch({kind:"hierarchy",operations:[u]}),{ok:!0,output:{movedIds:d}}}function G7(e,t,r){let n=Ue(e),o=dh(t,n,r.expectedNodes);if(o)return o;let a=t.createDuplicateSelectionPatch({document:n,targetIds:[...r.objectIds],activeId:r.activeId??null});if(!a||a.createdIds.length===0)return W("object.duplicate.rejected","Hierarchy duplicate was rejected.");e.dispatch({type:"document.patch",patch:a.patch,label:a.label,projectionImpact:{type:"incremental",createdNodeIds:[...a.createdIds]},presentationImpact:{hierarchy:"full",inspector:"full"}});let i=Ue(e),s=t.getHierarchyItems(i),c=a.createdIds.map(l=>{let m=i.scene.gameObjects.find(h=>h.id===l),p=s.findIndex(h=>h.id===l);if(!m||p<0)throw new Error(`Duplicated Hierarchy node is missing after the reducer: ${l}.`);return{type:"create",node:structuredClone(m),index:p,parentId:s[p]?.parentId??null}}).sort((l,m)=>l.index-m.index);e.captureAuthoringPatch({kind:"hierarchy",operations:c});let d=a.selectedIds?.length?[...a.selectedIds]:[...a.createdIds],u=a.activeId&&d.includes(a.activeId)?a.activeId:d[d.length-1]??null;return d.length>0&&e.session.dispatch({type:"selection.replace",selectedIds:d,activeId:u,label:"Select Duplicated Nodes"}),{ok:!0,output:{createdIds:[...a.createdIds],selectedIds:d,activeId:u,selection:e.session.getSelection()}}}function L7(e,t,r){let n=Ue(e),o=dh(t,n,r.expectedNodes);if(o)return o;let a={ids:[...r.objectIds],name:r.name,pivot:"selection-center",preserveWorldTransform:r.preserveWorldTransform!==!1,...r.parentId!==void 0?{parentId:r.parentId}:{},...r.insertBeforeId!==void 0?{insertBeforeId:r.insertBeforeId}:{}},i=t.validateGroupSelection(n,a);if(!i.ok)return W("object.group.rejected",i.reason??"Hierarchy group was rejected.");let s=t.createGroupSelectionPatch(n,a);if(!s?.createdId)return W("object.group.rejected","Hierarchy group was rejected.");let c=t.getHierarchyItems(n);e.dispatch({type:"document.patch",patch:s.patch,label:s.label,projectionImpact:{type:"incremental",createdNodeIds:[s.createdId],syncTransformIds:s.changedIds?.filter(f=>f!==s.createdId)??[...r.objectIds]},presentationImpact:{hierarchy:"full",inspector:"full"}});let d=Ue(e),u=t.getHierarchyItems(d),l=d.scene.gameObjects.find(f=>f.id===s.createdId),m=u.findIndex(f=>f.id===s.createdId);if(!l||m<0)throw new Error(`Grouped Hierarchy parent is missing after the reducer: ${s.createdId}.`);let p=[...c];p.splice(Math.min(m,p.length),0,u[m]);let h=(s.changedIds??[...r.objectIds]).filter(f=>f!==s.createdId),g=VN(n,d,h,p,u);if(g.moves.length===0)throw new Error("Hierarchy group reducer produced no canonical moves.");return e.captureAuthoringPatch({kind:"hierarchy",operations:[{type:"create",node:structuredClone(l),index:m,parentId:u[m]?.parentId??null},g]}),e.session.dispatch({type:"selection.replace",selectedIds:[s.createdId],activeId:s.createdId,label:"Select Created Parent"}),{ok:!0,output:{createdId:s.createdId,movedIds:h,selection:e.session.getSelection()}}}function F7(e,t,r){let n=Ue(e),o=n.scene.gameObjects.find(d=>d.id===r.objectId);if(!o)return W("object.notFound",`Scene object was not found: ${r.objectId}`);let a=o.active!==!1;if(a!==r.expectedEnabled)return yu(r.objectId,["enabled"],{enabled:r.expectedEnabled},{enabled:a});let i=t.patchGameObjectField(n,r.objectId,"enabled",r.enabled),c=i.scene.gameObjects.find(d=>d.id===r.objectId)?.active!==!1;return i===n||c===a?W("object.enabled.unchanged",`Enabled state did not change: ${r.objectId}`):(e.dispatch({type:"document.replace",document:i,label:`${r.enabled?"Enable":"Disable"} ${r.objectId}`,projectionImpact:{type:"incremental",syncAppearanceIds:[r.objectId]},presentationImpact:{hierarchy:"full",inspector:["summary"]}}),e.captureAuthoringPatch({kind:"hierarchy",operations:[{type:"set-enabled",targetId:r.objectId,before:a,after:c}]}),{ok:!0,output:{objectId:r.objectId,before:a,after:c}})}function $7(e,t,r){let n=Ue(e);if(r.expectedNodes){let d=dh(t,n,r.expectedNodes);if(d)return d}else{let d=e.session.getState({cloneDocuments:!1}).documentRevision;if(e.expectedRevision?.document!==d)return W("command.documentRevisionMismatch",`Expected document revision ${e.expectedRevision?.document}, received ${d}.`,{expected:e.expectedRevision?.document,actual:d})}let o=r.objectIds??(r.objectId?[r.objectId]:[]),a=t.createDeleteSubtreePatch(n,{ids:o});if(!a)return W("command.unavailable","Hierarchy delete was rejected.");let i=a.deletedIds??o,s=t.getHierarchyItems(n),c=i.map(d=>{let u=n.scene.gameObjects.find(m=>m.id===d),l=s.findIndex(m=>m.id===d);if(!u||l<0)throw new Error(`Deleted Hierarchy node is missing from the command base: ${d}.`);return{node:structuredClone(u),index:l,parentId:s.find(m=>m.id===d)?.parentId??null}});return e.dispatch({type:"document.patch",patch:a.patch,label:a.label,projectionImpact:{type:"incremental",deletedNodeIds:i},presentationImpact:{hierarchy:"full",inspector:"full"}}),e.captureAuthoringPatch({kind:"hierarchy",operations:[{type:"delete",nodes:c}]}),{ok:!0,output:{deletedIds:i,fallbackSelectionId:e.session.getSelection().activeId,selection:e.session.getSelection()}}}function dh(e,t,r){let n=e.getHierarchyItems(t),o=r.map(i=>B7(n,i.objectId)),a=r.flatMap((i,s)=>z7(i,o[s])?[]:[i.objectId]);return a.length===0?null:yu(a[0],["parentId","previousSiblingId","nextSiblingId"],{nodes:r},{nodes:o})}function B7(e,t){let r=e.find(i=>i.id===t);if(!r)return null;let n=r.parentId??null,o=e.filter(i=>(i.parentId??null)===n),a=o.findIndex(i=>i.id===t);return{objectId:t,parentId:n,previousSiblingId:a>0?o[a-1].id:null,nextSiblingId:a>=0&&a+1<o.length?o[a+1].id:null}}function z7(e,t){return!!t&&e.objectId===t.objectId&&e.parentId===t.parentId&&e.previousSiblingId===t.previousSiblingId&&e.nextSiblingId===t.nextSiblingId}function yu(e,t,r,n){return W("authoring.remoteConflict",`Hierarchy changed after the command base revision: ${e}.`,{objectId:e,paths:t,expected:r,actual:n})}function VN(e,t,r,n,o){return{type:"move",moves:r.flatMap(i=>{let s=n.findIndex(p=>p.id===i),c=o.findIndex(p=>p.id===i),d=e.scene.gameObjects.find(p=>p.id===i),u=t.scene.gameObjects.find(p=>p.id===i);if(!d||!u||s<0||c<0)return[];let l=d.components.find(p=>p.type==="Transform")??null,m=u.components.find(p=>p.type==="Transform")??null;return d.parentId===u.parentId&&s===c&&JSON.stringify(l)===JSON.stringify(m)?[]:[{targetId:i,beforeParentId:n.find(p=>p.id===i)?.parentId??null,afterParentId:o.find(p=>p.id===i)?.parentId??null,beforeIndex:s,afterIndex:c,beforeTransform:structuredClone(l),afterTransform:structuredClone(m)}]})}}function V7(e){let t=e.createdId?[e.createdId]:[],r=e.deletedIds??[],n=[];if(e.reprojectIds?.length){let o=new Set([...t,...r]);n=e.reprojectIds.filter(a=>!o.has(a))}if(!(t.length===0&&r.length===0&&n.length===0))return{type:"incremental",...t.length?{createdNodeIds:t}:{},...r.length?{deletedNodeIds:r}:{},...n.length?{reprojectIds:n}:{}}}function U7(e,t){let r=t.objectId??t.name??t.path??t.query??"",n=r.trim().toLocaleLowerCase(),o=e.scene.gameObjects.find(s=>s.id===r),a=o?[o]:e.scene.gameObjects.filter(s=>s.name?.trim().toLocaleLowerCase()===n||s.id.toLocaleLowerCase().includes(n)),i=NT(e);return{ok:!0,output:{objects:a.map(s=>Su(s,e,i)),resolvedObject:a.length===1?Su(a[0],e,i):null,ambiguous:a.length>1}}}function Su(e,t,r=NT(t)){let n=H7(e);return{id:e.id,label:e.name??e.id,name:e.name??e.id,type:It(e),...n?{sourceAssetId:n}:{},path:K7(r,e),parentId:e.parentId??null,selectable:!0,locked:!1}}function H7(e){return e.components.find(r=>r.type==="ModelRenderer"||r.type==="ImageRenderer")?.assetId||e.prefab?.sourceAssetId||e.prefab?.prefabId}function NT(e){return new Map(e.scene.gameObjects.map(t=>[t.id,t]))}function K7(e,t){let r=[],n=new Set,o=t;for(;o&&!n.has(o.id);)n.add(o.id),r.push(o.name??o.id),o=o.parentId?e.get(o.parentId):void 0;return r.reverse().join("/")}function W7(e,t,r){let n=Ue(e),o=new Map(n.scene.gameObjects.map(f=>[f.id,f])),a=new Map,i=new Map,s=new Set,c=FE({hasMaterialAsset:(f,y)=>!!me(f,y),isMarkerGameObject:f=>!!f.marker}),d=0,u=e.session.getState({cloneDocuments:!1}).documentRevision;if(!r.targets.every(f=>f.changes.every(y=>Object.prototype.hasOwnProperty.call(y,"expected")))&&e.expectedRevision?.document!==u)return W("command.documentRevisionMismatch",`Expected document revision ${e.expectedRevision?.document}, received ${u}.`,{expected:e.expectedRevision?.document,actual:u});for(let f of r.targets){let y=f.objectId.trim(),A=o.get(y);if(!A)return W("object.notFound",`Scene object was not found: ${y}`);let T=new Map((t.getInspectorObject(n,y)?.sections??[]).flatMap(P=>P.properties).map(P=>[P.path,P])),D=a.get(y)??[];for(let P of f.changes){let C=P.path.trim(),E=`${y}\0${C}`;if(s.has(E))return W("object.properties.duplicateField",`Object property is duplicated: ${y}.${C}`);if(s.add(E),(C==="shadow.cast"||C==="shadow.receive")&&!Lc(A))return W("object.properties.readOnly",`Shadow participation is readonly for this target: ${y}.`);let S=T.get(C),w=Object.prototype.hasOwnProperty.call(P,"expected");if(w&&!S)return W("object.properties.unsupportedPath",`Inspector schema does not expose a field precondition path: ${y}.${C}`);let M=kT(S?.value);if(w&&!sh(P.expected,M))return W("authoring.remoteConflict",`Object properties changed after the command base revision: ${y}.`,{objectId:y,paths:[C],expected:{[C]:kT(P.expected)},actual:{[C]:M},baseDocumentRevision:e.expectedRevision.document,actualDocumentRevision:u});let _=S?.coerce?S.coerce(P.value):LE(C,P.value),B=S?.validate?.(_)??Vc({document:n,path:C,nodeKind:It(A),value:_,extraValidators:[c]});if(!B.ok)return W("object.properties.invalid",`${B.message??`Invalid object property: ${C}.`} Target: ${y}.`);S&&i.set(E,M),D.push({path:C,value:_}),d+=1}a.set(y,D)}let m=[...a].map(([f,y])=>({objectId:f,changes:y})),p=t.patchGameObjectPropertiesMany(n,m),h=new Map(p.scene.gameObjects.map(f=>[f.id,f])),g=m.map(f=>f.objectId).filter(f=>h.get(f)!==o.get(f));if(p!==n){let f=m.flatMap(C=>{let E=new Map((t.getInspectorObject(p,C.objectId)?.sections??[]).flatMap(S=>S.properties).map(S=>[S.path,S]));return C.changes.flatMap(S=>{let w=`${C.objectId}\0${S.path}`,M=i.get(w),_=E.get(S.path);if(M===void 0||!_)return[];let B=kT(_.value);return sh(M,B)?[]:[{targetId:C.objectId,path:S.path,before:M,after:B}]})}),y=q7(f);if(f.length===0)return{ok:!0,output:{requestedObjectCount:m.length,validatedPropertyCount:d,changed:!1,changedObjectCount:0,sampleChangedObjectIds:[]}};let A=[],T=[],D=[],P=[];for(let C of g){let E=a.get(C)??[],S=new Set(E.map(w=>Y7(w.path)));if(S.has("reproject")){P.push(C);continue}S.has("transform")&&A.push(C),S.has("metadata")&&T.push(C),S.has("appearance")&&D.push(C)}e.dispatch({type:"document.replace",document:p,label:`Patch ${d} properties on ${m.length} objects`,...g.length>0?{projectionImpact:{type:"incremental",...A.length>0?{syncTransformIds:A}:{},...T.length>0?{syncMetadataIds:T}:{},...D.length>0?{syncAppearanceIds:D}:{},...P.length>0?{reprojectIds:P}:{}}}:{},...y?{authoringPatch:y}:{}})}return{ok:!0,output:{requestedObjectCount:m.length,validatedPropertyCount:d,changed:g.length>0,changedObjectCount:g.length,sampleChangedObjectIds:g.slice(0,20)}}}function kT(e){let t=JSON.stringify(e);return t===void 0?null:JSON.parse(t)}function sh(e,t){if(Object.is(e,t))return!0;if(typeof e!=typeof t||e===null||t===null)return!1;if(Array.isArray(e)||Array.isArray(t))return Array.isArray(e)&&Array.isArray(t)&&e.length===t.length&&e.every((i,s)=>sh(i,t[s]));if(typeof e!="object"||typeof t!="object")return!1;let r=e,n=t,o=Object.keys(r).sort(),a=Object.keys(n).sort();return o.length===a.length&&o.every((i,s)=>i===a[s]&&sh(r[i],n[i]))}function q7(e){if(e.length===0||e.length>kf)return;let t={kind:"fields",writes:e};return new TextEncoder().encode(JSON.stringify(t)).byteLength<=Ll?t:void 0}function Y7(e){return e==="transform.position"||e.startsWith("transform.position.")||e==="transform.rotation"||e.startsWith("transform.rotation.")||e==="transform.scale"||e.startsWith("transform.scale.")?"transform":e==="name"||e.startsWith("metadata.")?"metadata":e==="active"||e==="enabled"||e.startsWith("shadow.")||e.startsWith("rendering.")||e.startsWith("overrides.material")||e.startsWith("overrides.outline")||e.startsWith("material.")?"appearance":"reproject"}function Ue(e){return e.session.getState({cloneDocuments:!1}).workingDocument}function Te(e,t){let r=Ac[e],n=Gl[e],o=jl[e];if(!r)throw new Error(`Built-in Editor command metadata is missing: ${e}`);return{schemaVersion:1,id:e,version:1,title:r.title,...Pc[e]?{description:Pc[e]}:{},target:r.target,access:r.access,stability:r.stability,inputSchema:n.inputSchema,outputSchema:n.outputSchema,effects:{persistence:r.access==="write"?"authoring":"none",undoable:r.access==="write",idempotent:r.access==="read"},...r.target==="authoring"&&r.access==="write"?{transaction:{compatible:!0,sideEffects:"authoring",phase:"mutation"}}:{},presentation:{category:r.category,inputMode:J7(n.inputSchema)?"schema-form":"none",...o?.aliases?{aliases:o.aliases}:{},...o?.keywords?{keywords:o.keywords}:{},...o?.examples?{examples:o.examples}:{},...o?.shortcut?{shortcut:o.shortcut}:{},...o?.menu?{menu:o.menu}:{},...t?{selectionBinding:t}:{}}}}function ah(e,t){let r=e.scene.gameObjects.find(o=>o.id===t),n=r?.components.find(o=>o.type==="Transform")??r?.transform;return!n||"mode"in n&&n.mode==="matrix"?null:{position:{...n.position},rotation:{...n.rotation},scale:{...n.scale??{x:1,y:1,z:1}}}}function J7(e){let t=e.properties;return!!t&&typeof t=="object"&&!Array.isArray(t)&&Object.keys(t).length>0}function W(e,t,r){return{ok:!1,diagnostics:[{severity:"error",source:"command",code:e,message:t,...r?{details:r}:{}}]}}function Ya(e){return W(e.code,e.message)}function lh(e,t){let r=t?.(e);if(r)return r;let n=zj(e,{createDuplicatedMaterialAssetCopy:Yc,findMaterialAsset:me,isReadonlyMaterialAsset:fs,normalizeMaterialAssetValue:Mr,validateMaterialAssetFieldValue:ao,resolveMaterialAssetDeleteState:uT,collectMaterialAssetBindingIds:os,createSourceMaterialAssetForBindingPatch:Ej});return n||TN(e,{createSourceAssetFromActionInput:IN,createPrefabDefinitionFromAsset:(o,a)=>PE(a,{id:ru(o,`${a.id}_prefab`),guid:xg()}),createPrefabDefinitionFromGameObject:(o,a)=>sk(o,a,{id:ru(o,`${a}-prefab`),metadata:{sourceGameObjectId:a}}),createDuplicatedPrefabDefinition:(o,a)=>ck(o,a,{metadata:{sourcePrefabAssetId:a}}),hasPrefabForSourceAsset:Q_,findPrefabAsset:Zr,normalizePrimitiveShape:EN,parseDuplicateMaterialAssetValue:ql,isPrefabMaterialAssetIdOverridePath:Pg,findMaterialAsset:me,createDuplicatedMaterialAssetCopy:Yc,normalizePrefabAssetFieldValue:eh,validatePrefabAssetFieldValue:th})}function UN(e,t,r){let n=new Set(t.map(a=>`${a.objectId}\0${a.path}`)),o=new Set;r&&o.add(r);for(let a of io(e))a.scope==="scene"&&n.has(`${a.gameObjectId}\0${a.bindingPath}`)&&o.add(a.materialAssetId);return{inspector:["material"],materials:{assetIds:[...o]}}}function HN(e,t,r){let n=new Set;r&&n.add(r);for(let o of t){let a=X7(e,o);a&&n.add(a)}return{inspector:["material"],materials:{assetIds:[...n]}}}function X7(e,t){let r=Zr(e,t.prefabAssetId)?.prefab,n=t.nodeId?r?.nodes?.find(a=>a.id===t.nodeId)?.overrides:r?.overrides;if(!n)return null;let o=t.path==="overrides.materialBinding.materialAssetId"?n.materialBinding?.materialAssetId:n.materialSlotBindings?.[ur(t.path,"materialAssetId")??""]?.materialAssetId;return typeof o=="string"&&o.trim()?o.trim():null}function uh(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:void 0}var Q7="rendering",Z7=tm;function mh(e){let t=uh(e);return eQ(t?.companionConfigs)}function eQ(e){if(e==null)return{};let t=tQ(e,"$.companionConfigs"),r={};for(let[n,o]of Object.entries(t)){if(!n||n!==n.trim())throw GT("schema.invalidValue","$.companionConfigs");let a=n;if(o===null){r[a]=null;continue}let i=uh(o);if(!i)throw GT("schema.invalidType",`$.companionConfigs.${a}`);a===Q7&&Nt(i),a===Z7&&ia(i,`$.companionConfigs.${a}`),r[a]=i}return r}function tQ(e,t){let r=uh(e);if(!r)throw GT("schema.invalidType",t);return r}function GT(e,t){let r=new Error(`${e}: ${t}`);return Object.assign(r,{code:e,path:t}),r}var qN=["globalVolume.enabled","globalVolume.hdr","globalVolume.environment.texture.textureAssetId","globalVolume.environment.texture.url","globalVolume.environment.iblIntensity","globalVolume.environment.rotationY","globalVolume.imageProcessing.exposure","globalVolume.imageProcessing.contrast","globalVolume.toneMapping.enabled","globalVolume.toneMapping.type","globalVolume.antialiasing.samples","globalVolume.postProcessing.bloom.enabled","globalVolume.postProcessing.bloom.threshold","globalVolume.postProcessing.bloom.weight","globalVolume.postProcessing.bloom.kernel","globalVolume.postProcessing.bloom.scale","shadows.blob.enabled","shadows.blob.appearance.color","shadows.blob.appearance.color.a","shadows.blob.appearance.edgeSoftness","shadows.blob.plane.height","shadows.blob.plane.yOffset","shadows.blob.size.sizeMultiplier","shadows.blob.size.minSize","shadows.blob.size.maxSize","shadows.staticProjected.enabled","shadows.staticProjected.appearance.color","shadows.staticProjected.appearance.color.a","shadows.staticProjected.plane.height","shadows.staticProjected.plane.yOffset","shadows.staticProjected.bake.padding","shadows.staticProjected.bake.blur","shadows.staticProjected.bake.texelsPerMeter","shadows.staticProjected.bake.atlasSize","shadows.staticProjected.bake.maxAtlasPages","shadows.staticProjected.bake.sdfRadiusPx","shadows.staticProjected.bake.spatialChunkSize","shadows.staticProjected.bake.targetChunkCount","shadows.planar.enabled","shadows.planar.appearance.color","shadows.planar.appearance.color.a","shadows.planar.plane.height","shadows.planar.plane.bias","shadows.planar.projection.footprintScale","shadows.planar.stencil.enabled","shadows.planar.casters.excludePatterns","shadows.planar.casters.rootBoundaryPatterns","shadows.planar.receivers.patterns"];function YN(e,t){Nt(e);let r=sQ(e),n=[];nQ(r,t,n);for(let[o,a]of Object.entries(t))rQ(o)&&(oQ(o)||aQ(r,o)||(JN(r,o,a),n.push(o)));return Nt(r),{config:r,changedPaths:iQ(n),normalized:mt(r)}}function rQ(e){return qN.includes(e)||XN(e)!=null||QN(e)!=null}function JN(e,t,r){let n=XN(t);if(n){let u=WN(e,n.renderingGroupId);u.name=na(r,u.name);return}let o=QN(t);if(o){let u=WN(e,o.renderingGroupId),l=u.alphaIndexPresets[o.presetIndex];if(!l)return;o.field==="name"?l.name=na(r,l.name):(l.alphaIndex=Je(r,l.alphaIndex),u.alphaIndexPresets=qu(u.alphaIndexPresets,[]));return}let a=Z(e,"globalVolume");if(t==="globalVolume.enabled"){a.enabled=r===!0;return}if(t==="globalVolume.hdr"){a.hdr=r===!0;return}if(t==="globalVolume.environment.texture.textureAssetId"){let u=typeof r=="string"?r.trim():"",l=Z(a,"environment");if(!u){l.texture=null,KN(l);return}let m=Z(l,"texture");m.textureAssetId=u,delete m.url;return}if(t==="globalVolume.environment.texture.url"){let u=typeof r=="string"?r.trim():"",l=Z(a,"environment");if(!u){l.texture=null,KN(l);return}let m=Z(l,"texture");m.url=u,delete m.textureAssetId;return}if(t==="globalVolume.environment.iblIntensity"){Z(a,"environment").iblIntensity=Ie(r,1);return}if(t==="globalVolume.environment.rotationY"){Z(a,"environment").rotationY=Je(r,0);return}if(t==="globalVolume.imageProcessing.exposure"){Z(a,"imageProcessing").exposure=Je(r,1);return}if(t==="globalVolume.imageProcessing.contrast"){Z(a,"imageProcessing").contrast=Je(r,1);return}if(t==="globalVolume.toneMapping.enabled"){Z(a,"toneMapping").enabled=r===!0;return}if(t==="globalVolume.toneMapping.type"){Z(a,"toneMapping").type=Hu(r,"aces");return}if(t==="globalVolume.antialiasing.samples"){Z(a,"antialiasing").samples=Ku(r,4);return}if(t==="globalVolume.postProcessing.bloom.enabled"){Z(Z(a,"postProcessing"),"bloom").enabled=r===!0;return}if(t==="globalVolume.postProcessing.bloom.threshold"){Z(Z(a,"postProcessing"),"bloom").threshold=Ie(r,.9);return}if(t==="globalVolume.postProcessing.bloom.weight"){Z(Z(a,"postProcessing"),"bloom").weight=Ie(r,.2);return}if(t==="globalVolume.postProcessing.bloom.kernel"){Z(Z(a,"postProcessing"),"bloom").kernel=Ie(r,64);return}if(t==="globalVolume.postProcessing.bloom.scale"){Z(Z(a,"postProcessing"),"bloom").scale=Gt(r,.5);return}let i=Z(e,"shadows"),s=Z(i,"blob");if(t==="shadows.blob.enabled"){s.enabled=r===!0;return}if(t==="shadows.blob.appearance.color"){let u=Z(s,"appearance"),l=kr(te(u.color),{r:0,g:0,b:0,a:.35}),m=te(r);u.color={r:Ye(m.r,l.r,0,1),g:Ye(m.g,l.g,0,1),b:Ye(m.b,l.b,0,1),a:Ye(m.a,l.a,0,1)};return}if(t==="shadows.blob.appearance.color.a"){let u=Z(s,"appearance"),l=kr(te(u.color),{r:0,g:0,b:0,a:.35});u.color={...l,a:Ye(r,l.a,0,1)};return}if(t==="shadows.blob.appearance.edgeSoftness"){Z(s,"appearance").edgeSoftness=Ye(r,.55,0,.98);return}if(t==="shadows.blob.plane.height"){Z(s,"plane").height=Je(r,0);return}if(t==="shadows.blob.plane.yOffset"){Z(s,"plane").yOffset=Ie(r,.08);return}if(t==="shadows.blob.size.sizeMultiplier"){Z(s,"size").sizeMultiplier=Ie(r,1.25);return}if(t==="shadows.blob.size.minSize"){Z(s,"size").minSize=Ie(r,.25);return}if(t==="shadows.blob.size.maxSize"){Z(s,"size").maxSize=Gt(r,20);return}let c=Z(i,"staticProjected");if(t==="shadows.staticProjected.enabled"){c.enabled=r===!0;return}if(t==="shadows.staticProjected.appearance.color"){let u=Z(c,"appearance"),l=kr(te(u.color),{r:0,g:0,b:0,a:.35}),m=te(r);u.color={r:Ye(m.r,l.r,0,1),g:Ye(m.g,l.g,0,1),b:Ye(m.b,l.b,0,1),a:Ye(m.a,l.a,0,1)};return}if(t==="shadows.staticProjected.appearance.color.a"){let u=Z(c,"appearance"),l=kr(te(u.color),{r:0,g:0,b:0,a:.35});u.color={...l,a:Ye(r,l.a,0,1)};return}if(t==="shadows.staticProjected.plane.height"){Z(c,"plane").height=Je(r,0);return}if(t==="shadows.staticProjected.plane.yOffset"){Z(c,"plane").yOffset=Ie(r,.08);return}if(t==="shadows.staticProjected.bake.padding"){Z(c,"bake").padding=Ie(r,.15);return}if(t==="shadows.staticProjected.bake.blur"){Z(c,"bake").blur=Ie(r,0);return}if(t==="shadows.staticProjected.bake.texelsPerMeter"){Z(c,"bake").texelsPerMeter=Gt(r,256);return}if(t==="shadows.staticProjected.bake.atlasSize"){Z(c,"bake").atlasSize=Gt(r,4096);return}if(t==="shadows.staticProjected.bake.maxAtlasPages"){Z(c,"bake").maxAtlasPages=Gt(r,8);return}if(t==="shadows.staticProjected.bake.sdfRadiusPx"){Z(c,"bake").sdfRadiusPx=Ie(r,8);return}if(t==="shadows.staticProjected.bake.spatialChunkSize"){Z(c,"bake").spatialChunkSize=Gt(r,16);return}if(t==="shadows.staticProjected.bake.targetChunkCount"){Z(c,"bake").targetChunkCount=Gt(r,64);return}let d=Z(i,"planar");if(t==="shadows.planar.enabled"){d.enabled=r===!0;return}if(t==="shadows.planar.appearance.color"){let u=Z(d,"appearance"),l=kr(te(u.color),{r:0,g:0,b:0,a:.35}),m=te(r);u.color={r:Ye(m.r,l.r,0,1),g:Ye(m.g,l.g,0,1),b:Ye(m.b,l.b,0,1),a:Ye(m.a,l.a,0,1)};return}if(t==="shadows.planar.appearance.color.a"){let u=Z(d,"appearance"),l=kr(te(u.color),{r:0,g:0,b:0,a:.35});u.color={...l,a:Ye(r,l.a,0,1)};return}if(t==="shadows.planar.plane.height"){Z(d,"plane").height=Je(r,0);return}if(t==="shadows.planar.plane.bias"){Z(d,"plane").bias=Ie(r,.4);return}if(t==="shadows.planar.projection.footprintScale"){Z(d,"projection").footprintScale=Ye(r,1,0,2);return}if(t==="shadows.planar.stencil.enabled"){Z(d,"stencil").enabled=r===!0;return}if(t==="shadows.planar.casters.excludePatterns"){Z(d,"casters").excludePatterns=jr(r);return}if(t==="shadows.planar.casters.rootBoundaryPatterns"){Z(d,"casters").rootBoundaryPatterns=jr(r);return}t==="shadows.planar.receivers.patterns"&&(Z(d,"receivers").patterns=jr(r))}function nQ(e,t,r){let n="globalVolume.environment.texture.textureAssetId",o="globalVolume.environment.texture.url",a=Object.prototype.hasOwnProperty.call(t,n),i=Object.prototype.hasOwnProperty.call(t,o);if(!a&&!i)return;let s=a&&typeof t[n]=="string"?t[n].trim():"",c=i&&typeof t[o]=="string"?t[o].trim():"",d=s?n:c?o:a?n:o;JN(e,d,d===n?s:c),r.push(d)}function oQ(e){return e==="globalVolume.environment.texture.textureAssetId"||e==="globalVolume.environment.texture.url"}function aQ(e,t){if(t!=="globalVolume.environment.iblIntensity"&&t!=="globalVolume.environment.rotationY")return!1;let r=te(e.globalVolume),n=te(r.environment),o=te(n.texture);return!na(o.textureAssetId,"")&&!na(o.url,"")}function KN(e){delete e.iblIntensity,delete e.rotationY}function iQ(e){let t=new Map(qN.map((r,n)=>[r,n]));return e.map((r,n)=>({path:r,index:n})).sort((r,n)=>{let o=t.get(r.path),a=t.get(n.path);return o!==void 0&&a!==void 0?o-a:o!==void 0?-1:a!==void 0?1:r.index-n.index}).map(r=>r.path)}function sQ(e){return!e||typeof e!="object"||Array.isArray(e)?{}:JSON.parse(JSON.stringify(e))}function Z(e,t){let r=e[t];if(!r||typeof r!="object"||Array.isArray(r)){let n={};return e[t]=n,n}return r}function cQ(e){let t=Wu(e.renderingGroups),r=JSON.parse(JSON.stringify(t));return e.renderingGroups=r,r}function WN(e,t){let r=cQ(e);return r.slots.find(n=>n.renderingGroupId===t)??r.slots[t]}function XN(e){let t=e.match(/^renderingGroups\.slots\.(0|1|2|3)\.name$/);return t?{renderingGroupId:Number(t[1])}:null}function QN(e){let t=e.match(/^renderingGroups\.slots\.(0|1|2|3)\.alphaIndexPresets\.(\d+)\.(name|alphaIndex)$/);return t?{renderingGroupId:Number(t[1]),presetIndex:Number(t[2]),field:t[3]}:null}var dQ=new WeakMap;function ph(e){return dQ.get(e)??null}import{performance as LT}from"node:perf_hooks";var eG=1,$T=["prepare","compile","validate","stringify","write","checkpoint"];function Eu(){let e=[],t=(r,n,o)=>{let a=process.memoryUsage();e.push({phase:r,durationMs:FT(LT.now()-n),rssBeforeBytes:o.rss,rssAfterBytes:a.rss,maxObservedRssBytes:Math.max(o.rss,a.rss),heapUsedBeforeBytes:o.heapUsed,heapUsedAfterBytes:a.heapUsed,maxObservedHeapUsedBytes:Math.max(o.heapUsed,a.heapUsed)})};return{measure(r,n){let o=process.memoryUsage(),a=LT.now();try{return n()}finally{t(r,a,o)}},async measureAsync(r,n){let o=process.memoryUsage(),a=LT.now();try{return await n()}finally{t(r,a,o)}},snapshot(){return BT(e)}}}function Tu(...e){let t=e.flatMap(r=>r?.phases??[]);return t.length>0?BT(t):null}function Au(e){if(!ZN(e)||e.schemaVersion!==eG||!Array.isArray(e.phases)||e.phases.length>$T.length)return null;let t=[];for(let r of e.phases){if(!ZN(r)||!lQ(r.phase)||!ys(r.durationMs)||!ys(r.rssBeforeBytes)||!ys(r.rssAfterBytes)||!ys(r.maxObservedRssBytes)||!ys(r.heapUsedBeforeBytes)||!ys(r.heapUsedAfterBytes)||!ys(r.maxObservedHeapUsedBytes))return null;t.push({phase:r.phase,durationMs:r.durationMs,rssBeforeBytes:r.rssBeforeBytes,rssAfterBytes:r.rssAfterBytes,maxObservedRssBytes:r.maxObservedRssBytes,heapUsedBeforeBytes:r.heapUsedBeforeBytes,heapUsedAfterBytes:r.heapUsedAfterBytes,maxObservedHeapUsedBytes:r.maxObservedHeapUsedBytes})}return BT(t)}function BT(e){let t=new Map;for(let n of e){let o=t.get(n.phase);if(!o){t.set(n.phase,{...n});continue}o.durationMs=FT(o.durationMs+n.durationMs),o.rssAfterBytes=n.rssAfterBytes,o.maxObservedRssBytes=Math.max(o.maxObservedRssBytes,n.maxObservedRssBytes),o.heapUsedAfterBytes=n.heapUsedAfterBytes,o.maxObservedHeapUsedBytes=Math.max(o.maxObservedHeapUsedBytes,n.maxObservedHeapUsedBytes)}let r=$T.flatMap(n=>{let o=t.get(n);return o?[o]:[]});return{schemaVersion:eG,measuredDurationMs:FT(r.reduce((n,o)=>n+o.durationMs,0)),maxObservedRssBytes:r.reduce((n,o)=>Math.max(n,o.maxObservedRssBytes),0),maxObservedHeapUsedBytes:r.reduce((n,o)=>Math.max(n,o.maxObservedHeapUsedBytes),0),phases:r}}function lQ(e){return typeof e=="string"&&$T.includes(e)}function ys(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0}function ZN(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function FT(e){return Math.round(Math.max(0,e)*1e3)/1e3}import{createHash as aG,randomUUID as uQ}from"node:crypto";import{chmod as mQ,lstat as pQ,mkdir as ed,open as iG,readFile as fQ,realpath as Zc,rm as sG,stat as gQ}from"node:fs/promises";import Qt from"node:path";var VT="application/vnd.fps-editor.asset-source-bundle-v1",hQ=128,bQ=256*1024*1024,yQ=512*1024*1024,SQ=5*60*1e3,tG=16*1024*1024,rG=1e3,IQ=3e4;async function cG(e,t){try{return await t}catch(r){throw await e.dispose().catch(()=>{}),r}}var tn=class extends Error{constructor(t,r,n){super(r),this.name="EditorAssetSourceGrantError",this.code=t,this.details=n}};async function UT(e){let t=await Zc(e.projectRoot);if(!/^[A-Za-z0-9._-]+$/.test(e.serviceInstanceId))throw Ee("asset.sourceServiceIdentityInvalid","Asset source service identity is not a safe path segment.");let r=await EQ(t),n=Qt.join(r,e.serviceInstanceId);await ed(n,{recursive:!1,mode:448});let o=e.now??Date.now,a=e.remove??sG,i=e.grantTtlMs??SQ;if(!Number.isSafeInteger(i)||i<1)throw await a(n,{recursive:!0,force:!0}),Ee("asset.sourceGrantTtlInvalid","Asset source grant TTL must be a positive integer.");let s=new Map,c=!1,d=!1,u=null,l=null,m=rG;async function p(P){A(),await f();let C=new zT(P),S=(await C.readExact(4)).readUInt32BE(0);if(S<2||S>64*1024)throw Ee("asset.sourceManifestInvalid","Asset source manifest length is invalid.");let w;try{w=AQ(JSON.parse((await C.readExact(S)).toString("utf8")))}catch(B){throw B instanceof tn?B:Ee("asset.sourceManifestInvalid","Asset source manifest is not valid JSON.")}let M=uQ(),_=Qt.join(n,M);await ed(_,{recursive:!1,mode:448});try{for(let Oe of w.files){let ze=Qt.resolve(_,...Oe.path.split("/"));Ss(_,ze,"asset_source_path_escape"),await ed(Qt.dirname(ze),{recursive:!0,mode:448});let Cr=await iG(ze,"wx",384),Dt=aG("sha256"),nt=Oe.byteSize;try{for(;nt>0;){let He=await C.readChunk(Math.min(nt,65536));if(He.length===0)throw Ee("asset.sourceUploadTruncated","Asset source upload ended before all declared bytes were received.");let jn=0;for(;jn<He.length;){let{bytesWritten:Q}=await Cr.write(He,jn);if(Q<1)throw Ee("asset.sourceUploadWriteFailed","Asset source upload could not be persisted.");jn+=Q}Dt.update(He),nt-=He.length}}finally{await Cr.close()}if(`sha256:${Dt.digest("hex")}`!==Oe.contentHash)throw Ee("asset.sourceHashMismatch","Asset source content hash does not match the declared manifest.",{file:Oe.path})}if((await C.readChunk(1)).length!==0)throw Ee("asset.sourceUploadTrailingBytes","Asset source upload contains undeclared trailing bytes.");let B=Qt.resolve(_,...w.primaryPath.split("/"));await PQ(B,_);let re=w.files.find(Oe=>Oe.path===w.primaryPath),U=o()+i,Be=Object.freeze({sourceGrantId:M,primaryPath:B,bundleRoot:_,contentHash:TQ(w),byteSize:re.byteSize,fileCount:w.files.length,totalByteSize:w.files.reduce((Oe,ze)=>Oe+ze.byteSize,0),expiresAt:new Date(U).toISOString()});return s.set(M,Be),D(),MQ(Be)}catch(B){throw await a(_,{recursive:!0,force:!0}),B}}async function h(P,C){A(),await f();let E=s.get(P);if(!E)throw Ee("asset.sourceGrantNotFound","Asset source grant is missing, expired, or already consumed.");s.delete(P),D();try{return await C(E)}finally{await a(E.bundleRoot,{recursive:!0,force:!0})}}async function g(P){A(),await f();let C=s.get(P);return C?(await a(C.bundleRoot,{recursive:!0,force:!0}),s.delete(P),D(),!0):!1}async function f(){let P=o(),C=[...s.values()].filter(E=>Date.parse(E.expiresAt)<=P);for(let E of C)await a(E.bundleRoot,{recursive:!0,force:!0}),s.delete(E.sourceGrantId);m=rG,D()}function y(){return c?Promise.resolve():u||(d=!0,T(),u=(async()=>{try{await a(n,{recursive:!0,force:!0}),s.clear(),c=!0}finally{d=!1,c||(u=null,D())}})(),u)}function A(){if(c||d)throw Ee("asset.sourceGrantStoreDisposed","Asset source grant store is disposed.")}function T(){l&&clearTimeout(l),l=null}function D(P=0){if(T(),c||d||s.size===0)return;let C=Math.min(...[...s.values()].map(E=>Date.parse(E.expiresAt)));l=setTimeout(async()=>{l=null;try{await f()}catch{let E=m;m=Math.min(m*2,IQ),D(E)}},Math.max(P,C-o(),0)),l.unref?.()}return Object.freeze({acceptUpload:p,consume:h,revoke:g,dispose:y})}async function EQ(e){let t=Qt.join(e,".fps-editor");await ed(t,{recursive:!0,mode:448});let r=await Zc(t);Ss(e,r,"asset_source_root_outside_project");let n=Qt.join(r,"state");await ed(n,{recursive:!0,mode:448});let o=await Zc(n);Ss(e,o,"asset_source_root_outside_project");let a=Qt.join(o,"asset-source-grants");try{if((await pQ(a)).isSymbolicLink())throw Ee("asset_source_root_outside_project","Asset source staging root must not be a symbolic link.");let c=await Zc(a);Ss(o,c,"asset_source_root_outside_project"),await sG(c,{recursive:!0,force:!0})}catch(s){if(s instanceof tn||!DQ(s)||s.code!=="ENOENT")throw s}await ed(a,{recursive:!1,mode:448}),await mQ(a,448);let i=await Zc(a);return Ss(o,i,"asset_source_root_outside_project"),i}function TQ(e){let t=aG("sha256").update("fps-editor-asset-source-bundle-v1\0");for(let r of[...e.files].sort((n,o)=>n.path.localeCompare(o.path)))t.update(r.path).update("\0").update(String(r.byteSize)).update("\0").update(r.contentHash).update("\0");return`sha256:${t.digest("hex")}`}function AQ(e){if(!e||typeof e!="object"||Array.isArray(e))throw Ee("asset.sourceManifestInvalid","Asset source manifest must be an object.");let t=e;if(t.schemaVersion!==1||typeof t.primaryPath!="string"||!Array.isArray(t.files))throw Ee("asset.sourceManifestInvalid","Asset source manifest schema is invalid.");if(t.files.length<1||t.files.length>hQ)throw Ee("asset.sourceFileCountExceeded","Asset source bundle file count is outside the supported range.");let r=t.files.map(a=>{if(!a||typeof a!="object"||Array.isArray(a))throw Ee("asset.sourceManifestInvalid","Asset source file entry is invalid.");let i=a,s=nG(i.path);if(!Number.isSafeInteger(i.byteSize)||Number(i.byteSize)<1||Number(i.byteSize)>bQ)throw Ee("asset.sourceFileSizeExceeded","Asset source file size is outside the supported range.",{file:s});if(typeof i.contentHash!="string"||!/^sha256:[a-f0-9]{64}$/.test(i.contentHash))throw Ee("asset.sourceManifestInvalid","Asset source file hash must be a lowercase SHA-256 digest.",{file:s});return{path:s,byteSize:Number(i.byteSize),contentHash:i.contentHash}});if(r.reduce((a,i)=>a+i.byteSize,0)>yQ)throw Ee("asset.sourceBundleSizeExceeded","Asset source bundle exceeds the total upload limit.");if(new Set(r.map(a=>a.path)).size!==r.length)throw Ee("asset.sourceManifestInvalid","Asset source bundle contains duplicate paths.");let o=nG(t.primaryPath);if(!r.some(a=>a.path===o))throw Ee("asset.sourceManifestInvalid","Asset source primary file is not present in the bundle.");return{schemaVersion:1,primaryPath:o,files:r}}function nG(e){if(typeof e!="string"||!e||e.length>512||e.includes("\\")||e.includes("\0"))throw Ee("asset.sourcePathInvalid","Asset source bundle path is invalid.");if(Qt.posix.isAbsolute(e))throw Ee("asset.sourcePathInvalid","Asset source bundle paths must be relative.");let t=e.split("/");if(t.some(r=>!r||r==="."||r===".."))throw Ee("asset.sourcePathInvalid","Asset source bundle path contains an unsafe segment.");return t.join("/")}async function PQ(e,t){let r=Qt.extname(e).toLowerCase();if(![".glb",".gltf",".png",".jpg",".jpeg",".env"].includes(r))throw Ee("asset.sourceUnsupportedFormat","Asset source format is not supported.");let n=await gQ(e),o=await oG(e,Math.min(n.size,20));if(r===".png"&&!o.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])))throw Ee("asset.sourceSignatureInvalid","PNG source signature is invalid.");if((r===".jpg"||r===".jpeg")&&!(o[0]===255&&o[1]===216&&o[2]===255))throw Ee("asset.sourceSignatureInvalid","JPEG source signature is invalid.");if(r===".env"&&!(o[0]===134&&o[1]===22))throw Ee("asset.sourceSignatureInvalid","Babylon environment source signature is invalid.");if(r===".glb"){if(o.length<20||o.toString("utf8",0,4)!=="glTF"||o.readUInt32LE(4)!==2||o.readUInt32LE(8)!==n.size)throw Ee("asset.sourceSignatureInvalid","GLB source header is invalid.");let a=o.readUInt32LE(12);if(o.readUInt32LE(16)!==1313821514||a>tG||20+a>n.size)throw Ee("asset.sourceSignatureInvalid","GLB source JSON chunk is missing or truncated.");try{let s=await oG(e,a,20),c=JSON.parse(s.toString("utf8").replace(/[\0 ]+$/g,"")),d=Qc(Qc(c)?.asset);if(typeof d?.version!="string"||!d.version.startsWith("2"))throw new Error("asset missing");xQ(Qc(c))}catch(s){throw s instanceof tn?s:Ee("asset.sourceSignatureInvalid","GLB source JSON chunk is invalid.")}}if(r===".gltf"){if(n.size>tG)throw Ee("asset.sourceFileSizeExceeded","glTF JSON source exceeds the 16 MiB validation limit.");let a;try{a=JSON.parse(await fQ(e,"utf8"))}catch{throw Ee("asset.sourceSignatureInvalid","glTF source is not valid JSON.")}let i=Qc(a.asset);if(typeof i?.version!="string"||!i.version.startsWith("2"))throw Ee("asset.sourceSignatureInvalid","glTF source must declare asset version 2.");let s=[...Array.isArray(a.buffers)?a.buffers:[],...Array.isArray(a.images)?a.images:[]];for(let c of s){let d=Qc(c)?.uri;if(typeof d!="string"||d.startsWith("data:"))continue;if(/^[a-z][a-z0-9+.-]*:/i.test(d)||d.startsWith("//"))throw Ee("asset.sourceDependencyInvalid","glTF source contains a non-local dependency URI.");let u;try{u=decodeURIComponent(d.split(/[?#]/,1)[0])}catch{throw Ee("asset.sourceDependencyInvalid","glTF dependency URI is malformed.")}let l=Qt.resolve(Qt.dirname(e),...u.split("/"));Ss(t,l,"asset_source_dependency_escape");try{let m=await Zc(l);Ss(t,m,"asset_source_dependency_escape")}catch(m){throw m instanceof tn?m:Ee("asset.sourceDependencyMissing","glTF source dependency is missing.",{dependency:u})}}}}function xQ(e){let t=[...Array.isArray(e.buffers)?e.buffers:[],...Array.isArray(e.images)?e.images:[]];for(let r of t){let n=Qc(r)?.uri;if(typeof n=="string"&&!n.startsWith("data:"))throw Ee("asset.sourceDependencyInvalid","GLB source must embed binary and image dependencies.")}}async function oG(e,t,r=0){let n=await iG(e,"r");try{let o=Buffer.allocUnsafe(t),{bytesRead:a}=await n.read(o,0,t,r);return o.subarray(0,a)}finally{await n.close()}}function Qc(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function Ss(e,t,r){let n=Qt.relative(e,t);if(!n||n===".."||n.startsWith(`..${Qt.sep}`)||Qt.isAbsolute(n))throw Ee(r,"Asset source path escapes its owned staging root.")}function MQ(e){return{sourceGrantId:e.sourceGrantId,contentHash:e.contentHash,byteSize:e.byteSize,fileCount:e.fileCount,totalByteSize:e.totalByteSize,expiresAt:e.expiresAt}}function Ee(e,t,r){return new tn(e,t,r)}function DQ(e){return e instanceof Error&&typeof e.code=="string"}var zT=class{constructor(t){this.buffered=Buffer.alloc(0),this.done=!1,this.iterator=t[Symbol.asyncIterator]()}async readExact(t){let r=[],n=t;for(;n>0;){let o=await this.readChunk(n);if(o.length===0)throw Ee("asset.sourceUploadTruncated","Asset source upload ended before its manifest was complete.");r.push(o),n-=o.length}return r.length===1?r[0]:Buffer.concat(r,t)}async readChunk(t){if(t<=0)return Buffer.alloc(0);for(;this.buffered.length===0&&!this.done;){let n=await this.iterator.next();this.done=!!n.done,n.done||(this.buffered=Buffer.from(n.value))}if(this.buffered.length===0)return Buffer.alloc(0);let r=this.buffered.subarray(0,t);return this.buffered=this.buffered.subarray(r.length),r}};var CQ="__project_rendering_profile__",hh="__fpsEditorRenderingProfile",wQ=4;async function mG(e){let t=e.backend??(e.server?ph(e.server):null);if(!t&&e.project)throw new Error("Project Editor Service requires a project authoring backend.");let r=await _Q(e),n=qw({persistedDocument:r.savedDocument,workingDocument:r.workingDocument,initialDocumentRevision:r.documentRevision,initialDocumentStructureRevision:r.documentStructureRevision,historyDocumentStorage:"immutable-reference",cloneResultDocumentsByDefault:!1,reduceDocument(p,h){return h.type==="document.replace"?h.document:h.patch?.kind==="replace"?h.patch.document:p},isDocumentStructureChange:p=>p.type==="document.replace"||p.type==="document.patch"}),o=M_(),a=null,i=S_({serviceInstanceId:e.serviceInstanceId,session:n,initialDraftRevision:r.draftRevision,initialSavedRevision:r.savedRevision,commandSystemOptions:{onOperationSettled:p=>o.recordOperation(p)}}),s=[],c=new Map,d=new Map,u=new Map,l=r.persistence?{...r.persistence}:null,m=NQ(e.materialShaderDefinitions,e.sceneAssembly);try{s.push($N({host:i,listAssets:async p=>dG(t,p),sceneAssembly:m,materialShaderDefinitions:e.materialShaderDefinitions})),s.push(LQ(i,p=>dG(t,p),m)),s.push(GQ(i,()=>t,e.assetSourceGrants)),s.push(YQ(i,(p,h)=>a?a(p,h):Promise.resolve(ye(h==="renderer"?"renderer.sessionUnavailable":"view.sessionUnavailable",`Command requires a Browser attachment: ${p.commandId}`)))),s.push(BQ(i,e,()=>t,c,d,u,p=>{l=p},e.onDocumentCommitted))}catch(p){for(let h of s.splice(0).reverse())h();throw i.dispose(),await i.drain(),p}return Object.freeze({host:i,authoringCommands:vQ(i),readTraces:o.read,recordOperation:o.recordOperation,readDocumentExport(p){let h=c.get(p);if(!h)return null;let{document:g,performanceProfile:f,...y}=h;return y},discardDocumentExport(p){return d.delete(p),c.delete(p)},readAuthoringPersistence(){return l?{...l}:null},bindBrowserCommandForwarder(p){if(a)throw new Error("Browser command forwarder is already bound.");a=p;let h=!0;return()=>{h&&(h=!1,a===p&&(a=null))}},rebindViteServer(p){t=ph(p)},rebindProjectAuthoringBackend(p){t=p},async dispose(){a=null,c.clear(),d.clear(),u.clear();for(let p of s.splice(0).reverse())p();i.dispose(),await i.drain(),o.clear()}})}function vQ(e){return Object.freeze({listManifests(){return e.commandSystem.listManifests().filter(t=>t.target==="authoring")},execute(t){let r=e.commandSystem.listManifests().find(n=>n.id===t.commandId);if(!r||r.target!=="authoring")throw new Error(`Project Service authoring command is not registered: ${t.commandId}`);return e.execute(t)}})}async function _Q(e){if(e.recovery){let n=mo(e,e.recovery.workingDocument),o=mo(e,e.recovery.savedDocument);return{workingDocument:n,savedDocument:o,documentRevision:fh(e.recovery.documentRevision,"documentRevision"),documentStructureRevision:fh(e.recovery.documentStructureRevision,"documentStructureRevision"),...e.recovery.draftRevision!==void 0?{draftRevision:fh(e.recovery.draftRevision,"draftRevision")}:{},...e.recovery.savedRevision!==void 0?{savedRevision:fh(e.recovery.savedRevision,"savedRevision")}:{},...e.recovery.persistence?{persistence:{...e.recovery.persistence}}:{}}}let t=e.backend??(e.server?ph(e.server):null);if(t){let n=await t.loadEditorScene(),o=mo(e,XT(n)),a=mh(n).rendering??(Or(n.renderingConfig)?n.renderingConfig:null),i=a?tA(o,a):o;return{workingDocument:i,savedDocument:i,documentRevision:0,documentStructureRevision:0,draftRevision:0,savedRevision:0,...Ou(n)?{persistence:Ou(n)}:{}}}let r=e.project?.source.editorScene??"src/config/editor-scene.json";try{let n=await OQ(RQ.resolve(e.projectRoot,r),"utf8"),o=mo(e,JSON.parse(n));return{workingDocument:o,savedDocument:o,documentRevision:0,documentStructureRevision:0,draftRevision:0,savedRevision:0}}catch(n){if(e.project)throw n;let o=mo(e,{schemaVersion:1,assets:[],scene:{gameObjects:[]}});return{workingDocument:o,savedDocument:o,documentRevision:0,documentStructureRevision:0,draftRevision:0,savedRevision:0}}}function fh(e,t){if(!Number.isSafeInteger(e)||e<0)throw new Error(`Editor Service recovery ${t} must be a non-negative safe integer.`);return e}function mo(e,t){let r=Ru(t),n=e.prepareAuthoringDocument?.(r)??r;return Ru(n,!1)}function HT(e,t){let r=HQ(structuredClone(t)),n=e.preparePersistedDocument?e.preparePersistedDocument(r):r;return Ru(n,!1)}function XT(e){return Object.prototype.hasOwnProperty.call(e,"editorScene")?e.editorScene:e}function Ru(e,t=!0){if(!e||typeof e!="object"||Array.isArray(e))throw new Error("Project Editor Service expected the editor scene to be a JSON object.");let r=t?structuredClone(e):e,n=r.scene;if(!n||typeof n!="object"||Array.isArray(n))throw new Error("Project Editor Service expected scene.gameObjects.");let o=n.gameObjects;if(!Array.isArray(o))throw new Error("Project Editor Service expected scene.gameObjects to be an array.");return Array.isArray(r.assets)?r:{...r,assets:[]}}async function dG(e,t){let r=e?await e.listEditorAssets():t.assets,n=(Array.isArray(r)?r:[]).map((i,s)=>kQ(i,s)).filter(i=>i!==null),o=new Set(n.map(i=>i.assetId)),a=gN(t,n).filter(i=>!o.has(i.assetId));return[...n,...a]}function kQ(e,t){if(!e||typeof e!="object"||Array.isArray(e))return null;let r=e,n=ue(r.assetId)??ue(r.id);return n?{...r,id:ue(r.id)??n,assetId:n,type:ue(r.type)??"glb",kind:ue(r.kind)??"model",displayName:ue(r.displayName)??ue(r.label)??n,origin:ue(r.origin)??"project",dedupeKey:ue(r.dedupeKey)??`project:${n}:${t}`,placeable:us(r)}:null}function jQ(e){return{getHierarchyItems(t){return Qo(t)},getMarkerTypeCatalog(t){return[]},getInspectorObject(t,r){let n=t.scene.gameObjects.find(i=>i.id===r);if(!n)return null;let o=It(n),a=WE({document:t,gameObject:n,nodeKind:o});return a.push(...pN.createArtistMaterialInspectorSectionsWithCachedUsage(t,n,o,{},{createDocumentInspectorProperty:(i,s,c)=>nu({document:i,nodeKind:s,property:c})})),{targetIds:[n.id],activeId:n.id,label:n.name??n.id,document:t,selection:{targetIds:[n.id],activeId:n.id,scopeType:"scene",targetKind:o,document:t},sections:a}},createRenamePatch(t,r){return Pu(t,JE(t,r))},createCreateGroupPatch(t,r){return Pu(t,XE(t,r))},createCreatePrimitivePatch(t,r){let n=r.objectId?.trim(),o=n??tZ(t,`primitive_${r.shape}`);if(r.objectId!==void 0&&!n||r.objectId!==void 0&&r.objectId!==n||n&&Kc(n)!==n||t.scene.gameObjects.some(c=>c.id===o))return null;let a=r.parentId??Jt(t),i=eZ(o,r.name??nZ(r.shape),a);return i.kind="primitive",i.primitive={shape:r.shape},i.shadow={cast:"none",receive:"none"},{patch:{kind:"replace",document:{...t,scene:{...t.scene,gameObjects:[...t.scene.gameObjects,i]}}},label:`Create ${r.shape}`,changedIds:[o],createdId:o,selectId:o}},createDeleteSubtreePatch(t,r){if(r.ids.some(Et))return null;let n=en(t,r.ids);if(n.size===0||t.scene.gameObjects.some(i=>n.has(i.id)&&qo(i)))return null;let o=[...n];return{patch:{kind:"replace",document:{...t,scene:{...t.scene,gameObjects:t.scene.gameObjects.filter(i=>!n.has(i.id))}}},label:`Delete ${o.length} object(s)`,changedIds:o,deletedIds:o}},validateGroupSelection(t,r){return $g(t,r)},createGroupSelectionPatch(t,r){return Pu(t,ZE(t,r))},createDuplicateSelectionPatch(t){return Pu(t.document,eT(t))},validateHierarchyMove(t,r){return Fg(t,r)},createHierarchyMovePatch(t,r){return Pu(t,QE(t,r))},patchGameObjectField(t,r,n,o){return ls(t,r,n,o)},patchGameObjectPropertiesMany(t,r){return bT(t,r)},patchGameObjectTransform(t,r,n){return gs(t,r,{transform:n})},addAssetLibraryItemToDocument(t,r,n){return cu(t,r,n)},createSceneMaterialBindingPatch(t){let r=t.document;if(t.targets.length===0||t.materialAssetId&&!me(r,t.materialAssetId))return null;let n=new Set,o=r;for(let i of t.targets){let s=`${i.objectId}\0${i.path}`,c=o.scene.gameObjects.find(l=>l.id===i.objectId);if(n.has(s)||!c||!Ga(i.path))return null;n.add(s);let d=Qr(o,c),u=ur(i.path,"materialAssetId");if(u&&!d.some(l=>l.slotId===u)||!u&&d.length>0)return null;o=Aj(o,i.objectId,i.path,t.materialAssetId)}let a=[...new Set(t.targets.map(i=>i.objectId))];return{patch:{kind:"replace",document:o},label:`${t.materialAssetId?"Set":"Clear"} ${t.targets.length} scene material binding${t.targets.length===1?"":"s"}`,changedIds:a,reprojectIds:a,presentationImpact:UN(t.document,t.targets,t.materialAssetId)}},createPrefabMaterialBindingPatch(t){let r=t.document;if(t.targets.length===0||t.materialAssetId&&!me(r,t.materialAssetId)||new Set(t.targets.map(d=>d.prefabAssetId)).size!==1)return null;let o=t.targets[0].prefabAssetId,a=Zr(t.document,o);if(!a?.prefab)return null;let i=structuredClone(a),s=new Set;for(let d of t.targets){let u=`${d.nodeId??""}\0${d.path}`,l=`prefab.${d.path}`,m=eh(l,t.materialAssetId);if(s.has(u)||!Ga(d.path)||!th(l,m))return null;if(s.add(u),!d.nodeId){i=tu(i,l,m);continue}let p=i.prefab?.nodes?.findIndex(A=>A.id===d.nodeId)??-1;if(p<0||!i.prefab?.nodes)return null;let h=i.prefab.nodes[p],g={...i,prefab:{...i.prefab,overrides:structuredClone(h.overrides)}},f=tu(g,l,m),y={...h,...f.prefab?.overrides?{overrides:structuredClone(f.prefab.overrides)}:{}};f.prefab?.overrides||delete y.overrides,i.prefab.nodes=[...i.prefab.nodes],i.prefab.nodes[p]=y}return{patch:{kind:"replace",document:rh(t.document,o,i)},label:`${t.materialAssetId?"Set":"Clear"} ${t.targets.length} prefab material binding${t.targets.length===1?"":"s"}`,changedId:o,changedIds:[o],reprojectIds:[o],presentationImpact:HN(t.document,t.targets,t.materialAssetId)}},createMaterialPropertiesPatch(t){let r=t.document,n=me(r,t.materialAssetId);if(t.changes.length===0||!n)return null;let o=new Set,a=r;for(let s of t.changes){let c=fT(s.path,s.value,n.shaderId,e);if(!s.path.startsWith("properties.")||o.has(s.path)||!c.ok)return null;o.add(s.path),a=qg(a,t.materialAssetId,s.path,c.value,e)}let i=os(r,t.materialAssetId);return{patch:{kind:"replace",document:a},label:`Patch material ${t.materialAssetId} properties`,changedIds:i,reprojectIds:i}},createMaterialAssetCreatePatch(t){let r=t.document,n=cT(r,t.definition,t.name),o=structuredClone(r);return o.scene.materialAssets=[...o.scene.materialAssets??[],n],{patch:{kind:"replace",document:o},label:`Create material ${n.name}`,changedIds:[],createdId:n.id}},createMaterialAssetDuplicatePatch(t){let r=me(t.document,t.materialAssetId);if(!r)return null;let n=Yc(t.document,r),o=structuredClone(t.document);return o.scene.materialAssets=[...o.scene.materialAssets??[],n],{patch:{kind:"replace",document:o},label:`Duplicate material ${r.name??r.id}`,changedIds:[],createdId:n.id,presentationImpact:{inspector:["material"],materials:{assetIds:[n.id]}}}},createMaterialAssetDeletePatch(t){let r=me(t.document,t.materialAssetId);if(!r||fs(r))return null;let n=mT(t.document,t.materialAssetId);return n===t.document?null:{patch:{kind:"replace",document:n},label:`Delete material ${r.name??r.id}`,changedIds:[],presentationImpact:{inspector:["material"],materials:{assetIds:[t.materialAssetId]}}}},createMaterialAssetRenamePatch(t){let r=t.document,n=me(r,t.materialAssetId);if(!n||fs(n))return null;let o=fT("name",t.name,n.shaderId,e);return o.ok?{patch:{kind:"replace",document:qg(r,t.materialAssetId,"name",o.value,e)},label:`Rename material ${n.name} to ${String(o.value)}`,changedIds:os(r,t.materialAssetId),presentationImpact:{inspector:["material"],materials:{assetIds:[t.materialAssetId]}}}:null},createMaterialAssetSetShaderPatch(t){let r=t.document,n=me(r,t.materialAssetId);if(!n||fs(n))return null;let o=xT(n,t.definition),a=structuredClone(r);a.scene.materialAssets=(a.scene.materialAssets??[]).map(s=>s.id===t.materialAssetId?o.materialAsset:s);let i=os(r,t.materialAssetId);return{patch:{kind:"replace",document:a},label:`Set material ${n.name} shader to ${t.definition.displayName}`,changedIds:i,reprojectIds:i,presentationImpact:{inspector:["material"],materials:{assetIds:[t.materialAssetId]}},preservedPaths:o.preservedPaths,resetPaths:o.resetPaths}}}}function Pu(e,t){if(!t)return null;let r=TT({document:e,patch:t.patch});return{...t,patch:{kind:"replace",document:r}}}function NQ(e,t){let r=jQ(e);return t?{...r,getHierarchyItems:t.getHierarchyItems.bind(t),getMarkerTypeCatalog:t.getMarkerTypeCatalog.bind(t),getInspectorObject:t.getInspectorObject.bind(t),patchGameObjectField:t.patchGameObjectField.bind(t),patchGameObjectPropertiesMany:t.patchGameObjectPropertiesMany.bind(t)}:r}function GQ(e,t,r){let n=[],o=(a,i)=>n.push(e.registerCommand({manifest:pG(a),handler:i}));try{o(b.ASSET_IMPORT,async a=>{let i=ue(a.sourceGrantId);if(!i)return ye("asset.sourceGrantRequired","Asset import requires sourceGrantId.");let s=t();if(!r||!s?.importEditorAsset)return ye("asset.importUnavailable","Project asset import is unavailable.");try{let c=await r.consume(i,l=>s.importEditorAsset({sourcePath:l.primaryPath,...ue(a.displayName)?{displayName:ue(a.displayName)}:{},...a.kind==="model"||a.kind==="texture"?{kind:a.kind}:{},...ue(a.category)?{category:ue(a.category)}:{},...typeof a.placeable=="boolean"?{placeable:a.placeable}:{}})),d=fu(c.asset),u=[...await s.listEditorAssets()].map(l=>gu(l));return{ok:!0,output:{asset:d,disposition:c.disposition,assetCatalogRevision:hu(0,u)}}}catch(c){return lG(c,"asset.importFailed","Asset import failed.")}}),o(b.ASSET_LIBRARY_REFRESH,async()=>{let a=t();if(!a?.refreshEditorAssets)return ye("asset.refreshUnavailable","Project asset refresh is unavailable.");try{let i=await a.refreshEditorAssets(),s=i.assets.map(l=>gu(l)),c=new Set(i.refreshedAssetIds),d=s.filter(l=>c.has(l.assetId)),u=d.slice(0,200);return{ok:!0,output:{scannedAssetCount:i.scannedAssetCount,refreshedAssets:u,totalCount:d.length,returnedCount:u.length,assetCatalogRevision:hu(0,s)}}}catch(i){return lG(i,"asset.refreshFailed","Asset library refresh failed.")}})}catch(a){for(let i of n.splice(0).reverse())i();throw a}return()=>{for(let a of n.splice(0).reverse())a()}}function lG(e,t,r){if(e instanceof tn)return ye(e.code,e.message);let n=e&&typeof e=="object"&&"message"in e&&typeof e.message=="string"&&/^[a-z][a-zA-Z0-9_.:-]{1,127}$/.test(e.message)?e.message:t;return ye(n,r)}function LQ(e,t,r){let n=[],o=(a,i)=>n.push(e.registerCommand({manifest:pG(a),handler:i}));try{o(b.PREFAB_ASSET_CREATE_FROM_ASSET,async(a,i)=>{let s=ue(a.assetId),c=vt(i),d=s?(await t(c)).find(l=>l.assetId===s||l.id===s)??null:null;if(!s||!d)return ye("prefab.sourceAssetNotFound",`Prefab source asset was not found: ${s??""}`);let u=lh({actionId:"asset.create-prefab",document:c,assetId:s,asset:d});return KT(i,c,u,"Create prefab from asset")}),o(b.PREFAB_ASSET_CREATE_FROM_OBJECT,(a,i)=>{let s=ue(a.objectId),c=vt(i);if(!s)return ye("prefab.objectIdRequired","Prefab creation from a Scene object requires objectId.");let d=lh({actionId:"asset.create-prefab-from-game-object",document:c,activeId:s});return KT(i,c,d,"Create prefab from object")}),o(b.PREFAB_ASSET_DUPLICATE,(a,i)=>{let s=ue(a.assetId),c=vt(i);if(!s)return ye("prefab.assetIdRequired","Prefab duplication requires assetId.");let d=lh({actionId:"asset.duplicate-prefab",document:c,assetId:s});return KT(i,c,d,"Duplicate prefab")}),o(b.PREFAB_DRAFT_COMMIT,(a,i)=>{let s=ue(a.assetId),d=Or(a.prefabAsset)?a.prefabAsset:null,u=vt(i),l=s?Zr(u,s):null;if(!s||!l||!d||d.id!==s||!xt(d))return ye("prefab.draftInvalid","Prefab Draft commit requires an existing prefab asset with matching identity.");let m={...l,...typeof d.displayName=="string"?{displayName:d.displayName}:{},prefab:structuredClone(d.prefab)},p=rh(u,s,m),h=p!==u;return h&&(i.dispatch({type:"document.replace",document:p,label:`Commit Prefab Draft ${s}`,projectionImpact:{type:"incremental"}}),i.captureAuthoringPatch({kind:"asset",operations:[{type:"upsert",assetId:s,before:structuredClone(l),after:structuredClone(m)}]})),{ok:!0,output:{assetId:s,changed:h}}}),o(b.PREFAB_ASSET_RENAME,(a,i)=>{let s=ue(a.assetId);if(!s)return ye("prefab.assetIdRequired","Headless prefab rename requires assetId.");let c=vt(i),d=Zr(c,s);if(!d)return ye("prefab.notFound",`Prefab asset was not found: ${s}`);let u=Zl(c,s,a.displayName),l=QT(u);return l||(u.changed&&(i.dispatch({type:"document.replace",document:rh(c,s,u.prefabAsset),label:`Rename prefab ${s}`,projectionImpact:{type:"incremental"}}),i.captureAuthoringPatch({kind:"asset",operations:[{type:"upsert",assetId:s,before:structuredClone(d),after:structuredClone(u.prefabAsset)}]})),{ok:!0,output:{assetId:s,previousDisplayName:d.displayName??d.id,displayName:u.prefabAsset.displayName??u.prefabAsset.id,stageActive:!1,renamed:u.changed}})}),o(b.PREFAB_NODE_CREATE_FROM_ASSET,(a,i)=>{let s=vt(i),c=Mu(s,{assetId:a.prefabAssetId}),d=ue(a.assetId),u=d?s.assets.find(l=>l.id===d):null;return!c||!u?ye("prefab.assetNotFound","Headless prefab node creation requires prefabAssetId and a valid assetId."):Ja(i,s,c.id,pg(c,u,{...ue(a.parentNodeId)?{parentId:ue(a.parentNodeId)}:{},...ue(a.name)?{name:ue(a.name)}:{},...ue(a.sourceNodePath)?{sourceNodePath:ue(a.sourceNodePath)}:{},...Xa(a)?{transform:Xa(a)}:{}}),"Create prefab node from asset")}),o(b.PREFAB_NODE_CREATE_GROUP,(a,i)=>{let s=vt(i),c=Mu(s,{assetId:a.prefabAssetId});return c?Ja(i,s,c.id,gg(c,{...ue(a.parentNodeId)?{parentId:ue(a.parentNodeId)}:{},...ue(a.name)?{name:ue(a.name)}:{},...Xa(a)?{transform:Xa(a)}:{}}),"Create prefab group"):ye("prefab.assetIdRequired","Headless prefab group creation requires prefabAssetId.")}),o(b.PREFAB_NODE_CREATE_MARKER,(a,i)=>{let s=vt(i),c=Mu(s,{assetId:a.prefabAssetId}),d=ue(a.type),u=d?r.getMarkerTypeCatalog(s).find(l=>l.type===d):null;return!c||!u?ye("prefab.invalidMarkerType","Headless prefab Marker creation requires a valid marker type."):Ja(i,s,c.id,hg(c,{markerType:u,...ue(a.parentNodeId)?{parentId:ue(a.parentNodeId)}:{},...ue(a.name)?{name:ue(a.name)}:{},...Xa(a)?{transform:Xa(a)}:{},...Array.isArray(a.tags)?{tags:a.tags.filter(l=>typeof l=="string")}:{},...typeof a.note=="string"?{note:a.note}:{},...Or(a.color)?{color:a.color}:{},...Or(a.target)?{target:a.target}:{}}),"Create prefab Marker")}),o(b.PREFAB_NODE_CREATE_PRIMITIVE,(a,i)=>{let s=vt(i),c=Mu(s,{assetId:a.prefabAssetId}),d=ue(a.shape);return!c||!d?ye("prefab.invalidInput","Headless prefab primitive creation requires prefabAssetId and shape."):Ja(i,s,c.id,fg(c,{shape:d,...ue(a.parentNodeId)?{parentId:ue(a.parentNodeId)}:{},...ue(a.name)?{name:ue(a.name)}:{},...Xa(a)?{transform:Xa(a)}:{}}),"Create prefab primitive")}),o(b.PREFAB_NODE_SET_MARKER,(a,i)=>{let s=xu(vt(i),a);if(!s.ok)return s.failure;let c=ue(a.type),d=c?r.getMarkerTypeCatalog(s.document).find(l=>l.type===c):void 0;if(c&&!d)return ye("prefab.invalidMarkerType","Headless prefab Marker editing requires a valid marker type.");let u={...d?{markerType:d}:{},...Object.prototype.hasOwnProperty.call(a,"target")?{target:a.target===null?null:a.target&&typeof a.target=="object"?a.target:void 0}:{},...Array.isArray(a.tags)?{tags:a.tags.filter(l=>typeof l=="string")}:{},...typeof a.note=="string"||a.note===null?{note:a.note}:{},...a.color===null?{color:null}:a.color&&typeof a.color=="object"?{color:a.color}:{}};return Ja(i,s.document,s.prefab.id,bg(s.prefab,s.node.id,u),"Set prefab Marker")}),o(b.PREFAB_NODE_SET_TRANSFORM,(a,i)=>{let s=xu(vt(i),a);if(!s.ok)return s.failure;let c=s.node.transform&&s.node.transform.mode!=="matrix"?s.node.transform:$Q(),d={type:"Transform",position:rd(a.position)??c.position,rotation:rd(a.rotation)??c.rotation,scale:rd(a.scale)??c.scale??{x:1,y:1,z:1}};return Ja(i,s.document,s.prefab.id,yg(s.prefab,s.node.id,d),"Set prefab node transform")}),o(b.PREFAB_NODE_REPARENT,(a,i)=>{let s=xu(vt(i),a),c=ue(a.parentNodeId);return s.ok?c?Ja(i,s.document,s.prefab.id,Sg(s.prefab,s.node.id,c),"Reparent prefab node"):ye("prefab.parentNotFound","Prefab parentNodeId is required."):s.failure}),o(b.PREFAB_NODE_RENAME,(a,i)=>{let s=xu(vt(i),a);if(!s.ok)return s.failure;let c=s.node.name??s.node.id,d=mg(s.prefab,s.node.id,a.name),u=QT(d);return u||(fG(i,s.document,d,"Rename prefab node"),{ok:!0,output:{nodeId:s.node.id,previousName:c,name:d.node?.name??c,selectedNodeId:d.selectedNodeId??s.node.id,nodes:Ct(d.prefabAsset).map(ZT)}})}),o(b.PREFAB_NODE_DELETE,(a,i)=>{let s=xu(vt(i),a);return s.ok?Ja(i,s.document,s.prefab.id,Ig(s.prefab,s.node.id),"Delete prefab node"):s.failure})}catch(a){for(let i of n.splice(0).reverse())i();throw a}return()=>{for(let a of n.splice(0).reverse())a()}}function pG(e){let t=Ac[e],r=Gl[e],n=jl[e];if(!t||!r)throw new Error(`Built-in Editor command contract is missing: ${e}`);let o=e===b.ASSET_IMPORT||e===b.ASSET_LIBRARY_REFRESH;return{schemaVersion:1,id:e,version:1,title:t.title,...Pc[e]?{description:Pc[e]}:{},target:t.target,access:t.access,stability:t.stability,inputSchema:r.inputSchema,outputSchema:r.outputSchema,requires:{editorReady:!0},effects:{persistence:o?"filesystem":t.access==="write"?"authoring":"none",undoable:o?!1:t.access==="write",idempotent:t.access==="read"||e===b.ASSET_LIBRARY_REFRESH},...!o&&t.target==="authoring"&&t.access==="write"?{transaction:{compatible:!0,sideEffects:"authoring",phase:"mutation"}}:{},presentation:{category:t.category,inputMode:Array.isArray(r.inputSchema.required)&&r.inputSchema.required.length?"schema-form":"none",...n?.aliases?{aliases:n.aliases}:{},...n?.keywords?{keywords:n.keywords}:{},...n?.examples?{examples:n.examples}:{},...n?.shortcut?{shortcut:n.shortcut}:{},...n?.menu?{menu:n.menu}:{}}}}function Mu(e,t){let r=ue(t.assetId);return r?Zr(e,r):null}function vt(e){return e.session.getState({cloneDocuments:!1}).workingDocument}function xu(e,t){let r=Mu(e,t);if(!r)return{ok:!1,failure:ye("prefab.assetIdRequired","Headless prefab node mutation requires assetId.")};let n=ue(t.nodeId),o=n?ug(r,n):null;return o?{ok:!0,document:e,prefab:r,node:o}:{ok:!1,failure:ye("prefab.nodeNotFound",`Prefab node was not found: ${n??""}`)}}function KT(e,t,r,n){let o=r?.patch,a=o?.prefabAsset;if(!a||!xt(a))return ye("prefab.assetCreationRejected",`${n} was rejected by the canonical Prefab reducer.`);let i=bN(t,a,o?.sourceAsset);if(i===t)return ye("prefab.assetAlreadyExists",`Prefab asset already exists: ${a.id}`);let s=i.assets.flatMap(c=>{let d=t.assets.find(u=>u.id===c.id)??null;return JSON.stringify(d)===JSON.stringify(c)?[]:[{type:"upsert",assetId:c.id,before:d?structuredClone(d):null,after:structuredClone(c)}]});return s.length===0?ye("prefab.assetCreationRejected",`${n} produced no canonical Asset changes.`):(e.dispatch({type:"document.replace",document:i,label:r?.label??n,projectionImpact:{type:"incremental"}}),e.captureAuthoringPatch({kind:"asset",operations:s}),{ok:!0,output:{assetId:a.id,displayName:a.displayName??a.id,...a.prefab?.sourceAssetId?{sourceAssetId:a.prefab.sourceAssetId}:{},created:!0}})}function Ja(e,t,r,n,o){let a=QT(n);return a||(fG(e,t,n,o),{ok:!0,output:{stage:FQ(n.prefabAsset,e.session.getState({cloneDocuments:!1}).dirty),changed:n.changed,...n.createdNodeId?{createdNodeId:n.createdNodeId}:{},...n.node?.id?{changedNodeId:n.node.id}:{},...n.deletedNodeIds?.length?{deletedNodeIds:n.deletedNodeIds}:{},selectedNodeId:n.selectedNodeId??n.node?.id??null,node:n.node?ZT(n.node):null,rootNodeId:Mt(n.prefabAsset)??"prefab-root",nodes:Ct(n.prefabAsset).map(ZT),status:n.changed?o:`${o}: unchanged`}})}function fG(e,t,r,n){if(!r.changed)return;let o=structuredClone(t),a=o.assets.findIndex(s=>s.id===r.prefabAsset.id);if(a<0)throw new Error(`Prefab asset disappeared during mutation: ${r.prefabAsset.id}`);let i=o.assets[a];o.assets[a]=r.prefabAsset,e.dispatch({type:"document.replace",document:o,label:n,projectionImpact:{type:"incremental"}}),e.captureAuthoringPatch({kind:"asset",operations:[{type:"upsert",assetId:r.prefabAsset.id,before:structuredClone(i),after:structuredClone(r.prefabAsset)}]})}function QT(e){let t=e.diagnostics.find(r=>r.severity==="error");return t?ye(t.code,t.message):null}function FQ(e,t){return{assetId:e.id,label:e.displayName??e.id,...e.prefab?.sourceAssetId?{sourceAssetId:e.prefab.sourceAssetId}:{},...e.prefab?.sourceAssetGuid?{sourceAssetGuid:e.prefab.sourceAssetGuid}:{},selectedItemId:null,readonly:!1,dirty:t,documentDirty:t,canSave:t,canDiscard:t}}function ZT(e){return{nodeId:e.id,...e.guid?{guid:e.guid}:{},...e.name?{name:e.name}:{},parentNodeId:e.parentId??null,kind:e.kind,...e.transform&&e.transform.mode!=="matrix"?{transform:{position:{...e.transform.position},rotation:{...e.transform.rotation},scale:{...e.transform.scale??{x:1,y:1,z:1}}}}:{},...e.sourceAssetId?{sourceAssetId:e.sourceAssetId}:{},...e.sourceNodePath?{sourceNodePath:e.sourceNodePath}:{},...e.childPrefabId?{childPrefabId:e.childPrefabId}:{},...e.primitive?{primitive:e.primitive}:{},...e.marker?{marker:e.marker}:{},...e.defaults?{defaults:e.defaults}:{},...e.overrides?{overrides:e.overrides}:{},readonly:!1,diagnostics:[]}}function Xa(e){let t=rd(e.position),r=rd(e.rotation),n=rd(e.scale);return!t&&!r&&!n?null:{type:"Transform",position:t??{x:0,y:0,z:0},rotation:r??{x:0,y:0,z:0},scale:n??{x:1,y:1,z:1}}}function rd(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let t=e;return typeof t.x=="number"&&typeof t.y=="number"&&typeof t.z=="number"?{x:t.x,y:t.y,z:t.z}:null}function $Q(){return{type:"Transform",position:{x:0,y:0,z:0},rotation:{x:0,y:0,z:0},scale:{x:1,y:1,z:1}}}function BQ(e,t,r,n,o,a,i,s){let c=[],d=Is(e.getSnapshot().document),u=0,l=0,m=(p,h,g)=>c.push(e.registerCommand({manifest:p,handler:h,...g?{expectedRevisionPolicy:g}:{}}));try{m({schemaVersion:1,id:"rendering.profile.patch",version:1,title:"Patch Rendering Profile",description:"Apply bounded typed Rendering Profile and Environment field changes through the Editor Service authority.",target:"authoring",access:"write",stability:"experimental",inputSchema:{type:"object",additionalProperties:!1,required:["changes"],properties:{changes:{type:"object"}}},outputSchema:{type:"object"},effects:{persistence:"authoring",undoable:!0,idempotent:!1},transaction:{compatible:!0,sideEffects:"authoring",phase:"mutation"},presentation:{category:"Rendering",inputMode:"schema-form"}},(p,h)=>{let g=vt(h),f=gG(g)??UQ(),y=Or(p.changes)?p.changes:{},A=YN(f,y),T=A.changedPaths.flatMap(C=>{let E=uG(f,C),S=uG(A.config,C);return KQ(E,S)?[]:[{targetId:CQ,path:`rendering.${C}`,before:structuredClone(E),after:structuredClone(S)}]});if(T.length===0)return{ok:!0,output:{changed:!1,changedPaths:[],renderingProfile:structuredClone(f)}};let D=tA(g,A.config),P=h.dispatch({type:"document.replace",document:D,label:`Patch Rendering Profile: ${A.changedPaths.join(", ")}`,projectionImpact:{type:"incremental"},presentationImpact:{rendering:!0},authoringPatch:{kind:"fields",writes:T}});return{ok:!0,output:{changed:!0,changedPaths:A.changedPaths,renderingProfile:structuredClone(A.config),documentRevision:P.documentRevision,dirty:P.dirty}}}),m(ZQ(),async()=>{let p=r();if(!p)return ye("document.persistenceUnavailable","Project authoring persistence is unavailable.");try{let h=await p.loadEditorScene(),g=Ru(XT(h)),f=Is(g);return zQ(d,f)?{ok:!0,output:td(h)}:ye("authoring_source_snapshot_mismatch","The persisted companion state no longer matches the active authoring source snapshot.",{activeAuthoringSource:d?{...d}:null,loadedAuthoringSource:f?{...f}:null})}catch(h){return ta(h)}}),m({...gh("runtimeDebug.commitAndSave","Commit and Save Runtime Debug Authoring",XQ()),stability:"experimental",description:"Persists one Runtime Debug Panel scene proposal through the Editor Service authority.",effects:{persistence:"filesystem",undoable:!0,idempotent:!1}},async(p,h)=>{if(h.source!=="runtime-debug-panel"||h.principal.type!=="human"||h.surface!=="runtime-debug-panel")return ye("runtimeDebug.trustedIngressRequired","Runtime Debug authoring requires the trusted Runtime Debug ingress.");if(h.intentCommandId!==p.commandId)return ye("runtimeDebug.identityMismatch","Runtime Debug authoring identity does not match the invocation intent.");if(!p.commandId.startsWith("runtime-debug."))return ye("runtimeDebug.identityInvalid","Runtime Debug authoring command identity must use the runtime-debug namespace.");let g=r();if(!g)return ye("document.persistenceUnavailable","Project authoring persistence is unavailable.");if(p.shadowMapExperimentConfig)try{ri(p.shadowMapExperimentConfig)}catch(M){return ta(M)}let f=mo(t,p.document),y=HT(t,WT(f,d)),A=Eu(),T;try{T=await g.saveEditorScene({saveMode:"local-commit-save",rawEditorScene:y,body:qT(d,p,f),signal:h.signal})}catch(M){return ta(M)}let D,P;try{D=td(T),P=mo(t,YT(T))}catch(M){return ta(M)}h.dispatch({type:"document.patch",patch:{kind:"replace",document:P},label:p.commandId,presentationImpact:{hierarchy:"full",inspector:"full",rendering:!0},projectionImpact:{type:"rebuild",reason:"runtime-debug-save"}},{assumeDocumentChanged:!0,assumeDirty:!0,clonePatchInput:!1,cloneResultDocument:!1}),d=Is(P)??d,h.session.markSaved(P,void 0,{structureChanged:!1,cloneDocumentInput:!1,cloneResultDocuments:!1});let C=Ou(T);C&&i(C);let E=h.session.getState({cloneDocuments:!1}),S=Tu(Au(T.performanceProfile),A.snapshot()),w=Du();try{s?.({transactionId:w,documentRevision:E.documentRevision,dirty:E.dirty,...typeof T.version=="number"?{version:T.version}:{},...typeof T.updatedAt=="string"?{updatedAt:T.updatedAt}:{},...typeof T.sceneUrl=="string"?{sceneUrl:T.sceneUrl}:{}})}catch{t.logger?.warn?.("[FPS Editor] Runtime Debug \u4FDD\u5B58\u540E\u7684 Runtime \u901A\u77E5\u5931\u8D25\uFF0C\u4FDD\u5B58\u4E8B\u52A1\u5DF2\u6210\u529F\u3002")}return{ok:!0,output:{...JT(T,E.documentRevision,D,S),transactionId:w,intentCommandId:p.commandId,inputFingerprint:p.inputFingerprint,projectionImpact:{type:"rebuild",reason:"runtime-debug-save"},presentationImpact:{hierarchy:"full",inspector:"full",rendering:!0}}}}),m(gh("document.save","Save Project Document",eA()),async(p,h)=>{let g=r();if(!g)return ye("document.persistenceUnavailable","Project authoring persistence is unavailable.");let f=Eu(),y=f.measure("prepare",()=>HT(t,WT(vt(h),d))),A;try{A=await g.saveEditorScene({saveMode:"local-commit-save",rawEditorScene:y,body:qT(d,p,vt(h)),signal:h.signal})}catch(E){return ta(E)}let T;try{T=td(A)}catch(E){return ta(E)}let D=f.measure("checkpoint",()=>{let E=YT(A),S=mo(t,E);d=Is(E)??d,h.session.markSaved(S,void 0,{structureChanged:!1,cloneDocumentInput:!1,cloneResultDocuments:!1});let w=Ou(A);return w&&i(w),h.session.getState({cloneDocuments:!1})}),P=Tu(Au(A.performanceProfile),f.snapshot()),C=Du();try{s?.({transactionId:C,documentRevision:D.documentRevision,dirty:D.dirty,...typeof A.version=="number"?{version:A.version}:{},...typeof A.updatedAt=="string"?{updatedAt:A.updatedAt}:{},...typeof A.sceneUrl=="string"?{sceneUrl:A.sceneUrl}:{}})}catch{t.logger?.warn?.("[FPS Editor] document.save \u540E\u7684 Runtime \u901A\u77E5\u5931\u8D25\uFF0C\u4FDD\u5B58\u4E8B\u52A1\u5DF2\u6210\u529F\u3002")}return{ok:!0,output:{...JT(A,D.documentRevision,T,P),transactionId:C}}}),m(gh("document.export","Save Project Export",eA()),async(p,h)=>{let g=r();if(!g)return ye("document.persistenceUnavailable","Project authoring persistence is unavailable.");let f=Eu(),{state:y,document:A}=f.measure("prepare",()=>{let M=h.session.getState({cloneDocuments:!1});return{state:M,document:HT(t,WT(M.workingDocument,d))}}),T=WQ(h.signal,p.deadlineAt);if(T.deadlineElapsed)return T.dispose(),ye("document_export_timeout","Document export lifecycle deadline elapsed before persistence started.");let D;try{D=await g.saveEditorScene({saveMode:"local-commit-save",rawEditorScene:A,body:qT(d,p,vt(h)),signal:T.signal,...p.deadlineAt===void 0?{}:{deadlineAt:p.deadlineAt}})}catch(M){return T.deadlineElapsed?ye("document_export_timeout","Document export lifecycle deadline elapsed during persistence."):ta(M)}finally{T.dispose()}let P;try{P=td(D)}catch(M){return ta(M)}let C=f.measure("prepare",()=>{let M=YT(D),_=mo(t,M);return d=Is(M)??d,_}),E=Du(),S=++u,w=Tu(Au(D.performanceProfile),f.snapshot());for(n.set(E,{transactionId:E,documentRevision:y.documentRevision,document:C,sceneJsonText:qQ(D),...typeof D.expectedVersion=="number"?{expectedVersion:D.expectedVersion}:{},...typeof D.version=="number"?{version:D.version}:{},...typeof D.updatedAt=="string"?{updatedAt:D.updatedAt}:{},...typeof D.sceneUrl=="string"?{sceneUrl:D.sceneUrl}:{},...w?{performanceProfile:w}:{}}),o.set(E,S);n.size>wQ;){let M=n.keys().next().value;n.delete(M),o.delete(M)}return{ok:!0,output:{...JT(D,y.documentRevision,P,w),transactionId:E}}}),m(QQ(),async(p,h)=>{let g=r();if(!g)return ye("document.persistenceUnavailable","Project authoring persistence is unavailable.");let f,y,A;try{f=await g.loadEditorScene(),y=mo(t,XT(f)),A=td(f)}catch(P){return ta(P)}let T=Is(y);if(d&&(!T||T.sourceId!==d.sourceId||T.sourceType!==d.sourceType))return ye("authoring_source_identity_mismatch","The persisted authoring source identity changed and cannot replace the active document.");h.session.reset(y),d=T??d,n.clear(),o.clear();let D=h.session.getState({cloneDocuments:!1});return{ok:!0,output:{documentRevision:D.documentRevision,dirty:D.dirty,...T?{sourceId:T.sourceId,sourceType:T.sourceType,authoringSourceRevision:T.revision}:{},...A}}}),m(gh("document.commit","Commit Saved Checkpoint",{type:"object",additionalProperties:!1,required:["transactionId"],properties:{transactionId:{type:"string",minLength:1}}}),(p,h)=>{let g=a.get(p.transactionId);if(g)return{ok:!0,output:structuredClone(g.output)};let f=n.get(p.transactionId),y=o.get(p.transactionId);if(!f)return ye("document.commitUnavailable","\u627E\u4E0D\u5230\u53EF\u63D0\u4EA4\u7684\u5BFC\u51FA\u4E8B\u52A1\uFF0C\u8BE5\u4E8B\u52A1\u53EF\u80FD\u5DF2\u8FC7\u671F\u6216\u5DF2\u88AB\u5E9F\u5F03\u3002");if(y===void 0)return ye("document.commitUnavailable","\u5BFC\u51FA\u4E8B\u52A1\u7F3A\u5C11\u6301\u4E45\u5316\u987A\u5E8F\uFF0C\u65E0\u6CD5\u5B89\u5168\u63D0\u4EA4\u3002");if(h.expectedRevision?.document!==f.documentRevision)return ye("document.commitRevisionMismatch",`\u5F85\u63D0\u4EA4\u5BFC\u51FA\u7684\u6587\u6863\u7248\u672C ${f.documentRevision} \u4E0E\u671F\u671B\u7248\u672C ${String(h.expectedRevision?.document)} \u4E0D\u4E00\u81F4\u3002`);let A=y>l,T=Eu();A&&T.measure("checkpoint",()=>{h.session.getState({cloneDocuments:!1}).documentRevision===f.documentRevision?h.session.markSaved(f.document,void 0,{structureChanged:!1,cloneDocumentInput:!1,cloneResultDocuments:!1}):h.session.markPersistedCheckpoint(f.document,void 0,{cloneDocumentInput:!1,cloneResultDocuments:!1}),l=y}),n.delete(p.transactionId),o.delete(p.transactionId);let D=h.session.getState({cloneDocuments:!1}),P=Tu(f.performanceProfile,A?T.snapshot():null),C={transactionId:p.transactionId,preparedRevision:f.documentRevision,documentRevision:D.documentRevision,dirty:D.dirty,...P?{performanceProfile:P}:{}};if(a.set(p.transactionId,{persistenceOrder:y,output:structuredClone(C)}),A){let E=Ou(f);E&&i(E);try{s?.({transactionId:p.transactionId,documentRevision:D.documentRevision,dirty:D.dirty,...typeof f.version=="number"?{version:f.version}:{},...typeof f.updatedAt=="string"?{updatedAt:f.updatedAt}:{},...typeof f.sceneUrl=="string"?{sceneUrl:f.sceneUrl}:{}})}catch{t.logger?.warn?.("[FPS Editor] document.commit \u540E\u7684 Runtime \u901A\u77E5\u5931\u8D25\uFF0C\u4FDD\u5B58\u4E8B\u52A1\u5DF2\u6210\u529F\u3002")}}return{ok:!0,output:C}},"handler-validated")}catch(p){for(let h of c.splice(0).reverse())h();throw p}return()=>{for(let p of c.splice(0).reverse())p()}}function uG(e,t){let r=e;for(let n of t.split(".")){if(!Or(r))return;r=r[n]}return r}function Is(e){let t=e&&typeof e=="object"&&!Array.isArray(e)?e:null,r=t?.meta&&typeof t.meta=="object"&&!Array.isArray(t.meta)?t.meta:null,n=r?.authoringSource&&typeof r.authoringSource=="object"&&!Array.isArray(r.authoringSource)?r.authoringSource:null;return typeof n?.sourceId=="string"&&n.sourceId.trim()&&typeof n.sourceType=="string"&&n.sourceType.trim()&&typeof n.revision=="number"&&Number.isFinite(n.revision)?{sourceId:n.sourceId,sourceType:n.sourceType,revision:n.revision}:null}function zQ(e,t){return e!==null&&t!==null&&t.sourceId===e.sourceId&&t.sourceType===e.sourceType&&t.revision===e.revision}function WT(e,t){if(t===null)return e;let r=Is(e);if(r?.sourceId===t.sourceId&&r.sourceType===t.sourceType&&r.revision===t.revision)return e;let n=e.meta&&typeof e.meta=="object"&&!Array.isArray(e.meta)?e.meta:{};return{...e,meta:{...n,authoringSource:{...t}}}}function VQ(e){return e===null?{}:{expectedAuthoringSourceRevision:e.revision}}function qT(e,t,r){let n=Or(t.companionConfigs)?structuredClone(t.companionConfigs):{},o=r?gG(r):null;return o&&(n.rendering=structuredClone(o)),{...VQ(e),...Object.keys(n).length>0?{companionConfigs:n}:{},...t.shadowMapExperimentConfig?{shadowMapExperimentConfig:structuredClone(t.shadowMapExperimentConfig)}:{},...t.authoringSourceConflictResolution?{authoringSourceConflictResolution:t.authoringSourceConflictResolution}:{}}}function Or(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function gG(e){let t=Or(e.meta)?e.meta:null,r=t?t[hh]:void 0;return Or(r)?r:null}function UQ(){return{globalVolume:{environment:{texture:null}},shadows:{defaultMode:"none"}}}function tA(e,t){if(!Or(t))return e;let r=Or(e.meta)?e.meta:{};return{...e,meta:{...r,[hh]:structuredClone(t)}}}function HQ(e){let t=Or(e.meta)?e.meta:null;if(!t||!Object.prototype.hasOwnProperty.call(t,hh))return e;let{[hh]:r,...n}=t;return{...e,...Object.keys(n).length>0?{meta:n}:{meta:void 0}}}function KQ(e,t){return JSON.stringify(e)===JSON.stringify(t)}function WQ(e,t){let r=new AbortController,n=t!==void 0&&Date.now()>=t,o=()=>r.abort(e.reason);e.addEventListener("abort",o,{once:!0}),e.aborted&&o();let a=null;return n?r.abort():t!==void 0&&(a=setTimeout(()=>{n=!0,r.abort()},Math.max(1,t-Date.now())),a.unref?.()),{signal:r.signal,get deadlineElapsed(){return n},dispose(){a&&clearTimeout(a),e.removeEventListener("abort",o)}}}function YT(e){if(!e.editorScene)throw new Error("Project authoring backend did not return the prepared editor scene.");let t=Ru(e.editorScene,!1),r=mh(e).rendering??(Or(e.renderingConfig)?e.renderingConfig:null);return r?tA(t,r):t}function qQ(e){if(typeof e.sceneJsonText=="string"&&e.sceneJsonText.trim())return e.sceneJsonText;throw new Error("Project authoring backend did not return the prepared runtime scene artifact.")}function YQ(e,t){let r=[],n=o=>r.push(e.registerCommand({manifest:o,handler:(a,i)=>t(i,o.target)}));try{for(let o of Object.keys(Ac)){let a=MI[o];a!=="view"&&a!=="renderer"||n(JQ(o,a))}}catch(o){for(let a of r.splice(0).reverse())a();throw o}return()=>{for(let o of r.splice(0).reverse())o()}}function JQ(e,t){let r=Gl[e],n=Ac[e];if(!n)throw new Error(`Editor command metadata is missing: ${e}`);let o=n.access,a=jl[e];return{schemaVersion:1,id:e,version:1,title:n.title,target:t,access:o,stability:n.stability,inputSchema:r?.inputSchema??{type:"object"},outputSchema:r?.outputSchema??{type:"object"},requires:{editorReady:!0,...t==="view"?{viewAttached:!0}:{rendererAttached:!0}},effects:{persistence:o==="read"?"none":"view",undoable:!1,idempotent:o==="read"},presentation:{category:n.category,inputMode:Array.isArray(r?.inputSchema.required)&&r.inputSchema.required.length?"schema-form":"none",...a?.aliases?{aliases:a.aliases}:{},...a?.keywords?{keywords:a.keywords}:{},...a?.examples?{examples:a.examples}:{},...a?.shortcut?{shortcut:a.shortcut}:{},...a?.menu?{menu:a.menu}:{}}}}function gh(e,t,r={type:"object",additionalProperties:!1}){return{schemaVersion:1,id:e,version:1,title:t,target:"authoring",access:"write",stability:"stable",inputSchema:r,outputSchema:{type:"object"},effects:{persistence:"filesystem",undoable:!1,idempotent:!1},presentation:{category:"Document",inputMode:Array.isArray(r.required)&&r.required.length?"schema-form":"none",...e==="document.save"?{shortcut:"Mod+S",menu:{path:["File","Save"]}}:{}}}}function eA(){return{type:"object",additionalProperties:!1,properties:{authoringSourceConflictResolution:{type:"object",additionalProperties:!1,required:["strategy","expectedPersistedRevision"],properties:{strategy:{const:"overwrite"},expectedPersistedRevision:{type:"number"}}},companionConfigs:{type:"object",additionalProperties:{anyOf:[{type:"object"},{type:"null"}]}},shadowMapExperimentConfig:{type:"object"},deadlineAt:{type:"number",minimum:0}}}}function XQ(){let e=eA();return{...e,required:["commandId","inputFingerprint","document"],properties:{...e.properties,commandId:{type:"string",pattern:"^runtime-debug\\."},inputFingerprint:{type:"string"},document:{type:"object"}}}}function QQ(){return{schemaVersion:1,id:"document.reload",version:1,title:"Reload Project Document",description:"Discards the active working document and reloads the latest canonical authoring source from disk.",target:"authoring",access:"write",stability:"stable",inputSchema:{type:"object",additionalProperties:!1,required:["discardUnsavedChanges"],properties:{discardUnsavedChanges:{const:!0}}},outputSchema:{type:"object"},effects:{persistence:"none",undoable:!1,idempotent:!1},presentation:{category:"Document",inputMode:"schema-form",aliases:["reload latest","reload from disk"],keywords:["document","reload","disk","conflict","recovery"]}}}function ZQ(){return{schemaVersion:1,id:"document.companionState.get",version:1,title:"Get Project Document Companion State",description:"Reads the canonical Rendering and related companion authoring state persisted beside the scene document.",target:"authoring",access:"read",stability:"stable",inputSchema:{type:"object",additionalProperties:!1},outputSchema:{type:"object"},effects:{persistence:"none",undoable:!1,idempotent:!0},presentation:{category:"Document",inputMode:"none",aliases:["document companion state","rendering persistence state"],keywords:["document","rendering","companion","persistence"]}}}function JT(e,t,r=td(e),n=Au(e.performanceProfile)){let o=typeof e.sceneJsonText=="string"?e.sceneJsonText:void 0;return{documentRevision:t,...typeof e.expectedVersion=="number"?{expectedVersion:e.expectedVersion}:{},...typeof e.version=="number"?{version:e.version}:{},...typeof e.updatedAt=="string"?{updatedAt:e.updatedAt}:{},...typeof e.sceneUrl=="string"?{sceneUrl:e.sceneUrl}:{},...r,...o?{sceneJsonBytes:Buffer.byteLength(o)}:{},...n?{performanceProfile:n}:{},prepared:!0}}function Ou(e){let t=typeof e.version=="number"&&Number.isFinite(e.version)?e.version:void 0,r=typeof e.updatedAt=="string"&&e.updatedAt.trim()?e.updatedAt:void 0,n=typeof e.sceneUrl=="string"&&e.sceneUrl.trim()?e.sceneUrl:void 0;return t===void 0&&r===void 0&&n===void 0?null:{...t===void 0?{}:{version:t},...r===void 0?{}:{updatedAt:r},...n===void 0?{}:{sceneUrl:n}}}function td(e){let t=mh(e),r=Object.prototype.hasOwnProperty.call(e,"shadowMapExperimentConfig"),n;return r&&(e.shadowMapExperimentConfig==null?n=null:(ri(e.shadowMapExperimentConfig),n=structuredClone(e.shadowMapExperimentConfig))),{...Object.keys(t).length>0?{companionConfigs:structuredClone(t)}:{},...r?{shadowMapExperimentConfig:n}:{}}}function ye(e,t,r){return{ok:!1,diagnostics:[{severity:"error",source:"adapter",code:e,message:t,...r?{details:r}:{}}]}}function ta(e){let t=e&&typeof e=="object"?e:null,r=typeof t?.code=="string"&&t.code.trim()?t.code:"document.persistenceFailed",n=e instanceof Error?e.message:typeof t?.message=="string"?t.message:String(e),o=t?.details&&typeof t.details=="object"&&!Array.isArray(t.details)?structuredClone(t.details):void 0;return ye(r,n,o)}function eZ(e,t,r){return{id:e,guid:`go_${Du()}`,name:t,active:!0,...r?{parentId:r}:{},components:[{type:"Transform",position:{x:0,y:0,z:0},rotation:{x:0,y:0,z:0},scale:{x:1,y:1,z:1}}]}}function tZ(e,t){let r=rZ(t)||"object",n=new Set(e.scene.gameObjects.map(o=>o.id));if(!n.has(r))return r;for(let o=2;o<1e4;o+=1){let a=`${r}_${o}`;if(!n.has(a))return a}return`${r}_${Du()}`}function rZ(e){return e.trim().toLocaleLowerCase().replace(/[^a-z0-9]+/g,"_").replace(/^_+|_+$/g,"")}function nZ(e){return e?`${e[0].toLocaleUpperCase()}${e.slice(1)}`:"Object"}function ue(e){return typeof e=="string"&&e.trim()?e.trim():void 0}import{randomBytes as Fbe,randomUUID as $be,timingSafeEqual as oZ}from"node:crypto";import aZ from"node:path";var Ube=aZ.join(".fps-editor","state","agent-runtime.json"),Hbe=Symbol.for("@fps-games/editor/playable-sdk/vite/project-editor-service-leases-v1");function hG(e){let t=e.gateway,r=e.agentToken,n=e.browserToken,o=e.runtimeDebugToken,a=e.tokenScopes,i=e.gatewayPath??_f;return async(s,c,d)=>{let u=new URL(s.url??"","http://fps-editor.local");if(u.pathname===kI){if(dZ(c),s.method!=="POST"&&s.method!=="DELETE"){Rr(c,405,{ok:!1,diagnostics:[{severity:"error",source:"transport",code:"http.methodNotAllowed",message:"Asset source grants require POST or DELETE."}]});return}if(!Cu(s.headers?.authorization,r)){let g=Cu(s.headers?.authorization,n);Rr(c,g?403:401,{ok:!1,diagnostics:[{severity:"error",source:"transport",code:g?"auth.agentTokenRequired":"auth.invalidToken",message:"Asset source upload requires the project Agent credential."}]});return}if(!e.assetSourceGrants){Rr(c,503,{ok:!1,diagnostics:[{severity:"error",source:"transport",code:"asset.sourceGrantUnavailable",message:"Asset source grant service is unavailable."}]});return}if(s.method==="DELETE"){let g=u.searchParams.get("sourceGrantId")?.trim();if(!g){Rr(c,400,{ok:!1,diagnostics:[{severity:"error",source:"transport",code:"asset.sourceGrantIdRequired",message:"Asset source grant revocation requires sourceGrantId."}]});return}try{let f=await e.assetSourceGrants.revoke(g);Rr(c,200,{ok:!0,kind:"asset.sourceGrant.revoked",revoked:f})}catch(f){let y=f instanceof tn?f:null;Rr(c,400,{ok:!1,diagnostics:[{severity:"error",source:"transport",code:y?.code??"asset.sourceGrantRevokeFailed",message:y?.message??"Asset source grant revocation failed."}]})}return}if((typeof s.headers?.["content-type"]=="string"?s.headers["content-type"].split(";",1)[0]?.trim().toLowerCase():"")!==VT){Rr(c,415,{ok:!1,diagnostics:[{severity:"error",source:"transport",code:"asset.sourceContentTypeInvalid",message:`Asset source upload requires ${VT}.`}]});return}try{let g=await e.assetSourceGrants.acceptUpload(s);Rr(c,201,{ok:!0,kind:"asset.sourceGrant",grant:g})}catch(g){let f=g instanceof tn?g:null;Rr(c,400,{ok:!1,diagnostics:[{severity:"error",source:"transport",code:f?.code??"asset.sourceUploadFailed",message:f?.message??"Asset source upload failed.",...f?.details?{details:f.details}:{}}]})}return}if(u.pathname!==i)return d();if(cZ(s,c),s.method==="OPTIONS"){c.statusCode=204,c.end();return}if(s.method!=="POST"){Rr(c,405,{ok:!1,diagnostics:[{severity:"error",source:"transport",code:"http.methodNotAllowed",message:"Editor Service Gateway requires POST."}]});return}let l=Cu(s.headers?.authorization,n),m=Cu(s.headers?.authorization,r),p=!!o?.trim()&&Cu(s.headers?.authorization,o.trim());if(!l&&!m&&!p){Rr(c,401,{ok:!1,diagnostics:[{severity:"error",source:"transport",code:"auth.invalidToken",message:"Editor Service bearer token is invalid."}]});return}try{let h=nd(),g=await sZ(s),f=nd(),y=l&&g.kind==="command.invoke"?g.invocation:null,A=y&&typeof y.clientId=="string"&&y.clientId.length>0&&y.clientId.length<=256?y.clientId:null,T=y?iZ(y.surface):void 0,D=nd(),P=await t.handle(g,a,l?{principal:{type:"human"},source:"browser-ui",sessionId:`browser:${t.serviceInstanceId}:${A??"unattached"}`,...T?{surface:T}:{}}:p?{principal:{type:"human"},source:"runtime-debug-panel",sessionId:`runtime-debug:${t.serviceInstanceId}`,surface:"runtime-debug-panel"}:{principal:{type:"agent",id:"fps-editor-agent"},source:"agent-cli",sessionId:`agent:${t.serviceInstanceId}`,surface:"agent-transaction"}),C=nd(),E=nd();await e.onHandled?.(g,P);let S=nd();c.setHeader("Server-Timing",[rA("fps_request_parse",f-h,"request parse"),rA("fps_service_handle",C-D,"service handle"),rA("fps_post_handle",S-E,"post handle")].join(", ")),Rr(c,P.ok?200:400,P)}catch(h){Rr(c,400,{ok:!1,diagnostics:[{severity:"error",source:"transport",code:"request.invalidJson",message:h instanceof Error?h.message:String(h)}]})}}}function iZ(e){return typeof e=="string"&&["inspector","gizmo","hierarchy","asset-library","runtime-debug-panel","command-palette"].includes(e)?e:void 0}function Cu(e,t){if(typeof e!="string"||!e.startsWith("Bearer "))return!1;let r=Buffer.from(e.slice(7),"utf8"),n=Buffer.from(t,"utf8");return r.length===n.length&&oZ(r,n)}async function sZ(e){let t=[],r=0;for await(let n of e){let o=Buffer.isBuffer(n)?n:Buffer.from(n);if(r+=o.byteLength,r>1024*1024)throw new Error("Editor Service request body exceeds 1 MiB.");t.push(o)}if(t.length===0)throw new Error("Editor Service request body is required.");return JSON.parse(Buffer.concat(t).toString("utf8"))}function cZ(e,t){t.setHeader("Cache-Control","no-store"),t.setHeader("Content-Type","application/json; charset=utf-8"),t.setHeader("X-Content-Type-Options","nosniff"),t.setHeader("Access-Control-Allow-Headers","authorization, content-type"),t.setHeader("Access-Control-Allow-Methods","POST, OPTIONS"),t.setHeader("Access-Control-Expose-Headers","content-length, server-timing");let r=typeof e.headers?.origin=="string"?e.headers.origin:void 0;r&&(t.setHeader("Access-Control-Allow-Origin",r),t.setHeader("Vary","Origin"))}function dZ(e){e.setHeader("Cache-Control","no-store"),e.setHeader("Content-Type","application/json; charset=utf-8"),e.setHeader("X-Content-Type-Options","nosniff")}function Rr(e,t,r){let n=`${JSON.stringify(r)}
|
|
25
|
+
`;e.statusCode=t,e.setHeader("Content-Length",Buffer.byteLength(n,"utf8")),e.end(n)}function nd(){return typeof performance<"u"?performance.now():Date.now()}function rA(e,t,r){let n=Math.max(0,t).toFixed(2);return`${e};dur=${n};desc="${r}"`}async function yG(e){let t=await pZ(e.projectRoot),r=od.resolve(e.journalPath??od.join(t,".fps-editor/state/working-document-journal.json"));IZ(t,r);let n=await yZ(r,t,e.build.buildKey),o=bG(),a=await UT({projectRoot:t,serviceInstanceId:o}),i=mG({projectRoot:t,project:e.project,serviceInstanceId:o,backend:e.backend,assetSourceGrants:a,logger:e.logger,...n?{recovery:n}:{},...e.prepareAuthoringDocument?{prepareAuthoringDocument:e.prepareAuthoringDocument}:{},...e.preparePersistedDocument?{preparePersistedDocument:e.preparePersistedDocument}:{},...e.sceneAssembly?{sceneAssembly:e.sceneAssembly}:{},...e.materialShaderDefinitions?{materialShaderDefinitions:e.materialShaderDefinitions}:{},...e.onDocumentCommitted?{onDocumentCommitted:e.onDocumentCommitted}:{}}),s=await cG(a,i),c=null,d=null,u=null,l=async()=>{let m=[],p=async h=>{try{await h()}catch(g){m.push(g)}};if(u?.listening&&await p(()=>new Promise((h,g)=>{u.close(f=>f?g(f):h())})),d&&await p(d),c&&await p(()=>c.dispose()),await p(()=>s.dispose()),await p(()=>a.dispose()),m.length>0){let h=new Error("Editor Service worker cleanup failed.");throw h.errors=m,h}};try{let m=new Date().toISOString(),p=v_({canonicalProjectRoot:t,packageVersion:e.build.version,buildKey:e.build.buildKey,startedAt:m,host:s.host,readTraces:s.readTraces,readDocumentExport:s.readDocumentExport,discardDocumentExport:s.discardDocumentExport,readAuthoringPersistence:s.readAuthoringPersistence,recovery:{draftJournal:!0,unsavedWorkingStateRecovered:n!==null,message:n?"Working document and saved checkpoint were recovered from the atomic worker journal.":"Atomic working-document journal is enabled for worker recovery."}});c=p,d=s.bindBrowserCommandForwarder(p.forwardBrowserCommand);let h=Promise.resolve(),g="",f=null,y=null,A=null,T=async()=>{let _=s.host.getSnapshot(),B=`${_.documentRevision}:${_.documentStructureRevision}:${_.dirty}:${_.draftRevision??0}:${_.savedRevision??0}`;if(B===g)return h;g=B;let re=s.readAuthoringPersistence(),U={schemaVersion:1,canonicalProjectRoot:t,buildKey:e.build.buildKey,writtenAt:new Date().toISOString(),recovery:{workingDocument:_.document,savedDocument:_.savedDocument,documentRevision:_.documentRevision,documentStructureRevision:_.documentStructureRevision,draftRevision:_.draftRevision??(_.dirty?0:_.documentRevision),savedRevision:_.savedRevision??(_.dirty?0:_.documentRevision),...re?{persistence:re}:{}}};return h=h.then(async()=>{await SZ(r,U),s.host.markDraftCheckpoint(_.documentRevision)}),h},D=()=>{f&&clearTimeout(f),A===null&&(A=Date.now()),f=setTimeout(()=>{f=null,y=null,A=null,T().catch(_=>e.logger?.warn?.(`[fps-editor] Draft checkpoint failed: ${wu(_)}`))},1e3),y||(y=setTimeout(()=>{f=null,y=null,A=null,T().catch(_=>e.logger?.warn?.(`[fps-editor] Draft checkpoint failed: ${wu(_)}`))},Math.max(0,5e3-(Date.now()-A))))},P=hG({gateway:p,agentToken:e.agentToken,browserToken:e.browserToken,runtimeDebugToken:e.runtimeDebugToken,tokenScopes:e.tokenScopes??["read","write"],gatewayPath:_f,assetSourceGrants:a,async onHandled(_,B){B.ok&&bZ(_)&&D()}}),C=[...e.middlewares??[],P],E=lZ((_,B)=>{EZ(B);let re=new URL(_.url??"/","http://fps-editor-worker.local");if(_.method==="GET"&&re.pathname==="/__fps_editor_worker/health"){B.statusCode=200,B.setHeader("Content-Type","application/json; charset=utf-8"),B.end(`${JSON.stringify({ok:!0,serviceInstanceId:o})}
|
|
26
|
+
`);return}let U=0,Be=()=>{let Oe=C[U++];if(!Oe){B.statusCode=404,B.end();return}Promise.resolve(Oe(_,B,Be)).catch(ze=>{if(B.headersSent){B.destroy(ze instanceof Error?ze:void 0);return}B.statusCode=500,B.setHeader("Content-Type","application/json; charset=utf-8"),B.end(JSON.stringify({ok:!1,error:wu(ze)}))})};Be()});u=E,await new Promise((_,B)=>{E.once("error",B),E.listen(0,"127.0.0.1",()=>{E.off("error",B),_()})});let S=E.address();if(!S||typeof S=="string")throw new Error("Editor Service worker address is unavailable.");await T();let w=`http://127.0.0.1:${S.port}`;e.logger?.info?.(`[fps-editor] Editor Service worker ready at ${w}`);let M=null;return Object.freeze({serviceInstanceId:o,internalUrl:w,journalPath:r,dispose(){return M||(M=(async()=>{f&&clearTimeout(f),y&&clearTimeout(y),f=null,y=null,A=null,await T().catch(B=>{e.logger?.warn?.(`[fps-editor] Final worker journal failed: ${wu(B)}`)}),await l()})().catch(B=>{throw M=null,B}),M)}})}catch(m){throw await l().catch(p=>{e.logger?.warn?.(`[fps-editor] Worker startup cleanup failed: ${wu(p)}`)}),m}}function bZ(e){return e.kind==="command.invoke"||e.kind==="transaction.commit"||e.kind==="attachment.result"}async function yZ(e,t,r){try{let n=JSON.parse(await mZ(e,"utf8"));return n.schemaVersion!==1||n.canonicalProjectRoot!==t||n.buildKey!==r||!n.recovery?null:n.recovery}catch{return null}}async function SZ(e,t){let r=od.dirname(e);await uZ(r,{recursive:!0,mode:448});let n=`${e}.${process.pid}.${bG()}.tmp`;try{await hZ(n,`${JSON.stringify(t)}
|
|
27
|
+
`,{encoding:"utf8",mode:384}),await fZ(n,e)}finally{await gZ(n,{force:!0}).catch(()=>{})}}function IZ(e,t){let r=od.relative(e,t);if(!r||r===".."||r.startsWith(`..${od.sep}`)||od.isAbsolute(r))throw new Error("Editor Service journal must be inside the canonical project root.")}function EZ(e){e.setHeader("Cache-Control","no-store"),e.setHeader("Cross-Origin-Resource-Policy","cross-origin"),e.setHeader("X-Content-Type-Options","nosniff")}function wu(e){return e instanceof Error?e.message:String(e)}var _n=(e,t)=>({kind:"number",...e!=null?{min:e}:{},...t!=null?{max:t}:{}}),Es={kind:"texture"},SG={kind:"color"},TZ={kind:"enum",values:["lit","unlit"]},AZ={kind:"enum",values:["opaque","mask","blend"]},TG={lightingModel:TZ,baseColor:{kind:"object",properties:{color:SG,texture:Es,brightness:_n(0),saturation:_n(0),contrast:_n(0),hue:_n(-180,180)}},normal:{kind:"object",properties:{texture:Es,strength:_n(0)}},emission:{kind:"object",properties:{color:SG,intensity:_n(0),texture:Es,maskTexture:Es}},alpha:{kind:"object",properties:{mode:AZ,opacity:_n(0,1),cutoff:_n(0,1),texture:Es}}},PZ={kind:"object",properties:{...TG,metallic:_n(0,1),roughness:_n(0,1),metallicRoughness:{kind:"object",properties:{texture:Es}},occlusion:{kind:"object",properties:{texture:Es,strength:_n(0)}}}},xZ={kind:"object",properties:TG},MZ={lightingModel:"lit",baseColor:{color:{r:1,g:1,b:1},brightness:1,saturation:1,contrast:1,hue:0},metallic:0,roughness:1,emission:{color:{r:0,g:0,b:0},intensity:0}},DZ={lightingModel:"lit",baseColor:{color:{r:1,g:1,b:1},brightness:1,saturation:1,contrast:1,hue:0},emission:{color:{r:0,g:0,b:0},intensity:0}},IG=[{id:"surface",title:"Surface",order:40},{id:"geometry",title:"Geometry",order:50},{id:"emission",title:"Emission",order:60},{id:"alpha",title:"Alpha",order:70}],Ts={path:"properties.lightingModel",operator:"equals",value:"lit",inactiveReasonKey:"litMaterial"},AG=[id("properties.lightingModel","surface",1,"enum","assetLightingModel","lightingModel","lit",{options:[{value:"lit",labelKey:"assetLightingModelLit"},{value:"unlit",labelKey:"assetLightingModelUnlit"}],binding:"lightingModel",updateClass:"define"}),id("properties.baseColor.color","surface",2,"color","assetBaseColor","baseColor",{r:1,g:1,b:1},{binding:"baseColor.color"}),sd("properties.baseColor.texture.textureAssetId","properties.baseColor.texture","surface",3,"assetBaseTexture","baseTexture","baseColor.texture"),kn("properties.baseColor.brightness","surface",4,"assetBrightness","brightness",1,{softMin:0,softMax:4,step:.05,conditions:[ad("properties.baseColor.texture.textureAssetId","baseTexture")]}),kn("properties.baseColor.saturation","surface",5,"assetSaturation","saturation",1,{softMin:0,softMax:2,step:.05,conditions:[ad("properties.baseColor.texture.textureAssetId","baseTexture")]}),kn("properties.baseColor.contrast","surface",6,"assetContrast","contrast",1,{softMin:0,softMax:2,step:.05,conditions:[ad("properties.baseColor.texture.textureAssetId","baseTexture")]}),kn("properties.baseColor.hue","surface",7,"assetHue","hue",0,{step:1,conditions:[ad("properties.baseColor.texture.textureAssetId","baseTexture")]}),sd("properties.normal.texture.textureAssetId","properties.normal.texture","geometry",10,"assetNormalTexture","normalTexture","normal.texture",[Ts]),kn("properties.normal.strength","geometry",11,"assetNormalStrength","normalStrength",1,{softMin:0,softMax:4,step:.05,conditions:[Ts,ad("properties.normal.texture.textureAssetId","normalTexture")]}),id("properties.emission.color","emission",50,"color","assetEmissionColor","emissionColor",{r:0,g:0,b:0},{binding:"emission.color"}),kn("properties.emission.intensity","emission",51,"assetEmissionIntensity","emissionIntensity",0,{softMin:0,softMax:8,step:.05}),sd("properties.emission.texture.textureAssetId","properties.emission.texture","emission",52,"assetEmissionTexture","emissionTexture","emission.texture"),id("properties.alpha.mode","alpha",60,"enum","assetAlphaMode","alphaMode","opaque",{options:[{value:"opaque",labelKey:"assetAlphaModeOpaque"},{value:"mask",labelKey:"assetAlphaModeMask"},{value:"blend",labelKey:"assetAlphaModeBlend"}],binding:"alpha.mode",updateClass:"pipeline"}),kn("properties.alpha.opacity","alpha",61,"assetAlphaOpacity","alphaOpacity",1,{step:.05,conditions:[{path:"properties.alpha.mode",operator:"equals",value:"blend",inactiveReasonKey:"alphaBlend"}]}),kn("properties.alpha.cutoff","alpha",62,"assetAlphaCutoff","alphaCutoff",.5,{step:.01,conditions:[{path:"properties.alpha.mode",operator:"equals",value:"mask",inactiveReasonKey:"alphaMask"}]}),sd("properties.alpha.texture.textureAssetId","properties.alpha.texture","alpha",63,"assetAlphaTexture","alphaTexture","alpha.texture",[{path:"properties.alpha.mode",operator:"not-equals",value:"opaque",inactiveReasonKey:"alphaTransparency"}])],OZ=[...AG,kn("properties.metallic","geometry",20,"assetMetallic","metallic",0,{step:.05,conditions:[Ts]}),kn("properties.roughness","geometry",21,"assetRoughness","roughness",1,{step:.05,conditions:[Ts]}),sd("properties.metallicRoughness.texture.textureAssetId","properties.metallicRoughness.texture","geometry",22,"assetMetallicRoughnessTexture","metallicRoughnessTexture","metallicRoughness.texture",[Ts]),sd("properties.occlusion.texture.textureAssetId","properties.occlusion.texture","geometry",23,"assetOcclusionTexture","occlusionTexture","occlusion.texture",[Ts]),kn("properties.occlusion.strength","geometry",24,"assetOcclusionStrength","occlusionStrength",1,{softMin:0,softMax:4,step:.05,conditions:[Ts,ad("properties.occlusion.texture.textureAssetId","occlusionTexture")]})],oA=[{shaderId:"fps.builtin.pbr",version:1,runtimeKind:"pbr",displayName:"PBR",propertiesSchema:PZ,defaultProperties:MZ,inspector:{sections:IG,fields:OZ}},{shaderId:"fps.builtin.standard",version:1,runtimeKind:"standard",displayName:"Standard",propertiesSchema:xZ,defaultProperties:DZ,inspector:{sections:IG,fields:AG}}],oye=aA(oA);function aA(e){let t=new Map;for(let n of e){RZ(n,t);let o=CZ(n);t.set(n.shaderId,DG(o))}let r=Object.freeze([...t.values()]);return Object.freeze({get(n){return typeof n=="string"?t.get(n)??null:null},list(){return r}})}function id(e,t,r,n,o,a,i,s){return{path:e,sectionId:t,order:r,control:n,labelKey:o,tooltipKey:a,defaultValue:i,updateClass:"uniform",...s}}function kn(e,t,r,n,o,a,i={}){return id(e,t,r,"number",n,o,a,{binding:e.replace(/^properties\./,""),step:i.step??.05,displayPrecision:2,precision:2,...i})}function sd(e,t,r,n,o,a,i,s){return id(e,r,n,"texture",o,a,"",{schemaPath:t,binding:i,updateClass:"texture",conditions:s})}function ad(e,t){return{path:e,operator:"truthy",inactiveReasonKey:t}}function RZ(e,t){if(!oa(e.shaderId)&&!ci(e.shaderId))throw new Error("Material Shader Definition shaderId must be a supported built-in id or a lowercase namespaced project id.");if(!Number.isInteger(e.version)||e.version<=0)throw new Error(`Material Shader Definition ${e.shaderId} must use a positive integer version.`);if(t.has(e.shaderId))throw new Error(`Duplicate Material Shader Definition: ${e.shaderId}`);if(e.sourceFile!=null&&!vZ(e.sourceFile))throw new Error(`Material Shader Definition ${e.shaderId} sourceFile must be a safe project-relative path.`);PG(e.shaderId,e.propertiesSchema,"properties");let r=[];if(MG(e.propertiesSchema,e.defaultProperties,"properties",r),r.length>0){let a=r[0];throw new Error(`Material Shader Definition ${e.shaderId} default ${a.path} ${a.message}.`)}let n=new Set;for(let a of e.inspector.sections){if(!a.id.trim()||n.has(a.id))throw new Error(`Material Shader Definition ${e.shaderId} contains an invalid or duplicate section: ${a.id}`);n.add(a.id)}let o=new Set;for(let a of e.inspector.fields){if(!a.path.startsWith("properties.")||o.has(a.path))throw new Error(`Material Shader Definition ${e.shaderId} contains an invalid or duplicate field: ${a.path}`);if(!n.has(a.sectionId))throw new Error(`Material Shader Definition ${e.shaderId} field ${a.path} references an unknown section.`);wZ(e,a),o.add(a.path)}}function CZ(e){let t=structuredClone(e);return{...t,inspector:{...t.inspector,fields:t.inspector.fields.map(r=>{if(r.control!=="number")return r;let n=xG(t.propertiesSchema,r.schemaPath??r.path);return n?.kind!=="number"?r:{...r,...n.min!=null?{min:n.min}:{},...n.max!=null?{max:n.max}:{}}})}}}function wZ(e,t){let r=[["min",t.min],["max",t.max],["softMin",t.softMin],["softMax",t.softMax]];for(let[o,a]of r)if(a!=null&&!Number.isFinite(a))throw new Error(`Material Shader Definition ${e.shaderId} field ${t.path} ${o} must be finite.`);if(t.control!=="number"){if(r.some(([,o])=>o!=null))throw new Error(`Material Shader Definition ${e.shaderId} field ${t.path} uses numeric ranges with a non-number control.`);return}let n=xG(e.propertiesSchema,t.schemaPath??t.path);if(n?.kind!=="number")throw new Error(`Material Shader Definition ${e.shaderId} field ${t.path} must reference a number schema.`);for(let[o,a,i]of[["min",t.min,n.min],["max",t.max,n.max]])if(a!=null&&a!==i)throw new Error(`Material Shader Definition ${e.shaderId} field ${t.path} ${o} must match propertiesSchema.`);if(t.softMin!=null&&t.softMax!=null&&t.softMin>t.softMax)throw new Error(`Material Shader Definition ${e.shaderId} field ${t.path} softMin must not exceed softMax.`);if(n.min!=null&&t.softMin!=null&&t.softMin<n.min)throw new Error(`Material Shader Definition ${e.shaderId} field ${t.path} softMin must not be below the schema minimum.`);if(n.max!=null&&t.softMax!=null&&t.softMax>n.max)throw new Error(`Material Shader Definition ${e.shaderId} field ${t.path} softMax must not exceed the schema maximum.`)}function PG(e,t,r){if(t.kind==="object"){for(let[n,o]of Object.entries(t.properties))PG(e,o,`${r}.${n}`);return}if(t.kind==="number"){if(t.min!=null&&!Number.isFinite(t.min))throw new Error(`Material Shader Definition ${e} number field ${r} min must be finite.`);if(t.max!=null&&!Number.isFinite(t.max))throw new Error(`Material Shader Definition ${e} number field ${r} max must be finite.`);if(t.min!=null&&t.max!=null&&t.min>t.max)throw new Error(`Material Shader Definition ${e} number field ${r} min must not exceed max.`);return}if(t.kind==="color"&&t.channels!=null&&t.channels!==3&&t.channels!==4)throw new Error(`Material Shader Definition ${e} color field ${r} channels must be 3 or 4.`)}function vZ(e){let t=e.trim();return!t||t.startsWith("/")||t.includes("\\")||t.includes(":")?!1:!t.split("/").includes("..")}function _Z(e){let t=e.trim();return t.startsWith("properties.")?t:`properties.${t}`}function xG(e,t){let r=_Z(t).replace(/^properties\./,"").split(".").filter(Boolean);if(r.length===0)return null;let n=e;for(let o of r){if(n.kind!=="object")return null;let a=n.properties[o];if(!a)return null;n=a}return n}function MG(e,t,r,n){if(e.kind==="object"){if(!nA(t)){n.push({path:r,message:"must be an object"});return}for(let a of Object.keys(t))Object.prototype.hasOwnProperty.call(e.properties,a)||n.push({path:`${r}.${a}`,message:"is not supported by the selected shader"});for(let[a,i]of Object.entries(e.properties))t[a]!==void 0&&MG(i,t[a],`${r}.${a}`,n);return}if(e.kind==="number"){if(typeof t!="number"||!Number.isFinite(t)){n.push({path:r,message:"must be a finite number"});return}e.min!=null&&t<e.min&&n.push({path:r,message:`must be greater than or equal to ${e.min}`}),e.max!=null&&t>e.max&&n.push({path:r,message:`must be less than or equal to ${e.max}`});return}if(e.kind==="boolean"){typeof t!="boolean"&&n.push({path:r,message:"must be a boolean"});return}if(e.kind==="string"){t!==null&&typeof t!="string"?n.push({path:r,message:"must be a string"}):t===null&&!e.nullable&&n.push({path:r,message:"must not be null"});return}if(e.kind==="enum"){(typeof t!="string"||!e.values.includes(t))&&n.push({path:r,message:`must be one of: ${e.values.join(", ")}`});return}if(e.kind==="color"){let a=e.channels===4?["r","g","b","a"]:["r","g","b"];EG(t,r,a,n,e.channels===4?"an RGBA object":"an RGB object");return}if(e.kind==="vec2"||e.kind==="vec3"){EG(t,r,e.kind==="vec2"?["x","y"]:["x","y","z"],n,`a ${e.kind} object`);return}if(t===null)return;if(!nA(t)){n.push({path:r,message:"must be a texture reference object or null"});return}Object.keys(t).some(a=>a!=="url"&&a!=="textureAssetId")&&n.push({path:r,message:"must contain only url or textureAssetId"});for(let a of["url","textureAssetId"]){let i=t[a];i!==void 0&&(typeof i!="string"||!i.trim())&&n.push({path:`${r}.${a}`,message:"must be a non-empty string"})}}function EG(e,t,r,n,o){if(!nA(e)){n.push({path:t,message:`must be ${o}`});return}Object.keys(e).some(a=>!r.includes(a))&&n.push({path:t,message:`must contain only ${r.join(", ")}`});for(let a of r)(typeof e[a]!="number"||!Number.isFinite(e[a]))&&n.push({path:`${t}.${a}`,message:"must be a finite number"})}function DG(e){if(e&&typeof e=="object"&&!Object.isFrozen(e)){Object.freeze(e);for(let t of Object.values(e))DG(t)}return e}function nA(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}var kZ=Object.freeze([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),jZ=Object.freeze([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]);function bh(e){return NZ(new TextEncoder().encode(e))}function OG(e){return`sha256:${bh(JSON.stringify(e))}`}function NZ(e){let t=Math.ceil((e.length+9)/64)*64,r=new Uint8Array(t);r.set(e),r[e.length]=128;let n=new DataView(r.buffer);n.setUint32(t-8,Math.floor(e.length/536870912),!1),n.setUint32(t-4,e.length*8>>>0,!1);let o=[...kZ],a=new Uint32Array(64);for(let i=0;i<r.length;i+=64){for(let g=0;g<16;g+=1)a[g]=n.getUint32(i+g*4,!1);for(let g=16;g<64;g+=1){let f=a[g-15],y=a[g-2],A=po(f,7)^po(f,18)^f>>>3,T=po(y,17)^po(y,19)^y>>>10;a[g]=a[g-16]+A+a[g-7]+T>>>0}let[s,c,d,u,l,m,p,h]=o;for(let g=0;g<64;g+=1){let f=po(l,6)^po(l,11)^po(l,25),y=l&m^~l&p,A=h+f+y+jZ[g]+a[g]>>>0,T=po(s,2)^po(s,13)^po(s,22),D=s&c^s&d^c&d,P=T+D>>>0;h=p,p=m,m=l,l=u+A>>>0,u=d,d=c,c=s,s=A+P>>>0}o[0]=o[0]+s>>>0,o[1]=o[1]+c>>>0,o[2]=o[2]+d>>>0,o[3]=o[3]+u>>>0,o[4]=o[4]+l>>>0,o[5]=o[5]+m>>>0,o[6]=o[6]+p>>>0,o[7]=o[7]+h>>>0}return o.map(i=>i.toString(16).padStart(8,"0")).join("")}function po(e,t){return e>>>t|e<<32-t}var GZ="fps.plugin.materials";function CG(e){let t=e?.[GZ];if(t==null)return null;if(!cd(t)||t.schemaVersion!==1||typeof t.snapshotId!="string"||!Array.isArray(t.shaders))throw new Error("Materials Plugin snapshot is invalid. Run fps-editor-prepare again.");let r=structuredClone(t);return LZ(r),wG(r)}function iA(e){return aA([...oA,...e?.shaders.map(t=>t.definition)??[]])}function LZ(e){if(!/^sha256:[a-f0-9]{64}$/.test(e.snapshotId)||e.shaders.length===0)throw new Error("Materials Plugin snapshot identity is invalid. Run fps-editor-prepare again.");for(let r of e.shaders)if(!cd(r)||!cd(r.definition)||!cd(r.program))throw new Error("Materials Plugin Shader snapshot is invalid. Run fps-editor-prepare again.");iA(e);for(let r of e.shaders){let{definition:n,program:o}=r;if(o.shaderId!==n.shaderId||o.definitionVersion!==n.version)throw new Error(`Material snapshot Definition identity does not match its program: ${n.shaderId}`);if(o.language!=="glsl"||!RG(o.vertexSourcePath)||!RG(o.fragmentSourcePath)||!/^[a-f0-9]{64}$/.test(o.vertexSourceHash)||!/^[a-f0-9]{64}$/.test(o.fragmentSourceHash)||typeof o.vertexSource!="string"||!o.vertexSource.trim()||typeof o.fragmentSource!="string"||!o.fragmentSource.trim())throw new Error(`Material snapshot program is invalid: ${n.shaderId}`);if(bh(o.vertexSource)!==o.vertexSourceHash||bh(o.fragmentSource)!==o.fragmentSourceHash)throw new Error(`Material snapshot source hash does not match its GLSL content: ${n.shaderId}`);if(!Array.isArray(o.attributes)||o.attributes.length===0||o.attributes.some(a=>!/^[A-Za-z_][A-Za-z0-9_]*$/.test(a))||new Set(o.attributes).size!==o.attributes.length)throw new Error(`Material snapshot attributes are invalid: ${n.shaderId}`);if(!["opaque","combine","add"].includes(o.alphaMode)||!cd(o.enumUniformValues)||!cd(o.frame)||!["on-demand","continuous"].includes(o.frame.mode))throw new Error(`Material snapshot rendering policy is invalid: ${n.shaderId}`)}let t={schemaVersion:e.schemaVersion,shaders:e.shaders};if(OG(t)!==e.snapshotId)throw new Error("Materials Plugin snapshot payload does not match its identity. Run fps-editor-prepare again.")}function RG(e){return typeof e=="string"&&!!e&&!e.startsWith("/")&&!e.includes("\\")&&!e.includes(":")&&e.split("/").every(t=>!!t&&t!=="."&&t!=="..")}function wG(e){if(!e||typeof e!="object"||Object.isFrozen(e))return e;for(let t of Object.values(e))wG(t);return Object.freeze(e)}function cd(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}async function _G(e){let t=aC(e.definition),r=CG(e.pluginSnapshots),n=iA(r),o=t.project,a=FZ(e.projectRoot),i=Lw(e.projectRoot,{importedDir:o.assets.importedDir,generatedDir:o.assets.generatedDir,runtimeArtifact:o.source.runtimeScene}),s=Gw({projectRoot:e.projectRoot,assetRegistryConfig:i}),c=$w(o,{projectRoot:e.projectRoot}),d=Fw(o,e.projectRoot),u=LR({materialShaderDefinitions:n,markerTypes:t.metadata.markerTypes??[],relationTypes:t.metadata.relationTypes??[],features:o.features,getRenderingProfile:()=>({shadows:{defaultMode:"none"}}),createPatch:{gameObjectField:(f,y,A)=>({kind:"game-object.field",targetId:f,path:y,value:A}),gameObjectFieldBatch:f=>({kind:"game-object.property-field-batch",fields:f}),materialAssetField:(f,y,A)=>({kind:"scene.material-asset.field",materialAssetId:f,path:y,value:A}),materialAssetReplace:(f,y)=>({kind:"scene.material-asset.replace",materialAssetId:f,materialAsset:y}),prefabAssetReplace:(f,y)=>({kind:"scene.prefab-asset.replace",assetId:f,prefabAsset:y}),markerGraph:f=>({kind:"scene.marker-graph",command:f})}}),l={ensureAuthoringSource:Ex,detectRuntimeInputDrift:Ax,enrichEditorSceneDocumentAssets:ay,ensureEditorSceneEnvironmentDefaults:u.ensureEnvironmentDefaults.bind(u)},m={...l,assertEditorSceneDocument:Mw,assertEditorSceneMaterialAssetIntegrity:u.assertMaterialAssetIntegrity.bind(u),bumpEditorSceneAuthoringSourceRevision:Tx,compileEditorSceneDocumentToSceneConfig:(f,y,A)=>uC(f,y,{...A,materialShaderDefinitions:n,readCustomTransformRuntimeData:T=>T?.transformType==="groundDecal"&&BZ(T.groundDecal)?{groundDecal:PC(T.groundDecal)}:null})},p=(f,y="report")=>s.listEditorAssetLibrary(a,y),h={loadEditorScene:()=>Pw({projectRoot:e.projectRoot,server:a,paths:d,listEditorAssetLibrary:p,loadServices:async()=>l}),listEditorAssets:p,importEditorAsset:f=>s.importProjectAsset(a,f),refreshEditorAssets:()=>s.refreshAndListProjectAssetCatalog(a),saveEditorScene:f=>xw({...f,projectRoot:e.projectRoot,server:a,paths:d,listEditorAssetLibrary:p,saveServices:async()=>m,normalizeRenderingProfile:y=>mt(y),summarizeRenderingProfile:y=>Ms(y),createRenderingInvalidationFiles:c.createInvalidationFiles})},g=Nw({projectRoot:e.projectRoot,createAssetAuthoringHandlers:()=>s.createProjectAssetAuthoringHandlers(a),handleRenderingProfileRoute:c.handleRoute,loadEditorScene:h.loadEditorScene,importEditorAsset:h.importEditorAsset,refreshEditorAssets:h.refreshEditorAssets,saveEditorScene:f=>h.saveEditorScene(f),logger:console});return await $Z(g.configureServer,a),yG({projectRoot:e.projectRoot,project:o,backend:h,sceneAssembly:u,materialShaderDefinitions:n,build:{version:e.build.version,buildKey:e.build.buildId},agentToken:e.agentToken,browserToken:e.browserToken,runtimeDebugToken:e.runtimeDebugToken,...e.journalPath?.trim()?{journalPath:e.journalPath.trim()}:{},middlewares:a.middlewares.stack,logger:console,onDocumentCommitted(f){f.version===void 0||!f.sceneUrl||Bw({runtimeUrl:e.runtimeUrl,token:e.runtimeDebugToken,data:{transactionId:f.transactionId,version:f.version,sceneUrl:f.sceneUrl}}).catch(y=>console.warn("[fps-editor-server] Runtime refresh epoch publish failed.",y))}})}function FZ(e){let t={stack:[],use(o){this.stack.push(o)}},r=new vG,n=new vG;return n.unwatch=async()=>{},n.add=()=>n,{middlewares:t,httpServer:r,watcher:n,ws:{send(){}},moduleGraph:{getModulesByFile(){},invalidateModule(){}},config:{root:e,logger:console}}}async function $Z(e,t){if(typeof e=="function"){await e(t);return}e&&typeof e=="object"&&"handler"in e&&typeof e.handler=="function"&&await e.handler(t)}function BZ(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}var Qa=await _G({projectRoot:process.cwd(),definition:sA("FPS_EDITOR_WORKER_PROJECT_DEFINITION"),pluginSnapshots:sA("FPS_EDITOR_WORKER_PLUGIN_SNAPSHOTS"),build:sA("FPS_EDITOR_WORKER_BUILD"),agentToken:vu("FPS_EDITOR_WORKER_AGENT_TOKEN"),browserToken:vu("FPS_EDITOR_WORKER_BROWSER_TOKEN"),runtimeDebugToken:vu("FPS_EDITOR_WORKER_RUNTIME_DEBUG_TOKEN"),runtimeUrl:vu("FPS_EDITOR_WORKER_RUNTIME_URL"),journalPath:process.env.FPS_EDITOR_WORKER_JOURNAL_PATH?.trim()||void 0});if(!Qa||typeof Qa.serviceInstanceId!="string"||typeof Qa.internalUrl!="string"||typeof Qa.dispose!="function")throw new Error("Static Project worker returned an invalid worker handle.");process.send?.({type:"ready",serviceInstanceId:Qa.serviceInstanceId,internalUrl:Qa.internalUrl});var jG=setInterval(()=>{process.send?.({type:"heartbeat",serviceInstanceId:Qa.serviceInstanceId})},1e3);jG.unref?.();var kG=!1;for(let e of["SIGINT","SIGTERM"])process.once(e,()=>{kG||(kG=!0,clearInterval(jG),Qa.dispose().finally(()=>{process.exitCode=e==="SIGINT"?130:143}))});function vu(e){let t=process.env[e]?.trim();if(!t)throw new Error(`${e} is required.`);return t}function sA(e){let t=JSON.parse(vu(e));if(!t||typeof t!="object"||Array.isArray(t))throw new Error(`${e} must contain a JSON object.`);return t}
|