@fps-games/editor 0.1.5-beta.5 → 0.1.7-beta.1

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 (469) hide show
  1. package/dist/agent-bridge/capabilities/assets.d.ts +8 -0
  2. package/dist/agent-bridge/capabilities/assets.d.ts.map +1 -0
  3. package/dist/agent-bridge/capabilities/assets.js +226 -0
  4. package/dist/agent-bridge/capabilities/assets.js.map +1 -0
  5. package/dist/agent-bridge/capabilities/editor-state.d.ts +5 -0
  6. package/dist/agent-bridge/capabilities/editor-state.d.ts.map +1 -0
  7. package/dist/agent-bridge/capabilities/editor-state.js +72 -0
  8. package/dist/agent-bridge/capabilities/editor-state.js.map +1 -0
  9. package/dist/agent-bridge/capabilities/host-lifecycle.d.ts +4 -0
  10. package/dist/agent-bridge/capabilities/host-lifecycle.d.ts.map +1 -0
  11. package/dist/agent-bridge/capabilities/host-lifecycle.js +87 -0
  12. package/dist/agent-bridge/capabilities/host-lifecycle.js.map +1 -0
  13. package/dist/agent-bridge/capabilities/prefabs.d.ts +5 -0
  14. package/dist/agent-bridge/capabilities/prefabs.d.ts.map +1 -0
  15. package/dist/agent-bridge/capabilities/prefabs.js +735 -0
  16. package/dist/agent-bridge/capabilities/prefabs.js.map +1 -0
  17. package/dist/agent-bridge/capabilities/scene-objects.d.ts +9 -0
  18. package/dist/agent-bridge/capabilities/scene-objects.d.ts.map +1 -0
  19. package/dist/agent-bridge/capabilities/scene-objects.js +394 -0
  20. package/dist/agent-bridge/capabilities/scene-objects.js.map +1 -0
  21. package/dist/agent-bridge/capabilities/selection.d.ts +5 -0
  22. package/dist/agent-bridge/capabilities/selection.d.ts.map +1 -0
  23. package/dist/agent-bridge/capabilities/selection.js +57 -0
  24. package/dist/agent-bridge/capabilities/selection.js.map +1 -0
  25. package/dist/agent-bridge/capabilities/shadows.d.ts +5 -0
  26. package/dist/agent-bridge/capabilities/shadows.d.ts.map +1 -0
  27. package/dist/agent-bridge/capabilities/shadows.js +1876 -0
  28. package/dist/agent-bridge/capabilities/shadows.js.map +1 -0
  29. package/dist/agent-bridge/capabilities/transform.d.ts +5 -0
  30. package/dist/agent-bridge/capabilities/transform.d.ts.map +1 -0
  31. package/dist/agent-bridge/capabilities/transform.js +162 -0
  32. package/dist/agent-bridge/capabilities/transform.js.map +1 -0
  33. package/dist/agent-bridge/capabilities/ui-regions.d.ts +4 -0
  34. package/dist/agent-bridge/capabilities/ui-regions.d.ts.map +1 -0
  35. package/dist/agent-bridge/capabilities/ui-regions.js +168 -0
  36. package/dist/agent-bridge/capabilities/ui-regions.js.map +1 -0
  37. package/dist/agent-bridge/capabilities/viewport.d.ts +5 -0
  38. package/dist/agent-bridge/capabilities/viewport.d.ts.map +1 -0
  39. package/dist/agent-bridge/capabilities/viewport.js +407 -0
  40. package/dist/agent-bridge/capabilities/viewport.js.map +1 -0
  41. package/dist/agent-bridge/capability-sources.d.ts +6 -0
  42. package/dist/agent-bridge/capability-sources.d.ts.map +1 -0
  43. package/dist/agent-bridge/capability-sources.js +26 -0
  44. package/dist/agent-bridge/capability-sources.js.map +1 -0
  45. package/dist/agent-bridge/diagnostics.d.ts +12 -0
  46. package/dist/agent-bridge/diagnostics.d.ts.map +1 -0
  47. package/dist/agent-bridge/diagnostics.js +45 -0
  48. package/dist/agent-bridge/diagnostics.js.map +1 -0
  49. package/dist/agent-bridge/index.d.ts +5 -0
  50. package/dist/agent-bridge/index.d.ts.map +1 -0
  51. package/dist/agent-bridge/index.js +5 -0
  52. package/dist/agent-bridge/index.js.map +1 -0
  53. package/dist/agent-bridge/register.d.ts +4 -0
  54. package/dist/agent-bridge/register.d.ts.map +1 -0
  55. package/dist/agent-bridge/register.js +908 -0
  56. package/dist/agent-bridge/register.js.map +1 -0
  57. package/dist/agent-bridge/shared.d.ts +189 -0
  58. package/dist/agent-bridge/shared.d.ts.map +1 -0
  59. package/dist/agent-bridge/shared.js +39 -0
  60. package/dist/agent-bridge/shared.js.map +1 -0
  61. package/dist/agent-bridge/source-types.d.ts +90 -0
  62. package/dist/agent-bridge/source-types.d.ts.map +1 -0
  63. package/dist/agent-bridge/source-types.js +2 -0
  64. package/dist/agent-bridge/source-types.js.map +1 -0
  65. package/dist/build-info.json +17 -17
  66. package/dist/local-editor-agent-actions.d.ts +8 -1
  67. package/dist/local-editor-agent-actions.d.ts.map +1 -1
  68. package/dist/local-editor-agent-actions.js +171 -12
  69. package/dist/local-editor-agent-actions.js.map +1 -1
  70. package/dist/local-editor-agent-bridge-transport.d.ts +95 -0
  71. package/dist/local-editor-agent-bridge-transport.d.ts.map +1 -0
  72. package/dist/local-editor-agent-bridge-transport.js +340 -0
  73. package/dist/local-editor-agent-bridge-transport.js.map +1 -0
  74. package/dist/local-editor-agent-bridge.d.ts +2 -0
  75. package/dist/local-editor-agent-bridge.d.ts.map +1 -0
  76. package/dist/local-editor-agent-bridge.js +2 -0
  77. package/dist/local-editor-agent-bridge.js.map +1 -0
  78. package/dist/local-editor-agent-context.d.ts +29 -1
  79. package/dist/local-editor-agent-context.d.ts.map +1 -1
  80. package/dist/local-editor-agent-context.js +403 -0
  81. package/dist/local-editor-agent-context.js.map +1 -1
  82. package/dist/local-editor-harness.d.ts +128 -6
  83. package/dist/local-editor-harness.d.ts.map +1 -1
  84. package/dist/local-editor-harness.js +2730 -151
  85. package/dist/local-editor-harness.js.map +1 -1
  86. package/dist/local-editor-marker-graph.d.ts +92 -0
  87. package/dist/local-editor-marker-graph.d.ts.map +1 -0
  88. package/dist/local-editor-marker-graph.js +1432 -0
  89. package/dist/local-editor-marker-graph.js.map +1 -0
  90. package/dist/local-editor-performance-stats.js +1 -1
  91. package/dist/local-editor-performance-stats.js.map +1 -1
  92. package/dist/playable-babylon-facade.d.ts +2 -2
  93. package/dist/playable-babylon-facade.d.ts.map +1 -1
  94. package/dist/playable-babylon-facade.js +1 -1
  95. package/dist/playable-babylon-facade.js.map +1 -1
  96. package/dist/playable-babylon-rendering.js +20 -0
  97. package/dist/playable-babylon-rendering.js.map +1 -1
  98. package/dist/playable-local-editor-host.d.ts +57 -7
  99. package/dist/playable-local-editor-host.d.ts.map +1 -1
  100. package/dist/playable-local-editor-host.js +25 -1
  101. package/dist/playable-local-editor-host.js.map +1 -1
  102. package/dist/playable-sdk.d.ts +4 -2
  103. package/dist/playable-sdk.d.ts.map +1 -1
  104. package/dist/playable-sdk.js +2 -1
  105. package/dist/playable-sdk.js.map +1 -1
  106. package/node_modules/@fps-games/babylon-renderer/dist/shadows/blob-shadow-system.d.ts.map +1 -1
  107. package/node_modules/@fps-games/babylon-renderer/dist/shadows/blob-shadow-system.js +6 -4
  108. package/node_modules/@fps-games/babylon-renderer/dist/shadows/blob-shadow-system.js.map +1 -1
  109. package/node_modules/@fps-games/babylon-renderer/dist/shadows/planar-shadow-shaders.d.ts.map +1 -1
  110. package/node_modules/@fps-games/babylon-renderer/dist/shadows/planar-shadow-shaders.js +103 -1
  111. package/node_modules/@fps-games/babylon-renderer/dist/shadows/planar-shadow-shaders.js.map +1 -1
  112. package/node_modules/@fps-games/babylon-renderer/dist/shadows/planar-shadow-system.d.ts.map +1 -1
  113. package/node_modules/@fps-games/babylon-renderer/dist/shadows/planar-shadow-system.js +330 -27
  114. package/node_modules/@fps-games/babylon-renderer/dist/shadows/planar-shadow-system.js.map +1 -1
  115. package/node_modules/@fps-games/babylon-renderer/dist/shadows/static-projected-shadow-artifact-system.d.ts.map +1 -1
  116. package/node_modules/@fps-games/babylon-renderer/dist/shadows/static-projected-shadow-artifact-system.js +159 -0
  117. package/node_modules/@fps-games/babylon-renderer/dist/shadows/static-projected-shadow-artifact-system.js.map +1 -1
  118. package/node_modules/@fps-games/babylon-renderer/dist/shadows/static-projected-shadow-baker.js +8 -1
  119. package/node_modules/@fps-games/babylon-renderer/dist/shadows/static-projected-shadow-baker.js.map +1 -1
  120. package/node_modules/@fps-games/babylon-renderer/dist/shadows/types.d.ts +53 -2
  121. package/node_modules/@fps-games/babylon-renderer/dist/shadows/types.d.ts.map +1 -1
  122. package/node_modules/@fps-games/babylon-renderer/dist/shadows/types.js +1 -0
  123. package/node_modules/@fps-games/babylon-renderer/dist/shadows/types.js.map +1 -1
  124. package/node_modules/@fps-games/babylon-renderer/package.json +1 -1
  125. package/node_modules/@fps-games/editor-babylon/dist/camera-controller.d.ts.map +1 -1
  126. package/node_modules/@fps-games/editor-babylon/dist/camera-controller.js +11 -0
  127. package/node_modules/@fps-games/editor-babylon/dist/camera-controller.js.map +1 -1
  128. package/node_modules/@fps-games/editor-babylon/dist/editor-sky.d.ts +3 -1
  129. package/node_modules/@fps-games/editor-babylon/dist/editor-sky.d.ts.map +1 -1
  130. package/node_modules/@fps-games/editor-babylon/dist/editor-sky.js +114 -18
  131. package/node_modules/@fps-games/editor-babylon/dist/editor-sky.js.map +1 -1
  132. package/node_modules/@fps-games/editor-babylon/dist/editor-world.d.ts +1 -0
  133. package/node_modules/@fps-games/editor-babylon/dist/editor-world.d.ts.map +1 -1
  134. package/node_modules/@fps-games/editor-babylon/dist/editor-world.js +3 -0
  135. package/node_modules/@fps-games/editor-babylon/dist/editor-world.js.map +1 -1
  136. package/node_modules/@fps-games/editor-babylon/dist/index.d.ts +3 -0
  137. package/node_modules/@fps-games/editor-babylon/dist/index.d.ts.map +1 -1
  138. package/node_modules/@fps-games/editor-babylon/dist/index.js +3 -0
  139. package/node_modules/@fps-games/editor-babylon/dist/index.js.map +1 -1
  140. package/node_modules/@fps-games/editor-babylon/dist/marker-overlay.d.ts +52 -0
  141. package/node_modules/@fps-games/editor-babylon/dist/marker-overlay.d.ts.map +1 -0
  142. package/node_modules/@fps-games/editor-babylon/dist/marker-overlay.js +1395 -0
  143. package/node_modules/@fps-games/editor-babylon/dist/marker-overlay.js.map +1 -0
  144. package/node_modules/@fps-games/editor-babylon/dist/material-property-adapter.d.ts.map +1 -1
  145. package/node_modules/@fps-games/editor-babylon/dist/material-property-adapter.js +4 -65
  146. package/node_modules/@fps-games/editor-babylon/dist/material-property-adapter.js.map +1 -1
  147. package/node_modules/@fps-games/editor-babylon/dist/material-slot-source-resolver.d.ts +28 -0
  148. package/node_modules/@fps-games/editor-babylon/dist/material-slot-source-resolver.d.ts.map +1 -0
  149. package/node_modules/@fps-games/editor-babylon/dist/material-slot-source-resolver.js +235 -0
  150. package/node_modules/@fps-games/editor-babylon/dist/material-slot-source-resolver.js.map +1 -0
  151. package/node_modules/@fps-games/editor-babylon/dist/prefab-comparison-preview-controller.d.ts +37 -0
  152. package/node_modules/@fps-games/editor-babylon/dist/prefab-comparison-preview-controller.d.ts.map +1 -0
  153. package/node_modules/@fps-games/editor-babylon/dist/prefab-comparison-preview-controller.js +451 -0
  154. package/node_modules/@fps-games/editor-babylon/dist/prefab-comparison-preview-controller.js.map +1 -0
  155. package/node_modules/@fps-games/editor-babylon/dist/projection-asset-container-importer.d.ts.map +1 -1
  156. package/node_modules/@fps-games/editor-babylon/dist/projection-asset-container-importer.js +14 -3
  157. package/node_modules/@fps-games/editor-babylon/dist/projection-asset-container-importer.js.map +1 -1
  158. package/node_modules/@fps-games/editor-babylon/dist/projection-pick-resolver.d.ts +1 -0
  159. package/node_modules/@fps-games/editor-babylon/dist/projection-pick-resolver.d.ts.map +1 -1
  160. package/node_modules/@fps-games/editor-babylon/dist/projection-pick-resolver.js +20 -4
  161. package/node_modules/@fps-games/editor-babylon/dist/projection-pick-resolver.js.map +1 -1
  162. package/node_modules/@fps-games/editor-babylon/dist/projection-source-owner-path.d.ts +3 -6
  163. package/node_modules/@fps-games/editor-babylon/dist/projection-source-owner-path.d.ts.map +1 -1
  164. package/node_modules/@fps-games/editor-babylon/dist/projection-source-owner-path.js +4 -37
  165. package/node_modules/@fps-games/editor-babylon/dist/projection-source-owner-path.js.map +1 -1
  166. package/node_modules/@fps-games/editor-babylon/dist/projection.d.ts +74 -1
  167. package/node_modules/@fps-games/editor-babylon/dist/projection.d.ts.map +1 -1
  168. package/node_modules/@fps-games/editor-babylon/dist/projection.js +641 -52
  169. package/node_modules/@fps-games/editor-babylon/dist/projection.js.map +1 -1
  170. package/node_modules/@fps-games/editor-babylon/dist/scene-view-camera-controller.d.ts +11 -0
  171. package/node_modules/@fps-games/editor-babylon/dist/scene-view-camera-controller.d.ts.map +1 -1
  172. package/node_modules/@fps-games/editor-babylon/dist/scene-view-camera-controller.js +113 -29
  173. package/node_modules/@fps-games/editor-babylon/dist/scene-view-camera-controller.js.map +1 -1
  174. package/node_modules/@fps-games/editor-babylon/dist/shadow-preview-controller.d.ts +13 -1
  175. package/node_modules/@fps-games/editor-babylon/dist/shadow-preview-controller.d.ts.map +1 -1
  176. package/node_modules/@fps-games/editor-babylon/dist/shadow-preview-controller.js +543 -3
  177. package/node_modules/@fps-games/editor-babylon/dist/shadow-preview-controller.js.map +1 -1
  178. package/node_modules/@fps-games/editor-babylon/package.json +5 -5
  179. package/node_modules/@fps-games/editor-browser/dist/index.d.ts +8 -2
  180. package/node_modules/@fps-games/editor-browser/dist/index.d.ts.map +1 -1
  181. package/node_modules/@fps-games/editor-browser/dist/index.js +4 -0
  182. package/node_modules/@fps-games/editor-browser/dist/index.js.map +1 -1
  183. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-asset-kind.d.ts +5 -0
  184. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-asset-kind.d.ts.map +1 -0
  185. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-asset-kind.js +23 -0
  186. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-asset-kind.js.map +1 -0
  187. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-context-menu.js +1 -1
  188. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-context-menu.js.map +1 -1
  189. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-actions.d.ts.map +1 -1
  190. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-actions.js +76 -9
  191. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-actions.js.map +1 -1
  192. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-attach-dialog.d.ts.map +1 -1
  193. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-attach-dialog.js +3 -2
  194. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-attach-dialog.js.map +1 -1
  195. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-command-adapter.d.ts +21 -0
  196. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-command-adapter.d.ts.map +1 -0
  197. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-command-adapter.js +75 -0
  198. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-command-adapter.js.map +1 -0
  199. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-controller.d.ts +2 -0
  200. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-controller.d.ts.map +1 -1
  201. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-controller.js +326 -72
  202. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-controller.js.map +1 -1
  203. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-scope.d.ts +5 -0
  204. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-scope.d.ts.map +1 -0
  205. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-scope.js +92 -0
  206. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-scope.js.map +1 -0
  207. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-tree.d.ts +4 -1
  208. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-tree.d.ts.map +1 -1
  209. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-tree.js +22 -7
  210. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-tree.js.map +1 -1
  211. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-view.d.ts +4 -0
  212. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-view.d.ts.map +1 -1
  213. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-view.js +24 -11
  214. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-view.js.map +1 -1
  215. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.d.ts +1 -1
  216. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.d.ts.map +1 -1
  217. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.js +7 -0
  218. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.js.map +1 -1
  219. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panel-registry.js +1 -1
  220. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panel-registry.js.map +1 -1
  221. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.d.ts +4 -0
  222. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.d.ts.map +1 -1
  223. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.js +1471 -29
  224. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.js.map +1 -1
  225. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-prefab-stage.d.ts +70 -0
  226. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-prefab-stage.d.ts.map +1 -0
  227. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-prefab-stage.js +171 -0
  228. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-prefab-stage.js.map +1 -0
  229. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-primitives.d.ts +1 -1
  230. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-primitives.d.ts.map +1 -1
  231. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-primitives.js +2 -2
  232. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-primitives.js.map +1 -1
  233. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-shared.d.ts.map +1 -1
  234. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-shared.js +9 -2
  235. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-shared.js.map +1 -1
  236. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.d.ts +301 -3
  237. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.d.ts.map +1 -1
  238. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-workbench.d.ts +12 -1
  239. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-workbench.d.ts.map +1 -1
  240. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-workbench.js +13 -1
  241. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-workbench.js.map +1 -1
  242. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.d.ts +6 -4
  243. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.d.ts.map +1 -1
  244. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.js +1501 -122
  245. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.js.map +1 -1
  246. package/node_modules/@fps-games/editor-browser/package.json +3 -3
  247. package/node_modules/@fps-games/editor-core/dist/agent-bridge.d.ts +18 -0
  248. package/node_modules/@fps-games/editor-core/dist/agent-bridge.d.ts.map +1 -0
  249. package/node_modules/@fps-games/editor-core/dist/agent-bridge.js +102 -0
  250. package/node_modules/@fps-games/editor-core/dist/agent-bridge.js.map +1 -0
  251. package/node_modules/@fps-games/editor-core/dist/index.d.ts +1 -0
  252. package/node_modules/@fps-games/editor-core/dist/index.d.ts.map +1 -1
  253. package/node_modules/@fps-games/editor-core/dist/index.js +1 -0
  254. package/node_modules/@fps-games/editor-core/dist/index.js.map +1 -1
  255. package/node_modules/@fps-games/editor-core/dist/scene-graph.d.ts +1 -1
  256. package/node_modules/@fps-games/editor-core/dist/scene-graph.d.ts.map +1 -1
  257. package/node_modules/@fps-games/editor-core/dist/viewport-tools.d.ts +3 -1
  258. package/node_modules/@fps-games/editor-core/dist/viewport-tools.d.ts.map +1 -1
  259. package/node_modules/@fps-games/editor-core/dist/viewport-tools.js +1 -0
  260. package/node_modules/@fps-games/editor-core/dist/viewport-tools.js.map +1 -1
  261. package/node_modules/@fps-games/editor-core/package.json +2 -2
  262. package/node_modules/@fps-games/editor-forge-play/package.json +2 -2
  263. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/config.d.ts +3 -0
  264. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/config.d.ts.map +1 -0
  265. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/config.js +9 -0
  266. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/config.js.map +1 -0
  267. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/generated-module.d.ts +6 -0
  268. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/generated-module.d.ts.map +1 -0
  269. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/generated-module.js +89 -0
  270. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/generated-module.js.map +1 -0
  271. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/identity.d.ts +18 -0
  272. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/identity.d.ts.map +1 -0
  273. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/identity.js +121 -0
  274. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/identity.js.map +1 -0
  275. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/index.d.ts +4 -0
  276. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/index.d.ts.map +1 -0
  277. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/index.js +3 -0
  278. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/index.js.map +1 -0
  279. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/metadata.d.ts +27 -0
  280. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/metadata.d.ts.map +1 -0
  281. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/metadata.js +782 -0
  282. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/metadata.js.map +1 -0
  283. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/node.d.ts +5 -0
  284. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/node.d.ts.map +1 -0
  285. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/node.js +5 -0
  286. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/node.js.map +1 -0
  287. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/registry.d.ts +80 -0
  288. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/registry.d.ts.map +1 -0
  289. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/registry.js +600 -0
  290. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/registry.js.map +1 -0
  291. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/types.d.ts +51 -0
  292. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/types.d.ts.map +1 -0
  293. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/types.js +2 -0
  294. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/types.js.map +1 -0
  295. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/catalog.d.ts.map +1 -1
  296. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/catalog.js +17 -3
  297. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/catalog.js.map +1 -1
  298. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/document.d.ts.map +1 -1
  299. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/document.js +2 -1
  300. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/document.js.map +1 -1
  301. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/types.d.ts +3 -2
  302. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/types.d.ts.map +1 -1
  303. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-placement/document.d.ts +1 -1
  304. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-placement/document.d.ts.map +1 -1
  305. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-placement/document.js +48 -20
  306. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-placement/document.js.map +1 -1
  307. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-placement/index.d.ts +1 -1
  308. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-placement/index.d.ts.map +1 -1
  309. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-placement/index.js +1 -1
  310. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-placement/index.js.map +1 -1
  311. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-placement/placement.d.ts.map +1 -1
  312. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-placement/placement.js +2 -1
  313. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-placement/placement.js.map +1 -1
  314. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-placement/types.d.ts +3 -0
  315. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-placement/types.d.ts.map +1 -1
  316. package/node_modules/@fps-games/editor-playable-sdk/dist/document/helpers.d.ts +97 -2
  317. package/node_modules/@fps-games/editor-playable-sdk/dist/document/helpers.d.ts.map +1 -1
  318. package/node_modules/@fps-games/editor-playable-sdk/dist/document/helpers.js +1143 -8
  319. package/node_modules/@fps-games/editor-playable-sdk/dist/document/helpers.js.map +1 -1
  320. package/node_modules/@fps-games/editor-playable-sdk/dist/document/types.d.ts +145 -2
  321. package/node_modules/@fps-games/editor-playable-sdk/dist/document/types.d.ts.map +1 -1
  322. package/node_modules/@fps-games/editor-playable-sdk/dist/field-schema/index.d.ts +1 -1
  323. package/node_modules/@fps-games/editor-playable-sdk/dist/field-schema/index.d.ts.map +1 -1
  324. package/node_modules/@fps-games/editor-playable-sdk/dist/field-schema/index.js +1 -1
  325. package/node_modules/@fps-games/editor-playable-sdk/dist/field-schema/index.js.map +1 -1
  326. package/node_modules/@fps-games/editor-playable-sdk/dist/field-schema/schema.d.ts.map +1 -1
  327. package/node_modules/@fps-games/editor-playable-sdk/dist/field-schema/schema.js +24 -9
  328. package/node_modules/@fps-games/editor-playable-sdk/dist/field-schema/schema.js.map +1 -1
  329. package/node_modules/@fps-games/editor-playable-sdk/dist/field-schema/validators.d.ts +6 -0
  330. package/node_modules/@fps-games/editor-playable-sdk/dist/field-schema/validators.d.ts.map +1 -1
  331. package/node_modules/@fps-games/editor-playable-sdk/dist/field-schema/validators.js +31 -0
  332. package/node_modules/@fps-games/editor-playable-sdk/dist/field-schema/validators.js.map +1 -1
  333. package/node_modules/@fps-games/editor-playable-sdk/dist/index.d.ts +3 -0
  334. package/node_modules/@fps-games/editor-playable-sdk/dist/index.d.ts.map +1 -1
  335. package/node_modules/@fps-games/editor-playable-sdk/dist/index.js +3 -0
  336. package/node_modules/@fps-games/editor-playable-sdk/dist/index.js.map +1 -1
  337. package/node_modules/@fps-games/editor-playable-sdk/dist/inspector/document-sections.d.ts +82 -2
  338. package/node_modules/@fps-games/editor-playable-sdk/dist/inspector/document-sections.d.ts.map +1 -1
  339. package/node_modules/@fps-games/editor-playable-sdk/dist/inspector/document-sections.js +396 -22
  340. package/node_modules/@fps-games/editor-playable-sdk/dist/inspector/document-sections.js.map +1 -1
  341. package/node_modules/@fps-games/editor-playable-sdk/dist/inspector/index.d.ts +1 -1
  342. package/node_modules/@fps-games/editor-playable-sdk/dist/inspector/index.d.ts.map +1 -1
  343. package/node_modules/@fps-games/editor-playable-sdk/dist/inspector/index.js +1 -1
  344. package/node_modules/@fps-games/editor-playable-sdk/dist/inspector/index.js.map +1 -1
  345. package/node_modules/@fps-games/editor-playable-sdk/dist/inspector/validation.d.ts.map +1 -1
  346. package/node_modules/@fps-games/editor-playable-sdk/dist/inspector/validation.js +0 -3
  347. package/node_modules/@fps-games/editor-playable-sdk/dist/inspector/validation.js.map +1 -1
  348. package/node_modules/@fps-games/editor-playable-sdk/dist/lighting-debug/math.d.ts +29 -1
  349. package/node_modules/@fps-games/editor-playable-sdk/dist/lighting-debug/math.d.ts.map +1 -1
  350. package/node_modules/@fps-games/editor-playable-sdk/dist/lighting-debug/math.js +143 -0
  351. package/node_modules/@fps-games/editor-playable-sdk/dist/lighting-debug/math.js.map +1 -1
  352. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/lifecycle.d.ts.map +1 -1
  353. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/lifecycle.js +3 -7
  354. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/lifecycle.js.map +1 -1
  355. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/binding.d.ts.map +1 -1
  356. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/binding.js +6 -0
  357. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/binding.js.map +1 -1
  358. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/types.d.ts +2 -10
  359. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/types.d.ts.map +1 -1
  360. package/node_modules/@fps-games/editor-playable-sdk/dist/mutation/field-patch.d.ts.map +1 -1
  361. package/node_modules/@fps-games/editor-playable-sdk/dist/mutation/field-patch.js +107 -11
  362. package/node_modules/@fps-games/editor-playable-sdk/dist/mutation/field-patch.js.map +1 -1
  363. package/node_modules/@fps-games/editor-playable-sdk/dist/mutation/reducer.d.ts.map +1 -1
  364. package/node_modules/@fps-games/editor-playable-sdk/dist/mutation/reducer.js +4 -1
  365. package/node_modules/@fps-games/editor-playable-sdk/dist/mutation/reducer.js.map +1 -1
  366. package/node_modules/@fps-games/editor-playable-sdk/dist/mutation/transform.d.ts.map +1 -1
  367. package/node_modules/@fps-games/editor-playable-sdk/dist/mutation/transform.js +19 -1
  368. package/node_modules/@fps-games/editor-playable-sdk/dist/mutation/transform.js.map +1 -1
  369. package/node_modules/@fps-games/editor-playable-sdk/dist/rendering-profile/panel.d.ts.map +1 -1
  370. package/node_modules/@fps-games/editor-playable-sdk/dist/rendering-profile/panel.js +19 -3
  371. package/node_modules/@fps-games/editor-playable-sdk/dist/rendering-profile/panel.js.map +1 -1
  372. package/node_modules/@fps-games/editor-playable-sdk/dist/runtime-preview/assets.d.ts +1 -2
  373. package/node_modules/@fps-games/editor-playable-sdk/dist/runtime-preview/assets.d.ts.map +1 -1
  374. package/node_modules/@fps-games/editor-playable-sdk/dist/runtime-preview/assets.js +0 -14
  375. package/node_modules/@fps-games/editor-playable-sdk/dist/runtime-preview/assets.js.map +1 -1
  376. package/node_modules/@fps-games/editor-playable-sdk/dist/runtime-preview/import-plan.d.ts +1 -7
  377. package/node_modules/@fps-games/editor-playable-sdk/dist/runtime-preview/import-plan.d.ts.map +1 -1
  378. package/node_modules/@fps-games/editor-playable-sdk/dist/runtime-preview/import-plan.js +3 -32
  379. package/node_modules/@fps-games/editor-playable-sdk/dist/runtime-preview/import-plan.js.map +1 -1
  380. package/node_modules/@fps-games/editor-playable-sdk/dist/runtime-preview/nodes.d.ts.map +1 -1
  381. package/node_modules/@fps-games/editor-playable-sdk/dist/runtime-preview/nodes.js +82 -63
  382. package/node_modules/@fps-games/editor-playable-sdk/dist/runtime-preview/nodes.js.map +1 -1
  383. package/node_modules/@fps-games/editor-playable-sdk/dist/runtime-preview/types.d.ts +7 -23
  384. package/node_modules/@fps-games/editor-playable-sdk/dist/runtime-preview/types.d.ts.map +1 -1
  385. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-compiler/compiler.d.ts +5 -0
  386. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-compiler/compiler.d.ts.map +1 -0
  387. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-compiler/compiler.js +996 -0
  388. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-compiler/compiler.js.map +1 -0
  389. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-compiler/index.d.ts +3 -0
  390. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-compiler/index.d.ts.map +1 -0
  391. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-compiler/index.js +3 -0
  392. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-compiler/index.js.map +1 -0
  393. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-compiler/types.d.ts +152 -0
  394. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-compiler/types.d.ts.map +1 -0
  395. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-compiler/types.js +2 -0
  396. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-compiler/types.js.map +1 -0
  397. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/protocol.d.ts.map +1 -1
  398. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/protocol.js +44 -2
  399. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/protocol.js.map +1 -1
  400. package/node_modules/@fps-games/editor-playable-sdk/dist/serialized-property/descriptors.d.ts +1 -0
  401. package/node_modules/@fps-games/editor-playable-sdk/dist/serialized-property/descriptors.d.ts.map +1 -1
  402. package/node_modules/@fps-games/editor-playable-sdk/dist/serialized-property/descriptors.js +244 -12
  403. package/node_modules/@fps-games/editor-playable-sdk/dist/serialized-property/descriptors.js.map +1 -1
  404. package/node_modules/@fps-games/editor-playable-sdk/dist/serialized-property/inspector.d.ts.map +1 -1
  405. package/node_modules/@fps-games/editor-playable-sdk/dist/serialized-property/inspector.js +216 -67
  406. package/node_modules/@fps-games/editor-playable-sdk/dist/serialized-property/inspector.js.map +1 -1
  407. package/node_modules/@fps-games/editor-playable-sdk/dist/serialized-property/object.d.ts.map +1 -1
  408. package/node_modules/@fps-games/editor-playable-sdk/dist/serialized-property/object.js +7 -4
  409. package/node_modules/@fps-games/editor-playable-sdk/dist/serialized-property/object.js.map +1 -1
  410. package/node_modules/@fps-games/editor-playable-sdk/dist/serialized-property/patch.d.ts.map +1 -1
  411. package/node_modules/@fps-games/editor-playable-sdk/dist/serialized-property/patch.js +45 -1
  412. package/node_modules/@fps-games/editor-playable-sdk/dist/serialized-property/patch.js.map +1 -1
  413. package/node_modules/@fps-games/editor-playable-sdk/dist/session/hierarchy.d.ts.map +1 -1
  414. package/node_modules/@fps-games/editor-playable-sdk/dist/session/hierarchy.js +2 -1
  415. package/node_modules/@fps-games/editor-playable-sdk/dist/session/hierarchy.js.map +1 -1
  416. package/node_modules/@fps-games/editor-playable-sdk/dist/shadow-system/index.d.ts +5 -0
  417. package/node_modules/@fps-games/editor-playable-sdk/dist/shadow-system/index.d.ts.map +1 -0
  418. package/node_modules/@fps-games/editor-playable-sdk/dist/shadow-system/index.js +5 -0
  419. package/node_modules/@fps-games/editor-playable-sdk/dist/shadow-system/index.js.map +1 -0
  420. package/node_modules/@fps-games/editor-playable-sdk/dist/shadow-system/legacy.d.ts +21 -0
  421. package/node_modules/@fps-games/editor-playable-sdk/dist/shadow-system/legacy.d.ts.map +1 -0
  422. package/node_modules/@fps-games/editor-playable-sdk/dist/shadow-system/legacy.js +158 -0
  423. package/node_modules/@fps-games/editor-playable-sdk/dist/shadow-system/legacy.js.map +1 -0
  424. package/node_modules/@fps-games/editor-playable-sdk/dist/shadow-system/quality.d.ts +5 -0
  425. package/node_modules/@fps-games/editor-playable-sdk/dist/shadow-system/quality.d.ts.map +1 -0
  426. package/node_modules/@fps-games/editor-playable-sdk/dist/shadow-system/quality.js +83 -0
  427. package/node_modules/@fps-games/editor-playable-sdk/dist/shadow-system/quality.js.map +1 -0
  428. package/node_modules/@fps-games/editor-playable-sdk/dist/shadow-system/resolver.d.ts +35 -0
  429. package/node_modules/@fps-games/editor-playable-sdk/dist/shadow-system/resolver.d.ts.map +1 -0
  430. package/node_modules/@fps-games/editor-playable-sdk/dist/shadow-system/resolver.js +363 -0
  431. package/node_modules/@fps-games/editor-playable-sdk/dist/shadow-system/resolver.js.map +1 -0
  432. package/node_modules/@fps-games/editor-playable-sdk/dist/shadow-system/types.d.ts +105 -0
  433. package/node_modules/@fps-games/editor-playable-sdk/dist/shadow-system/types.d.ts.map +1 -0
  434. package/node_modules/@fps-games/editor-playable-sdk/dist/shadow-system/types.js +6 -0
  435. package/node_modules/@fps-games/editor-playable-sdk/dist/shadow-system/types.js.map +1 -0
  436. package/node_modules/@fps-games/editor-playable-sdk/dist/static-shadows/artifact.d.ts +3 -0
  437. package/node_modules/@fps-games/editor-playable-sdk/dist/static-shadows/artifact.d.ts.map +1 -1
  438. package/node_modules/@fps-games/editor-playable-sdk/dist/static-shadows/artifact.js +44 -0
  439. package/node_modules/@fps-games/editor-playable-sdk/dist/static-shadows/artifact.js.map +1 -1
  440. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/asset-authoring.d.ts +26 -0
  441. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/asset-authoring.d.ts.map +1 -0
  442. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/asset-authoring.js +105 -0
  443. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/asset-authoring.js.map +1 -0
  444. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.d.ts +3 -0
  445. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.d.ts.map +1 -1
  446. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.js +3 -0
  447. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.js.map +1 -1
  448. package/node_modules/@fps-games/editor-playable-sdk/package.json +3 -3
  449. package/node_modules/@fps-games/editor-protocol/dist/agent-bridge.d.ts +1127 -0
  450. package/node_modules/@fps-games/editor-protocol/dist/agent-bridge.d.ts.map +1 -0
  451. package/node_modules/@fps-games/editor-protocol/dist/agent-bridge.js +2180 -0
  452. package/node_modules/@fps-games/editor-protocol/dist/agent-bridge.js.map +1 -0
  453. package/node_modules/@fps-games/editor-protocol/dist/agent-trace.d.ts +68 -0
  454. package/node_modules/@fps-games/editor-protocol/dist/agent-trace.d.ts.map +1 -0
  455. package/node_modules/@fps-games/editor-protocol/dist/agent-trace.js +23 -0
  456. package/node_modules/@fps-games/editor-protocol/dist/agent-trace.js.map +1 -0
  457. package/node_modules/@fps-games/editor-protocol/dist/agent.d.ts +57 -3
  458. package/node_modules/@fps-games/editor-protocol/dist/agent.d.ts.map +1 -1
  459. package/node_modules/@fps-games/editor-protocol/dist/agent.js.map +1 -1
  460. package/node_modules/@fps-games/editor-protocol/dist/index.d.ts +21 -0
  461. package/node_modules/@fps-games/editor-protocol/dist/index.d.ts.map +1 -1
  462. package/node_modules/@fps-games/editor-protocol/dist/index.js +3 -0
  463. package/node_modules/@fps-games/editor-protocol/dist/index.js.map +1 -1
  464. package/node_modules/@fps-games/editor-protocol/dist/marker-graph.d.ts +128 -0
  465. package/node_modules/@fps-games/editor-protocol/dist/marker-graph.d.ts.map +1 -0
  466. package/node_modules/@fps-games/editor-protocol/dist/marker-graph.js +2 -0
  467. package/node_modules/@fps-games/editor-protocol/dist/marker-graph.js.map +1 -0
  468. package/node_modules/@fps-games/editor-protocol/package.json +1 -1
  469. package/package.json +8 -8
