@volter/cyclotron 0.5.202 → 0.5.204

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.
Files changed (1101) hide show
  1. package/BUNDLED_NOTICES +958 -926
  2. package/LICENSE-BLENDER +11 -0
  3. package/README.md +17 -11
  4. package/dist/.vite/manifest.json +2316 -2307
  5. package/dist/assets/EntityModelDocument-BfqEea57.js +1 -0
  6. package/dist/assets/EnvironmentAssetDocument-CsLtMafz.js +1 -0
  7. package/dist/assets/InspectorObjectPreview-DKTD8djU.js +1 -0
  8. package/dist/assets/LiveModuleDocument-BuNpJQbc.js +2 -0
  9. package/dist/assets/LutAssetDocument-Bqp3Wsg1.js +1 -0
  10. package/dist/assets/ModelAssetDocument-DcQf2FRl.js +1 -0
  11. package/dist/assets/NonThreeAuthoringBootstrap-CNKyK_Rt.js +1 -0
  12. package/dist/assets/Object3DDocumentToolbar-BRg5pYmf.js +1 -0
  13. package/dist/assets/Object3DPreview-Do101Vjr.js +2 -0
  14. package/dist/assets/QuarksAssetDocument-DovrWroI.js +2 -0
  15. package/dist/assets/ShaderAssetDocument-u_toG95W.js +1 -0
  16. package/dist/assets/StageHost-oT_AnfoY.js +1179 -0
  17. package/dist/assets/ToolObject3DPreview-CFx1wGMT.js +1 -0
  18. package/dist/assets/ViewportShadingMenu-CJ81Ahky.js +1 -0
  19. package/dist/assets/animation-mixers.service-Dx323V-E.js +1 -0
  20. package/dist/assets/animation-timeline.utility-DrwWm9e0.js +1 -0
  21. package/dist/assets/asset-preview-CuTe-U4d.js +4 -0
  22. package/dist/assets/blender-emscripten-engine-BFUuajuh.js +2 -0
  23. package/dist/assets/blender-node-editor.document-BxeP17Xa.js +1 -0
  24. package/dist/assets/blender-properties-model-emPa3cK0.js +1 -0
  25. package/dist/assets/blender-properties-tab-DPdOZl5C.js +3 -0
  26. package/dist/assets/blender-runtime-host-BJ0IarOD.js +7221 -0
  27. package/dist/assets/blender-runtime.document-UEEQ0E4-.js +13 -0
  28. package/dist/assets/blender-screenshot.menu-BW_l1eg-.js +1 -0
  29. package/dist/assets/blender-timeline.document-C5HzsCta.js +1 -0
  30. package/dist/assets/blender-uv-editor.document-Ck9i56Yy.js +1 -0
  31. package/dist/assets/blender-version.status-5IP63O6U.js +1 -0
  32. package/dist/assets/blender-wali-engine-C6WYYJ9a.js +2 -0
  33. package/dist/assets/blender.command-Ch0NrqOl.js +1 -0
  34. package/dist/assets/blender.status-BZyzLhRE.js +1 -0
  35. package/dist/assets/model-inspection-BRArHWRL.js +1 -0
  36. package/dist/assets/models.finder-DsCBrBod.js +1 -0
  37. package/dist/assets/object3d-document-session-registry-BBdl6yAl.js +2 -0
  38. package/dist/assets/play-live-CNIS7Ko6.js +1 -0
  39. package/dist/assets/product-CtriX0xi.js +14 -0
  40. package/dist/assets/properties-bone-constraints.inspector-B6M_hmS5.js +1 -0
  41. package/dist/assets/properties-bone.inspector-Dy-LejF4.js +1 -0
  42. package/dist/assets/properties-collection.inspector-Ba2zTWD-.js +1 -0
  43. package/dist/assets/properties-constraints.inspector-D29yLx1k.js +1 -0
  44. package/dist/assets/properties-data.inspector-BKJcR8kl.js +1 -0
  45. package/dist/assets/properties-material.inspector-Bhu4CyhT.js +1 -0
  46. package/dist/assets/properties-modifiers.inspector-BM-S9T2X.js +1 -0
  47. package/dist/assets/properties-object.inspector-D2aQBfWp.js +1 -0
  48. package/dist/assets/properties-output.inspector-CUVnALyp.js +1 -0
  49. package/dist/assets/properties-particles.inspector-CDidh-CH.js +1 -0
  50. package/dist/assets/properties-physics.inspector-umzx6kQ4.js +1 -0
  51. package/dist/assets/properties-render.inspector-BmsJUj7A.js +1 -0
  52. package/dist/assets/properties-scene.inspector-Dhq7ziGV.js +1 -0
  53. package/dist/assets/properties-texture.inspector-CyQ48n0m.js +1 -0
  54. package/dist/assets/properties-view-layer.inspector-CwUUoh0y.js +1 -0
  55. package/dist/assets/properties-world.inspector-cgoG1r0g.js +1 -0
  56. package/dist/assets/react-18-CFVAQPHm.js +1 -0
  57. package/dist/assets/session-B_EkWp0b.js +6047 -0
  58. package/dist/assets/stage-keyboard-D_xRK1dc.js +1 -0
  59. package/dist/assets/stage-overlay-set-BVfm5BRl.js +1 -0
  60. package/dist/assets/stage-presence-markers-q9a-7bW8.js +1 -0
  61. package/dist/assets/stage-transform-tools-CShiNJb1.js +1 -0
  62. package/dist/assets/standard-viewport-dressing-DYiIyLon.js +24 -0
  63. package/dist/assets/three-integration.service-DvMFG956.js +2 -0
  64. package/dist/assets/volter-sdk-Dc6t2ANP.js +2363 -0
  65. package/dist/assets/volter-sdk-account-xUIG6PEf.js +1 -0
  66. package/dist/assets/volter-sdk-client-BcOEVIJw.js +1 -0
  67. package/dist/assets/volter-sdk-contributions-DwJfq4Gk.js +1 -0
  68. package/dist/assets/volter-sdk-css-numeric-style-dJEo63DR.js +1 -0
  69. package/dist/assets/volter-sdk-document-probe-pBOAuBoz.js +1 -0
  70. package/dist/assets/volter-sdk-editor-view-B_7oRA8p.js +1 -0
  71. package/dist/assets/volter-sdk-host-DTtxOSh7.js +1 -0
  72. package/dist/assets/volter-sdk-http-transport.browser-cl14iM0z.js +1 -0
  73. package/dist/assets/volter-sdk-index-CRMcVbKb.js +1 -0
  74. package/dist/assets/volter-sdk-kit-CapabilityCoverageSection-tsPmGg86.js +1 -0
  75. package/dist/assets/volter-sdk-kit-account-client-CfwiwZF_.js +1 -0
  76. package/dist/assets/volter-sdk-kit-action-registry-_UV4ymVV.js +1 -0
  77. package/dist/assets/volter-sdk-kit-active-product-C9ef_5p_.js +1 -0
  78. package/dist/assets/volter-sdk-kit-active-project-CzcXMhGX.js +1 -0
  79. package/dist/assets/volter-sdk-kit-adapter-editor-config-C42ndM32.js +1 -0
  80. package/dist/assets/volter-sdk-kit-adapter-module-SpxjBRxu.js +1 -0
  81. package/dist/assets/volter-sdk-kit-adapter-observation-CgaHKmxG.js +1 -0
  82. package/dist/assets/volter-sdk-kit-animation-animation-clock-BQVgKYc0.js +1 -0
  83. package/dist/assets/volter-sdk-kit-animation-stage-transport-CmMRnNGe.js +1 -0
  84. package/dist/assets/volter-sdk-kit-api-assets-ft-ZP2rL.js +1 -0
  85. package/dist/assets/volter-sdk-kit-api-base-BB4C-ta0.js +1 -0
  86. package/dist/assets/volter-sdk-kit-api-build-C1a5oHK9.js +1 -0
  87. package/dist/assets/volter-sdk-kit-api-logs-DFVJLlqY.js +1 -0
  88. package/dist/assets/volter-sdk-kit-api-project-identity-CP20p3-q.js +1 -0
  89. package/dist/assets/volter-sdk-kit-api-project-open-DA6BRrZ6.js +1 -0
  90. package/dist/assets/volter-sdk-kit-api-project-source-lFJ-e65g.js +1 -0
  91. package/dist/assets/volter-sdk-kit-api-project-state-Dr4B05rM.js +1 -0
  92. package/dist/assets/volter-sdk-kit-api-relay-B-MQZwHO.js +1 -0
  93. package/dist/assets/volter-sdk-kit-api-settings-9QPA-t86.js +1 -0
  94. package/dist/assets/volter-sdk-kit-api-themes-CgUXGQjo.js +1 -0
  95. package/dist/assets/volter-sdk-kit-api-worktrees-DlbLNOZv.js +1 -0
  96. package/dist/assets/volter-sdk-kit-asset-capabilities-KZyi5J7S.js +1 -0
  97. package/dist/assets/volter-sdk-kit-asset-compare-core-BGGpyCKu.js +1 -0
  98. package/dist/assets/volter-sdk-kit-asset-editor-context-M_zSWvKo.js +1 -0
  99. package/dist/assets/volter-sdk-kit-asset-events-DaU7O5qM.js +1 -0
  100. package/dist/assets/volter-sdk-kit-asset-inspector-actions-DNQnvdZL.js +1 -0
  101. package/dist/assets/volter-sdk-kit-asset-selection-DirKr8vb.js +1 -0
  102. package/dist/assets/volter-sdk-kit-asset-selection-viewer-registry-2zMk4s04.js +1 -0
  103. package/dist/assets/volter-sdk-kit-asset-thumbnails-vJDFNOLA.js +1 -0
  104. package/dist/assets/volter-sdk-kit-asset-viewers-DpBFTexc.js +1 -0
  105. package/dist/assets/volter-sdk-kit-asset-workflow-asset-import-jobs-C00OmRMK.js +1 -0
  106. package/dist/assets/volter-sdk-kit-asset-workflow-asset-ledger-CptyRUZp.js +1 -0
  107. package/dist/assets/volter-sdk-kit-asset-workflow-asset-ledger-backend-CGX_VNfp.js +1 -0
  108. package/dist/assets/volter-sdk-kit-asset-workflow-asset-materialization-report-CZZeu58-.js +1 -0
  109. package/dist/assets/volter-sdk-kit-asset-workflow-asset-pack-manifest-DxLIpPji.js +1 -0
  110. package/dist/assets/volter-sdk-kit-asset-workflow-audio-preview-player-LLtucOSM.js +1 -0
  111. package/dist/assets/volter-sdk-kit-asset-workflow-audio-waveform-CYbl-hOq.js +1 -0
  112. package/dist/assets/volter-sdk-kit-asset-workflow-cloud-asset-client-iTgoIJuw.js +1 -0
  113. package/dist/assets/volter-sdk-kit-asset-workflow-hosted-asset-materialization-DKhc6aFQ.js +1 -0
  114. package/dist/assets/volter-sdk-kit-asset-workflow-image-view-scale-DxNFUfvM.js +1 -0
  115. package/dist/assets/volter-sdk-kit-asset-workflow-ledger-write-lock-kg5BOy3I.js +1 -0
  116. package/dist/assets/volter-sdk-kit-asset-workflow-pixi-spritesheet-Del8mpuy.js +1 -0
  117. package/dist/assets/volter-sdk-kit-asset-workflow-preview-resource-lifetime-C82gwnLj.js +1 -0
  118. package/dist/assets/volter-sdk-kit-asset-workflow-project-asset-commands-DLj22790.js +1 -0
  119. package/dist/assets/volter-sdk-kit-asset-workflow-project-content-BBMEClbZ.js +1 -0
  120. package/dist/assets/volter-sdk-kit-asset-workflow-thumbnail-system-DSHWm5e-.js +1 -0
  121. package/dist/assets/volter-sdk-kit-authoring-active-adapter-BxUiy2zh.js +1 -0
  122. package/dist/assets/volter-sdk-kit-authoring-active-systems-VmhetAka.js +1 -0
  123. package/dist/assets/volter-sdk-kit-authoring-adapter-key-CW8vs24w.js +1 -0
  124. package/dist/assets/volter-sdk-kit-authoring-authoring-asset-url-_xAYFklX.js +1 -0
  125. package/dist/assets/volter-sdk-kit-authoring-bootstrap-state-B3oW9kah.js +1 -0
  126. package/dist/assets/volter-sdk-kit-authoring-boundary-authoring-adapter-CGwSf-EQ.js +1 -0
  127. package/dist/assets/volter-sdk-kit-authoring-canvas-scene-guides-CGbNsubL.js +1 -0
  128. package/dist/assets/volter-sdk-kit-authoring-composite-authoring-adapter-Dzist6So.js +1 -0
  129. package/dist/assets/volter-sdk-kit-authoring-consumer-actions-a0TGhF6U.js +1 -0
  130. package/dist/assets/volter-sdk-kit-authoring-design-time-layers-DDPAis6I.js +1 -0
  131. package/dist/assets/volter-sdk-kit-authoring-design-time-mount-registry-Dce6Xyxq.js +1 -0
  132. package/dist/assets/volter-sdk-kit-authoring-edit-mode-authoring-B2U6Fy6p.js +1 -0
  133. package/dist/assets/volter-sdk-kit-authoring-empty-project-authoring-D_bsSZUG.js +1 -0
  134. package/dist/assets/volter-sdk-kit-authoring-instance-source-menu-Bb09vg6M.js +1 -0
  135. package/dist/assets/volter-sdk-kit-authoring-layered-pick-CMwkZklt.js +1 -0
  136. package/dist/assets/volter-sdk-kit-authoring-mounted-root-subjects-BlzIBeji.js +1 -0
  137. package/dist/assets/volter-sdk-kit-authoring-no-authoring-adapter-V0HXWKVD.js +1 -0
  138. package/dist/assets/volter-sdk-kit-authoring-object3d-document-persistence-6UpTbn4k.js +1 -0
  139. package/dist/assets/volter-sdk-kit-authoring-panel-authoring-DFj1fCZB.js +1 -0
  140. package/dist/assets/volter-sdk-kit-authoring-project-authoring-session-B8_ULt_t.js +1 -0
  141. package/dist/assets/volter-sdk-kit-authoring-provenance-D13XOwFr.js +1 -0
  142. package/dist/assets/volter-sdk-kit-authoring-react-canvas-navigation-CiBqqgbb.js +1 -0
  143. package/dist/assets/volter-sdk-kit-authoring-react-design-canvas-style-iyxr7oZM.js +1 -0
  144. package/dist/assets/volter-sdk-kit-authoring-react-story-board-BzXiuZ7t.js +1 -0
  145. package/dist/assets/volter-sdk-kit-authoring-seam-evidence-DHF-6-LL.js +1 -0
  146. package/dist/assets/volter-sdk-kit-authoring-selection-scope-BDhLhq2I.js +1 -0
  147. package/dist/assets/volter-sdk-kit-authoring-shell-document-ops-DvtAsoMz.js +1 -0
  148. package/dist/assets/volter-sdk-kit-authoring-story-board-chrome-fit-27FxTC_O.js +1 -0
  149. package/dist/assets/volter-sdk-kit-authoring-three-root-Dz6_eahi.js +1 -0
  150. package/dist/assets/volter-sdk-kit-authoring-viewport-tool-context-DpfYBpUT.js +1 -0
  151. package/dist/assets/volter-sdk-kit-authoring-viewport-tool-owner-CfKP58nb.js +1 -0
  152. package/dist/assets/volter-sdk-kit-authoring-world-session-state-DXRrzwuC.js +1 -0
  153. package/dist/assets/volter-sdk-kit-availability-tick-CyW5ugn3.js +1 -0
  154. package/dist/assets/volter-sdk-kit-bitmap-label-D5kyDEEo.js +1 -0
  155. package/dist/assets/volter-sdk-kit-boot-routing-DZHRDEX-.js +1 -0
  156. package/dist/assets/volter-sdk-kit-breakpoint-state-CNKLlzs1.js +1 -0
  157. package/dist/assets/volter-sdk-kit-build-identity-CMr_k1QI.js +1 -0
  158. package/dist/assets/volter-sdk-kit-bytes-codec-BgT_R72Q.js +1 -0
  159. package/dist/assets/volter-sdk-kit-cancellation-reason-DLfIdpSV.js +1 -0
  160. package/dist/assets/volter-sdk-kit-canvas-frames-BM_Y8bUx.js +1 -0
  161. package/dist/assets/volter-sdk-kit-capture-camera-pose-RH4-gX5R.js +1 -0
  162. package/dist/assets/volter-sdk-kit-capture-size-DWId-IPB.js +1 -0
  163. package/dist/assets/volter-sdk-kit-chrome-registry-BOdfgq1e.js +1 -0
  164. package/dist/assets/volter-sdk-kit-chrome-slot-registry-Bk31oHoU.js +1 -0
  165. package/dist/assets/volter-sdk-kit-collaboration-client-6mh7Srlc.js +1 -0
  166. package/dist/assets/volter-sdk-kit-collaboration-presence-ByenuOy4.js +1 -0
  167. package/dist/assets/volter-sdk-kit-command-dispatch-d3_xwdkd.js +1 -0
  168. package/dist/assets/volter-sdk-kit-command-listener-n4AYpNey.js +1 -0
  169. package/dist/assets/volter-sdk-kit-command-registry-8r4aTdX0.js +1 -0
  170. package/dist/assets/volter-sdk-kit-component-board-registry-BJlj_R57.js +1 -0
  171. package/dist/assets/volter-sdk-kit-component-states-registry--2upeZnQ.js +1 -0
  172. package/dist/assets/volter-sdk-kit-components-AlignToolbar-CiNZv2ez.js +1 -0
  173. package/dist/assets/volter-sdk-kit-components-ApplicationMenus-DzYH7jV8.js +1 -0
  174. package/dist/assets/volter-sdk-kit-components-AssetEditorShell-D_Mr8wn7.js +1 -0
  175. package/dist/assets/volter-sdk-kit-components-AssetInspectorToolSection-DVHraE1e.js +1 -0
  176. package/dist/assets/volter-sdk-kit-components-BoardRulers-B0yxrqJf.js +1 -0
  177. package/dist/assets/volter-sdk-kit-components-CanvasAddNodeDialogs-so_I9kO4.js +1 -0
  178. package/dist/assets/volter-sdk-kit-components-CanvasSceneViewport-CAw5YHY8.js +1 -0
  179. package/dist/assets/volter-sdk-kit-components-ChromeSlot-DYKvnA1B.js +1 -0
  180. package/dist/assets/volter-sdk-kit-components-CodeView-CNqyXz6s.js +1 -0
  181. package/dist/assets/volter-sdk-kit-components-CompactInspectorShell-VQCNyfJI.js +1 -0
  182. package/dist/assets/volter-sdk-kit-components-ConsolePanel-CJEXZn32.js +1 -0
  183. package/dist/assets/volter-sdk-kit-components-GameplaySessionTimeline-B5ps1S5p.js +1 -0
  184. package/dist/assets/volter-sdk-kit-components-InspectionProjection-DXWMLJBj.js +1 -0
  185. package/dist/assets/volter-sdk-kit-components-Inspector-D-5acFaK.js +1 -0
  186. package/dist/assets/volter-sdk-kit-components-InspectorCanvasPreview-B-dKPAVC.js +1 -0
  187. package/dist/assets/volter-sdk-kit-components-InspectorFieldsSection-kHWYROqG.js +1 -0
  188. package/dist/assets/volter-sdk-kit-components-InspectorStoriesSection-4C4-OuRQ.js +1 -0
  189. package/dist/assets/volter-sdk-kit-components-InspectorToolSection-7PkpHy6m.js +1 -0
  190. package/dist/assets/volter-sdk-kit-components-InspectorTransformSection-Qb6lncsR.js +1 -0
  191. package/dist/assets/volter-sdk-kit-components-LightExplorerPanel-I5bYPw8G.js +1 -0
  192. package/dist/assets/volter-sdk-kit-components-MediaProperties-DHqaKm53.js +1 -0
  193. package/dist/assets/volter-sdk-kit-components-ProjectHeader-CKdOTd4z.js +1 -0
  194. package/dist/assets/volter-sdk-kit-components-ReactCanvasControls-CKAFAs9E.js +1 -0
  195. package/dist/assets/volter-sdk-kit-components-RootSelectionOverlay-CBcgXqO5.js +1 -0
  196. package/dist/assets/volter-sdk-kit-components-RootTextEditor-Cz67j-4n.js +1 -0
  197. package/dist/assets/volter-sdk-kit-components-SaveStatus-Caz1OAep.js +1 -0
  198. package/dist/assets/volter-sdk-kit-components-SurfaceCrashBoundary-pVJvS10a.js +1 -0
  199. package/dist/assets/volter-sdk-kit-components-SurfaceStateOverlay-wG9w1Ov4.js +1 -0
  200. package/dist/assets/volter-sdk-kit-components-ToolContributionSurfaces-BOrb6QNK.js +1 -0
  201. package/dist/assets/volter-sdk-kit-components-ToolHost-eJh2dHBK.js +1 -0
  202. package/dist/assets/volter-sdk-kit-components-Toolbar-CG76ZyMm.js +1 -0
  203. package/dist/assets/volter-sdk-kit-components-TransientHint-CZ_1_HpT.js +1 -0
  204. package/dist/assets/volter-sdk-kit-components-VersionControlSection-oMLaOizm.js +1 -0
  205. package/dist/assets/volter-sdk-kit-components-ViewportOverlaysMenu-D8gkJZAJ.js +1 -0
  206. package/dist/assets/volter-sdk-kit-components-VolterLogo-CzGpbj4m.js +1 -0
  207. package/dist/assets/volter-sdk-kit-components-WorktreeSwitcher-Mh6Rrnms.js +1 -0
  208. package/dist/assets/volter-sdk-kit-components-account-documents-Dbwqig-x.js +1 -0
  209. package/dist/assets/volter-sdk-kit-components-asset-documents-q07lSorN.js +1 -0
  210. package/dist/assets/volter-sdk-kit-components-asset-editor-persistence-jxfl9-Mb.js +1 -0
  211. package/dist/assets/volter-sdk-kit-components-asset-selection-section-Cfra-fki.js +1 -0
  212. package/dist/assets/volter-sdk-kit-components-asset-thumbnails-98Pzj8gX.js +1 -0
  213. package/dist/assets/volter-sdk-kit-components-asset-viewers-AudioViewer-DBoGqKx3.js +1 -0
  214. package/dist/assets/volter-sdk-kit-components-asset-viewers-GenericJsonViewer-3-gMf79N.js +1 -0
  215. package/dist/assets/volter-sdk-kit-components-asset-viewers-ImageViewer-m3izls7N.js +1 -0
  216. package/dist/assets/volter-sdk-kit-components-asset-viewers-JsonAssetDocument-DFDWUTXA.js +1 -0
  217. package/dist/assets/volter-sdk-kit-components-asset-viewers-OnlineAssetDetail-CQRanNix.js +1 -0
  218. package/dist/assets/volter-sdk-kit-components-asset-viewers-SourceAssetViewer-jdECjyXq.js +1 -0
  219. package/dist/assets/volter-sdk-kit-components-asset-viewers-SpritesheetSpriteView-s7uZ8Ud-.js +1 -0
  220. package/dist/assets/volter-sdk-kit-components-asset-viewers-VideoViewer-DHTFH1Bw.js +1 -0
  221. package/dist/assets/volter-sdk-kit-components-asset-viewers-shader-source-DGbNY6dk.js +1 -0
  222. package/dist/assets/volter-sdk-kit-components-board-guides-CPEc5fFw.js +1 -0
  223. package/dist/assets/volter-sdk-kit-components-canvas-scene-hotkeys-uv02pyDE.js +1 -0
  224. package/dist/assets/volter-sdk-kit-components-canvas-temporary-pivot-T5jgJn2X.js +1 -0
  225. package/dist/assets/volter-sdk-kit-components-core-utilities-CeVE6o2Q.js +1 -0
  226. package/dist/assets/volter-sdk-kit-components-inspector-preview-section-DoVWbcT1.js +1 -0
  227. package/dist/assets/volter-sdk-kit-components-inspector-revert-label-DzXZZ_Vw.js +1 -0
  228. package/dist/assets/volter-sdk-kit-components-inspector-selection-BYfzBGYs.js +1 -0
  229. package/dist/assets/volter-sdk-kit-components-inspector-stories-gating-DwMnLWyF.js +1 -0
  230. package/dist/assets/volter-sdk-kit-components-inspector-transform-BGPtVmG9.js +1 -0
  231. package/dist/assets/volter-sdk-kit-components-inspector-transform-subject-D7ASpnJ3.js +1 -0
  232. package/dist/assets/volter-sdk-kit-components-kind-documents-Ci09TFHE.js +1 -0
  233. package/dist/assets/volter-sdk-kit-components-primitives-DraftColorInput-DTn8M-wN.js +1 -0
  234. package/dist/assets/volter-sdk-kit-components-project-tool-documents-Du8YfSZs.js +1 -0
  235. package/dist/assets/volter-sdk-kit-components-scene-documents-Ch1YT0xR.js +1 -0
  236. package/dist/assets/volter-sdk-kit-components-status-contributions-DFVudgLm.js +1 -0
  237. package/dist/assets/volter-sdk-kit-components-tool-documents-DeonY74x.js +1 -0
  238. package/dist/assets/volter-sdk-kit-components-tool-schema-form-DWgT2ck9.js +1 -0
  239. package/dist/assets/volter-sdk-kit-components-use-after-paint-F8L0rG-5.js +1 -0
  240. package/dist/assets/volter-sdk-kit-components-use-project-image-assets-B3VAx2pv.js +1 -0
  241. package/dist/assets/volter-sdk-kit-components-workspace-history-DUwOTfSr.js +1 -0
  242. package/dist/assets/volter-sdk-kit-components-world-documents-Dh7Mrvlx.js +1 -0
  243. package/dist/assets/volter-sdk-kit-components-world-overlay-gestures-DCce_Nl3.js +1 -0
  244. package/dist/assets/volter-sdk-kit-composite-screenshot-Bx4ZwckJ.js +1 -0
  245. package/dist/assets/volter-sdk-kit-content-entry-source-registry-DHSyAl80.js +1 -0
  246. package/dist/assets/volter-sdk-kit-contribution-surfaces-nLNaCeiS.js +1 -0
  247. package/dist/assets/volter-sdk-kit-coverage-canvas-reveal-BQrkwTWS.js +1 -0
  248. package/dist/assets/volter-sdk-kit-coverage-design-time-surfaces-DTr5Mqz1.js +1 -0
  249. package/dist/assets/volter-sdk-kit-coverage-ontology-invariants-DZWV_DXu.js +1 -0
  250. package/dist/assets/volter-sdk-kit-coverage-session-vitals-C3yMFqYq.js +1 -0
  251. package/dist/assets/volter-sdk-kit-creation-site-registry-GFc34k4W.js +1 -0
  252. package/dist/assets/volter-sdk-kit-delegate-harness-registry-DqCWUU60.js +1 -0
  253. package/dist/assets/volter-sdk-kit-document-areas-BpReVOBg.js +1 -0
  254. package/dist/assets/volter-sdk-kit-document-context-registry-h4QWXnDH.js +1 -0
  255. package/dist/assets/volter-sdk-kit-document-open-registry-Bsut-_gy.js +1 -0
  256. package/dist/assets/volter-sdk-kit-document-play-extension-Dnr7wLlF.js +1 -0
  257. package/dist/assets/volter-sdk-kit-document-preview-source-BIA66PX1.js +1 -0
  258. package/dist/assets/volter-sdk-kit-document-renderer-session-EhLaW1UH.js +1 -0
  259. package/dist/assets/volter-sdk-kit-document-stage-sessions-CNpw0-k6.js +1 -0
  260. package/dist/assets/volter-sdk-kit-document-viewports-BuNTj6gi.js +1 -0
  261. package/dist/assets/volter-sdk-kit-editor-api-DXwcZRxd.js +1 -0
  262. package/dist/assets/volter-sdk-kit-editor-chrome-capture-BbK96TB_.js +1 -0
  263. package/dist/assets/volter-sdk-kit-editor-commands-Cmfp81UC.js +1 -0
  264. package/dist/assets/volter-sdk-kit-editor-console-6m89k936.js +1 -0
  265. package/dist/assets/volter-sdk-kit-editor-current-view-BnPHVBt8.js +1 -0
  266. package/dist/assets/volter-sdk-kit-editor-document-probe-CX5IycrS.js +1 -0
  267. package/dist/assets/volter-sdk-kit-editor-git-client-CMxMJwge.js +1 -0
  268. package/dist/assets/volter-sdk-kit-editor-hotkeys-CEfK3Frz.js +1 -0
  269. package/dist/assets/volter-sdk-kit-editor-lease-CTRjPMBI.js +1 -0
  270. package/dist/assets/volter-sdk-kit-editor-lease-view-DddtK_ty.js +1 -0
  271. package/dist/assets/volter-sdk-kit-editor-mode-DH2KoL5W.js +1 -0
  272. package/dist/assets/volter-sdk-kit-editor-notifications-DG2RbDdr.js +1 -0
  273. package/dist/assets/volter-sdk-kit-editor-presence-B8lJuaMQ.js +1 -0
  274. package/dist/assets/volter-sdk-kit-editor-presentation-activity-BhtHqZzE.js +1 -0
  275. package/dist/assets/volter-sdk-kit-editor-presentation-notice-SjwjzlrG.js +1 -0
  276. package/dist/assets/volter-sdk-kit-editor-runtime-D-Kv52Vn.js +1 -0
  277. package/dist/assets/volter-sdk-kit-editor-server-response-BlyTrVzB.js +1 -0
  278. package/dist/assets/volter-sdk-kit-editor-session-attribution-DlmzCvu5.js +1 -0
  279. package/dist/assets/volter-sdk-kit-editor-session-mode-BFDmZGNs.js +1 -0
  280. package/dist/assets/volter-sdk-kit-editor-state-facets-C8uSztkB.js +1 -0
  281. package/dist/assets/volter-sdk-kit-editor-view-presentation-D7sN2Io2.js +1 -0
  282. package/dist/assets/volter-sdk-kit-environment-images-gEkxtdDw.js +1 -0
  283. package/dist/assets/volter-sdk-kit-eyedropper-session-iQlcdsrF.js +1 -0
  284. package/dist/assets/volter-sdk-kit-files-file-provider-BM3D7Hxu.js +1 -0
  285. package/dist/assets/volter-sdk-kit-files-project-files-D96nDy7l.js +1 -0
  286. package/dist/assets/volter-sdk-kit-finders-index-DzGUJ4WO.js +1 -0
  287. package/dist/assets/volter-sdk-kit-finders-scenes-from-entrypoint-selection-BA3rf3j1.js +1 -0
  288. package/dist/assets/volter-sdk-kit-frame-frame-parts-2X8KuSIz.js +1 -0
  289. package/dist/assets/volter-sdk-kit-framed-document-capture-D8DGqqBo.js +1 -0
  290. package/dist/assets/volter-sdk-kit-game-surface-defaults-B8_7dFSa.js +1 -0
  291. package/dist/assets/volter-sdk-kit-gameplay-export-state-CTdz6Niu.js +1 -0
  292. package/dist/assets/volter-sdk-kit-gameplay-replay-D9LpPdzN.js +1 -0
  293. package/dist/assets/volter-sdk-kit-gameplay-session-time-CiWOAIvT.js +1 -0
  294. package/dist/assets/volter-sdk-kit-gameplay-sessions-BsqD2wAY.js +1 -0
  295. package/dist/assets/volter-sdk-kit-hierarchy-component-marks-DDQfNYKr.js +1 -0
  296. package/dist/assets/volter-sdk-kit-hierarchy-internals-yY_mjHaI.js +1 -0
  297. package/dist/assets/volter-sdk-kit-hierarchy-kind-icon-hat-40TT.js +1 -0
  298. package/dist/assets/volter-sdk-kit-hierarchy-menu-registry-vt0tpTZ8.js +1 -0
  299. package/dist/assets/volter-sdk-kit-hierarchy-node-rows-C3h8jMft.js +1 -0
  300. package/dist/assets/volter-sdk-kit-hierarchy-panel-view-DYeu5Gss.js +1 -0
  301. package/dist/assets/volter-sdk-kit-hierarchy-projection-DAJVvdEm.js +1 -0
  302. package/dist/assets/volter-sdk-kit-hierarchy-row-media-gsL26sRz.js +1 -0
  303. package/dist/assets/volter-sdk-kit-hierarchy-row-model-DHGRUiLM.js +1 -0
  304. package/dist/assets/volter-sdk-kit-hierarchy-rows-uQY5gDYt.js +1 -0
  305. package/dist/assets/volter-sdk-kit-hierarchy-walk-CTC6Etjc.js +1 -0
  306. package/dist/assets/volter-sdk-kit-history-editor-session-Ca2bFgGi.js +1 -0
  307. package/dist/assets/volter-sdk-kit-history-history-commands-DLBwl4Hd.js +1 -0
  308. package/dist/assets/volter-sdk-kit-history-history-delegate-3OiooMej.js +1 -0
  309. package/dist/assets/volter-sdk-kit-history-history-limit-notices-DXi28Jld.js +1 -0
  310. package/dist/assets/volter-sdk-kit-history-history-service-kr1hZRoU.js +1 -0
  311. package/dist/assets/volter-sdk-kit-history-persistence-coordinator-bbObuDbt.js +1 -0
  312. package/dist/assets/volter-sdk-kit-history-project-file-history-BzIwuOcz.js +1 -0
  313. package/dist/assets/volter-sdk-kit-history-project-root-history-backends-BNm9dOmX.js +1 -0
  314. package/dist/assets/volter-sdk-kit-history-resource-registry-CUXFY-oI.js +1 -0
  315. package/dist/assets/volter-sdk-kit-history-snapshot-store-BO_X174w.js +1 -0
  316. package/dist/assets/volter-sdk-kit-history-source-history-backend-Dbou8wZe.js +1 -0
  317. package/dist/assets/volter-sdk-kit-hmr-registration-group-DokR-9Y2.js +1 -0
  318. package/dist/assets/volter-sdk-kit-hmr-stable-react-context-BZd9eBK4.js +1 -0
  319. package/dist/assets/volter-sdk-kit-hotkeys-BFqIb2IE.js +1 -0
  320. package/dist/assets/volter-sdk-kit-inference-diagnostics-DvJL1JAP.js +1 -0
  321. package/dist/assets/volter-sdk-kit-initial-project-BonNLqRW.js +1 -0
  322. package/dist/assets/volter-sdk-kit-inspection-active-subject-BAJCvCLY.js +1 -0
  323. package/dist/assets/volter-sdk-kit-inspection-active-surface-icBYCaHR.js +1 -0
  324. package/dist/assets/volter-sdk-kit-inspection-compose-subject-DHrhix9n.js +1 -0
  325. package/dist/assets/volter-sdk-kit-inspection-display-DrofUfiU.js +1 -0
  326. package/dist/assets/volter-sdk-kit-inspection-document-subject-CI0aalrz.js +1 -0
  327. package/dist/assets/volter-sdk-kit-inspection-game-subject-GXwOrcl1.js +1 -0
  328. package/dist/assets/volter-sdk-kit-inspection-model-CAzunjkJ.js +1 -0
  329. package/dist/assets/volter-sdk-kit-inspection-node-media-DUbhfpyi.js +1 -0
  330. package/dist/assets/volter-sdk-kit-inspection-null-subject-DDu9eiuR.js +1 -0
  331. package/dist/assets/volter-sdk-kit-inspection-serialize-Ca5VK8TD.js +1 -0
  332. package/dist/assets/volter-sdk-kit-inspection-use-active-inspection-OLA0PBhX.js +1 -0
  333. package/dist/assets/volter-sdk-kit-inspector-presentation-v3Dd6aiU.js +1 -0
  334. package/dist/assets/volter-sdk-kit-inspector-property-grouping-0LgfwmIq.js +1 -0
  335. package/dist/assets/volter-sdk-kit-inspector-section-registry-DMhI2PuF.js +1 -0
  336. package/dist/assets/volter-sdk-kit-instance-source-actions-BniKGWCD.js +1 -0
  337. package/dist/assets/volter-sdk-kit-js-heap-D_k6ggRo.js +1 -0
  338. package/dist/assets/volter-sdk-kit-key-actions-CxnQwK8i.js +1 -0
  339. package/dist/assets/volter-sdk-kit-keymap-presets-BbO1GGLM.js +1 -0
  340. package/dist/assets/volter-sdk-kit-layout-policy-CKAA_Jn5.js +1 -0
  341. package/dist/assets/volter-sdk-kit-light-explorer-model-vZvDDwqC.js +1 -0
  342. package/dist/assets/volter-sdk-kit-live-canvas-frame-reNARBbE.js +1 -0
  343. package/dist/assets/volter-sdk-kit-live-document-Brotm2Qm.js +1 -0
  344. package/dist/assets/volter-sdk-kit-live-gesture-lock-CdoLLHOD.js +1 -0
  345. package/dist/assets/volter-sdk-kit-live-seam-evidence-jKL3n__8.js +1 -0
  346. package/dist/assets/volter-sdk-kit-live-session-registry-8Lji_Dgk.js +1 -0
  347. package/dist/assets/volter-sdk-kit-live-transition-CMLrfhxg.js +1 -0
  348. package/dist/assets/volter-sdk-kit-manifest-project-Dgihq_CM.js +1 -0
  349. package/dist/assets/volter-sdk-kit-module-fetch-diagnosis-C8oBpgml.js +1 -0
  350. package/dist/assets/volter-sdk-kit-mount-failure-report-DxOf95Sz.js +1 -0
  351. package/dist/assets/volter-sdk-kit-native-selection-style-rJyrRoU1.js +1 -0
  352. package/dist/assets/volter-sdk-kit-object3d-document-write-policy-CGuHVDNP.js +1 -0
  353. package/dist/assets/volter-sdk-kit-packaged-runtime--HEj501Q.js +1 -0
  354. package/dist/assets/volter-sdk-kit-performance-profiler-sat5agtE.js +1 -0
  355. package/dist/assets/volter-sdk-kit-performance-sources-Db3RTE8l.js +1 -0
  356. package/dist/assets/volter-sdk-kit-photograph-notice-Dw_OdYBc.js +1 -0
  357. package/dist/assets/volter-sdk-kit-play-boot-phase-CwaVYSQo.js +1 -0
  358. package/dist/assets/volter-sdk-kit-play-camera-flight-5mfUC0Zf.js +1 -0
  359. package/dist/assets/volter-sdk-kit-presentation-surface-DgfazB_k.js +1 -0
  360. package/dist/assets/volter-sdk-kit-product-command-VtmL88nk.js +1 -0
  361. package/dist/assets/volter-sdk-kit-project-adapter-Xw_Y-908.js +1 -0
  362. package/dist/assets/volter-sdk-kit-project-asset-refresh-B5Pl3j_B.js +1 -0
  363. package/dist/assets/volter-sdk-kit-project-asset-roots-B5-xEHVV.js +1 -0
  364. package/dist/assets/volter-sdk-kit-project-local-state-B99ZJ4fp.js +1 -0
  365. package/dist/assets/volter-sdk-kit-project-manager-B9VUIcqj.js +1 -0
  366. package/dist/assets/volter-sdk-kit-project-module-changes-CSjBPmxU.js +1 -0
  367. package/dist/assets/volter-sdk-kit-project-module-split-CRSPgtUT.js +1 -0
  368. package/dist/assets/volter-sdk-kit-project-provenance-Cp7ojKln.js +1 -0
  369. package/dist/assets/volter-sdk-kit-project-ready-DnmQDekk.js +1 -0
  370. package/dist/assets/volter-sdk-kit-project-shape-BTZFZR7i.js +1 -0
  371. package/dist/assets/volter-sdk-kit-project-tools-CtxTarSf.js +1 -0
  372. package/dist/assets/volter-sdk-kit-readiness-BMtOiiFi.js +1 -0
  373. package/dist/assets/volter-sdk-kit-renderer-resource-counts-De8QRV0a.js +1 -0
  374. package/dist/assets/volter-sdk-kit-reported-play-state-BXKNSieM.js +1 -0
  375. package/dist/assets/volter-sdk-kit-resolve-contributed-command-Buvg2G9m.js +1 -0
  376. package/dist/assets/volter-sdk-kit-resolve-relative-specifier-Y9zNJ1fg.js +1 -0
  377. package/dist/assets/volter-sdk-kit-retained-document-states-B_rMedrB.js +1 -0
  378. package/dist/assets/volter-sdk-kit-scene-document-plan-C3B-BeR-.js +1 -0
  379. package/dist/assets/volter-sdk-kit-scene-live-open-DeHpTATs.js +1 -0
  380. package/dist/assets/volter-sdk-kit-scoped-game-css-CyjKWEoj.js +1 -0
  381. package/dist/assets/volter-sdk-kit-served-url-CqwbU14d.js +1 -0
  382. package/dist/assets/volter-sdk-kit-session-close-Cky2WmF4.js +1 -0
  383. package/dist/assets/volter-sdk-kit-session-tombstone-x4b5dE0D.js +1 -0
  384. package/dist/assets/volter-sdk-kit-settings-settings-provider-D5xY_ycx.js +1 -0
  385. package/dist/assets/volter-sdk-kit-settings-store-cQRLMOjT.js +1 -0
  386. package/dist/assets/volter-sdk-kit-shell-store-door-D-GgCwa8.js +1 -0
  387. package/dist/assets/volter-sdk-kit-shell-store-yjr4tC_5.js +1 -0
  388. package/dist/assets/volter-sdk-kit-source-conflict-B6wxxc3L.js +1 -0
  389. package/dist/assets/volter-sdk-kit-stage-context-CyVQ6GFM.js +1 -0
  390. package/dist/assets/volter-sdk-kit-stage-invalidation-DLBg5l-f.js +1 -0
  391. package/dist/assets/volter-sdk-kit-stage-store-registry-C6UVdwEB.js +1 -0
  392. package/dist/assets/volter-sdk-kit-startup-failure-C_vNdlH4.js +1 -0
  393. package/dist/assets/volter-sdk-kit-state-report-deferral-BJ_dsrDV.js +1 -0
  394. package/dist/assets/volter-sdk-kit-storage-host-files-storage-CXwZNOlA.js +1 -0
  395. package/dist/assets/volter-sdk-kit-storage-http-storage-Bhevn2WU.js +1 -0
  396. package/dist/assets/volter-sdk-kit-storage-index-S82TOyGN.js +1 -0
  397. package/dist/assets/volter-sdk-kit-storage-mem-storage-DINeocEt.js +1 -0
  398. package/dist/assets/volter-sdk-kit-storage-path-lock-gH0K6boV.js +1 -0
  399. package/dist/assets/volter-sdk-kit-storage-paths-CKDiJr8B.js +1 -0
  400. package/dist/assets/volter-sdk-kit-stories-StoryPreviewMount-BmQPNsEP.js +1 -0
  401. package/dist/assets/volter-sdk-kit-stories-compose-project-stories-Cy5zTMkm.js +1 -0
  402. package/dist/assets/volter-sdk-kit-stories-prefabs-finder-BHL82LAh.js +1 -0
  403. package/dist/assets/volter-sdk-kit-stories-prefabs-from-stories-DTNNX4cl.js +1 -0
  404. package/dist/assets/volter-sdk-kit-stories-project-story-regions-D_YjyDyE.js +1 -0
  405. package/dist/assets/volter-sdk-kit-stories-scope-24yPysU7.js +1 -0
  406. package/dist/assets/volter-sdk-kit-stories-story-capture-BEKuIyYL.js +1 -0
  407. package/dist/assets/volter-sdk-kit-stories-story-declared-medium-05xRaehz.js +1 -0
  408. package/dist/assets/volter-sdk-kit-stories-story-discovery-Cdlg6305.js +1 -0
  409. package/dist/assets/volter-sdk-kit-stories-story-dom-runtime-CDvJoNPe.js +1 -0
  410. package/dist/assets/volter-sdk-kit-stories-story-grouping-DgtmbpJ7.js +1 -0
  411. package/dist/assets/volter-sdk-kit-stories-story-presentation-Casxif9e.js +1 -0
  412. package/dist/assets/volter-sdk-kit-stories-story-registry-BvHoY8Zf.js +1 -0
  413. package/dist/assets/volter-sdk-kit-story-document-openers-Dgf-awp5.js +1 -0
  414. package/dist/assets/volter-sdk-kit-story-thumbnails-C0DMx300.js +1 -0
  415. package/dist/assets/volter-sdk-kit-surface-keyboard-a7u-xvWh.js +1 -0
  416. package/dist/assets/volter-sdk-kit-surface-state-B3xeZgFt.js +1 -0
  417. package/dist/assets/volter-sdk-kit-system-seam-evidence-CCQZFekd.js +1 -0
  418. package/dist/assets/volter-sdk-kit-tab-census-DUFqFdYA.js +1 -0
  419. package/dist/assets/volter-sdk-kit-tab-lifecycle-client-CyLGzEsH.js +1 -0
  420. package/dist/assets/volter-sdk-kit-theme-library-ChB7TH1t.js +1 -0
  421. package/dist/assets/volter-sdk-kit-theme-preference-C3F0pO3f.js +1 -0
  422. package/dist/assets/volter-sdk-kit-three-viewport-presentation-3YG5TslE.js +1 -0
  423. package/dist/assets/volter-sdk-kit-tool-contribution-play-DTY5CEgV.js +1 -0
  424. package/dist/assets/volter-sdk-kit-tool-loader-CCHQfqsF.js +1 -0
  425. package/dist/assets/volter-sdk-kit-transform-mode-request-Cdt2Pfc3.js +1 -0
  426. package/dist/assets/volter-sdk-kit-transient-hint-Dt57gjFB.js +1 -0
  427. package/dist/assets/volter-sdk-kit-transport-strip-tkdyj5iV.js +1 -0
  428. package/dist/assets/volter-sdk-kit-ui-source-file-region-resolver-C4U6uEKj.js +1 -0
  429. package/dist/assets/volter-sdk-kit-ui-source-inspect-YfMT6kQG.js +1 -0
  430. package/dist/assets/volter-sdk-kit-ui-source-source-write-backend-B6e9iBkt.js +1 -0
  431. package/dist/assets/volter-sdk-kit-ui-source-tier-source-write-backend-0ccn1WGm.js +1 -0
  432. package/dist/assets/volter-sdk-kit-user-local-state-CXD142zV.js +1 -0
  433. package/dist/assets/volter-sdk-kit-viewport-activation-timings-BWwEoQaL.js +1 -0
  434. package/dist/assets/volter-sdk-kit-viewport-editor-controls-DCILD0rx.js +1 -0
  435. package/dist/assets/volter-sdk-kit-viewport-presentation-Btm4dnQO.js +1 -0
  436. package/dist/assets/volter-sdk-kit-viewport-surface-status-B0--I6Fh.js +1 -0
  437. package/dist/assets/volter-sdk-kit-wait-until-D7BruTbg.js +1 -0
  438. package/dist/assets/volter-sdk-kit-worker-call-metrics-DikUbFEi.js +1 -0
  439. package/dist/assets/volter-sdk-kit-workspace-areas-BMqjyNIV.js +1 -0
  440. package/dist/assets/volter-sdk-kit-workspace-aux-commands-B1SpyMqR.js +1 -0
  441. package/dist/assets/volter-sdk-kit-workspace-available-documents-DGwQobaL.js +1 -0
  442. package/dist/assets/volter-sdk-kit-workspace-core-utilities-C6ZgxYOQ.js +1 -0
  443. package/dist/assets/volter-sdk-kit-workspace-document-ids-C3awSc5H.js +1 -0
  444. package/dist/assets/volter-sdk-kit-workspace-document-registry-DphKq5ll.js +1 -0
  445. package/dist/assets/volter-sdk-kit-workspace-document-restore-C91CVSCH.js +1 -0
  446. package/dist/assets/volter-sdk-kit-workspace-host-commands-B5DmiPFl.js +1 -0
  447. package/dist/assets/volter-sdk-kit-workspace-persistence-gate-Hbf78fPK.js +1 -0
  448. package/dist/assets/volter-sdk-kit-workspace-play-utilities-CJabpKW8.js +1 -0
  449. package/dist/assets/volter-sdk-kit-workspace-presets-Bmsw8CG_.js +1 -0
  450. package/dist/assets/volter-sdk-kit-workspace-regions-BHVn1Aey.js +1 -0
  451. package/dist/assets/volter-sdk-kit-workspace-static-panels-CkHThB18.js +1 -0
  452. package/dist/assets/volter-sdk-kit-workspace-status-registry-sQbulMKn.js +1 -0
  453. package/dist/assets/volter-sdk-kit-workspace-storage-B9kOguh-.js +1 -0
  454. package/dist/assets/volter-sdk-kit-workspace-style-xAhYw_hR.js +1 -0
  455. package/dist/assets/volter-sdk-kit-workspace-utility-commands-CKwj5XR7.js +1 -0
  456. package/dist/assets/volter-sdk-kit-workspace-utility-registry-CmxfAHgq.js +1 -0
  457. package/dist/assets/volter-sdk-kit-world-adoption-uKkfoWJN.js +1 -0
  458. package/dist/assets/volter-sdk-kit-world-canvas-viewport-state-ivVooVbq.js +1 -0
  459. package/dist/assets/volter-sdk-kit-world-document-routing-DdA3J0yu.js +1 -0
  460. package/dist/assets/volter-sdk-kit-world-pan-state-ChlD977O.js +1 -0
  461. package/dist/assets/volter-sdk-kit-write-pipe-DmjD7ASL.js +1 -0
  462. package/dist/assets/volter-sdk-layout-arrangements-BV-rtqcD.js +1 -0
  463. package/dist/assets/volter-sdk-layouts-DQOzCulb.js +1 -0
  464. package/dist/assets/volter-sdk-selection-DcYKyCj2.js +1 -0
  465. package/dist/assets/volter-sdk-session-command-table-CpHcTWJ9.js +1 -0
  466. package/dist/assets/volter-sdk-session-editor-brand-0h4ZK_ou.js +1 -0
  467. package/dist/assets/volter-sdk-session-editor-compatibility-D5QRyxtv.js +1 -0
  468. package/dist/assets/volter-sdk-session-editor-control-protocol-eTblxxXS.js +1 -0
  469. package/dist/assets/volter-sdk-session-entrypoint-selection-readers-BLapOYBD.js +1 -0
  470. package/dist/assets/volter-sdk-session-game-css-scope-36SakZV0.js +1 -0
  471. package/dist/assets/volter-sdk-session-project-module-url-B9BjVL-W.js +1 -0
  472. package/dist/assets/volter-sdk-session-relative-path-guard-D6GsYmxe.js +1 -0
  473. package/dist/assets/volter-sdk-session-tool-contribution-convention-dJHJyi2s.js +1 -0
  474. package/dist/assets/volter-sdk-types-h05r24VY.js +1 -0
  475. package/dist/assets/volter-sdk-views-D9dseLRk.js +1 -0
  476. package/dist/assets/volter-sdk-widgets-design-system-VeNDGOle.js +1 -0
  477. package/dist/assets/volter-sdk-widgets-editor-appearance-DI6pqf5L.js +1 -0
  478. package/dist/assets/volter-sdk-widgets-editor-material-DpaSpCox.js +1 -0
  479. package/dist/assets/volter-sdk-widgets-icon-set-registry-CPrg-BlH.js +1 -0
  480. package/dist/assets/volter-sdk-widgets-index-Cya8_9-f.js +1 -0
  481. package/dist/assets/volter-sdk-widgets-inspector-widgets-AlignmentGrid-Bv4mj-uG.js +1 -0
  482. package/dist/assets/volter-sdk-widgets-inspector-widgets-AssetSlotPicker-DUOHH6Fk.js +1 -0
  483. package/dist/assets/volter-sdk-widgets-inspector-widgets-BorderEditor-BvRGHRfR.js +1 -0
  484. package/dist/assets/volter-sdk-widgets-inspector-widgets-ColorPicker-AwFOXbba.js +1 -0
  485. package/dist/assets/volter-sdk-widgets-inspector-widgets-CurveEditor-PQRwu0Sj.js +1 -0
  486. package/dist/assets/volter-sdk-widgets-inspector-widgets-FilterEditor-Dy6YkFnK.js +1 -0
  487. package/dist/assets/volter-sdk-widgets-inspector-widgets-FontPicker-Df106_ox.js +1 -0
  488. package/dist/assets/volter-sdk-widgets-inspector-widgets-GradientEditor-Dy-tWXMs.js +1 -0
  489. package/dist/assets/volter-sdk-widgets-inspector-widgets-ScrubbableInput-DlbDGo5Y.js +1 -0
  490. package/dist/assets/volter-sdk-widgets-inspector-widgets-ShadowEditor-DUicJwPI.js +1 -0
  491. package/dist/assets/volter-sdk-widgets-inspector-widgets-color-utils-eui_cY6m.js +1 -0
  492. package/dist/assets/volter-sdk-widgets-inspector-widgets-curve-utils-C5A88ghS.js +1 -0
  493. package/dist/assets/volter-sdk-widgets-inspector-widgets-index-Cuat5_mN.js +1 -0
  494. package/dist/assets/volter-sdk-widgets-inspector-widgets-shared-Bflb3QF6.js +1 -0
  495. package/dist/assets/volter-sdk-widgets-interactive-edit-scope-BE9nodfE.js +1 -0
  496. package/dist/assets/volter-sdk-widgets-patterns-Dialog-Cmf9dI1s.js +1 -0
  497. package/dist/assets/volter-sdk-widgets-patterns-Fields-BZi0XHNm.js +1 -0
  498. package/dist/assets/volter-sdk-widgets-patterns-List-DyaHdy3M.js +1 -0
  499. package/dist/assets/volter-sdk-widgets-patterns-StateSurface-BYVsyF0W.js +1 -0
  500. package/dist/assets/volter-sdk-widgets-patterns-Surfaces-CY3SjTNC.js +1 -0
  501. package/dist/assets/volter-sdk-widgets-patterns-Tabs-D4OuYIX3.js +1 -0
  502. package/dist/assets/volter-sdk-widgets-patterns-Toolbar-B0jrVqW_.js +1 -0
  503. package/dist/assets/volter-sdk-widgets-patterns-Tree-C6_tidhs.js +1 -0
  504. package/dist/assets/volter-sdk-widgets-primitives-AnchoredMenu-B-XMEiAc.js +1 -0
  505. package/dist/assets/volter-sdk-widgets-primitives-Button-CIBH2B7E.js +1 -0
  506. package/dist/assets/volter-sdk-widgets-primitives-ColorInput-DFPqOyaK.js +1 -0
  507. package/dist/assets/volter-sdk-widgets-primitives-DraftTextInput-DfnAY4s9.js +1 -0
  508. package/dist/assets/volter-sdk-widgets-primitives-EditorIcon-Djh9G6vx.js +1 -0
  509. package/dist/assets/volter-sdk-widgets-primitives-FormControls-nKzEEszM.js +1 -0
  510. package/dist/assets/volter-sdk-widgets-primitives-HoverPreview-DnSW8vm5.js +1 -0
  511. package/dist/assets/volter-sdk-widgets-primitives-JsonInput-B0qUsEj9.js +1 -0
  512. package/dist/assets/volter-sdk-widgets-primitives-Layout-BRz6LF6Z.js +1 -0
  513. package/dist/assets/volter-sdk-widgets-primitives-Menu-C7DWCEBM.js +1 -0
  514. package/dist/assets/volter-sdk-widgets-primitives-NumberInput-DD957NFV.js +1 -0
  515. package/dist/assets/volter-sdk-widgets-primitives-Panel-DCGHznF0.js +1 -0
  516. package/dist/assets/volter-sdk-widgets-primitives-SectionHeader-Dhmqzwzv.js +1 -0
  517. package/dist/assets/volter-sdk-widgets-primitives-Text-HKY7PI0B.js +1 -0
  518. package/dist/assets/volter-sdk-widgets-primitives-ThemeRootPortal-pA57zg1c.js +1 -0
  519. package/dist/assets/volter-sdk-widgets-primitives-Tooltip-Cy5OfGxU.js +1 -0
  520. package/dist/assets/volter-sdk-widgets-primitives-Vec3Input-BFpLSKZq.js +1 -0
  521. package/dist/assets/volter-sdk-widgets-primitives-banner-tones-WZrE2BkU.js +1 -0
  522. package/dist/assets/volter-sdk-widgets-primitives-clamp-to-viewport-CuAgbReG.js +1 -0
  523. package/dist/assets/volter-sdk-widgets-primitives-editor-icons-egXQAepT.js +1 -0
  524. package/dist/assets/volter-sdk-widgets-primitives-panel-header-styles-Cj5ge_Sn.js +1 -0
  525. package/dist/assets/volter-sdk-widgets-theme-DZfoy9UH.js +1 -0
  526. package/dist/assets/volter-sdk-widgets-z-index-BgXU6gF9.js +1 -0
  527. package/dist/assets/volter-shared-fontawesome-CJtWsAa5.js +1 -0
  528. package/dist/assets/volter-shared-jsx-dev-runtime-DE65WWqS.js +1 -0
  529. package/dist/assets/volter-shared-jsx-runtime-DVSK9k9G.js +1 -0
  530. package/dist/assets/volter-shared-react-D7esH4L1.js +1 -0
  531. package/dist/assets/volter-shared-react-dom-CqXNyca_.js +1 -0
  532. package/dist/assets/volter-shared-react-dom-client-Ctokfwqy.js +1 -0
  533. package/dist/assets/worker-CxcSX7C7.js +8 -0
  534. package/dist/volter-shared-react.json +6 -6
  535. package/dist/volter-shared-sdk.json +462 -461
  536. package/dist-node/cli.js +16439 -2224
  537. package/dist-node/create.js +48 -42
  538. package/package.json +17 -15
  539. package/starter/AGENTS.md +30 -7
  540. package/starter/add-play/game-state.ts +25 -0
  541. package/starter/add-play/game.tsx +16 -0
  542. package/starter/add-play/model.play.ts +77 -0
  543. package/starter/package.json +5 -0
  544. package/starter/playable/src/models/canyon.blend +0 -0
  545. package/starter/playable/src/models/canyon.play.ts +107 -0
  546. package/starter/playable/src/models/canyon.py +55 -0
  547. package/starter/playable/src/models/circuit.py +131 -0
  548. package/starter/playable/src/models/complete_environment.py +35 -0
  549. package/starter/playable/src/models/course.ts +12 -0
  550. package/starter/playable/src/models/detail.py +44 -0
  551. package/starter/playable/src/models/driver_details.py +25 -0
  552. package/starter/playable/src/models/environment.py +87 -0
  553. package/starter/playable/src/models/finish_scene.py +13 -0
  554. package/starter/playable/src/models/kart_finish.py +31 -0
  555. package/starter/playable/src/models/polish.py +75 -0
  556. package/starter/playable/src/models/race-state.ts +15 -0
  557. package/starter/playable/src/models/refine.py +69 -0
  558. package/starter/playable/src/models/scene_helpers.py +54 -0
  559. package/starter/playable/src/models/scenery_ao.py +114 -0
  560. package/starter/playable/src/textures/asphalt.png +0 -0
  561. package/starter/playable/src/textures/generate.py +16 -0
  562. package/starter/playable/src/textures/sandstone.png +0 -0
  563. package/starter/playable/src/ui/game.stories.tsx +16 -0
  564. package/starter/playable/src/ui/game.tsx +6 -0
  565. package/starter/playable/src/ui/race-hud.tsx +29 -0
  566. package/starter/playable/src/ui/race-widgets.tsx +29 -0
  567. package/dist/assets/EntityModelDocument-CTv9neQl.js +0 -1
  568. package/dist/assets/EnvironmentAssetDocument-DvAItQDN.js +0 -1
  569. package/dist/assets/InspectorObjectPreview-OFjo-0If.js +0 -1
  570. package/dist/assets/LiveModuleDocument-B9tzWNvZ.js +0 -2
  571. package/dist/assets/LutAssetDocument-Lkh76TK_.js +0 -1
  572. package/dist/assets/ModelAssetDocument-BglGVCWf.js +0 -1
  573. package/dist/assets/NonThreeAuthoringBootstrap-BKYj1ZrL.js +0 -1
  574. package/dist/assets/Object3DDocumentToolbar-BWlPaJaR.js +0 -1
  575. package/dist/assets/Object3DPreview-Dq9NnHY-.js +0 -2
  576. package/dist/assets/QuarksAssetDocument-DFzUXgdw.js +0 -2
  577. package/dist/assets/ShaderAssetDocument-BOH6xjVq.js +0 -1
  578. package/dist/assets/StageHost-CUsLgJ9L.js +0 -1179
  579. package/dist/assets/ToolObject3DPreview-BU1QqwGb.js +0 -1
  580. package/dist/assets/ViewportShadingMenu-D8-tD90k.js +0 -1
  581. package/dist/assets/animation-mixers.service-BHZrQ6o9.js +0 -1
  582. package/dist/assets/animation-timeline.utility-BskUV9h5.js +0 -1
  583. package/dist/assets/asset-preview-BIeLrVDi.js +0 -4
  584. package/dist/assets/blender-emscripten-engine-DnJ85_-l.js +0 -2
  585. package/dist/assets/blender-node-editor.document-BZ3tDB0q.js +0 -1
  586. package/dist/assets/blender-properties-model-BFVxUxVu.js +0 -1
  587. package/dist/assets/blender-properties-tab-B7i6JVHg.js +0 -3
  588. package/dist/assets/blender-runtime-host-DKtrkHfq.js +0 -7221
  589. package/dist/assets/blender-runtime.document-CAJqbDlw.js +0 -13
  590. package/dist/assets/blender-screenshot.menu-BX8Qhz1K.js +0 -1
  591. package/dist/assets/blender-timeline.document-C_-4SumN.js +0 -1
  592. package/dist/assets/blender-uv-editor.document-C3yFk1L3.js +0 -1
  593. package/dist/assets/blender-version.status-BHmvomjL.js +0 -1
  594. package/dist/assets/blender-wali-engine-x-OfFUGX.js +0 -2
  595. package/dist/assets/blender.command-D7cBLV--.js +0 -1
  596. package/dist/assets/blender.status-DBj_h-w4.js +0 -1
  597. package/dist/assets/model-inspection-B7nJafQh.js +0 -1
  598. package/dist/assets/models.finder-821wCb5Q.js +0 -1
  599. package/dist/assets/object3d-document-session-registry-8bXWdrtp.js +0 -2
  600. package/dist/assets/play-mode-Cyjf00rK.js +0 -1
  601. package/dist/assets/product-kevIo93n.js +0 -14
  602. package/dist/assets/properties-bone-constraints.inspector-DbVQ-Rhq.js +0 -1
  603. package/dist/assets/properties-bone.inspector-BC7RAwED.js +0 -1
  604. package/dist/assets/properties-collection.inspector-DxJ61nVT.js +0 -1
  605. package/dist/assets/properties-constraints.inspector-CPeEVT5H.js +0 -1
  606. package/dist/assets/properties-data.inspector-BJlOtPcJ.js +0 -1
  607. package/dist/assets/properties-material.inspector-W5GbcQkT.js +0 -1
  608. package/dist/assets/properties-modifiers.inspector-BC0A_0Hu.js +0 -1
  609. package/dist/assets/properties-object.inspector-1fljhcYU.js +0 -1
  610. package/dist/assets/properties-output.inspector-C6KX8AJp.js +0 -1
  611. package/dist/assets/properties-particles.inspector-C1sPoMG7.js +0 -1
  612. package/dist/assets/properties-physics.inspector-C6hw0Y6I.js +0 -1
  613. package/dist/assets/properties-render.inspector-BC0jynlC.js +0 -1
  614. package/dist/assets/properties-scene.inspector-BcUUDycu.js +0 -1
  615. package/dist/assets/properties-texture.inspector-2s_zlduK.js +0 -1
  616. package/dist/assets/properties-view-layer.inspector-D2JLsZ4Z.js +0 -1
  617. package/dist/assets/properties-world.inspector-B2J5kXoP.js +0 -1
  618. package/dist/assets/react-18-Ltq8GJhW.js +0 -1
  619. package/dist/assets/session-rpZf0raD.js +0 -5972
  620. package/dist/assets/stage-keyboard-SPi6G9qU.js +0 -1
  621. package/dist/assets/stage-overlay-set-CSHPvCH_.js +0 -1
  622. package/dist/assets/stage-presence-markers-BfZdDdP7.js +0 -1
  623. package/dist/assets/stage-transform-tools-Bp2cs0uH.js +0 -1
  624. package/dist/assets/standard-viewport-dressing-BZJnDUxe.js +0 -24
  625. package/dist/assets/three-integration.service-BwAivmO0.js +0 -2
  626. package/dist/assets/volter-sdk-B7tf3Tvt.js +0 -2363
  627. package/dist/assets/volter-sdk-account-7JMtwi37.js +0 -1
  628. package/dist/assets/volter-sdk-client-5Byy2wXM.js +0 -1
  629. package/dist/assets/volter-sdk-contributions-CoJ92BxZ.js +0 -1
  630. package/dist/assets/volter-sdk-css-numeric-style-BUYJamSU.js +0 -1
  631. package/dist/assets/volter-sdk-document-probe-BTBIWGZo.js +0 -1
  632. package/dist/assets/volter-sdk-editor-view-CjY8aK6t.js +0 -1
  633. package/dist/assets/volter-sdk-host-BMYTog8q.js +0 -1
  634. package/dist/assets/volter-sdk-http-transport.browser-DKzOsvwJ.js +0 -1
  635. package/dist/assets/volter-sdk-index-CmXVdz18.js +0 -1
  636. package/dist/assets/volter-sdk-kit-CapabilityCoverageSection-DYZY_-Jp.js +0 -1
  637. package/dist/assets/volter-sdk-kit-account-client-C__9OqCx.js +0 -1
  638. package/dist/assets/volter-sdk-kit-action-registry-DbZnCZuD.js +0 -1
  639. package/dist/assets/volter-sdk-kit-active-product-CJSQPG7X.js +0 -1
  640. package/dist/assets/volter-sdk-kit-active-project-W_h5o_1g.js +0 -1
  641. package/dist/assets/volter-sdk-kit-adapter-editor-config-yf74Q9V6.js +0 -1
  642. package/dist/assets/volter-sdk-kit-adapter-observation-CjE-3maR.js +0 -1
  643. package/dist/assets/volter-sdk-kit-animation-animation-clock-Bv4O7TzS.js +0 -1
  644. package/dist/assets/volter-sdk-kit-animation-stage-transport-BWUPntky.js +0 -1
  645. package/dist/assets/volter-sdk-kit-api-assets-urr61ysI.js +0 -1
  646. package/dist/assets/volter-sdk-kit-api-base-Cg1jQjly.js +0 -1
  647. package/dist/assets/volter-sdk-kit-api-build-IPeA_Geg.js +0 -1
  648. package/dist/assets/volter-sdk-kit-api-logs-DgvCJi1X.js +0 -1
  649. package/dist/assets/volter-sdk-kit-api-project-identity-DcrwneAO.js +0 -1
  650. package/dist/assets/volter-sdk-kit-api-project-open-CY0GGANh.js +0 -1
  651. package/dist/assets/volter-sdk-kit-api-project-source-B-GKXtsq.js +0 -1
  652. package/dist/assets/volter-sdk-kit-api-project-state-DaYEbDnF.js +0 -1
  653. package/dist/assets/volter-sdk-kit-api-relay-DcClK0Tj.js +0 -1
  654. package/dist/assets/volter-sdk-kit-api-settings-DA_ISTVj.js +0 -1
  655. package/dist/assets/volter-sdk-kit-api-themes-DobwNqVL.js +0 -1
  656. package/dist/assets/volter-sdk-kit-api-worktrees-D-1w6p1x.js +0 -1
  657. package/dist/assets/volter-sdk-kit-asset-capabilities-Cj7f9cJ_.js +0 -1
  658. package/dist/assets/volter-sdk-kit-asset-compare-core-CRJzZ7e9.js +0 -1
  659. package/dist/assets/volter-sdk-kit-asset-editor-context-6JuLCBP0.js +0 -1
  660. package/dist/assets/volter-sdk-kit-asset-events-DJHjAkj3.js +0 -1
  661. package/dist/assets/volter-sdk-kit-asset-inspector-actions-Bh5wXH--.js +0 -1
  662. package/dist/assets/volter-sdk-kit-asset-selection-UnAt6KM3.js +0 -1
  663. package/dist/assets/volter-sdk-kit-asset-selection-viewer-registry-CaWf9v47.js +0 -1
  664. package/dist/assets/volter-sdk-kit-asset-thumbnails-22-5CSoT.js +0 -1
  665. package/dist/assets/volter-sdk-kit-asset-viewers-BKOaJMpK.js +0 -1
  666. package/dist/assets/volter-sdk-kit-asset-workflow-asset-import-jobs-BrrsjJga.js +0 -1
  667. package/dist/assets/volter-sdk-kit-asset-workflow-asset-ledger-CPOE0jPj.js +0 -1
  668. package/dist/assets/volter-sdk-kit-asset-workflow-asset-ledger-backend-CF5pN2yr.js +0 -1
  669. package/dist/assets/volter-sdk-kit-asset-workflow-asset-materialization-report-CGPLkaKF.js +0 -1
  670. package/dist/assets/volter-sdk-kit-asset-workflow-asset-pack-manifest-B2uF8Qr8.js +0 -1
  671. package/dist/assets/volter-sdk-kit-asset-workflow-audio-preview-player-DFkzAOq7.js +0 -1
  672. package/dist/assets/volter-sdk-kit-asset-workflow-audio-waveform-CqZ7yiLi.js +0 -1
  673. package/dist/assets/volter-sdk-kit-asset-workflow-cloud-asset-client-DT-6JRu-.js +0 -1
  674. package/dist/assets/volter-sdk-kit-asset-workflow-hosted-asset-materialization-Dvy_iNjM.js +0 -1
  675. package/dist/assets/volter-sdk-kit-asset-workflow-image-view-scale-DxbVn0I8.js +0 -1
  676. package/dist/assets/volter-sdk-kit-asset-workflow-ledger-write-lock-Biscg5zR.js +0 -1
  677. package/dist/assets/volter-sdk-kit-asset-workflow-pixi-spritesheet-DWSHWGxX.js +0 -1
  678. package/dist/assets/volter-sdk-kit-asset-workflow-preview-resource-lifetime-nBo0GLzq.js +0 -1
  679. package/dist/assets/volter-sdk-kit-asset-workflow-project-asset-commands-M1f4AEWS.js +0 -1
  680. package/dist/assets/volter-sdk-kit-asset-workflow-project-content-Zs1I0AYY.js +0 -1
  681. package/dist/assets/volter-sdk-kit-asset-workflow-thumbnail-system-DW5T67GM.js +0 -1
  682. package/dist/assets/volter-sdk-kit-authoring-active-adapter-Da6B0VFl.js +0 -1
  683. package/dist/assets/volter-sdk-kit-authoring-active-systems-SnFtnrEP.js +0 -1
  684. package/dist/assets/volter-sdk-kit-authoring-adapter-key-DYByZK5n.js +0 -1
  685. package/dist/assets/volter-sdk-kit-authoring-authoring-asset-url-DrZybg65.js +0 -1
  686. package/dist/assets/volter-sdk-kit-authoring-bootstrap-state-DX1fctWY.js +0 -1
  687. package/dist/assets/volter-sdk-kit-authoring-boundary-authoring-adapter-CuqgZEK0.js +0 -1
  688. package/dist/assets/volter-sdk-kit-authoring-canvas-scene-guides-CFdzaVqi.js +0 -1
  689. package/dist/assets/volter-sdk-kit-authoring-composite-authoring-adapter-DtKitXG1.js +0 -1
  690. package/dist/assets/volter-sdk-kit-authoring-consumer-actions-CaIzvQGg.js +0 -1
  691. package/dist/assets/volter-sdk-kit-authoring-design-time-layers-D2dItuZJ.js +0 -1
  692. package/dist/assets/volter-sdk-kit-authoring-design-time-mount-registry-DUkwNruT.js +0 -1
  693. package/dist/assets/volter-sdk-kit-authoring-edit-mode-authoring-CNICAAxN.js +0 -1
  694. package/dist/assets/volter-sdk-kit-authoring-empty-project-authoring-DtvlG0_r.js +0 -1
  695. package/dist/assets/volter-sdk-kit-authoring-instance-source-menu-C0bBI0Oq.js +0 -1
  696. package/dist/assets/volter-sdk-kit-authoring-layered-pick-DHVc4KkH.js +0 -1
  697. package/dist/assets/volter-sdk-kit-authoring-mounted-root-subjects-CMJqvaBK.js +0 -1
  698. package/dist/assets/volter-sdk-kit-authoring-no-authoring-adapter-C-V0yrIR.js +0 -1
  699. package/dist/assets/volter-sdk-kit-authoring-object3d-document-persistence-DIduzzWr.js +0 -1
  700. package/dist/assets/volter-sdk-kit-authoring-panel-authoring-CNg-xt_Y.js +0 -1
  701. package/dist/assets/volter-sdk-kit-authoring-project-authoring-session-C2JmvbH5.js +0 -1
  702. package/dist/assets/volter-sdk-kit-authoring-provenance-DBuV6m5Q.js +0 -1
  703. package/dist/assets/volter-sdk-kit-authoring-react-canvas-navigation-CZ9p6KTQ.js +0 -1
  704. package/dist/assets/volter-sdk-kit-authoring-react-design-canvas-style-DveQF6yR.js +0 -1
  705. package/dist/assets/volter-sdk-kit-authoring-react-story-board-BxCtoUSS.js +0 -1
  706. package/dist/assets/volter-sdk-kit-authoring-seam-evidence-BW409uVb.js +0 -1
  707. package/dist/assets/volter-sdk-kit-authoring-selection-scope-R4IwrpVA.js +0 -1
  708. package/dist/assets/volter-sdk-kit-authoring-shell-document-ops-BbCw867p.js +0 -1
  709. package/dist/assets/volter-sdk-kit-authoring-story-board-chrome-fit-CGe1yE_M.js +0 -1
  710. package/dist/assets/volter-sdk-kit-authoring-three-root-KScMI_GK.js +0 -1
  711. package/dist/assets/volter-sdk-kit-authoring-viewport-tool-context-f5MhQ3zW.js +0 -1
  712. package/dist/assets/volter-sdk-kit-authoring-viewport-tool-owner-BQ-liZyN.js +0 -1
  713. package/dist/assets/volter-sdk-kit-authoring-world-session-state-D5N0XAiv.js +0 -1
  714. package/dist/assets/volter-sdk-kit-availability-tick-BtAIfjED.js +0 -1
  715. package/dist/assets/volter-sdk-kit-bitmap-label--Eayjv5n.js +0 -1
  716. package/dist/assets/volter-sdk-kit-boot-routing-DgMsFIM8.js +0 -1
  717. package/dist/assets/volter-sdk-kit-breakpoint-state-ey2AKHF6.js +0 -1
  718. package/dist/assets/volter-sdk-kit-build-identity-CWm0idao.js +0 -1
  719. package/dist/assets/volter-sdk-kit-bytes-codec-p9viZgYd.js +0 -1
  720. package/dist/assets/volter-sdk-kit-cancellation-reason-Dk5ap6A2.js +0 -1
  721. package/dist/assets/volter-sdk-kit-canvas-frames-C3bH5ML2.js +0 -1
  722. package/dist/assets/volter-sdk-kit-capture-camera-pose-DTlrLT6B.js +0 -1
  723. package/dist/assets/volter-sdk-kit-capture-size-DqEiUell.js +0 -1
  724. package/dist/assets/volter-sdk-kit-chrome-registry-Y03Z4rb5.js +0 -1
  725. package/dist/assets/volter-sdk-kit-chrome-slot-registry-B8Nkg0xB.js +0 -1
  726. package/dist/assets/volter-sdk-kit-collaboration-client-Biffahna.js +0 -1
  727. package/dist/assets/volter-sdk-kit-collaboration-presence-9Lcnxe9r.js +0 -1
  728. package/dist/assets/volter-sdk-kit-command-dispatch-DkUJztlv.js +0 -1
  729. package/dist/assets/volter-sdk-kit-command-listener-DkB3zAUV.js +0 -1
  730. package/dist/assets/volter-sdk-kit-command-registry-B9071ZJF.js +0 -1
  731. package/dist/assets/volter-sdk-kit-component-board-registry-BEz4eGpc.js +0 -1
  732. package/dist/assets/volter-sdk-kit-component-states-registry-DP-an_wd.js +0 -1
  733. package/dist/assets/volter-sdk-kit-components-AlignToolbar-CTX5J-vG.js +0 -1
  734. package/dist/assets/volter-sdk-kit-components-ApplicationMenus-DU8NUJX_.js +0 -1
  735. package/dist/assets/volter-sdk-kit-components-AssetEditorShell-BeqiCdMZ.js +0 -1
  736. package/dist/assets/volter-sdk-kit-components-AssetInspectorToolSection-D5YC5ETL.js +0 -1
  737. package/dist/assets/volter-sdk-kit-components-BoardRulers-B5EEZQSQ.js +0 -1
  738. package/dist/assets/volter-sdk-kit-components-CanvasAddNodeDialogs-C6NLGWP_.js +0 -1
  739. package/dist/assets/volter-sdk-kit-components-CanvasSceneViewport-3QIscqiA.js +0 -1
  740. package/dist/assets/volter-sdk-kit-components-ChromeSlot-B7w2qG_m.js +0 -1
  741. package/dist/assets/volter-sdk-kit-components-CodeView-CVofKn39.js +0 -1
  742. package/dist/assets/volter-sdk-kit-components-CompactInspectorShell-Bn5OfN5M.js +0 -1
  743. package/dist/assets/volter-sdk-kit-components-ConsolePanel-s3S8S1aX.js +0 -1
  744. package/dist/assets/volter-sdk-kit-components-GameplaySessionTimeline-DB4395_M.js +0 -1
  745. package/dist/assets/volter-sdk-kit-components-InspectionProjection-DTr-fCJV.js +0 -1
  746. package/dist/assets/volter-sdk-kit-components-Inspector-DJLfY8ge.js +0 -1
  747. package/dist/assets/volter-sdk-kit-components-InspectorCanvasPreview-obOM7Ty1.js +0 -1
  748. package/dist/assets/volter-sdk-kit-components-InspectorFieldsSection-BXcAoMVj.js +0 -1
  749. package/dist/assets/volter-sdk-kit-components-InspectorStoriesSection-DkMLLYHP.js +0 -1
  750. package/dist/assets/volter-sdk-kit-components-InspectorToolSection-CMGWcxL8.js +0 -1
  751. package/dist/assets/volter-sdk-kit-components-InspectorTransformSection-DSvuMe8E.js +0 -1
  752. package/dist/assets/volter-sdk-kit-components-LightExplorerPanel-HQxEJkEg.js +0 -1
  753. package/dist/assets/volter-sdk-kit-components-MediaProperties-DZcpZz2u.js +0 -1
  754. package/dist/assets/volter-sdk-kit-components-ProjectHeader-Ja8C2i9Q.js +0 -1
  755. package/dist/assets/volter-sdk-kit-components-ReactCanvasControls-CLdJVqRO.js +0 -1
  756. package/dist/assets/volter-sdk-kit-components-RootSelectionOverlay-CXANLMyp.js +0 -1
  757. package/dist/assets/volter-sdk-kit-components-RootTextEditor-Crl4GInv.js +0 -1
  758. package/dist/assets/volter-sdk-kit-components-SaveStatus-DyKtgKyo.js +0 -1
  759. package/dist/assets/volter-sdk-kit-components-SurfaceCrashBoundary-D65G-ZCf.js +0 -1
  760. package/dist/assets/volter-sdk-kit-components-SurfaceStateOverlay-CjgqxNBS.js +0 -1
  761. package/dist/assets/volter-sdk-kit-components-ToolContributionSurfaces-UIYJ6pRt.js +0 -1
  762. package/dist/assets/volter-sdk-kit-components-ToolHost-t7FJ8H3j.js +0 -1
  763. package/dist/assets/volter-sdk-kit-components-Toolbar-wLLQ2FJ4.js +0 -1
  764. package/dist/assets/volter-sdk-kit-components-TransientHint-CeXnqeIx.js +0 -1
  765. package/dist/assets/volter-sdk-kit-components-VersionControlSection-zKy-W9jH.js +0 -1
  766. package/dist/assets/volter-sdk-kit-components-ViewportOverlaysMenu-D8JzeWZo.js +0 -1
  767. package/dist/assets/volter-sdk-kit-components-VolterLogo-BIM5Edfl.js +0 -1
  768. package/dist/assets/volter-sdk-kit-components-WorktreeSwitcher-CLgJ0lLf.js +0 -1
  769. package/dist/assets/volter-sdk-kit-components-account-documents-B8uRgQHV.js +0 -1
  770. package/dist/assets/volter-sdk-kit-components-asset-documents-7GuLsNE-.js +0 -1
  771. package/dist/assets/volter-sdk-kit-components-asset-editor-persistence-BWVYMeG4.js +0 -1
  772. package/dist/assets/volter-sdk-kit-components-asset-selection-section-Mebq9lHP.js +0 -1
  773. package/dist/assets/volter-sdk-kit-components-asset-thumbnails-Dib7j3oD.js +0 -1
  774. package/dist/assets/volter-sdk-kit-components-asset-viewers-AudioViewer-CPLTItQo.js +0 -1
  775. package/dist/assets/volter-sdk-kit-components-asset-viewers-GenericJsonViewer-BqXDfiHz.js +0 -1
  776. package/dist/assets/volter-sdk-kit-components-asset-viewers-ImageViewer-9azpKAM-.js +0 -1
  777. package/dist/assets/volter-sdk-kit-components-asset-viewers-JsonAssetDocument-IZSkjpcC.js +0 -1
  778. package/dist/assets/volter-sdk-kit-components-asset-viewers-OnlineAssetDetail-DlKQjgi9.js +0 -1
  779. package/dist/assets/volter-sdk-kit-components-asset-viewers-SourceAssetViewer-DaNGqSDM.js +0 -1
  780. package/dist/assets/volter-sdk-kit-components-asset-viewers-SpritesheetSpriteView-BYkcyvDG.js +0 -1
  781. package/dist/assets/volter-sdk-kit-components-asset-viewers-VideoViewer-CLjRwu1I.js +0 -1
  782. package/dist/assets/volter-sdk-kit-components-asset-viewers-shader-source-CyH5Isos.js +0 -1
  783. package/dist/assets/volter-sdk-kit-components-board-guides-DMZ1ZnuQ.js +0 -1
  784. package/dist/assets/volter-sdk-kit-components-canvas-scene-hotkeys-BHv0V401.js +0 -1
  785. package/dist/assets/volter-sdk-kit-components-canvas-temporary-pivot-D8Eod2re.js +0 -1
  786. package/dist/assets/volter-sdk-kit-components-core-utilities-Pe_IexTD.js +0 -1
  787. package/dist/assets/volter-sdk-kit-components-inspector-preview-section-CmkS3bex.js +0 -1
  788. package/dist/assets/volter-sdk-kit-components-inspector-revert-label-Chi9d4Aa.js +0 -1
  789. package/dist/assets/volter-sdk-kit-components-inspector-selection-DC4icDNM.js +0 -1
  790. package/dist/assets/volter-sdk-kit-components-inspector-stories-gating-BSSAUmKe.js +0 -1
  791. package/dist/assets/volter-sdk-kit-components-inspector-transform-Cs9QjKri.js +0 -1
  792. package/dist/assets/volter-sdk-kit-components-inspector-transform-subject-BWwn1qgP.js +0 -1
  793. package/dist/assets/volter-sdk-kit-components-kind-documents-CxnOVstq.js +0 -1
  794. package/dist/assets/volter-sdk-kit-components-primitives-DraftColorInput-CmDCEN7m.js +0 -1
  795. package/dist/assets/volter-sdk-kit-components-project-tool-documents-BI7fumaL.js +0 -1
  796. package/dist/assets/volter-sdk-kit-components-scene-documents-CpmkIKtT.js +0 -1
  797. package/dist/assets/volter-sdk-kit-components-status-contributions-BOnfHdDr.js +0 -1
  798. package/dist/assets/volter-sdk-kit-components-tool-documents-WqSl2RHn.js +0 -1
  799. package/dist/assets/volter-sdk-kit-components-tool-schema-form-CacYoCqS.js +0 -1
  800. package/dist/assets/volter-sdk-kit-components-use-after-paint-BHvqq3TS.js +0 -1
  801. package/dist/assets/volter-sdk-kit-components-use-project-image-assets-BjPray2j.js +0 -1
  802. package/dist/assets/volter-sdk-kit-components-workspace-history-D4pkX1B3.js +0 -1
  803. package/dist/assets/volter-sdk-kit-components-world-documents-C0Nvz1by.js +0 -1
  804. package/dist/assets/volter-sdk-kit-components-world-overlay-gestures-CppGcboN.js +0 -1
  805. package/dist/assets/volter-sdk-kit-composite-screenshot-DQTSBE3R.js +0 -1
  806. package/dist/assets/volter-sdk-kit-content-entry-source-registry-C_ftWlkd.js +0 -1
  807. package/dist/assets/volter-sdk-kit-contribution-surfaces-DEsx_k2Q.js +0 -1
  808. package/dist/assets/volter-sdk-kit-coverage-canvas-reveal-dzSdv9le.js +0 -1
  809. package/dist/assets/volter-sdk-kit-coverage-design-time-surfaces-wU1j39Qh.js +0 -1
  810. package/dist/assets/volter-sdk-kit-coverage-ontology-invariants-BbgmWxhA.js +0 -1
  811. package/dist/assets/volter-sdk-kit-coverage-session-vitals-BHxJMOqH.js +0 -1
  812. package/dist/assets/volter-sdk-kit-creation-site-registry-tWO004ug.js +0 -1
  813. package/dist/assets/volter-sdk-kit-delegate-harness-registry-D4xWCPzQ.js +0 -1
  814. package/dist/assets/volter-sdk-kit-document-areas-CgItwH3n.js +0 -1
  815. package/dist/assets/volter-sdk-kit-document-context-registry-DnUCJ2Ew.js +0 -1
  816. package/dist/assets/volter-sdk-kit-document-open-registry-CPN5zJat.js +0 -1
  817. package/dist/assets/volter-sdk-kit-document-play-extension-DGtADZMq.js +0 -1
  818. package/dist/assets/volter-sdk-kit-document-preview-source-Cfl4Dy_3.js +0 -1
  819. package/dist/assets/volter-sdk-kit-document-renderer-session-8cEDXPAr.js +0 -1
  820. package/dist/assets/volter-sdk-kit-document-stage-sessions-GRh2JjD_.js +0 -1
  821. package/dist/assets/volter-sdk-kit-document-viewports-HtvvtALx.js +0 -1
  822. package/dist/assets/volter-sdk-kit-editor-api-8c_rSJ8R.js +0 -1
  823. package/dist/assets/volter-sdk-kit-editor-chrome-capture-TDV59iqa.js +0 -1
  824. package/dist/assets/volter-sdk-kit-editor-commands-NSPJ3J69.js +0 -1
  825. package/dist/assets/volter-sdk-kit-editor-console-CipG8ist.js +0 -1
  826. package/dist/assets/volter-sdk-kit-editor-current-view-BNJuuGGe.js +0 -1
  827. package/dist/assets/volter-sdk-kit-editor-document-probe-CqTl5xM-.js +0 -1
  828. package/dist/assets/volter-sdk-kit-editor-git-client-Cvdqf4n8.js +0 -1
  829. package/dist/assets/volter-sdk-kit-editor-hotkeys-BEG8vCFL.js +0 -1
  830. package/dist/assets/volter-sdk-kit-editor-lease-DCvaE09F.js +0 -1
  831. package/dist/assets/volter-sdk-kit-editor-lease-view-CvfqPRLe.js +0 -1
  832. package/dist/assets/volter-sdk-kit-editor-mode-GoKwnpLK.js +0 -1
  833. package/dist/assets/volter-sdk-kit-editor-notifications-8Dm2QeDZ.js +0 -1
  834. package/dist/assets/volter-sdk-kit-editor-presence-Cy6gEVnz.js +0 -1
  835. package/dist/assets/volter-sdk-kit-editor-presentation-activity-ynaasing.js +0 -1
  836. package/dist/assets/volter-sdk-kit-editor-presentation-notice-B1Xycry5.js +0 -1
  837. package/dist/assets/volter-sdk-kit-editor-runtime-BwgmBJxX.js +0 -1
  838. package/dist/assets/volter-sdk-kit-editor-server-response-CBtV7ekn.js +0 -1
  839. package/dist/assets/volter-sdk-kit-editor-session-attribution-C8WSDC0Q.js +0 -1
  840. package/dist/assets/volter-sdk-kit-editor-session-mode-Br-RYmCl.js +0 -1
  841. package/dist/assets/volter-sdk-kit-editor-state-facets-DGTBNp4W.js +0 -1
  842. package/dist/assets/volter-sdk-kit-editor-view-presentation-_J_UvKAW.js +0 -1
  843. package/dist/assets/volter-sdk-kit-environment-images-DbGMfma-.js +0 -1
  844. package/dist/assets/volter-sdk-kit-eyedropper-session-DczyBVkS.js +0 -1
  845. package/dist/assets/volter-sdk-kit-files-file-provider-BVOf7C-r.js +0 -1
  846. package/dist/assets/volter-sdk-kit-files-project-files-D7BYbDfP.js +0 -1
  847. package/dist/assets/volter-sdk-kit-finders-index-CIMkEiLT.js +0 -1
  848. package/dist/assets/volter-sdk-kit-finders-scenes-from-entrypoint-selection-DH8ZBqft.js +0 -1
  849. package/dist/assets/volter-sdk-kit-frame-frame-parts-DIq7ll-Q.js +0 -1
  850. package/dist/assets/volter-sdk-kit-framed-document-capture-DnfuhB1m.js +0 -1
  851. package/dist/assets/volter-sdk-kit-game-surface-defaults-Bh3wv-mH.js +0 -1
  852. package/dist/assets/volter-sdk-kit-gameplay-export-state-BEkckFjb.js +0 -1
  853. package/dist/assets/volter-sdk-kit-gameplay-replay-DJHcbdV9.js +0 -1
  854. package/dist/assets/volter-sdk-kit-gameplay-session-time-DElpE5Kt.js +0 -1
  855. package/dist/assets/volter-sdk-kit-gameplay-sessions-vclLd3xX.js +0 -1
  856. package/dist/assets/volter-sdk-kit-hierarchy-component-marks-Bg_SPc4t.js +0 -1
  857. package/dist/assets/volter-sdk-kit-hierarchy-internals-BsAcvB3k.js +0 -1
  858. package/dist/assets/volter-sdk-kit-hierarchy-kind-icon-BcwYgpZd.js +0 -1
  859. package/dist/assets/volter-sdk-kit-hierarchy-menu-registry-s2ts29Yt.js +0 -1
  860. package/dist/assets/volter-sdk-kit-hierarchy-node-rows-efo0iJmc.js +0 -1
  861. package/dist/assets/volter-sdk-kit-hierarchy-panel-view-CIefmxpn.js +0 -1
  862. package/dist/assets/volter-sdk-kit-hierarchy-projection-BYYDCYV5.js +0 -1
  863. package/dist/assets/volter-sdk-kit-hierarchy-row-media-DFZ55Eq0.js +0 -1
  864. package/dist/assets/volter-sdk-kit-hierarchy-row-model-UxgV-SkK.js +0 -1
  865. package/dist/assets/volter-sdk-kit-hierarchy-rows-Cz5ZihYm.js +0 -1
  866. package/dist/assets/volter-sdk-kit-hierarchy-walk-Dr2U8ZO9.js +0 -1
  867. package/dist/assets/volter-sdk-kit-history-editor-session-CWCXIv3b.js +0 -1
  868. package/dist/assets/volter-sdk-kit-history-history-commands-2DWQSTTt.js +0 -1
  869. package/dist/assets/volter-sdk-kit-history-history-delegate-C3rzMOlx.js +0 -1
  870. package/dist/assets/volter-sdk-kit-history-history-limit-notices-D3ix018P.js +0 -1
  871. package/dist/assets/volter-sdk-kit-history-history-service-7W-3kfYQ.js +0 -1
  872. package/dist/assets/volter-sdk-kit-history-persistence-coordinator-BK0qQ3tf.js +0 -1
  873. package/dist/assets/volter-sdk-kit-history-project-file-history-C4ttOKyT.js +0 -1
  874. package/dist/assets/volter-sdk-kit-history-project-root-history-backends-CLkqF_Jr.js +0 -1
  875. package/dist/assets/volter-sdk-kit-history-resource-registry-DakXGHYK.js +0 -1
  876. package/dist/assets/volter-sdk-kit-history-snapshot-store-Bj4ZFRdu.js +0 -1
  877. package/dist/assets/volter-sdk-kit-history-source-history-backend-DOodlY__.js +0 -1
  878. package/dist/assets/volter-sdk-kit-hmr-registration-group-CSfQk9pL.js +0 -1
  879. package/dist/assets/volter-sdk-kit-hmr-stable-react-context-DwDITjLJ.js +0 -1
  880. package/dist/assets/volter-sdk-kit-hotkeys-CPPWDBzh.js +0 -1
  881. package/dist/assets/volter-sdk-kit-inference-diagnostics-p4D6in15.js +0 -1
  882. package/dist/assets/volter-sdk-kit-initial-project-65zDAw6V.js +0 -1
  883. package/dist/assets/volter-sdk-kit-inspection-active-subject-7diSTvFh.js +0 -1
  884. package/dist/assets/volter-sdk-kit-inspection-active-surface-OqdBerRk.js +0 -1
  885. package/dist/assets/volter-sdk-kit-inspection-compose-subject-DOhkLalv.js +0 -1
  886. package/dist/assets/volter-sdk-kit-inspection-display-D-IZAoDx.js +0 -1
  887. package/dist/assets/volter-sdk-kit-inspection-document-subject-C-b5D9du.js +0 -1
  888. package/dist/assets/volter-sdk-kit-inspection-game-subject-CTK8YlLe.js +0 -1
  889. package/dist/assets/volter-sdk-kit-inspection-model-Cy5--YYe.js +0 -1
  890. package/dist/assets/volter-sdk-kit-inspection-node-media-Cl5Pv5Xr.js +0 -1
  891. package/dist/assets/volter-sdk-kit-inspection-null-subject-1B-hPkvb.js +0 -1
  892. package/dist/assets/volter-sdk-kit-inspection-serialize-ugnltzbu.js +0 -1
  893. package/dist/assets/volter-sdk-kit-inspection-use-active-inspection-BIbj_zQO.js +0 -1
  894. package/dist/assets/volter-sdk-kit-inspector-presentation-BvvnMkOs.js +0 -1
  895. package/dist/assets/volter-sdk-kit-inspector-property-grouping-Bm2wCxwq.js +0 -1
  896. package/dist/assets/volter-sdk-kit-inspector-section-registry-BqsYeqqP.js +0 -1
  897. package/dist/assets/volter-sdk-kit-instance-source-actions-B1HuqEzQ.js +0 -1
  898. package/dist/assets/volter-sdk-kit-js-heap-0ed9Ql3b.js +0 -1
  899. package/dist/assets/volter-sdk-kit-key-actions-C6egPduq.js +0 -1
  900. package/dist/assets/volter-sdk-kit-keymap-presets-5yZW1Ken.js +0 -1
  901. package/dist/assets/volter-sdk-kit-layout-policy-tGPe3EAK.js +0 -1
  902. package/dist/assets/volter-sdk-kit-light-explorer-model-26_jaThf.js +0 -1
  903. package/dist/assets/volter-sdk-kit-live-canvas-frame-DRVTsZ7f.js +0 -1
  904. package/dist/assets/volter-sdk-kit-live-document-DNOa16Bq.js +0 -1
  905. package/dist/assets/volter-sdk-kit-live-gesture-lock-BfI3fpoY.js +0 -1
  906. package/dist/assets/volter-sdk-kit-live-seam-evidence-C3oBBPWO.js +0 -1
  907. package/dist/assets/volter-sdk-kit-live-session-registry-Db_iC2RG.js +0 -1
  908. package/dist/assets/volter-sdk-kit-live-transition-BxWCL92B.js +0 -1
  909. package/dist/assets/volter-sdk-kit-manifest-project-Dkjmvlek.js +0 -1
  910. package/dist/assets/volter-sdk-kit-module-fetch-diagnosis-UGFYVMJn.js +0 -1
  911. package/dist/assets/volter-sdk-kit-mount-failure-report-D0ZQ71nh.js +0 -1
  912. package/dist/assets/volter-sdk-kit-native-selection-style-DQknGdcs.js +0 -1
  913. package/dist/assets/volter-sdk-kit-object3d-document-write-policy-Ce1L0rFI.js +0 -1
  914. package/dist/assets/volter-sdk-kit-packaged-runtime-Du8V-ZH8.js +0 -1
  915. package/dist/assets/volter-sdk-kit-performance-profiler-CxUavCgG.js +0 -1
  916. package/dist/assets/volter-sdk-kit-performance-sources-C-eI5WtQ.js +0 -1
  917. package/dist/assets/volter-sdk-kit-photograph-notice-CMNz5W6m.js +0 -1
  918. package/dist/assets/volter-sdk-kit-play-boot-phase-CztnwCxE.js +0 -1
  919. package/dist/assets/volter-sdk-kit-play-camera-flight-CvYyVfqu.js +0 -1
  920. package/dist/assets/volter-sdk-kit-presentation-surface-CS4DYiUp.js +0 -1
  921. package/dist/assets/volter-sdk-kit-product-command-DaIFfFu_.js +0 -1
  922. package/dist/assets/volter-sdk-kit-project-adapter-0aFFtmfA.js +0 -1
  923. package/dist/assets/volter-sdk-kit-project-asset-refresh-CJF0MSRU.js +0 -1
  924. package/dist/assets/volter-sdk-kit-project-asset-roots-CV_EbPry.js +0 -1
  925. package/dist/assets/volter-sdk-kit-project-local-state-DQv0Qa0e.js +0 -1
  926. package/dist/assets/volter-sdk-kit-project-manager-BdmMB_D-.js +0 -1
  927. package/dist/assets/volter-sdk-kit-project-module-changes-CWsfJwzV.js +0 -1
  928. package/dist/assets/volter-sdk-kit-project-module-split-DLDH1hds.js +0 -1
  929. package/dist/assets/volter-sdk-kit-project-provenance-Bbq065iV.js +0 -1
  930. package/dist/assets/volter-sdk-kit-project-ready-D3OERGyu.js +0 -1
  931. package/dist/assets/volter-sdk-kit-project-shape-B7Ad2TLc.js +0 -1
  932. package/dist/assets/volter-sdk-kit-project-tools-Bh0ogpoJ.js +0 -1
  933. package/dist/assets/volter-sdk-kit-readiness-VIETGQBH.js +0 -1
  934. package/dist/assets/volter-sdk-kit-renderer-resource-counts-hLvH-N1M.js +0 -1
  935. package/dist/assets/volter-sdk-kit-reported-play-state-FxN9UgrJ.js +0 -1
  936. package/dist/assets/volter-sdk-kit-resolve-contributed-command-Bq-D4Z-k.js +0 -1
  937. package/dist/assets/volter-sdk-kit-resolve-relative-specifier-BYz5ToiQ.js +0 -1
  938. package/dist/assets/volter-sdk-kit-retained-document-states-NHFeJEqz.js +0 -1
  939. package/dist/assets/volter-sdk-kit-scene-document-plan-CfN37jSz.js +0 -1
  940. package/dist/assets/volter-sdk-kit-scene-live-open-CUwi3scP.js +0 -1
  941. package/dist/assets/volter-sdk-kit-scoped-game-css-D-Zo7muz.js +0 -1
  942. package/dist/assets/volter-sdk-kit-served-url-CmQyUkUJ.js +0 -1
  943. package/dist/assets/volter-sdk-kit-session-close-CpeajdFt.js +0 -1
  944. package/dist/assets/volter-sdk-kit-session-tombstone-Qt6PTZUe.js +0 -1
  945. package/dist/assets/volter-sdk-kit-settings-settings-provider-CxyCrZci.js +0 -1
  946. package/dist/assets/volter-sdk-kit-settings-store-Bx1u09Ej.js +0 -1
  947. package/dist/assets/volter-sdk-kit-shell-store-Boaqeol8.js +0 -1
  948. package/dist/assets/volter-sdk-kit-shell-store-door-BIxg0K41.js +0 -1
  949. package/dist/assets/volter-sdk-kit-source-conflict-CA-dUA-W.js +0 -1
  950. package/dist/assets/volter-sdk-kit-stage-context-OIqCRioe.js +0 -1
  951. package/dist/assets/volter-sdk-kit-stage-invalidation-b0ChhDfp.js +0 -1
  952. package/dist/assets/volter-sdk-kit-stage-store-registry-qwoXqP6n.js +0 -1
  953. package/dist/assets/volter-sdk-kit-startup-failure-CUj2L1tr.js +0 -1
  954. package/dist/assets/volter-sdk-kit-state-report-deferral-iZlfm4Nr.js +0 -1
  955. package/dist/assets/volter-sdk-kit-storage-host-files-storage-Bt8R1X9k.js +0 -1
  956. package/dist/assets/volter-sdk-kit-storage-http-storage-9nE2FlO-.js +0 -1
  957. package/dist/assets/volter-sdk-kit-storage-index-B-AuWuD7.js +0 -1
  958. package/dist/assets/volter-sdk-kit-storage-mem-storage-5sJsrCQS.js +0 -1
  959. package/dist/assets/volter-sdk-kit-storage-path-lock-DtvTYQo0.js +0 -1
  960. package/dist/assets/volter-sdk-kit-storage-paths-D-YlCKPr.js +0 -1
  961. package/dist/assets/volter-sdk-kit-stories-StoryPreviewMount-B8SFGFOE.js +0 -1
  962. package/dist/assets/volter-sdk-kit-stories-compose-project-stories-xyAUh9br.js +0 -1
  963. package/dist/assets/volter-sdk-kit-stories-prefabs-finder-8RXr-Y7Q.js +0 -1
  964. package/dist/assets/volter-sdk-kit-stories-prefabs-from-stories-7iiFLhC-.js +0 -1
  965. package/dist/assets/volter-sdk-kit-stories-project-story-regions-a_qCa43Q.js +0 -1
  966. package/dist/assets/volter-sdk-kit-stories-scope-Co0HbC12.js +0 -1
  967. package/dist/assets/volter-sdk-kit-stories-story-capture-01sjOwEY.js +0 -1
  968. package/dist/assets/volter-sdk-kit-stories-story-declared-medium-COdprqX6.js +0 -1
  969. package/dist/assets/volter-sdk-kit-stories-story-discovery-Bb_5JF9r.js +0 -1
  970. package/dist/assets/volter-sdk-kit-stories-story-dom-runtime-DkQLVdlE.js +0 -1
  971. package/dist/assets/volter-sdk-kit-stories-story-grouping-QZsmhYuS.js +0 -1
  972. package/dist/assets/volter-sdk-kit-stories-story-presentation--DkLmQiN.js +0 -1
  973. package/dist/assets/volter-sdk-kit-stories-story-registry-yiNoFm9N.js +0 -1
  974. package/dist/assets/volter-sdk-kit-story-document-openers-BflkfwTk.js +0 -1
  975. package/dist/assets/volter-sdk-kit-story-thumbnails-UKIziFdS.js +0 -1
  976. package/dist/assets/volter-sdk-kit-surface-keyboard-AlFTfn8y.js +0 -1
  977. package/dist/assets/volter-sdk-kit-surface-state-DrZCUwaU.js +0 -1
  978. package/dist/assets/volter-sdk-kit-system-seam-evidence-YrcyrxrN.js +0 -1
  979. package/dist/assets/volter-sdk-kit-tab-census-Clg8Smeu.js +0 -1
  980. package/dist/assets/volter-sdk-kit-tab-lifecycle-client-B5_REYPr.js +0 -1
  981. package/dist/assets/volter-sdk-kit-theme-library-CWHbgmPi.js +0 -1
  982. package/dist/assets/volter-sdk-kit-theme-preference-BgNnpwWG.js +0 -1
  983. package/dist/assets/volter-sdk-kit-three-viewport-presentation-ZzLJ-bkx.js +0 -1
  984. package/dist/assets/volter-sdk-kit-tool-contribution-play-C_uwb7tZ.js +0 -1
  985. package/dist/assets/volter-sdk-kit-tool-loader-DXuCfS8l.js +0 -1
  986. package/dist/assets/volter-sdk-kit-transform-mode-request-7evEpaB_.js +0 -1
  987. package/dist/assets/volter-sdk-kit-transient-hint-IRjb64Tc.js +0 -1
  988. package/dist/assets/volter-sdk-kit-transport-strip-Dti982Ng.js +0 -1
  989. package/dist/assets/volter-sdk-kit-ui-source-file-region-resolver-CwokT34s.js +0 -1
  990. package/dist/assets/volter-sdk-kit-ui-source-inspect-DBuRG4dn.js +0 -1
  991. package/dist/assets/volter-sdk-kit-ui-source-source-write-backend-TNGLa62q.js +0 -1
  992. package/dist/assets/volter-sdk-kit-ui-source-tier-source-write-backend-D8EbjlnJ.js +0 -1
  993. package/dist/assets/volter-sdk-kit-user-local-state-DeynFvcT.js +0 -1
  994. package/dist/assets/volter-sdk-kit-viewport-activation-timings-AaacB9oC.js +0 -1
  995. package/dist/assets/volter-sdk-kit-viewport-editor-controls-CwuBDya8.js +0 -1
  996. package/dist/assets/volter-sdk-kit-viewport-presentation-BQwt4yDO.js +0 -1
  997. package/dist/assets/volter-sdk-kit-viewport-surface-status-CSUer8US.js +0 -1
  998. package/dist/assets/volter-sdk-kit-wait-until-DMOQpGn1.js +0 -1
  999. package/dist/assets/volter-sdk-kit-worker-call-metrics-Ce4JSc9n.js +0 -1
  1000. package/dist/assets/volter-sdk-kit-workspace-areas-babY5OR_.js +0 -1
  1001. package/dist/assets/volter-sdk-kit-workspace-aux-commands-HzXopiDV.js +0 -1
  1002. package/dist/assets/volter-sdk-kit-workspace-available-documents-BjoSdh5n.js +0 -1
  1003. package/dist/assets/volter-sdk-kit-workspace-core-utilities-zryGnXGS.js +0 -1
  1004. package/dist/assets/volter-sdk-kit-workspace-document-ids-BM84KEq4.js +0 -1
  1005. package/dist/assets/volter-sdk-kit-workspace-document-registry-DpAQ4cr5.js +0 -1
  1006. package/dist/assets/volter-sdk-kit-workspace-document-restore-DAg6SG0l.js +0 -1
  1007. package/dist/assets/volter-sdk-kit-workspace-host-commands-BFt3wb1k.js +0 -1
  1008. package/dist/assets/volter-sdk-kit-workspace-persistence-gate-BJ6LHrOE.js +0 -1
  1009. package/dist/assets/volter-sdk-kit-workspace-play-utilities-B_DKNtI4.js +0 -1
  1010. package/dist/assets/volter-sdk-kit-workspace-presets-Dm7ciqEm.js +0 -1
  1011. package/dist/assets/volter-sdk-kit-workspace-regions-D-9EZ8O8.js +0 -1
  1012. package/dist/assets/volter-sdk-kit-workspace-static-panels-Dx_SxxnN.js +0 -1
  1013. package/dist/assets/volter-sdk-kit-workspace-status-registry-B2icTxhq.js +0 -1
  1014. package/dist/assets/volter-sdk-kit-workspace-storage-Dq0eDCYq.js +0 -1
  1015. package/dist/assets/volter-sdk-kit-workspace-style-cU7H1sVx.js +0 -1
  1016. package/dist/assets/volter-sdk-kit-workspace-utility-commands-DZOA5lmo.js +0 -1
  1017. package/dist/assets/volter-sdk-kit-workspace-utility-registry-FNQX3Y4R.js +0 -1
  1018. package/dist/assets/volter-sdk-kit-world-adoption-C4rdKYK1.js +0 -1
  1019. package/dist/assets/volter-sdk-kit-world-canvas-viewport-state-BBSDe3bt.js +0 -1
  1020. package/dist/assets/volter-sdk-kit-world-document-routing-B_q3648G.js +0 -1
  1021. package/dist/assets/volter-sdk-kit-world-pan-state-DM3zvrVp.js +0 -1
  1022. package/dist/assets/volter-sdk-kit-write-pipe-DJr-GsL0.js +0 -1
  1023. package/dist/assets/volter-sdk-layout-arrangements-Cq4DeXFd.js +0 -1
  1024. package/dist/assets/volter-sdk-layouts-7zyUDSyl.js +0 -1
  1025. package/dist/assets/volter-sdk-selection-DHab-84l.js +0 -1
  1026. package/dist/assets/volter-sdk-session-command-table-CyyxFM5G.js +0 -1
  1027. package/dist/assets/volter-sdk-session-editor-brand-CxqfUhRF.js +0 -1
  1028. package/dist/assets/volter-sdk-session-editor-compatibility-Z7mDMTjo.js +0 -1
  1029. package/dist/assets/volter-sdk-session-editor-control-protocol-DTCmhLv0.js +0 -1
  1030. package/dist/assets/volter-sdk-session-entrypoint-selection-readers-MevBvB8r.js +0 -1
  1031. package/dist/assets/volter-sdk-session-game-css-scope-DzK3tvc3.js +0 -1
  1032. package/dist/assets/volter-sdk-session-project-module-url-B-bo0dz0.js +0 -1
  1033. package/dist/assets/volter-sdk-session-relative-path-guard-CJu2RCoi.js +0 -1
  1034. package/dist/assets/volter-sdk-session-tool-contribution-convention-D0i2YQZE.js +0 -1
  1035. package/dist/assets/volter-sdk-types-CPqdxTgy.js +0 -1
  1036. package/dist/assets/volter-sdk-views-Dv3YiPOm.js +0 -1
  1037. package/dist/assets/volter-sdk-widgets-design-system-Bdjsniuv.js +0 -1
  1038. package/dist/assets/volter-sdk-widgets-editor-appearance-BhhpmKy1.js +0 -1
  1039. package/dist/assets/volter-sdk-widgets-editor-material-2FBr5lSj.js +0 -1
  1040. package/dist/assets/volter-sdk-widgets-icon-set-registry-thqLOOyG.js +0 -1
  1041. package/dist/assets/volter-sdk-widgets-index-COke1bt3.js +0 -1
  1042. package/dist/assets/volter-sdk-widgets-inspector-widgets-AlignmentGrid-CH8wRoBz.js +0 -1
  1043. package/dist/assets/volter-sdk-widgets-inspector-widgets-AssetSlotPicker-BjKYd_LI.js +0 -1
  1044. package/dist/assets/volter-sdk-widgets-inspector-widgets-BorderEditor-BRN5ojt0.js +0 -1
  1045. package/dist/assets/volter-sdk-widgets-inspector-widgets-ColorPicker-CnsZZe_0.js +0 -1
  1046. package/dist/assets/volter-sdk-widgets-inspector-widgets-CurveEditor-DauQ8QpW.js +0 -1
  1047. package/dist/assets/volter-sdk-widgets-inspector-widgets-FilterEditor-GW-C4yt6.js +0 -1
  1048. package/dist/assets/volter-sdk-widgets-inspector-widgets-FontPicker-Bp6vbE2c.js +0 -1
  1049. package/dist/assets/volter-sdk-widgets-inspector-widgets-GradientEditor-CZ78otUw.js +0 -1
  1050. package/dist/assets/volter-sdk-widgets-inspector-widgets-ScrubbableInput-DFMHVcVT.js +0 -1
  1051. package/dist/assets/volter-sdk-widgets-inspector-widgets-ShadowEditor-LgPyLSuK.js +0 -1
  1052. package/dist/assets/volter-sdk-widgets-inspector-widgets-color-utils-BnYH_LVT.js +0 -1
  1053. package/dist/assets/volter-sdk-widgets-inspector-widgets-curve-utils-pSErBwub.js +0 -1
  1054. package/dist/assets/volter-sdk-widgets-inspector-widgets-index-DIeXEpof.js +0 -1
  1055. package/dist/assets/volter-sdk-widgets-inspector-widgets-shared-0re9z-H8.js +0 -1
  1056. package/dist/assets/volter-sdk-widgets-interactive-edit-scope-TMS6NO4j.js +0 -1
  1057. package/dist/assets/volter-sdk-widgets-patterns-Dialog-DZHXUa5e.js +0 -1
  1058. package/dist/assets/volter-sdk-widgets-patterns-Fields-B7tBrFKE.js +0 -1
  1059. package/dist/assets/volter-sdk-widgets-patterns-List-vYi3mFKO.js +0 -1
  1060. package/dist/assets/volter-sdk-widgets-patterns-StateSurface-BPLk-0YV.js +0 -1
  1061. package/dist/assets/volter-sdk-widgets-patterns-Surfaces-CW_2xPhI.js +0 -1
  1062. package/dist/assets/volter-sdk-widgets-patterns-Tabs-Bd4tK22G.js +0 -1
  1063. package/dist/assets/volter-sdk-widgets-patterns-Toolbar-BGtgAnQo.js +0 -1
  1064. package/dist/assets/volter-sdk-widgets-patterns-Tree-JJFaoxYv.js +0 -1
  1065. package/dist/assets/volter-sdk-widgets-primitives-AnchoredMenu-CH2e0Jdr.js +0 -1
  1066. package/dist/assets/volter-sdk-widgets-primitives-Button-dXXgw22L.js +0 -1
  1067. package/dist/assets/volter-sdk-widgets-primitives-ColorInput-BsnPOVLx.js +0 -1
  1068. package/dist/assets/volter-sdk-widgets-primitives-DraftTextInput-BLjhV7zr.js +0 -1
  1069. package/dist/assets/volter-sdk-widgets-primitives-EditorIcon-6GCeaLqM.js +0 -1
  1070. package/dist/assets/volter-sdk-widgets-primitives-FormControls-CK6Ta6O9.js +0 -1
  1071. package/dist/assets/volter-sdk-widgets-primitives-HoverPreview-i5kg_jsv.js +0 -1
  1072. package/dist/assets/volter-sdk-widgets-primitives-JsonInput-DOVZVHEY.js +0 -1
  1073. package/dist/assets/volter-sdk-widgets-primitives-Layout-XbFM9D5P.js +0 -1
  1074. package/dist/assets/volter-sdk-widgets-primitives-Menu-CEQbALgk.js +0 -1
  1075. package/dist/assets/volter-sdk-widgets-primitives-NumberInput-384Py7qi.js +0 -1
  1076. package/dist/assets/volter-sdk-widgets-primitives-Panel-pkq7sDwN.js +0 -1
  1077. package/dist/assets/volter-sdk-widgets-primitives-SectionHeader-B0NCiED-.js +0 -1
  1078. package/dist/assets/volter-sdk-widgets-primitives-Text-Dy0bMngl.js +0 -1
  1079. package/dist/assets/volter-sdk-widgets-primitives-ThemeRootPortal-D3jG_L8o.js +0 -1
  1080. package/dist/assets/volter-sdk-widgets-primitives-Tooltip-CMR4Hwx8.js +0 -1
  1081. package/dist/assets/volter-sdk-widgets-primitives-Vec3Input-B_iWAEAR.js +0 -1
  1082. package/dist/assets/volter-sdk-widgets-primitives-banner-tones-C4DT_pTU.js +0 -1
  1083. package/dist/assets/volter-sdk-widgets-primitives-clamp-to-viewport-D04u0tdg.js +0 -1
  1084. package/dist/assets/volter-sdk-widgets-primitives-editor-icons-aAC5b9eb.js +0 -1
  1085. package/dist/assets/volter-sdk-widgets-primitives-panel-header-styles-BWwyhCy5.js +0 -1
  1086. package/dist/assets/volter-sdk-widgets-theme-BkZMsIeV.js +0 -1
  1087. package/dist/assets/volter-sdk-widgets-z-index-D1vkf5W4.js +0 -1
  1088. package/dist/assets/volter-shared-fontawesome-BrxDGD11.js +0 -1
  1089. package/dist/assets/volter-shared-jsx-dev-runtime-BpKOeLvd.js +0 -1
  1090. package/dist/assets/volter-shared-jsx-runtime-CKkkxaUm.js +0 -1
  1091. package/dist/assets/volter-shared-react-dom-DG63TACt.js +0 -1
  1092. package/dist/assets/volter-shared-react-dom-client-V0luXxIF.js +0 -1
  1093. package/dist/assets/volter-shared-react-pbR4BgAx.js +0 -1
  1094. package/dist/assets/worker-C7WcdPfy.js +0 -8
  1095. package/starter/race-state.ts +0 -22
  1096. package/starter/track.blend +0 -0
  1097. package/starter/track.play.ts +0 -343
  1098. package/starter/track.py +0 -324
  1099. package/starter/ui/game.stories.tsx +0 -12
  1100. package/starter/ui/game.tsx +0 -10
  1101. package/starter/ui/race-hud.tsx +0 -29
