@fps-games/editor 0.2.1-beta.3 → 0.2.1-beta.4

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 (514) hide show
  1. package/dist/build-info.json +44 -44
  2. package/dist/editor-commands/capabilities/assets.d.ts +8 -0
  3. package/dist/editor-commands/capabilities/assets.d.ts.map +1 -0
  4. package/dist/{agent-bridge → editor-commands}/capabilities/assets.js +41 -41
  5. package/dist/editor-commands/capabilities/assets.js.map +1 -0
  6. package/dist/editor-commands/capabilities/editor-state.d.ts +5 -0
  7. package/dist/editor-commands/capabilities/editor-state.d.ts.map +1 -0
  8. package/dist/{agent-bridge → editor-commands}/capabilities/editor-state.js +22 -22
  9. package/dist/editor-commands/capabilities/editor-state.js.map +1 -0
  10. package/dist/editor-commands/capabilities/hierarchy.d.ts +4 -0
  11. package/dist/editor-commands/capabilities/hierarchy.d.ts.map +1 -0
  12. package/dist/{agent-bridge → editor-commands}/capabilities/hierarchy.js +5 -5
  13. package/dist/editor-commands/capabilities/hierarchy.js.map +1 -0
  14. package/dist/editor-commands/capabilities/host-lifecycle.d.ts +11 -0
  15. package/dist/editor-commands/capabilities/host-lifecycle.d.ts.map +1 -0
  16. package/dist/editor-commands/capabilities/host-lifecycle.js +149 -0
  17. package/dist/editor-commands/capabilities/host-lifecycle.js.map +1 -0
  18. package/dist/editor-commands/capabilities/prefabs.d.ts +5 -0
  19. package/dist/editor-commands/capabilities/prefabs.d.ts.map +1 -0
  20. package/dist/{agent-bridge → editor-commands}/capabilities/prefabs.js +93 -93
  21. package/dist/editor-commands/capabilities/prefabs.js.map +1 -0
  22. package/dist/editor-commands/capabilities/scene-objects.d.ts +8 -0
  23. package/dist/editor-commands/capabilities/scene-objects.d.ts.map +1 -0
  24. package/dist/editor-commands/capabilities/scene-objects.js +480 -0
  25. package/dist/editor-commands/capabilities/scene-objects.js.map +1 -0
  26. package/dist/editor-commands/capabilities/selection.d.ts +5 -0
  27. package/dist/editor-commands/capabilities/selection.d.ts.map +1 -0
  28. package/dist/editor-commands/capabilities/selection.js +60 -0
  29. package/dist/editor-commands/capabilities/selection.js.map +1 -0
  30. package/dist/editor-commands/capabilities/shadows.d.ts +5 -0
  31. package/dist/editor-commands/capabilities/shadows.d.ts.map +1 -0
  32. package/dist/{agent-bridge → editor-commands}/capabilities/shadows.js +74 -74
  33. package/dist/editor-commands/capabilities/shadows.js.map +1 -0
  34. package/dist/editor-commands/capabilities/transform.d.ts +5 -0
  35. package/dist/editor-commands/capabilities/transform.d.ts.map +1 -0
  36. package/dist/editor-commands/capabilities/transform.js +164 -0
  37. package/dist/editor-commands/capabilities/transform.js.map +1 -0
  38. package/dist/editor-commands/capabilities/ui-regions.d.ts +4 -0
  39. package/dist/editor-commands/capabilities/ui-regions.d.ts.map +1 -0
  40. package/dist/{agent-bridge → editor-commands}/capabilities/ui-regions.js +55 -57
  41. package/dist/editor-commands/capabilities/ui-regions.js.map +1 -0
  42. package/dist/editor-commands/capabilities/viewport.d.ts +5 -0
  43. package/dist/editor-commands/capabilities/viewport.d.ts.map +1 -0
  44. package/dist/{agent-bridge → editor-commands}/capabilities/viewport.js +100 -100
  45. package/dist/editor-commands/capabilities/viewport.js.map +1 -0
  46. package/dist/editor-commands/command-sources.d.ts +7 -0
  47. package/dist/editor-commands/command-sources.d.ts.map +1 -0
  48. package/dist/editor-commands/command-sources.js +34 -0
  49. package/dist/editor-commands/command-sources.js.map +1 -0
  50. package/dist/editor-commands/diagnostics.d.ts +12 -0
  51. package/dist/editor-commands/diagnostics.d.ts.map +1 -0
  52. package/dist/{agent-bridge → editor-commands}/diagnostics.js +4 -4
  53. package/dist/editor-commands/diagnostics.js.map +1 -0
  54. package/dist/{agent-bridge → editor-commands}/index.d.ts +1 -1
  55. package/dist/editor-commands/index.d.ts.map +1 -0
  56. package/dist/{agent-bridge → editor-commands}/index.js +1 -1
  57. package/dist/editor-commands/index.js.map +1 -0
  58. package/dist/editor-commands/register.d.ts +4 -0
  59. package/dist/editor-commands/register.d.ts.map +1 -0
  60. package/dist/{agent-bridge → editor-commands}/register.js +323 -286
  61. package/dist/editor-commands/register.js.map +1 -0
  62. package/dist/{agent-bridge → editor-commands}/shared.d.ts +80 -80
  63. package/dist/editor-commands/shared.d.ts.map +1 -0
  64. package/dist/{agent-bridge → editor-commands}/shared.js +29 -29
  65. package/dist/editor-commands/shared.js.map +1 -0
  66. package/dist/editor-commands/source-types.d.ts +110 -0
  67. package/dist/editor-commands/source-types.d.ts.map +1 -0
  68. package/dist/editor-commands/source-types.js.map +1 -0
  69. package/dist/editor-plugin-commands.d.ts +4 -0
  70. package/dist/editor-plugin-commands.d.ts.map +1 -0
  71. package/dist/editor-plugin-commands.js +18 -0
  72. package/dist/editor-plugin-commands.js.map +1 -0
  73. package/dist/index.d.ts +2 -2
  74. package/dist/index.d.ts.map +1 -1
  75. package/dist/index.js +1 -1
  76. package/dist/index.js.map +1 -1
  77. package/dist/local-editor-commands.d.ts +2 -0
  78. package/dist/local-editor-commands.d.ts.map +1 -0
  79. package/dist/local-editor-commands.js +2 -0
  80. package/dist/local-editor-commands.js.map +1 -0
  81. package/dist/local-editor-harness.d.ts +35 -21
  82. package/dist/local-editor-harness.d.ts.map +1 -1
  83. package/dist/local-editor-harness.js +1721 -367
  84. package/dist/local-editor-harness.js.map +1 -1
  85. package/dist/local-editor-prefab-stage-transaction.d.ts +2 -1
  86. package/dist/local-editor-prefab-stage-transaction.d.ts.map +1 -1
  87. package/dist/local-editor-prefab-stage-transaction.js +6 -5
  88. package/dist/local-editor-prefab-stage-transaction.js.map +1 -1
  89. package/dist/local-editor-scene-view-interaction-runtime.d.ts.map +1 -1
  90. package/dist/local-editor-scene-view-interaction-runtime.js +2 -5
  91. package/dist/local-editor-scene-view-interaction-runtime.js.map +1 -1
  92. package/dist/playable-local-editor-entry.d.ts +10 -0
  93. package/dist/playable-local-editor-entry.d.ts.map +1 -1
  94. package/dist/playable-local-editor-entry.js +10 -2
  95. package/dist/playable-local-editor-entry.js.map +1 -1
  96. package/dist/playable-local-editor-host.d.ts +3 -32
  97. package/dist/playable-local-editor-host.d.ts.map +1 -1
  98. package/dist/playable-local-editor-host.js +6 -70
  99. package/dist/playable-local-editor-host.js.map +1 -1
  100. package/dist/playable-product-local-editor.d.ts +1 -2
  101. package/dist/playable-product-local-editor.d.ts.map +1 -1
  102. package/dist/playable-product-local-editor.js +0 -1
  103. package/dist/playable-product-local-editor.js.map +1 -1
  104. package/dist/playable-product-projection-preview.d.ts.map +1 -1
  105. package/dist/playable-product-projection-preview.js +1 -1
  106. package/dist/playable-product-projection-preview.js.map +1 -1
  107. package/dist/playable-product-scene-capabilities.d.ts +0 -2
  108. package/dist/playable-product-scene-capabilities.d.ts.map +1 -1
  109. package/dist/playable-product-scene-capabilities.js +33 -6
  110. package/dist/playable-product-scene-capabilities.js.map +1 -1
  111. package/dist/playable-runtime-babylon.d.ts +4 -0
  112. package/dist/playable-runtime-babylon.d.ts.map +1 -1
  113. package/dist/playable-runtime-babylon.js +4 -0
  114. package/dist/playable-runtime-babylon.js.map +1 -1
  115. package/dist/playable-sdk.d.ts +1 -1
  116. package/dist/playable-sdk.d.ts.map +1 -1
  117. package/dist/playable-sdk.js.map +1 -1
  118. package/dist/playable-standard-project.d.ts +0 -2
  119. package/dist/playable-standard-project.d.ts.map +1 -1
  120. package/dist/playable-standard-project.js +1 -2
  121. package/dist/playable-standard-project.js.map +1 -1
  122. package/dist/project-service-projection.d.ts +16 -0
  123. package/dist/project-service-projection.d.ts.map +1 -0
  124. package/dist/project-service-projection.js +67 -0
  125. package/dist/project-service-projection.js.map +1 -0
  126. package/node_modules/@fps-games/babylon-renderer/dist/post-process/babylon-default-pipeline.d.ts +18 -0
  127. package/node_modules/@fps-games/babylon-renderer/dist/post-process/babylon-default-pipeline.d.ts.map +1 -1
  128. package/node_modules/@fps-games/babylon-renderer/dist/post-process/babylon-default-pipeline.js +54 -18
  129. package/node_modules/@fps-games/babylon-renderer/dist/post-process/babylon-default-pipeline.js.map +1 -1
  130. package/node_modules/@fps-games/babylon-renderer/package.json +9 -9
  131. package/node_modules/@fps-games/editor-babylon/dist/projection.d.ts +1 -0
  132. package/node_modules/@fps-games/editor-babylon/dist/projection.d.ts.map +1 -1
  133. package/node_modules/@fps-games/editor-babylon/dist/projection.js +1 -1
  134. package/node_modules/@fps-games/editor-babylon/dist/projection.js.map +1 -1
  135. package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.d.ts.map +1 -1
  136. package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.js +127 -13
  137. package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.js.map +1 -1
  138. package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.d.ts.map +1 -1
  139. package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.js +66 -1
  140. package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.js.map +1 -1
  141. package/node_modules/@fps-games/editor-babylon/package.json +6 -6
  142. package/node_modules/@fps-games/editor-browser/dist/editor-command-service-client.d.ts +32 -0
  143. package/node_modules/@fps-games/editor-browser/dist/editor-command-service-client.d.ts.map +1 -0
  144. package/node_modules/@fps-games/editor-browser/dist/editor-command-service-client.js +254 -0
  145. package/node_modules/@fps-games/editor-browser/dist/editor-command-service-client.js.map +1 -0
  146. package/node_modules/@fps-games/editor-browser/dist/index.d.ts +3 -1
  147. package/node_modules/@fps-games/editor-browser/dist/index.d.ts.map +1 -1
  148. package/node_modules/@fps-games/editor-browser/dist/index.js +2 -0
  149. package/node_modules/@fps-games/editor-browser/dist/index.js.map +1 -1
  150. package/node_modules/@fps-games/editor-browser/dist/local-editor-command-center.d.ts +68 -0
  151. package/node_modules/@fps-games/editor-browser/dist/local-editor-command-center.d.ts.map +1 -0
  152. package/node_modules/@fps-games/editor-browser/dist/local-editor-command-center.js +650 -0
  153. package/node_modules/@fps-games/editor-browser/dist/local-editor-command-center.js.map +1 -0
  154. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-formal-surface-visibility.d.ts +1 -0
  155. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-formal-surface-visibility.d.ts.map +1 -1
  156. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-formal-surface-visibility.js +22 -0
  157. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-formal-surface-visibility.js.map +1 -1
  158. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-controller.d.ts +8 -0
  159. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-controller.d.ts.map +1 -1
  160. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-controller.js +117 -6
  161. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-controller.js.map +1 -1
  162. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-view.d.ts +14 -1
  163. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-view.d.ts.map +1 -1
  164. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-view.js +100 -1
  165. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-view.js.map +1 -1
  166. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.d.ts +8 -1
  167. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.d.ts.map +1 -1
  168. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.js +75 -2
  169. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.js.map +1 -1
  170. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.d.ts +37 -12
  171. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.d.ts.map +1 -1
  172. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.js.map +1 -1
  173. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.d.ts +25 -2
  174. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.d.ts.map +1 -1
  175. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.js +332 -107
  176. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.js.map +1 -1
  177. package/node_modules/@fps-games/editor-browser/package.json +7 -7
  178. package/node_modules/@fps-games/editor-core/dist/editor-authoring-host.d.ts +107 -0
  179. package/node_modules/@fps-games/editor-core/dist/editor-authoring-host.d.ts.map +1 -0
  180. package/node_modules/@fps-games/editor-core/dist/editor-authoring-host.js +1211 -0
  181. package/node_modules/@fps-games/editor-core/dist/editor-authoring-host.js.map +1 -0
  182. package/node_modules/@fps-games/editor-core/dist/editor-command-capability-adapter.d.ts +34 -0
  183. package/node_modules/@fps-games/editor-core/dist/editor-command-capability-adapter.d.ts.map +1 -0
  184. package/node_modules/@fps-games/editor-core/dist/editor-command-capability-adapter.js +260 -0
  185. package/node_modules/@fps-games/editor-core/dist/editor-command-capability-adapter.js.map +1 -0
  186. package/node_modules/@fps-games/editor-core/dist/editor-command-composed-authority.d.ts +9 -0
  187. package/node_modules/@fps-games/editor-core/dist/editor-command-composed-authority.d.ts.map +1 -0
  188. package/node_modules/@fps-games/editor-core/dist/editor-command-composed-authority.js +14 -0
  189. package/node_modules/@fps-games/editor-core/dist/editor-command-composed-authority.js.map +1 -0
  190. package/node_modules/@fps-games/editor-core/dist/editor-command-observability.d.ts +18 -0
  191. package/node_modules/@fps-games/editor-core/dist/editor-command-observability.d.ts.map +1 -0
  192. package/node_modules/@fps-games/editor-core/dist/editor-command-observability.js +113 -0
  193. package/node_modules/@fps-games/editor-core/dist/editor-command-observability.js.map +1 -0
  194. package/node_modules/@fps-games/editor-core/dist/editor-command-system.d.ts +82 -0
  195. package/node_modules/@fps-games/editor-core/dist/editor-command-system.d.ts.map +1 -0
  196. package/node_modules/@fps-games/editor-core/dist/editor-command-system.js +1098 -0
  197. package/node_modules/@fps-games/editor-core/dist/editor-command-system.js.map +1 -0
  198. package/node_modules/@fps-games/editor-core/dist/editor-plugin-host.d.ts +6 -7
  199. package/node_modules/@fps-games/editor-core/dist/editor-plugin-host.d.ts.map +1 -1
  200. package/node_modules/@fps-games/editor-core/dist/editor-plugin-host.js +62 -103
  201. package/node_modules/@fps-games/editor-core/dist/editor-plugin-host.js.map +1 -1
  202. package/node_modules/@fps-games/editor-core/dist/editor-service-gateway.d.ts +30 -0
  203. package/node_modules/@fps-games/editor-core/dist/editor-service-gateway.d.ts.map +1 -0
  204. package/node_modules/@fps-games/editor-core/dist/editor-service-gateway.js +540 -0
  205. package/node_modules/@fps-games/editor-core/dist/editor-service-gateway.js.map +1 -0
  206. package/node_modules/@fps-games/editor-core/dist/editor-session-authority.d.ts +9 -0
  207. package/node_modules/@fps-games/editor-core/dist/editor-session-authority.d.ts.map +1 -0
  208. package/node_modules/@fps-games/editor-core/dist/editor-session-authority.js +61 -0
  209. package/node_modules/@fps-games/editor-core/dist/editor-session-authority.js.map +1 -0
  210. package/node_modules/@fps-games/editor-core/dist/editor-session.d.ts +55 -0
  211. package/node_modules/@fps-games/editor-core/dist/editor-session.d.ts.map +1 -1
  212. package/node_modules/@fps-games/editor-core/dist/editor-session.js +247 -6
  213. package/node_modules/@fps-games/editor-core/dist/editor-session.js.map +1 -1
  214. package/node_modules/@fps-games/editor-core/dist/index.d.ts +6 -2
  215. package/node_modules/@fps-games/editor-core/dist/index.d.ts.map +1 -1
  216. package/node_modules/@fps-games/editor-core/dist/index.js +6 -2
  217. package/node_modules/@fps-games/editor-core/dist/index.js.map +1 -1
  218. package/node_modules/@fps-games/editor-core/package.json +6 -6
  219. package/node_modules/@fps-games/editor-forge-play/dist/index.d.ts +0 -1
  220. package/node_modules/@fps-games/editor-forge-play/dist/index.d.ts.map +1 -1
  221. package/node_modules/@fps-games/editor-forge-play/dist/index.js +0 -1
  222. package/node_modules/@fps-games/editor-forge-play/dist/index.js.map +1 -1
  223. package/node_modules/@fps-games/editor-forge-play/package.json +2 -2
  224. package/node_modules/@fps-games/editor-playable-sdk/dist/bridge-command/protocol.d.ts +2 -0
  225. package/node_modules/@fps-games/editor-playable-sdk/dist/bridge-command/protocol.d.ts.map +1 -1
  226. package/node_modules/@fps-games/editor-playable-sdk/dist/document/helpers.d.ts.map +1 -1
  227. package/node_modules/@fps-games/editor-playable-sdk/dist/document/helpers.js +41 -1
  228. package/node_modules/@fps-games/editor-playable-sdk/dist/document/helpers.js.map +1 -1
  229. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play-types.d.ts +27 -1
  230. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play-types.d.ts.map +1 -1
  231. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play-types.js.map +1 -1
  232. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play.d.ts +2 -0
  233. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play.d.ts.map +1 -1
  234. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play.js +214 -7
  235. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play.js.map +1 -1
  236. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/host-controller.d.ts +1 -0
  237. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/host-controller.d.ts.map +1 -1
  238. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/host-controller.js +11 -3
  239. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/host-controller.js.map +1 -1
  240. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/index.d.ts +2 -4
  241. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/index.d.ts.map +1 -1
  242. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/index.js +0 -1
  243. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/index.js.map +1 -1
  244. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/lifecycle.d.ts.map +1 -1
  245. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/lifecycle.js +77 -31
  246. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/lifecycle.js.map +1 -1
  247. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/types.d.ts +8 -1
  248. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/types.d.ts.map +1 -1
  249. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/types.js.map +1 -1
  250. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/asset-fields.d.ts +21 -1
  251. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/asset-fields.d.ts.map +1 -1
  252. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/asset-fields.js +90 -4
  253. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/asset-fields.js.map +1 -1
  254. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/binding.d.ts +27 -1
  255. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/binding.d.ts.map +1 -1
  256. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/binding.js +161 -1
  257. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/binding.js.map +1 -1
  258. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/inspector.d.ts +2 -2
  259. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/inspector.d.ts.map +1 -1
  260. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/inspector.js +5 -92
  261. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/inspector.js.map +1 -1
  262. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/scene-inspector.d.ts +7 -0
  263. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/scene-inspector.d.ts.map +1 -1
  264. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/scene-inspector.js +26 -9
  265. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/scene-inspector.js.map +1 -1
  266. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/slot-inspector.d.ts +9 -0
  267. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/slot-inspector.d.ts.map +1 -1
  268. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/slot-inspector.js +19 -8
  269. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/slot-inspector.js.map +1 -1
  270. package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/material-override-inspector.d.ts +5 -0
  271. package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/material-override-inspector.d.ts.map +1 -1
  272. package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/material-override-inspector.js +16 -4
  273. package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/material-override-inspector.js.map +1 -1
  274. package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/stage-inspector.d.ts +9 -0
  275. package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/stage-inspector.d.ts.map +1 -1
  276. package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/stage-inspector.js +12 -2
  277. package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/stage-inspector.js.map +1 -1
  278. package/node_modules/@fps-games/editor-playable-sdk/dist/product/ground-decal.d.ts +2 -1
  279. package/node_modules/@fps-games/editor-playable-sdk/dist/product/ground-decal.d.ts.map +1 -1
  280. package/node_modules/@fps-games/editor-playable-sdk/dist/product/ground-decal.js +10 -5
  281. package/node_modules/@fps-games/editor-playable-sdk/dist/product/ground-decal.js.map +1 -1
  282. package/node_modules/@fps-games/editor-playable-sdk/dist/product/index.d.ts +1 -0
  283. package/node_modules/@fps-games/editor-playable-sdk/dist/product/index.d.ts.map +1 -1
  284. package/node_modules/@fps-games/editor-playable-sdk/dist/product/index.js +1 -0
  285. package/node_modules/@fps-games/editor-playable-sdk/dist/product/index.js.map +1 -1
  286. package/node_modules/@fps-games/editor-playable-sdk/dist/product/project-host-services.d.ts +17 -82
  287. package/node_modules/@fps-games/editor-playable-sdk/dist/product/project-host-services.d.ts.map +1 -1
  288. package/node_modules/@fps-games/editor-playable-sdk/dist/product/project-host-services.js +53 -57
  289. package/node_modules/@fps-games/editor-playable-sdk/dist/product/project-host-services.js.map +1 -1
  290. package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-session.d.ts.map +1 -1
  291. package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-session.js +3 -2
  292. package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-session.js.map +1 -1
  293. package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-authoring-commands.d.ts +10 -0
  294. package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-authoring-commands.d.ts.map +1 -0
  295. package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-authoring-commands.js +256 -0
  296. package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-authoring-commands.js.map +1 -0
  297. package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-scene-assembly.d.ts.map +1 -1
  298. package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-scene-assembly.js +7 -5
  299. package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-scene-assembly.js.map +1 -1
  300. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.d.ts.map +1 -1
  301. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.js +8 -0
  302. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.js.map +1 -1
  303. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/types.d.ts +1 -0
  304. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/types.d.ts.map +1 -1
  305. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/types.js.map +1 -1
  306. package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/inspectors.js +134 -12
  307. package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/inspectors.js.map +1 -1
  308. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-scene-workflow.d.ts.map +1 -1
  309. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-scene-workflow.js +47 -0
  310. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-scene-workflow.js.map +1 -1
  311. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-service-vite.d.ts +27 -0
  312. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-service-vite.d.ts.map +1 -0
  313. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-service-vite.js +592 -0
  314. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-service-vite.js.map +1 -0
  315. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.d.ts +3 -1
  316. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.d.ts.map +1 -1
  317. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.js +2 -1
  318. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.js.map +1 -1
  319. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/plugin.d.ts.map +1 -1
  320. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/plugin.js +61 -6
  321. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/plugin.js.map +1 -1
  322. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-adapter.d.ts +0 -2
  323. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-adapter.d.ts.map +1 -1
  324. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-adapter.js +1 -10
  325. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-adapter.js.map +1 -1
  326. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.d.ts.map +1 -1
  327. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.js +21 -0
  328. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.js.map +1 -1
  329. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-authoring-backend.d.ts +13 -0
  330. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-authoring-backend.d.ts.map +1 -0
  331. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-authoring-backend.js +18 -0
  332. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-authoring-backend.js.map +1 -0
  333. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-editor-service.d.ts +28 -0
  334. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-editor-service.d.ts.map +1 -0
  335. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-editor-service.js +863 -0
  336. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-editor-service.js.map +1 -0
  337. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/types.d.ts +2 -0
  338. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/types.d.ts.map +1 -1
  339. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/types.js.map +1 -1
  340. package/node_modules/@fps-games/editor-playable-sdk/package.json +6 -6
  341. package/node_modules/@fps-games/editor-protocol/dist/editor-command-capabilities.d.ts +1626 -0
  342. package/node_modules/@fps-games/editor-protocol/dist/editor-command-capabilities.d.ts.map +1 -0
  343. package/node_modules/@fps-games/editor-protocol/dist/{agent-bridge.js → editor-command-capabilities.js} +766 -620
  344. package/node_modules/@fps-games/editor-protocol/dist/editor-command-capabilities.js.map +1 -0
  345. package/node_modules/@fps-games/editor-protocol/dist/editor-command-trace.d.ts +69 -0
  346. package/node_modules/@fps-games/editor-protocol/dist/editor-command-trace.d.ts.map +1 -0
  347. package/node_modules/@fps-games/editor-protocol/dist/editor-command-trace.js +22 -0
  348. package/node_modules/@fps-games/editor-protocol/dist/editor-command-trace.js.map +1 -0
  349. package/node_modules/@fps-games/editor-protocol/dist/editor-command.d.ts +136 -0
  350. package/node_modules/@fps-games/editor-protocol/dist/editor-command.d.ts.map +1 -0
  351. package/node_modules/@fps-games/editor-protocol/dist/editor-command.js +2 -0
  352. package/node_modules/@fps-games/editor-protocol/dist/editor-command.js.map +1 -0
  353. package/node_modules/@fps-games/editor-protocol/dist/editor-service.d.ts +225 -0
  354. package/node_modules/@fps-games/editor-protocol/dist/editor-service.d.ts.map +1 -0
  355. package/node_modules/@fps-games/editor-protocol/dist/editor-service.js +4 -0
  356. package/node_modules/@fps-games/editor-protocol/dist/editor-service.js.map +1 -0
  357. package/node_modules/@fps-games/editor-protocol/dist/index.d.ts +6 -3
  358. package/node_modules/@fps-games/editor-protocol/dist/index.d.ts.map +1 -1
  359. package/node_modules/@fps-games/editor-protocol/dist/index.js +6 -3
  360. package/node_modules/@fps-games/editor-protocol/dist/index.js.map +1 -1
  361. package/node_modules/@fps-games/editor-protocol/package.json +2 -2
  362. package/node_modules/@fps-games/editor-tooling/package.json +3 -3
  363. package/node_modules/@fps-games/editor-ui/package.json +1 -1
  364. package/node_modules/@fps-games/playable-assets/package.json +1 -1
  365. package/node_modules/@fps-games/playable-contracts/package.json +1 -1
  366. package/node_modules/@fps-games/playable-rendering/package.json +2 -2
  367. package/node_modules/@fps-games/playable-runtime/package.json +12 -12
  368. package/node_modules/@fps-games/playable-runtime-data/package.json +4 -4
  369. package/node_modules/@fps-games/playable-scene/package.json +2 -2
  370. package/node_modules/@fps-games/plugin-api/package.json +1 -1
  371. package/node_modules/@fps-games/plugin-assets/dist/version.d.ts +1 -1
  372. package/node_modules/@fps-games/plugin-assets/dist/version.js +1 -1
  373. package/node_modules/@fps-games/plugin-assets/dist/version.js.map +1 -1
  374. package/node_modules/@fps-games/plugin-assets/package.json +6 -6
  375. package/node_modules/@fps-games/plugin-hierarchy/dist/kernel.d.ts +1 -0
  376. package/node_modules/@fps-games/plugin-hierarchy/dist/kernel.d.ts.map +1 -1
  377. package/node_modules/@fps-games/plugin-hierarchy/dist/kernel.js +78 -4
  378. package/node_modules/@fps-games/plugin-hierarchy/dist/kernel.js.map +1 -1
  379. package/node_modules/@fps-games/plugin-hierarchy/dist/version.d.ts +1 -1
  380. package/node_modules/@fps-games/plugin-hierarchy/dist/version.js +1 -1
  381. package/node_modules/@fps-games/plugin-hierarchy/dist/version.js.map +1 -1
  382. package/node_modules/@fps-games/plugin-hierarchy/package.json +5 -5
  383. package/node_modules/@fps-games/plugin-host/package.json +2 -2
  384. package/node_modules/@fps-games/plugin-markers/dist/version.d.ts +1 -1
  385. package/node_modules/@fps-games/plugin-markers/dist/version.js +1 -1
  386. package/node_modules/@fps-games/plugin-markers/dist/version.js.map +1 -1
  387. package/node_modules/@fps-games/plugin-markers/package.json +5 -5
  388. package/node_modules/@fps-games/plugin-materials/dist/version.d.ts +1 -1
  389. package/node_modules/@fps-games/plugin-materials/dist/version.js +1 -1
  390. package/node_modules/@fps-games/plugin-materials/dist/version.js.map +1 -1
  391. package/node_modules/@fps-games/plugin-materials/package.json +5 -5
  392. package/node_modules/@fps-games/plugin-rendering/dist/version.d.ts +1 -1
  393. package/node_modules/@fps-games/plugin-rendering/dist/version.js +1 -1
  394. package/node_modules/@fps-games/plugin-rendering/dist/version.js.map +1 -1
  395. package/node_modules/@fps-games/plugin-rendering/package.json +5 -5
  396. package/node_modules/@fps-games/plugin-scene/dist/version.d.ts +1 -1
  397. package/node_modules/@fps-games/plugin-scene/dist/version.js +1 -1
  398. package/node_modules/@fps-games/plugin-scene/dist/version.js.map +1 -1
  399. package/node_modules/@fps-games/plugin-scene/package.json +5 -5
  400. package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.d.ts +1 -1
  401. package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.js +1 -1
  402. package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.js.map +1 -1
  403. package/node_modules/@fps-games/plugin-shadow-map-experiment/package.json +5 -5
  404. package/node_modules/@fps-games/plugin-shadows/dist/version.d.ts +1 -1
  405. package/node_modules/@fps-games/plugin-shadows/dist/version.js +1 -1
  406. package/node_modules/@fps-games/plugin-shadows/dist/version.js.map +1 -1
  407. package/node_modules/@fps-games/plugin-shadows/package.json +7 -7
  408. package/package.json +23 -23
  409. package/dist/agent-bridge/capabilities/assets.d.ts +0 -8
  410. package/dist/agent-bridge/capabilities/assets.d.ts.map +0 -1
  411. package/dist/agent-bridge/capabilities/assets.js.map +0 -1
  412. package/dist/agent-bridge/capabilities/editor-state.d.ts +0 -5
  413. package/dist/agent-bridge/capabilities/editor-state.d.ts.map +0 -1
  414. package/dist/agent-bridge/capabilities/editor-state.js.map +0 -1
  415. package/dist/agent-bridge/capabilities/hierarchy.d.ts +0 -4
  416. package/dist/agent-bridge/capabilities/hierarchy.d.ts.map +0 -1
  417. package/dist/agent-bridge/capabilities/hierarchy.js.map +0 -1
  418. package/dist/agent-bridge/capabilities/host-lifecycle.d.ts +0 -11
  419. package/dist/agent-bridge/capabilities/host-lifecycle.d.ts.map +0 -1
  420. package/dist/agent-bridge/capabilities/host-lifecycle.js +0 -149
  421. package/dist/agent-bridge/capabilities/host-lifecycle.js.map +0 -1
  422. package/dist/agent-bridge/capabilities/prefabs.d.ts +0 -5
  423. package/dist/agent-bridge/capabilities/prefabs.d.ts.map +0 -1
  424. package/dist/agent-bridge/capabilities/prefabs.js.map +0 -1
  425. package/dist/agent-bridge/capabilities/scene-objects.d.ts +0 -8
  426. package/dist/agent-bridge/capabilities/scene-objects.d.ts.map +0 -1
  427. package/dist/agent-bridge/capabilities/scene-objects.js +0 -480
  428. package/dist/agent-bridge/capabilities/scene-objects.js.map +0 -1
  429. package/dist/agent-bridge/capabilities/selection.d.ts +0 -5
  430. package/dist/agent-bridge/capabilities/selection.d.ts.map +0 -1
  431. package/dist/agent-bridge/capabilities/selection.js +0 -60
  432. package/dist/agent-bridge/capabilities/selection.js.map +0 -1
  433. package/dist/agent-bridge/capabilities/shadows.d.ts +0 -5
  434. package/dist/agent-bridge/capabilities/shadows.d.ts.map +0 -1
  435. package/dist/agent-bridge/capabilities/shadows.js.map +0 -1
  436. package/dist/agent-bridge/capabilities/transform.d.ts +0 -5
  437. package/dist/agent-bridge/capabilities/transform.d.ts.map +0 -1
  438. package/dist/agent-bridge/capabilities/transform.js +0 -164
  439. package/dist/agent-bridge/capabilities/transform.js.map +0 -1
  440. package/dist/agent-bridge/capabilities/ui-regions.d.ts +0 -4
  441. package/dist/agent-bridge/capabilities/ui-regions.d.ts.map +0 -1
  442. package/dist/agent-bridge/capabilities/ui-regions.js.map +0 -1
  443. package/dist/agent-bridge/capabilities/viewport.d.ts +0 -5
  444. package/dist/agent-bridge/capabilities/viewport.d.ts.map +0 -1
  445. package/dist/agent-bridge/capabilities/viewport.js.map +0 -1
  446. package/dist/agent-bridge/capability-sources.d.ts +0 -7
  447. package/dist/agent-bridge/capability-sources.d.ts.map +0 -1
  448. package/dist/agent-bridge/capability-sources.js +0 -34
  449. package/dist/agent-bridge/capability-sources.js.map +0 -1
  450. package/dist/agent-bridge/diagnostics.d.ts +0 -12
  451. package/dist/agent-bridge/diagnostics.d.ts.map +0 -1
  452. package/dist/agent-bridge/diagnostics.js.map +0 -1
  453. package/dist/agent-bridge/index.d.ts.map +0 -1
  454. package/dist/agent-bridge/index.js.map +0 -1
  455. package/dist/agent-bridge/register.d.ts +0 -4
  456. package/dist/agent-bridge/register.d.ts.map +0 -1
  457. package/dist/agent-bridge/register.js.map +0 -1
  458. package/dist/agent-bridge/shared.d.ts.map +0 -1
  459. package/dist/agent-bridge/shared.js.map +0 -1
  460. package/dist/agent-bridge/source-types.d.ts +0 -110
  461. package/dist/agent-bridge/source-types.d.ts.map +0 -1
  462. package/dist/agent-bridge/source-types.js.map +0 -1
  463. package/dist/editor-plugin-agent-capabilities.d.ts +0 -4
  464. package/dist/editor-plugin-agent-capabilities.d.ts.map +0 -1
  465. package/dist/editor-plugin-agent-capabilities.js +0 -64
  466. package/dist/editor-plugin-agent-capabilities.js.map +0 -1
  467. package/dist/local-editor-agent-actions.d.ts +0 -43
  468. package/dist/local-editor-agent-actions.d.ts.map +0 -1
  469. package/dist/local-editor-agent-actions.js +0 -321
  470. package/dist/local-editor-agent-actions.js.map +0 -1
  471. package/dist/local-editor-agent-bridge-transport.d.ts +0 -129
  472. package/dist/local-editor-agent-bridge-transport.d.ts.map +0 -1
  473. package/dist/local-editor-agent-bridge-transport.js +0 -403
  474. package/dist/local-editor-agent-bridge-transport.js.map +0 -1
  475. package/dist/local-editor-agent-bridge.d.ts +0 -2
  476. package/dist/local-editor-agent-bridge.d.ts.map +0 -1
  477. package/dist/local-editor-agent-bridge.js +0 -2
  478. package/dist/local-editor-agent-bridge.js.map +0 -1
  479. package/dist/local-editor-agent-context.d.ts +0 -68
  480. package/dist/local-editor-agent-context.d.ts.map +0 -1
  481. package/dist/local-editor-agent-context.js +0 -716
  482. package/dist/local-editor-agent-context.js.map +0 -1
  483. package/node_modules/@fps-games/editor-core/dist/agent-bridge.d.ts +0 -22
  484. package/node_modules/@fps-games/editor-core/dist/agent-bridge.d.ts.map +0 -1
  485. package/node_modules/@fps-games/editor-core/dist/agent-bridge.js +0 -106
  486. package/node_modules/@fps-games/editor-core/dist/agent-bridge.js.map +0 -1
  487. package/node_modules/@fps-games/editor-core/dist/agent-interaction.d.ts +0 -17
  488. package/node_modules/@fps-games/editor-core/dist/agent-interaction.d.ts.map +0 -1
  489. package/node_modules/@fps-games/editor-core/dist/agent-interaction.js +0 -14
  490. package/node_modules/@fps-games/editor-core/dist/agent-interaction.js.map +0 -1
  491. package/node_modules/@fps-games/editor-forge-play/dist/agent-transport.d.ts +0 -23
  492. package/node_modules/@fps-games/editor-forge-play/dist/agent-transport.d.ts.map +0 -1
  493. package/node_modules/@fps-games/editor-forge-play/dist/agent-transport.js +0 -47
  494. package/node_modules/@fps-games/editor-forge-play/dist/agent-transport.js.map +0 -1
  495. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/agent-descriptions.d.ts +0 -112
  496. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/agent-descriptions.d.ts.map +0 -1
  497. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/agent-descriptions.js +0 -159
  498. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/agent-descriptions.js.map +0 -1
  499. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/session-metadata.d.ts +0 -15
  500. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/session-metadata.d.ts.map +0 -1
  501. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/session-metadata.js +0 -76
  502. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/session-metadata.js.map +0 -1
  503. package/node_modules/@fps-games/editor-protocol/dist/agent-bridge.d.ts +0 -1622
  504. package/node_modules/@fps-games/editor-protocol/dist/agent-bridge.d.ts.map +0 -1
  505. package/node_modules/@fps-games/editor-protocol/dist/agent-bridge.js.map +0 -1
  506. package/node_modules/@fps-games/editor-protocol/dist/agent-trace.d.ts +0 -68
  507. package/node_modules/@fps-games/editor-protocol/dist/agent-trace.d.ts.map +0 -1
  508. package/node_modules/@fps-games/editor-protocol/dist/agent-trace.js +0 -23
  509. package/node_modules/@fps-games/editor-protocol/dist/agent-trace.js.map +0 -1
  510. package/node_modules/@fps-games/editor-protocol/dist/agent.d.ts +0 -187
  511. package/node_modules/@fps-games/editor-protocol/dist/agent.d.ts.map +0 -1
  512. package/node_modules/@fps-games/editor-protocol/dist/agent.js +0 -5
  513. package/node_modules/@fps-games/editor-protocol/dist/agent.js.map +0 -1
  514. /package/dist/{agent-bridge → editor-commands}/source-types.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"local-editor-ui-hierarchy-view.d.ts","sourceRoot":"","sources":["../src/local-editor-ui-hierarchy-view.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAEV,kBAAkB,EAEnB,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,yCAAyC,CAAC;AAwB/F,MAAM,WAAW,6BAA6B;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,SAAS,EAAE,kBAAkB,CAAC;IAC9B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC7C,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,WAAW,EAAE,+BAA+B,GAAG,IAAI,CAAC;IACpD,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,iCAAiC,KAAK,CAAC;AAoBpD,wBAAgB,+BAA+B,CAC7C,GAAG,EAAE,QAAQ,EACb,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,6BAA6B,GACnC,IAAI,CAyDN;AAkLD,wBAAgB,mCAAmC,CACjD,GAAG,EAAE,QAAQ,EACb,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,IAAI,CAAC,6BAA6B,EAAE,aAAa,GAAG,UAAU,CAAC,GACrE,IAAI,CAYN"}