@@ -1,15 +1,23 @@
1
1
  import { createLocalEditorHierarchyBlankMenu, createLocalEditorHierarchyCopyShortcutAction, createLocalEditorHierarchyDeleteShortcutAction, createLocalEditorHierarchyDuplicateShortcutAction, createLocalEditorHierarchyNodeMenu, createLocalEditorHierarchyPasteShortcutAction, createLocalEditorHierarchySelectAllShortcutAction, } from './local-editor-ui-hierarchy-actions.js';
2
- import { canLocalEditorHierarchyNodeHaveChildren, createLocalEditorHierarchyTreeModel, isLocalEditorHierarchyNodeSelectable, isLocalEditorHierarchyNodeMovable, } from './local-editor-ui-hierarchy-tree.js';
2
+ import { canLocalEditorHierarchyNodeHaveChildren, canLocalEditorHierarchyNodeRename, canLocalEditorHierarchyNodeToggleEnabled, createLocalEditorHierarchyTreeModel, isLocalEditorHierarchyNodeSelectable, isLocalEditorHierarchyNodeMovable, } from './local-editor-ui-hierarchy-tree.js';
3
3
  import { resolveLocalEditorHierarchyDragOperation, } from './local-editor-ui-hierarchy-drag-policy.js';
4
4
  import { resolveLocalEditorHierarchyAutoScroll, } from './local-editor-ui-hierarchy-auto-scroll.js';
