@fps-games/editor 0.1.6-beta.1 → 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 (352) 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-bridge-transport.d.ts +95 -0
  67. package/dist/local-editor-agent-bridge-transport.d.ts.map +1 -0
  68. package/dist/local-editor-agent-bridge-transport.js +340 -0
  69. package/dist/local-editor-agent-bridge-transport.js.map +1 -0
  70. package/dist/local-editor-agent-bridge.d.ts +2 -0
  71. package/dist/local-editor-agent-bridge.d.ts.map +1 -0
  72. package/dist/local-editor-agent-bridge.js +2 -0
  73. package/dist/local-editor-agent-bridge.js.map +1 -0
  74. package/dist/local-editor-harness.d.ts +26 -2
  75. package/dist/local-editor-harness.d.ts.map +1 -1
  76. package/dist/local-editor-harness.js +773 -75
  77. package/dist/local-editor-harness.js.map +1 -1
  78. package/dist/playable-babylon-rendering.js +20 -0
  79. package/dist/playable-babylon-rendering.js.map +1 -1
  80. package/dist/playable-local-editor-host.d.ts +5 -0
  81. package/dist/playable-local-editor-host.d.ts.map +1 -1
  82. package/dist/playable-local-editor-host.js +2 -0
  83. package/dist/playable-local-editor-host.js.map +1 -1
  84. package/node_modules/@fps-games/babylon-renderer/dist/shadows/blob-shadow-system.d.ts.map +1 -1
  85. package/node_modules/@fps-games/babylon-renderer/dist/shadows/blob-shadow-system.js +6 -4
  86. package/node_modules/@fps-games/babylon-renderer/dist/shadows/blob-shadow-system.js.map +1 -1
  87. package/node_modules/@fps-games/babylon-renderer/dist/shadows/planar-shadow-shaders.d.ts.map +1 -1
  88. package/node_modules/@fps-games/babylon-renderer/dist/shadows/planar-shadow-shaders.js +103 -1
  89. package/node_modules/@fps-games/babylon-renderer/dist/shadows/planar-shadow-shaders.js.map +1 -1
  90. package/node_modules/@fps-games/babylon-renderer/dist/shadows/planar-shadow-system.d.ts.map +1 -1
  91. package/node_modules/@fps-games/babylon-renderer/dist/shadows/planar-shadow-system.js +330 -27
  92. package/node_modules/@fps-games/babylon-renderer/dist/shadows/planar-shadow-system.js.map +1 -1
  93. package/node_modules/@fps-games/babylon-renderer/dist/shadows/static-projected-shadow-artifact-system.d.ts.map +1 -1
  94. package/node_modules/@fps-games/babylon-renderer/dist/shadows/static-projected-shadow-artifact-system.js +159 -0
  95. package/node_modules/@fps-games/babylon-renderer/dist/shadows/static-projected-shadow-artifact-system.js.map +1 -1
  96. package/node_modules/@fps-games/babylon-renderer/dist/shadows/static-projected-shadow-baker.js +8 -1
  97. package/node_modules/@fps-games/babylon-renderer/dist/shadows/static-projected-shadow-baker.js.map +1 -1
  98. package/node_modules/@fps-games/babylon-renderer/dist/shadows/types.d.ts +53 -2
  99. package/node_modules/@fps-games/babylon-renderer/dist/shadows/types.d.ts.map +1 -1
  100. package/node_modules/@fps-games/babylon-renderer/dist/shadows/types.js +1 -0
  101. package/node_modules/@fps-games/babylon-renderer/dist/shadows/types.js.map +1 -1
  102. package/node_modules/@fps-games/babylon-renderer/package.json +1 -1
  103. package/node_modules/@fps-games/editor-babylon/dist/projection.d.ts +30 -0
  104. package/node_modules/@fps-games/editor-babylon/dist/projection.d.ts.map +1 -1
  105. package/node_modules/@fps-games/editor-babylon/dist/projection.js +346 -11
  106. package/node_modules/@fps-games/editor-babylon/dist/projection.js.map +1 -1
  107. package/node_modules/@fps-games/editor-babylon/dist/scene-view-camera-controller.d.ts +11 -0
  108. package/node_modules/@fps-games/editor-babylon/dist/scene-view-camera-controller.d.ts.map +1 -1
  109. package/node_modules/@fps-games/editor-babylon/dist/scene-view-camera-controller.js +113 -29
  110. package/node_modules/@fps-games/editor-babylon/dist/scene-view-camera-controller.js.map +1 -1
  111. package/node_modules/@fps-games/editor-babylon/dist/shadow-preview-controller.d.ts +13 -1
  112. package/node_modules/@fps-games/editor-babylon/dist/shadow-preview-controller.d.ts.map +1 -1
  113. package/node_modules/@fps-games/editor-babylon/dist/shadow-preview-controller.js +543 -3
  114. package/node_modules/@fps-games/editor-babylon/dist/shadow-preview-controller.js.map +1 -1
  115. package/node_modules/@fps-games/editor-babylon/package.json +5 -5
  116. package/node_modules/@fps-games/editor-browser/dist/index.d.ts +5 -2
  117. package/node_modules/@fps-games/editor-browser/dist/index.d.ts.map +1 -1
  118. package/node_modules/@fps-games/editor-browser/dist/index.js +3 -1
  119. package/node_modules/@fps-games/editor-browser/dist/index.js.map +1 -1
  120. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-context-menu.js +1 -1
  121. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-context-menu.js.map +1 -1
  122. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-actions.d.ts.map +1 -1
  123. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-actions.js +7 -9
  124. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-actions.js.map +1 -1
  125. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-attach-dialog.js +2 -2
  126. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-attach-dialog.js.map +1 -1
  127. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-command-adapter.d.ts +21 -0
  128. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-command-adapter.d.ts.map +1 -0
  129. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-command-adapter.js +75 -0
  130. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-command-adapter.js.map +1 -0
  131. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-controller.d.ts.map +1 -1
  132. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-controller.js +288 -71
  133. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-controller.js.map +1 -1
  134. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-scope.d.ts +5 -0
  135. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-scope.d.ts.map +1 -0
  136. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-scope.js +92 -0
  137. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-scope.js.map +1 -0
  138. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-tree.d.ts +3 -0
  139. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-tree.d.ts.map +1 -1
  140. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-tree.js +22 -7
  141. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-tree.js.map +1 -1
  142. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-view.d.ts +4 -0
  143. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-view.d.ts.map +1 -1
  144. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-view.js +21 -14
  145. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-view.js.map +1 -1
  146. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-prefab-stage.d.ts +19 -1
  147. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-prefab-stage.d.ts.map +1 -1
  148. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-prefab-stage.js +79 -39
  149. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-prefab-stage.js.map +1 -1
  150. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-primitives.js +2 -2
  151. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-primitives.js.map +1 -1
  152. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.d.ts +68 -1
  153. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.d.ts.map +1 -1
  154. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-workbench.d.ts +2 -0
  155. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-workbench.d.ts.map +1 -1
  156. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-workbench.js +10 -0
  157. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-workbench.js.map +1 -1
  158. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.d.ts +3 -2
  159. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.d.ts.map +1 -1
  160. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.js +401 -241
  161. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.js.map +1 -1
  162. package/node_modules/@fps-games/editor-browser/package.json +3 -3
  163. package/node_modules/@fps-games/editor-core/dist/agent-bridge.d.ts +18 -0
  164. package/node_modules/@fps-games/editor-core/dist/agent-bridge.d.ts.map +1 -0
  165. package/node_modules/@fps-games/editor-core/dist/agent-bridge.js +102 -0
  166. package/node_modules/@fps-games/editor-core/dist/agent-bridge.js.map +1 -0
  167. package/node_modules/@fps-games/editor-core/dist/index.d.ts +1 -0
  168. package/node_modules/@fps-games/editor-core/dist/index.d.ts.map +1 -1
  169. package/node_modules/@fps-games/editor-core/dist/index.js +1 -0
  170. package/node_modules/@fps-games/editor-core/dist/index.js.map +1 -1
  171. package/node_modules/@fps-games/editor-core/dist/viewport-tools.d.ts +1 -1
  172. package/node_modules/@fps-games/editor-core/dist/viewport-tools.d.ts.map +1 -1
  173. package/node_modules/@fps-games/editor-core/dist/viewport-tools.js.map +1 -1
  174. package/node_modules/@fps-games/editor-core/package.json +2 -2
  175. package/node_modules/@fps-games/editor-forge-play/package.json +2 -2
  176. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/config.d.ts +3 -0
  177. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/config.d.ts.map +1 -0
  178. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/config.js +9 -0
  179. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/config.js.map +1 -0
  180. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/generated-module.d.ts +6 -0
  181. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/generated-module.d.ts.map +1 -0
  182. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/generated-module.js +89 -0
  183. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/generated-module.js.map +1 -0
  184. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/identity.d.ts +18 -0
  185. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/identity.d.ts.map +1 -0
  186. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/identity.js +121 -0
  187. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/identity.js.map +1 -0
  188. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/index.d.ts +4 -0
  189. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/index.d.ts.map +1 -0
  190. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/index.js +3 -0
  191. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/index.js.map +1 -0
  192. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/metadata.d.ts +27 -0
  193. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/metadata.d.ts.map +1 -0
  194. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/metadata.js +782 -0
  195. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/metadata.js.map +1 -0
  196. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/node.d.ts +5 -0
  197. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/node.d.ts.map +1 -0
  198. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/node.js +5 -0
  199. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/node.js.map +1 -0
  200. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/registry.d.ts +80 -0
  201. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/registry.d.ts.map +1 -0
  202. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/registry.js +600 -0
  203. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/registry.js.map +1 -0
  204. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/types.d.ts +51 -0
  205. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/types.d.ts.map +1 -0
  206. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/types.js +2 -0
  207. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/types.js.map +1 -0
  208. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-placement/document.d.ts +0 -1
  209. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-placement/document.d.ts.map +1 -1
  210. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-placement/document.js +4 -42
  211. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-placement/document.js.map +1 -1
  212. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-placement/index.d.ts +1 -1
  213. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-placement/index.d.ts.map +1 -1
  214. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-placement/index.js +1 -1
  215. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-placement/index.js.map +1 -1
  216. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-placement/placement.d.ts.map +1 -1
  217. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-placement/placement.js +2 -1
  218. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-placement/placement.js.map +1 -1
  219. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-placement/types.d.ts +3 -0
  220. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-placement/types.d.ts.map +1 -1
  221. package/node_modules/@fps-games/editor-playable-sdk/dist/document/helpers.d.ts +42 -2
  222. package/node_modules/@fps-games/editor-playable-sdk/dist/document/helpers.d.ts.map +1 -1
  223. package/node_modules/@fps-games/editor-playable-sdk/dist/document/helpers.js +612 -8
  224. package/node_modules/@fps-games/editor-playable-sdk/dist/document/helpers.js.map +1 -1
  225. package/node_modules/@fps-games/editor-playable-sdk/dist/document/types.d.ts +42 -0
  226. package/node_modules/@fps-games/editor-playable-sdk/dist/document/types.d.ts.map +1 -1
  227. package/node_modules/@fps-games/editor-playable-sdk/dist/field-schema/index.d.ts +1 -1
  228. package/node_modules/@fps-games/editor-playable-sdk/dist/field-schema/index.d.ts.map +1 -1
  229. package/node_modules/@fps-games/editor-playable-sdk/dist/field-schema/index.js +1 -1
  230. package/node_modules/@fps-games/editor-playable-sdk/dist/field-schema/index.js.map +1 -1
  231. package/node_modules/@fps-games/editor-playable-sdk/dist/field-schema/schema.d.ts.map +1 -1
  232. package/node_modules/@fps-games/editor-playable-sdk/dist/field-schema/schema.js +16 -9
  233. package/node_modules/@fps-games/editor-playable-sdk/dist/field-schema/schema.js.map +1 -1
  234. package/node_modules/@fps-games/editor-playable-sdk/dist/field-schema/validators.d.ts +5 -0
  235. package/node_modules/@fps-games/editor-playable-sdk/dist/field-schema/validators.d.ts.map +1 -1
  236. package/node_modules/@fps-games/editor-playable-sdk/dist/field-schema/validators.js +28 -0
  237. package/node_modules/@fps-games/editor-playable-sdk/dist/field-schema/validators.js.map +1 -1
  238. package/node_modules/@fps-games/editor-playable-sdk/dist/index.d.ts +3 -0
  239. package/node_modules/@fps-games/editor-playable-sdk/dist/index.d.ts.map +1 -1
  240. package/node_modules/@fps-games/editor-playable-sdk/dist/index.js +3 -0
  241. package/node_modules/@fps-games/editor-playable-sdk/dist/index.js.map +1 -1
  242. package/node_modules/@fps-games/editor-playable-sdk/dist/inspector/document-sections.d.ts +82 -2
  243. package/node_modules/@fps-games/editor-playable-sdk/dist/inspector/document-sections.d.ts.map +1 -1
  244. package/node_modules/@fps-games/editor-playable-sdk/dist/inspector/document-sections.js +396 -22
  245. package/node_modules/@fps-games/editor-playable-sdk/dist/inspector/document-sections.js.map +1 -1
  246. package/node_modules/@fps-games/editor-playable-sdk/dist/inspector/index.d.ts +1 -1
  247. package/node_modules/@fps-games/editor-playable-sdk/dist/inspector/index.d.ts.map +1 -1
  248. package/node_modules/@fps-games/editor-playable-sdk/dist/inspector/index.js +1 -1
  249. package/node_modules/@fps-games/editor-playable-sdk/dist/inspector/index.js.map +1 -1
  250. package/node_modules/@fps-games/editor-playable-sdk/dist/inspector/validation.d.ts.map +1 -1
  251. package/node_modules/@fps-games/editor-playable-sdk/dist/inspector/validation.js +0 -3
  252. package/node_modules/@fps-games/editor-playable-sdk/dist/inspector/validation.js.map +1 -1
  253. package/node_modules/@fps-games/editor-playable-sdk/dist/lighting-debug/math.d.ts +29 -1
  254. package/node_modules/@fps-games/editor-playable-sdk/dist/lighting-debug/math.d.ts.map +1 -1
  255. package/node_modules/@fps-games/editor-playable-sdk/dist/lighting-debug/math.js +143 -0
  256. package/node_modules/@fps-games/editor-playable-sdk/dist/lighting-debug/math.js.map +1 -1
  257. package/node_modules/@fps-games/editor-playable-sdk/dist/mutation/field-patch.d.ts.map +1 -1
  258. package/node_modules/@fps-games/editor-playable-sdk/dist/mutation/field-patch.js +99 -11
  259. package/node_modules/@fps-games/editor-playable-sdk/dist/mutation/field-patch.js.map +1 -1
  260. package/node_modules/@fps-games/editor-playable-sdk/dist/mutation/reducer.d.ts.map +1 -1
  261. package/node_modules/@fps-games/editor-playable-sdk/dist/mutation/reducer.js +4 -1
  262. package/node_modules/@fps-games/editor-playable-sdk/dist/mutation/reducer.js.map +1 -1
  263. package/node_modules/@fps-games/editor-playable-sdk/dist/mutation/transform.d.ts.map +1 -1
  264. package/node_modules/@fps-games/editor-playable-sdk/dist/mutation/transform.js +19 -1
  265. package/node_modules/@fps-games/editor-playable-sdk/dist/mutation/transform.js.map +1 -1
  266. package/node_modules/@fps-games/editor-playable-sdk/dist/rendering-profile/panel.d.ts.map +1 -1
  267. package/node_modules/@fps-games/editor-playable-sdk/dist/rendering-profile/panel.js +19 -3
  268. package/node_modules/@fps-games/editor-playable-sdk/dist/rendering-profile/panel.js.map +1 -1
  269. package/node_modules/@fps-games/editor-playable-sdk/dist/runtime-preview/assets.d.ts +1 -2
  270. package/node_modules/@fps-games/editor-playable-sdk/dist/runtime-preview/assets.d.ts.map +1 -1
  271. package/node_modules/@fps-games/editor-playable-sdk/dist/runtime-preview/assets.js +0 -14
  272. package/node_modules/@fps-games/editor-playable-sdk/dist/runtime-preview/assets.js.map +1 -1
  273. package/node_modules/@fps-games/editor-playable-sdk/dist/runtime-preview/import-plan.d.ts +1 -7
  274. package/node_modules/@fps-games/editor-playable-sdk/dist/runtime-preview/import-plan.d.ts.map +1 -1
  275. package/node_modules/@fps-games/editor-playable-sdk/dist/runtime-preview/import-plan.js +3 -32
  276. package/node_modules/@fps-games/editor-playable-sdk/dist/runtime-preview/import-plan.js.map +1 -1
  277. package/node_modules/@fps-games/editor-playable-sdk/dist/runtime-preview/nodes.d.ts.map +1 -1
  278. package/node_modules/@fps-games/editor-playable-sdk/dist/runtime-preview/nodes.js +16 -32
  279. package/node_modules/@fps-games/editor-playable-sdk/dist/runtime-preview/nodes.js.map +1 -1
  280. package/node_modules/@fps-games/editor-playable-sdk/dist/runtime-preview/types.d.ts +5 -22
  281. package/node_modules/@fps-games/editor-playable-sdk/dist/runtime-preview/types.d.ts.map +1 -1
  282. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-compiler/compiler.d.ts +5 -0
  283. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-compiler/compiler.d.ts.map +1 -0
  284. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-compiler/compiler.js +996 -0
  285. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-compiler/compiler.js.map +1 -0
  286. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-compiler/index.d.ts +3 -0
  287. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-compiler/index.d.ts.map +1 -0
  288. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-compiler/index.js +3 -0
  289. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-compiler/index.js.map +1 -0
  290. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-compiler/types.d.ts +152 -0
  291. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-compiler/types.d.ts.map +1 -0
  292. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-compiler/types.js +2 -0
  293. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-compiler/types.js.map +1 -0
  294. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/protocol.d.ts.map +1 -1
  295. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/protocol.js +4 -0
  296. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/protocol.js.map +1 -1
  297. package/node_modules/@fps-games/editor-playable-sdk/dist/serialized-property/descriptors.d.ts.map +1 -1
  298. package/node_modules/@fps-games/editor-playable-sdk/dist/serialized-property/descriptors.js +224 -12
  299. package/node_modules/@fps-games/editor-playable-sdk/dist/serialized-property/descriptors.js.map +1 -1
  300. package/node_modules/@fps-games/editor-playable-sdk/dist/serialized-property/inspector.d.ts.map +1 -1
  301. package/node_modules/@fps-games/editor-playable-sdk/dist/serialized-property/inspector.js +158 -50
  302. package/node_modules/@fps-games/editor-playable-sdk/dist/serialized-property/inspector.js.map +1 -1
  303. package/node_modules/@fps-games/editor-playable-sdk/dist/serialized-property/patch.d.ts.map +1 -1
  304. package/node_modules/@fps-games/editor-playable-sdk/dist/serialized-property/patch.js +45 -1
  305. package/node_modules/@fps-games/editor-playable-sdk/dist/serialized-property/patch.js.map +1 -1
  306. package/node_modules/@fps-games/editor-playable-sdk/dist/shadow-system/index.d.ts +5 -0
  307. package/node_modules/@fps-games/editor-playable-sdk/dist/shadow-system/index.d.ts.map +1 -0
  308. package/node_modules/@fps-games/editor-playable-sdk/dist/shadow-system/index.js +5 -0
  309. package/node_modules/@fps-games/editor-playable-sdk/dist/shadow-system/index.js.map +1 -0
  310. package/node_modules/@fps-games/editor-playable-sdk/dist/shadow-system/legacy.d.ts +21 -0
  311. package/node_modules/@fps-games/editor-playable-sdk/dist/shadow-system/legacy.d.ts.map +1 -0
  312. package/node_modules/@fps-games/editor-playable-sdk/dist/shadow-system/legacy.js +158 -0
  313. package/node_modules/@fps-games/editor-playable-sdk/dist/shadow-system/legacy.js.map +1 -0
  314. package/node_modules/@fps-games/editor-playable-sdk/dist/shadow-system/quality.d.ts +5 -0
  315. package/node_modules/@fps-games/editor-playable-sdk/dist/shadow-system/quality.d.ts.map +1 -0
  316. package/node_modules/@fps-games/editor-playable-sdk/dist/shadow-system/quality.js +83 -0
  317. package/node_modules/@fps-games/editor-playable-sdk/dist/shadow-system/quality.js.map +1 -0
  318. package/node_modules/@fps-games/editor-playable-sdk/dist/shadow-system/resolver.d.ts +35 -0
  319. package/node_modules/@fps-games/editor-playable-sdk/dist/shadow-system/resolver.d.ts.map +1 -0
  320. package/node_modules/@fps-games/editor-playable-sdk/dist/shadow-system/resolver.js +363 -0
  321. package/node_modules/@fps-games/editor-playable-sdk/dist/shadow-system/resolver.js.map +1 -0
  322. package/node_modules/@fps-games/editor-playable-sdk/dist/shadow-system/types.d.ts +105 -0
  323. package/node_modules/@fps-games/editor-playable-sdk/dist/shadow-system/types.d.ts.map +1 -0
  324. package/node_modules/@fps-games/editor-playable-sdk/dist/shadow-system/types.js +6 -0
  325. package/node_modules/@fps-games/editor-playable-sdk/dist/shadow-system/types.js.map +1 -0
  326. package/node_modules/@fps-games/editor-playable-sdk/dist/static-shadows/artifact.d.ts +3 -0
  327. package/node_modules/@fps-games/editor-playable-sdk/dist/static-shadows/artifact.d.ts.map +1 -1
  328. package/node_modules/@fps-games/editor-playable-sdk/dist/static-shadows/artifact.js +44 -0
  329. package/node_modules/@fps-games/editor-playable-sdk/dist/static-shadows/artifact.js.map +1 -1
  330. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/asset-authoring.d.ts +26 -0
  331. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/asset-authoring.d.ts.map +1 -0
  332. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/asset-authoring.js +105 -0
  333. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/asset-authoring.js.map +1 -0
  334. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.d.ts +3 -0
  335. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.d.ts.map +1 -1
  336. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.js +3 -0
  337. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.js.map +1 -1
  338. package/node_modules/@fps-games/editor-playable-sdk/package.json +3 -3
  339. package/node_modules/@fps-games/editor-protocol/dist/agent-bridge.d.ts +1127 -0
  340. package/node_modules/@fps-games/editor-protocol/dist/agent-bridge.d.ts.map +1 -0
  341. package/node_modules/@fps-games/editor-protocol/dist/agent-bridge.js +2180 -0
  342. package/node_modules/@fps-games/editor-protocol/dist/agent-bridge.js.map +1 -0
  343. package/node_modules/@fps-games/editor-protocol/dist/agent-trace.d.ts +68 -0
  344. package/node_modules/@fps-games/editor-protocol/dist/agent-trace.d.ts.map +1 -0
  345. package/node_modules/@fps-games/editor-protocol/dist/agent-trace.js +23 -0
  346. package/node_modules/@fps-games/editor-protocol/dist/agent-trace.js.map +1 -0
  347. package/node_modules/@fps-games/editor-protocol/dist/index.d.ts +2 -0
  348. package/node_modules/@fps-games/editor-protocol/dist/index.d.ts.map +1 -1
  349. package/node_modules/@fps-games/editor-protocol/dist/index.js +2 -0
  350. package/node_modules/@fps-games/editor-protocol/dist/index.js.map +1 -1
  351. package/node_modules/@fps-games/editor-protocol/package.json +1 -1
  352. package/package.json +8 -8