1
+ {"version":3,"file":"local-editor-ui-hierarchy-view.d.ts","sourceRoot":"","sources":["../src/local-editor-ui-hierarchy-view.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAEV,sBAAsB,EACtB,kBAAkB,EAEnB,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,yCAAyC,CAAC;AAwB/F,MAAM,WAAW,6BAA6B;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,SAAS,EAAE,kBAAkB,CAAC;IAC9B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC7C,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,WAAW,EAAE,+BAA+B,GAAG,IAAI,CAAC;IACpD,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,8CAA8C;IAC7D,SAAS,EAAE,kBAAkB,CAAC;IAC9B,mBAAmB,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED,eAAO,MAAM,iCAAiC,KAAK,CAAC;AAoBpD,wBAAgB,+BAA+B,CAC7C,GAAG,EAAE,QAAQ,EACb,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,6BAA6B,GACnC,IAAI,CAyDN;AAED,wBAAgB,6CAA6C,CAC3D,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,8CAA8C,GACpD,OAAO,CAeT;AAED,wBAAgB,uDAAuD,CACrE,IAAI,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,EACtC,mBAAmB,EAAE,SAAS,MAAM,EAAE,EACtC,gBAAgB,EAAE,MAAM,GAAG,IAAI,EAC/B,WAAW,EAAE,SAAS,MAAM,EAAE,EAC9B,QAAQ,EAAE,MAAM,GAAG,IAAI,GACtB,IAAI,CAaN;AAED,wBAAgB,0CAA0C,CACxD,MAAM,EAAE,2CAA2C,EACnD,IAAI,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,EACtC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GACvC,sBAAsB,GAAG,IAAI,CAU/B;AAED,wBAAgB,yCAAyC,CACvD,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,2CAA2C,EACnD,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GACvC,OAAO,CA8BT;AAiBD,wBAAgB,qDAAqD,CACnE,QAAQ,EAAE,IAAI,CACZ,sBAAsB,EACtB,UAAU,GAAG,UAAU,GAAG,mBAAmB,GAAG,aAAa,GAAG,UAAU,CAC3E,EACD,IAAI,EAAE,IAAI,CACR,sBAAsB,EACtB,UAAU,GAAG,UAAU,GAAG,mBAAmB,GAAG,aAAa,GAAG,UAAU,CAC3E,GACA,OAAO,CAMT;AAED,MAAM,WAAW,2CAA2C;IAC1D,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,sBAAsB,GAAG,IAAI,CAAC;CAC1F;AA2MD,wBAAgB,mCAAmC,CACjD,GAAG,EAAE,QAAQ,EACb,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,IAAI,CAAC,6BAA6B,EAAE,aAAa,GAAG,UAAU,CAAC,GACrE,IAAI,CAYN"}
@@ -74,6 +74,92 @@ export function renderLocalEditorHierarchyPanel(doc, panel, input) {
74
74
  rootDrop: input.rootDrop,
75
75
  });