@@ -0,0 +1,13 @@
1
+ import{h2 as z,x as Ct,ih as Ot,ii as mt,n as h,j as m,dv as At,ij as ue,dN as X,ik as me,il as Rt,im as $t,t as U,io as Mt,cr as Q,ev as Pt,B as We,dY as Le,ip as Ft,aw as ht,ax as we,bC as Lt,aE as ae,gF as Tt,iq as Oe,aJ as Ae,ie as ee,ir as ze,c0 as Nt,c3 as Bt,gv as He,is as Dt,aA as It,it as Vt,iu as qe,aO as Gt,iv as Wt,iw as Ue,ix as zt}from"./volter-sdk-Dc6t2ANP.js";import{o as Ht,i as je,j as be,k as _e,l as qt,m as Te,g as Ke,p as Ut,q as Kt,w as Je,t as Jt,u as Ee,v as Yt,x as Xt,y as Qt,z as Ye,s as gt,A as Zt,B as er,b as Xe,C as Re,D as tr,E as Qe,F as rr,G as nr,H as or}from"./blender-runtime-host-BJ0IarOD.js";import{t as Ze,v as oe,o as Se,s as yt,a as he}from"./object3d-document-session-registry-BBdl6yAl.js";import{r as et,b as sr,a as ar,w as lr}from"./blender-properties-model-emPa3cK0.js";import{A as ir,r as tt,n as cr,i as dr,j as ur,b as pe,k as rt,l as pr}from"./play-live-CNIS7Ko6.js";import{ay as fr}from"./three.module-CtVjCPcj.js";import"./output-pass-j4dAGrPY.js";import"./linear-resolve-Cuka7Ypb.js";function jt(e){return`blender-${e.toLowerCase().replace(/_/g,"-")}`}function re(e){return e?.type==="TSE_SOME_ID"&&e.struct==="Object"&&e.object!==void 0}function nt(e){if(e.struct)return e.struct}function ot(e,r){return{id:e.id,label:e.name,role:"entity",kind:jt(e.icon),...nt(e)?{typeLabel:nt(e)}:{},parentId:r,childIds:e.children.map(s=>s.id),defaultExpanded:e.expanded}}const br={transform:!0,inspectorFields:!1,persist:!0},ke=new Set;let _t=0;const Ne=new Set;function st(){queueMicrotask(()=>{_t++;for(const e of Ne)e()})}function mr(e){return Ne.add(e),()=>{Ne.delete(e)}}function at(){return _t}function hr(e){for(const r of ke)if(r.documentId===e||r.documentId===`object3d-document:${e}`)return r;return ke.values().next().value??null}const gr=()=>({position:[0,0,0],rotation:[0,0,0,1],scale:[1,1,1]});function lt(e,r){e.updateWorldMatrix(!0,!1);const s=r.matrixWorld.clone().invert().multiply(e.matrixWorld).elements;return[[s[0],s[1],s[2],s[3]],[s[4],s[5],s[6],s[7]],[s[8],s[9],s[10],s[11]],[s[12],s[13],s[14],s[15]]]}function ge(e,r){return`${e} needs a file, and this editor has no door to ask for one: the host's file door (\`EditorHost.files\`, \`@volter/sdk/host\`) reads and writes project-relative paths and has no file-picker member, so there is nothing to open the workbench's own dialog through. Blender's row opens a file browser; run without one, the engine answers "${r}".`}const yr=[{kind:"mesh.plane",label:"Plane",group:"Mesh",call:"mesh.primitive_plane_add"},{kind:"mesh.cube",label:"Cube",group:"Mesh",call:"mesh.primitive_cube_add"},{kind:"mesh.circle",label:"Circle",group:"Mesh",call:"mesh.primitive_circle_add"},{kind:"mesh.uv-sphere",label:"UV Sphere",group:"Mesh",call:"mesh.primitive_uv_sphere_add"},{kind:"mesh.ico-sphere",label:"Ico Sphere",group:"Mesh",call:"mesh.primitive_ico_sphere_add"},{kind:"mesh.cylinder",label:"Cylinder",group:"Mesh",call:"mesh.primitive_cylinder_add"},{kind:"mesh.cone",label:"Cone",group:"Mesh",call:"mesh.primitive_cone_add"},{kind:"mesh.torus",label:"Torus",group:"Mesh",call:"mesh.primitive_torus_add"},{kind:"mesh.grid",label:"Grid",group:"Mesh",call:"mesh.primitive_grid_add",separatorBefore:!0},{kind:"mesh.monkey",label:"Monkey",group:"Mesh",call:"mesh.primitive_monkey_add"},{kind:"curve.bezier",label:"Bézier",group:"Curve",call:"curve.primitive_bezier_curve_add"},{kind:"curve.bezier-circle",label:"Circle",group:"Curve",call:"curve.primitive_bezier_circle_add"},{kind:"curve.nurbs-curve",label:"Nurbs Curve",group:"Curve",call:"curve.primitive_nurbs_curve_add",separatorBefore:!0},{kind:"curve.nurbs-circle",label:"Nurbs Circle",group:"Curve",call:"curve.primitive_nurbs_circle_add"},{kind:"curve.path",label:"Path",group:"Curve",call:"curve.primitive_nurbs_path_add"},{kind:"curve.empty-hair",label:"Empty Hair",group:"Curve",call:"object.curves_empty_hair_add",separatorBefore:!0},{kind:"curve.fur",label:"Fur",group:"Curve",call:"object.quick_fur"},{kind:"surface.nurbs-curve",label:"Nurbs Curve",group:"Surface",call:"surface.primitive_nurbs_surface_curve_add"},{kind:"surface.nurbs-circle",label:"Nurbs Circle",group:"Surface",call:"surface.primitive_nurbs_surface_circle_add"},{kind:"surface.nurbs-surface",label:"Nurbs Surface",group:"Surface",call:"surface.primitive_nurbs_surface_surface_add"},{kind:"surface.nurbs-cylinder",label:"Nurbs Cylinder",group:"Surface",call:"surface.primitive_nurbs_surface_cylinder_add"},{kind:"surface.nurbs-sphere",label:"Nurbs Sphere",group:"Surface",call:"surface.primitive_nurbs_surface_sphere_add"},{kind:"surface.nurbs-torus",label:"Nurbs Torus",group:"Surface",call:"surface.primitive_nurbs_surface_torus_add"},{kind:"metaball.ball",label:"Ball",group:"Metaball",call:"object.metaball_add, type='BALL'"},{kind:"metaball.capsule",label:"Capsule",group:"Metaball",call:"object.metaball_add, type='CAPSULE'"},{kind:"metaball.plane",label:"Plane",group:"Metaball",call:"object.metaball_add, type='PLANE'"},{kind:"metaball.ellipsoid",label:"Ellipsoid",group:"Metaball",call:"object.metaball_add, type='ELLIPSOID'"},{kind:"metaball.cube",label:"Cube",group:"Metaball",call:"object.metaball_add, type='CUBE'"},{kind:"text",label:"Text",group:null,call:"object.text_add"},{kind:"point-cloud",label:"Point Cloud",group:null,call:"object.pointcloud_random_add"},{kind:"volume.import",label:"Import OpenVDB...",group:"Volume",call:"object.volume_import",refusal:`${ge("Importing an OpenVDB volume","CANCELLED, with nothing created")} This build also has no OpenVDB at all (\`bpy.app.build_options.openvdb\` is False), so a file would not be read even with a picker.`},{kind:"volume.empty",label:"Empty",group:"Volume",call:"object.volume_add"},{kind:"grease-pencil.blank",label:"Blank",group:"Grease Pencil",call:"object.grease_pencil_add, type='EMPTY'"},{kind:"grease-pencil.stroke",label:"Stroke",group:"Grease Pencil",call:"object.grease_pencil_add, type='STROKE'"},{kind:"grease-pencil.monkey",label:"Monkey",group:"Grease Pencil",call:"object.grease_pencil_add, type='MONKEY'"},{kind:"grease-pencil.lineart-scene",label:"Scene Line Art",group:"Grease Pencil",call:"object.grease_pencil_add, type='LINEART_SCENE'",separatorBefore:!0},{kind:"grease-pencil.lineart-collection",label:"Collection Line Art",group:"Grease Pencil",call:"object.grease_pencil_add, type='LINEART_COLLECTION'"},{kind:"grease-pencil.lineart-object",label:"Object Line Art",group:"Grease Pencil",call:"object.grease_pencil_add, type='LINEART_OBJECT'"},{kind:"armature",label:"Armature",group:null,call:"object.armature_add"},{kind:"lattice.lattice",label:"Lattice",group:"Lattice",call:"object.add, type='LATTICE'"},{kind:"lattice.deform-selected",label:"Lattice Deform Selected",group:"Lattice",call:"object.lattice_add_to_selected"},{kind:"empty.plain-axes",label:"Plain Axes",group:"Empty",call:"object.empty_add, type='PLAIN_AXES'"},{kind:"empty.arrows",label:"Arrows",group:"Empty",call:"object.empty_add, type='ARROWS'"},{kind:"empty.single-arrow",label:"Single Arrow",group:"Empty",call:"object.empty_add, type='SINGLE_ARROW'"},{kind:"empty.circle",label:"Circle",group:"Empty",call:"object.empty_add, type='CIRCLE'"},{kind:"empty.cube",label:"Cube",group:"Empty",call:"object.empty_add, type='CUBE'"},{kind:"empty.sphere",label:"Sphere",group:"Empty",call:"object.empty_add, type='SPHERE'"},{kind:"empty.cone",label:"Cone",group:"Empty",call:"object.empty_add, type='CONE'"},{kind:"image.reference",label:"Reference...",group:"Image",call:"object.empty_image_add, background=False",refusal:ge("A reference image","poll() failed, context is incorrect / Please select at least one image")},{kind:"image.background",label:"Background...",group:"Image",call:"object.empty_image_add, background=True",refusal:ge("A background image","poll() failed, context is incorrect / Please select at least one image")},{kind:"image.mesh-plane",label:"Mesh Plane...",group:"Image",call:"image.import_as_mesh_planes",refusal:ge("An image as a mesh plane","CANCELLED, with nothing created")},{kind:"image.empty-image",label:"Empty Image",group:"Image",call:"object.empty_add, type='IMAGE'"},{kind:"light.point",label:"Point",group:"Light",call:"object.light_add, type='POINT'"},{kind:"light.sun",label:"Sun",group:"Light",call:"object.light_add, type='SUN'"},{kind:"light.spot",label:"Spot",group:"Light",call:"object.light_add, type='SPOT'"},{kind:"light.area",label:"Area",group:"Light",call:"object.light_add, type='AREA'"},{kind:"light-probe.sphere",label:"Sphere",group:"Light Probe",call:"object.lightprobe_add, type='SPHERE'"},{kind:"light-probe.plane",label:"Plane",group:"Light Probe",call:"object.lightprobe_add, type='PLANE'"},{kind:"light-probe.volume",label:"Volume",group:"Light Probe",call:"object.lightprobe_add, type='VOLUME'"},{kind:"camera",label:"Camera",group:null,call:"object.camera_add"},{kind:"speaker",label:"Speaker",group:null,call:"object.speaker_add"},{kind:"force-field.force",label:"Force",group:"Force Field",call:"object.effector_add, type='FORCE'"},{kind:"force-field.wind",label:"Wind",group:"Force Field",call:"object.effector_add, type='WIND'"},{kind:"force-field.vortex",label:"Vortex",group:"Force Field",call:"object.effector_add, type='VORTEX'"},{kind:"force-field.magnetic",label:"Magnetic",group:"Force Field",call:"object.effector_add, type='MAGNET'"},{kind:"force-field.harmonic",label:"Harmonic",group:"Force Field",call:"object.effector_add, type='HARMONIC'"},{kind:"force-field.charge",label:"Charge",group:"Force Field",call:"object.effector_add, type='CHARGE'"},{kind:"force-field.lennard-jones",label:"Lennard-Jones",group:"Force Field",call:"object.effector_add, type='LENNARDJ'"},{kind:"force-field.texture",label:"Texture",group:"Force Field",call:"object.effector_add, type='TEXTURE'"},{kind:"force-field.curve-guide",label:"Curve Guide",group:"Force Field",call:"object.effector_add, type='GUIDE'"},{kind:"force-field.boid",label:"Boid",group:"Force Field",call:"object.effector_add, type='BOID'"},{kind:"force-field.turbulence",label:"Turbulence",group:"Force Field",call:"object.effector_add, type='TURBULENCE'"},{kind:"force-field.drag",label:"Drag",group:"Force Field",call:"object.effector_add, type='DRAG'"},{kind:"force-field.fluid-flow",label:"Fluid Flow",group:"Force Field",call:"object.effector_add, type='FLUID'"}],jr="collection-instance:";function _r(){const e=new Map;for(const r of be().byId.values()){if(r.type!=="TSE_LAYER_COLLECTION")continue;const s=r.data;s===void 0||!s.startsWith("bpy.data.collections[")||e.has(r.name)||e.set(r.name,{kind:`${jr}${r.name}`,label:r.name,group:"Collection Instance",call:`object.collection_instance_add, collection=${le(r.name)}`})}return[...e.values()]}function ve(){return[...yr,..._r()]}function vr(e){const[r,...s]=e.call.split(", ");return`bpy.ops.${r}(${s.join(", ")})`}function le(e){return JSON.stringify(e)}const wr={"curve.primitive_bezier_circle_add":"Add Bézier Circle","curve.primitive_bezier_curve_add":"Add Bézier","curve.primitive_nurbs_circle_add":"Add Nurbs Circle","curve.primitive_nurbs_curve_add":"Add Nurbs Curve","curve.primitive_nurbs_path_add":"Add Path","image.import_as_mesh_planes":"Import Images as Planes","mesh.primitive_circle_add":"Add Circle","mesh.primitive_cone_add":"Add Cone","mesh.primitive_cube_add":"Add Cube","mesh.primitive_cylinder_add":"Add Cylinder","mesh.primitive_grid_add":"Add Grid","mesh.primitive_ico_sphere_add":"Add Ico Sphere","mesh.primitive_monkey_add":"Add Monkey","mesh.primitive_plane_add":"Add Plane","mesh.primitive_torus_add":"Add Torus","mesh.primitive_uv_sphere_add":"Add UV Sphere","object.armature_add":"Add Armature","object.camera_add":"Add Camera","object.collection_add":"Add to Collection","object.collection_instance_add":"Add Collection Instance","object.constraint_add":"Add Constraint","object.curves_empty_hair_add":"Add Empty Curves","object.curves_random_add":"Add Random Curves","object.data_instance_add":"Add Object Data Instance","object.delete":"Delete","object.duplicate":"Duplicate Objects","object.effector_add":"Add Effector","object.empty_add":"Add Empty","object.empty_image_add":"Add Empty Image/Drop Image to Empty","object.grease_pencil_add":"Add Grease Pencil","object.grease_pencil_dash_modifier_segment_add":"Add Segment","object.grease_pencil_time_modifier_segment_add":"Add Segment","object.lattice_add_to_selected":"Add Lattice Deformer","object.light_add":"Add Light","object.lightprobe_add":"Add Light Probe","object.location_clear":"Clear Location","object.material_slot_add":"Add Material Slot","object.metaball_add":"Add Metaball","object.modifier_add":"Add Modifier","object.origin_set":"Set Origin","object.particle_system_add":"Add Particle System Slot","object.pointcloud_random_add":"Add Point Cloud","object.quick_fur":"Quick Fur","object.rotation_clear":"Clear Rotation","object.scale_clear":"Clear Scale","object.shaderfx_add":"Add Effect","object.shape_key_add":"Add Shape Key","object.speaker_add":"Add Speaker","object.text_add":"Add Text","object.transform_apply":"Apply Object Transform","object.vertex_group_add":"Add Vertex Group","object.volume_add":"Add Volume","object.volume_import":"Import OpenVDB Volume","surface.primitive_nurbs_surface_circle_add":"Add Surface Circle","surface.primitive_nurbs_surface_curve_add":"Add Surface Curve","surface.primitive_nurbs_surface_cylinder_add":"Add Surface Cylinder","surface.primitive_nurbs_surface_sphere_add":"Add Surface Sphere","surface.primitive_nurbs_surface_surface_add":"Add Surface Patch","surface.primitive_nurbs_surface_torus_add":"Add Surface Torus"};function Sr(e){const r=/bpy\.ops\.([a-z_]+\.[a-z0-9_]+)\(/.exec(e)?.[1];return r===void 0?void 0:wr[r]}async function fe(e,r){const s=["before = {o.name for o in bpy.data.objects}",e,"made = [o.name for o in bpy.data.objects if o.name not in before]",'print("\\n".join(made))'].join(`
2
+ `),u=await Ee(s,!0,r??Sr(e));return u.error!==null?{made:[],error:u.error}:{made:u.result.split(`
3
+ `).map(j=>j.trim()).filter(j=>j.length>0),error:null}}async function kr(e,r){const s=[`_sel = {${e.map(le).join(", ")}}`,"_vl = bpy.context.view_layer","for _o in _vl.objects:"," _o.select_set(_o.name in _sel)",...r===null?[]:[`_vl.objects.active = bpy.data.objects.get(${le(r)})`]].join(`
4
+ `),u=await Ee(s,!1);u.error!==null&&z().console.error(`Blender refused the selection write: ${u.error}`,"blender-outliner")}async function $e(e,r){if(e.length===0)return{destination:"Nothing is selected, so there was nothing to run it on.",persisted:!1};const s=[`targets = [bpy.data.objects[n] for n in [${e.map(le).join(", ")}]]`,"with bpy.context.temp_override(selected_objects=targets, selected_editable_objects=targets, active_object=targets[0], object=targets[0]):",` ${r}`].join(`
5
+ `),{error:u}=await fe(s);return u!==null?{destination:u,persisted:!1}:(await _e(e),{destination:`Blender — ${r}; the session saves the .blend`,persisted:!0})}const xr={source:"document",label:"blender",detail:"These rows are Blender's own View Layer tree, read from the engine through RNA. Editing the model is a bpy call; the eye and render columns write the engine directly."},Er="This collection is excluded from the view layer (LayerCollection.exclude), so its viewport visibility is not what is hiding it. Clear the Exclude checkbox on this row first.";function vt(e){return({defaultAdapter:r})=>{const s=new Set;let u=[],P=null,j=null;const v=new Map,x=new Map,C=()=>{for(const o of[...s])o()},w=()=>be().byId,F=o=>{const t=w().get(o),a=e();return t===void 0||a===null?null:t.type==="TSE_VIEW_COLLECTION_BASE"?a.root:t.object===void 0?null:a.objectForBlenderName(t.object)},T=o=>{const t=e();if(t===null)return null;for(const a of w().values())if(re(a)&&t.objectForBlenderName(a.object)===o)return a.id;return null},$=o=>{for(const t of w().values())if(re(t)&&t.object===o)return t.id;return null},W=o=>{if(w().has(o))return o;const t=Ze(r.hierarchy,o);return t===null?null:T(t)},N=o=>{const t=W(o);return t===null?null:F(t)},H=o=>{const t=N(o);return t===null?null:r.hierarchy.idForObject3D?.(t)??null},V={roots:()=>(Jt(G()),(be().tree?.rows??[]).map(t=>ot(t,null))),node:o=>{const t=be(),a=t.byId.has(o)?o:W(o),y=a===null?void 0:t.byId.get(a);return y===void 0?null:ot(y,t.parentOf.get(y.id)??null)},object3D:o=>N(o),idForObject3D:o=>T(o)};function G(){const o=w(),t=new Set;for(const a of u){const y=o.get(a)?.object;y!==void 0&&t.add(y)}return[...t]}const q=()=>{const o=[];for(const t of u){const a=N(t),y=a===null?null:r.hierarchy.idForObject3D?.(a);y&&o.push(y)}r.selection?.set(o,{intent:"exact"}),C()},f=()=>{if(i||j!==null)return;const o=qt(),t=`${Te()}\0${o.active??""}\0${[...o.selected].sort().join("")}`;if(t===P)return;P=t;const a=o.selected.filter(k=>k!==o.active);o.active!==null&&o.selected.includes(o.active)&&a.push(o.active);const y=a.map($).filter(k=>k!==null);y.length===u.length&&y.every((k,E)=>k===u[E])||(u=y,q())},_={get:()=>[...u],set:o=>{if(i)return;const t=Symbol("Blender selection");j=t;const a=o.map(W);u=a.filter(D=>D!==null),q();const y=w(),k=e(),E=[],B=[],K=[];o.forEach((D,L)=>{const J=a[L];if(J!==null){const de=y.get(J),ce=de?.object;ce===void 0?B.push(de?.name??J):E.includes(ce)||E.push(ce);return}const te=Ze(r.hierarchy,D),ie=te===null?null:k?.blenderObjectName(te)??null;ie===null?K.push(D):E.includes(ie)||E.push(ie)}),K.length>0&&z().console.warn(`No Blender object answers to ${K.join(", ")}, so Blender's selection leaves ${K.length===1?"it":"them"} out.`,"blender-outliner"),B.length>0&&z().console.warn(`${B.join(", ")} ${B.length===1?"is":"are"} not an object, so Blender's object selection does not carry ${B.length===1?"it":"them"}. Selecting a collection sets the ACTIVE COLLECTION in Blender, which is its own gesture and not in this editor yet.`,"blender-outliner"),kr(E,E.length===0?null:E[E.length-1]).catch(D=>z().console.error(`Blender refused the selection write: ${String(D)}`,"blender-outliner")).finally(()=>{i||j!==t||(j=null,P=null,f())})}},R=o=>w().get(o)?.restrict,I={properties:o=>{const t=R(o);if(t===void 0)return[];const a=w().get(o),y=[{path:"name",label:"Name",type:"string",readonly:!re(a)}];return t.hide!==void 0&&y.push({path:"visible",label:"Show in Viewport",type:"boolean"}),t.render!==void 0&&y.push({path:"renderVisible",label:"Show in Renders",type:"boolean"}),t.exclude!==void 0&&y.push({path:"exclude",label:"Exclude from View Layer",type:"boolean"}),y},get:(o,t)=>{const a=w().get(o);if(a!==void 0){if(t==="name")return a.name;if(t==="visible")return a.restrict?.hide===void 0?void 0:!a.restrict.hide;if(t==="renderVisible")return a.restrict?.render===void 0?void 0:!a.restrict.render;if(t==="exclude")return a.restrict?.exclude}},editability:(o,t)=>{const a=w().get(o);return a===void 0?{writable:!1}:t==="name"?re(a)?{writable:!0}:{writable:!1,reason:`Renaming a ${a.struct??a.type} is not in this Outliner yet — only an object row renames here. Rename it with bpy.`}:a.notInCollection?{writable:!1,reason:"This row is a child drawn under its parent although it is not in that collection, and Blender's Outliner draws it no restriction columns."}:t==="visible"&&a.restrict?.exclude===!0?{writable:!1,reason:Er}:{writable:!0}},set:async(o,t,a)=>{const y=w().get(o);if(y===void 0)return;if(t==="name"){if(!re(y))return;const E=String(a);if(E===y.name||E.length===0)return;await Ke(`bpy.data.objects[${le(y.object)}]`,"name",E),await _e([E]);const B=$(E);B!==null&&_.set([B]);return}if(t==="exclude"){await Je(y.path,"exclude",a===!0);return}const k=t==="visible"?"hide":t==="renderVisible"?"render":null;k!==null&&await Je(y.path,k,a===!1)}},M={get:o=>{const t=H(o);return(t===null?void 0:r.transforms?.get(t))??gr()},editability:o=>{const t=W(o),a=t===null?void 0:w().get(t);return re(a)&&F(a.id)!==null?{writable:!0}:{writable:!1,reason:`Only an object has a transform; this row is a ${a?.struct??a?.type??"row"}.`}},beginEdit:o=>{const t=N(o);t!==null&&!v.has(t)&&(v.set(t,t.matrixWorld.clone()),x.set(o,t),Kt())},apply:(o,t)=>{const a=N(o);a!==null&&(a.position.fromArray(t.position),a.quaternion.fromArray(t.rotation),a.scale.fromArray(t.scale),a.updateMatrix(),a.updateMatrixWorld(!0),e()?.mirrorPose?.(a))},endEdit:async o=>{const t=x.get(o)??N(o);x.delete(o);const a=e();if(t===null)return;const y=v.get(t);v.delete(t);try{if(a===null||(t.updateWorldMatrix(!0,!1),y?.equals(t.matrixWorld)===!0))return;const k=a.blenderObjectName(t);if(k===null)return;const E=`bpy.data.objects[${JSON.stringify(k)}]`;try{return await Ke(E,"matrix_world",lt(t,a.root)),{destination:`Blender — ${E}.matrix_world; the session saves the .blend`,persisted:!0}}catch(B){return{destination:B instanceof Error?B.message:String(B),persisted:!1}}}finally{y&&await Ut()}}},c=o=>{const t=W(o),a=t===null?void 0:w().get(t);return re(a)?a.object:null},l=o=>({destination:o,persisted:!1}),d=async o=>{await _e(o);const t=o.map($).filter(a=>a!==null);return t.length>0&&_.set(t),t[0]??""},g=()=>{const o=r.documentId?.replace(/^object3d-document:/,""),t=oe().find(k=>k.documentId===o)?.rig().drawCamera()??null,a=e(),y=["bpy.ops.object.camera_add()","added = bpy.context.view_layer.objects.active"];return t!==null&&a!==null&&y.push("kept = added.location.copy()",`added.matrix_world = ${JSON.stringify(lt(t,a.root))}`,"added.location = kept"),y.push("if bpy.context.scene.camera is None:"," bpy.context.scene.camera = added"),y.join(`
6
+ `)},p={creatableKinds:()=>ve().map(({kind:o,label:t})=>({kind:o,label:t})),create:o=>{const t=ve().find(y=>y.kind===o);if(t===void 0)return{id:"",ack:l(`${o} is not a row of Blender's Add menu that this editor adds. Its rows are: ${ve().map(y=>y.label).join(", ")}.`)};if(t.refusal!==void 0)return{id:"",ack:l(t.refusal)};const a=t.call==="object.camera_add"?g():vr(t);return{id:"",ack:(async()=>{const{made:y,error:k}=await fe(a);return k!==null?l(k):y.length===0?l(`Blender ran ${a} and created nothing. The operator reported no error, so it cancelled — most often because it wanted a file browser or a context this headless engine has no window for.`):(await d(y),{destination:`Blender — ${a}; the session saves the .blend`,persisted:!0})})()}},remove:o=>p.removeMany?.([o])??void 0,removeMany:async o=>{const t=[];for(const E of o){const B=c(E);if(B===null){const K=W(E)===null?void 0:w().get(W(E));return l(`Only an object can be deleted here; this row is a ${K?.struct??K?.type??"row"}. Deleting a collection, a modifier or a vertex group is that datablock’s own bpy call.`)}t.push(B)}if(t.length===0)return l("Nothing selected to delete.");const y=[`targets = ${`[bpy.data.objects[n] for n in [${t.map(le).join(", ")}]]`}`,"with bpy.context.temp_override(selected_objects=targets, active_object=targets[0]):"," result = bpy.ops.object.delete(use_global=False)",'if "FINISHED" not in result: raise RuntimeError("Blender cancelled deleting the selected objects")'].join(`
7
+ `),{error:k}=await fe(y,"Delete Objects");return k!==null?l(k):(_.set([]),await _e([]),{destination:"Blender — bpy.ops.object.delete(use_global=False); the session saves the .blend",persisted:!0})},duplicate:o=>{const t=c(o);if(t===null)return{id:o,ack:l("Only an object can be duplicated here. Duplicating a collection is `bpy.ops.object.collection_instance_add`, its own gesture.")};const a=[`source = bpy.data.objects[${le(t)}]`,"with bpy.context.temp_override(selected_objects=[source], active_object=source):"," result = bpy.ops.object.duplicate(linked=False)",'if "FINISHED" not in result: raise RuntimeError("Blender cancelled duplicating the selected object")'].join(`
8
+ `);return{id:o,ack:(async()=>{const{made:y,error:k}=await fe(a,"Duplicate Object");return k!==null?l(k):(await d(y),{destination:`Blender — bpy.ops.object.duplicate(linked=False) on ${t}; the session saves the .blend`,persisted:!0})})()}},duplicateMany:async o=>{const t=[...new Set(o.map(c))];if(t.length===0||t.some(E=>E===null))return l("Select objects to duplicate; collections and data rows cannot be duplicated here.");const a=[`sources = [bpy.data.objects[name] for name in ${JSON.stringify(t)}]`,"with bpy.context.temp_override(selected_objects=sources, active_object=sources[0]):"," result = bpy.ops.object.duplicate(linked=False)",'if "FINISHED" not in result: raise RuntimeError("Blender cancelled duplicating the selected objects")'].join(`
9
+ `),{made:y,error:k}=await fe(a,"Duplicate Objects");return k!==null?l(k):(await d(y),{destination:"Blender — duplicate selected objects as one native operation; the session saves the .blend",persisted:!0})},reparent:()=>l("Reparenting is Blender's `bpy.ops.object.parent_set`, which needs a parent TYPE (Object, Object Keep Transform, Armature Deform, …) that a drag does not say. Set the parent on the object’s Relations panel, or with bpy.")},b={get documentId(){return r.documentId},get documentRootObject(){return r.documentRootObject},capabilities:br,provenance:xr,hierarchy:V,selection:_,inspector:I,transforms:M,structure:p,subscribe:o=>{s.add(o);const t=je(o),a=r.subscribe?.(o)??(()=>{});return()=>{s.delete(o),t(),a()}}},n={get documentId(){return b.documentId},selectedObjectNames:()=>G(),allObjectNames:()=>{const o=[];for(const t of w().values())re(t)&&o.push(t.object);return o},selectObjects:o=>{const t=o.map($).filter(a=>a!==null);_.set(t)},rowIdForObject:o=>$(o),structure:p,subscribe:o=>{s.add(o);const t=je(o);return()=>{s.delete(o),t()}}};ke.add(n);let i=!1;const S=setTimeout(()=>{i||(st(),f())},0),O=Ht(f),A=je(f);return{adapter:b,dispose:()=>{i=!0,clearTimeout(S),O(),A(),ke.delete(n),st(),s.clear()}}}}const Cr=vt(Yt);Ct({match:({adapter:e})=>et(null,e)!==null,describe:({adapter:e})=>{const r=et(null,e);if(r===null)return null;const s=r.kind==="object"?[...be().byId.values()].find(v=>v.struct==="Object"&&v.object===r.name):void 0,u=sr().context?.scene,P=u?ar(u):void 0,j=r.kind==="object"?r.name:(P?.kind==="struct"?P.name:null)??"Scene";return{id:`blender-properties:${JSON.stringify(r)}`,title:j,identity:{kindLabel:r.kind==="object"?"Object":"Scene",kind:jt(s?.icon??"SCENE_DATA"),rename:{readOnly:r.kind!=="object",set:async v=>{r.kind==="object"&&v.length>0&&await lr(`bpy.data.objects[${JSON.stringify(r.name)}]`,"name",v)}}},sections:[]}}});function wt(e){const r=Number.isFinite(e)&&e>0?e:50;return{degrees:2*Math.atan(72/(2*r))*180/Math.PI,axis:"larger"}}Ot("model",{camera:{fov:wt(50),opening:[.8187,.4458,.3617]},interaction:{bootTool:"select",boxSelect:"touch"},all:{lighting:{source:"studio",studioPreset:mt.id,auto:null,tone:{mapper:"none",exposure:1}},xray:{enabled:!1,alpha:.5}},modes:{wireframe:{xray:{enabled:!0,alpha:0}},preview:{lighting:{source:"preview",auto:null,preview:{sceneLights:!1,sun:{enabled:!1},environment:{enabled:!0,image:"blender:forest",energy:1,rotation:0}},tone:{mapper:"agx",exposure:1}},backdrop:{source:"fill"}},rendered:{lighting:{source:"scene",auto:null,tone:{mapper:"agx",exposure:1}},backdrop:{source:"scene"}}},overlays:{selection:{origins:!0}},world:{upAxis:"z"}});const Be="volter.blender.area-split:",De=new Set,Ie=new Map;function Or(e){try{return globalThis.localStorage?.getItem(Be+e)==="1"}catch{return!1}}function Ge(e){let r=Ie.get(e);return r===void 0&&(r=Or(e),Ie.set(e,r)),r}function it(e,r){if(Ge(e)!==r){Ie.set(e,r);try{r?globalThis.localStorage?.setItem(Be+e,"1"):globalThis.localStorage?.removeItem(Be+e)}catch{}for(const s of[...De])s()}}function St(e){return De.add(e),()=>{De.delete(e)}}const Ar=[{label:"Location",call:"location=True, rotation=False, scale=False"},{label:"Rotation",call:"location=False, rotation=True, scale=False"},{label:"Scale",call:"location=False, rotation=False, scale=True"},{label:"All Transforms",call:"location=True, rotation=True, scale=True"}],Rr=[{label:"Location",call:"bpy.ops.object.location_clear(clear_delta=False)"},{label:"Rotation",call:"bpy.ops.object.rotation_clear(clear_delta=False)"},{label:"Scale",call:"bpy.ops.object.scale_clear(clear_delta=False)"}],$r=[{label:"Geometry to Origin",type:"GEOMETRY_ORIGIN"},{label:"Origin to Geometry",type:"ORIGIN_GEOMETRY"},{label:"Origin to 3D Cursor",type:"ORIGIN_CURSOR"}],Mr=[{submenu:"Mesh",at:"2699"},{submenu:"Curve",at:"2702"},{submenu:"Surface",at:"2704"},{submenu:"Metaball",at:"2705"},{kind:"text",at:"2706"},{kind:"point-cloud",at:"2707"},{submenu:"Volume",at:"2708"},{submenu:"Grease Pencil",at:"2709"},{separatorAt:"2711"},{kind:"armature",at:"2716"},{submenu:"Lattice",at:"2718"},{separatorAt:"2720"},{submenu:"Empty",at:"2722"},{submenu:"Image",at:"2723"},{separatorAt:"2725"},{submenu:"Light",at:"2727"},{submenu:"Light Probe",at:"2728"},{separatorAt:"2730"},{kind:"camera",at:"2735"},{separatorAt:"2737"},{kind:"speaker",at:"2739"},{separatorAt:"2741"},{submenu:"Force Field",at:"2743"},{separatorAt:"2745"},{submenu:"Collection Instance",at:"2759"}],Pr="No Collections to Instance";function ye({id:e,open:r,setOpen:s,anchorRef:u,children:P}){return m.jsxs("div",{ref:u,style:{position:"relative"},children:[m.jsx(Rt,{"data-testid":`blender-menu-${e}`,"aria-expanded":r===e,onClick:()=>s(r===e?null:e),onPointerEnter:()=>{r&&s(e)},style:{textTransform:"capitalize"},children:e}),r===e&&m.jsx($t,{anchorRef:u,dismissBoundaryRef:u,align:"start",gap:0,clamp:!0,"aria-label":e,onDismiss:()=>s(null),children:P})]})}function Fr(e,r,s){(async()=>{const u=await s;u===void 0||typeof u.destination!="string"||u.persisted!==!0&&e?.({tone:"error",title:`${r} was refused`,detail:u.destination})})()}function kt({documentId:e,notify:r}){h.useSyncExternalStore(je,Te,Te),h.useSyncExternalStore(mr,at,at);const[s,u]=h.useState(null),P=h.useRef(null),j=h.useRef(null),v=h.useRef(null),x=h.useRef(null),C=h.useRef(null),w=h.useSyncExternalStore(St,()=>e===void 0?!1:Ge(e),()=>!1),F=hr(e);if(F===null)return null;const T=(f,_)=>()=>{u(null),Fr(r,f,_(F))},$=F.selectedObjectNames(),W=F.allObjectNames(),N=$.length===0?"Nothing is selected.":void 0,H=ve(),V=f=>m.jsx(X,{"data-testid":`blender-add-${f.kind}`,disabled:f.refusal!==void 0,title:f.refusal,onSelect:T(`Add ${f.label}`,_=>_.structure.create(f.kind).ack),children:f.label},f.kind),G=f=>H.filter(_=>_.group===f).flatMap(_=>_.separatorBefore===!0?[m.jsx(me,{},`${_.kind}-separator`),V(_)]:[V(_)]),q=f=>{if("separatorAt"in f)return m.jsx(me,{},`separator-${f.separatorAt}`);if("kind"in f){const R=H.find(I=>I.kind===f.kind);return R===void 0?null:V(R)}const _=G(f.submenu);return _.length===0?m.jsx(X,{"data-testid":"blender-add-collection-instance",disabled:!0,children:Pr},f.submenu):m.jsx(ue,{label:f.submenu,"data-testid":`blender-add-${f.submenu.toLowerCase().replaceAll(" ","-")}`,children:_},f.submenu)};return m.jsxs(At,{compact:!0,label:"Blender Object Mode menus","data-testid":"blender-object-mode-menus",ref:P,children:[m.jsx(ye,{id:"view",open:s,setOpen:u,anchorRef:j,children:m.jsxs(ue,{label:"Area","data-testid":"blender-view-area",children:[m.jsx(X,{"data-testid":"blender-area-vertical-split",disabled:w||e===void 0,title:w?"This area is already split.":void 0,onSelect:()=>{u(null),e!==void 0&&it(e,!0)},children:"Vertical Split"}),m.jsx(me,{}),m.jsx(X,{"data-testid":"blender-area-close",disabled:!w,title:w?void 0:"There is no second area to close.",onSelect:()=>{u(null),e!==void 0&&it(e,!1)},children:"Close Area"})]})}),m.jsxs(ye,{id:"select",open:s,setOpen:u,anchorRef:v,children:[m.jsx(X,{"data-testid":"blender-select-all",onSelect:T("Select All",f=>f.selectObjects(W)),children:"All"}),m.jsx(X,{"data-testid":"blender-select-none",onSelect:T("Select None",f=>f.selectObjects([])),children:"None"}),m.jsx(X,{"data-testid":"blender-select-invert",onSelect:T("Select Invert",f=>f.selectObjects(W.filter(_=>!$.includes(_)))),children:"Invert"})]}),m.jsx(ye,{id:"add",open:s,setOpen:u,anchorRef:x,children:Mr.map(f=>q(f))}),m.jsxs(ye,{id:"object",open:s,setOpen:u,anchorRef:C,children:[m.jsx(ue,{label:"Set Origin","data-testid":"blender-object-origin",children:$r.map(f=>m.jsx(X,{"data-testid":`blender-origin-${f.type}`,disabled:f.refusal!==void 0||$.length===0,title:f.refusal??N,onSelect:T(`Set Origin ▸ ${f.label}`,_=>$e(_.selectedObjectNames(),`bpy.ops.object.origin_set(type='${f.type}')`)),children:f.label},f.type))}),m.jsx(ue,{label:"Clear","data-testid":"blender-object-clear",children:Rr.map(f=>m.jsx(X,{"data-testid":`blender-clear-${f.label.toLowerCase()}`,disabled:$.length===0,title:N,onSelect:T(`Clear ▸ ${f.label}`,_=>$e(_.selectedObjectNames(),f.call)),children:f.label},f.label))}),m.jsx(ue,{label:"Apply","data-testid":"blender-object-apply",children:Ar.map(f=>m.jsx(X,{"data-testid":`blender-apply-${f.label.toLowerCase().replace(/ /g,"-")}`,disabled:$.length===0,title:N,onSelect:T(`Apply ▸ ${f.label}`,_=>$e(_.selectedObjectNames(),`bpy.ops.object.transform_apply(${f.call})`)),children:f.label},f.label))}),m.jsx(me,{}),m.jsx(X,{"data-testid":"blender-object-duplicate",disabled:$.length===0,title:N,onSelect:T("Duplicate Objects",async f=>{const _=f.selectedObjectNames().map(R=>f.rowIdForObject(R)).filter(R=>R!==null);return f.structure.duplicateMany?.(_)}),children:"Duplicate Objects"}),m.jsx(X,{"data-testid":"blender-object-delete",disabled:$.length===0,title:N,onSelect:T("Delete",f=>{const _=f.selectedObjectNames().map(R=>f.rowIdForObject(R)).filter(R=>R!==null);return f.structure.removeMany?.(_)}),children:"Delete"})]})]})}const ne=(e,r,s)=>({weight:e,target:r,rate:s>0?1/s:0}),Me=(e,r)=>{e.weight=e.rate<=0?e.target:e.weight<e.target?Math.min(e.target,e.weight+r*e.rate):Math.max(e.target,e.weight-r*e.rate)};function Lr(e,r){const s=[],u=e.animationFacts(),P=Object.keys(u.actions),j=u.clock?.fps||24,v=u.clock?.start??1,x=Math.max(1,(u.clock?.end??v+249)-v+1),C=new Map;let w=0,F=!1;const T=new Map,$=(c,l,d)=>{c.clips.set(l,null),c.failed.set(l,d),s.push(`${c.rig.armature} / ${l}: ${d}`)},W=(c,l)=>{if(c.clips.has(l))return c.clips.get(l);c.clips.set(l,void 0),r(c.rig.armature,l).then(d=>{const g=d?dr(d):null;for(const p of g?.unsupported??[])s.push(`${c.rig.armature}: ${p} plays only in Blender, not in a game.${tt([p])}`);g?c.clips.set(l,g):$(c,l,d?.reason??`it animates none of ${c.rig.armature}'s bones`)},d=>$(c,l,`it could not be read: ${d instanceof Error?d.message:String(d)}`))};for(const c of e.skeletons.rigs()){const l=u.armatures[c.armature];if(!l)continue;const d=new ir(c);d.facts(l);for(const p of d.unsupported())s.push(`${c.armature}: ${p} plays only in Blender, not in a game.${tt([p])}`);const g={rig:c,pose:d,facts:l,clips:new Map,failed:new Map,line:[],tracks:new Map,constraints:new Map,posed:[]};l.action&&(g.line=[{action:l.action,from:0,loop:!0,speed:1,weight:ne(1,1,0)}]),C.set(c.armature,g)}const N=(c,l,d,g)=>{const p=W(c,l.action);if(!p)return p;const b=p.end-p.start,n=(w-l.from)*j*l.speed,i=b>0&&l.loop?p.start+(n%b+b)%b:Math.min(p.end,p.start+n);return{clip:p,frame:i,influence:d*l.weight.weight,blend:g}},H=c=>{const l=[],d=[];let g=null,p=!1,b=!1;const n=t=>{t===void 0?p=!0:t&&(l.push(t),d.push(g))},i=c.facts.animation,S=v+w*j%x,O=i?.tracks.some(t=>t.solo)??!1;for(const t of i&&i.useNla?i.tracks:[]){const a=c.tracks.get(t.name);if(O?!t.solo:a?a.mute:t.mute)continue;const y=a?a.influence.weight:1;if(g=t.name,a?.action){const E=t.strips[0]?.blendType??"REPLACE";a.previous&&n(N(c,a.previous,y,E)),n(N(c,a.action,y,E)),b=!0;continue}const k=cr({...i,tracks:[{...t,mute:!1,solo:!1}]},S,E=>W(c,E));k.waiting&&(p=!0),k.evaluated&&(b=!0);for(const E of k.layers)l.push({...E,influence:E.influence*y}),d.push(t.name)}for(const[t,a]of c.tracks)!a.own||a.mute||!a.action||(g=t,a.previous&&n(N(c,a.previous,a.influence.weight,"REPLACE")),n(N(c,a.action,a.influence.weight,"REPLACE")),b=!0);const A=!!i?.useNla,o=A&&b;g=null;for(const t of A&&O?[]:c.line)n(N(c,t,o?i.influence:1,o?i.blendType:"REPLACE"));return T.set(c,d),p?null:l},V=c=>{for(const d of C.values())if(d.rig.object===c)return d;const l=c.geometry?.userData.blenderSkin;return l?C.get(l.armature)??null:null},G=c=>{for(let d=c;d;d=d.parent){const g=V(d);if(g)return g}let l=null;return c.traverse(d=>{l||(l=V(d))}),l},q=(c,l)=>l in u.actions?c.failed.get(l)??null:`the file has no action "${l}"`,f=(c,l,d)=>({action:c,from:w,loop:l.loop??!0,speed:l.speed??1,weight:d}),_=c=>({ok:!0,armature:c.rig.armature}),R=new Set,I=c=>{if(!u.unkept.includes(c)||R.has(c))return;R.add(c);const l=`The game plays "${c}", which nothing in the file uses and has no fake user, so Blender drops it the next time the file saves. Give it a fake user (action.use_fake_user = True) or assign it.`;s.push(l),z().console.warn(l,"blender-animation")},M=c=>({ok:!1,why:`${c.name||"this object"} has no armature`});return{warnings:s,clips:c=>G(c)?P:[],play(c,l,d={}){const g=G(c);if(!g)return M(c);const p=q(g,l);if(p)return{ok:!1,why:p};I(l);const b=g.line.at(-1);if(b?.action===l&&b.weight.target>0)return d.restart&&(g.line[g.line.length-1]={...b,from:w}),_(g);const n=Math.max(0,d.fade??.2);return g.line=b&&n>0?[...g.line,f(l,d,ne(0,1,n))]:[f(l,d,ne(1,1,0))],_(g)},stop(c,l=.2){const d=G(c);if(d)if(l<=0)d.line=[];else for(const g of d.line)Object.assign(g.weight,ne(g.weight.weight,0,l))},playing:c=>{const l=G(c)?.line.at(-1);return l&&l.weight.target>0?l.action:null},track(c,l,d){const g=G(c);if(!g)return M(c);const p=g.facts.animation?.tracks.some(i=>i.name===l)??!1,b=g.tracks.get(l);if(d===null)return b?.own?Object.assign(b.influence,ne(b.influence.weight,0,.2)):g.tracks.delete(l),_(g);if(d.action){const i=q(g,d.action);if(i)return{ok:!1,why:i};I(d.action)}else if(!p&&!b)return{ok:!1,why:`${g.rig.armature} has no NLA track "${l}"; give it an \`action\` to make one`};const n=b??{action:null,previous:null,influence:ne(1,1,0),mute:!1,own:!p};if(d.influence!==void 0&&Object.assign(n.influence,ne(n.influence.weight,Math.max(0,Math.min(1,d.influence)),Math.max(0,d.fade??0))),d.mute!==void 0&&(n.mute=d.mute),d.action&&(n.action?.action!==d.action||d.restart)){const i=Math.max(0,d.fade??.2);n.previous=n.action&&i>0?n.action:null,n.action=f(d.action,d,ne(n.previous?0:1,1,i))}return g.tracks.set(l,n),_(g)},constraint(c,l,d,g){const p=G(c);if(!p)return M(c);const b=p.facts.bones.find(S=>S.name===l);if(!b)return{ok:!1,why:`${p.rig.armature} has no bone "${l}"`};const n=b.constraints?.find(S=>S.name===d);if(!n)return{ok:!1,why:`bone "${l}" has no constraint "${d}"; it has ${(b.constraints??[]).map(S=>`"${S.name}"`).join(", ")||"none"}`};if(n.type!=="DAMPED_TRACK")return{ok:!1,why:`"${d}" is a ${n.type} constraint, which plays only in Blender; a game plays Damped Track`};const i=`${l}\0${d}`;return p.constraints.set(i,{...p.constraints.get(i),...g}),_(p)},update(c){if(!F){w+=c;for(const l of C.values()){for(const b of l.line)Me(b.weight,c);let d=-1;l.line.forEach((b,n)=>{b.weight.weight>=1&&(d=n)}),d>0&&(l.line=l.line.slice(d)),l.line=l.line.filter(b=>b.weight.weight>0||b.weight.target>0);for(const[b,n]of l.tracks)Me(n.influence,c),n.action&&Me(n.action.weight,c),n.previous&&n.action&&n.action.weight.weight>=1&&(n.previous=null),n.own&&n.influence.weight===0&&n.influence.target===0&&l.tracks.delete(b);const g=H(l);if(!g)continue;const p=T.get(l)??[];l.posed=g.map((b,n)=>({track:p[n]??null,action:b.clip.action,frame:b.frame,influence:b.influence,blend:b.blend})),l.pose.apply(g,{object:b=>e.objectForBlenderName(b),override:(b,n)=>l.constraints.get(`${b}\0${n}`)})}}},channels(c,l){const d=C.get(c)?.clips.get(l);if(!d)return[];const g=new Map;for(const p of d.channels){let b=g.get(p.bone);b||g.set(p.bone,b=new Set);for(const n of p.curves)if(n)for(let i=0;i<n.keys.length;i+=6)b.add(Math.round(n.keys[i]*1e3)/1e3)}return[...g].map(([p,b])=>({bone:p,keys:[...b].sort((n,i)=>n-i)}))},live:()=>[...C.values()].map(c=>({armature:c.rig.armature,layers:c.posed})),dispose(){F=!0,C.clear()}}}function xe(e){return/file format is not supported|not a blend file/i.test(e)?"This file is not a supported Blender model. Choose a valid .blend file or return to the previous model.":/EACCES|permission denied|read-only file system/i.test(e)?"Blender could not access the model file. Check its file permissions, then try again.":/ENOENT|no such file|file not found/i.test(e)?"The model file could not be found. Check that it still exists, or return to the previous model.":/failed to fetch|networkerror|network error/i.test(e)?"Blender could not finish loading. Check your connection, then try again.":"Blender could not open this model. Try again, or return to the previous model. Details are available in the console."}function ct({documentId:e,path:r,error:s,preview:u,retry:P,returnToPreview:j,preparingView:v=!1,note:x=null}){const C=s?"Could not open model":v?"Preparing model view":"Opening model",w=h.useMemo(()=>{const F={id:`opening:${e}`,label:C,secondaryLabel:r,role:"boundary",kind:"object",parentId:null,childIds:[]};return{capabilities:{transform:!1,inspectorFields:!1,persist:!1},hierarchy:{roots:()=>[F],node:T=>T===F.id?F:null},subscribe:()=>()=>{}}},[e,r,C]);return m.jsxs("div",{"data-testid":"blender-model-opening","aria-busy":!s,style:{position:"absolute",inset:0,overflow:"auto",background:U.surface.panel,color:U.content.primary},children:[!v&&m.jsx(Mt,{documentId:e,type:"Model",title:r,status:s?xe(s):C,selection:()=>({adapter:w,nodeId:null})},C),u&&m.jsx("img",{src:u.image,alt:`Last view of ${u.path}`,draggable:!1,style:{position:"absolute",inset:0,width:"100%",height:"100%",objectFit:"contain",pointerEvents:"none"}}),m.jsxs("div",{style:{position:"relative",minHeight:"100%",display:"flex",flexDirection:"column",justifyContent:u?"flex-end":"center",alignItems:u?"flex-start":"center",boxSizing:"border-box",padding:Q[8],gap:Q[4]},children:[u&&m.jsxs("div",{style:{padding:`${Q[2]} ${Q[4]}`,background:U.surface.chrome,border:`1px solid ${U.boundary.default}`,borderRadius:U.shape.small,maxWidth:"100%",overflowWrap:"anywhere"},children:["Previous model: ",u.path," · Preview only"]}),m.jsx(Pt,{tone:s?"error":"loading",style:{width:"min(100%, 32rem)",background:U.surface.chrome,border:`1px solid ${U.boundary.default}`,borderRadius:U.shape.small,overflowWrap:"anywhere"},title:m.jsx("span",{style:{fontSize:Le.lg},children:C}),description:m.jsxs(m.Fragment,{children:[m.jsx("div",{style:{color:U.content.primary,marginBottom:Q[3]},children:r}),s?xe(s):v?"The file is open. Preparing its viewport.":u?"The previous model stays visible while this file opens.":"Preparing Blender and opening this file. The model will appear here when it is ready.",!s&&x&&m.jsx("div",{"data-testid":"blender-model-opening-note",style:{marginTop:Q[3],color:U.content.muted,userSelect:"text"},children:x}),s&&m.jsx("div",{"data-testid":"blender-model-opening-detail",style:{marginTop:Q[3],fontFamily:Ft,fontSize:Le.sm,color:U.content.muted,whiteSpace:"pre-wrap",userSelect:"text",textAlign:"left"},children:s})]}),action:s?m.jsxs("div",{style:{display:"flex",flexWrap:"wrap",justifyContent:"center",gap:Q[3]},children:[u&&m.jsx(We,{onClick:j,children:"Return to previous model"}),m.jsx(We,{variant:"secondary",onClick:P,children:"Retry opening"})]}):m.jsx("progress",{"aria-label":`Opening ${r}`,style:{width:"min(100%, 18rem)",accentColor:U.accent.default}})})]})]})}let se=null;const Ve=new Set;let Pe=!1;function xt(){Pe||(Pe=!0,queueMicrotask(()=>{Pe=!1;for(const e of[...Ve])e()}))}function dt(e){se?.project===e.project&&se.capturedAt>e.capturedAt||se!==e&&(se=e,xt())}function Tr(){se&&(se=null,xt())}function Nr(e){return se?.project===e?se:null}function Br(e){return Ve.add(e),()=>{Ve.delete(e)}}const ut="blender-model-open",Dr=3e4,pt=new WeakMap;let Ir=0;function Vr(e){let r=pt.get(e);return r===void 0&&(r=++Ir,pt.set(e,r)),r}const ft=new WeakSet,tn="workspace.document",rn="Blender Model",nn=({documentId:e,notify:r})=>m.jsx(kt,{documentId:e,notify:r}),Gr="model",on="owned",sn=[],Z=Qt,Wr={wireframe:"WIREFRAME",solid:"SOLID",preview:"MATERIAL",rendered:"RENDERED"},bt=new WeakMap;function zr(e){let r=bt.get(e);return r||(r={subject:()=>{const s=pe.playhead();return e.subjectLine(s===null?null:Math.floor(s))},gridScale:s=>e.gridUnitName(s),cameraView:{camera:()=>e.cameraViewCamera(),zoom:e.cameraViewZoom,pan:e.cameraViewPan,showing:s=>e.setCameraViewShowing(s),setPose:(s,u,P,j)=>{const{location:v,rotation:x}=e.blenderPose(u,P);return Ee(`from mathutils import Matrix, Quaternion, Vector
10
+ import bpy
11
+ object = bpy.data.objects[${JSON.stringify(s)}]
12
+ object.matrix_world = Matrix.LocRotScale(Vector((${v.join(", ")})), Quaternion((${x.join(", ")})), object.matrix_world.to_scale())`,j,"Lock Camera to View").then(C=>{C.error!==null&&z().console.error(`Blender refused the camera's pose: ${C.error}`,"blender-camera")},C=>z().console.error(`The camera's pose was not written to Blender: ${String(C)}`,"blender-camera"))},view:(s,u,P,j)=>e.cameraView(s,u,P,j)}},bt.set(e,r),r)}function an(e){const{active:r,document:s,documentId:u,notify:P,publishContext:j}=e,v=s?.source?.path,x=s?.id,C=JSON.stringify([u,x,v]),[w,F]=h.useState(null),[T,$]=h.useState(null),[W,N]=h.useState(0),H=z().projectLocalState.projectRootPath(),V=h.useSyncExternalStore(Br,()=>Nr(H),()=>null),G=h.useSyncExternalStore(ht,we,we),q=h.useRef(null),f=h.useRef({notify:P,publishContext:j});return f.current={notify:P,publishContext:j},h.useEffect(()=>z().session.onEnded(Tr),[]),h.useEffect(()=>{if(r===!1||!u||!x||!H||w?.key!==C||w.error)return;const _=Se(u);if(!_)return;let R=!1,I;const M=async()=>{try{const c=Z.snapshot(),l=ae(u);if(!l||_.root!==Z.root||!Ye(u,x,v,c))return;const d=await _.requestPresentedFrame();if(R||Z.snapshot()!==c||Se(u)!==_||_.root!==Z.root||ae(u)!==l||!Ye(u,x,v,c))return;if(d&&d.width>0&&d.height>0){const g=window.document.createElement("canvas");g.width=Math.min(d.width,1024),g.height=Math.max(1,Math.round(g.width*d.height/d.width));const p=g.getContext("2d");p&&(p.drawImage(d,0,0,g.width,g.height),q.current={project:H,entryId:x,path:v??"Model",image:g.toDataURL("image/png"),capturedAt:performance.now()},dt(q.current))}}catch{}finally{R||(I=setTimeout(()=>{M()},1e3))}};return M(),()=>{R=!0,clearTimeout(I)}},[r,v,u,x,H,C,w,G]),h.useLayoutEffect(()=>{if(!(r===!1||!u||!x||!H||w?.key!==C||w.error))return()=>{if(!z().session.open())return;const _=q.current;_?.project===H&&_.entryId===x&&dt(_)}},[r,v,u,x,H,C,w]),h.useEffect(()=>{if(r===!1||!u)return;let _=!1,R;const I=v===void 0?null:{documentId:u,entryId:x,blend:v},M=Xt(I),c=()=>{R=f.current.publishContext?.(Z)};F(null),$(null);const l=z().documents;let d=!1,g=!1,p=!1;const b=v??"the model",n=async()=>{if(!(_||d||g)){if(I&&!Zt(I)){p=!0;return}d=!0,p=!1;try{if(I){if(!await er(I,c)){p=!0;return}}else c();_||(g=!0,Nt(ut),F({key:C,error:null}))}catch(o){if(_)return;g=!0,R?.(),R=void 0;const t=o instanceof Error?o.message:String(o);F({key:C,error:t}),z().console.error(t,"blender-open"),f.current.notify?.({tone:"error",title:`Blender could not open ${b}`,detail:xe(t)}),Bt(ut,{message:`Blender could not open ${b}: ${t}`,guidance:`${xe(t)} Dismiss this to reach the model's Retry.`,command:null})}finally{d=!1}}},i=setInterval(()=>{_||g||$(p?`Still waiting: Blender is holding another model, and opens ${b} when it is free.`:`Still opening ${b}: Blender is working (a large file, or a cold start). ${Lt("status")} shows what it is busy with.`)},Dr);let S=!1;const O=()=>{_||S||(S=!0,setTimeout(()=>{S=!1,n()},0))},A=l.subscribe(O);return O(),()=>{_=!0,clearInterval(i),A(),R?.(),M()}},[r,v,u,x,C,W]),r===!1||!u?null:w?.key!==C||w.error?m.jsx(ct,{documentId:u,path:v??"Model",error:w?.key===C?w.error:null,preview:V,note:T,retry:()=>{F(null),N(_=>_+1)},returnToPreview:()=>{V&&z().workspace.open({kind:"document",id:V.entryId}).then(_=>{if(!_)throw new Error("The previous model is no longer available in this project.")}).catch(_=>f.current.notify?.({tone:"error",title:"Could not return to the previous model",detail:String(_)}))}}):m.jsxs(m.Fragment,{children:[m.jsx(Hr,{...e}),!ae(u)&&m.jsx(ct,{documentId:u,path:v??"Model",error:null,preparingView:!0,preview:V,retry:()=>{},returnToPreview:()=>{}})]})}function Hr(e){const{documentId:r}=e,s=e.document?.source?.path;h.useEffect(()=>r?ur(r,s):void 0,[r,s]),h.useEffect(()=>{if(!r)return;let p=!1,b=0,n=null;const i=[r,`${r}#area-2`,`${r}#play`],S=()=>{for(const a of i)Se(a)?.setDisplayTransform(n?.transform??null)},O=async()=>{const a=++b,y=await tr();if(!y)return;const[k,E]=await Promise.all([Qe(`${y.scene}.view_settings`),Qe(`${y.scene}.display_settings`)]);if(p||a!==b||k?.kind!=="struct"||k.type!=="ColorManagedViewSettings")return;if(E?.kind==="struct"){const Y=E.groups.flatMap(Ce=>Ce.rows).find(Ce=>Ce.identifier==="display_device")?.value;if(typeof Y=="string"&&Y!=="sRGB")throw new Error(`Blender display device ${Y} has no browser display processor yet`)}const B=k.groups.flatMap(Y=>Y.rows),K=B.find(Y=>Y.identifier==="view_transform")?.value,D=B.find(Y=>Y.identifier==="exposure")?.value,L=B.find(Y=>Y.identifier==="look")?.value,J=B.find(Y=>Y.identifier==="gamma")?.value,te=typeof D=="number"?2**D:1,ie={transform:typeof K=="string"?K:"AgX",look:typeof L=="string"?L:"None",exposure:te,gamma:typeof J=="number"?J:1},de=JSON.stringify(ie);if(n?.key===de)return;const ce=await rr(ie);if(p||a!==b){ce.dispose();return}const Et=n;n={key:de,transform:ce},S(),Et?.transform.dispose();for(const Y of i)Oe(Y,{modes:{rendered:{lighting:{tone:{mapper:"none",exposure:1}}},preview:{lighting:{tone:{mapper:"none",exposure:1}}}}})},A=()=>{O().catch(a=>z().console.error(String(a),"blender-colour"))},o=gt(A),t=yt(S);return A(),()=>{p=!0,o(),t();const a=n;n=null,S(),a?.transform.dispose()}},[r]);const u=h.useSyncExternalStore(St,()=>r?Ge(r):!1,()=>!1),[P,j]=h.useState(null);h.useEffect(()=>{if(!u||!r)return;const p=`${r}#area-2`;Tt(p).drawMode===void 0&&Oe(p,{drawMode:"rendered"});const b=Z.follow();return j(b),()=>{j(null),b.dispose()}},[u,r]);const v=h.useSyncExternalStore(Ae,()=>r?ee("model")?.playing(r)??!1:!1,()=>!1),[x,C]=h.useState(null),w=h.useSyncExternalStore(Ae,()=>r?ee("model")?.aspectRatio?.(r)??null:null,()=>null),[F,T]=h.useState(!1),$=h.useSyncExternalStore(Ae,()=>r?ee("model")?.transport?.generation(r)??0:0,()=>0),[W,N]=h.useState($),[H,V]=h.useState(null),G=h.useRef(!1),q=h.useRef(!1);h.useLayoutEffect(()=>{if($!==W){if(v&&r){if(G.current=!0,!q.current){let p=null;try{p=ae(`${r}#play`)?.capture?.()??null}catch{}V(p)}q.current=!0}N($)}},[$,W,v,r]);const f=ee("model")?.transport,_=h.useCallback(p=>f?.subscribeClock(p)??(()=>{}),[f]),R=h.useSyncExternalStore(_,()=>r&&f?f.clock(r).failure??null:null,()=>null);h.useEffect(()=>{R!==null&&(q.current=!1,V(null))},[R]);const I=h.useRef([]);h.useEffect(()=>{if(!v||!r){G.current=!1;return}const p=`${r}#play`;Oe(p,{drawMode:"rendered"});const b=Z.detach(),n=G.current;return G.current=!1,n||T(!1),C(b),n||(Z.setPlaying(!0),ze(r)),()=>{if(G.current&&ee("model")?.playing(r)){I.current.push(b);return}b.dispose();for(const i of I.current.splice(0))i.dispose();q.current=!1,C(null),V(null),Z.setPlaying(!1),ze(r)}},[v,r,W]),h.useEffect(()=>{for(const p of I.current.filter(b=>b!==x))p.dispose();I.current=I.current.filter(p=>p===x)},[x]),h.useEffect(()=>()=>{for(const p of I.current.splice(0))p.dispose()},[]),h.useEffect(()=>{if(r)return()=>ee("model")?.setPlaying(r,!1)},[r]);const M=v?x:null,c=w===null?{position:"absolute",inset:0}:{position:"absolute",left:"50%",top:"50%",transform:"translate(-50%, -50%)",width:`min(100cqw, calc(100cqh * ${w}))`,height:`min(100cqh, calc(100cqw / ${w}))`};if(h.useEffect(()=>{if(!M||!r)return;const p=ae(r);if(!p)return;const b=p.capture,n=i=>ae(`${r}#play`)?.capture?.(i)??null;return p.capture=n,()=>{p.capture===n&&(b?p.capture=b:delete p.capture)}},[M,r]),!r)return null;const l=u?P:null,d={position:"relative",flex:"1 1 0",minWidth:0,margin:12},g=M!==null&&F;return m.jsxs("div",{style:M||l?{position:"absolute",inset:-12,display:"flex",gap:2}:{display:"contents"},children:[m.jsx("div",{inert:g||void 0,style:M?{position:"absolute",inset:12,zIndex:2,opacity:F?0:1,pointerEvents:F?"none":"auto",transition:"opacity 160ms ease-out"}:l?d:{display:"contents"},children:m.jsx(Fe,{...e,view:Z,main:!0})},"model"),M&&m.jsx("div",{style:{position:"absolute",inset:12,containerType:"size"},"data-testid":"blender-play-area",children:m.jsx("div",{"data-volter-play-frame":!0,style:c,children:m.jsx(Fe,{...e,documentId:`${r}#play`,view:M.view,main:!1,playing:!0,onPlayReady:()=>{q.current=!1,T(!0),V(null)},onPlayReturn:()=>T(!1)})})},`play-${Vr(M)}`),M&&R!==null&&m.jsxs("div",{role:"alert","data-testid":"blender-play-failure",style:{position:"absolute",left:24,right:24,top:24,zIndex:4,padding:`${Q[2]} ${Q[3]}`,background:U.surface.chrome,border:`1px solid ${U.semantic.danger}`,borderRadius:U.shape.small,color:U.content.primary,fontSize:Le.sm,whiteSpace:"pre-wrap",overflowWrap:"anywhere",userSelect:"text"},children:[m.jsx("strong",{style:{color:U.semantic.danger},children:"Play is not running."})," ",R," Restart (or save the script) to try again, or Stop."]},"play-failure"),M&&H!==null&&m.jsx("div",{style:{position:"absolute",inset:12,containerType:"size",zIndex:3,pointerEvents:"none"},"data-testid":"blender-play-restart-still",children:m.jsx("img",{alt:"",src:H,style:{...c,display:"block",objectFit:"fill"}})},"restart-still"),l&&m.jsxs("div",{style:{...d,visibility:M?"hidden":void 0},"aria-hidden":M?!0:void 0,"data-testid":"blender-second-area",children:[m.jsx(Fe,{...e,documentId:`${r}#area-2`,view:l.view,main:!1}),!M&&m.jsx(qr,{documentId:r,areaId:`${r}#area-2`,notify:e.notify})]},"second")]})}function qr({documentId:e,areaId:r,notify:s}){h.useSyncExternalStore(ht,we,we);const u=h.useSyncExternalStore(It,()=>Vt(e)),P=ae(r)?.HeaderControls,j=h.useRef(null);return h.useEffect(()=>{const v=j.current,x=v?.parentElement;if(!x)return;const C=()=>qe(e,{headerWidth:x.getBoundingClientRect().width+12,shelf:v});C();const w=new ResizeObserver(C);return w.observe(x),()=>{w.disconnect(),qe(e,null)}},[e]),m.jsxs(m.Fragment,{children:[m.jsx("div",{ref:j,className:"volter-dock-document-shelf",role:"toolbar","aria-orientation":"vertical","aria-label":"Document tools"}),u&&Gt.createPortal(m.jsxs("div",{className:"volter-dock-document-toolbar-own","data-testid":`document-header:${r}`,style:{display:"flex",alignItems:"center"},children:[m.jsx(kt,{documentId:e,notify:s}),P&&m.jsx(h.Suspense,{fallback:null,children:m.jsx(P,{documentId:r})})]}),u)]})}function Fe({active:e,document:r,documentId:s,notify:u,surfaces:P,view:j,main:v,playing:x=!1,onPlayReady:C,onPlayReturn:w}){const F=zr(j),T=h.useCallback(()=>({root:j.root,prepareDraw:(n,i)=>j.prepareDraw(n,i),...x?{}:{onChange(n){const i=j.onChange(n),S=pe.subscribe(n);return()=>{i(),S()}}},dispose(){}}),[j,x]),$=r?.source?.path,W=h.useCallback(n=>{const i=j.onChange(n),S=pe.subscribe(n);let O=null;const A=()=>{O?.(),O=oe().find(t=>t.documentId===s)?.onFrame(n)??null};A();const o=he(A);return()=>{i(),S(),o(),O?.()}},[s,j]),N=h.useSyncExternalStore(W,F.subject),H=h.useMemo(()=>v?Cr:vt(()=>j),[v,j]);h.useEffect(()=>{if(v||x||!s)return;let n=!1;const i=()=>{if(n)return;const A=Se(s);A===null||j.cameraViewCamera()===null||(n=A.toggleCameraView())};i();const S=yt(i),O=j.subscribeFrames(i);return()=>{S(),O()}},[v,x,s,j]);const V=h.useRef(u),G=h.useRef(null),[q,f]=h.useState(!1);V.current=u;const _=h.useRef(C);_.current=C;const R=h.useRef(w);R.current=w,h.useEffect(()=>{if(!x||!s)return;if($===void 0){V.current?.({tone:"error",title:"This model has no play script",detail:"A play script stands beside a model's .blend file, and this model has no file of its own."});return}const n=s.replace(/#play$/,""),i=window.document.createElement("div");Object.assign(i.style,{position:"absolute",inset:"0",pointerEvents:"none"}),i.dataset.testid="model-play-roots",G.current?.appendChild(i),f(!1);let S=!1,O=!1,A=null,o=null,t=null;const a=()=>{if(A||O||S)return;const D=oe().find(L=>L.documentId===s);!D||!j.root.parent||(O=!0,o=D.rig().orbit,o.enabled=!1,j.prepareRendered(D.rig().drawCamera(),"render").then(()=>{S||(t=Lr(j,(L,J)=>Re({object:L,action:J})),rt(t),A=ee("model")?.run({...t?{animation:t}:{},documentId:n,container:i,ready:()=>{S||(f(!0),_.current?.())},returning:()=>{S||R.current?.()},sourcePath:$,root:j.root,camera:()=>D.rig().drawCamera(),editingCamera:()=>oe().find(L=>L.documentId===n)?.rig().drawCamera()??D.rig().drawCamera(),onFrame:L=>D.onFrame(L),ownMaterial:L=>nr(L),report:(L,J)=>{z().console.error(`${L}: ${J}`,"blender-play"),V.current?.({tone:"error",title:L,detail:J})}})??null)},L=>{if(S)return;const J=`The game's stage could not be prepared for a rendered draw: ${L instanceof Error?L.message:String(L)}`;z().console.error(J,"model-play");const te=ee("model");te?.transport?.fail?te.transport.fail(n,$,J):(V.current?.({tone:"error",title:"Play could not start",detail:J}),te?.setPlaying(n,!1))}))};a();let y,k;const E=()=>{const D=oe().find(L=>L.documentId===s);D!==y&&(k?.(),y=D,k=D?.onFrame(a),a())};E();const B=he(E),K=D=>{if(D.key==="Escape"&&Wt(D)){const L=ee("model");L?.escape?L.escape(n):L?.setPlaying(n,!1)}};return window.addEventListener("keydown",K,!0),()=>{S=!0,B(),k?.(),window.removeEventListener("keydown",K,!0),A?.(),pr()===t&&rt(null),t?.dispose(),t=null,i.remove(),o&&(o.enabled=!0)}},[x,s,$,j]),h.useEffect(()=>!v||!s?void 0:He(()=>{const i=j.savedView(),S=Ue(s).drawMode,O=Wr[S];!i||O===void 0||i.drawMode===S||(j.noteSavedShading(O),or(O))}),[v,s,j]),h.useEffect(()=>{if(v||!s)return;const n=()=>{const i=zt(s);i===null||ft.has(i)||(ft.add(i),i.showHelpers&&i.toggleHelpers(),i.showGizmos&&i.toggleGizmos())};return n(),Dt(n)},[v,s]),h.useEffect(()=>{if(!s)return;const n=j.overlayGroups(),i=()=>{const O=oe().find(A=>A.documentId===s);if(O)for(const{kind:A,object:o}of n)O.setHelper(A,o)};i();const S=he(i);return()=>{S();const O=oe().find(A=>A.documentId===s);for(const{kind:A}of n)O?.setHelper(A,null)}},[s,j]);const I=h.useSyncExternalStore(gt,Xe,Xe);h.useEffect(()=>{if(!s||!v)return;let n=!0;return pe.sync(j,{clip:i=>Re({object:i}),bake:(i,S)=>Re({object:i,action:S})}).catch(i=>{n&&z().console.warn(`This file's action could not be read: ${i instanceof Error?i.message:String(i)}`,"blender-skin")}),()=>{n=!1}},[s,v,j,I]),h.useEffect(()=>{if(!s||!v)return;const{transport:n}=z();let i=null,S=!1,O=!1;const A=()=>{if(S||i)return;const a=n.for(s);a&&(i=pe.attachTo(a))},o=()=>{S||O||(O=!0,queueMicrotask(()=>{O=!1,A()}))};o();const t=n.subscribe(o);return()=>{S=!0,t();const a=i;i=null,a&&queueMicrotask(a)}},[s,v]),h.useEffect(()=>{if(!s)return;const n=()=>oe().find(y=>y.documentId===s);let i,S=null;const O=new fr,A=()=>n()?.rig().drawCamera()??O,o=()=>{const y=n();y!==i&&(S?.(),S=y?y.onFrame(()=>j.refreshRendered()):null,i=y);const{lighting:k,drawMode:E}=Ue(s),B=E==="preview",K=B?{world:k.source==="scene",lights:k.preview.sceneLights}:void 0,D=k.source==="scene"||B&&k.preview.sceneLights;j.holdRendered(D&&y?A:null,K,x?"render":"viewport"),j.setWorkbench(k.source==="studio"&&k.studioPreset===mt.id)};o();const t=He(o),a=he(o);return()=>{t(),a(),S?.(),j.holdRendered(null),j.setWorkbench(!1)}},[s,j,x]);const M=h.useRef(null),c=n=>!x&&n.button===2&&n.shiftKey&&n.target instanceof HTMLCanvasElement,l=n=>{if(!c(n)){M.current=null;return}n.preventDefault(),n.stopPropagation(),M.current={id:n.pointerId,x:n.clientX,y:n.clientY},n.isTrusted&&n.target.setPointerCapture(n.pointerId)},d=()=>{M.current=null},g=n=>{const i=M.current;if(i===null||n.pointerId!==i.id||n.button!==2||(M.current=null,n.preventDefault(),n.stopPropagation(),Math.hypot(n.clientX-i.x,n.clientY-i.y)>3))return;const S=j.placeCursor(n.clientX,n.clientY,n.target);if(S===null)return;const[O,A,o]=S.location,[t,a,y,k]=S.rotation;Ee(`from mathutils import Matrix, Quaternion, Vector
13
+ bpy.context.scene.cursor.matrix = Matrix.LocRotScale(Vector((${O}, ${A}, ${o})), Quaternion((${t}, ${a}, ${y}, ${k})), None)`,!1,"Set 3D Cursor").then(E=>{E.error!==null&&z().console.error(`Blender refused the 3D cursor: ${E.error}`,"blender-cursor")},E=>z().console.error(`The 3D cursor was not written to Blender: ${String(E)}`,"blender-cursor"))},p=n=>{c(n)&&n.preventDefault()};if(!s)return null;const b=P.Object3DAuthoring;return m.jsx("div",{ref:G,"data-play-ready":x?q:void 0,style:x?{position:"absolute",inset:0}:{display:"contents"},onPointerDownCapture:l,onPointerUpCapture:g,onPointerCancelCapture:d,onLostPointerCaptureCapture:d,onContextMenuCapture:p,children:m.jsx(b,{active:e??!0,fillContainer:x,documentId:s,sourcePath:$??"blender:runtime",displayName:r?.label??"Model",...N===null?{}:{subject:N},gridScale:F.gridScale,cameraView:F.cameraView,build:T,audit:!1,...x?{}:{authoring:H},cameraDirection:[.8187,.4458,.3617],openingFit:3,openingView:j.savedView(),presentation:(()=>{const n=j.savedView();if(!n)return null;const i={fov:wt(n.lens)};return v&&n.drawMode?{camera:i,drawMode:n.drawMode,modes:{preview:{lighting:{source:n.sceneWorld?"scene":"preview",preview:{sceneLights:n.sceneLights}},backdrop:{source:n.sceneWorld?"scene":"fill"}}}}:{camera:i}})(),stageKind:Gr,dressing:{environment:!1,keyLight:!1,viewLocked:j.studioLights()}})})}export{nn as Toolbar,an as default,Gr as documentKind,sn as inspectorBuiltins,on as inspectorRail,tn as point,rn as title};
@@ -0,0 +1 @@
1
+ import{h2 as n,iD as r}from"./volter-sdk-Dc6t2ANP.js";const c="workspace.menu",i={menu:"window",items:[{id:"blender-save-screenshot-editor",label:"Save Screenshot (Editor)…",testId:"menu-save-screenshot-editor",execute:async()=>{const e=n(),t=await e.documents.captureActive();r(t.base64);const o=`screenshots/screenshot-${new Date().toISOString().replace(/[:.]/g,"-")}.png`;await e.files.write(o,Uint8Array.from(atob(t.base64),s=>s.charCodeAt(0))),e.console.log(`Saved the screenshot to ${o}.`,"blender-screenshot")}}]};export{i as menu,c as point};
@@ -0,0 +1 @@
1
+ import{n as m,aJ as Oe,j as r,ie as rt,h_ as Ie,ig as Me}from"./volter-sdk-Dc6t2ANP.js";import{s as ve,b as X,g as st}from"./blender-runtime-host-BJ0IarOD.js";import{s as je,p as U,m as ie,a as pe,b as v,c as at,d as ot,e as Le,f as he,g as G,h as He,l as se}from"./play-live-CNIS7Ko6.js";import"./output-pass-j4dAGrPY.js";import"./three.module-CtVjCPcj.js";import"./linear-resolve-Cuka7Ypb.js";const lt={transform:{startFrame:-5,pixelsPerFrame:8},refusal:null,size:{w:0,h:0},framedAt:0,drawn:null,onlySelected:!0,editor:"timeline"};let le=lt,ke=0;const de=new Set;let _e=0;function C(){return le}function D(){return ke}function ae(e){return de.add(e),()=>{de.delete(e)}}function z(e){le={...le,...e},ke+=1;for(const t of[...de])t()}function dt(e){le.onlySelected!==e&&z({onlySelected:e})}function Ce(){_e+=1,ke+=1;for(const e of[...de])e()}function ct(){return _e}function ze(e){z({refusal:e})}const ut=20,M=23,q=26,L=16,mt=2,pt=M+mt,Te=35,ht=6;function De(e){const t=[2,3,5],i=[];for(let n=0;n<t.length;n++){const o=t[n],s=Math.trunc(e/o),a=s*o===e;if(a&&s===2)return o;i[n]=a}for(let n=0;n<t.length;n++)if(i[n])return t[n];return e}function ft(e,t,i,n){if(i===0)return 1;const o=t/i;let s=Math.max(e,1);if(o*s>n)for(;s>1;){const a=De(s),u=Math.trunc(s/a);if(o*u<n)break;s=u}else for(;o*s<n&&s<1<<30;)s*=2;return s}function yt(e){return e<=1?null:e/De(Math.round(e))}const x={back:"#303030",header:"#303030",grid:"#161616",gridMinor:"#262626",scrubBack:"#1d1d1d",scrubText:"#808080",playhead:"#4772b3",playheadText:"#ffffff",keyBorder:"#000000"},xe={KEYFRAME:{fill:"#bfbfbf",selected:"#ffbe33"},EXTREME:{fill:"#e8b3cc",selected:"#f28080"},BREAKDOWN:{fill:"#b3dbe8",selected:"#54bfed"},JITTER:{fill:"#94e575",selected:"#61c042"},MOVING_HOLD:{fill:"#808080",selected:"#ffaf23"},GENERATED:{fill:"#585858",selected:"#a28962"}},xt={KEYFRAME:1,EXTREME:1.2,MOVING_HOLD:.925,BREAKDOWN:.85,JITTER:.8,GENERATED:.75},ge=5.06,Be=2.12,gt=15,E={minPillWidth:24,textPadding:4,margin:2,radius:4,tipHalfWidth:6,tipHeight:6,stalkWidth:3},$e="#212121",l={text:"#a6a6a6",textHi:"#ffffff",rule:"#161616",widget:"#545454",widgetText:"#e6e6e6",widgetOutline:"#3d3d3d",widgetRadius:4,unit:ut,refusal:"#ffaf23",headerPadding:"0 8px",headerGap:8,statusPadding:"2px 8px"},bt=.2,ce={time:0,tick:0,paused:!1,speed:1},re={on:!1,available:!1,by:null};function Z(){return rt("model")}function K(e,t){t==="game"&&v.transport?.snapshot().playbackState==="playing"&&v.transport.pause(),at(e,t)}function O(e){const t=e?.document;if(typeof t=="string"&&t!=="")return t;const i=pe();if(i===null)throw new Error("No model document is open; open one, or name it with `document`.");return i}function B(){const e=Z();if(e===null)throw new Error("This project has no Play tool: `cyclotron add-play` adds @volter/play.");if(e.transport===void 0)throw new Error("The installed Play tool has no pause, step, speed or restart; update @volter/play.");return e}function I(e){const t=Z(),i=Le(e);return{document:e,mode:ie(e),playing:t?.playing(e)??!1,script:i===void 0||t?.scriptPath===void 0?null:{path:t.scriptPath(i),exists:t.hasScript?.(i)??null},clock:t?.transport?.clock(e)??ce,speeds:t?.transport?.speeds??[],autoplay:wt(e)}}function Ge(e,t){return e?t.on?"bot":t.person===!1?"none":"person":null}function wt(e){const t=Z(),i=t?.transport?.autoplay?.(e)??re,n=t?.playing(e)??!1,o=Ve(n,t?.transport?.clock(e)??ce,i);return{...i,driver:Ge(n,i),why:o}}function We(e,t,i){return i.available?null:e&&(t.running??!t.failure)?"no-bot":"not-running"}function Ve(e,t,i){switch(We(e,t,i)){case null:return null;case"no-bot":return"No autoplay — this game doesn’t provide a bot: its play script registers none with play.autoplay(controller).";case"not-running":return e?`Autoplay is available once the game is running, and it is not running yet${t.failure?`: ${t.failure}`:"."}`:"Autoplay is available once the game is running, and nothing is playing; `play` starts it."}}function fe(e,t){if(!B().playing(e))throw new Error(`Nothing is playing in ${e}, so there is nothing to ${t}; \`play\` starts it.`)}Ie({view:"model-play",title:"Game",verbs:[{id:"state",run:e=>I(O(e))},{id:"mode",run:e=>{const t=O(e),i=e?.mode??e?.to;if(i!==void 0){const n=ot(i);if(n===null)throw new Error(`mode is \`game\` or \`animation\`; got ${String(i)}.`);K(t,n)}return I(t)}},{id:"game-mode",title:"Game: Switch to Game Mode",run:e=>{const t=O(e);return K(t,"game"),I(t)}},{id:"animation-mode",title:"Game: Switch to Animation Mode",run:e=>{const t=O(e);return K(t,"animation"),I(t)}},{id:"play",title:"Game: Play",run:e=>{const t=O(e),i=B();return ie(t)!=="game"&&K(t,"game"),i.playing(t)||i.setPlaying(t,!0),I(t)}},{id:"stop",title:"Game: Stop",run:e=>{const t=O(e);return B().setPlaying(t,!1),I(t)}},{id:"pause",title:"Game: Pause",run:e=>{const t=O(e);return fe(t,"pause"),B().transport.setPaused(t,!0),I(t)}},{id:"resume",title:"Game: Resume",run:e=>{const t=O(e);return fe(t,"resume"),B().transport.setPaused(t,!1),I(t)}},{id:"step",title:"Game: Step One Tick",run:e=>{const t=O(e);fe(t,"step");const{transport:i}=B();if(!i.clock(t).paused)throw new Error("step runs one tick of a PAUSED game; `pause` first.");const n=e?.count,o=n===void 0?1:typeof n=="string"&&n.trim()!==""?Number(n):typeof n=="number"?n:Number.NaN;if(!Number.isInteger(o)||o<1||o>600)throw new Error(`step's \`count\` is a whole number from 1 to 600; got ${JSON.stringify(n)}.`);for(let s=0;s<o;s++)i.step(t);return I(t)}},{id:"speed",run:e=>{const t=O(e),{transport:i}=B(),n=e?.speed??e?.to,o=Number(typeof n=="string"?n.replace(/x$/i,""):n);if(!i.speeds.includes(o))throw new Error(`speed is one of ${i.speeds.join(", ")} (simulation seconds per real second); got ${JSON.stringify(n)}.`);return i.setSpeed(t,o),I(t)}},{id:"autoplay",run:e=>{const t=O(e),i=e?.on,n=i===!0||i==="on"||i==="true"?!0:i===!1||i==="off"||i==="false"?!1:void 0;if(n===void 0)throw new Error(`autoplay's \`on\` is true or false (\`play autoplay on|off\`); got ${String(i)}.`);const o=typeof e?.behavior=="string"&&e.behavior!==""?e.behavior:null,s=e?.for??e?.limit,a=s==null?null:Number(s);if(a!==null&&!(Number.isFinite(a)&&a>0))throw new Error(`autoplay's \`for\` is a positive number of simulation seconds; got ${JSON.stringify(s)}.`);const u=B(),{transport:f}=u;if(f.setAutoplay===void 0)throw new Error("The installed Play tool has no autoplay; update @volter/play.");const c=n?Ve(u.playing(t),f.clock(t),f.autoplay?.(t)??re):null;if(c!==null)throw new Error(c);return f.setAutoplay(t,n,"cli",n?{behavior:o,limit:a}:void 0),I(t)}},{id:"restart",title:"Game: Restart",run:e=>{const t=O(e),i=B();return ie(t)!=="game"&&K(t,"game"),i.transport.restart(t),I(t)}}]});const vt=e=>e.preventDefault();function oe(e){return r.jsx("svg",{width:12,height:12,viewBox:"0 0 12 12","aria-hidden":"true",children:r.jsx("path",{d:e,fill:l.widgetText})})}const V={play:"M3 2l7 4-7 4z",stop:"M2.5 2.5h7v7h-7z",pause:"M3 2h2v8H3zM7 2h2v8H7z",step:"M10 2H8.5v8H10zM2.5 2v8L7.5 6z",restart:"M6 1.5V0l3 2.25-3 2.25V3a3 3 0 1 0 3 3h1.5A4.5 4.5 0 1 1 6 1.5z"};function W({label:e,testId:t,disabled:i,pressed:n,wide:o,onClick:s,children:a}){const u=l.unit;return r.jsx("button",{type:"button","data-testid":t,title:e,"aria-label":e,"aria-pressed":n,disabled:i,onMouseDown:vt,onClick:s,style:{minWidth:u,height:u,padding:o?"0 6px":0,border:`1px solid ${l.widgetOutline}`,background:n?x.playhead:l.widget,color:l.widgetText,font:"inherit",display:"inline-flex",alignItems:"center",justifyContent:"center",gap:4,cursor:i?"not-allowed":"pointer",opacity:i?.4:1},children:a})}function Se({title:e}){m.useSyncExternalStore(je,U,U);const t=m.useSyncExternalStore(Oe,Z,()=>null),i=pe();if(t===null||i===null)return r.jsx("span",{style:{color:l.text},children:e});const n=ie(i),o=(s,a,u)=>r.jsx(W,{testId:`model-play-mode-${s}`,label:u,pressed:n===s,wide:!0,onClick:()=>K(i,s),children:a});return r.jsxs("div",{role:"group","aria-label":"Game or Animation","data-testid":"model-play-mode",style:{display:"flex"},children:[o("game","Game","Game: this area is the Game panel, with Play, pause, step, speed, restart and autoplay"),o("animation","Animation","Animation: this area is Blender’s animation editors (Timeline, Action Editor, NLA); a running game keeps running and they show what it animates")]})}function Ke(e){const t=Math.floor(e/60),i=(e-t*60).toFixed(2).padStart(5,"0");return t<60?`${t}:${i}`:`${Math.floor(t/60)}:${String(t%60).padStart(2,"0")}:${i}`}function Ae(e){return`${e}×`}function jt(){m.useSyncExternalStore(je,U,U);const e=pe(),t=m.useSyncExternalStore(Oe,Z,()=>null),i=t?.transport,n=e!==null&&(t?.playing(e)??!1),o=m.useCallback(h=>i?.subscribeClock(h)??(()=>{}),[i]),s=m.useSyncExternalStore(o,()=>e!==null&&i?i.clock(e):ce,()=>ce),a=m.useSyncExternalStore(o,()=>e!==null&&i?.autoplay?i.autoplay(e):re,()=>re),u=e===null?void 0:Le(e),f=u===void 0?null:t?.scriptPath?.(u)??null,c=u===void 0?null:t?.hasScript?.(u)??null,p=e!==null&&t!==null,b=e===null?"No model document is open.":c===!1&&f!==null?`No play script yet — Play runs ${f}. \`cyclotron add-play\` adds an example.`:n&&s.failure?`Not running — ${s.failure.replace(/\.$/,"")}. Restart (or save the script) to retry, or Stop.`:n?`${s.paused?"Paused":"Playing"} ${f??""}`.trim():f===null?"Stopped.":`Stopped · Play runs ${f}`;return r.jsxs("div",{"data-testid":"blender-game-panel","data-playing":n||void 0,"data-paused":n&&s.paused||void 0,"data-failed":n&&!!s.failure||void 0,style:{position:"absolute",inset:0,display:"flex",flexDirection:"column",overflow:"hidden",background:x.back,color:l.text,font:"11px Inter, system-ui, sans-serif"},children:[r.jsxs("div",{style:{height:q,flex:`0 0 ${q}px`,display:"flex",alignItems:"center",gap:l.headerGap,padding:l.headerPadding,background:x.header,borderBottom:`1px solid ${l.rule}`},children:[r.jsx(Se,{title:"Game"}),r.jsx("div",{style:{flex:1}}),r.jsxs("div",{style:{display:"flex"},role:"group","aria-label":"Game transport",children:[r.jsxs(W,{testId:"model-play-button",label:n?"Stop playing (Escape)":"Play this model’s script",pressed:n,wide:!0,disabled:!p,onClick:()=>{e!==null&&t&&t.setPlaying(e,!t.playing(e))},children:[oe(n?V.stop:V.play),n?"Stop":"Play"]}),i&&r.jsxs(r.Fragment,{children:[r.jsx(W,{testId:"model-play-pause",label:s.paused?"Resume":"Pause",pressed:n&&s.paused,disabled:!n,onClick:()=>{e!==null&&i.setPaused(e,!i.clock(e).paused)},children:oe(s.paused?V.play:V.pause)}),r.jsx(W,{testId:"model-play-step",label:"Step one tick (while paused)",disabled:!n||!s.paused,onClick:()=>{e!==null&&i.step(e)},children:oe(V.step)}),r.jsx(W,{testId:"model-play-restart",label:"Restart on a fresh copy of the model",disabled:!n,onClick:()=>{e!==null&&i.restart(e)},children:oe(V.restart)})]})]}),i&&r.jsx("div",{style:{display:"flex"},role:"group","aria-label":"Game speed",children:i.speeds.map(h=>r.jsx(W,{testId:`model-play-speed-${h}`,label:`Speed ${Ae(h)}`,pressed:s.speed===h,wide:!0,disabled:e===null,onClick:()=>{e!==null&&i.setSpeed(e,h)},children:Ae(h)},h))}),r.jsx("div",{style:{flex:1}}),r.jsxs("span",{"data-testid":"model-play-clock",style:{color:l.widgetText,fontVariantNumeric:"tabular-nums",whiteSpace:"nowrap"},children:[Ke(s.time)," · tick ",s.tick]})]}),r.jsxs("div",{style:{flex:1,minHeight:0,display:"flex",alignItems:"stretch",gap:l.headerGap,padding:l.statusPadding,overflow:"hidden"},children:[r.jsxs("div",{style:{flex:"0 1 260px",minWidth:0,display:"flex",flexDirection:"column",gap:6},children:[r.jsx("span",{"data-testid":"model-play-status",title:b,style:{whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:b}),i?.autoplay&&e!==null&&r.jsx(kt,{documentId:e,playing:n,clock:s,autoplay:a,transport:i})]}),t?.log&&e!==null&&r.jsx(St,{documentId:e,log:t.log})]})]})}function kt({documentId:e,playing:t,clock:i,autoplay:n,transport:o}){const s=We(t,i,n),a=n.armed===!0,u=!t&&o.armAutoplay!==void 0,f=s==="no-bot"?"This game provides no bot: its play script registers none with play.autoplay(controller)":s==="not-running"?u?a?"Autoplay is armed for the next Play; press to disarm":"Turn autoplay on as soon as the game is running (if it offers a bot)":"Autoplay is available once the game is running":n.on?"Stop autoplay and drive yourself":"Let the game’s bot drive (any key or click in the game takes over)",c=s==="no-bot"?"No autoplay — this game doesn’t provide a bot":s==="not-running"?a?"Armed — turns on once the game is running":"Available once the game is running":null,p=n.behaviors??[],[b,h]=m.useState(null),T=n.on||a?n.behavior??null:b!==null&&p.includes(b)?b:p[0]??null,S=Ge(t,n),w=S!=="none"?null:n.by==="limit"&&n.limit?`Autoplay stopped at its ${Math.round(n.limit)} s limit`:n.refused?`Autoplay didn’t start: ${n.refused}`:null,P=[n.behavior,n.state].filter(Boolean).join(" — ");return r.jsxs("div",{style:{display:"flex",alignItems:"center",gap:l.headerGap,minWidth:0},children:[p.length>1&&r.jsx("select",{"data-testid":"model-play-autoplay-behavior",title:"The bot behaviour Autoplay runs",value:T??"",disabled:n.on,onChange:g=>h(g.target.value),style:{background:l.widget,color:l.widgetText,border:"none",borderRadius:l.widgetRadius,font:"inherit",minWidth:0},children:p.map(g=>r.jsx("option",{value:g,children:g},g))}),r.jsx("span",{title:f,style:{display:"inline-flex"},children:r.jsx(W,{testId:"model-play-autoplay",label:f,pressed:n.on||a,wide:!0,disabled:u?!1:!t||!n.available||o.setAutoplay===void 0,onClick:()=>{const g=o.autoplay?.(e)??re;Z()?.playing(e)??!1?o.setAutoplay?.(e,!g.on,"panel",g.on?void 0:{behavior:T}):o.armAutoplay?.(e,!g.armed,{behavior:T})},children:"Autoplay"})}),c!==null?r.jsx("span",{"data-testid":"model-play-autoplay-note","data-reason":s??void 0,style:{color:l.widgetText,minWidth:0},children:c}):t&&r.jsx("span",{"data-testid":"model-play-driver","data-driver":S??void 0,title:n.state?`The bot: ${n.state}`:void 0,style:{color:n.on?x.playhead:l.widgetText,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",minWidth:0},children:S==="bot"?`Bot driving${P?` · ${P}`:""}`:w?`${w}${n.state?` — ${n.state}`:""}`:S==="person"?"You’re driving":"Nobody’s driving"})]})}const ye=200;function Ne(e){if(e===void 0)return"";try{return JSON.stringify(e)}catch{return""}}function St({documentId:e,log:t}){const[i,n]=m.useState(""),[,o]=m.useReducer(c=>c+1,0);m.useEffect(()=>{let c=0;const p=t.subscribe(()=>{c===0&&(c=requestAnimationFrame(()=>{c=0,o()}))});return()=>{p(),cancelAnimationFrame(c)}},[t]);const s=t.tail(e,ye,i===""?void 0:i),a=m.useRef(null),u=m.useRef(!0);m.useLayoutEffect(()=>{const c=a.current;c&&u.current&&(c.scrollTop=c.scrollHeight)});const f=s.entries.at(-1)?.seq;return r.jsxs("div",{"data-testid":"model-play-log",style:{flex:1,minWidth:0,display:"flex",flexDirection:"column",gap:4},children:[r.jsxs("div",{style:{display:"flex",alignItems:"center",gap:l.headerGap},children:[r.jsx("span",{children:"Play log"}),r.jsxs("select",{"data-testid":"model-play-log-kind","aria-label":"Show entries of kind",value:i,onChange:c=>{n(c.target.value),c.target.blur()},style:{height:l.unit,background:l.widget,color:l.widgetText,border:`1px solid ${l.widgetOutline}`,font:"inherit"},children:[r.jsx("option",{value:"",children:"All kinds"}),[...new Set([...s.kinds,...i===""?[]:[i]])].map(c=>r.jsx("option",{value:c,children:c},c))]}),r.jsx("span",{style:{color:l.widgetText},children:s.total===0?"Nothing logged yet":`${s.total} written${s.total>ye?` · newest ${ye} shown`:""}`})]}),r.jsx("div",{ref:a,"data-testid":"model-play-log-entries","data-newest":f,onScroll:c=>{const p=c.currentTarget;u.current=p.scrollTop+p.clientHeight>=p.scrollHeight-4},style:{flex:1,minHeight:0,overflowY:"auto",font:"12px/1.45 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace",background:x.header,border:`1px solid ${l.rule}`,padding:"2px 6px"},children:s.entries.map(c=>r.jsxs("div",{"data-kind":c.kind,style:{display:"flex",gap:10,whiteSpace:"nowrap",color:c.source==="play"?l.widgetText:l.text},children:[r.jsx("span",{style:{flex:"0 0 auto",fontVariantNumeric:"tabular-nums"},children:Ke(c.simT)}),r.jsx("span",{style:{flex:"0 0 auto"},children:c.kind}),r.jsx("span",{style:{minWidth:0,overflow:"hidden",textOverflow:"ellipsis"},title:Ne(c.facts),children:Ne(c.facts)})]},c.seq))})]})}const Et=[{id:"timeline",label:"Timeline"},{id:"action",label:"Action Editor"},{id:"nla",label:"Nonlinear Animation"}],J=200;function Je(){m.useSyncExternalStore(ae,D,D);const{editor:e}=C();return r.jsx("select",{"aria-label":"Animation editor","data-testid":"animation-editor-type",value:e,onChange:t=>z({editor:t.target.value}),style:{height:l.unit,border:`1px solid ${l.widgetOutline}`,borderRadius:l.widgetRadius,background:l.widget,color:l.widgetText,font:"inherit"},children:Et.map(t=>r.jsx("option",{value:t.id,children:t.label},t.id))})}function Ye(){const e=m.useSyncExternalStore(He,se,()=>null),[,t]=m.useState(0);return m.useEffect(()=>{if(!e)return;let i=requestAnimationFrame(function n(){t(o=>(o+1)%1e6),i=requestAnimationFrame(n)});return()=>cancelAnimationFrame(i)},[e]),e}function Xe(){const e=m.useRef(null),[t,i]=m.useState({w:0,h:0});return m.useEffect(()=>{const n=e.current;if(!n)return;const o=new ResizeObserver(()=>i({w:n.clientWidth,h:n.clientHeight}));return o.observe(n),i({w:n.clientWidth,h:n.clientHeight}),()=>o.disconnect()},[]),{ref:e,size:t}}function Ue({children:e}){return r.jsxs("div",{style:{height:q,flex:`0 0 ${q}px`,display:"flex",alignItems:"center",gap:l.headerGap,padding:l.headerPadding,background:x.header,borderBottom:`1px solid ${l.rule}`},children:[r.jsx(Se,{title:"Animation"}),r.jsx(Je,{}),e]})}function qe({children:e,header:t}){return r.jsxs("div",{style:{position:"absolute",inset:0,display:"flex",flexDirection:"column",overflow:"hidden",background:x.back,color:l.text,font:"11px Inter, system-ui, sans-serif"},children:[t,e]})}function Ze(e,t,i){const n=Math.max(1,t-e),o=Math.max(1e-6,i/(n*1.1)),s=e-n*.05,a=p=>(p-s)*o,f=[1,2,5,10,20,25,50,100,250,500,1e3].find(p=>p*o>=40)??1e3,c=[];if(i>0)for(let p=Math.ceil(s/f)*f;a(p)<=i&&c.length<500;p+=f)c.push(p);return{toX:a,majors:c,toFrame:p=>s+p/o}}function Qe({x:e,frame:t,height:i}){const n=`${Math.round(t)}`,o=Math.max(E.minPillWidth,n.length*6+2*E.textPadding);return r.jsxs("g",{children:[r.jsx("rect",{x:e-E.stalkWidth/2,y:M,width:E.stalkWidth,height:Math.max(0,i-M),fill:x.playhead}),r.jsx("rect",{x:e-o/2,y:E.margin,width:o,height:M-2*E.margin,rx:E.radius,fill:x.playhead}),r.jsx("text",{x:e,y:15.5,textAnchor:"middle",fill:x.playheadText,fontSize:11,children:n})]})}function et({majors:e,toX:t,width:i,height:n}){return r.jsxs("g",{children:[e.map(o=>r.jsx("line",{x1:t(o),y1:M,x2:t(o),y2:n,stroke:x.grid},`g${o}`)),r.jsx("rect",{x:0,y:0,width:i,height:M,fill:x.scrubBack}),e.map(o=>r.jsx("text",{x:t(o),y:15.5,textAnchor:"middle",fill:x.scrubText,fontSize:11,children:o},`t${o}`))]})}function Pe(e,t,i){const n=ge;return r.jsx("polygon",{points:`${e},${t-n} ${e+n},${t} ${e},${t+n} ${e-n},${t}`,fill:xe.KEYFRAME.fill,stroke:x.keyBorder,strokeWidth:Be},i)}const Mt=e=>`bpy.data.objects[${JSON.stringify(e)}].animation_data`;function Tt(){m.useSyncExternalStore(ve,X,X),m.useSyncExternalStore(he,G,G);const e=Ye(),{ref:t,size:i}=Xe(),[n,o]=m.useState(null),s=v.state(),a=v.subject??s.armature,u=e?.live().find(y=>y.armature===a)??null,f=e!==null,c=u?.layers.at(-1)??null,p=u?c?.action??null:s.action,b=m.useMemo(()=>u&&p?e.channels(u.armature,p):v.channels(),[u?p:s.action,s.engineCalls,e]),h=b.flatMap(y=>y.keys),T=h.length?Math.min(...h):s.start,S=h.length?Math.max(...h):s.end,w=Math.max(0,i.w-J),{toX:P,majors:g,toFrame:H}=Ze(T,S,w),$=u?c?.frame??T:s.frame,d=y=>M+L*(y+1),j=M+L*(b.length+2),k=[...new Set(h)].sort((y,F)=>y-F),N=async y=>{if(!(!a||f)){o(null);try{await st(Mt(a),"action",`bpy.data.actions[${JSON.stringify(y)}]`)}catch(F){o(`${y} could not be assigned to ${a}: ${F instanceof Error?F.message:String(F)}`)}}},R=r.jsxs(Ue,{children:[r.jsx("span",{style:{color:l.textHi},children:a??"No armature"}),r.jsxs("select",{"aria-label":"Action","data-testid":"action-editor-action",value:p??"",disabled:!a||f,title:f?"A game is running; it chooses the clips while it runs":"The action this armature plays (animation_data.action)",onChange:y=>void N(y.target.value),style:{height:l.unit,minWidth:180,border:`1px solid ${l.widgetOutline}`,borderRadius:l.widgetRadius,background:l.widget,color:l.widgetText,font:"inherit"},children:[p===null?r.jsx("option",{value:"",children:"No action"}):null,(u&&p?[p]:v.actionNames()).map(y=>r.jsx("option",{value:y,children:y},y))]}),u?r.jsxs("span",{"data-testid":"action-editor-live",style:{color:x.playhead},children:["● game running: ",u.layers.map(y=>`${y.action} @${y.frame.toFixed(1)} ×${y.influence.toFixed(2)}`).join(" + ")]}):null,r.jsx("div",{style:{flex:1}}),n?r.jsx("span",{style:{color:l.refusal},children:n}):null]});return r.jsx(qe,{header:R,children:r.jsx("div",{ref:t,style:{flex:1,minHeight:0,overflowY:"auto",overflowX:"hidden"},children:r.jsxs("div",{style:{display:"flex",minHeight:j},children:[r.jsxs("div",{style:{width:J,flex:`0 0 ${J}px`,borderRight:`1px solid ${l.rule}`},children:[r.jsx("div",{style:{height:M,background:x.scrubBack}}),r.jsx("div",{style:{height:L,paddingLeft:6,color:l.textHi},children:"Summary"}),b.map(y=>r.jsx("div",{style:{height:L,paddingLeft:18,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:y.bone},y.bone))]}),r.jsxs("svg",{width:w,height:j,style:{display:"block",cursor:f?"default":"ew-resize"},"aria-label":"Action Editor",onPointerDown:y=>{if(f)return;const F=y.currentTarget.getBoundingClientRect();v.transport?.seekFrame(Math.round(H(y.clientX-F.left)))},children:[r.jsx("rect",{x:0,y:0,width:w,height:j,fill:x.back}),r.jsx(et,{majors:g,toX:P,width:w,height:j}),k.map(y=>Pe(P(y),d(0)-L/2,`s${y}`)),b.map((y,F)=>y.keys.map(Q=>Pe(P(Q),d(F+1)-L/2,`${y.bone}${Q}`))),r.jsx(Qe,{x:P($),frame:$,height:j})]})]})})})}function $t(){m.useSyncExternalStore(ve,X,X),m.useSyncExternalStore(he,G,G);const e=Ye(),{ref:t,size:i}=Xe(),n=v.state(),o=v.stacks(),s=e?.live()??null,a=Math.max(0,i.w-J),{toX:u,majors:f}=Ze(n.start,n.end,a),c=[];for(const h of o){const T=s?.find(g=>g.armature===h.armature)?.layers??null,S=g=>{const H=T?.find($=>$.track===g);return H?`@${H.frame.toFixed(1)} ×${H.influence.toFixed(2)}`:void 0};c.push({label:h.armature,kind:"armature",strips:[]});const w=T?T.find(g=>g.track===null)?.action??null:h.action,P=S(null);c.push({label:w?`[Action] ${w}`:"[Action] (none)",kind:"action",strips:[],...P?{live:P}:{}});for(const g of[...h.animation?.tracks??[]].reverse()){const H=S(g.name);c.push({label:g.name,kind:"track",mute:g.mute,strips:g.strips.map($=>({name:$.name,start:$.start,end:$.end,mute:$.mute})),...H?{live:H}:{}})}}const p=M+L*(c.length+1),b=r.jsx(Ue,{children:s?r.jsx("span",{"data-testid":"nla-live",style:{color:x.playhead},children:"● game running: each playing track shows the game's frame and influence; the strips are the file's layout"}):null});return r.jsx(qe,{header:b,children:r.jsx("div",{ref:t,style:{flex:1,minHeight:0,overflowY:"auto",overflowX:"hidden"},children:r.jsxs("div",{style:{display:"flex",minHeight:p},children:[r.jsxs("div",{style:{width:J,flex:`0 0 ${J}px`,borderRight:`1px solid ${l.rule}`},children:[r.jsx("div",{style:{height:M,background:x.scrubBack}}),c.map((h,T)=>r.jsxs("div",{"data-testid":`nla-row-${h.kind}`,style:{height:L,paddingLeft:h.kind==="armature"?6:18,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",color:h.kind==="armature"?l.textHi:h.mute?"#6a6a6a":l.text},children:[h.label,h.live?r.jsxs("span",{style:{color:x.playhead},children:[" ",h.live]}):null]},`${h.label}${T}`))]}),r.jsxs("svg",{width:a,height:p,style:{display:"block"},"aria-label":"NLA",children:[r.jsx("rect",{x:0,y:0,width:a,height:p,fill:x.back}),r.jsx(et,{majors:f,toX:u,width:a,height:p}),c.map((h,T)=>{const S=M+L*T+2;return h.strips.map(w=>r.jsxs("g",{children:[r.jsx("rect",{x:u(w.start),y:S,width:Math.max(2,u(w.end)-u(w.start)),height:L-4,rx:2,fill:w.mute||h.mute?"#4a4a4a":s?h.live?"#5a7fb8":"#555555":"#7b7b7b",opacity:s?.6:1,stroke:"#1a1a1a"}),r.jsx("text",{x:u(w.start)+4,y:S+L-7,fill:"#ffffff",fontSize:10,children:w.name})]},`${T}${w.name}${w.start}`))}),s?null:r.jsx(Qe,{x:u(n.frame),frame:n.frame,height:p})]})]})})})}const Ct="workspace.document",At="Timeline",tt=.25,nt=200,be={"set-range":"Setting the frame range writes `scene.frame_start`/`frame_end`, which the document would save. This is Blender's Timeline as an INSPECTION surface: the range is drawn, never set. Change it in bpy and the Timeline re-reads it.","insert-key":"Inserting a keyframe writes the action. Editing parity is not the program — key it in bpy (`pose_bone.keyframe_insert`) and the Timeline re-reads the action on the next present.","move-key":"Moving a keyframe writes the F-Curve's control points. The summary row draws the keys the action HAS; the Dope Sheet that would move them is the Animation workspace's, and it is not built.","delete-key":"Deleting a keyframe writes the action. Editing parity is not the program.","set-interpolation":"Setting a key's interpolation writes the F-Curve. Note also that this view PLAYS a per-frame bake (`rna_action_clip`), so interpolation is not a thing it reads back.","select-key":"Selecting a keyframe writes `Keyframe.select_control_point`. The view draws the flags the data carries — a selected key takes `.common.anim.keyframe_selected` — and changes none of them."},Ee="A game is running; the Timeline is read-only until it stops (Stop in the Game panel).",ue="No scene transport is attached yet; open the model document first.";function A(){return v.transport}function we(){return A()?.snapshot().playbackState==="playing"}function Y(e){return ze(e),_()}const Re={JITTER:1,GENERATED:2,MOVING_HOLD:3,BREAKDOWN:4,KEYFRAME:5,EXTREME:6};function it(e,t){const i=[],n=new Map;for(const o of e)if(!(t&&!o.selected)){i.push(o.object);for(const s of o.keyframes){const a=n.get(s.frame);if(!a){n.set(s.frame,{...s});continue}a.select=a.select||s.select,(Re[s.type]??0)>(Re[a.type]??0)&&(a.type=s.type)}}return{columns:[...n.values()].sort((o,s)=>o.frame-s.frame),objects:i}}function me(){return it(v.state().summary,C().onlySelected).columns.map(e=>e.frame)}function _(){const e=C();return{...v.state(),transform:e.transform,size:e.size,refusal:e.refusal,drawn:e.drawn,editor:e.editor}}function ne(e){if(se()!==null)return Y(Ee);if(!v.playable)return Y(ue);const t=A();return t?(t.seekFrame(e),_()):Y("No stage transport is attached yet; open the model document first.")}Ie({view:"timeline",title:At,verbs:[{id:"state",run:()=>_()},{id:"editor",title:"Animation: Show Editor",run:e=>{const t=e?.editor??e?.to;return t!=="timeline"&&t!=="action"&&t!=="nla"?Y("editor is `timeline`, `action` (the Action Editor) or `nla`."):(z({editor:t}),_())}},{id:"frame",title:"Timeline: Set Frame",run:e=>{const t=Number(e?.frame??e?.to);if(!Number.isFinite(t))throw new Error("frame needs a numeric `frame` — a Blender frame number.");return ne(t)}},{id:"play",title:"Timeline: Play",run:()=>{if(se()!==null)throw new Error(Ee);if(!v.playable)throw new Error(ue);const e=A();if(!e)throw new Error("No stage transport is attached yet; open the model document first.");return e.play(),_()}},{id:"pause",title:"Timeline: Pause",run:()=>{const e=A();return e?(e.pause(),_()):Y("No stage transport is attached yet.")}},{id:"jump-start",title:"Timeline: Jump to Start",run:()=>ne(v.state().start)},{id:"jump-end",title:"Timeline: Jump to End",run:()=>ne(v.state().end)},{id:"next-keyframe",title:"Timeline: Next Keyframe",run:()=>{const e=v.frame(),t=me().find(i=>i>e+1e-4);return t===void 0?_():ne(t)}},{id:"prev-keyframe",title:"Timeline: Previous Keyframe",run:()=>{const e=v.frame(),t=me().reverse().find(i=>i<e-1e-4);return t===void 0?_():ne(t)}},{id:"view-all",title:"Timeline: View All",run:()=>(Ce(),_())},{id:"zoom",title:"Timeline: Zoom",run:e=>{const t=Number(e?.to??e?.zoom);if(!Number.isFinite(t))throw new Error("zoom needs a numeric `to` — CSS pixels per frame, 0.25 … 200.");const{transform:i,size:n}=C(),o=i.startFrame+n.w/2/i.pixelsPerFrame,s=Math.min(nt,Math.max(tt,t));return z({transform:{pixelsPerFrame:s,startFrame:o-n.w/2/s}}),_()}},{id:"pan",title:"Timeline: Pan",run:e=>{const t=Number(e?.frames??0);if(!Number.isFinite(t))throw new Error("pan needs a numeric `frames`.");const{transform:i}=C();return z({transform:{...i,startFrame:i.startFrame+t}}),_()}},...Object.keys(be).map(e=>({id:e,run:()=>Y(be[e])}))]});const Fe="timeline";function zt(){m.useSyncExternalStore(je,U,U),m.useSyncExternalStore(ae,D,D);const e=pe(),t=e!==null&&ie(e)==="game",{editor:i}=C(),n=t||i!=="timeline";return m.useEffect(()=>Me(Fe,n?bt:null),[n]),m.useEffect(()=>()=>Me(Fe,null),[]),t?r.jsx(jt,{}):i==="action"?r.jsx(Tt,{}):i==="nla"?r.jsx($t,{}):r.jsx(Nt,{})}function Nt(){m.useSyncExternalStore(ve,X,X),m.useSyncExternalStore(he,G,G),m.useSyncExternalStore(ae,D,D);const e=m.useRef(null),t=m.useRef(-1),{transform:i,size:n,refusal:o,onlySelected:s}=C(),a=v.state();m.useEffect(()=>{const d=e.current;if(!d)return;const j=new ResizeObserver(()=>{const k={w:d.clientWidth,h:d.clientHeight},N=C().size;(N.w!==k.w||N.h!==k.h)&&z({size:k})});return j.observe(d),z({size:{w:d.clientWidth,h:d.clientHeight}}),()=>j.disconnect()},[]);const u=ct();m.useEffect(()=>{if(u===t.current)return;t.current=u;const{w:d}=C().size;if(d===0)return;const j=Math.max(1,a.end-a.start),k=Math.min(nt,Math.max(tt,d*.9/j));z({transform:{pixelsPerFrame:k,startFrame:a.start-d*.05/k},framedAt:Date.now()})},[u,a.start,a.end]);const f=m.useCallback(d=>(d-i.startFrame)*i.pixelsPerFrame,[i]),c=m.useCallback(d=>i.startFrame+d/i.pixelsPerFrame,[i]),p=m.useMemo(()=>it(a.summary,s),[a.summary,s]),b=m.useMemo(()=>{if(n.w===0)return null;const d=n.w/i.pixelsPerFrame,j=Math.max(`${Math.round(i.startFrame)}`.length,`${Math.round(i.startFrame+d)}`.length),k=Math.max(Te,j*6+ht),N=ft(Math.round(a.fps),n.w+1,d,k),R=yt(N),y=Math.ceil(i.startFrame/N)*N,F=[];for(let ee=y;ee<=i.startFrame+d;ee+=N)F.push(ee);const Q=[];if(R!==null&&R*i.pixelsPerFrame>=Te/5){const ee=Math.ceil(i.startFrame/R)*R;for(let te=ee;te<=i.startFrame+d;te+=R)Math.abs(te/N-Math.round(te/N))>1e-6&&Q.push(te)}return{major:N,minor:R,majors:F,minors:Q}},[n.w,i,a.fps]),h=M,S=pt+L/2;m.useEffect(()=>{if(!b)return;const d=[...a.warnings];a.action||d.push("Nothing in this file carries an action, so the summary row is empty — which is Blender's own empty state for a Timeline over a still file."),d.push("While a clip plays, the picture is three.js evaluating the skin over the mesh columns Blender exported at the BIND frame. Anything else Blender would re-evaluate per frame — shape keys, a Displace or Cloth modifier reading the frame, a geometry driver — does not follow the playhead."),d.push("Blender puts this view's ONLY-SHOW-SELECTED toggle in the Timeline header's View MENU (`TIME_MT_view`'s `layout.prop(scene, \"show_keys_from_selected_only\")`, `space_time.py`); this header has no menu region, so the same toggle is drawn as a header button at the leading edge, where that menu sits. The filter itself is Blender's — `ADS_FILTER_ONLYSEL`, `anim_filter.cc:254-270`, tested per object at `:2307`."),s&&p.objects.length===0&&a.summary.length>0&&d.push(`The summary row is empty because nothing animated is SELECTED, which is Blender's own answer with this filter on. ${a.summary.map(k=>k.object).join(", ")} carr${a.summary.length===1?"ies":"y"} an action; select it, or turn the filter off.`),d.push("Markers, the cache bar and the preview range are drawn by Blender's Timeline and not here; the door carries none of them.");const j={drawn:{action:a.action,object:a.object,armature:a.armature,frame:a.frame,start:a.start,end:a.end,fps:a.fps,playing:we(),keyframes:p.columns.map(k=>k.frame),onlySelected:s,summaryObjects:p.objects,majorStep:b.major,minorStep:b.minor,majorLines:b.majors.length,minorLines:b.minors.length,labels:b.majors.length,diamonds:p.columns.length,diamondRadius:ge,diamondSprite:gt,bones:a.bones,tracks:a.tracks,engineCalls:a.engineCalls,warnings:d}};JSON.stringify(j.drawn)!==JSON.stringify(C().drawn)&&z(j)},[b,a,p,s]);const w=m.useRef(!1),P=m.useCallback(d=>{const j=e.current;if(!j||se()!==null)return;const k=j.getBoundingClientRect();A()?.seekFrame(Math.round(c(d-k.left)))},[c]),g=`${Math.round(a.frame)}`,H=Math.max(E.minPillWidth,g.length*6+2*E.textPadding),$=f(a.frame);return r.jsxs("div",{"data-testid":"blender-timeline",style:{position:"absolute",inset:0,display:"flex",flexDirection:"column",overflow:"hidden",background:x.back,color:l.text,font:"11px Inter, system-ui, sans-serif"},children:[r.jsx(Rt,{}),r.jsx("div",{ref:e,style:{flex:1,minHeight:0,position:"relative"},children:r.jsxs("svg",{width:n.w,height:n.h,style:{display:"block",cursor:"ew-resize"},"aria-label":"Timeline",onPointerDown:d=>{w.current=!0,d.currentTarget.setPointerCapture(d.pointerId),P(d.clientX)},onPointerMove:d=>{w.current&&P(d.clientX)},onPointerUp:d=>{w.current=!1,d.currentTarget.releasePointerCapture(d.pointerId)},children:[r.jsx("title",{children:"Timeline"}),r.jsx("rect",{x:0,y:0,width:n.w,height:n.h,fill:x.back}),r.jsx("rect",{x:0,y:h,width:Math.max(0,f(a.start)),height:Math.max(0,n.h-h),fill:$e}),r.jsx("rect",{x:f(a.end),y:h,width:Math.max(0,n.w-f(a.end)),height:Math.max(0,n.h-h),fill:$e}),b?.minors.map(d=>r.jsx("line",{x1:f(d),y1:h,x2:f(d),y2:n.h,stroke:x.gridMinor,strokeWidth:1},`n${d}`)),b?.majors.map(d=>r.jsx("line",{x1:f(d),y1:h,x2:f(d),y2:n.h,stroke:x.grid,strokeWidth:1},`m${d}`)),r.jsx("rect",{x:0,y:0,width:n.w,height:M,fill:x.scrubBack}),b?.majors.map(d=>r.jsx("text",{x:f(d),y:15.5,textAnchor:"middle",fill:x.scrubText,fontSize:11,children:Math.round(d)},`t${d}`)),r.jsx("path",{d:`M3,${S-3.5} L6.5,${S} L3,${S+3.5} Z`,fill:x.scrubText}),p.columns.map(d=>{const j=xt[d.type]??1,k=ge*j,N=xe[d.type]??xe.KEYFRAME,R=f(d.frame);return r.jsx("polygon",{points:`${R},${S-k} ${R+k},${S} ${R},${S+k} ${R-k},${S}`,fill:d.select?N.selected:N.fill,stroke:x.keyBorder,strokeWidth:Be*j},`k${d.frame}`)}),r.jsx("rect",{x:$-E.stalkWidth/2,y:M,width:E.stalkWidth,height:Math.max(0,n.h-M),fill:x.playhead}),r.jsx("rect",{x:$-H/2,y:E.margin,width:H,height:M-2*E.margin,rx:E.radius,fill:x.playhead}),r.jsx("polygon",{points:`${$-E.tipHalfWidth},${M-E.margin} ${$+E.tipHalfWidth},${M-E.margin} ${$},${M-E.margin+E.tipHeight}`,fill:x.playhead}),r.jsx("text",{x:$,y:15.5,textAnchor:"middle",fill:x.playheadText,fontSize:11,children:g})]})}),o?r.jsx("div",{style:{borderTop:`1px solid ${l.rule}`,padding:l.statusPadding,color:l.refusal},children:o}):null]})}function Pt(){m.useSyncExternalStore(ae,D,D);const{onlySelected:e}=C(),[t,i]=m.useState(!1),n=(o,s,a)=>r.jsxs("button",{type:"button",onClick:()=>{a(),i(!1)},style:{display:"flex",alignItems:"center",gap:"var(--volter-space-2)",width:"100%",padding:"var(--volter-space-1) var(--volter-space-3)",border:"none",background:"transparent",color:l.widgetText,font:"inherit",textAlign:"left",cursor:"pointer"},children:[r.jsx("span",{style:{width:12,display:"inline-block"},children:s===null?"":s?"✓":""}),o]});return r.jsxs("span",{style:{position:"relative"},children:[r.jsx("button",{type:"button","aria-haspopup":"menu","aria-expanded":t,onClick:()=>i(o=>!o),style:{border:"none",background:"transparent",color:l.text,font:"inherit",padding:"0 var(--volter-space-2)",cursor:"pointer"},children:"View"}),t?r.jsxs("span",{role:"menu",style:{position:"absolute",top:"100%",left:0,zIndex:20,minWidth:210,display:"flex",flexDirection:"column",background:l.widget,border:`1px solid ${l.widgetOutline}`,boxShadow:"0 6px 18px rgba(0,0,0,0.45)"},children:[n("Only Show Selected",e,()=>dt(!e)),n("Frame All",null,()=>Ce())]}):null]})}function Rt(){m.useSyncExternalStore(he,G,G),m.useSyncExternalStore(ae,D,D);const e=v.state(),t=l.unit,i=m.useSyncExternalStore(He,se,()=>null)!==null,n=v.playable&&!i,o=(a,u,f,c)=>r.jsx("button",{type:"button",title:n?c:`${c} — ${i?Ee:ue}`,"aria-label":c,disabled:!n,onClick:f,style:{width:t,height:t,padding:0,border:`1px solid ${l.widgetOutline}`,background:l.widget,color:l.widgetText,display:"grid",placeItems:"center",cursor:n?"pointer":"not-allowed",opacity:n?1:.4},children:u},a),s=a=>r.jsx("svg",{width:12,height:12,viewBox:"0 0 12 12","aria-hidden":"true",children:r.jsx("path",{d:a,fill:l.widgetText})});return r.jsxs("div",{style:{height:q,flex:`0 0 ${q}px`,display:"flex",alignItems:"center",gap:l.headerGap,padding:l.headerPadding,background:x.header,borderBottom:`1px solid ${l.rule}`},children:[r.jsx(Se,{title:"Timeline"}),r.jsx(Je,{}),r.jsx(Pt,{}),r.jsx("div",{style:{flex:1}}),r.jsxs("div",{style:{display:"flex"},children:[o("jump-start",s("M2 2h1.5v8H2zM10 2v8L4.5 6z"),()=>A()?.seekFrame(e.start),"Jump to Start"),o("prev-key",s("M5 2.5v7L1.5 6zM8.5 3.2L11 6L8.5 8.8L6 6z"),()=>{const a=me().reverse().find(u=>u<v.frame()-1e-4);a!==void 0&&A()?.seekFrame(a)},"Jump to Previous Keyframe"),n&&we()?o("pause-rev",s("M3 2h2v8H3zM7 2h2v8H7z"),()=>A()?.pause(),"Pause"):o("play-reverse",s("M9 2L2 6l7 4z"),()=>A()?.play("reverse"),"Play Reverse"),n&&we()?o("pause",s("M3 2h2v8H3zM7 2h2v8H7z"),()=>A()?.pause(),"Pause"):o("play",s("M3 2l7 4-7 4z"),()=>A()?.play(),"Play"),o("next-key",s("M7 2.5v7L10.5 6zM3.5 3.2L6 6L3.5 8.8L1 6z"),()=>{const a=me().find(u=>u>v.frame()+1e-4);a!==void 0&&A()?.seekFrame(a)},"Jump to Next Keyframe"),o("jump-end",s("M10 2H8.5v8H10zM2 2v8L7.5 6z"),()=>A()?.seekFrame(e.end),"Jump to End")]}),r.jsxs("div",{style:{display:"flex"},children:[o("step-back",s("M2 2h1.5v8H2zM9.5 2v8L4.5 6z"),()=>A()?.seekFrame(Math.round(e.frame)-1),"Step Back One Frame"),o("step-forward",s("M10 2H8.5v8H10zM2.5 2v8L7.5 6z"),()=>A()?.seekFrame(Math.round(e.frame)+1),"Step Forward One Frame")]}),r.jsx("div",{style:{flex:1}}),r.jsx("input",{type:"number",value:Math.round(e.frame),onChange:a=>{const u=Number(a.target.value);Number.isFinite(u)&&A()?.seekFrame(u)},"aria-label":"Current frame",disabled:!n,title:n?void 0:ue,style:{width:75,height:t,textAlign:"center",border:`1px solid ${l.widgetOutline}`,borderRadius:l.widgetRadius,background:l.widget,color:l.widgetText,font:"inherit",cursor:n?"text":"not-allowed",opacity:n?1:.4}}),r.jsxs("span",{onClick:()=>ze(be["set-range"]),onKeyDown:()=>{},style:{color:l.text,cursor:"not-allowed"},children:["Start ",e.start," · End ",e.end]})]})}export{zt as default,Ct as point,At as title};
@@ -0,0 +1 @@
1
+ import{n as c,j as u,h_ as le}from"./volter-sdk-Dc6t2ANP.js";import{s as ue,b as X,h as de}from"./blender-runtime-host-BJ0IarOD.js";import"./output-pass-j4dAGrPY.js";import"./three.module-CtVjCPcj.js";import"./linear-resolve-Cuka7Ypb.js";const he={transform:{cx:.5,cy:.5,zoom:512},refusal:null,size:{w:0,h:0},framedAt:0,drawn:null};let L=he,N=0;const T=new Set;let te=0;function m(){return L}function Q(){return N}function fe(t){return T.add(t),()=>{T.delete(t)}}function v(t){L={...L,...t},N+=1;for(const r of[...T])r()}function pe(){te+=1,N+=1;for(const t of[...T])t()}function me(){return te}function ne(t){v({refusal:t})}const x={back:"#303030",grid:"#303030",face:"#ffffff",faceAlpha:10/255,uvShadow:"#707070",vertex:"#000000",faceDot:"#000000"},B={vertexSize:3,edgeWidth:1,facedotSize:3},se=1,ge=(B.vertexSize*se+1.5)*Math.SQRT2,ve=.75,we=B.facedotSize*se,ye=1,J=[1,1],K=[10,10],xe="Blender's `.space_image.grid` is #303030 at full alpha (userdef_default_theme.c:586) and this view's surface is #303030, so the tile grid draws at the theme's colour and is invisible against it. The image region's own clear is the overlay engine's (DRW_draw_view, space_image.cc:758), which is not in the source checkout — the sighted read settles the contrast.",be={shadow:{inner:x.uvShadow}},Ue=Math.max(B.edgeWidth,1),ee="#ff0000";function W(t){const r=atob(t),a=new Uint8Array(r.length);for(let d=0;d<r.length;d++)a[d]=r.charCodeAt(d);return a}function Ve(t){const r=W(t);return new Float32Array(r.buffer,r.byteOffset,r.byteLength>>2)}function z(t){const r=W(t);return new Uint32Array(r.buffer,r.byteOffset,r.byteLength>>2)}function _e(t,r){const a=Number.parseInt(t.slice(1),16);return`rgba(${a>>16&255}, ${a>>8&255}, ${a&255}, ${Math.round(r*1e3)/1e3})`}const _={text:"#e6e6e6",refusal:"#ed5700",rule:"#232323",statusPadding:"3px 8px",statusGap:12},Te="workspace.document",Ee="UV Editor",D=8e3,re=16,oe=8192,E={move:t=>`Dragging a UV in "${t}" writes the mesh's UV attribute, which the document would save. This is Blender's UV editor as an INSPECTION surface: editing parity is not the program.`,select:"Selecting a UV writes the mesh's selection state. This view draws what the DATA carries — and at this pin a mesh outside edit mode carries no UV selection at all (MeshUVLoopLayer declares uv, pin, name, active, active_render, active_clone and nothing else), so everything draws unselected. Editing parity is not the program.",pin:"Pinning a UV writes `MeshUVLoopLayer.pin`, which the document would save. Existing pins ARE drawn, in Blender's own hard red. Editing parity is not the program.",unwrap:"Unwrapping runs `bpy.ops.uv.unwrap`, which rewrites every UV on the mesh. Editing parity is not the program."};le({view:"blender-uv-view",title:Ee,verbs:[{id:"state",run:()=>m()},{id:"view-all",title:"UV Editor: View All",run:()=>(pe(),m())},{id:"zoom",title:"UV Editor: Zoom",run:t=>{const r=Number(t?.to??t?.zoom);if(!Number.isFinite(r))throw new Error("zoom needs a numeric `to` — CSS pixels per UV unit, 16 … 8192.");const{transform:a}=m();return v({transform:{...a,zoom:Math.min(oe,Math.max(re,r))}}),m()}},{id:"pan",title:"UV Editor: Pan",run:t=>{const r=Number(t?.u??0),a=Number(t?.v??0);if(!Number.isFinite(r)||!Number.isFinite(a))throw new Error("pan needs numeric `u` and `v`, in UV units.");const{transform:d}=m();return v({transform:{...d,cx:d.cx+r,cy:d.cy+a}}),m()}},{id:"move-uv",run:()=>R(E.move("the active UV map"))},{id:"select",run:()=>R(E.select)},{id:"pin",run:()=>R(E.pin)},{id:"unwrap",run:()=>R(E.unwrap)}]});function R(t){return ne(t),m()}function Se(t){return!t?.uvBase64||!t.triangleBase64?null:{uv:Ve(t.uvBase64),tris:z(t.triangleBase64),starts:z(t.loopStartBase64??""),totals:z(t.loopTotalBase64??""),pins:t.pinBase64?W(t.pinBase64):null}}function je(){const t=c.useSyncExternalStore(ue,X,X);c.useSyncExternalStore(fe,Q,Q);const r=c.useRef(0),a=c.useRef(null),d=c.useRef(null),j=c.useRef(null),{transform:b,refusal:C,size:U}=m(),[,F]=[0,c.useCallback(()=>v({}),[])];c.useEffect(()=>{let e=!0;return(async()=>{try{const s=await de();if(!e)return;d.current=s,j.current=null}catch(s){if(!e)return;j.current=s instanceof Error?s.message:String(s)}F()})(),()=>{e=!1}},[t,F]),c.useEffect(()=>{const e=a.current;if(!e)return;const s=new ResizeObserver(()=>{const l={w:e.clientWidth,h:e.clientHeight},h=m().size;(h.w!==l.w||h.h!==l.h)&&v({size:l})});return s.observe(e),v({size:{w:e.clientWidth,h:e.clientHeight}}),()=>s.disconnect()},[]);const n=d.current,M=c.useMemo(()=>Se(n),[n]),O=me();c.useEffect(()=>{if(O===r.current)return;r.current=O;const e=n?.bounds??[0,0,1,1],{w:s,h:l}=m().size;if(s===0||l===0)return;const[h,g,o,f]=e,V=Math.max(o-h,.001),S=Math.max(f-g,.001),k=Math.min(oe,Math.max(re,Math.min(s/V,l/S)*.9));v({transform:{cx:(h+o)/2,cy:(g+f)/2,zoom:k},framedAt:Date.now()})},[O,n]);const w=e=>(e-b.cx)*b.zoom+U.w/2,y=e=>U.h/2-(e-b.cy)*b.zoom,i=c.useMemo(()=>{if(!n||!M)return null;const{uv:e,tris:s,starts:l,totals:h,pins:g}=M,o=[],f=[],V=[],S=[],k=l.length;for(let p=0;p<k;p++){const ce=l[p],I=h[p];if(I<3)continue;let $="",H=0,G=0;for(let A=0;A<I;A++){const Z=ce+A,q=e[Z*2],Y=e[Z*2+1];H+=q,G+=Y,$+=`${A===0?"M":"L"}${w(q).toFixed(2)} ${y(Y).toFixed(2)}`}$+="Z",o.push($),f.push($),S.push({x:w(H/I),y:y(G/I)})}const P=e.length>>1;for(let p=0;p<P&&V.length<D;p++)V.push({x:w(e[p*2]),y:y(e[p*2+1]),pinned:g?g[p]!==0:!1});return{faces:o,outlines:f,dots:V,faceDots:S,corners:P,triangles:s.length/3}},[n,M,b,U]);c.useEffect(()=>{if(!n)return;const e=[];n.layers.length===0&&n.object&&e.push(`"${n.object}" has no UV map — Blender's UV editor draws an empty tile.`),i&&i.corners>D&&e.push(`${i.corners} UV corners exceed this view's ${D}-dot budget; ${i.corners-D} corner marks are not drawn. The islands, their edges and the face dots are all drawn.`),n.image||e.push("No image behind the tile: the active material's node tree has no image texture with an image, so there is nothing for Blender's backdrop to show."),e.push(xe),e.push("The line style is SHADOW (#707070), not Blender's stock OUTLINE: `edit_uv_line_style_from_space_image` returns OUTLINE only when `SpaceImage.mode == SI_MODE_UV`, and there is no SpaceImage here."),v({drawn:{object:n.object,mesh:n.mesh,layer:n.active,layers:n.layers,mode:n.mode,loops:n.loops,polygons:n.polygons,triangles:i?.triangles??0,faces:i?.faces.length??0,edges:i?.outlines.length??0,verts:i?.dots.length??0,faceDots:i?.faceDots.length??0,pinned:i?.dots.filter(s=>s.pinned).length??0,bounds:n.bounds??null,tiles:J,subdiv:K,image:n.image?.name??null,warnings:e}})},[n,i]);const ie=c.useMemo(()=>{const e=[],[s,l]=J,[h,g]=K;for(let o=0;o<=s*h;o++){const f=o/h;e.push({key:`u${o}`,x1:w(f),y1:y(0),x2:w(f),y2:y(l),major:o%h===0})}for(let o=0;o<=l*g;o++){const f=o/g;e.push({key:`v${o}`,x1:w(0),y1:y(f),x2:w(s),y2:y(f),major:o%g===0})}return e},[b,U]),ae=n?n.active?`UV Editor · ${n.object} · ${n.active} · ${n.polygons} faces, ${n.loops} corners · ${n.mode}`:`UV Editor · ${n.object??"no mesh selected"} · no UV map · ${n.mode}`:j.current??"UV Editor · reading…";return u.jsxs("div",{"data-testid":"blender-uv-editor",style:{display:"flex",flexDirection:"column",position:"absolute",inset:0,overflow:"hidden",background:x.back,color:_.text,font:"11px Inter, system-ui, sans-serif"},children:[u.jsx("div",{ref:a,style:{flex:1,minHeight:0,position:"relative"},children:u.jsxs("svg",{width:U.w,height:U.h,style:{display:"block"},onPointerDown:()=>ne(E.select),"aria-label":"UV layout",children:[u.jsx("title",{children:"UV layout"}),ie.map(e=>u.jsx("line",{x1:e.x1,y1:e.y1,x2:e.x2,y2:e.y2,stroke:x.grid,strokeWidth:e.major?2:1},e.key)),i?.faces.map((e,s)=>u.jsx("path",{d:e,fill:_e(x.face,x.faceAlpha*ye)},`f${s}`)),i?.outlines.map((e,s)=>u.jsx("path",{d:e,fill:"none",stroke:be.shadow.inner,strokeWidth:Ue},`e${s}`)),i?.faceDots.map((e,s)=>u.jsx("circle",{cx:e.x,cy:e.y,r:we/2,fill:x.faceDot},`fd${s}`)),i?.dots.map((e,s)=>u.jsx("circle",{cx:e.x,cy:e.y,r:ge/2,fill:e.pinned?ee:x.vertex,stroke:e.pinned?ee:"none",strokeWidth:e.pinned?ve:0},`v${s}`))]})}),u.jsxs("div",{style:{borderTop:`1px solid ${_.rule}`,padding:_.statusPadding,display:"flex",gap:_.statusGap,alignItems:"center"},children:[u.jsx("span",{children:ae}),C?u.jsx("span",{style:{color:_.refusal},children:C}):null]})]})}export{je as default,Te as point,Ee as title};
@@ -0,0 +1 @@
1
+ import{h2 as s,n as r,j as n}from"./volter-sdk-Dc6t2ANP.js";const i="workspace.status",a="Version",l="right",c=998;function u(){const{project:t}=s(),e=r.useSyncExternalStore(t.subscribe,t.engineVersion,t.engineVersion);return e===null?null:n.jsxs("span",{className:"volter-status-copy","data-testid":"status-blender-version","data-engine-version":e,style:{display:"inline-flex",alignItems:"center",gap:"var(--volter-space-2)",fontSize:"var(--volter-font-md)"},title:`This project is built against engine ${e}`,children:[n.jsx("span",{"aria-hidden":"true",style:{width:"var(--volter-stroke-resting)",height:"var(--volter-icon-md)",background:"currentColor"}}),e]})}export{l as align,u as default,c as order,i as point,a as title};
@@ -0,0 +1,2 @@
1
+ import{a as f,S as k,P as v,b as x,s as F,A as $,c as D,o as N}from"./worker-CxcSX7C7.js";import{s as W}from"./session-B_EkWp0b.js";const u="/bw",B=`${k}/frame.bin`,A=new Set(["scripts/startup/vgai_three.py","scripts/startup/volter_three.py"]);async function T(e){const a=f(`wali/${e}`);try{return await import(a)}catch(l){throw new Error(`The substrate skew needs ${e}, which this editor serves from the WALI pack directory beside blender.wasm (${a}): ${l instanceof Error?l.message:String(l)}`)}}async function z(e,a){const l=performance.now(),r=await fetch(f("runtime.idx"));if(!r.ok)throw new Error(`${$}/runtime.idx answered ${r.status}`);const o=await r.json(),s=await fetch(f("runtime.bin"));if(!s.ok)throw new Error(`${$}/runtime.bin answered ${s.status}`);const i=new Uint8Array(await s.arrayBuffer());let d=0;for(const t of o.files){if(d+t.size>i.byteLength)throw new Error(`Blender runtime ${t.path}: bytes ${d}..${d+t.size} lie outside the ${i.byteLength}-byte runtime blob`);if(A.has(t.path)){d+=t.size;continue}const c=`${u}/${t.path}`;e.mkdirSync(c.slice(0,c.lastIndexOf("/")),{recursive:!0}),e.writeFileSync(c,i.subarray(d,d+t.size)),d+=t.size}if(d!==i.byteLength)throw new Error(`Blender runtime index accounts for ${d} of the ${i.byteLength} bytes served`);const h=Math.round(performance.now()-l);return a("log",`blender: staged Blender's ${o.files.length}-file runtime tree in ${h} ms`),{files:o.files.length,bytes:i.byteLength,ms:h}}async function C(e,a){const l=performance.now(),r=await fetch(f("runtime.idx"));if(!r.ok)throw new Error(`${$}/runtime.idx answered ${r.status}`);const o=await r.json(),s=o.files.reduce((b,n)=>b+n.size,0),i=await fetch(f("runtime.bin"));if(!i.ok||!i.body)throw new Error(`${$}/runtime.bin answered ${i.status}`);const d=new SharedArrayBuffer(s),h=new Uint8Array(d);let t=0;const c=i.body.getReader();for(;;){const{done:b,value:n}=await c.read();if(b)break;if(t+n.byteLength>s)throw new Error(`Blender runtime blob is longer than the ${s} bytes its index accounts for`);h.set(n,t),t+=n.byteLength}if(t!==s)throw new Error(`Blender runtime index accounts for ${s} bytes; the blob served ${t}`);const y=e(u,o.files,d,{mtimeMs:Date.now(),include:b=>!A.has(b)});return a("log",`blender: shared Blender's ${o.files.length}-file runtime tree in ${Math.round(performance.now()-l)} ms`),y}async function H(e,a,l){const r=performance.now(),o=await fetch(f("runtime.idx"));if(!o.ok)throw new Error(`${$}/runtime.idx answered ${o.status}`);const s=await o.text(),i=JSON.parse(s),h=[...new Uint8Array(await crypto.subtle.digest("SHA-256",new TextEncoder().encode(s))).slice(0,12)].map(n=>n.toString(16).padStart(2,"0")).join(""),t=`${_}${h}`;if(a)try{await a(t)}catch(n){l("log",`blender: the runtime tree stays in memory: it cannot be held in use (${n instanceof Error?n.message:String(n)})`);return}let c;try{c=new Worker(f("wali/browser-wali/tree-store-worker.js"),{type:"module"})}catch(n){l("log",`blender: the runtime tree stays in memory: no installer worker (${n instanceof Error?n.message:String(n)})`);return}const y=await new Promise(n=>{let g=!1;const S=w=>{g||(g=!0,n(w))};let E=setTimeout(()=>S({ok:!1,error:`no progress in ${R/1e3} s`}),R);c.onmessage=w=>{if(clearTimeout(E),typeof w.data?.progress=="number"){g||(E=setTimeout(()=>S({ok:!1,error:`no progress in ${R/1e3} s`}),R));return}c.terminate(),S(w.data)},c.onerror=w=>{clearTimeout(E),c.terminate(),S({ok:!1,error:w.message||"the installer worker failed to start"})},c.postMessage({projectId:t,family:_,root:u,files:i.files,blobUrl:new URL(f("runtime.bin"),location.href).href,mtimeMs:Date.now()})});if(!y.ok){l("log",`blender: the runtime tree stays in memory: it could not be installed (${y.error})`);return}const b=e(u,i.files,t,{mtimeMs:Date.now(),include:n=>!A.has(n)});return l("log",`blender: Blender's ${i.files.length}-file runtime tree is on disk (${y.installed?`installed, ${Math.round((y.bytes??0)/1e6)} MB`:"installed before"}) in ${Math.round(performance.now()-r)} ms`),b}const _="host-tree.blender-runtime-",R=2e4;function U(e){const a=new Set,l=()=>{for(const r of[...a])r()};return e.on?.("change",l),e.on?.("delete",l),{...e.on?{changed:r=>new Promise(o=>{const s=()=>{clearTimeout(i),a.delete(s),o()},i=setTimeout(s,r);a.add(s)})}:{},readFile:r=>e.readFile(r),writeFile:(r,o)=>(e.writeFileSync(r,o),Promise.resolve()),mkdirTree:async r=>e.mkdirSync(r,{recursive:!0}),readdir:async r=>e.readdirSync(r),stat:async r=>{if(!e.existsSync(r))return null;const o=e.statSync(r);return{size:o.size,mode:o.mode&4095|(o.isDirectory()?16384:32768),mtimeMs:o.mtimeMs}},unlink:async r=>e.unlinkSync(r)}}async function V(e,a){const l=performance.now(),[r,o,s]=await Promise.all([T("browser-wali/worker-program.js"),T("browser-runtime/browser-memory-filesystem.js"),T("browser-wali/shared-file-layer.js").catch(()=>({}))]),i=r.BrowserWaliWorkerProgram,d=o.BrowserMemoryFileSystem;if(!i||!d)throw new Error("The substrate modules this editor served do not export BrowserWaliWorkerProgram and BrowserMemoryFileSystem; the WALI pack directory holds a browser-substrate this engine does not know.");const h=r.preloadWaliModule;h&&a.integrity&&h(f("blender.wasm"),a.integrity).catch(()=>{});const t=new d;for(const m of["/tmp","/root","/work",k,...v,e.project])t.mkdirSync(m,{recursive:!0});const c=s.sharedFileLayerFromIndex,y=s.storeFileLayerFromIndex,b=s.holdTreeStore,n=(y?await H(y,b,e.log):void 0)??(c?await C(c,e.log):void 0);n||await z(t,e.log),t.writeFileSync(x,W);const g=a.workers??{pool:16,blender:4},S=new i(t,{url:f("blender.wasm"),...a.integrity?{integrity:a.integrity}:{},cwd:"/work",env:{HOME:"/root",TMPDIR:"/tmp",PATH:"/usr/bin:/bin",BLENDER_SYSTEM_RESOURCES:u,BLENDER_SYSTEM_SCRIPTS:`${u}/scripts`,BLENDER_SYSTEM_DATAFILES:`${u}/datafiles`,BLENDER_SYSTEM_PYTHON:`${u}/python`,PYTHONPATH:`${u}/python/lib/numpy313.zip:${u}/python/lib/wheels313.zip`,VOLTER_SESSION_ROOT:k,VOLTER_EXPORT_BUFFER_PATH:B,OPENIMAGEIO_THREADS:"1"},...n?{layers:[n]}:{},privateRoots:["/tmp"],threadPoolSize:g.pool,network:{allowedHosts:[],maxConnections:0,maxBytes:0}});let E=null,w=null;const L=m=>{for(const p of m.split(`
2
+ `))p!==""&&(p.startsWith("@@VOLTER-READY ")&&(E=p.slice(15)),e.log(D(p),p))};for(S.run(["/blender","-b","--factory-startup","-noaudio","--python-use-system-env","-t",String(g.blender),"--python",x],{onStdout:L,onStderr:L,onDiagnostic:m=>e.log("error",`@@VOLTER-ERROR ${m}`)}).then(m=>{w=`Blender exited ${m.exitCode}`},m=>{w=m instanceof Error?m.message:String(m)}).finally(()=>{w!==null&&e.log("error",`@@VOLTER-ERROR the Blender program ended: ${w}`)});E===null;){if(w!==null)throw new Error(`Blender never reached its session: ${w}`);await F(5)}const M=performance.now()-l,I=JSON.parse(E);e.log("log",`blender: the substrate skew is up (${g.blender} Blender threads in a pool of ${g.pool}; Blender is SERIAL without -t N and says so)`);const O=U(t),{request:P}=N(O,e,()=>w);return{skew:"wali",banner:I,files:O,request:P,readArena:()=>t.readFile(B),bootMs:M,memoryBytes:()=>null,releasedPayloadBytes:null}}export{V as startWaliBlenderEngine};
@@ -0,0 +1 @@
1
+ import{L as l}from"./blender-runtime-host-BJ0IarOD.js";import"./output-pass-j4dAGrPY.js";import"./three.module-CtVjCPcj.js";import"./linear-resolve-Cuka7Ypb.js";import"./volter-sdk-Dc6t2ANP.js";const s="workspace.command",e=(o,n)=>({...n===void 0?{}:{timeoutMs:n},derivedRefresh:o,handle:r=>l(r)}),c={"blender-draw-batching":e("none"),"blender-start":e("none",12e4),"blender-stop":e("none",30*6e4),"blender-execute":e("always",30*6e4),"blender-native-preview":e("none",12e4),"blender-scene-info":e("none",6e4),"blender-object-info":e("none",6e4),"blender-screenshot-view":e("always",6e4),"blender-read-file":e("none",6e4),"blender-write-file":e("none",6e4),"blender-list-files":e("none",6e4),"blender-rna":e("none",6e4),"blender-rna-context":e("none",6e4),"blender-rna-set":e("always",6e4),"blender-outliner":e("none",6e4),"blender-node-tree":e("none",6e4),"blender-uv-layout":e("none",6e4),"blender-action-clip":e("none",12e4),"blender-node-view":e("none"),"blender-outliner-set":e("always",6e4),"blender-status":e("none")};export{c as commands,s as point};
@@ -0,0 +1 @@
1
+ import{j as e}from"./volter-sdk-Dc6t2ANP.js";const w="workspace.status",m="Mouse hints",j="left",b=0,u=[{button:"left",label:"Select"},{button:"middle",label:"Pan View"},{button:"right",label:"Orbit View"}],l=1,h=8,a=5,x=1,r=6.25,g=3.6,i={width:12,height:16};function p({button:t}){const s=`volter-mouse-${t}`,c=i.width-a,d=t==="right"?c:0,o=l/2,n=g;return e.jsxs("svg",{viewBox:`0 0 ${i.width} ${i.height}`,role:"presentation","aria-hidden":"true",focusable:"false",style:{height:"var(--volter-icon-lg)",width:"auto",display:"block",flex:"0 0 auto"},children:[e.jsxs("title",{children:[t," mouse button"]}),e.jsx("clipPath",{id:`${s}-outer`,children:e.jsx("rect",{x:"0",y:"0",width:i.width,height:i.height,rx:n})}),e.jsxs("mask",{id:`${s}-shell`,children:[e.jsx("rect",{x:"0",y:"0",width:i.width,height:i.height,fill:"white"}),t!=="middle"&&e.jsx("rect",{x:t==="right"?r:-1,y:-1,width:t==="right"?i.width-r+1:r+1,height:h+x+1,fill:"black"})]}),e.jsx("rect",{x:o,y:o,width:i.width-l,height:i.height-l,rx:n-o,fill:"none",stroke:"currentColor",strokeWidth:l,mask:`url(#${s}-shell)`}),t!=="middle"&&e.jsx("rect",{x:d,y:"0",width:a,height:h,fill:"currentColor",clipPath:`url(#${s}-outer)`}),t==="middle"&&e.jsx("rect",{x:"4",y:"2",width:"4",height:"7",rx:"1.25",fill:"currentColor"})]})}function y(){return e.jsx("span",{className:"volter-status-copy","data-testid":"status-blender-mouse-hints",style:{display:"inline-flex",alignItems:"center",gap:"var(--volter-space-5)"},children:u.map(t=>e.jsxs("span",{"data-mouse-button":t.button,style:{display:"inline-flex",alignItems:"center",gap:"var(--volter-space-1)",fontSize:"var(--volter-font-md)"},title:`${t.label} — the ${t.button} mouse button in the viewport`,children:[e.jsx(p,{button:t.button}),t.label]},t.button))})}export{j as align,y as default,b as order,w as point,m as title};
@@ -0,0 +1 @@
1
+ import{g as X}from"./asset-preview-CuTe-U4d.js";import{V,bf as L,X as q,g as F}from"./three.module-CtVjCPcj.js";function ae(t,e){return e.skinnedMeshes>0?"skinned":e.uniqueBones>0?"rigged":t.clips>0?"animated":"static"}const Y=["map","alphaMap","aoMap","bumpMap","displacementMap","emissiveMap","envMap","lightMap","metalnessMap","normalMap","roughnessMap","specularMap"];function Z(t){if(!("color"in t))return null;const e=t.color;return e?.isColor===!0?`#${e.getHexString()}`:null}function E(t){let e=0;for(const n of Object.values(t.attributes)){const s=n.array;for(let i=0;i<s.length;i++)Number.isFinite(Number(s[i]))||e++}return e}function O(t){if(!t)return null;const e=new q,n=new V;for(let s=0;s<t.count;s++)n.set(t.getX(s),t.getY(s),t.getZ(s)),Number.isFinite(n.x)&&Number.isFinite(n.y)&&Number.isFinite(n.z)&&e.expandByPoint(n);return e.isEmpty()?null:e}function R(t){const e=O(t.getAttribute("position"));if(!e)return null;for(const n of t.morphAttributes.position??[]){const s=O(n);s&&(t.morphTargetsRelative?(e.expandByPoint(new V().addVectors(e.min,s.min)),e.expandByPoint(new V().addVectors(e.max,s.max))):e.union(s))}return e}function J(t){return t.matrixAutoUpdate?new F().compose(t.position,t.quaternion,t.scale):t.matrix.clone()}function G(t,e,n){if(X(e,"editorHelper")||e.isSkeletonHelper)return;const s=e;if(!s.isMesh&&!s.isLine&&!s.isPoints||!s.geometry)return;const i=R(s.geometry);if(!i)return;const r=e;if(!r.isInstancedMesh){t.union(i.clone().applyMatrix4(n));return}const l=new F;for(let a=0;a<r.count;a++)r.getMatrixAt(a,l),t.union(i.clone().applyMatrix4(new F().multiplyMatrices(n,l)))}function K(t){const e=new q,n=[];for(let r=t.parent;r;r=r.parent)n.push(r);const s=new F;for(let r=n.length-1;r>=0;r--)s.multiply(J(n[r]));const i=(r,l)=>{const a=new F().multiplyMatrices(l,J(r));G(e,r,a);for(const p of r.children)i(p,a)};return i(t,s),e.isEmpty()?null:e}function le(t){const e=new Set,n=new Set,s=new Map,i=new Map,r=new Map,l=new Set,a=[],p=[];let M=0,v=0,x=0,g=0,T=0,A=0,C=0,N=0,f=0,d=0,b=0,z=0,P=0,D=0,U=0;t.traverse(o=>{if(X(o,"editorHelper")||o.isSkeletonHelper)return;M++;let c=0;for(let u=o.parent;u&&u!==t.parent;u=u.parent)c++;p.push({id:o.uuid,name:o.name||o.type,type:o.type,depth:c}),o.isBone&&A++,o.isLOD&&(D++,U+=o.levels.length);const h=o,S=o;if(!S.isMesh&&!S.isLine&&!S.isPoints)return;v++,h.isInstancedMesh&&b++,h.isSkinnedMesh&&z++;const m=h.geometry;if(m){P+=E(m);const u=m.getAttribute("position");g+=u?.count??0,T+=m.index?Math.floor(m.index.count/3):Math.floor((u?.count??0)/3),x+=Math.max(m.groups.length,1),C+=m.morphAttributes.position?.length??0,m.index?(f++,N+=m.index.array.byteLength):d++;for(const[w,B]of Object.entries(m.attributes)){N+=B.array.byteLength;const y=r.get(w)??{itemSize:B.itemSize,meshes:0};y.meshes++,r.set(w,y),/^uv\d*$/.test(w)&&l.add(w)}}const W=Array.isArray(h.material)?h.material:h.material?[h.material]:[];for(const u of W){e.add(u);const w=i.get(u)??new Set;w.add(o),i.set(u,w);const B=s.get(u)??[];for(const y of Y){const k=u[y];if(k?.isTexture!==!0)continue;n.add(k),B.includes(y)||B.push(y);const $=k.image;a.some(H=>H.materialId===u.uuid&&H.slot===y)||a.push({materialId:u.uuid,materialName:u.name||u.type,slot:y,textureName:k.name||k.source.data?.src||"Texture",width:$?.width??null,height:$?.height??null,format:k.format,colorSpace:k.colorSpace||"none"})}s.set(u,B)}});for(const o of n){const c=o.image;N+=(c?.width??0)*(c?.height??0)*4}const I=K(t)?.getSize(new V)??null;return{nodes:M,meshes:v,primitives:x,vertices:g,triangles:T,materials:e.size,textures:n.size,bones:A,clips:t.animations.length,morphTargets:C,memoryBytes:N,bounds:I?{x:I.x,y:I.y,z:I.z}:null,geometry:{attributes:[...r.entries()].map(([o,c])=>({name:o,itemSize:c.itemSize,meshCount:c.meshes})).sort((o,c)=>o.name.localeCompare(c.name)),uvChannels:[...l].sort(),indexedMeshes:f,nonIndexedMeshes:d,instancedMeshes:b,skinnedMeshes:z,nonFiniteAttributeValues:P,lodGroups:D,lodLevels:U},animationClips:t.animations.map((o,c)=>{const h=new Set;let S=0;for(const m of o.tracks){S+=m.times.length;const W=L.parseTrackName(m.name);W.nodeName&&h.add(W.nodeName)}return{id:`${c}:${o.uuid}`,name:o.name||`Clip ${c+1}`,duration:o.duration,tracks:o.tracks.length,keyframes:S,targets:[...h].sort(),rootMotion:se(o).length>1}}),hierarchy:p,materialNames:[...e].map(o=>o.name||o.type),textureNames:[...n].map(o=>o.name||o.source.data?.src||"Texture"),materialSlots:[...e].map(o=>({id:o.uuid,name:o.name||o.type,type:o.type,textureSlots:s.get(o)??[],usageCount:i.get(o)?.size??0,meshNames:[...i.get(o)??[]].map(c=>c.name||c.type).sort(),color:Z(o),transparent:o.transparent})),textureBindings:a}}function Q(t){const e=t.geometry.getAttribute("skinIndex"),n=t.geometry.getAttribute("skinWeight");if(!e||!n)return{weightedVertices:0,nonNormalizedVertices:0,zeroWeightVertices:0,invalidJointIndices:0};const s=Math.min(e.count,n.count);let i=0,r=0,l=0;for(let a=0;a<s;a++){const p=[n.getX(a),n.getY(a),n.getZ(a),n.getW(a)],M=[e.getX(a),e.getY(a),e.getZ(a),e.getW(a)],v=p.reduce((x,g)=>x+g,0);v<=1e-6?r++:Math.abs(v-1)>.001&&i++,l+=p.filter((x,g)=>x>1e-6&&(M[g]<0||M[g]>=t.skeleton.bones.length)).length}return{weightedVertices:s,nonNormalizedVertices:i,zeroWeightVertices:r,invalidJointIndices:l}}function _(t){let e=0;for(const n of t.times)Number.isFinite(n)||e++;for(const n of t.values)Number.isFinite(n)||e++;return e}function j(t,e){const n=L.parseTrackName(e.name).nodeName;return n&&!L.findNode(t,n)?n:null}function ee(t){let e=0;const n=new Set;for(const s of t.animations)for(const i of s.tracks){e+=_(i);const r=j(t,i);r&&n.add(r)}return{nonFiniteValues:e,unresolvedTargets:n}}function ue(t){const e=new Set,n=new Set,s=new Set;let i=0,r=0,l=0,a=0,p=0,M=0;const v=new Set,x=new Set,g=new Set;t.traverse(f=>{e.add(f);const d=f;d.isBone&&s.add(d)}),t.traverse(f=>{const d=f;if(!d.isSkinnedMesh)return;i++,g.add(d.bindMode),n.add(d.skeleton),d.skeleton.bones.length!==d.skeleton.boneInverses.length&&M++;for(const z of d.skeleton.bones)s.add(z),e.has(z)||v.add(z);const b=Q(d);r+=b.weightedVertices,l+=b.nonNormalizedVertices,a+=b.zeroWeightVertices,p+=b.invalidJointIndices});const T=ee(t);for(const f of s)(!f.parent?.isBone||!s.has(f.parent))&&x.add(f.name||f.uuid);const A=T.nonFiniteValues,C=T.unresolvedTargets,N=l===0&&a===0&&p===0&&M===0&&v.size===0&&A===0&&C.size===0;return{kind:i>0?"skinned":s.size>0?"rigid":"none",skinnedMeshes:i,skeletons:n.size,uniqueBones:s.size,weightedVertices:r,nonNormalizedVertices:l,zeroWeightVertices:a,invalidJointIndices:p,inverseBindMismatches:M,externalBones:v.size,nonFiniteAnimationValues:A,unresolvedTrackTargets:[...C].sort(),rootBones:[...x].sort(),bindModes:[...g].sort(),valid:N}}function ce(t,e){if(e&&!te(e))return null;const n=t.clone().normalize();for(const s of["front","back","left","right","top","bottom"])if(ne(s).angleTo(n)<.0087)return`${s[0]?.toUpperCase()}${s.slice(1)}`;return null}function te(t){const e=t.clone().normalize();return Math.max(Math.abs(e.x),Math.abs(e.y),Math.abs(e.z))>Math.cos(.0087)}function ne(t){const e={front:[0,0,1],back:[0,0,-1],left:[-1,0,0],right:[1,0,0],top:[0,1,0],bottom:[0,-1,0],isometric:[1,.72,1]};return new V(...e[t]).normalize()}function de(t){let e=!1,n=!1,s=!1,i=!1;return t.traverse(r=>{const l=r;e||=!!l.geometry?.getAttribute("uv"),n||=!!l.geometry?.getAttribute("color"),s||=!!(r.isBone||l.isSkinnedMesh),i||=r.isLOD===!0}),[{mode:"lit",available:!0},{mode:"unlit",available:!0},{mode:"wireframe",available:!0},{mode:"normals",available:!0},{mode:"uv",available:e,...e?{}:{reason:"No UV channel"}},{mode:"vertex-colors",available:n,...n?{}:{reason:"No vertex colors"}},{mode:"bounds",available:!0},{mode:"skeleton",available:s,...s?{}:{reason:"No skeleton"}},{mode:"collision",available:!1,reason:"No collision metadata"},{mode:"lod",available:i,...i?{}:{reason:"No LOD groups"}}]}function se(t){const e=t.tracks.filter(i=>i.ValueTypeName==="vector"&&i.name.toLowerCase().endsWith(".position")),n=e.find(i=>/(^|[./])(root|hips|armature)[./]/i.test(i.name))??e[0];if(!n||n.values.length<6)return[];const s=[];for(let i=0;i+2<n.values.length;i+=3)s.push(new V(n.values[i],n.values[i+1],n.values[i+2]));return s}export{ce as a,le as b,ne as c,ue as d,ae as e,te as i,de as s};
@@ -0,0 +1 @@
1
+ import{h$ as i,i1 as t,i0 as s,i8 as d}from"./volter-sdk-Dc6t2ANP.js";const m={name:"modelsFromBlendFiles",reads:"files",schema:i({finder:d("modelsFromBlendFiles"),include:t(s().min(1)).min(1).describe("Project-relative globs of the Blender files to list (`src/models/**/*.blend`)")}).strict(),run(a,l){const n=[],o=[];for(const e of l.files??[]){if(!e.endsWith(".blend"))continue;const r=(e.split("/").pop()??e).replace(/\.blend$/,"");n.push({id:`model:${e}`,label:r,kind:"model",region:null,authorable:!0,reach:{kind:"root-mount"},source:{path:e}})}return n.length===0&&n.push({id:"blender:runtime",label:"Model",kind:"model",region:null,authorable:!0,reach:{kind:"root-mount"}}),{entries:n,notes:o}}};export{m as finder};
@@ -0,0 +1,2 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/Object3DDocumentToolbar-BRg5pYmf.js","assets/volter-sdk-Dc6t2ANP.js","assets/asset-preview-CuTe-U4d.js","assets/output-pass-j4dAGrPY.js","assets/three.module-CtVjCPcj.js","assets/model-inspection-BRArHWRL.js","assets/ViewportShadingMenu-CJ81Ahky.js"])))=>i.map(i=>d[i]);
2
+ import{A as j,iy as V,iz as I,iA as L,iB as O,iC as P,n as M,g as k}from"./volter-sdk-Dc6t2ANP.js";function R(e,t){return e.object3D?.(t)??null}const o=new Map,l=new Map;function v(e){let t=l.get(e);return t||(t={frameListeners:new Set,helpers:new Map},l.set(e,t)),t}const d=new Set,p=new Set;function b(){for(const t of o.values())if(t.presenting)return t;const e=j();if(e!==null){const t=o.get(e);if(t)return t}return o.values().next().value??null}let s=null;function g(){s=null;const e=F();for(const t of p)t(e)}function _(e,t){const r=v(e);return{documentId:e,rig:()=>o.get(e)?.rig??t,setHelper:(n,a)=>{r.helpers.set(n,a),o.get(e)?.setHelper(n,a)},onFrame:n=>(r.frameListeners.add(n),()=>{r.frameListeners.delete(n)})}}function z(e,t,r,n){const a=v(n.documentId),c={documentId:n.documentId,rig:e,present:t,setHelper:r,frameListeners:a.frameListeners,helpers:a.helpers,presenting:!1};o.set(n.documentId,c);for(const[h,y]of c.helpers)r(h,y);return g(),()=>{o.get(n.documentId)===c&&(o.delete(n.documentId),g())}}function A(){return b()?.rig??null}function E(e){return d.add(e),()=>{d.delete(e)}}function F(){return s||(s=[...o.values()].map(e=>_(e.documentId,e.rig))),s}function H(e){const t=l.get(e);return t?[...t.helpers].filter(([,r])=>r!==null).map(([r])=>r):[]}function K(e){return p.add(e),()=>{p.delete(e)}}function q(e,t){const r=o.get(e);if(r){for(const n of r.frameListeners)n(t);if(b()===r)for(const n of d)n(t)}}const x=M.lazy(()=>k(()=>import("./Object3DDocumentToolbar-BRg5pYmf.js"),__vite__mapDeps([0,1,2,3,4,5,6])).then(e=>({default:e.Object3DDocumentToolbar}))),i=new Map,u=new Map;let S=0;const m=new Set;let f=!1;function D(){f||(f=!0,queueMicrotask(()=>{f=!1,S++;for(const e of[...m])e()}))}function G(e,t={}){i.set(e.documentId,e);const r=V(e),n=I(e.documentId,{...C(e),...t});return D(),()=>{n(),r(),i.get(e.documentId)===e&&(i.delete(e.documentId),D())}}const w=([e,t,r])=>({x:e,y:t,z:r});function C(e){return{read:()=>{const t=e.cameraPose(),r=e.presentation();return{camera:{position:w(t.position),target:w(t.target),...t.fov?{fov:t.fov}:{}},diagnostic:r.skeleton?"skeleton":r.mode,grid:P(e.documentId)}},setDiagnostic:t=>{if(t==="preview"||t==="rendered"){const r=L(e.documentId)?.stageKind;if(!r||O(r)?.modes?.[t]?.lighting===void 0)return!1}return e.setSkeleton(t==="skeleton"),e.setBounds(t==="bounds"),e.setMode(t==="skeleton"||t==="bounds"?"solid":t),!0},setCamera:t=>(typeof t!="string"?e.setCameraPose(t.position,t.target,t.fov):t==="perspective"?(e.setProjection("perspective"),e.frame()):e.setViewPreset(t),!0),frame:t=>t==="selection"?e.frameSelection():(e.frame(),!0),selection:{read:()=>e.selection(),apply:t=>e.select(t)},idsNamed:t=>{const r=[];return e.root.traverse(n=>{if(n.name!==t)return;const a=e.idForObject(n);a&&r.push(a)}),r},setTransformMode:t=>e.viewport.setTransformMode(t),capture:t=>e.captureImage(t??512),prepare:()=>T(e.documentId),HeaderControls:x}}function N(e){return i.get(e)??null}function W(e,t){return u.set(e,t),()=>{u.get(e)===t&&u.delete(e)}}async function T(e){await u.get(e)?.()}function J(){return[...i.values()]}function Q(e){return m.add(e),()=>m.delete(e)}function U(){return S}export{K as a,J as b,A as c,E as d,U as e,H as f,z as g,G as h,W as i,N as o,q as r,Q as s,R as t,F as v};
@@ -0,0 +1 @@
1
+ import{h2 as V,aJ as U,ie as q}from"./volter-sdk-Dc6t2ANP.js";import{g as H}from"./blender-runtime-host-BJ0IarOD.js";import{g as S,V as m,Q as A,u as X,E as G,M as Y}from"./three.module-CtVjCPcj.js";const Q=["location","rotation_quaternion","rotation_euler","rotation_axis_angle","scale"],C={location:[0,0,0],rotation_quaternion:[1,0,0,0],rotation_euler:[0,0,0],rotation_axis_angle:[0,0,0,0],scale:[1,1,1]};function J(e){const t=atob(e),n=new Uint8Array(t.length);for(let s=0;s<t.length;s++)n[s]=t.charCodeAt(s);return new Float32Array(n.buffer,n.byteOffset,n.byteLength>>2)}function P(e){if(!e.action||e.clipStart===void 0||e.clipEnd===void 0||!e.tracks.length)return null;const t=new Map,n=new Set;for(const s of e.tracks){const r=`${s.bone}\0${s.property}`,o=C[s.property].length;let c=t.get(r);if(c||t.set(r,c={bone:s.bone,channel:s.property,mask:0,stride:o,curves:Array.from({length:o},()=>null)}),!(s.index<0||s.index>=o)){c.mask|=1<<s.index,c.curves[s.index]=B(s);for(const a of s.unsupported??[])n.add(`${e.action}'s ${a}`)}}for(const s of e.unsupported??[])n.add(`${e.action}'s ${s}`);return{action:e.action,start:e.clipStart,end:e.clipEnd,keysStart:e.keysStart===null?-1/0:e.keysStart??e.clipStart,keysEnd:e.keysEnd===null?1/0:e.keysEnd??e.clipEnd,cyclic:e.cyclic??!1,channels:[...t.values()],unsupported:[...n]}}function B(e){return{extrapolation:e.extrapolation,interpolation:e.interpolation,keys:J(e.keysBase64),cycles:e.cycles??null}}function Z(e,t,n,s){const r=[e[0]-t[0],e[1]-t[1]],o=[s[0]-n[0],s[1]-n[1]],c=s[0]-e[0],a=Math.abs(r[0]),l=Math.abs(o[0]);if(a+l!==0&&a+l>c){const i=c/(a+l);t[0]=e[0]-i*r[0],t[1]=e[1]-i*r[1],n[0]=s[0]-i*o[0],n[1]=s[1]-i*o[1]}}function tt(e,t,n,s,r){const o=(i,u,f,d,h)=>{const g=1-h;return g*g*g*i+3*g*g*h*u+3*g*h*h*f+h*h*h*d};let c=0,a=1,l=(e-t[0])/(r[0]-t[0]||1);for(let i=0;i<60;i++){const u=o(t[0],n[0],s[0],r[0],l)-e;if(Math.abs(u)<1e-9)break;u<0?c=l:a=l;const f=1-l,d=3*f*f*(n[0]-t[0])+6*f*l*(s[0]-n[0])+3*l*l*(r[0]-s[0]),h=d!==0?l-u/d:(c+a)/2;l=h>c&&h<a?h:(c+a)/2}return o(t[1],n[1],s[1],r[1],l)}function M(e,t){const n=e.keys,s=n.length/6;if(s===0)return 0;const r=p=>n[p*6],o=p=>n[p*6+1];if(s===1)return o(0);const c=s-1;if(t<=r(0)){if(e.extrapolation!=="LINEAR"||t===r(0)||e.interpolation[0]===0)return o(0);const p=r(0)-t;if(e.interpolation[0]===2){const b=r(0)-n[2];return b!==0?o(0)-(o(0)-n[3])/b*p:o(0)}const y=r(1)-r(0);return y!==0?o(0)-(o(1)-o(0))/y*p:o(0)}if(t>=r(c)){if(e.extrapolation!=="LINEAR"||t===r(c)||e.interpolation[c]===0)return o(c);const p=t-r(c);if(e.interpolation[c]===2){const b=n[c*6+4]-r(c);return b!==0?o(c)+(n[c*6+5]-o(c))/b*p:o(c)}const y=r(c)-r(c-1);return y!==0?o(c)+(o(c)-o(c-1))/y*p:o(c)}let a=0,l=c;for(;l-a>1;){const p=a+l>>1;r(p)<=t?a=p:l=p}if(t===r(a))return o(a);const i=e.interpolation[a]??1;if(i===0)return o(a);if(i===1)return o(a)+(o(l)-o(a))*(t-r(a))/(r(l)-r(a));const u=[r(a),o(a)],f=[n[a*6+4],n[a*6+5]],d=[n[l*6+2],n[l*6+3]],h=[r(l),o(l)],g=11920929e-14;return Math.abs(u[1]-h[1])<g&&Math.abs(f[1]-d[1])<g&&Math.abs(d[1]-h[1])<g?u[1]:(Z(u,f,d,h),tt(t,u,f,d,h))}function F(e,t){const n=e.cycles,s=e.keys,r=s.length/6;if(!n||r<2)return M(e,t);const o=s[0],c=s[1],a=s[(r-1)*6],l=s[(r-1)*6+1];let i=0,u=0,f=0,d=0;if(t<o&&n[0]?(i=-1,u=n[0],f=n[1],d=o):t>a&&n[2]&&(i=1,u=n[2],f=n[3],d=a),i===0||u===0)return M(e,t);const h=a-o,g=l-c;if(h===0)return M(e,t);const p=i*(t-d)/h;if(f&&p>=f){const L=u===3&&f%2===1;return M(e,i===1?L?o:a:L?a:o)+(u===2?g*f*i:0)}const y=(t-d)%h,b=u===2?(i<0?Math.floor((t-d)/h):Math.ceil((t-d)/h))*g:0;let k;return y===0?(k=i===1?a:o,u===3&&Math.trunc(p)%2&&(k=i===1?o:a)):u===3&&Math.trunc(p+1)%2?k=i<0?o-y:a-y:k=(i<0?a:o)+y,k<o&&(k+=h),M(e,k)+b}function et(e,t,n,s){const r=e?.useNla??!0;if(r&&e.tracks.some(a=>a.solo))return null;if(!r||!s)return{clip:t,frame:n,influence:1,blend:"REPLACE"};const o=e.extrapolation;let c=n;if(n<t.keysStart){if(o!=="HOLD")return null;c=t.keysStart}else if(n>t.keysEnd){if(o==="NOTHING")return null;c=t.keysEnd}return{clip:t,frame:c,influence:e.influence,blend:e.blendType}}function nt(e,t){const n=e.filter(o=>!o.mute).sort((o,c)=>o.start-c.start);for(const o of n)if(t>=o.start&&t<=o.end)return{strip:o,time:t};const s=n[0];if(!s)return null;if(t<s.start)return s.extrapolation==="HOLD"?{strip:s,time:s.start}:null;let r=null;for(const o of n)o.end<t&&(r=o);return r&&(r.extrapolation==="HOLD"||r.extrapolation==="HOLD_FORWARD")?{strip:r,time:r.end}:null}function st(e,t){const n=e.actionEnd-e.actionStart||1,s=Math.abs(e.scale)||1,r=Math.abs(e.repeat%1)<1e-6&&Math.abs(t-e.end)<1e-6,o=(t-e.start)%(n*s)/s;return e.reversed?r?e.actionStart:e.actionEnd-o:r?e.actionEnd:e.actionStart+o}const v=new WeakMap;function ot(e,t){if(e.animatedInfluence){const n=e.influenceCurve;if(!n)return e.influence;let s=v.get(n);return s||v.set(n,s=B(n)),Math.max(0,Math.min(1,F(s,t)))}return e.blendIn>0&&t>=e.start&&t<=e.start+e.blendIn?(t-e.start)/e.blendIn:e.blendOut>0&&t>=e.end-e.blendOut&&t<=e.end?(e.end-t)/e.blendOut:1}function it(e,t,n,s){const r=[],o=[];let c=!1,a=!1;if(!e||!e.useNla)return{layers:r,waiting:c,skipped:o,evaluated:a};const l=e.tracks.some(i=>i.solo);for(const i of e.tracks){if((l?!i.solo:i.mute)||s)continue;i.strips.length&&(a=!0);const u=nt(i.strips,t);if(!u)continue;const f=ot(u.strip,u.time);if(u.strip.type!=="CLIP"||!u.strip.action){o.push(`the ${u.strip.type.toLowerCase()} strip "${u.strip.name}" on track "${i.name}"`);continue}const d=n(u.strip.action);d===void 0&&(c=!0),d&&r.push({clip:d,frame:st(u.strip,u.time),influence:f,blend:u.strip.blendType})}return{layers:r,waiting:c,skipped:o,evaluated:a}}const rt=(e,t)=>[e[0]*t[0]-e[1]*t[1]-e[2]*t[2]-e[3]*t[3],e[0]*t[1]+e[1]*t[0]+e[2]*t[3]-e[3]*t[2],e[0]*t[2]+e[2]*t[0]+e[3]*t[1]-e[1]*t[3],e[0]*t[3]+e[3]*t[0]+e[1]*t[2]-e[2]*t[1]],_=e=>{const t=Math.hypot(e[0],e[1],e[2],e[3]);return t>0?e.map(n=>n/t):[1,0,0,0]},at=(e,t)=>{const n=t*Math.acos(Math.max(-1,Math.min(1,e[0]))),s=Math.hypot(e[1],e[2],e[3]),r=Math.sin(n);return s>0?[Math.cos(n),e[1]/s*r,e[2]/s*r,e[3]/s*r]:[Math.cos(n),0,0,0]};function ct(e,t,n){const s=Math.max(0,Math.min(1,n.influence));if(s===0)return;const r=n.frame;for(const o of n.clip.channels){const c=e.get(o.bone);if(!c)continue;const a=t.get(o.bone),l=c[o.channel];for(let u=0;u<o.stride;u++)o.mask&1<<u&&!(a[o.channel]&1<<u)&&(l[u]=C[o.channel][u]);a[o.channel]|=o.mask;const i=o.curves.map(u=>u?F(u,r):0);if(n.blend==="COMBINE"&&o.channel==="rotation_quaternion"){const u=rt(_(l),at(_(i),s));for(let f=0;f<o.stride;f++)o.mask&1<<f&&(l[f]=u[f]);continue}for(let u=0;u<o.stride;u++){if(!(o.mask&1<<u))continue;const f=l[u],d=i[u];switch(n.blend){case"ADD":l[u]=f+d*s;break;case"SUBTRACT":l[u]=f-d*s;break;case"MULTIPLY":l[u]=s*(f*d)+(1-s)*f;break;case"COMBINE":l[u]=o.channel==="scale"?f*Math.pow(d,s):f+(d-C[o.channel][u])*s;break;default:l[u]=f*(1-s)+d*s}}}}function lt(e,t){const n=new A;if(e==="QUATERNION"){const i=_(t.rotation_quaternion);n.set(i[1],i[2],i[3],i[0])}else if(e==="AXIS_ANGLE"){const i=t.rotation_axis_angle;n.setFromAxisAngle(new m(i[1],i[2],i[3]).normalize(),i[0])}else{const i=t.rotation_euler;n.setFromEuler(new G(i[0],i[1],i[2],e.split("").reverse().join("")))}const[s,r,o]=t.location,[c,a,l]=t.scale;return new S().compose(new m(s,r,o),n,new m(c,a,l))}const ut=["TRACK_X","TRACK_Y","TRACK_Z","TRACK_NEGATIVE_X","TRACK_NEGATIVE_Y","TRACK_NEGATIVE_Z"],R=[[1,0,0],[0,1,0],[0,0,1],[-1,0,0],[0,-1,0],[0,0,-1]];function ft(e,t,n){const s=Math.max(0,ut.indexOf(n)),r=new Y().setFromMatrix4(e),o=new m(...R[s]).applyMatrix3(r);if(o.lengthSq()===0)return e.clone();o.normalize();const c=new m().setFromMatrixPosition(e),a=t.clone().sub(c);a.lengthSq()===0?a.copy(o):a.normalize();const l=new m().crossVectors(o,a);let i=Math.acos(Math.max(-1,Math.min(1,o.dot(a))));const u=l.length();if(u<11920929e-14){if(Math.abs(i)<Math.PI-.01)return e.clone();i=Math.PI;const d=new m(...R[(s+1)%6]).applyMatrix3(r);if(l.crossVectors(o,d),l.lengthSq()===0)return e.clone()}else u<.1&&(i=i>Math.PI/2?Math.PI-Math.asin(u):Math.asin(u));return new S().makeRotationAxis(l.normalize(),i).multiply(e).setPosition(c)}function ht(e,t,n){if(n>=1)return t;const[s,r,o]=[new m,new A,new m],[c,a,l]=[new m,new A,new m];return e.decompose(s,r,o),t.decompose(c,a,l),new S().compose(s.lerp(c,n),r.slerp(a,n),o.lerp(l,n))}class dt{constructor(t){this.rig=t}#e=[];#r=new Map;#n=null;facts(t){if(t===this.#n)return;this.#n=t,this.#e=t.bones;const n=new Map(t.bones.map(s=>[s.name,D(s.rest??s.matrix)]));this.#r=new Map(t.bones.map(s=>{const r=n.get(s.name),o=s.parent===null?void 0:n.get(s.parent);return[s.name,o?o.clone().invert().multiply(r):r.clone()]}))}get armature(){return this.#n}unsupported(){const t=[];for(const n of this.#e){for(const s of n.constraints??[])s.enabled&&s.type!=="DAMPED_TRACK"&&t.push(`the ${pt(s.type)} constraint "${s.name}" on bone "${n.name}"`);n.inherit?.length&&t.push(`bone "${n.name}"'s parenting (${n.inherit.join(", ")})`)}for(const n of this.#n?.animation?.drivers??[])t.push(`the drivers on bone "${n}"`);this.#n?.animation?.tweak&&t.push("the NLA in tweak mode (leave it with Tab in the NLA editor)");for(const n of this.#n?.animation?.tracks??[])for(const s of n.strips)!s.mute&&s.animatedTime&&t.push(`the animated strip time of "${s.name}"`);return t}apply(t,n,s=!0){const r=new Map,o=new Map;for(const i of this.#e){const u=i.channels;r.set(i.name,Object.fromEntries(Q.map(f=>[f,[...u?.[f]??C[f]]]))),o.set(i.name,{location:0,rotation_quaternion:0,rotation_euler:0,rotation_axis_angle:0,scale:0})}for(const i of t)ct(r,o,i);this.rig.object.updateWorldMatrix(!0,!1);const c=this.rig.object.matrixWorld,a=c.clone().invert(),l=new Map;for(const i of this.#e){const u=i.parent===null?null:l.get(i.parent)??null,f=lt(i.channels?.mode??"QUATERNION",r.get(i.name));let d=(u?u.clone():new S).multiply(this.#r.get(i.name)).multiply(f);for(const h of i.constraints??[]){if(!h.enabled||h.type!=="DAMPED_TRACK")continue;const g=n.override?.(i.name,h.name),p=g?.influence??h.influence;if(p<=0)continue;const y=this.#a(h,g,l,n);if(!y)continue;const b=c.clone().multiply(d),k=ft(b,y,h.trackAxis??"TRACK_Y");d=a.clone().multiply(ht(b,k,p))}l.set(i.name,d)}if(!s)return l;for(const i of this.#e){const u=l.get(i.name),f=i.parent===null?void 0:l.get(i.parent),d=f?f.clone().invert().multiply(u):u,h=this.rig.bones.get(i.name);h&&d.decompose(h.position,h.quaternion,h.scale)}return this.rig.object.updateMatrixWorld(!0),l}#a(t,n,s,r){if(n?.target)return n.target.updateWorldMatrix(!0,!1),new m().setFromMatrixPosition(n.target.matrixWorld);if(n?.target===null||!t.target)return null;const o=r.object(t.target);if(!o)return null;if(o.updateWorldMatrix(!0,!1),!t.subtarget)return new m().setFromMatrixPosition(o.matrixWorld);const c=t.target===this.rig.armature,a=c?s.get(t.subtarget):void 0,l=this.#e.find(u=>u.name===t.subtarget);if(c&&a&&l)return new m(0,l.length*(t.headTail??0),0).applyMatrix4(a).applyMatrix4(this.rig.object.matrixWorld);const i=o.getObjectByName(t.subtarget);return i?new m().setFromMatrixPosition(i.matrixWorld):null}}const D=e=>new S().set(...e.flat()),pt=e=>e.toLowerCase().split("_").map(t=>t==="ik"?"IK":t[0].toUpperCase()+t.slice(1)).join(" ");function mt(e,t){let n=null;const[s,r,o,c,a,l]=[new m,new A,new m,new m,new A,new m];for(const i of t.bones){const u=e.get(i.name);if(!u)continue;u.decompose(s,r,o),D(i.matrix).decompose(c,a,l);const f=X.radToDeg(r.angleTo(a)),d=s.distanceTo(c)/Math.max(i.length,.1),h=Math.max(f/.1,d/.001);h>1&&(!n||h>n.score)&&(n={bone:i.name,degrees:f,offset:d,score:h})}return n&&{bone:n.bone,degrees:n.degrees,offset:n.offset}}function gt(e,t,n){const s=it(e.animation,t,n),r=e.action??null;if(r){const o=n(r);o===void 0&&(s.waiting=!0);const c=o?et(e.animation,o,t,s.evaluated):null;c&&s.layers.push(c)}return s}function yt(e){const t=[];return e.some(n=>n.includes(" constraint ")||n.includes("drivers"))&&t.push("Bake a constraint or driver into the action (Pose ▸ Animation ▸ Bake Action, Visual Keying), or aim with a Damped Track."),e.some(n=>n.includes("curves on "))&&t.push("Key the motion on a bone (the root bone) instead of the armature object, or move the object from the game."),e.some(n=>n.includes("interpolation")||n.includes(" modifier"))&&t.push("Use Bezier, Linear or Constant keys and the Cycles modifier only, or bake the curves (Key ▸ Bake Keyframes)."),t.length?` ${t.join(" ")}`:""}function bt(e){return!!e.action||!!e.animation?.tracks.some(t=>t.strips.length)}class kt{#e=null;#r=null;#n=null;#a=null;#t=null;#o=new Map;#i=new Map;#c=null;#s=null;#l=null;#d=new Set;#m=0;#g=[];#y=new Set;#u=0;get version(){return this.#m}get engineCalls(){return this.#u}subscribe(t){return this.#d.add(t),()=>this.#d.delete(t)}#f(){this.#m++;for(const t of[...this.#d])t()}state(){const t=this.#t;return{frame:this.frame(),start:t?.frameStart??1,end:t?.frameEnd??250,fps:t?.fps??24,action:t?.action??null,object:t?.object??null,armature:t?.armature??null,bones:this.#n?this.#e?.skeletons.rig(this.#n)?.bones.size??0:0,keyframes:t?.keyframes??[],summary:t?.summary??[],clipStart:t?.clipStart??null,clipEnd:t?.clipEnd??null,tracks:t?.tracks.length??0,bound:[...this.#o.keys()],warnings:this.#g,engineCalls:this.#u,blenderFrame:t?.frameCurrent??null}}playhead(){return this.#t?this.frame():null}frame(){return this.#c??this.#t?.frameCurrent??1}get playable(){return this.#t!==null&&this.#s!==null}async sync(t,n){this.#e=t,this.#r=n;const s=t.animationFacts(),r=Object.keys(s.armatures),o=s.active,c=o&&s.armatures[o]?o:(o?s.skinArmature(o):null)??(r.filter(i=>s.armatures[i].action).length===1?r.find(i=>s.armatures[i].action):null);for(const[i,u]of[...this.#o])(!s.armatures[i]||t.skeletons.rig(i)!==u.rig)&&this.#o.delete(i);for(const[i,u]of Object.entries(s.armatures)){const f=t.skeletons.rig(i);if(!f||!bt(u)){this.#o.delete(i);continue}let d=this.#o.get(i);d||this.#o.set(i,d=new dt(f)),d.facts(u)}for(const[i,u]of[...this.#i]){const f=i.slice(i.indexOf("\0")+1);(s.actions[f]??null)!==u.revision&&this.#i.delete(i)}const a=c?s.armatures[c]?.action??null:null,l=JSON.stringify([c,a,a?s.actions[a]??null:null,s.clock,s.frame]);if(l!==this.#a){this.#a=l,this.#n=c;let i=null;c&&(this.#u++,i=await n.clip(c),i?.action&&i.armature&&this.#i.set(`${i.armature}\0${i.action}`,{revision:s.actions[i.action]??null,clip:P(i)}));const u=this.#t,f=i?.frameStart!==u?.frameStart||i?.frameEnd!==u?.frameEnd||i?.fps!==u?.fps;this.#t=i??null,(!i||i.scene!==u?.scene)&&(this.#c=null);const d=this.#s?.snapshot().activeSubject;f&&d&&this.#s?.setActiveSubject(d);const h=this.#s?.snapshot().playbackState==="playing";i&&!h&&(this.#c=null,this.#s&&i.fps>0&&this.#s.seek(i.frameCurrent/i.fps))}this.#p(),this.#f()}#b(t,n){const s=`${t}\0${n}`,r=this.#i.get(s);if(r)return r.clip;const o=this.#r,c=this.#e?.animationFacts().actions[n]??null;if(!o)return null;const a={revision:c,clip:void 0};this.#i.set(s,a),this.#u++,o.bake(t,n).then(l=>{a.clip=l?P(l):null,this.#i.get(s)===a&&(this.#p(),this.#f())},l=>{a.clip=null,this.#h(`bake:${s}`,`${t} / ${n} could not be read: ${l instanceof Error?l.message:String(l)}`)})}#p(){const t=this.#e;if(!t)return;const n=t.animationFacts(),s=this.frame(),r=s===n.frame,o=this.#s?.snapshot().playbackState==="playing",c=this.#t?.reason?[this.#t.reason]:[],a={object:l=>t.objectForBlenderName(l)};for(const[l,i]of this.#o){const u=n.armatures[l];if(!u)continue;const f=[...i.unsupported(),...this.#k(l).flatMap(h=>h.unsupported)];if(f.length){const h=`${l} plays ${f.join(", ")} only in Blender, not in the Timeline or a game.${yt(f)}`;c.push(h),this.#h(`unsupported:${l}:${f.join("|")}`,h)}const d=gt(u,s,h=>this.#b(l,h));for(const h of d.skipped)this.#h(`skipped:${l}:${h}`,`${l}: ${h} plays only in Blender, not in the Timeline or a game.`);d.waiting||(r&&!o?(t.skeletons.restorePose(l),i.rig.object.updateMatrixWorld(!0),this.#M(l,i,u,d.layers,a,f)):i.apply(d.layers,a))}this.#g=c}#k(t){const n=[];for(const[s,r]of this.#i)s.startsWith(`${t}\0`)&&r.clip&&n.push(r.clip);return n}#M(t,n,s,r,o,c){const a=mt(n.apply(r,o,!1),s);if(!a)return;const l=this.#t?.frameCurrent??this.frame(),i=c.length?`What Blender plays here and the evaluator does not: ${c.join(", ")}.`:"Nothing the evaluator knows of explains it; this is a defect in the presenter, report it with the file.";this.#h(`divergence:${t}:${l}:${a.bone}:${Math.round(a.degrees)}`,`${t} at frame ${l}: bone "${a.bone}" is ${a.degrees.toFixed(1)}° and ${(a.offset*100).toFixed(1)}% of its length off Blender's own pose, so the Timeline and a game show it differently from Blender. ${i}`)}#h(t,n){this.#y.has(t)||(this.#y.add(t),V().console.warn(n,"blender-animation"))}#w(t){const n=this.#t;n&&(this.#c=Math.min(n.frameEnd,Math.max(n.frameStart,t)),this.#p())}get subject(){return this.#n}actionNames(){return Object.keys(this.#e?.animationFacts().actions??{}).sort((t,n)=>t.localeCompare(n))}channels(){const t=new Map;for(const n of this.#t?.tracks??[]){const s=atob(n.keysBase64),r=new Uint8Array(s.length);for(let a=0;a<s.length;a++)r[a]=s.charCodeAt(a);const o=new Float32Array(r.buffer,0,r.length>>2);let c=t.get(n.bone);c||t.set(n.bone,c=new Set);for(let a=0;a<o.length;a+=6)c.add(Math.round(o[a]*1e3)/1e3)}return[...t].map(([n,s])=>({bone:n,keys:[...s].sort((r,o)=>r-o)}))}stacks(){const t=this.#e?.animationFacts();return t?Object.entries(t.armatures).map(([n,s])=>({armature:n,action:s.action??null,animation:s.animation})):[]}get scene(){return this.#t?.scene??null}async writeBookmark(){const t=Math.round(this.frame()),n=this.#t;if(!n)return t;const s=n.scene;return!s||n.frameCurrent===t||(this.#u++,await H(`bpy.data.scenes[${JSON.stringify(s)}]`,"frame_current",t,void 0,!1),this.#t={...n,frameCurrent:t},this.#f()),t}get transport(){return this.#s}attachTo(t){this.#l?.(),this.#s=t;const n=t.attach({id:this.#t?.action??"blender-action",label:this.#t?.action??"Action",range:()=>{const a=this.#t,l=a?.fps||24;return{start:(a?.frameStart??1)/l,end:(a?.frameEnd??250)/l,fps:l}},seek:a=>this.seekSeconds(a)}),s=t.onSettled(()=>{this.writeBookmark()});let r=!1;const o=()=>{r||(r=!0,s(),n(),this.#l===o&&(this.#s===t&&(this.#s=null),this.#l=null))};this.#l=o;const c=this.#t;return c&&c.fps>0&&t.seek(c.frameCurrent/c.fps),o}seekSeconds(t){const n=this.#t?.fps||24;this.#w(Math.round(t*n)),this.#f()}keyframes(){return(this.#t?.keyframes??[]).map(t=>t.frame)}dispose(){this.#l?.(),this.#t=null,this.#c=null;for(const t of this.#o.keys())this.#e?.skeletons.restorePose(t);this.#o.clear(),this.#i.clear(),this.#n=null,this.#a=null}}const I=new kt;function $t(e){return I.subscribe(e)}function Ct(){return I.version}function Mt(e){return e==="game"||e==="animation"?e:null}const K="volter.blender.play-mode:",$=new Set,j=new Map,x=new Map;let w=null,W=0;function T(){W+=1;for(const e of[...$])e()}function wt(e){try{const t=globalThis.sessionStorage?.getItem(K+e);return Mt(t)}catch{return null}}function z(e){let t=j.get(e);return t===void 0&&(t=wt(e),j.set(e,t)),t}function Tt(e,t){if(z(e)!==t){j.set(e,t);try{globalThis.sessionStorage?.setItem(K+e,t)}catch{}T()}}function _t(e,t){return(w!==e||x.get(e)!==t)&&(w=e,t===void 0?x.delete(e):x.set(e,t),T()),()=>{w===e&&(w=null,T())}}function jt(){return w}function Ot(e){return x.get(e)}function Nt(e){const t=q("model");if(t===null)return"animation";const n=z(e);if(n!==null)return n;const s=x.get(e);return s!==void 0&&t.hasScript?.(s)===!0?"game":"animation"}function Lt(){return W}let E=null;function Pt(e){return $.add(e),E??=U(T),()=>{$.delete(e),$.size===0&&E&&(E(),E=null)}}let O=null;const N=new Set;function vt(e){if(O!==e){O=e;for(const t of[...N])t()}}function Rt(){return O}function Bt(e){return N.add(e),()=>N.delete(e)}export{dt as A,jt as a,I as b,Tt as c,Mt as d,Ot as e,$t as f,Ct as g,Bt as h,P as i,_t as j,vt as k,Rt as l,Nt as m,it as n,Lt as p,yt as r,Pt as s};