@@ -1,9 +1,11 @@
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;
@@ -14,7 +16,8 @@ export function resolveLocalEditorHierarchyCreateMarkerParentId(activeNode) {
14
16
  }
15
17
  export function createLocalEditorHierarchyController(options) {
16
18
  const { doc, panel, callbacks, inputRouter, contextMenu, getState, requestRender } = options;
17
- const collapsedIds = new Set();
19
+ const collapsedIdsByScope = new Map();
20
+ const hierarchySearchByScope = new Map();
18
21
  let hierarchyRename = null;
19
22
  let hierarchyDrag = null;
20
23
  let hierarchyDrop = null;
@@ -22,10 +25,10 @@ export function createLocalEditorHierarchyController(options) {
22
25
  const hierarchyDragSession = createLocalEditorStructuredDragSession();
23
26
  let hierarchyShortcutScopeActive = false;
24
27
  let hierarchyClipboard = null;
25
- let hierarchySearch = '';
26
28
  let hierarchySearchComposing = false;
27
29
  let currentModel = null;
28
30
  let lastRenderedActiveId;
31
+ let lastRenderedScopeId;
29
32
  let pendingHierarchyScrollId = null;
30
33
  let hierarchySelectionAnchorId = null;
31
34
  const attachDialog = createLocalEditorHierarchyAttachDialog({
@@ -45,15 +48,18 @@ export function createLocalEditorHierarchyController(options) {
45
48
  return currentModel;
46
49
  };
47
50
  const render = (state) => {
48
- 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))
49
54
  hierarchyRename = null;
50
- const activeIdChanged = state.activeId !== lastRenderedActiveId;
55
+ const scopeChanged = scope.scopeId !== lastRenderedScopeId;
56
+ const activeIdChanged = scope.activeId !== lastRenderedActiveId || scopeChanged;
51
57
  const treeScrollSnapshot = treeViewportReveal.captureScrollSnapshot();
52
58
  if (activeIdChanged) {
53
59
  pendingHierarchyScrollId = null;
54
- expandActiveHierarchyPath(state);
60
+ expandActiveHierarchyPath(state, scope);
55
61
  }
56
- currentModel = createModel(state);
62
+ currentModel = createModel(state, scope);
57
63
  if (hierarchySelectionAnchorId && !currentModel.getNode(hierarchySelectionAnchorId)) {
58
64
  hierarchySelectionAnchorId = null;
59
65
  }
@@ -63,16 +69,21 @@ export function createLocalEditorHierarchyController(options) {
63
69
  drop: hierarchyDrop,
64
70
  dropPreview: hierarchyDragSession.preview,
65
71
  rootDrop: hierarchyRootDrop,
66
- searchQuery: hierarchySearch,
72
+ searchQuery: getScopeSearch(scope.scopeId),
73
+ title: scope.title,
74
+ searchPlaceholder: scope.searchPlaceholder,
75
+ showCreateGroup: commandAdapter.showCreateGroupToolbar,
76
+ showCreateMarker: commandAdapter.kind === 'scene',
67
77
  });
68
78
  treeViewportReveal.restoreScrollSnapshot(treeScrollSnapshot);
69
- const suppressActiveScroll = state.activeId
70
- ? treeViewportReveal.consumeRevealSuppression(state.activeId, { clearWhenDifferent: activeIdChanged })
79
+ const suppressActiveScroll = scope.activeId
80
+ ? treeViewportReveal.consumeRevealSuppression(scope.activeId, { clearWhenDifferent: activeIdChanged })
71
81
  : false;
72
- if (activeIdChanged && state.activeId && !suppressActiveScroll && shouldAutoScrollActiveHierarchyNode()) {
73
- scheduleActiveHierarchyScroll(state.activeId);
82
+ if (activeIdChanged && scope.activeId && !suppressActiveScroll && shouldAutoScrollActiveHierarchyNode()) {
83
+ scheduleActiveHierarchyScroll(scope.activeId);
74
84
  }
75
- lastRenderedActiveId = state.activeId;
85
+ lastRenderedActiveId = scope.activeId;
86
+ lastRenderedScopeId = scope.scopeId;
76
87
  };
77
88
  const onClick = (event) => {
78
89
  const target = event.target instanceof HTMLElement ? event.target : null;
@@ -100,7 +111,9 @@ export function createLocalEditorHierarchyController(options) {
100
111
  const createGroupButton = target?.closest('[data-editor-hierarchy-create-group]');
101
112
  if (createGroupButton) {
102
113
  const state = getState();
103
- const parentId = state?.activeId ?? null;
114
+ if (!state || resolveScope(state).commandSurface !== 'scene-graph')
115
+ return;
116
+ const parentId = state.activeId ?? null;
104
117
  if (parentId)
105
118
  expandNode(parentId);
106
119
  callbacks.onSceneGraphCreateGroup?.({
@@ -131,7 +144,7 @@ export function createLocalEditorHierarchyController(options) {
131
144
  if (shouldClearSelectionFromBlankClick(event, target)) {
132
145
  event.preventDefault();
133
146
  hierarchySelectionAnchorId = null;
134
- submitSelectionCommand({ type: 'selection.clear', label: 'Clear Selection' });
147
+ submitSelectionCommand({ type: 'selection.clear', label: 'Clear Selection' }, getState() ?? undefined);
135
148
  }
136
149
  };
137
150
  const onContextMenu = (event) => {
@@ -154,13 +167,15 @@ export function createLocalEditorHierarchyController(options) {
154
167
  event.preventDefault();
155
168
  event.stopPropagation();
156
169
  hierarchySelectionAnchorId = id;
157
- callbacks.onSelectHierarchyItem?.({ id, additive: false, toggle: false });
158
- callbacks.onFocusSelection?.();
170
+ selectSingleHierarchyItem(id);
171
+ if (resolveScopeForCurrentState()?.kind === 'scene')
172
+ callbacks.onFocusSelection?.();
159
173
  };
160
174
  const onInput = (event) => {
161
175
  const input = event.target instanceof HTMLInputElement ? event.target : null;
162
176
  if (input?.dataset.editorHierarchySearch != null) {
163
- hierarchySearch = input.value;
177
+ const scopeId = resolveScopeForCurrentState()?.scopeId ?? 'scene';
178
+ hierarchySearchByScope.set(scopeId, input.value);
164
179
  if (!hierarchySearchComposing && !isComposingInputEvent(event))
165
180
  requestRender();
166
181
  return;
@@ -177,10 +192,11 @@ export function createLocalEditorHierarchyController(options) {
177
192
  if (input?.dataset.editorHierarchySearch != null) {
178
193
  if (event.isComposing || hierarchySearchComposing)
179
194
  return;
180
- if (event.key !== 'Escape' || hierarchySearch.length === 0)
195
+ const scopeId = resolveScopeForCurrentState()?.scopeId ?? 'scene';
196
+ if (event.key !== 'Escape' || getScopeSearch(scopeId).length === 0)
181
197
  return;
182
198
  event.preventDefault();
183
- hierarchySearch = '';
199
+ hierarchySearchByScope.set(scopeId, '');
184
200
  requestRender();
185
201
  return;
186
202
  }
@@ -208,7 +224,8 @@ export function createLocalEditorHierarchyController(options) {
208
224
  if (input?.dataset.editorHierarchySearch == null)
209
225
  return;
210
226
  hierarchySearchComposing = false;
211
- hierarchySearch = input.value;
227
+ const scopeId = resolveScopeForCurrentState()?.scopeId ?? 'scene';
228
+ hierarchySearchByScope.set(scopeId, input.value);
212
229
  requestRender();
213
230
  };
214
231
  const onFocusOut = (event) => {
@@ -224,6 +241,10 @@ export function createLocalEditorHierarchyController(options) {
224
241
  const id = button?.dataset.editorHierarchyId;
225
242
  if (!id || !state)
226
243
  return;
244
+ if (!resolveHierarchyCommandAdapter(resolveScope(state)).menuCapabilities.hasMoveHandler) {
245
+ event.preventDefault();
246
+ return;
247
+ }
227
248
  const model = getModel(state);
228
249
  const node = model.getNode(id);
229
250
  if (!isLocalEditorHierarchyNodeMovable(node)) {
@@ -244,6 +265,10 @@ export function createLocalEditorHierarchyController(options) {
244
265
  clearHierarchyDragFeedbackAndRender();
245
266
  return;
246
267
  }
268
+ if (!resolveHierarchyCommandAdapter(resolveScope(state)).menuCapabilities.hasMoveHandler) {
269
+ clearHierarchyDragFeedbackAndRender();
270
+ return;
271
+ }
247
272
  const model = getModel(state);
248
273
  if (!isInsideHierarchyTreeViewport(target)) {
249
274
  clearHierarchyDragFeedbackAndRender();
@@ -309,6 +334,11 @@ export function createLocalEditorHierarchyController(options) {
309
334
  clearHierarchyDragFeedbackAndRender();
310
335
  return;
311
336
  }
337
+ const scope = resolveScope(state);
338
+ if (!resolveHierarchyCommandAdapter(scope).menuCapabilities.hasMoveHandler) {
339
+ clearHierarchyDragFeedbackAndRender();
340
+ return;
341
+ }
312
342
  const model = getModel(state);
313
343
  if (!isInsideHierarchyTreeViewport(target)) {
314
344
  clearHierarchyDragFeedbackAndRender();
@@ -323,6 +353,10 @@ export function createLocalEditorHierarchyController(options) {
323
353
  hierarchyDrag = null;
324
354
  clearHierarchyDragFeedback();
325
355
  if (operation.slot.placement === 'root') {
356
+ if (scope.commandSurface === 'prefab-composition') {
357
+ requestRender();
358
+ return;
359
+ }
326
360
  submitResolvedRootDrop(operation.resolution);
327
361
  return;
328
362
  }
@@ -332,6 +366,15 @@ export function createLocalEditorHierarchyController(options) {
332
366
  return;
333
367
  }
334
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
+ }
335
378
  submitResolvedDrop(operation.resolution, targetId, operation.slot.placement, draggedIds);
336
379
  };
337
380
  panel.addEventListener('click', onClick);
@@ -381,11 +424,14 @@ export function createLocalEditorHierarchyController(options) {
381
424
  const state = getState();
382
425
  if (!state)
383
426
  return false;
427
+ const scope = resolveScope(state);
428
+ if (scope.kind !== 'scene')
429
+ return false;
430
+ const commandAdapter = resolveHierarchyCommandAdapter(scope);
384
431
  const action = createLocalEditorHierarchyDeleteShortcutAction({
385
432
  state,
386
433
  model: getModel(state),
387
- hasDuplicateHandler: hasDuplicateHandler(),
388
- hasGroupSelectionHandler: typeof callbacks.onSceneGraphGroupSelection === 'function',
434
+ ...commandAdapter.menuCapabilities,
389
435
  });
390
436
  if (!action)
391
437
  return false;
@@ -404,13 +450,16 @@ export function createLocalEditorHierarchyController(options) {
404
450
  const state = getState();
405
451
  if (!state)
406
452
  return false;
453
+ const scope = resolveScope(state);
454
+ if (scope.kind !== 'scene')
455
+ return false;
456
+ const commandAdapter = resolveHierarchyCommandAdapter(scope);
407
457
  const input = {
408
458
  state,
409
459
  model: getModel(state),
410
460
  clipboardIds: hierarchyClipboard?.ids ?? null,
411
461
  clipboardActiveId: hierarchyClipboard?.activeId ?? null,
412
- hasDuplicateHandler: hasDuplicateHandler(),
413
- hasGroupSelectionHandler: typeof callbacks.onSceneGraphGroupSelection === 'function',
462
+ ...commandAdapter.menuCapabilities,
414
463
  };
415
464
  const action = key === 'd'
416
465
  ? createLocalEditorHierarchyDuplicateShortcutAction(input)
@@ -430,13 +479,34 @@ export function createLocalEditorHierarchyController(options) {
430
479
  function isComposingInputEvent(event) {
431
480
  return event.isComposing === true;
432
481
  }
433
- function createModel(state) {
434
- return createLocalEditorHierarchyTreeModel(state.hierarchy, state.selectedIds, state.activeId, {
435
- 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),
436
503
  defaultExpanded: true,
437
504
  });
438
505
  }
439
506
  function selectHierarchyItemFromClick(id, event) {
507
+ const scope = resolveScopeForCurrentState();
508
+ if (!scope)
509
+ return;
440
510
  const toggle = event.metaKey || event.ctrlKey;
441
511
  const range = event.shiftKey && !toggle;
442
512
  if (range) {
@@ -444,11 +514,10 @@ export function createLocalEditorHierarchyController(options) {
444
514
  return;
445
515
  }
446
516
  hierarchySelectionAnchorId = id;
447
- callbacks.onSelectHierarchyItem?.({
448
- id,
449
- additive: false,
450
- toggle,
451
- });
517
+ if (scope.kind === 'prefab-stage')
518
+ callbacks.onSelectPrefabStageItem?.(id);
519
+ else
520
+ callbacks.onSelectHierarchyItem?.({ id, additive: false, toggle });
452
521
  }
453
522
  function toggleHierarchyItemEnabled(id, toggle) {
454
523
  if (toggle.dataset.editorHierarchyEnabledToggleDisabled === 'true')
@@ -456,10 +525,10 @@ export function createLocalEditorHierarchyController(options) {
456
525
  const state = getState();
457
526
  if (!state)
458
527
  return;
459
- const node = getModel(state).getNode(id);
460
- if (!node || typeof node.item.enabled !== 'boolean')
528
+ if (resolveScope(state).commandSurface !== 'scene-graph')
461
529
  return;
462
- if (node.item.canToggleEnabled === false || node.item.locked === true || node.protected)
530
+ const node = getModel(state).getNode(id);
531
+ if (!node || !canLocalEditorHierarchyNodeToggleEnabled(node))
463
532
  return;
464
533
  const directEnabled = typeof node.item.directEnabled === 'boolean'
465
534
  ? node.item.directEnabled
@@ -472,16 +541,22 @@ export function createLocalEditorHierarchyController(options) {
472
541
  function selectHierarchyVisibleRange(targetId) {
473
542
  const state = getState();
474
543
  if (!state) {
475
- callbacks.onSelectHierarchyItem?.({ id: targetId, additive: false, toggle: false });
544
+ selectSingleHierarchyItem(targetId);
476
545
  hierarchySelectionAnchorId = targetId;
477
546
  return;
478
547
  }
548
+ const scope = resolveScope(state);
549
+ if (scope.kind !== 'scene') {
550
+ hierarchySelectionAnchorId = targetId;
551
+ callbacks.onSelectPrefabStageItem?.(targetId);
552
+ return;
553
+ }
479
554
  const model = getModel(state);
480
- const anchorId = hierarchySelectionAnchorId ?? state.activeId ?? targetId;
555
+ const anchorId = hierarchySelectionAnchorId ?? scope.activeId ?? targetId;
481
556
  const selectedIds = model.getVisibleRangeSelection(anchorId, targetId);
482
557
  if (selectedIds.length === 0) {
483
558
  hierarchySelectionAnchorId = targetId;
484
- callbacks.onSelectHierarchyItem?.({ id: targetId, additive: false, toggle: false });
559
+ selectSingleHierarchyItem(targetId);
485
560
  return;
486
561
  }
487
562
  const activeId = selectedIds.includes(targetId)
@@ -492,10 +567,11 @@ export function createLocalEditorHierarchyController(options) {
492
567
  label: 'Select Hierarchy Range',
493
568
  selectedIds,
494
569
  activeId,
495
- });
570
+ }, state);
496
571
  }
497
572
  function resolveDraggedIds(state, model, draggedId) {
498
- const selectedIds = state.selectedIds.includes(draggedId) ? state.selectedIds : [draggedId];
573
+ const scope = resolveScope(state);
574
+ const selectedIds = scope.selectedIds.includes(draggedId) ? scope.selectedIds : [draggedId];
499
575
  return model.getTopLevelSelection(selectedIds);
500
576
  }
501
577
  function readDraggedIds(event) {
@@ -515,6 +591,8 @@ export function createLocalEditorHierarchyController(options) {
515
591
  requestRender();
516
592
  }
517
593
  function toggleExpanded(id) {
594
+ const scope = resolveScopeForCurrentState();
595
+ const collapsedIds = getScopeCollapsedIds(scope?.scopeId ?? 'scene');
518
596
  if (collapsedIds.has(id))
519
597
  collapsedIds.delete(id);
520
598
  else
@@ -524,15 +602,17 @@ export function createLocalEditorHierarchyController(options) {
524
602
  function expandNode(id) {
525
603
  if (!id)
526
604
  return;
527
- collapsedIds.delete(id);
605
+ const scope = resolveScopeForCurrentState();
606
+ getScopeCollapsedIds(scope?.scopeId ?? 'scene').delete(id);
528
607
  }
529
- function expandActiveHierarchyPath(state) {
530
- if (!state.activeId)
608
+ function expandActiveHierarchyPath(state, scope = resolveScope(state)) {
609
+ if (!scope.activeId)
531
610
  return;
532
- const model = createModel(state);
533
- if (!model.getNode(state.activeId))
611
+ const model = createModel(state, scope);
612
+ if (!model.getNode(scope.activeId))
534
613
  return;
535
- for (const ancestor of model.getAncestors(state.activeId)) {
614
+ const collapsedIds = getScopeCollapsedIds(scope.scopeId);
615
+ for (const ancestor of model.getAncestors(scope.activeId)) {
536
616
  collapsedIds.delete(ancestor.id);
537
617
  }
538
618
  }
@@ -710,10 +790,19 @@ export function createLocalEditorHierarchyController(options) {
710
790
  return;
711
791
  const trimmed = value.trim();
712
792
  const state = getState();
713
- 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;
714
795
  hierarchyRename = null;
715
- if (trimmed && item && trimmed !== item.label)
716
- 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
+ }
717
806
  requestRender();
718
807
  }
719
808
  function openHierarchyContextMenu(event) {
@@ -732,42 +821,55 @@ export function createLocalEditorHierarchyController(options) {
732
821
  requestRender();
733
822
  return;
734
823
  }
735
- event.preventDefault();
736
- event.stopPropagation();
737
- options.onBeforeOpenContextMenu?.();
824
+ const scope = resolveScope(state);
825
+ const commandAdapter = resolveHierarchyCommandAdapter(scope);
738
826
  const model = getModel(state);
739
827
  const hierarchyButton = target.closest('[data-editor-hierarchy-id]');
740
828
  const node = model.getNode(hierarchyButton?.dataset.editorHierarchyId);
741
- if (node && !state.selectedIds.includes(node.id) && isLocalEditorHierarchyNodeSelectable(node)) {
829
+ if (node && !scope.selectedIds.includes(node.id) && isLocalEditorHierarchyNodeSelectable(node)) {
742
830
  hierarchySelectionAnchorId = node.id;
743
- 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;
744
840
  }
841
+ event.preventDefault();
842
+ event.stopPropagation();
843
+ options.onBeforeOpenContextMenu?.();
844
+ const menuState = createScopedHierarchyMenuState(state, scope);
745
845
  const menu = node
746
846
  ? createLocalEditorHierarchyNodeMenu({
747
- state,
847
+ state: menuState,
748
848
  model,
749
849
  node,
750
850
  clipboardIds: hierarchyClipboard?.ids ?? null,
751
851
  clipboardActiveId: hierarchyClipboard?.activeId ?? null,
752
- hasDuplicateHandler: hasDuplicateHandler(),
753
- hasMoveHandler: typeof callbacks.onSceneGraphMove === 'function',
754
- hasGroupSelectionHandler: typeof callbacks.onSceneGraphGroupSelection === 'function',
852
+ ...commandAdapter.menuCapabilities,
755
853
  contextActions: options.contextActions,
756
854
  })
757
855
  : createLocalEditorHierarchyBlankMenu({
758
- state,
856
+ state: menuState,
759
857
  model,
760
858
  clipboardIds: hierarchyClipboard?.ids ?? null,
761
859
  clipboardActiveId: hierarchyClipboard?.activeId ?? null,
762
- hasDuplicateHandler: hasDuplicateHandler(),
763
- hasMoveHandler: typeof callbacks.onSceneGraphMove === 'function',
764
- hasGroupSelectionHandler: typeof callbacks.onSceneGraphGroupSelection === 'function',
860
+ ...commandAdapter.menuCapabilities,
765
861
  contextActions: options.contextActions,
766
862
  });
863
+ const menuItems = commandAdapter.filterMenuItems(menu.items);
864
+ if (menuItems.length === 0) {
865
+ if (hadHierarchyFeedback)
866
+ requestRender();
867
+ return;
868
+ }
767
869
  contextMenu.open({
768
870
  x: event.clientX,
769
871
  y: event.clientY,
770
- items: menu.items,
872
+ items: menuItems,
771
873
  onAction(item) {
772
874
  const action = menu.actions.get(item.id);
773
875
  if (action)
@@ -821,13 +923,25 @@ export function createLocalEditorHierarchyController(options) {
821
923
  }
822
924
  submitHierarchyContextAction(action.action);
823
925
  }
824
- 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;
825
937
  callbacks.onSelectionCommand?.(command);
826
938
  }
827
939
  function openAttachPicker(targetIds, activeId) {
828
940
  const state = getState();
829
941
  if (!state || state.mode !== 'editor' || state.busy || targetIds.length === 0)
830
942
  return;
943
+ if (!resolveHierarchyCommandAdapter(resolveScope(state)).menuCapabilities.hasMoveHandler)
944
+ return;
831
945
  attachDialog.open({
832
946
  model: getModel(state),
833
947
  targetIds,
@@ -838,6 +952,11 @@ export function createLocalEditorHierarchyController(options) {
838
952
  const state = getState();
839
953
  if (!state || state.mode !== 'editor' || state.busy)
840
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.' };
841
960
  const ids = selection.resolution.draggedIds;
842
961
  if (ids.length === 0)
843
962
  return { ok: false, reason: 'Select one or more movable nodes first.' };
@@ -867,6 +986,31 @@ export function createLocalEditorHierarchyController(options) {
867
986
  requestRender();
868
987
  return result;
869
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
+ }
870
1014
  function normalizeAttachSceneGraphMoveResult(result) {
871
1015
  if (typeof result === 'boolean')
872
1016
  return { ok: result };
@@ -884,16 +1028,19 @@ export function createLocalEditorHierarchyController(options) {
884
1028
  if (hierarchyRename || hierarchyDrag || hasHierarchyDragFeedback())
885
1029
  return false;
886
1030
  const state = getState();
887
- 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;
888
1035
  }
889
1036
  function clearSelectionFromSearchClick(event) {
890
1037
  if (event.button !== 0 || event.shiftKey || event.metaKey || event.ctrlKey || event.altKey)
891
1038
  return;
892
1039
  const state = getState();
893
- if ((state?.selectedIds.length ?? 0) === 0)
1040
+ if (!state || resolveScope(state).kind !== 'scene' || state.selectedIds.length === 0)
894
1041
  return;
895
1042
  hierarchySelectionAnchorId = null;
896
- submitSelectionCommand({ type: 'selection.clear', label: 'Clear Selection' });
1043
+ submitSelectionCommand({ type: 'selection.clear', label: 'Clear Selection' }, state);
897
1044
  }
898
1045
  function isHierarchyShortcutScope(event) {
899
1046
  const target = event.target instanceof Node ? event.target : null;
@@ -909,6 +1056,13 @@ export function createLocalEditorHierarchyController(options) {
909
1056
  function submitHierarchyContextAction(action) {
910
1057
  if (action.action === 'rename')
911
1058
  return;
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;
912
1066
  if (action.action === 'create-group' || action.action === 'create-primitive' || action.action === 'create-marker') {
913
1067
  expandNode(action.parentId);
914
1068
  }
@@ -960,8 +1114,64 @@ export function createLocalEditorHierarchyController(options) {
960
1114
  });
961
1115
  }
962
1116
  }
963
- function hasDuplicateHandler() {
964
- 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
+ });
965
1175
  }
966
1176
  function resolveActiveTheme() {
967
1177
  const themed = panel.closest('.fps-editor-workbench[data-fps-editor-theme]');
@@ -972,11 +1182,18 @@ export function createLocalEditorHierarchyController(options) {
972
1182
  const state = getState();
973
1183
  const model = state ? getModel(state) : null;
974
1184
  const node = model?.getNode(id) ?? null;
975
- if (!node || node.protected || node.item.locked || node.item.renamable === false)
1185
+ if (!node || !canLocalEditorHierarchyNodeRename(node))
976
1186
  return;
977
1187
  hierarchyRename = { id, value: node.label };
978
1188
  requestRender();
979
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
+ }
980
1197
  function submitResolvedDrop(resolved, targetId, placement, draggedIds) {
981
1198
  if (callbacks.onSceneGraphMove) {
982
1199
  callbacks.onSceneGraphMove({