5
5
  import { clearLocalEditorStructuredDragSession, createLocalEditorStructuredDragSession, hasLocalEditorStructuredDragSessionFeedback, } from './local-editor-ui-structured-drag-session.js';
6
6
  import { renderLocalEditorHierarchyPanel, syncLocalEditorHierarchyDropPreview, } from './local-editor-ui-hierarchy-view.js';
7
+ import { createLocalEditorActiveHierarchyScope, } from './local-editor-ui-hierarchy-scope.js';
8
+ import { resolveLocalEditorHierarchyCommandAdapter, } from './local-editor-ui-hierarchy-command-adapter.js';
7
9
  import { createLocalEditorViewportRevealController, } from './local-editor-ui-dock-panel.js';
8
10
  import { createLocalEditorHierarchyAttachDialog, } from './local-editor-ui-hierarchy-attach-dialog.js';
9
11
  const HIERARCHY_DRAG_INDENT_WIDTH = 16;
12
+ export function resolveLocalEditorHierarchyCreateMarkerParentId(activeNode) {
13
+ return activeNode && activeNode.item.canHaveChildren === true && activeNode.item.role !== 'marker'
14
+ ? activeNode.id
15
+ : null;
16
+ }
10
17
  export function createLocalEditorHierarchyController(options) {
11
18
  const { doc, panel, callbacks, inputRouter, contextMenu, getState, requestRender } = options;
12
- const collapsedIds = new Set();
19
+ const collapsedIdsByScope = new Map();
20
+ const hierarchySearchByScope = new Map();
13
21
  let hierarchyRename = null;
14
22
  let hierarchyDrag = null;
15
23
  let hierarchyDrop = null;
@@ -17,10 +25,10 @@ export function createLocalEditorHierarchyController(options) {
17
25
  const hierarchyDragSession = createLocalEditorStructuredDragSession();
18
26
  let hierarchyShortcutScopeActive = false;
19
27
  let hierarchyClipboard = null;
20
- let hierarchySearch = '';
21
28
  let hierarchySearchComposing = false;
22
29
  let currentModel = null;
23
30
  let lastRenderedActiveId;
31
+ let lastRenderedScopeId;
24
32
  let pendingHierarchyScrollId = null;
25
33
  let hierarchySelectionAnchorId = null;
26
34
  const attachDialog = createLocalEditorHierarchyAttachDialog({
@@ -40,15 +48,18 @@ export function createLocalEditorHierarchyController(options) {
40
48
  return currentModel;
41
49
  };
42
50
  const render = (state) => {
43
- if (hierarchyRename && !state.hierarchy.some(item => item.id === hierarchyRename?.id))
51
+ const scope = resolveScope(state);
52
+ const commandAdapter = resolveHierarchyCommandAdapter(scope);
53
+ if (hierarchyRename && !scope.nodes.some(item => item.id === hierarchyRename?.id))
44
54
  hierarchyRename = null;
45
- const activeIdChanged = state.activeId !== lastRenderedActiveId;
55
+ const scopeChanged = scope.scopeId !== lastRenderedScopeId;
56
+ const activeIdChanged = scope.activeId !== lastRenderedActiveId || scopeChanged;
46
57
  const treeScrollSnapshot = treeViewportReveal.captureScrollSnapshot();
47
58
  if (activeIdChanged) {
48
59
  pendingHierarchyScrollId = null;
49
- expandActiveHierarchyPath(state);
60
+ expandActiveHierarchyPath(state, scope);
50
61
  }
51
- currentModel = createModel(state);
62
+ currentModel = createModel(state, scope);
52
63
  if (hierarchySelectionAnchorId && !currentModel.getNode(hierarchySelectionAnchorId)) {
53
64
  hierarchySelectionAnchorId = null;
54
65
  }
@@ -58,16 +69,21 @@ export function createLocalEditorHierarchyController(options) {
58
69
  drop: hierarchyDrop,
59
70
  dropPreview: hierarchyDragSession.preview,
60
71
  rootDrop: hierarchyRootDrop,
61
- searchQuery: hierarchySearch,
72
+ searchQuery: getScopeSearch(scope.scopeId),
73
+ title: scope.title,
74
+ searchPlaceholder: scope.searchPlaceholder,
75
+ showCreateGroup: commandAdapter.showCreateGroupToolbar,
76
+ showCreateMarker: commandAdapter.kind === 'scene',
62
77
  });
63
78
  treeViewportReveal.restoreScrollSnapshot(treeScrollSnapshot);
64
- const suppressActiveScroll = state.activeId
65
- ? treeViewportReveal.consumeRevealSuppression(state.activeId, { clearWhenDifferent: activeIdChanged })
79
+ const suppressActiveScroll = scope.activeId
80
+ ? treeViewportReveal.consumeRevealSuppression(scope.activeId, { clearWhenDifferent: activeIdChanged })
66
81
  : false;
67
- if (activeIdChanged && state.activeId && !suppressActiveScroll && shouldAutoScrollActiveHierarchyNode()) {
68
- scheduleActiveHierarchyScroll(state.activeId);
82
+ if (activeIdChanged && scope.activeId && !suppressActiveScroll && shouldAutoScrollActiveHierarchyNode()) {
83
+ scheduleActiveHierarchyScroll(scope.activeId);
69
84
  }
70
- lastRenderedActiveId = state.activeId;
85
+ lastRenderedActiveId = scope.activeId;
86
+ lastRenderedScopeId = scope.scopeId;
71
87
  };
72
88
  const onClick = (event) => {
73
89
  const target = event.target instanceof HTMLElement ? event.target : null;
@@ -95,7 +111,9 @@ export function createLocalEditorHierarchyController(options) {
95
111
  const createGroupButton = target?.closest('[data-editor-hierarchy-create-group]');
96
112
  if (createGroupButton) {
97
113
  const state = getState();
98
- const parentId = state?.activeId ?? null;
114
+ if (!state || resolveScope(state).commandSurface !== 'scene-graph')
115
+ return;
116
+ const parentId = state.activeId ?? null;
99
117
  if (parentId)
100
118
  expandNode(parentId);
101
119
  callbacks.onSceneGraphCreateGroup?.({
@@ -105,6 +123,13 @@ export function createLocalEditorHierarchyController(options) {
105
123
  });
106
124
  return;
107
125
  }
126
+ const createMarkerButton = target?.closest('[data-editor-hierarchy-create-marker]');
127
+ if (createMarkerButton) {
128
+ event.preventDefault();
129
+ event.stopPropagation();
130
+ createHierarchyMarkerFromButton();
131
+ return;
132
+ }
108
133
  const hierarchyButton = target?.closest('[data-editor-hierarchy-id]');
109
134
  const hierarchyId = hierarchyButton?.dataset.editorHierarchyId;
110
135
  if (hierarchyId) {
@@ -119,7 +144,7 @@ export function createLocalEditorHierarchyController(options) {
119
144
  if (shouldClearSelectionFromBlankClick(event, target)) {
120
145
  event.preventDefault();
121
146
  hierarchySelectionAnchorId = null;
122
- submitSelectionCommand({ type: 'selection.clear', label: 'Clear Selection' });
147
+ submitSelectionCommand({ type: 'selection.clear', label: 'Clear Selection' }, getState() ?? undefined);
123
148
  }
124
149
  };
125
150
  const onContextMenu = (event) => {
@@ -142,13 +167,15 @@ export function createLocalEditorHierarchyController(options) {
142
167
  event.preventDefault();
143
168
  event.stopPropagation();
144
169
  hierarchySelectionAnchorId = id;
145
- callbacks.onSelectHierarchyItem?.({ id, additive: false, toggle: false });
146
- callbacks.onFocusSelection?.();
170
+ selectSingleHierarchyItem(id);
171
+ if (resolveScopeForCurrentState()?.kind === 'scene')
172
+ callbacks.onFocusSelection?.();
147
173
  };
148
174
  const onInput = (event) => {
149
175
  const input = event.target instanceof HTMLInputElement ? event.target : null;
150
176
  if (input?.dataset.editorHierarchySearch != null) {
151
- hierarchySearch = input.value;
177
+ const scopeId = resolveScopeForCurrentState()?.scopeId ?? 'scene';
178
+ hierarchySearchByScope.set(scopeId, input.value);
152
179
  if (!hierarchySearchComposing && !isComposingInputEvent(event))
153
180
  requestRender();
154
181
  return;
@@ -165,10 +192,11 @@ export function createLocalEditorHierarchyController(options) {
165
192
  if (input?.dataset.editorHierarchySearch != null) {
166
193
  if (event.isComposing || hierarchySearchComposing)
167
194
  return;
168
- if (event.key !== 'Escape' || hierarchySearch.length === 0)
195
+ const scopeId = resolveScopeForCurrentState()?.scopeId ?? 'scene';
196
+ if (event.key !== 'Escape' || getScopeSearch(scopeId).length === 0)
169
197
  return;
170
198
  event.preventDefault();
171
- hierarchySearch = '';
199
+ hierarchySearchByScope.set(scopeId, '');
172
200
  requestRender();
173
201
  return;
174
202
  }
@@ -196,7 +224,8 @@ export function createLocalEditorHierarchyController(options) {
196
224
  if (input?.dataset.editorHierarchySearch == null)
197
225
  return;
198
226
  hierarchySearchComposing = false;
199
- hierarchySearch = input.value;
227
+ const scopeId = resolveScopeForCurrentState()?.scopeId ?? 'scene';
228
+ hierarchySearchByScope.set(scopeId, input.value);
200
229
  requestRender();
201
230
  };
202
231
  const onFocusOut = (event) => {
@@ -212,6 +241,10 @@ export function createLocalEditorHierarchyController(options) {
212
241
  const id = button?.dataset.editorHierarchyId;
213
242
  if (!id || !state)
214
243
  return;
244
+ if (!resolveHierarchyCommandAdapter(resolveScope(state)).menuCapabilities.hasMoveHandler) {
245
+ event.preventDefault();
246
+ return;
247
+ }
215
248
  const model = getModel(state);
216
249
  const node = model.getNode(id);
217
250
  if (!isLocalEditorHierarchyNodeMovable(node)) {
@@ -232,6 +265,10 @@ export function createLocalEditorHierarchyController(options) {
232
265
  clearHierarchyDragFeedbackAndRender();
233
266
  return;
234
267
  }
268
+ if (!resolveHierarchyCommandAdapter(resolveScope(state)).menuCapabilities.hasMoveHandler) {
269
+ clearHierarchyDragFeedbackAndRender();
270
+ return;
271
+ }
235
272
  const model = getModel(state);
236
273
  if (!isInsideHierarchyTreeViewport(target)) {
237
274
  clearHierarchyDragFeedbackAndRender();
@@ -297,6 +334,11 @@ export function createLocalEditorHierarchyController(options) {
297
334
  clearHierarchyDragFeedbackAndRender();
298
335
  return;
299
336
  }
337
+ const scope = resolveScope(state);
338
+ if (!resolveHierarchyCommandAdapter(scope).menuCapabilities.hasMoveHandler) {
339
+ clearHierarchyDragFeedbackAndRender();
340
+ return;
341
+ }
300
342
  const model = getModel(state);
301
343
  if (!isInsideHierarchyTreeViewport(target)) {
302
344
  clearHierarchyDragFeedbackAndRender();
@@ -311,6 +353,10 @@ export function createLocalEditorHierarchyController(options) {
311
353
  hierarchyDrag = null;
312
354
  clearHierarchyDragFeedback();
313
355
  if (operation.slot.placement === 'root') {
356
+ if (scope.commandSurface === 'prefab-composition') {
357
+ requestRender();
358
+ return;
359
+ }
314
360
  submitResolvedRootDrop(operation.resolution);
315
361
  return;
316
362
  }
@@ -320,6 +366,15 @@ export function createLocalEditorHierarchyController(options) {
320
366
  return;
321
367
  }
322
368
  expandDropParent(operation.resolution);
369
+ if (scope.commandSurface === 'prefab-composition') {
370
+ if (operation.slot.placement !== 'inside') {
371
+ requestRender();
372
+ return;
373
+ }
374
+ submitPrefabNodeReparent(scope, operation.resolution.draggedIds[0] ?? draggedIds[0], targetId);
375
+ requestRender();
376
+ return;
377
+ }
323
378
  submitResolvedDrop(operation.resolution, targetId, operation.slot.placement, draggedIds);
324
379
  };
325
380
  panel.addEventListener('click', onClick);
@@ -369,11 +424,14 @@ export function createLocalEditorHierarchyController(options) {
369
424
  const state = getState();
370
425
  if (!state)
371
426
  return false;
427
+ const scope = resolveScope(state);
428
+ if (scope.kind !== 'scene')
429
+ return false;
430
+ const commandAdapter = resolveHierarchyCommandAdapter(scope);
372
431
  const action = createLocalEditorHierarchyDeleteShortcutAction({
373
432
  state,
374
433
  model: getModel(state),
375
- hasDuplicateHandler: hasDuplicateHandler(),
376
- hasGroupSelectionHandler: typeof callbacks.onSceneGraphGroupSelection === 'function',
434
+ ...commandAdapter.menuCapabilities,
377
435
  });
378
436
  if (!action)
379
437
  return false;
@@ -392,13 +450,16 @@ export function createLocalEditorHierarchyController(options) {
392
450
  const state = getState();
393
451
  if (!state)
394
452
  return false;
453
+ const scope = resolveScope(state);
454
+ if (scope.kind !== 'scene')
455
+ return false;
456
+ const commandAdapter = resolveHierarchyCommandAdapter(scope);
395
457
  const input = {
396
458
  state,
397
459
  model: getModel(state),
398
460
  clipboardIds: hierarchyClipboard?.ids ?? null,
399
461
  clipboardActiveId: hierarchyClipboard?.activeId ?? null,
400
- hasDuplicateHandler: hasDuplicateHandler(),
401
- hasGroupSelectionHandler: typeof callbacks.onSceneGraphGroupSelection === 'function',
462
+ ...commandAdapter.menuCapabilities,
402
463
  };
403
464
  const action = key === 'd'
404
465
  ? createLocalEditorHierarchyDuplicateShortcutAction(input)
@@ -418,13 +479,34 @@ export function createLocalEditorHierarchyController(options) {
418
479
  function isComposingInputEvent(event) {
419
480
  return event.isComposing === true;
420
481
  }
421
- function createModel(state) {
422
- return createLocalEditorHierarchyTreeModel(state.hierarchy, state.selectedIds, state.activeId, {
423
- collapsedIds,
482
+ function resolveScope(state) {
483
+ return createLocalEditorActiveHierarchyScope(state);
484
+ }
485
+ function resolveScopeForCurrentState() {
486
+ const state = getState();
487
+ return state ? resolveScope(state) : null;
488
+ }
489
+ function getScopeCollapsedIds(scopeId) {
490
+ const existing = collapsedIdsByScope.get(scopeId);
491
+ if (existing)
492
+ return existing;
493
+ const created = new Set();
494
+ collapsedIdsByScope.set(scopeId, created);
495
+ return created;
496
+ }
497
+ function getScopeSearch(scopeId) {
498
+ return hierarchySearchByScope.get(scopeId) ?? '';
499
+ }
500
+ function createModel(state, scope = resolveScope(state)) {
501
+ return createLocalEditorHierarchyTreeModel(scope.nodes, scope.selectedIds, scope.activeId, {
502
+ collapsedIds: getScopeCollapsedIds(scope.scopeId),
424
503
  defaultExpanded: true,
425
504
  });
426
505
  }
427
506
  function selectHierarchyItemFromClick(id, event) {
507
+ const scope = resolveScopeForCurrentState();
508
+ if (!scope)
509
+ return;
428
510
  const toggle = event.metaKey || event.ctrlKey;
429
511
  const range = event.shiftKey && !toggle;
430
512
  if (range) {
@@ -432,11 +514,10 @@ export function createLocalEditorHierarchyController(options) {
432
514
  return;
433
515
  }
434
516
  hierarchySelectionAnchorId = id;
435
- callbacks.onSelectHierarchyItem?.({
436
- id,
437
- additive: false,
438
- toggle,
439
- });
517
+ if (scope.kind === 'prefab-stage')
518
+ callbacks.onSelectPrefabStageItem?.(id);
519
+ else
520
+ callbacks.onSelectHierarchyItem?.({ id, additive: false, toggle });
440
521
  }
441
522
  function toggleHierarchyItemEnabled(id, toggle) {
442
523
  if (toggle.dataset.editorHierarchyEnabledToggleDisabled === 'true')
@@ -444,10 +525,10 @@ export function createLocalEditorHierarchyController(options) {
444
525
  const state = getState();
445
526
  if (!state)
446
527
  return;
447
- const node = getModel(state).getNode(id);
448
- if (!node || typeof node.item.enabled !== 'boolean')
528
+ if (resolveScope(state).commandSurface !== 'scene-graph')
449
529
  return;
450
- if (node.item.canToggleEnabled === false || node.item.locked === true || node.protected)
530
+ const node = getModel(state).getNode(id);
531
+ if (!node || !canLocalEditorHierarchyNodeToggleEnabled(node))
451
532
  return;
452
533
  const directEnabled = typeof node.item.directEnabled === 'boolean'
453
534
  ? node.item.directEnabled
@@ -460,16 +541,22 @@ export function createLocalEditorHierarchyController(options) {
460
541
  function selectHierarchyVisibleRange(targetId) {
461
542
  const state = getState();
462
543
  if (!state) {
463
- callbacks.onSelectHierarchyItem?.({ id: targetId, additive: false, toggle: false });
544
+ selectSingleHierarchyItem(targetId);
464
545
  hierarchySelectionAnchorId = targetId;
465
546
  return;
466
547
  }
548
+ const scope = resolveScope(state);
549
+ if (scope.kind !== 'scene') {
550
+ hierarchySelectionAnchorId = targetId;
551
+ callbacks.onSelectPrefabStageItem?.(targetId);
552
+ return;
553
+ }
467
554
  const model = getModel(state);
468
- const anchorId = hierarchySelectionAnchorId ?? state.activeId ?? targetId;
555
+ const anchorId = hierarchySelectionAnchorId ?? scope.activeId ?? targetId;
469
556
  const selectedIds = model.getVisibleRangeSelection(anchorId, targetId);
470
557
  if (selectedIds.length === 0) {
471
558
  hierarchySelectionAnchorId = targetId;
472
- callbacks.onSelectHierarchyItem?.({ id: targetId, additive: false, toggle: false });
559
+ selectSingleHierarchyItem(targetId);
473
560
  return;
474
561
  }
475
562
  const activeId = selectedIds.includes(targetId)
@@ -480,10 +567,11 @@ export function createLocalEditorHierarchyController(options) {
480
567
  label: 'Select Hierarchy Range',
481
568
  selectedIds,
482
569
  activeId,
483
- });
570
+ }, state);
484
571
  }
485
572
  function resolveDraggedIds(state, model, draggedId) {
486
- const selectedIds = state.selectedIds.includes(draggedId) ? state.selectedIds : [draggedId];
573
+ const scope = resolveScope(state);
574
+ const selectedIds = scope.selectedIds.includes(draggedId) ? scope.selectedIds : [draggedId];
487
575
  return model.getTopLevelSelection(selectedIds);
488
576
  }
489
577
  function readDraggedIds(event) {
@@ -503,6 +591,8 @@ export function createLocalEditorHierarchyController(options) {
503
591
  requestRender();
504
592
  }
505
593
  function toggleExpanded(id) {
594
+ const scope = resolveScopeForCurrentState();
595
+ const collapsedIds = getScopeCollapsedIds(scope?.scopeId ?? 'scene');
506
596
  if (collapsedIds.has(id))
507
597
  collapsedIds.delete(id);
508
598
  else
@@ -512,15 +602,17 @@ export function createLocalEditorHierarchyController(options) {
512
602
  function expandNode(id) {
513
603
  if (!id)
514
604
  return;
515
- collapsedIds.delete(id);
605
+ const scope = resolveScopeForCurrentState();
606
+ getScopeCollapsedIds(scope?.scopeId ?? 'scene').delete(id);
516
607
  }
517
- function expandActiveHierarchyPath(state) {
518
- if (!state.activeId)
608
+ function expandActiveHierarchyPath(state, scope = resolveScope(state)) {
609
+ if (!scope.activeId)
519
610
  return;
520
- const model = createModel(state);
521
- if (!model.getNode(state.activeId))
611
+ const model = createModel(state, scope);
612
+ if (!model.getNode(scope.activeId))
522
613
  return;
523
- for (const ancestor of model.getAncestors(state.activeId)) {
614
+ const collapsedIds = getScopeCollapsedIds(scope.scopeId);
615
+ for (const ancestor of model.getAncestors(scope.activeId)) {
524
616
  collapsedIds.delete(ancestor.id);
525
617
  }
526
618
  }
@@ -698,10 +790,19 @@ export function createLocalEditorHierarchyController(options) {
698
790
  return;
699
791
  const trimmed = value.trim();
700
792
  const state = getState();
701
- const item = state?.hierarchy.find(candidate => candidate.id === id) ?? null;
793
+ const scope = state ? resolveScope(state) : null;
794
+ const item = scope?.nodes.find(candidate => candidate.id === id) ?? null;
702
795
  hierarchyRename = null;
703
- if (trimmed && item && trimmed !== item.label)
704
- callbacks.onSceneGraphRename?.({ id, name: trimmed });
796
+ if (trimmed && item && trimmed !== item.label) {
797
+ if (scope?.commandSurface === 'scene-graph') {
798
+ callbacks.onSceneGraphRename?.({ id, name: trimmed });
799
+ }
800
+ else if (scope?.commandSurface === 'prefab-composition') {
801
+ callbacks.onAssetAction?.(createPrefabNodeAssetAction(scope, 'prefab.node.rename', resolvePrefabCommandTargetId(scope, id), {
802
+ value: trimmed,
803
+ }));
804
+ }
805
+ }
705
806
  requestRender();
706
807
  }
707
808
  function openHierarchyContextMenu(event) {
@@ -720,42 +821,55 @@ export function createLocalEditorHierarchyController(options) {
720
821
  requestRender();
721
822
  return;
722
823
  }
723
- event.preventDefault();
724
- event.stopPropagation();
725
- options.onBeforeOpenContextMenu?.();
824
+ const scope = resolveScope(state);
825
+ const commandAdapter = resolveHierarchyCommandAdapter(scope);
726
826
  const model = getModel(state);
727
827
  const hierarchyButton = target.closest('[data-editor-hierarchy-id]');
728
828
  const node = model.getNode(hierarchyButton?.dataset.editorHierarchyId);
729
- if (node && !state.selectedIds.includes(node.id) && isLocalEditorHierarchyNodeSelectable(node)) {
829
+ if (node && !scope.selectedIds.includes(node.id) && isLocalEditorHierarchyNodeSelectable(node)) {
730
830
  hierarchySelectionAnchorId = node.id;
731
- callbacks.onSelectHierarchyItem?.({ id: node.id, additive: false, toggle: false });
831
+ if (scope.kind === 'prefab-stage')
832
+ callbacks.onSelectPrefabStageItem?.(node.id);
833
+ else
834
+ callbacks.onSelectHierarchyItem?.({ id: node.id, additive: false, toggle: false });
835
+ }
836
+ if (!commandAdapter.canOpenContextMenu) {
837
+ if (hadHierarchyFeedback)
838
+ requestRender();
839
+ return;
732
840
  }
841
+ event.preventDefault();
842
+ event.stopPropagation();
843
+ options.onBeforeOpenContextMenu?.();
844
+ const menuState = createScopedHierarchyMenuState(state, scope);
733
845
  const menu = node
734
846
  ? createLocalEditorHierarchyNodeMenu({
735
- state,
847
+ state: menuState,
736
848
  model,
737
849
  node,
738
850
  clipboardIds: hierarchyClipboard?.ids ?? null,
739
851
  clipboardActiveId: hierarchyClipboard?.activeId ?? null,
740
- hasDuplicateHandler: hasDuplicateHandler(),
741
- hasMoveHandler: typeof callbacks.onSceneGraphMove === 'function',
742
- hasGroupSelectionHandler: typeof callbacks.onSceneGraphGroupSelection === 'function',
852
+ ...commandAdapter.menuCapabilities,
743
853
  contextActions: options.contextActions,
744
854
  })
745
855
  : createLocalEditorHierarchyBlankMenu({
746
- state,
856
+ state: menuState,
747
857
  model,
748
858
  clipboardIds: hierarchyClipboard?.ids ?? null,
749
859
  clipboardActiveId: hierarchyClipboard?.activeId ?? null,
750
- hasDuplicateHandler: hasDuplicateHandler(),
751
- hasMoveHandler: typeof callbacks.onSceneGraphMove === 'function',
752
- hasGroupSelectionHandler: typeof callbacks.onSceneGraphGroupSelection === 'function',
860
+ ...commandAdapter.menuCapabilities,
753
861
  contextActions: options.contextActions,
754
862
  });
863
+ const menuItems = commandAdapter.filterMenuItems(menu.items);
864
+ if (menuItems.length === 0) {
865
+ if (hadHierarchyFeedback)
866
+ requestRender();
867
+ return;
868
+ }
755
869
  contextMenu.open({
756
870
  x: event.clientX,
757
871
  y: event.clientY,
758
- items: menu.items,
872
+ items: menuItems,
759
873
  onAction(item) {
760
874
  const action = menu.actions.get(item.id);
761
875
  if (action)
@@ -765,6 +879,22 @@ export function createLocalEditorHierarchyController(options) {
765
879
  if (hadHierarchyFeedback)
766
880
  requestRender();
767
881
  }
882
+ function createHierarchyMarkerFromButton() {
883
+ const state = getState();
884
+ if (!state || state.mode !== 'editor' || state.busy)
885
+ return;
886
+ const model = getModel(state);
887
+ const activeNode = model.getNode(state.activeId);
888
+ const parentId = resolveLocalEditorHierarchyCreateMarkerParentId(activeNode);
889
+ if (parentId)
890
+ expandNode(parentId);
891
+ callbacks.onSceneGraphCreateMarker?.({
892
+ parentId,
893
+ activeId: parentId ?? state.activeId ?? null,
894
+ name: 'Marker',
895
+ });
896
+ requestRender();
897
+ }
768
898
  function submitHierarchyAction(action) {
769
899
  if (action.kind === 'begin-rename') {
770
900
  beginHierarchyRename(action.targetId);
@@ -793,13 +923,25 @@ export function createLocalEditorHierarchyController(options) {
793
923
  }
794
924
  submitHierarchyContextAction(action.action);
795
925
  }
796
- function submitSelectionCommand(command) {
926
+ function createScopedHierarchyMenuState(state, scope) {
927
+ return {
928
+ ...state,
929
+ hierarchy: scope.nodes,
930
+ selectedIds: scope.selectedIds,
931
+ activeId: scope.activeId,
932
+ };
933
+ }
934
+ function submitSelectionCommand(command, state = getState() ?? undefined) {
935
+ if (state && resolveScope(state).kind !== 'scene')
936
+ return;
797
937
  callbacks.onSelectionCommand?.(command);
798
938
  }
799
939
  function openAttachPicker(targetIds, activeId) {
800
940
  const state = getState();
801
941
  if (!state || state.mode !== 'editor' || state.busy || targetIds.length === 0)
802
942
  return;
943
+ if (!resolveHierarchyCommandAdapter(resolveScope(state)).menuCapabilities.hasMoveHandler)
944
+ return;
803
945
  attachDialog.open({
804
946
  model: getModel(state),
805
947
  targetIds,
@@ -810,6 +952,11 @@ export function createLocalEditorHierarchyController(options) {
810
952
  const state = getState();
811
953
  if (!state || state.mode !== 'editor' || state.busy)
812
954
  return { ok: false, reason: 'Editor is not ready.' };
955
+ const scope = resolveScope(state);
956
+ if (scope.commandSurface === 'prefab-composition')
957
+ return submitPrefabAttachSelection(scope, selection);
958
+ if (scope.commandSurface !== 'scene-graph')
959
+ return { ok: false, reason: 'Hierarchy move pipeline is not connected yet.' };
813
960
  const ids = selection.resolution.draggedIds;
814
961
  if (ids.length === 0)
815
962
  return { ok: false, reason: 'Select one or more movable nodes first.' };
@@ -839,6 +986,31 @@ export function createLocalEditorHierarchyController(options) {
839
986
  requestRender();
840
987
  return result;
841
988
  }
989
+ function submitPrefabAttachSelection(scope, selection) {
990
+ const ids = selection.resolution.draggedIds;
991
+ if (ids.length !== 1)
992
+ return { ok: false, reason: 'Move one prefab node at a time.' };
993
+ if (selection.placement !== 'inside')
994
+ return { ok: false, reason: 'Prefab node reparent supports inside placement only.' };
995
+ if (!selection.targetId)
996
+ return { ok: false, reason: 'Select a valid prefab parent first.' };
997
+ if (!submitPrefabNodeReparent(scope, ids[0], selection.targetId)) {
998
+ return { ok: false, reason: 'Select valid prefab nodes first.' };
999
+ }
1000
+ expandNode(selection.targetId);
1001
+ requestRender();
1002
+ return { ok: true };
1003
+ }
1004
+ function submitPrefabNodeReparent(scope, hierarchyId, parentHierarchyId) {
1005
+ const nodeId = resolvePrefabCommandTargetId(scope, hierarchyId);
1006
+ const parentNodeId = resolvePrefabCommandTargetId(scope, parentHierarchyId);
1007
+ if (!nodeId || !parentNodeId)
1008
+ return false;
1009
+ callbacks.onAssetAction?.(createPrefabNodeAssetAction(scope, 'prefab.node.reparent', nodeId, {
1010
+ parentNodeId,
1011
+ }));
1012
+ return true;
1013
+ }
842
1014
  function normalizeAttachSceneGraphMoveResult(result) {
843
1015
  if (typeof result === 'boolean')
844
1016
  return { ok: result };
@@ -856,16 +1028,19 @@ export function createLocalEditorHierarchyController(options) {
856
1028
  if (hierarchyRename || hierarchyDrag || hasHierarchyDragFeedback())
857
1029
  return false;
858
1030
  const state = getState();
859
- return (state?.selectedIds.length ?? 0) > 0;
1031
+ if (!state)
1032
+ return false;
1033
+ const scope = resolveScope(state);
1034
+ return scope.kind === 'scene' && scope.selectedIds.length > 0;
860
1035
  }
861
1036
  function clearSelectionFromSearchClick(event) {
862
1037
  if (event.button !== 0 || event.shiftKey || event.metaKey || event.ctrlKey || event.altKey)
863
1038
  return;
864
1039
  const state = getState();
865
- if ((state?.selectedIds.length ?? 0) === 0)
1040
+ if (!state || resolveScope(state).kind !== 'scene' || state.selectedIds.length === 0)
866
1041
  return;
867
1042
  hierarchySelectionAnchorId = null;
868
- submitSelectionCommand({ type: 'selection.clear', label: 'Clear Selection' });
1043
+ submitSelectionCommand({ type: 'selection.clear', label: 'Clear Selection' }, state);
869
1044
  }
870
1045
  function isHierarchyShortcutScope(event) {
871
1046
  const target = event.target instanceof Node ? event.target : null;
@@ -881,8 +1056,16 @@ export function createLocalEditorHierarchyController(options) {
881
1056
  function submitHierarchyContextAction(action) {
882
1057
  if (action.action === 'rename')
883
1058
  return;
884
- if (action.action === 'create-group' || action.action === 'create-primitive')
1059
+ const scope = resolveScopeForCurrentState();
1060
+ if (scope?.commandSurface === 'prefab-composition') {
1061
+ submitPrefabHierarchyContextAction(scope, action);
1062
+ return;
1063
+ }
1064
+ if (scope?.commandSurface !== 'scene-graph')
1065
+ return;
1066
+ if (action.action === 'create-group' || action.action === 'create-primitive' || action.action === 'create-marker') {
885
1067
  expandNode(action.parentId);
1068
+ }
886
1069
  if (callbacks.onContextAction) {
887
1070
  callbacks.onContextAction(action);
888
1071
  return;
@@ -908,6 +1091,14 @@ export function createLocalEditorHierarchyController(options) {
908
1091
  name: 'Empty',
909
1092
  });
910
1093
  }
1094
+ else if (action.action === 'create-marker') {
1095
+ callbacks.onSceneGraphCreateMarker?.({
1096
+ parentId: action.parentId ?? null,
1097
+ activeId: action.activeId ?? null,
1098
+ markerType: action.markerType,
1099
+ name: action.name,
1100
+ });
1101
+ }
911
1102
  else if (action.action === 'create-primitive') {
912
1103
  callbacks.onSceneGraphCreatePrimitive?.({
913
1104
  parentId: action.parentId ?? null,
@@ -923,8 +1114,64 @@ export function createLocalEditorHierarchyController(options) {
923
1114
  });
924
1115
  }
925
1116
  }
926
- function hasDuplicateHandler() {
927
- return typeof callbacks.onSceneGraphDuplicate === 'function';
1117
+ function submitPrefabHierarchyContextAction(scope, action) {
1118
+ if (action.action === 'focus') {
1119
+ const targetId = action.activeId ?? action.targetIds[0] ?? null;
1120
+ if (targetId)
1121
+ callbacks.onSelectPrefabStageItem?.(targetId);
1122
+ return;
1123
+ }
1124
+ if (action.action === 'create-primitive') {
1125
+ if (action.parentId)
1126
+ expandNode(action.parentId);
1127
+ callbacks.onAssetAction?.(createPrefabNodeAssetAction(scope, 'prefab.node.createPrimitive', resolvePrefabCommandTargetId(scope, action.parentId ?? scope.activeId), {
1128
+ primitiveShape: action.shape,
1129
+ }));
1130
+ return;
1131
+ }
1132
+ if (action.action === 'create-group') {
1133
+ if (action.parentId)
1134
+ expandNode(action.parentId);
1135
+ callbacks.onAssetAction?.(createPrefabNodeAssetAction(scope, 'prefab.node.createGroup', resolvePrefabCommandTargetId(scope, action.parentId ?? scope.activeId), {
1136
+ value: { name: 'Empty' },
1137
+ }));
1138
+ return;
1139
+ }
1140
+ if (action.action === 'delete') {
1141
+ const nodeId = action.activeId && action.targetIds.includes(action.activeId)
1142
+ ? action.activeId
1143
+ : action.targetIds[0] ?? null;
1144
+ if (!nodeId)
1145
+ return;
1146
+ callbacks.onAssetAction?.(createPrefabNodeAssetAction(scope, 'prefab.node.delete', resolvePrefabCommandTargetId(scope, nodeId)));
1147
+ }
1148
+ }
1149
+ function resolvePrefabCommandTargetId(scope, hierarchyId) {
1150
+ if (!hierarchyId)
1151
+ return null;
1152
+ const node = scope.nodes.find(candidate => candidate.id === hierarchyId);
1153
+ return node?.commandTargetId ?? hierarchyId;
1154
+ }
1155
+ function createPrefabNodeAssetAction(scope, actionId, nodeId, extra = {}) {
1156
+ const stageAssetId = scope.scopeId.startsWith('prefab-stage:')
1157
+ ? scope.scopeId.slice('prefab-stage:'.length)
1158
+ : undefined;
1159
+ return {
1160
+ actionId,
1161
+ assetId: stageAssetId,
1162
+ browserAssetId: stageAssetId ? `prefab:${stageAssetId}` : undefined,
1163
+ assetKind: 'prefab',
1164
+ targetPrefabAssetId: stageAssetId,
1165
+ ...(nodeId ? { nodeId, parentNodeId: nodeId } : {}),
1166
+ ...extra,
1167
+ };
1168
+ }
1169
+ function resolveHierarchyCommandAdapter(scope) {
1170
+ return resolveLocalEditorHierarchyCommandAdapter(scope, {
1171
+ hasDuplicateHandler: typeof callbacks.onSceneGraphDuplicate === 'function',
1172
+ hasMoveHandler: typeof callbacks.onSceneGraphMove === 'function',
1173
+ hasGroupSelectionHandler: typeof callbacks.onSceneGraphGroupSelection === 'function',
1174
+ });
928
1175
  }
929
1176
  function resolveActiveTheme() {
930
1177
  const themed = panel.closest('.fps-editor-workbench[data-fps-editor-theme]');
@@ -935,11 +1182,18 @@ export function createLocalEditorHierarchyController(options) {
935
1182
  const state = getState();
936
1183
  const model = state ? getModel(state) : null;
937
1184
  const node = model?.getNode(id) ?? null;
938
- if (!node || node.protected || node.item.locked || node.item.renamable === false)
1185
+ if (!node || !canLocalEditorHierarchyNodeRename(node))
939
1186
  return;
940
1187
  hierarchyRename = { id, value: node.label };
941
1188
  requestRender();
942
1189
  }
1190
+ function selectSingleHierarchyItem(id) {
1191
+ const scope = resolveScopeForCurrentState();
1192
+ if (scope?.kind === 'prefab-stage')
1193
+ callbacks.onSelectPrefabStageItem?.(id);
1194
+ else
1195
+ callbacks.onSelectHierarchyItem?.({ id, additive: false, toggle: false });
1196
+ }
943
1197
  function submitResolvedDrop(resolved, targetId, placement, draggedIds) {
944
1198
  if (callbacks.onSceneGraphMove) {
945
1199
  callbacks.onSceneGraphMove({