76
76
  }
77
+ export function syncLocalEditorHierarchySelectionPresentation(panel, input) {
78
+ const shell = hierarchyPanelShells.get(panel);
79
+ if (!shell || !panel.contains(shell.viewport))
80
+ return false;
81
+ const selectedIds = input.viewModel.snapshot.selectedIds;
82
+ shell.input = { ...shell.input, viewModel: input.viewModel };
83
+ shell.selectedIdsRef = selectedIds;
84
+ shell.selectedIdsSet = new Set(selectedIds);
85
+ syncLocalEditorHierarchyMountedRowSelectionPresentation(shell.rows, input.previousSelectedIds, input.previousActiveId, selectedIds, input.viewModel.snapshot.activeId);
86
+ return true;
87
+ }
88
+ export function syncLocalEditorHierarchyMountedRowSelectionPresentation(rows, previousSelectedIds, previousActiveId, selectedIds, activeId) {
89
+ const selectedIdSet = new Set(selectedIds);
90
+ const changedIds = new Set([
91
+ ...previousSelectedIds,
92
+ ...selectedIds,
93
+ ...(previousActiveId ? [previousActiveId] : []),
94
+ ...(activeId ? [activeId] : []),
95
+ ]);
96
+ for (const id of changedIds) {
97
+ const row = rows.get(id);
98
+ if (!row)
99
+ continue;
100
+ syncHierarchyRowSelectionPresentation(row, selectedIdSet.has(id), activeId === id);
101
+ }
102
+ }
103
+ export function applyLocalEditorHierarchyLabelPresentation(kernel, rows, labels) {
104
+ const snapshot = kernel.patchNodeLabels(labels);
105
+ if (!snapshot)
106
+ return null;
107
+ for (const id of Object.keys(labels)) {
108
+ const node = snapshot.nodeById.get(id);
109
+ if (!node)
110
+ return null;
111
+ const row = rows.get(id);
112
+ if (row)
113
+ syncHierarchyRowLabelPresentation(row, node);
114
+ }
115
+ return snapshot;
116
+ }
117
+ export function syncLocalEditorHierarchyLabelPresentation(panel, kernel, labels) {
118
+ const shell = hierarchyPanelShells.get(panel);
119
+ if (!shell || !panel.contains(shell.viewport))
120
+ return false;
121
+ const snapshot = applyLocalEditorHierarchyLabelPresentation(kernel, shell.rows, labels);
122
+ const previousViewModel = shell.input.viewModel;
123
+ if (!snapshot || !canApplyLocalEditorHierarchyLabelPresentationSnapshot(previousViewModel.snapshot, snapshot)) {
124
+ if (/(?:^|[?&])debugGizmo=(?:1|true)(?:&|$)/.test(panel.ownerDocument.defaultView?.location.search ?? '')) {
125
+ console.info('[fps-editor:presentation]', 'hierarchy-label.rejected', {
126
+ previous: createHierarchyLabelPresentationAuthorityDiagnostic(previousViewModel.snapshot),
127
+ next: snapshot
128
+ ? createHierarchyLabelPresentationAuthorityDiagnostic(snapshot)
129
+ : null,
130
+ labelIds: Object.keys(labels),
131
+ });
132
+ }
133
+ return false;
134
+ }
135
+ shell.input = {
136
+ ...shell.input,
137
+ viewModel: {
138
+ ...previousViewModel,
139
+ snapshot,
140
+ },
141
+ };
142
+ return true;
143
+ }
144
+ function createHierarchyLabelPresentationAuthorityDiagnostic(snapshot) {
145
+ return {
146
+ scopeKey: snapshot.scopeKey,
147
+ revision: snapshot.revision,
148
+ structureRevision: snapshot.structureRevision,
149
+ selectedIds: snapshot.selectedIds,
150
+ activeId: snapshot.activeId,
151
+ };
152
+ }
153
+ export function canApplyLocalEditorHierarchyLabelPresentationSnapshot(previous, next) {
154
+ return next.scopeKey === previous.scopeKey
155
+ && next.revision >= previous.revision
156
+ && next.structureRevision === previous.structureRevision
157
+ && next.activeId === previous.activeId
158
+ && arraysEqual(next.selectedIds, previous.selectedIds);
159
+ }
160
+ function arraysEqual(left, right) {
161
+ return left.length === right.length && left.every((value, index) => value === right[index]);
162
+ }
77
163
  function renderHierarchyVirtualWindow(doc, shell) {
78
164
  const { input, viewport, canvas } = shell;
79
165
  const projection = input.viewModel.projection;
@@ -204,7 +290,7 @@ function ensureHierarchyVirtualRow(doc, shell, rowModel) {
204
290
  const { node } = rowModel;
205
291
  const renderKey = [
206
292
  input.presentationRevision,
207
- node.label, rowModel.depth, rowModel.selected, rowModel.active, rowModel.expanded, rowModel.enabled,
293
+ rowModel.depth, rowModel.expanded, rowModel.enabled,
208
294
  node.editorLocked, node.draggable, input.rename?.id === node.id ? input.rename.value : '',
209
295
  ].join('\u0000');
210
296
  let row = shell.rows.get(node.id);
@@ -216,8 +302,20 @@ function ensureHierarchyVirtualRow(doc, shell, rowModel) {
216
302
  row = replacement;
217
303
  shell.rows.set(node.id, row);
218
304
  }
305
+ syncHierarchyRowLabelPresentation(row, node);
306
+ syncHierarchyRowSelectionPresentation(row, rowModel.selected, rowModel.active);
219
307
  return row;
220
308
  }
309
+ function syncHierarchyRowLabelPresentation(row, node) {
310
+ const label = row.querySelector('[data-editor-hierarchy-label]');
311
+ if (label)
312
+ label.textContent = node.editorLocked ? `${node.label} [locked]` : node.label;
313
+ row.title = node.label;
314
+ }
315
+ function syncHierarchyRowSelectionPresentation(row, selected, active) {
316
+ row.dataset.selected = selected ? 'true' : 'false';
317
+ row.dataset.active = active ? 'true' : 'false';
318
+ }
221
319
  function createHierarchyRowPresentation(viewModel, projected, selectedIds) {
222
320
  const node = viewModel.snapshot.nodeById.get(projected.id);
223
321
  if (!node)
@@ -482,6 +580,7 @@ function appendRoleBadge(doc, parent, rowModel) {
482
580
  function appendLabel(doc, parent, rowModel) {
483
581
  const { node } = rowModel;
484
582
  const label = doc.createElement('span');
583
+ label.dataset.editorHierarchyLabel = 'true';
485
584
  label.textContent = node.editorLocked ? `${node.label} [locked]` : node.label;
486
585
  label.style.cssText = 'min-width:0;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap';
487
586
  parent.appendChild(label);
@@ -1 +1 @@
1
- {"version":3,"file":"local-editor-ui-hierarchy-view.js","sourceRoot":"","sources":["../src/local-editor-ui-hierarchy-view.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n createEditorInputStyle,\n createPanelHeader,\n createToolbarButton,\n createTreeViewItem,\n} from './local-editor-ui-primitives';\nimport {\n configureLocalEditorDockPanelContent,\n createLocalEditorDockPanelViewport,\n} from './local-editor-ui-dock-panel';\nimport { createLocalEditorIcon, isLocalEditorIconName, type LocalEditorIconName } from './local-editor-ui-icons';\nimport { clearElement } from './local-editor-ui-shared';\nimport type {\n HierarchyNodeSnapshot,\n HierarchyViewModel,\n HierarchyVisibleRow,\n} from '@fps-games/plugin-hierarchy';\nimport type { LocalEditorHierarchyDropPreview } from './local-editor-ui-hierarchy-drag-policy';\nimport { syncLocalEditorStructuredDragPreview } from './local-editor-ui-structured-drag-preview';\n\ntype HierarchyRowRole = 'root' | 'group' | 'object' | 'marker';\n\ninterface HierarchyRowPresentation {\n node: HierarchyNodeSnapshot;\n depth: number;\n role: HierarchyRowRole;\n selected: boolean;\n active: boolean;\n expanded: boolean;\n enabled: boolean | undefined;\n canToggleEnabled: boolean;\n childCount: number;\n}\n\nconst HIERARCHY_ROLE_ICONS: Record<HierarchyRowRole, LocalEditorIconName> = {\n root: 'root',\n group: 'group',\n object: 'object',\n marker: 'view-overlay',\n};\n\nexport interface LocalEditorHierarchyViewInput {\n title?: string;\n searchPlaceholder?: string;\n showCreateMenu?: boolean;\n viewModel: HierarchyViewModel;\n presentationRevision: string;\n rename: { id: string; value: string } | null;\n dragId: string | null;\n dropPreview: LocalEditorHierarchyDropPreview | null;\n rootDrop: boolean;\n searchQuery: string;\n}\n\nexport const LOCAL_EDITOR_HIERARCHY_ROW_HEIGHT = 26;\nconst HIERARCHY_VIRTUAL_OVERSCAN = 8;\n\ninterface HierarchyPanelShell {\n header: HTMLElement;\n title: HTMLElement;\n createMenu: HTMLElement;\n search: HTMLInputElement;\n viewport: HTMLElement;\n canvas: HTMLElement;\n input: LocalEditorHierarchyViewInput;\n rows: Map<string, HTMLElement>;\n selectedIdsRef: readonly string[] | null;\n selectedIdsSet: ReadonlySet<string>;\n domOrderKey: string;\n frame: number | null;\n}\n\nconst hierarchyPanelShells = new WeakMap<HTMLElement, HierarchyPanelShell>();\n\nexport function renderLocalEditorHierarchyPanel(\n doc: Document,\n panel: HTMLElement,\n input: LocalEditorHierarchyViewInput,\n): void {\n let shell = hierarchyPanelShells.get(panel);\n if (shell && !panel.contains(shell.viewport)) {\n hierarchyPanelShells.delete(panel);\n shell = undefined;\n }\n if (!shell) {\n clearElement(panel);\n configureLocalEditorDockPanelContent(panel);\n const createMenu = createToolbarButton(doc, '+ 添加', 'plus');\n createMenu.dataset.editorHierarchyCreateMenu = 'true';\n createMenu.title = '添加节点或本地资源';\n createMenu.setAttribute('aria-label', '添加节点或本地资源');\n createMenu.style.padding = '3px 7px';\n createMenu.style.fontSize = '11px';\n const header = createPanelHeader(doc, input.title ?? 'Hierarchy', [createMenu], 'hierarchy');\n const title = header.querySelector<HTMLElement>('h2 span:last-child') ?? header;\n const search = createHierarchySearchInput(doc, input.searchQuery, input.searchPlaceholder);\n search.classList.add('fps-editor-ui-search', 'fps-editor-ui-hierarchy-search');\n const viewport = createLocalEditorDockPanelViewport(doc, 'editorHierarchyTreeViewport');\n viewport.style.position = 'relative';\n viewport.dataset.editorHierarchyRootDrop = 'ready';\n const canvas = doc.createElement('div');\n canvas.className = 'fps-editor-ui-hierarchy-canvas';\n canvas.dataset.editorHierarchyVirtualCanvas = 'true';\n viewport.appendChild(canvas);\n panel.append(header, search, viewport);\n const created: HierarchyPanelShell = {\n header, title, createMenu, search, viewport, canvas, input, rows: new Map(),\n selectedIdsRef: null,\n selectedIdsSet: new Set(),\n domOrderKey: '',\n frame: null,\n };\n shell = created;\n hierarchyPanelShells.set(panel, created);\n viewport.addEventListener('scroll', () => {\n if (created.frame !== null) return;\n created.frame = doc.defaultView?.requestAnimationFrame(() => {\n created.frame = null;\n renderHierarchyVirtualWindow(doc, created);\n }) ?? null;\n if (created.frame === null) renderHierarchyVirtualWindow(doc, created);\n }, { passive: true });\n }\n if (!shell) return;\n shell.input = input;\n shell.title.textContent = input.title ?? 'Hierarchy';\n shell.createMenu.style.display = input.showCreateMenu === false ? 'none' : '';\n if (doc.activeElement !== shell.search && shell.search.value !== input.searchQuery) shell.search.value = input.searchQuery;\n shell.search.placeholder = input.searchPlaceholder ?? '搜索 GameObject 名称';\n shell.viewport.dataset.editorHierarchyRootDrop = input.rootDrop ? 'active' : 'ready';\n renderHierarchyVirtualWindow(doc, shell);\n syncLocalEditorHierarchyDropPreview(doc, panel, {\n dropPreview: input.dropPreview,\n rootDrop: input.rootDrop,\n });\n}\n\nfunction renderHierarchyVirtualWindow(doc: Document, shell: HierarchyPanelShell): void {\n const { input, viewport, canvas } = shell;\n const projection = input.viewModel.projection;\n const total = projection.totalCount;\n canvas.style.height = `${Math.max(1, total * LOCAL_EDITOR_HIERARCHY_ROW_HEIGHT)}px`;\n const viewportHeight = viewport.clientHeight || 520;\n const firstVisible = Math.floor(viewport.scrollTop / LOCAL_EDITOR_HIERARCHY_ROW_HEIGHT);\n const start = Math.max(0, firstVisible - HIERARCHY_VIRTUAL_OVERSCAN);\n const count = Math.min(\n total - start,\n Math.ceil(viewportHeight / LOCAL_EDITOR_HIERARCHY_ROW_HEIGHT) + HIERARCHY_VIRTUAL_OVERSCAN * 2,\n );\n const windowRows = projection.getWindow(start, Math.max(0, count));\n const selectedIds = resolveHierarchySelectedIdSet(shell, input.viewModel.snapshot.selectedIds);\n const retained = new Set<string>();\n const orderedRows: HTMLElement[] = [];\n for (let offset = 0; offset < windowRows.length; offset += 1) {\n const projected = windowRows[offset]!;\n const node = createHierarchyRowPresentation(input.viewModel, projected, selectedIds);\n if (!node) continue;\n retained.add(node.node.id);\n const row = ensureHierarchyVirtualRow(doc, shell, node);\n orderedRows.push(row);\n const index = start + offset;\n row.dataset.editorHierarchyVirtualIndex = String(index);\n row.style.position = 'absolute';\n row.style.left = '0';\n row.style.right = '0';\n row.style.top = `${index * LOCAL_EDITOR_HIERARCHY_ROW_HEIGHT}px`;\n row.style.height = `${LOCAL_EDITOR_HIERARCHY_ROW_HEIGHT}px`;\n if (row.parentElement !== canvas) canvas.appendChild(row);\n }\n const pinnedRenameId = input.rename?.id;\n if (pinnedRenameId && !retained.has(pinnedRenameId)) {\n const index = projection.indexOf(pinnedRenameId);\n const projected = projection.getRow(index);\n const node = projected ? createHierarchyRowPresentation(input.viewModel, projected, selectedIds) : null;\n const pinned = node ? ensureHierarchyVirtualRow(doc, shell, node) : null;\n if (pinned && index >= 0) {\n retained.add(pinnedRenameId);\n pinned.dataset.editorHierarchyVirtualIndex = String(index);\n pinned.style.position = 'absolute';\n pinned.style.left = '0';\n pinned.style.right = '0';\n pinned.style.top = `${index * LOCAL_EDITOR_HIERARCHY_ROW_HEIGHT}px`;\n pinned.style.height = `${LOCAL_EDITOR_HIERARCHY_ROW_HEIGHT}px`;\n }\n }\n const pinnedDragId = input.dragId;\n if (pinnedDragId && !retained.has(pinnedDragId)) {\n const index = projection.indexOf(pinnedDragId);\n const projected = projection.getRow(index);\n const node = projected ? createHierarchyRowPresentation(input.viewModel, projected, selectedIds) : null;\n const pinned = node ? ensureHierarchyVirtualRow(doc, shell, node) : null;\n if (pinned && index >= 0) {\n retained.add(pinnedDragId);\n pinned.dataset.editorHierarchyVirtualIndex = String(index);\n pinned.style.position = 'absolute';\n pinned.style.left = '0';\n pinned.style.right = '0';\n pinned.style.top = `${index * LOCAL_EDITOR_HIERARCHY_ROW_HEIGHT}px`;\n pinned.style.height = `${LOCAL_EDITOR_HIERARCHY_ROW_HEIGHT}px`;\n }\n }\n for (const [id, row] of shell.rows) {\n if (retained.has(id)) continue;\n row.remove();\n shell.rows.delete(id);\n }\n let domOrderKey = '';\n for (const row of orderedRows) {\n domOrderKey += `${row.dataset.editorHierarchyId ?? ''}@${row.dataset.editorHierarchyVirtualIndex ?? ''}\\u0000`;\n }\n if (domOrderKey !== shell.domOrderKey) {\n syncHierarchyVirtualRowDomOrder(canvas, orderedRows);\n shell.domOrderKey = domOrderKey;\n }\n let empty = canvas.querySelector<HTMLElement>('[data-editor-hierarchy-empty]');\n if (total === 0) {\n if (!empty) {\n empty = doc.createElement('div');\n empty.dataset.editorHierarchyEmpty = 'true';\n empty.style.cssText = 'position:absolute;inset:0;padding:8px;color:var(--fps-editor-muted);font-size:11px';\n canvas.appendChild(empty);\n }\n empty.textContent = input.searchQuery.trim() ? 'No matching GameObjects.' : 'No hierarchy nodes.';\n } else {\n empty?.remove();\n }\n}\n\nfunction resolveHierarchySelectedIdSet(\n shell: HierarchyPanelShell,\n selectedIds: readonly string[],\n): ReadonlySet<string> {\n if (shell.selectedIdsRef === selectedIds) return shell.selectedIdsSet;\n shell.selectedIdsRef = selectedIds;\n shell.selectedIdsSet = new Set(selectedIds);\n return shell.selectedIdsSet;\n}\n\nfunction syncHierarchyVirtualRowDomOrder(canvas: HTMLElement, orderedRows: readonly HTMLElement[]): void {\n let previous: HTMLElement | null = null;\n for (const row of orderedRows) {\n if (row.parentElement !== canvas) {\n if (previous?.nextSibling) canvas.insertBefore(row, previous.nextSibling);\n else canvas.appendChild(row);\n } else if (previous === null) {\n const firstRow = findFirstHierarchyVirtualRow(canvas);\n if (firstRow && firstRow !== row) canvas.insertBefore(row, firstRow);\n } else if (previous.nextSibling !== row) {\n canvas.insertBefore(row, previous.nextSibling);\n }\n previous = row;\n }\n}\n\nfunction findFirstHierarchyVirtualRow(canvas: HTMLElement): HTMLElement | null {\n for (const child of canvas.children) {\n if (child instanceof HTMLElement && child.dataset.editorHierarchyId) return child;\n }\n return null;\n}\n\nfunction ensureHierarchyVirtualRow(\n doc: Document,\n shell: HierarchyPanelShell,\n rowModel: HierarchyRowPresentation,\n): HTMLElement {\n const { input } = shell;\n const { node } = rowModel;\n const renderKey = [\n input.presentationRevision,\n node.label, rowModel.depth, rowModel.selected, rowModel.active, rowModel.expanded, rowModel.enabled,\n node.editorLocked, node.draggable, input.rename?.id === node.id ? input.rename.value : '',\n ].join('\\u0000');\n let row = shell.rows.get(node.id);\n if (!row || row.dataset.editorHierarchyRenderKey !== renderKey) {\n const replacement = renderHierarchyRow(doc, rowModel, input.rename);\n replacement.dataset.editorHierarchyRenderKey = renderKey;\n if (row) row.replaceWith(replacement);\n row = replacement;\n shell.rows.set(node.id, row);\n }\n return row;\n}\n\nfunction createHierarchyRowPresentation(\n viewModel: HierarchyViewModel,\n projected: HierarchyVisibleRow,\n selectedIds: ReadonlySet<string>,\n): HierarchyRowPresentation | null {\n const node = viewModel.snapshot.nodeById.get(projected.id);\n if (!node) return null;\n const childCount = viewModel.snapshot.childrenByParentId.get(node.id)?.length ?? 0;\n const enabled = node.authoredEnabled ?? node.editorVisible;\n const supportsToggle = node.authoredEnabled !== undefined\n ? viewModel.snapshot.capabilities.authoredEnabled === true\n : node.editorVisible !== undefined && viewModel.snapshot.capabilities.editorVisibility === true;\n return {\n node,\n depth: projected.depth,\n role: normalizeHierarchyRowRole(node.role),\n selected: selectedIds.has(node.id),\n active: viewModel.snapshot.activeId === node.id,\n expanded: childCount > 0 && (viewModel.state.searchQuery.trim().length > 0 || !viewModel.state.collapsedIds.has(node.id)),\n enabled,\n canToggleEnabled: supportsToggle && node.editorLocked !== true,\n childCount,\n };\n}\n\nfunction normalizeHierarchyRowRole(role: string | undefined): HierarchyRowRole {\n return role === 'root' || role === 'group' || role === 'marker' ? role : 'object';\n}\n\nexport function syncLocalEditorHierarchyDropPreview(\n doc: Document,\n panel: HTMLElement,\n input: Pick<LocalEditorHierarchyViewInput, 'dropPreview' | 'rootDrop'>,\n): void {\n const list = panel.querySelector<HTMLElement>('[data-editor-hierarchy-tree-viewport]');\n if (!list) return;\n syncLocalEditorStructuredDragPreview(doc, {\n root: list,\n preview: input.dropPreview,\n rootActive: input.rootDrop,\n reset: clearHierarchyDropPreviewDom,\n applyRootState: applyHierarchyRootDropPreviewState,\n findTarget: preview => findHierarchyPreviewRow(panel, preview.targetId),\n applyTargetPreview: applyHierarchyTargetDropPreview,\n });\n}\n\nfunction applyHierarchyRootDropPreviewState(\n list: HTMLElement,\n state: { rootActive: boolean; rootPreview: LocalEditorHierarchyDropPreview | null },\n): void {\n list.dataset.editorHierarchyRootDrop = state.rootActive ? 'active' : 'ready';\n const preview = state.rootPreview;\n if (!preview) return;\n list.dataset.editorHierarchyDropPreview = 'root';\n list.dataset.editorHierarchyDropPreviewValid = preview.valid ? 'true' : 'false';\n list.style.boxShadow = `inset 0 -3px 0 ${preview.valid ? 'var(--fps-editor-warn-strong)' : 'var(--fps-editor-muted)'}`;\n list.style.background = preview.valid ? 'var(--fps-editor-warn-soft)' : 'var(--fps-editor-field)';\n}\n\nfunction applyHierarchyTargetDropPreview(\n doc: Document,\n row: HTMLElement,\n preview: LocalEditorHierarchyDropPreview,\n): void {\n row.dataset.editorHierarchyDropPreview = preview.kind === 'inside' ? 'inside' : preview.placement;\n row.dataset.editorHierarchyDropPreviewValid = preview.valid ? 'true' : 'false';\n if (preview.kind === 'inside') {\n row.appendChild(renderHierarchyInsidePreview(doc, preview));\n return;\n }\n row.appendChild(renderHierarchyInsertionPreview(doc, preview));\n}\n\nfunction createHierarchySearchInput(\n doc: Document,\n value: string,\n placeholder = '搜索 GameObject 名称',\n): HTMLInputElement {\n const input = doc.createElement('input');\n input.type = 'search';\n input.dataset.editorHierarchySearch = 'true';\n input.placeholder = placeholder;\n input.value = value;\n input.style.cssText = [\n createEditorInputStyle(),\n 'width:100%',\n 'height:28px',\n 'margin:0 0 8px',\n 'outline:none',\n ].join(';');\n return input;\n}\n\nfunction renderHierarchyRow(\n doc: Document,\n rowModel: HierarchyRowPresentation,\n rename: { id: string; value: string } | null,\n): HTMLButtonElement {\n const { node } = rowModel;\n const isRenaming = rename?.id === node.id;\n const canHaveChildren = node.canHaveChildren && node.editorLocked !== true;\n const button = createTreeViewItem(doc, {\n id: node.id,\n label: node.label,\n depth: rowModel.depth,\n role: rowModel.role,\n selected: rowModel.selected,\n active: rowModel.active,\n locked: node.editorLocked,\n protected: false,\n selectable: node.selectable,\n enabled: rowModel.enabled,\n draggable: node.draggable,\n dropPlacement: null,\n });\n button.dataset.editorHierarchyCanHaveChildren = canHaveChildren ? 'true' : 'false';\n button.title = node.label;\n appendDisclosure(doc, button, rowModel);\n appendEnabledToggle(doc, button, rowModel);\n appendRoleBadge(doc, button, rowModel);\n if (isRenaming) appendRenameInput(doc, button, node, rename.value);\n else appendLabel(doc, button, rowModel);\n return button;\n}\n\nfunction appendEnabledToggle(\n doc: Document,\n button: HTMLButtonElement,\n rowModel: HierarchyRowPresentation,\n): void {\n const { node } = rowModel;\n if (typeof rowModel.enabled !== 'boolean') {\n const spacer = doc.createElement('span');\n spacer.style.cssText = 'width:18px;height:18px;flex:0 0 18px';\n button.appendChild(spacer);\n return;\n }\n const enabled = rowModel.enabled !== false;\n const toggle = doc.createElement('span');\n toggle.dataset.editorHierarchyEnabledToggle = node.id;\n toggle.dataset.editorHierarchyEnabled = enabled ? 'true' : 'false';\n const disabled = !rowModel.canToggleEnabled;\n toggle.dataset.editorHierarchyEnabledToggleDisabled = disabled ? 'true' : 'false';\n toggle.title = disabled\n ? 'This hierarchy item cannot be hidden.'\n : `${enabled ? 'Hide' : 'Show'} ${node.label}`;\n toggle.style.cssText = [\n 'width:18px',\n 'height:18px',\n 'flex:0 0 18px',\n 'display:inline-flex',\n 'align-items:center',\n 'justify-content:center',\n 'padding:0',\n 'border:1px solid transparent',\n 'border-radius:3px',\n 'background:transparent',\n `color:${enabled ? 'var(--fps-editor-muted-strong)' : 'var(--fps-editor-muted)'}`,\n `opacity:${disabled ? '0.45' : '1'}`,\n `cursor:${disabled ? 'not-allowed' : 'pointer'}`,\n ].join(';');\n toggle.appendChild(createLocalEditorIcon(doc, enabled ? 'eye' : 'eye-off', { size: 13, strokeWidth: 2.2 }));\n button.appendChild(toggle);\n}\n\nfunction renderHierarchyInsertionPreview(\n doc: Document,\n preview: LocalEditorHierarchyDropPreview,\n): HTMLDivElement {\n const line = doc.createElement('div');\n line.dataset.editorHierarchyInsertionPreview = 'true';\n line.dataset.editorHierarchyDropPreview = preview.placement;\n line.dataset.editorHierarchyDropPreviewValid = preview.valid ? 'true' : 'false';\n line.style.cssText = [\n 'position:absolute',\n 'left:0',\n 'right:0',\n preview.placement === 'before' ? 'top:-5px' : 'bottom:-5px',\n 'height:10px',\n 'pointer-events:none',\n 'z-index:4',\n ].join(';');\n const anchor = doc.createElement('span');\n anchor.style.cssText = [\n 'position:absolute',\n `left:${Math.max(2, 2 + preview.depth * 16)}px`,\n 'top:2px',\n 'width:6px',\n 'height:6px',\n 'border-radius:50%',\n `background:${preview.valid ? 'var(--fps-editor-warn-strong)' : 'var(--fps-editor-muted)'}`,\n `box-shadow:${preview.valid ? '0 0 0 2px rgba(0,0,0,0.35), 0 0 10px rgba(255,193,7,0.55)' : '0 0 0 2px rgba(0,0,0,0.25)'}`,\n ].join(';');\n const rule = doc.createElement('span');\n rule.style.cssText = [\n 'position:absolute',\n `left:${8 + preview.depth * 16}px`,\n 'right:4px',\n 'top:4px',\n 'height:3px',\n `background:${preview.valid ? 'var(--fps-editor-warn-strong)' : 'var(--fps-editor-muted)'}`,\n `opacity:${preview.valid ? '1' : '0.6'}`,\n `box-shadow:${preview.valid ? '0 0 0 1px rgba(0,0,0,0.25), 0 0 12px rgba(255,193,7,0.42)' : '0 0 0 1px rgba(0,0,0,0.18)'}`,\n ].join(';');\n line.appendChild(anchor);\n line.appendChild(rule);\n return line;\n}\n\nfunction renderHierarchyInsidePreview(\n doc: Document,\n preview: LocalEditorHierarchyDropPreview,\n): HTMLDivElement {\n const overlay = doc.createElement('div');\n overlay.dataset.editorHierarchyInsidePreview = 'true';\n overlay.dataset.editorHierarchyDropPreview = 'inside';\n overlay.dataset.editorHierarchyDropPreviewValid = preview.valid ? 'true' : 'false';\n overlay.style.cssText = [\n 'position:absolute',\n 'inset:0',\n 'pointer-events:none',\n 'z-index:1',\n `border:1px solid ${preview.valid ? 'var(--fps-editor-drop-target)' : 'var(--fps-editor-muted)'}`,\n `box-shadow:${preview.valid ? 'inset 4px 0 0 var(--fps-editor-drop-target), 0 0 0 1px rgba(255,255,255,0.08), 0 0 14px rgba(255,193,7,0.24)' : 'inset 4px 0 0 var(--fps-editor-muted)'}`,\n `background:${preview.valid ? 'rgba(255,193,7,0.09)' : 'rgba(255,255,255,0.04)'}`,\n ].join(';');\n return overlay;\n}\n\nfunction clearHierarchyDropPreviewDom(list: HTMLElement): void {\n list.style.boxShadow = '';\n list.style.background = '';\n delete list.dataset.editorHierarchyDropPreview;\n delete list.dataset.editorHierarchyDropPreviewValid;\n for (const preview of list.querySelectorAll<HTMLElement>('[data-editor-hierarchy-insertion-preview],[data-editor-hierarchy-inside-preview]')) {\n preview.remove();\n }\n for (const row of list.querySelectorAll<HTMLElement>('[data-editor-hierarchy-drop-preview]')) {\n delete row.dataset.editorHierarchyDropPreview;\n delete row.dataset.editorHierarchyDropPreviewValid;\n }\n}\n\nfunction findHierarchyPreviewRow(panel: HTMLElement, targetId: string | null): HTMLElement | null {\n if (!targetId) return null;\n for (const row of panel.querySelectorAll<HTMLElement>('[data-editor-hierarchy-id]')) {\n if (row.dataset.editorHierarchyId === targetId) return row;\n }\n return null;\n}\n\nfunction appendDisclosure(doc: Document, parent: HTMLElement, rowModel: HierarchyRowPresentation): void {\n const { node } = rowModel;\n const disclosure = doc.createElement('span');\n if (rowModel.childCount > 0) disclosure.dataset.editorHierarchyToggle = node.id;\n disclosure.style.cssText = [\n 'width:12px',\n 'flex:0 0 12px',\n 'display:inline-flex',\n 'align-items:center',\n 'justify-content:center',\n 'color:var(--fps-editor-muted)',\n 'font-size:10px',\n ].join(';');\n if (rowModel.childCount > 0) {\n disclosure.appendChild(createLocalEditorIcon(doc, rowModel.expanded ? 'chevron-down' : 'chevron-right', {\n size: 12,\n strokeWidth: 2.4,\n }));\n }\n parent.appendChild(disclosure);\n}\n\nfunction appendRoleBadge(doc: Document, parent: HTMLElement, rowModel: HierarchyRowPresentation): void {\n const { node } = rowModel;\n const badge = doc.createElement('span');\n const icon = isLocalEditorIconName(node.icon) ? node.icon : HIERARCHY_ROLE_ICONS[rowModel.role];\n const isMaterialSlot = icon === 'material-slot';\n const isPrefab = icon === 'prefab';\n badge.title = isMaterialSlot ? 'material slot' : isPrefab ? 'prefab' : rowModel.role;\n badge.style.cssText = [\n 'width:15px',\n 'height:15px',\n 'flex:0 0 15px',\n 'display:inline-flex',\n 'align-items:center',\n 'justify-content:center',\n 'border:1px solid var(--fps-editor-border)',\n 'border-radius:2px',\n `background:${isMaterialSlot ? 'var(--fps-editor-warn-soft)' : rowModel.role === 'root' ? 'var(--fps-editor-role-root-bg)' : rowModel.role === 'group' ? 'var(--fps-editor-role-group-bg)' : 'var(--fps-editor-role-object-bg)'}`,\n `border-color:${isMaterialSlot ? 'var(--fps-editor-warn-border)' : 'var(--fps-editor-border)'}`,\n `color:${isMaterialSlot ? 'var(--fps-editor-warn-strong)' : 'var(--fps-editor-muted-strong)'}`,\n 'font-size:9px',\n 'font-weight:900',\n ].join(';');\n badge.appendChild(createLocalEditorIcon(doc, icon, { size: 11, strokeWidth: 2.3 }));\n parent.appendChild(badge);\n}\n\nfunction appendLabel(doc: Document, parent: HTMLElement, rowModel: HierarchyRowPresentation): void {\n const { node } = rowModel;\n const label = doc.createElement('span');\n label.textContent = node.editorLocked ? `${node.label} [locked]` : node.label;\n label.style.cssText = 'min-width:0;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap';\n parent.appendChild(label);\n}\n\nfunction appendRenameInput(\n doc: Document,\n parent: HTMLElement,\n node: HierarchyNodeSnapshot,\n value: string,\n): void {\n const input = doc.createElement('input');\n input.dataset.editorHierarchyRenameInput = node.id;\n input.value = value;\n input.style.cssText = [\n 'min-width:0',\n 'flex:1',\n 'height:22px',\n 'box-sizing:border-box',\n 'border:1px solid var(--fps-editor-accent-strong)',\n 'border-radius:2px',\n 'background:var(--fps-editor-field)',\n 'color:var(--fps-editor-text-strong)',\n 'font-size:12px',\n 'font-weight:700',\n 'padding:2px 5px',\n 'outline:none',\n ].join(';');\n parent.appendChild(input);\n setTimeout(() => {\n // A kernel-driven draft render may already have restored focus and caret\n // onto this replacement input. Only select all for the initial rename.\n if (doc.activeElement === input) return;\n input.focus();\n input.select();\n }, 0);\n}\n"]}
1
+ {"version":3,"file":"local-editor-ui-hierarchy-view.js","sourceRoot":"","sources":["../src/local-editor-ui-hierarchy-view.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n createEditorInputStyle,\n createPanelHeader,\n createToolbarButton,\n createTreeViewItem,\n} from './local-editor-ui-primitives';\nimport {\n configureLocalEditorDockPanelContent,\n createLocalEditorDockPanelViewport,\n} from './local-editor-ui-dock-panel';\nimport { createLocalEditorIcon, isLocalEditorIconName, type LocalEditorIconName } from './local-editor-ui-icons';\nimport { clearElement } from './local-editor-ui-shared';\nimport type {\n HierarchyNodeSnapshot,\n HierarchyScopeSnapshot,\n HierarchyViewModel,\n HierarchyVisibleRow,\n} from '@fps-games/plugin-hierarchy';\nimport type { LocalEditorHierarchyDropPreview } from './local-editor-ui-hierarchy-drag-policy';\nimport { syncLocalEditorStructuredDragPreview } from './local-editor-ui-structured-drag-preview';\n\ntype HierarchyRowRole = 'root' | 'group' | 'object' | 'marker';\n\ninterface HierarchyRowPresentation {\n node: HierarchyNodeSnapshot;\n depth: number;\n role: HierarchyRowRole;\n selected: boolean;\n active: boolean;\n expanded: boolean;\n enabled: boolean | undefined;\n canToggleEnabled: boolean;\n childCount: number;\n}\n\nconst HIERARCHY_ROLE_ICONS: Record<HierarchyRowRole, LocalEditorIconName> = {\n root: 'root',\n group: 'group',\n object: 'object',\n marker: 'view-overlay',\n};\n\nexport interface LocalEditorHierarchyViewInput {\n title?: string;\n searchPlaceholder?: string;\n showCreateMenu?: boolean;\n viewModel: HierarchyViewModel;\n presentationRevision: string;\n rename: { id: string; value: string } | null;\n dragId: string | null;\n dropPreview: LocalEditorHierarchyDropPreview | null;\n rootDrop: boolean;\n searchQuery: string;\n}\n\nexport interface LocalEditorHierarchySelectionPresentationInput {\n viewModel: HierarchyViewModel;\n previousSelectedIds: readonly string[];\n previousActiveId: string | null;\n}\n\nexport const LOCAL_EDITOR_HIERARCHY_ROW_HEIGHT = 26;\nconst HIERARCHY_VIRTUAL_OVERSCAN = 8;\n\ninterface HierarchyPanelShell {\n header: HTMLElement;\n title: HTMLElement;\n createMenu: HTMLElement;\n search: HTMLInputElement;\n viewport: HTMLElement;\n canvas: HTMLElement;\n input: LocalEditorHierarchyViewInput;\n rows: Map<string, HTMLElement>;\n selectedIdsRef: readonly string[] | null;\n selectedIdsSet: ReadonlySet<string>;\n domOrderKey: string;\n frame: number | null;\n}\n\nconst hierarchyPanelShells = new WeakMap<HTMLElement, HierarchyPanelShell>();\n\nexport function renderLocalEditorHierarchyPanel(\n doc: Document,\n panel: HTMLElement,\n input: LocalEditorHierarchyViewInput,\n): void {\n let shell = hierarchyPanelShells.get(panel);\n if (shell && !panel.contains(shell.viewport)) {\n hierarchyPanelShells.delete(panel);\n shell = undefined;\n }\n if (!shell) {\n clearElement(panel);\n configureLocalEditorDockPanelContent(panel);\n const createMenu = createToolbarButton(doc, '+ 添加', 'plus');\n createMenu.dataset.editorHierarchyCreateMenu = 'true';\n createMenu.title = '添加节点或本地资源';\n createMenu.setAttribute('aria-label', '添加节点或本地资源');\n createMenu.style.padding = '3px 7px';\n createMenu.style.fontSize = '11px';\n const header = createPanelHeader(doc, input.title ?? 'Hierarchy', [createMenu], 'hierarchy');\n const title = header.querySelector<HTMLElement>('h2 span:last-child') ?? header;\n const search = createHierarchySearchInput(doc, input.searchQuery, input.searchPlaceholder);\n search.classList.add('fps-editor-ui-search', 'fps-editor-ui-hierarchy-search');\n const viewport = createLocalEditorDockPanelViewport(doc, 'editorHierarchyTreeViewport');\n viewport.style.position = 'relative';\n viewport.dataset.editorHierarchyRootDrop = 'ready';\n const canvas = doc.createElement('div');\n canvas.className = 'fps-editor-ui-hierarchy-canvas';\n canvas.dataset.editorHierarchyVirtualCanvas = 'true';\n viewport.appendChild(canvas);\n panel.append(header, search, viewport);\n const created: HierarchyPanelShell = {\n header, title, createMenu, search, viewport, canvas, input, rows: new Map(),\n selectedIdsRef: null,\n selectedIdsSet: new Set(),\n domOrderKey: '',\n frame: null,\n };\n shell = created;\n hierarchyPanelShells.set(panel, created);\n viewport.addEventListener('scroll', () => {\n if (created.frame !== null) return;\n created.frame = doc.defaultView?.requestAnimationFrame(() => {\n created.frame = null;\n renderHierarchyVirtualWindow(doc, created);\n }) ?? null;\n if (created.frame === null) renderHierarchyVirtualWindow(doc, created);\n }, { passive: true });\n }\n if (!shell) return;\n shell.input = input;\n shell.title.textContent = input.title ?? 'Hierarchy';\n shell.createMenu.style.display = input.showCreateMenu === false ? 'none' : '';\n if (doc.activeElement !== shell.search && shell.search.value !== input.searchQuery) shell.search.value = input.searchQuery;\n shell.search.placeholder = input.searchPlaceholder ?? '搜索 GameObject 名称';\n shell.viewport.dataset.editorHierarchyRootDrop = input.rootDrop ? 'active' : 'ready';\n renderHierarchyVirtualWindow(doc, shell);\n syncLocalEditorHierarchyDropPreview(doc, panel, {\n dropPreview: input.dropPreview,\n rootDrop: input.rootDrop,\n });\n}\n\nexport function syncLocalEditorHierarchySelectionPresentation(\n panel: HTMLElement,\n input: LocalEditorHierarchySelectionPresentationInput,\n): boolean {\n const shell = hierarchyPanelShells.get(panel);\n if (!shell || !panel.contains(shell.viewport)) return false;\n const selectedIds = input.viewModel.snapshot.selectedIds;\n shell.input = { ...shell.input, viewModel: input.viewModel };\n shell.selectedIdsRef = selectedIds;\n shell.selectedIdsSet = new Set(selectedIds);\n syncLocalEditorHierarchyMountedRowSelectionPresentation(\n shell.rows,\n input.previousSelectedIds,\n input.previousActiveId,\n selectedIds,\n input.viewModel.snapshot.activeId,\n );\n return true;\n}\n\nexport function syncLocalEditorHierarchyMountedRowSelectionPresentation(\n rows: ReadonlyMap<string, HTMLElement>,\n previousSelectedIds: readonly string[],\n previousActiveId: string | null,\n selectedIds: readonly string[],\n activeId: string | null,\n): void {\n const selectedIdSet = new Set(selectedIds);\n const changedIds = new Set([\n ...previousSelectedIds,\n ...selectedIds,\n ...(previousActiveId ? [previousActiveId] : []),\n ...(activeId ? [activeId] : []),\n ]);\n for (const id of changedIds) {\n const row = rows.get(id);\n if (!row) continue;\n syncHierarchyRowSelectionPresentation(row, selectedIdSet.has(id), activeId === id);\n }\n}\n\nexport function applyLocalEditorHierarchyLabelPresentation(\n kernel: LocalEditorHierarchyLabelPresentationKernel,\n rows: ReadonlyMap<string, HTMLElement>,\n labels: Readonly<Record<string, string>>,\n): HierarchyScopeSnapshot | null {\n const snapshot = kernel.patchNodeLabels(labels);\n if (!snapshot) return null;\n for (const id of Object.keys(labels)) {\n const node = snapshot.nodeById.get(id);\n if (!node) return null;\n const row = rows.get(id);\n if (row) syncHierarchyRowLabelPresentation(row, node);\n }\n return snapshot;\n}\n\nexport function syncLocalEditorHierarchyLabelPresentation(\n panel: HTMLElement,\n kernel: LocalEditorHierarchyLabelPresentationKernel,\n labels: Readonly<Record<string, string>>,\n): boolean {\n const shell = hierarchyPanelShells.get(panel);\n if (!shell || !panel.contains(shell.viewport)) return false;\n const snapshot = applyLocalEditorHierarchyLabelPresentation(kernel, shell.rows, labels);\n const previousViewModel = shell.input.viewModel;\n if (!snapshot || !canApplyLocalEditorHierarchyLabelPresentationSnapshot(\n previousViewModel.snapshot,\n snapshot,\n )) {\n if (/(?:^|[?&])debugGizmo=(?:1|true)(?:&|$)/.test(\n panel.ownerDocument.defaultView?.location.search ?? '',\n )) {\n console.info('[fps-editor:presentation]', 'hierarchy-label.rejected', {\n previous: createHierarchyLabelPresentationAuthorityDiagnostic(previousViewModel.snapshot),\n next: snapshot\n ? createHierarchyLabelPresentationAuthorityDiagnostic(snapshot)\n : null,\n labelIds: Object.keys(labels),\n });\n }\n return false;\n }\n shell.input = {\n ...shell.input,\n viewModel: {\n ...previousViewModel,\n snapshot,\n },\n };\n return true;\n}\n\nfunction createHierarchyLabelPresentationAuthorityDiagnostic(\n snapshot: Pick<\n HierarchyScopeSnapshot,\n 'scopeKey' | 'revision' | 'structureRevision' | 'selectedIds' | 'activeId'\n >,\n): Record<string, unknown> {\n return {\n scopeKey: snapshot.scopeKey,\n revision: snapshot.revision,\n structureRevision: snapshot.structureRevision,\n selectedIds: snapshot.selectedIds,\n activeId: snapshot.activeId,\n };\n}\n\nexport function canApplyLocalEditorHierarchyLabelPresentationSnapshot(\n previous: Pick<\n HierarchyScopeSnapshot,\n 'scopeKey' | 'revision' | 'structureRevision' | 'selectedIds' | 'activeId'\n >,\n next: Pick<\n HierarchyScopeSnapshot,\n 'scopeKey' | 'revision' | 'structureRevision' | 'selectedIds' | 'activeId'\n >,\n): boolean {\n return next.scopeKey === previous.scopeKey\n && next.revision >= previous.revision\n && next.structureRevision === previous.structureRevision\n && next.activeId === previous.activeId\n && arraysEqual(next.selectedIds, previous.selectedIds);\n}\n\nexport interface LocalEditorHierarchyLabelPresentationKernel {\n patchNodeLabels(labels: Readonly<Record<string, string>>): HierarchyScopeSnapshot | null;\n}\n\nfunction arraysEqual(left: readonly string[], right: readonly string[]): boolean {\n return left.length === right.length && left.every((value, index) => value === right[index]);\n}\n\n\nfunction renderHierarchyVirtualWindow(doc: Document, shell: HierarchyPanelShell): void {\n const { input, viewport, canvas } = shell;\n const projection = input.viewModel.projection;\n const total = projection.totalCount;\n canvas.style.height = `${Math.max(1, total * LOCAL_EDITOR_HIERARCHY_ROW_HEIGHT)}px`;\n const viewportHeight = viewport.clientHeight || 520;\n const firstVisible = Math.floor(viewport.scrollTop / LOCAL_EDITOR_HIERARCHY_ROW_HEIGHT);\n const start = Math.max(0, firstVisible - HIERARCHY_VIRTUAL_OVERSCAN);\n const count = Math.min(\n total - start,\n Math.ceil(viewportHeight / LOCAL_EDITOR_HIERARCHY_ROW_HEIGHT) + HIERARCHY_VIRTUAL_OVERSCAN * 2,\n );\n const windowRows = projection.getWindow(start, Math.max(0, count));\n const selectedIds = resolveHierarchySelectedIdSet(shell, input.viewModel.snapshot.selectedIds);\n const retained = new Set<string>();\n const orderedRows: HTMLElement[] = [];\n for (let offset = 0; offset < windowRows.length; offset += 1) {\n const projected = windowRows[offset]!;\n const node = createHierarchyRowPresentation(input.viewModel, projected, selectedIds);\n if (!node) continue;\n retained.add(node.node.id);\n const row = ensureHierarchyVirtualRow(doc, shell, node);\n orderedRows.push(row);\n const index = start + offset;\n row.dataset.editorHierarchyVirtualIndex = String(index);\n row.style.position = 'absolute';\n row.style.left = '0';\n row.style.right = '0';\n row.style.top = `${index * LOCAL_EDITOR_HIERARCHY_ROW_HEIGHT}px`;\n row.style.height = `${LOCAL_EDITOR_HIERARCHY_ROW_HEIGHT}px`;\n if (row.parentElement !== canvas) canvas.appendChild(row);\n }\n const pinnedRenameId = input.rename?.id;\n if (pinnedRenameId && !retained.has(pinnedRenameId)) {\n const index = projection.indexOf(pinnedRenameId);\n const projected = projection.getRow(index);\n const node = projected ? createHierarchyRowPresentation(input.viewModel, projected, selectedIds) : null;\n const pinned = node ? ensureHierarchyVirtualRow(doc, shell, node) : null;\n if (pinned && index >= 0) {\n retained.add(pinnedRenameId);\n pinned.dataset.editorHierarchyVirtualIndex = String(index);\n pinned.style.position = 'absolute';\n pinned.style.left = '0';\n pinned.style.right = '0';\n pinned.style.top = `${index * LOCAL_EDITOR_HIERARCHY_ROW_HEIGHT}px`;\n pinned.style.height = `${LOCAL_EDITOR_HIERARCHY_ROW_HEIGHT}px`;\n }\n }\n const pinnedDragId = input.dragId;\n if (pinnedDragId && !retained.has(pinnedDragId)) {\n const index = projection.indexOf(pinnedDragId);\n const projected = projection.getRow(index);\n const node = projected ? createHierarchyRowPresentation(input.viewModel, projected, selectedIds) : null;\n const pinned = node ? ensureHierarchyVirtualRow(doc, shell, node) : null;\n if (pinned && index >= 0) {\n retained.add(pinnedDragId);\n pinned.dataset.editorHierarchyVirtualIndex = String(index);\n pinned.style.position = 'absolute';\n pinned.style.left = '0';\n pinned.style.right = '0';\n pinned.style.top = `${index * LOCAL_EDITOR_HIERARCHY_ROW_HEIGHT}px`;\n pinned.style.height = `${LOCAL_EDITOR_HIERARCHY_ROW_HEIGHT}px`;\n }\n }\n for (const [id, row] of shell.rows) {\n if (retained.has(id)) continue;\n row.remove();\n shell.rows.delete(id);\n }\n let domOrderKey = '';\n for (const row of orderedRows) {\n domOrderKey += `${row.dataset.editorHierarchyId ?? ''}@${row.dataset.editorHierarchyVirtualIndex ?? ''}\\u0000`;\n }\n if (domOrderKey !== shell.domOrderKey) {\n syncHierarchyVirtualRowDomOrder(canvas, orderedRows);\n shell.domOrderKey = domOrderKey;\n }\n let empty = canvas.querySelector<HTMLElement>('[data-editor-hierarchy-empty]');\n if (total === 0) {\n if (!empty) {\n empty = doc.createElement('div');\n empty.dataset.editorHierarchyEmpty = 'true';\n empty.style.cssText = 'position:absolute;inset:0;padding:8px;color:var(--fps-editor-muted);font-size:11px';\n canvas.appendChild(empty);\n }\n empty.textContent = input.searchQuery.trim() ? 'No matching GameObjects.' : 'No hierarchy nodes.';\n } else {\n empty?.remove();\n }\n}\n\nfunction resolveHierarchySelectedIdSet(\n shell: HierarchyPanelShell,\n selectedIds: readonly string[],\n): ReadonlySet<string> {\n if (shell.selectedIdsRef === selectedIds) return shell.selectedIdsSet;\n shell.selectedIdsRef = selectedIds;\n shell.selectedIdsSet = new Set(selectedIds);\n return shell.selectedIdsSet;\n}\n\nfunction syncHierarchyVirtualRowDomOrder(canvas: HTMLElement, orderedRows: readonly HTMLElement[]): void {\n let previous: HTMLElement | null = null;\n for (const row of orderedRows) {\n if (row.parentElement !== canvas) {\n if (previous?.nextSibling) canvas.insertBefore(row, previous.nextSibling);\n else canvas.appendChild(row);\n } else if (previous === null) {\n const firstRow = findFirstHierarchyVirtualRow(canvas);\n if (firstRow && firstRow !== row) canvas.insertBefore(row, firstRow);\n } else if (previous.nextSibling !== row) {\n canvas.insertBefore(row, previous.nextSibling);\n }\n previous = row;\n }\n}\n\nfunction findFirstHierarchyVirtualRow(canvas: HTMLElement): HTMLElement | null {\n for (const child of canvas.children) {\n if (child instanceof HTMLElement && child.dataset.editorHierarchyId) return child;\n }\n return null;\n}\n\nfunction ensureHierarchyVirtualRow(\n doc: Document,\n shell: HierarchyPanelShell,\n rowModel: HierarchyRowPresentation,\n): HTMLElement {\n const { input } = shell;\n const { node } = rowModel;\n const renderKey = [\n input.presentationRevision,\n rowModel.depth, rowModel.expanded, rowModel.enabled,\n node.editorLocked, node.draggable, input.rename?.id === node.id ? input.rename.value : '',\n ].join('\\u0000');\n let row = shell.rows.get(node.id);\n if (!row || row.dataset.editorHierarchyRenderKey !== renderKey) {\n const replacement = renderHierarchyRow(doc, rowModel, input.rename);\n replacement.dataset.editorHierarchyRenderKey = renderKey;\n if (row) row.replaceWith(replacement);\n row = replacement;\n shell.rows.set(node.id, row);\n }\n syncHierarchyRowLabelPresentation(row, node);\n syncHierarchyRowSelectionPresentation(row, rowModel.selected, rowModel.active);\n return row;\n}\n\nfunction syncHierarchyRowLabelPresentation(\n row: HTMLElement,\n node: HierarchyNodeSnapshot,\n): void {\n const label = row.querySelector<HTMLElement>('[data-editor-hierarchy-label]');\n if (label) label.textContent = node.editorLocked ? `${node.label} [locked]` : node.label;\n row.title = node.label;\n}\n\nfunction syncHierarchyRowSelectionPresentation(\n row: HTMLElement,\n selected: boolean,\n active: boolean,\n): void {\n row.dataset.selected = selected ? 'true' : 'false';\n row.dataset.active = active ? 'true' : 'false';\n}\n\nfunction createHierarchyRowPresentation(\n viewModel: HierarchyViewModel,\n projected: HierarchyVisibleRow,\n selectedIds: ReadonlySet<string>,\n): HierarchyRowPresentation | null {\n const node = viewModel.snapshot.nodeById.get(projected.id);\n if (!node) return null;\n const childCount = viewModel.snapshot.childrenByParentId.get(node.id)?.length ?? 0;\n const enabled = node.authoredEnabled ?? node.editorVisible;\n const supportsToggle = node.authoredEnabled !== undefined\n ? viewModel.snapshot.capabilities.authoredEnabled === true\n : node.editorVisible !== undefined && viewModel.snapshot.capabilities.editorVisibility === true;\n return {\n node,\n depth: projected.depth,\n role: normalizeHierarchyRowRole(node.role),\n selected: selectedIds.has(node.id),\n active: viewModel.snapshot.activeId === node.id,\n expanded: childCount > 0 && (viewModel.state.searchQuery.trim().length > 0 || !viewModel.state.collapsedIds.has(node.id)),\n enabled,\n canToggleEnabled: supportsToggle && node.editorLocked !== true,\n childCount,\n };\n}\n\nfunction normalizeHierarchyRowRole(role: string | undefined): HierarchyRowRole {\n return role === 'root' || role === 'group' || role === 'marker' ? role : 'object';\n}\n\nexport function syncLocalEditorHierarchyDropPreview(\n doc: Document,\n panel: HTMLElement,\n input: Pick<LocalEditorHierarchyViewInput, 'dropPreview' | 'rootDrop'>,\n): void {\n const list = panel.querySelector<HTMLElement>('[data-editor-hierarchy-tree-viewport]');\n if (!list) return;\n syncLocalEditorStructuredDragPreview(doc, {\n root: list,\n preview: input.dropPreview,\n rootActive: input.rootDrop,\n reset: clearHierarchyDropPreviewDom,\n applyRootState: applyHierarchyRootDropPreviewState,\n findTarget: preview => findHierarchyPreviewRow(panel, preview.targetId),\n applyTargetPreview: applyHierarchyTargetDropPreview,\n });\n}\n\nfunction applyHierarchyRootDropPreviewState(\n list: HTMLElement,\n state: { rootActive: boolean; rootPreview: LocalEditorHierarchyDropPreview | null },\n): void {\n list.dataset.editorHierarchyRootDrop = state.rootActive ? 'active' : 'ready';\n const preview = state.rootPreview;\n if (!preview) return;\n list.dataset.editorHierarchyDropPreview = 'root';\n list.dataset.editorHierarchyDropPreviewValid = preview.valid ? 'true' : 'false';\n list.style.boxShadow = `inset 0 -3px 0 ${preview.valid ? 'var(--fps-editor-warn-strong)' : 'var(--fps-editor-muted)'}`;\n list.style.background = preview.valid ? 'var(--fps-editor-warn-soft)' : 'var(--fps-editor-field)';\n}\n\nfunction applyHierarchyTargetDropPreview(\n doc: Document,\n row: HTMLElement,\n preview: LocalEditorHierarchyDropPreview,\n): void {\n row.dataset.editorHierarchyDropPreview = preview.kind === 'inside' ? 'inside' : preview.placement;\n row.dataset.editorHierarchyDropPreviewValid = preview.valid ? 'true' : 'false';\n if (preview.kind === 'inside') {\n row.appendChild(renderHierarchyInsidePreview(doc, preview));\n return;\n }\n row.appendChild(renderHierarchyInsertionPreview(doc, preview));\n}\n\nfunction createHierarchySearchInput(\n doc: Document,\n value: string,\n placeholder = '搜索 GameObject 名称',\n): HTMLInputElement {\n const input = doc.createElement('input');\n input.type = 'search';\n input.dataset.editorHierarchySearch = 'true';\n input.placeholder = placeholder;\n input.value = value;\n input.style.cssText = [\n createEditorInputStyle(),\n 'width:100%',\n 'height:28px',\n 'margin:0 0 8px',\n 'outline:none',\n ].join(';');\n return input;\n}\n\nfunction renderHierarchyRow(\n doc: Document,\n rowModel: HierarchyRowPresentation,\n rename: { id: string; value: string } | null,\n): HTMLButtonElement {\n const { node } = rowModel;\n const isRenaming = rename?.id === node.id;\n const canHaveChildren = node.canHaveChildren && node.editorLocked !== true;\n const button = createTreeViewItem(doc, {\n id: node.id,\n label: node.label,\n depth: rowModel.depth,\n role: rowModel.role,\n selected: rowModel.selected,\n active: rowModel.active,\n locked: node.editorLocked,\n protected: false,\n selectable: node.selectable,\n enabled: rowModel.enabled,\n draggable: node.draggable,\n dropPlacement: null,\n });\n button.dataset.editorHierarchyCanHaveChildren = canHaveChildren ? 'true' : 'false';\n button.title = node.label;\n appendDisclosure(doc, button, rowModel);\n appendEnabledToggle(doc, button, rowModel);\n appendRoleBadge(doc, button, rowModel);\n if (isRenaming) appendRenameInput(doc, button, node, rename.value);\n else appendLabel(doc, button, rowModel);\n return button;\n}\n\nfunction appendEnabledToggle(\n doc: Document,\n button: HTMLButtonElement,\n rowModel: HierarchyRowPresentation,\n): void {\n const { node } = rowModel;\n if (typeof rowModel.enabled !== 'boolean') {\n const spacer = doc.createElement('span');\n spacer.style.cssText = 'width:18px;height:18px;flex:0 0 18px';\n button.appendChild(spacer);\n return;\n }\n const enabled = rowModel.enabled !== false;\n const toggle = doc.createElement('span');\n toggle.dataset.editorHierarchyEnabledToggle = node.id;\n toggle.dataset.editorHierarchyEnabled = enabled ? 'true' : 'false';\n const disabled = !rowModel.canToggleEnabled;\n toggle.dataset.editorHierarchyEnabledToggleDisabled = disabled ? 'true' : 'false';\n toggle.title = disabled\n ? 'This hierarchy item cannot be hidden.'\n : `${enabled ? 'Hide' : 'Show'} ${node.label}`;\n toggle.style.cssText = [\n 'width:18px',\n 'height:18px',\n 'flex:0 0 18px',\n 'display:inline-flex',\n 'align-items:center',\n 'justify-content:center',\n 'padding:0',\n 'border:1px solid transparent',\n 'border-radius:3px',\n 'background:transparent',\n `color:${enabled ? 'var(--fps-editor-muted-strong)' : 'var(--fps-editor-muted)'}`,\n `opacity:${disabled ? '0.45' : '1'}`,\n `cursor:${disabled ? 'not-allowed' : 'pointer'}`,\n ].join(';');\n toggle.appendChild(createLocalEditorIcon(doc, enabled ? 'eye' : 'eye-off', { size: 13, strokeWidth: 2.2 }));\n button.appendChild(toggle);\n}\n\nfunction renderHierarchyInsertionPreview(\n doc: Document,\n preview: LocalEditorHierarchyDropPreview,\n): HTMLDivElement {\n const line = doc.createElement('div');\n line.dataset.editorHierarchyInsertionPreview = 'true';\n line.dataset.editorHierarchyDropPreview = preview.placement;\n line.dataset.editorHierarchyDropPreviewValid = preview.valid ? 'true' : 'false';\n line.style.cssText = [\n 'position:absolute',\n 'left:0',\n 'right:0',\n preview.placement === 'before' ? 'top:-5px' : 'bottom:-5px',\n 'height:10px',\n 'pointer-events:none',\n 'z-index:4',\n ].join(';');\n const anchor = doc.createElement('span');\n anchor.style.cssText = [\n 'position:absolute',\n `left:${Math.max(2, 2 + preview.depth * 16)}px`,\n 'top:2px',\n 'width:6px',\n 'height:6px',\n 'border-radius:50%',\n `background:${preview.valid ? 'var(--fps-editor-warn-strong)' : 'var(--fps-editor-muted)'}`,\n `box-shadow:${preview.valid ? '0 0 0 2px rgba(0,0,0,0.35), 0 0 10px rgba(255,193,7,0.55)' : '0 0 0 2px rgba(0,0,0,0.25)'}`,\n ].join(';');\n const rule = doc.createElement('span');\n rule.style.cssText = [\n 'position:absolute',\n `left:${8 + preview.depth * 16}px`,\n 'right:4px',\n 'top:4px',\n 'height:3px',\n `background:${preview.valid ? 'var(--fps-editor-warn-strong)' : 'var(--fps-editor-muted)'}`,\n `opacity:${preview.valid ? '1' : '0.6'}`,\n `box-shadow:${preview.valid ? '0 0 0 1px rgba(0,0,0,0.25), 0 0 12px rgba(255,193,7,0.42)' : '0 0 0 1px rgba(0,0,0,0.18)'}`,\n ].join(';');\n line.appendChild(anchor);\n line.appendChild(rule);\n return line;\n}\n\nfunction renderHierarchyInsidePreview(\n doc: Document,\n preview: LocalEditorHierarchyDropPreview,\n): HTMLDivElement {\n const overlay = doc.createElement('div');\n overlay.dataset.editorHierarchyInsidePreview = 'true';\n overlay.dataset.editorHierarchyDropPreview = 'inside';\n overlay.dataset.editorHierarchyDropPreviewValid = preview.valid ? 'true' : 'false';\n overlay.style.cssText = [\n 'position:absolute',\n 'inset:0',\n 'pointer-events:none',\n 'z-index:1',\n `border:1px solid ${preview.valid ? 'var(--fps-editor-drop-target)' : 'var(--fps-editor-muted)'}`,\n `box-shadow:${preview.valid ? 'inset 4px 0 0 var(--fps-editor-drop-target), 0 0 0 1px rgba(255,255,255,0.08), 0 0 14px rgba(255,193,7,0.24)' : 'inset 4px 0 0 var(--fps-editor-muted)'}`,\n `background:${preview.valid ? 'rgba(255,193,7,0.09)' : 'rgba(255,255,255,0.04)'}`,\n ].join(';');\n return overlay;\n}\n\nfunction clearHierarchyDropPreviewDom(list: HTMLElement): void {\n list.style.boxShadow = '';\n list.style.background = '';\n delete list.dataset.editorHierarchyDropPreview;\n delete list.dataset.editorHierarchyDropPreviewValid;\n for (const preview of list.querySelectorAll<HTMLElement>('[data-editor-hierarchy-insertion-preview],[data-editor-hierarchy-inside-preview]')) {\n preview.remove();\n }\n for (const row of list.querySelectorAll<HTMLElement>('[data-editor-hierarchy-drop-preview]')) {\n delete row.dataset.editorHierarchyDropPreview;\n delete row.dataset.editorHierarchyDropPreviewValid;\n }\n}\n\nfunction findHierarchyPreviewRow(panel: HTMLElement, targetId: string | null): HTMLElement | null {\n if (!targetId) return null;\n for (const row of panel.querySelectorAll<HTMLElement>('[data-editor-hierarchy-id]')) {\n if (row.dataset.editorHierarchyId === targetId) return row;\n }\n return null;\n}\n\nfunction appendDisclosure(doc: Document, parent: HTMLElement, rowModel: HierarchyRowPresentation): void {\n const { node } = rowModel;\n const disclosure = doc.createElement('span');\n if (rowModel.childCount > 0) disclosure.dataset.editorHierarchyToggle = node.id;\n disclosure.style.cssText = [\n 'width:12px',\n 'flex:0 0 12px',\n 'display:inline-flex',\n 'align-items:center',\n 'justify-content:center',\n 'color:var(--fps-editor-muted)',\n 'font-size:10px',\n ].join(';');\n if (rowModel.childCount > 0) {\n disclosure.appendChild(createLocalEditorIcon(doc, rowModel.expanded ? 'chevron-down' : 'chevron-right', {\n size: 12,\n strokeWidth: 2.4,\n }));\n }\n parent.appendChild(disclosure);\n}\n\nfunction appendRoleBadge(doc: Document, parent: HTMLElement, rowModel: HierarchyRowPresentation): void {\n const { node } = rowModel;\n const badge = doc.createElement('span');\n const icon = isLocalEditorIconName(node.icon) ? node.icon : HIERARCHY_ROLE_ICONS[rowModel.role];\n const isMaterialSlot = icon === 'material-slot';\n const isPrefab = icon === 'prefab';\n badge.title = isMaterialSlot ? 'material slot' : isPrefab ? 'prefab' : rowModel.role;\n badge.style.cssText = [\n 'width:15px',\n 'height:15px',\n 'flex:0 0 15px',\n 'display:inline-flex',\n 'align-items:center',\n 'justify-content:center',\n 'border:1px solid var(--fps-editor-border)',\n 'border-radius:2px',\n `background:${isMaterialSlot ? 'var(--fps-editor-warn-soft)' : rowModel.role === 'root' ? 'var(--fps-editor-role-root-bg)' : rowModel.role === 'group' ? 'var(--fps-editor-role-group-bg)' : 'var(--fps-editor-role-object-bg)'}`,\n `border-color:${isMaterialSlot ? 'var(--fps-editor-warn-border)' : 'var(--fps-editor-border)'}`,\n `color:${isMaterialSlot ? 'var(--fps-editor-warn-strong)' : 'var(--fps-editor-muted-strong)'}`,\n 'font-size:9px',\n 'font-weight:900',\n ].join(';');\n badge.appendChild(createLocalEditorIcon(doc, icon, { size: 11, strokeWidth: 2.3 }));\n parent.appendChild(badge);\n}\n\nfunction appendLabel(doc: Document, parent: HTMLElement, rowModel: HierarchyRowPresentation): void {\n const { node } = rowModel;\n const label = doc.createElement('span');\n label.dataset.editorHierarchyLabel = 'true';\n label.textContent = node.editorLocked ? `${node.label} [locked]` : node.label;\n label.style.cssText = 'min-width:0;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap';\n parent.appendChild(label);\n}\n\nfunction appendRenameInput(\n doc: Document,\n parent: HTMLElement,\n node: HierarchyNodeSnapshot,\n value: string,\n): void {\n const input = doc.createElement('input');\n input.dataset.editorHierarchyRenameInput = node.id;\n input.value = value;\n input.style.cssText = [\n 'min-width:0',\n 'flex:1',\n 'height:22px',\n 'box-sizing:border-box',\n 'border:1px solid var(--fps-editor-accent-strong)',\n 'border-radius:2px',\n 'background:var(--fps-editor-field)',\n 'color:var(--fps-editor-text-strong)',\n 'font-size:12px',\n 'font-weight:700',\n 'padding:2px 5px',\n 'outline:none',\n ].join(';');\n parent.appendChild(input);\n setTimeout(() => {\n // A kernel-driven draft render may already have restored focus and caret\n // onto this replacement input. Only select all for the initial rename.\n if (doc.activeElement === input) return;\n input.focus();\n input.select();\n }, 0);\n}\n"]}
@@ -1,6 +1,13 @@
1
1
  import { type EditorUiMount, type EditorUiLayerHost } from '@fps-games/editor-ui';
2
- import type { LocalEditorAssetBrowserTab, LocalEditorBottomDockTab, LocalEditorBrowserInspectorConflictStrategy, LocalEditorBrowserInspectorControlBindingOptions, LocalEditorBrowserInspectorControlRegistration, LocalEditorBrowserInspectorControlRenderContext, LocalEditorBrowserInspectorEffectMode, LocalEditorBrowserInspectorObject, LocalEditorBrowserInspectorProperty, LocalEditorBrowserInspectorSection, LocalEditorBrowserUiAssetItem, LocalEditorBrowserUiState, LocalEditorRightDockTab, LocalEditorWorkbenchPanelDescriptor } from './local-editor-ui-types';
2
+ import type { LocalEditorAssetBrowserTab, LocalEditorBottomDockTab, LocalEditorBrowserInspectorConflictStrategy, LocalEditorBrowserInspectorControlBindingOptions, LocalEditorBrowserInspectorControlRegistration, LocalEditorBrowserInspectorControlRenderContext, LocalEditorBrowserInspectorEffectMode, LocalEditorBrowserInspectorObject, LocalEditorBrowserInspectorPresentationPatch, LocalEditorBrowserInspectorProperty, LocalEditorBrowserInspectorSection, LocalEditorBrowserUiAssetItem, LocalEditorBrowserUiState, LocalEditorRightDockTab, LocalEditorWorkbenchPanelDescriptor } from './local-editor-ui-types';
3
3
  import { type LocalEditorAssetFilesystemViewMode } from './local-editor-asset-filesystem';
4
+ /**
5
+ * Updates already-mounted value controls only. A miss intentionally does not
6
+ * rebuild the Inspector: the next authoritative render owns reconciliation.
7
+ */
8
+ export declare function applyInspectorPresentationPatches(panel: HTMLElement, patches: readonly LocalEditorBrowserInspectorPresentationPatch[]): boolean;
9
+ /** Updates the selected Inspector's summary label without rebuilding controls. */
10
+ export declare function applyInspectorSummaryLabel(panel: HTMLElement, label: string): boolean;
4
11
  export declare function registerInspectorUiMount<T extends EditorUiMount>(mount: T): T;
5
12
  export declare function disposeInspectorPanelUi(panel: HTMLElement): void;
6
13
  export type LocalEditorAssetBrowserViewMode = LocalEditorAssetFilesystemViewMode;
@@ -1 +1 @@
1
- {"version":3,"file":"local-editor-ui-panels.d.ts","sourceRoot":"","sources":["../src/local-editor-ui-panels.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"local-editor-ui-panels.d.ts","sourceRoot":"","sources":["../src/local-editor-ui-panels.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,68 @@ import { createLocalEditorBrowserInspectorVectorCopyPayload, } from './local-edi
9
9
  import { resolveLocalEditorBrowserInspectorVectorGroupAxisFromPropertyPath, resolveLocalEditorBrowserInspectorVectorGroupPathFromProperties, } from './local-editor-inspector-groups.js';
10
10
  const inspectorUiMounts = new WeakMap();
11
11
  const inspectorPanelUiPendingDisposals = new WeakMap();
12
+ const inspectorValueControls = new WeakMap();
13
+ const inspectorPanelPresentationControls = new WeakMap();
14
+ function inspectorPresentationControlKey(targetId, propertyPath) {
15
+ return `${targetId}\u0000${propertyPath}`;
16
+ }
17
+ function refreshInspectorPresentationControls(panel, authoritativeGeneration) {
18
+ const previous = inspectorPanelPresentationControls.get(panel);
19
+ const controls = new Map();
20
+ for (const element of panel.querySelectorAll('[data-editor-inspector-presentation-key]')) {
21
+ const key = element.dataset.editorInspectorPresentationKey;
22
+ const control = inspectorValueControls.get(element);
23
+ if (key && control)
24
+ controls.set(key, control);
25
+ }
26
+ inspectorPanelPresentationControls.set(panel, {
27
+ controls,
28
+ generationFloor: Number.isSafeInteger(authoritativeGeneration) && authoritativeGeneration >= 0
29
+ ? authoritativeGeneration
30
+ : previous?.currentGeneration != null
31
+ ? previous.currentGeneration + 1
32
+ : (previous?.generationFloor ?? -1) + 1,
33
+ currentGeneration: null,
34
+ });
35
+ }
36
+ /**
37
+ * Updates already-mounted value controls only. A miss intentionally does not
38
+ * rebuild the Inspector: the next authoritative render owns reconciliation.
39
+ */
40
+ export function applyInspectorPresentationPatches(panel, patches) {
41
+ const registry = inspectorPanelPresentationControls.get(panel);
42
+ if (!registry || patches.length === 0)
43
+ return false;
44
+ let applied = false;
45
+ for (const patch of patches) {
46
+ if (!Number.isSafeInteger(patch.generation) || patch.generation < registry.generationFloor)
47
+ continue;
48
+ if (registry.currentGeneration == null || patch.generation > registry.currentGeneration) {
49
+ registry.currentGeneration = patch.generation;
50
+ registry.authority = patch.authority;
51
+ registry.context = patch.context;
52
+ }
53
+ else if (patch.generation < registry.currentGeneration
54
+ || patch.authority !== registry.authority
55
+ || patch.context !== registry.context) {
56
+ continue;
57
+ }
58
+ const control = registry.controls.get(inspectorPresentationControlKey(patch.targetId, patch.propertyPath));
59
+ if (!control)
60
+ continue;
61
+ control.setValue(patch.value);
62
+ applied = true;
63
+ }
64
+ return applied;
65
+ }
66
+ /** Updates the selected Inspector's summary label without rebuilding controls. */
67
+ export function applyInspectorSummaryLabel(panel, label) {
68
+ const value = panel.querySelector('[data-editor-inspector-summary-label]');
69
+ if (!value)
70
+ return false;
71
+ value.textContent = label;
72
+ return true;
73
+ }
12
74
  export function registerInspectorUiMount(mount) {
13
75
  mount.element.dataset.editorUiMount = 'inspector';
14
76
  inspectorUiMounts.set(mount.element, mount);
@@ -43,6 +105,7 @@ export function disposeInspectorPanelUi(panel) {
43
105
  }
44
106
  if (pending.size === 0)
45
107
  inspectorPanelUiPendingDisposals.delete(panel);
108
+ inspectorPanelPresentationControls.get(panel)?.controls.clear();
46
109
  if (failures.length > 0) {
47
110
  const error = new Error('Failed to dispose one or more Inspector UI mounts.');
48
111
  error.causes = failures;
@@ -1930,6 +1993,7 @@ export function renderInspectorPanel(doc, panel, state, filter = '', options = {
1930
1993
  viewport.appendChild(createInspectorSectionBlock(doc, inspectorObject, section, controlRegistry, options));
1931
1994
  }
1932
1995
  panel.appendChild(viewport);
1996
+ refreshInspectorPresentationControls(panel, state.inspectorPresentationGeneration);
1933
1997
  restoreInspectorPanelRenderSnapshot(panel, renderSnapshot);
1934
1998
  }
1935
1999
  function captureInspectorPanelRenderSnapshot(doc, panel) {
@@ -1976,7 +2040,8 @@ function appendInspectorSummary(doc, panel, inspectorObject, selectionCount, sum
1976
2040
  header.appendChild(title);
1977
2041
  header.appendChild(createInspectorAccessBadge(doc, 'readonly'));
1978
2042
  block.appendChild(header);
1979
- appendReadOnlyRow(doc, block, selectionCount > 1 ? 'Selected' : targetKind === 'marker' ? 'Label' : 'Name', inspectorObject.label ?? inspectorObject.activeId ?? inspectorObject.targetIds[0] ?? '无');
2043
+ const summaryLabel = appendReadOnlyRow(doc, block, selectionCount > 1 ? 'Selected' : targetKind === 'marker' ? 'Label' : 'Name', inspectorObject.label ?? inspectorObject.activeId ?? inspectorObject.targetIds[0] ?? '无');
2044
+ summaryLabel.dataset.editorInspectorSummaryLabel = 'true';
1980
2045
  appendReadOnlyRow(doc, block, 'Active ID', inspectorObject.activeId ?? '无');
1981
2046
  if (selectionCount > 1)
1982
2047
  appendReadOnlyRow(doc, block, 'Count', String(selectionCount));
@@ -2743,6 +2808,11 @@ function createInspectorReadonlyScalarControl(doc, value, access, effect = 'acti
2743
2808
  return valueElement;
2744
2809
  }
2745
2810
  function bindEditorUiValueControl(control, target, property, options) {
2811
+ const targetId = target.activeId ?? target.targetIds[0] ?? null;
2812
+ if (targetId) {
2813
+ control.element.dataset.editorInspectorPresentationKey = inspectorPresentationControlKey(targetId, property.path);
2814
+ inspectorValueControls.set(control.element, control);
2815
+ }
2746
2816
  for (const input of control.nativeInputs) {
2747
2817
  applyLocalEditorBrowserInspectorControlBinding(input, target, property, options);
2748
2818
  }
@@ -3269,7 +3339,7 @@ function createInspectorGroundDecalLayoutControl(doc, _target, property, bindInp
3269
3339
  const input = doc.createElement('input');
3270
3340
  input.type = 'hidden';
3271
3341
  input.value = serializeInspectorGroundDecalLayoutValue(layers, composite);
3272
- bindInput(input, { source: 'custom' });
3342
+ bindInput(input, { source: 'custom', refreshInspector: false });
3273
3343
  input.dataset.serializedJsonValue = 'true';
3274
3344
  wrapper.appendChild(input);
3275
3345
  const surface = doc.createElement('div');
@@ -4252,6 +4322,8 @@ export function applyLocalEditorBrowserInspectorControlBinding(element, target,
4252
4322
  element.dataset.serializedDisabledReason = property.disabledReason;
4253
4323
  if (options?.source)
4254
4324
  element.dataset.serializedEditSource = options.source;
4325
+ if (options?.refreshInspector === false)
4326
+ element.dataset.serializedRefreshInspector = 'false';
4255
4327
  const access = getInspectorPropertyAccess(property);
4256
4328
  const effect = getInspectorPropertyEffect(property);
4257
4329
  element.title = access === 'editable' && effect === 'active'
@@ -4277,6 +4349,7 @@ function appendReadOnlyRow(doc, parent, label, value) {
4277
4349
  const row = createInspectorPropertyRowShell(doc, label, valueElement);
4278
4350
  row.dataset.editorInspectorAccess = 'readonly';
4279
4351
  parent.appendChild(row);
4352
+ return valueElement;
4280
4353
  }
4281
4354
  function createSelectionSummaryInspectorObject(state) {
4282
4355
  const targetIds = state.selectedIds;