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

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 (335) hide show
  1. package/dist/agent-bridge/capabilities/ui-regions.d.ts.map +1 -1
  2. package/dist/agent-bridge/capabilities/ui-regions.js +16 -0
  3. package/dist/agent-bridge/capabilities/ui-regions.js.map +1 -1
  4. package/dist/build-info.json +46 -46
  5. package/dist/internal/material-preview.d.ts +22 -0
  6. package/dist/internal/material-preview.d.ts.map +1 -0
  7. package/dist/internal/material-preview.js +186 -0
  8. package/dist/internal/material-preview.js.map +1 -0
  9. package/dist/internal/project-model-preview.d.ts +4 -0
  10. package/dist/internal/project-model-preview.d.ts.map +1 -0
  11. package/dist/internal/project-model-preview.js +359 -0
  12. package/dist/internal/project-model-preview.js.map +1 -0
  13. package/dist/local-editor-agent-context.d.ts +12 -1
  14. package/dist/local-editor-agent-context.d.ts.map +1 -1
  15. package/dist/local-editor-agent-context.js +47 -0
  16. package/dist/local-editor-agent-context.js.map +1 -1
  17. package/dist/local-editor-harness.d.ts +15 -2
  18. package/dist/local-editor-harness.d.ts.map +1 -1
  19. package/dist/local-editor-harness.js +326 -28
  20. package/dist/local-editor-harness.js.map +1 -1
  21. package/dist/local-editor-tools.d.ts +1 -0
  22. package/dist/local-editor-tools.d.ts.map +1 -1
  23. package/dist/local-editor-tools.js +3 -0
  24. package/dist/local-editor-tools.js.map +1 -1
  25. package/dist/playable-babylon-rendering.d.ts +8 -7
  26. package/dist/playable-babylon-rendering.d.ts.map +1 -1
  27. package/dist/playable-babylon-rendering.js +77 -32
  28. package/dist/playable-babylon-rendering.js.map +1 -1
  29. package/dist/playable-local-editor-host.d.ts +4 -0
  30. package/dist/playable-local-editor-host.d.ts.map +1 -1
  31. package/dist/playable-local-editor-host.js +27 -0
  32. package/dist/playable-local-editor-host.js.map +1 -1
  33. package/dist/playable-product-projection-preview.d.ts +2 -0
  34. package/dist/playable-product-projection-preview.d.ts.map +1 -1
  35. package/dist/playable-product-projection-preview.js +7 -4
  36. package/dist/playable-product-projection-preview.js.map +1 -1
  37. package/dist/playable-product-scene-capabilities.d.ts.map +1 -1
  38. package/dist/playable-product-scene-capabilities.js +9 -3
  39. package/dist/playable-product-scene-capabilities.js.map +1 -1
  40. package/dist/playable-sdk.d.ts +1 -1
  41. package/dist/playable-sdk.d.ts.map +1 -1
  42. package/dist/playable-sdk.js +1 -1
  43. package/dist/playable-sdk.js.map +1 -1
  44. package/dist/playable-standard-project.d.ts +0 -1
  45. package/dist/playable-standard-project.d.ts.map +1 -1
  46. package/dist/playable-standard-project.js +17 -5
  47. package/dist/playable-standard-project.js.map +1 -1
  48. package/node_modules/@fps-games/babylon-renderer/dist/environment/environment-texture-controller.d.ts +4 -2
  49. package/node_modules/@fps-games/babylon-renderer/dist/environment/environment-texture-controller.d.ts.map +1 -1
  50. package/node_modules/@fps-games/babylon-renderer/dist/environment/environment-texture-controller.js +301 -121
  51. package/node_modules/@fps-games/babylon-renderer/dist/environment/environment-texture-controller.js.map +1 -1
  52. package/node_modules/@fps-games/babylon-renderer/dist/environment/profile.js +5 -4
  53. package/node_modules/@fps-games/babylon-renderer/dist/environment/profile.js.map +1 -1
  54. package/node_modules/@fps-games/babylon-renderer/dist/environment/types.d.ts +4 -4
  55. package/node_modules/@fps-games/babylon-renderer/dist/environment/types.d.ts.map +1 -1
  56. package/node_modules/@fps-games/babylon-renderer/dist/environment/types.js +1 -1
  57. package/node_modules/@fps-games/babylon-renderer/dist/environment/types.js.map +1 -1
  58. package/node_modules/@fps-games/babylon-renderer/dist/game-world-plugin-lifecycle.d.ts +2 -0
  59. package/node_modules/@fps-games/babylon-renderer/dist/game-world-plugin-lifecycle.d.ts.map +1 -1
  60. package/node_modules/@fps-games/babylon-renderer/dist/game-world-plugin-lifecycle.js +12 -1
  61. package/node_modules/@fps-games/babylon-renderer/dist/game-world-plugin-lifecycle.js.map +1 -1
  62. package/node_modules/@fps-games/babylon-renderer/dist/plugin.d.ts +6 -3
  63. package/node_modules/@fps-games/babylon-renderer/dist/plugin.d.ts.map +1 -1
  64. package/node_modules/@fps-games/babylon-renderer/dist/plugin.js +100 -39
  65. package/node_modules/@fps-games/babylon-renderer/dist/plugin.js.map +1 -1
  66. package/node_modules/@fps-games/babylon-renderer/dist/reference.d.ts +1 -3
  67. package/node_modules/@fps-games/babylon-renderer/dist/reference.d.ts.map +1 -1
  68. package/node_modules/@fps-games/babylon-renderer/dist/reference.js.map +1 -1
  69. package/node_modules/@fps-games/babylon-renderer/package.json +11 -8
  70. package/node_modules/@fps-games/editor-babylon/dist/marker-overlay.js +24 -0
  71. package/node_modules/@fps-games/editor-babylon/dist/marker-overlay.js.map +1 -1
  72. package/node_modules/@fps-games/editor-babylon/dist/projection.d.ts +10 -1
  73. package/node_modules/@fps-games/editor-babylon/dist/projection.d.ts.map +1 -1
  74. package/node_modules/@fps-games/editor-babylon/dist/projection.js +96 -1
  75. package/node_modules/@fps-games/editor-babylon/dist/projection.js.map +1 -1
  76. package/node_modules/@fps-games/editor-babylon/dist/scene-view-spatial-overlay-controller.d.ts.map +1 -1
  77. package/node_modules/@fps-games/editor-babylon/dist/scene-view-spatial-overlay-controller.js +85 -22
  78. package/node_modules/@fps-games/editor-babylon/dist/scene-view-spatial-overlay-controller.js.map +1 -1
  79. package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.d.ts +2 -0
  80. package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.d.ts.map +1 -1
  81. package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.js +150 -4
  82. package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.js.map +1 -1
  83. package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.d.ts +1 -0
  84. package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.d.ts.map +1 -1
  85. package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.js +249 -15
  86. package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.js.map +1 -1
  87. package/node_modules/@fps-games/editor-babylon/dist/types.d.ts +1 -1
  88. package/node_modules/@fps-games/editor-babylon/dist/types.d.ts.map +1 -1
  89. package/node_modules/@fps-games/editor-babylon/dist/types.js.map +1 -1
  90. package/node_modules/@fps-games/editor-babylon/package.json +6 -6
  91. package/node_modules/@fps-games/editor-browser/dist/index.d.ts +5 -0
  92. package/node_modules/@fps-games/editor-browser/dist/index.d.ts.map +1 -1
  93. package/node_modules/@fps-games/editor-browser/dist/index.js +3 -0
  94. package/node_modules/@fps-games/editor-browser/dist/index.js.map +1 -1
  95. package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-browser-continuity.d.ts +35 -0
  96. package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-browser-continuity.d.ts.map +1 -0
  97. package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-browser-continuity.js +136 -0
  98. package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-browser-continuity.js.map +1 -0
  99. package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-filesystem.d.ts +46 -0
  100. package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-filesystem.d.ts.map +1 -0
  101. package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-filesystem.js +283 -0
  102. package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-filesystem.js.map +1 -0
  103. package/node_modules/@fps-games/editor-browser/dist/local-editor-preview-cleanup-registry.d.ts +12 -0
  104. package/node_modules/@fps-games/editor-browser/dist/local-editor-preview-cleanup-registry.d.ts.map +1 -0
  105. package/node_modules/@fps-games/editor-browser/dist/local-editor-preview-cleanup-registry.js +67 -0
  106. package/node_modules/@fps-games/editor-browser/dist/local-editor-preview-cleanup-registry.js.map +1 -0
  107. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-open.d.ts +6 -0
  108. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-open.d.ts.map +1 -0
  109. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-open.js +9 -0
  110. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-open.js.map +1 -0
  111. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-preview.d.ts +7 -0
  112. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-preview.d.ts.map +1 -0
  113. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-preview.js +20 -0
  114. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-preview.js.map +1 -0
  115. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-media-thumbnail-cache.d.ts +9 -0
  116. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-media-thumbnail-cache.d.ts.map +1 -0
  117. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-media-thumbnail-cache.js +219 -0
  118. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-media-thumbnail-cache.js.map +1 -0
  119. package/node_modules/@fps-games/editor-browser/dist/local-editor-tool-presentation.d.ts +14 -0
  120. package/node_modules/@fps-games/editor-browser/dist/local-editor-tool-presentation.d.ts.map +1 -0
  121. package/node_modules/@fps-games/editor-browser/dist/local-editor-tool-presentation.js +42 -0
  122. package/node_modules/@fps-games/editor-browser/dist/local-editor-tool-presentation.js.map +1 -0
  123. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-asset-kind.d.ts.map +1 -1
  124. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-asset-kind.js +2 -0
  125. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-asset-kind.js.map +1 -1
  126. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-console.d.ts +27 -0
  127. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-console.d.ts.map +1 -0
  128. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-console.js +288 -0
  129. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-console.js.map +1 -0
  130. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.d.ts +1 -1
  131. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.d.ts.map +1 -1
  132. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.js +29 -0
  133. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.js.map +1 -1
  134. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.d.ts +20 -1
  135. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.d.ts.map +1 -1
  136. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.js +321 -60
  137. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.js.map +1 -1
  138. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-prefab-stage.d.ts +2 -1
  139. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-prefab-stage.d.ts.map +1 -1
  140. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-prefab-stage.js +4 -2
  141. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-prefab-stage.js.map +1 -1
  142. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.d.ts +63 -3
  143. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.d.ts.map +1 -1
  144. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.js.map +1 -1
  145. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-workbench.d.ts +9 -0
  146. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-workbench.d.ts.map +1 -1
  147. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-workbench.js +88 -16
  148. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-workbench.js.map +1 -1
  149. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.d.ts +2 -1
  150. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.d.ts.map +1 -1
  151. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.js +1463 -356
  152. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.js.map +1 -1
  153. package/node_modules/@fps-games/editor-browser/dist/local-editor-viewport-orientation.d.ts +13 -0
  154. package/node_modules/@fps-games/editor-browser/dist/local-editor-viewport-orientation.d.ts.map +1 -0
  155. package/node_modules/@fps-games/editor-browser/dist/local-editor-viewport-orientation.js +15 -0
  156. package/node_modules/@fps-games/editor-browser/dist/local-editor-viewport-orientation.js.map +1 -0
  157. package/node_modules/@fps-games/editor-browser/package.json +7 -7
  158. package/node_modules/@fps-games/editor-core/dist/editor-tools.d.ts +1 -0
  159. package/node_modules/@fps-games/editor-core/dist/editor-tools.d.ts.map +1 -1
  160. package/node_modules/@fps-games/editor-core/dist/editor-tools.js +3 -1
  161. package/node_modules/@fps-games/editor-core/dist/editor-tools.js.map +1 -1
  162. package/node_modules/@fps-games/editor-core/dist/viewport-tools.d.ts +11 -2
  163. package/node_modules/@fps-games/editor-core/dist/viewport-tools.d.ts.map +1 -1
  164. package/node_modules/@fps-games/editor-core/dist/viewport-tools.js +12 -1
  165. package/node_modules/@fps-games/editor-core/dist/viewport-tools.js.map +1 -1
  166. package/node_modules/@fps-games/editor-core/package.json +6 -6
  167. package/node_modules/@fps-games/editor-forge-play/package.json +2 -2
  168. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/generated-module.d.ts.map +1 -1
  169. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/generated-module.js +10 -3
  170. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/generated-module.js.map +1 -1
  171. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/index.d.ts +2 -1
  172. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/index.d.ts.map +1 -1
  173. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/index.js +1 -1
  174. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/index.js.map +1 -1
  175. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/catalog.d.ts +1 -0
  176. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/catalog.d.ts.map +1 -1
  177. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/catalog.js +5 -0
  178. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/catalog.js.map +1 -1
  179. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/index.d.ts +1 -1
  180. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/index.d.ts.map +1 -1
  181. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/index.js +1 -1
  182. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/index.js.map +1 -1
  183. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/handler.d.ts.map +1 -1
  184. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/handler.js +15 -1
  185. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/handler.js.map +1 -1
  186. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/routes.d.ts.map +1 -1
  187. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/routes.js +3 -0
  188. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/routes.js.map +1 -1
  189. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/types.d.ts +6 -1
  190. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/types.d.ts.map +1 -1
  191. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/types.js.map +1 -1
  192. package/node_modules/@fps-games/editor-playable-sdk/dist/index.d.ts +1 -0
  193. package/node_modules/@fps-games/editor-playable-sdk/dist/index.d.ts.map +1 -1
  194. package/node_modules/@fps-games/editor-playable-sdk/dist/index.js +1 -0
  195. package/node_modules/@fps-games/editor-playable-sdk/dist/index.js.map +1 -1
  196. package/node_modules/@fps-games/editor-playable-sdk/dist/package-resolution/aliases.d.ts +1 -1
  197. package/node_modules/@fps-games/editor-playable-sdk/dist/package-resolution/aliases.d.ts.map +1 -1
  198. package/node_modules/@fps-games/editor-playable-sdk/dist/package-resolution/aliases.js +4 -0
  199. package/node_modules/@fps-games/editor-playable-sdk/dist/package-resolution/aliases.js.map +1 -1
  200. package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-source.d.ts +4 -0
  201. package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-source.d.ts.map +1 -1
  202. package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-source.js +10 -1
  203. package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-source.js.map +1 -1
  204. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/index.d.ts +4 -0
  205. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/index.d.ts.map +1 -0
  206. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/index.js +4 -0
  207. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/index.js.map +1 -0
  208. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/protocol.d.ts +4 -0
  209. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/protocol.d.ts.map +1 -0
  210. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/protocol.js +86 -0
  211. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/protocol.js.map +1 -0
  212. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/support.d.ts +9 -0
  213. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/support.d.ts.map +1 -0
  214. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/support.js +76 -0
  215. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/support.js.map +1 -0
  216. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/types.d.ts +34 -0
  217. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/types.d.ts.map +1 -0
  218. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/types.js +2 -0
  219. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/types.js.map +1 -0
  220. package/node_modules/@fps-games/editor-playable-sdk/dist/rendering-profile/panel.js +4 -4
  221. package/node_modules/@fps-games/editor-playable-sdk/dist/rendering-profile/panel.js.map +1 -1
  222. package/node_modules/@fps-games/editor-playable-sdk/dist/rendering-profile/types.d.ts +2 -1
  223. package/node_modules/@fps-games/editor-playable-sdk/dist/rendering-profile/types.d.ts.map +1 -1
  224. package/node_modules/@fps-games/editor-playable-sdk/dist/rendering-profile/types.js.map +1 -1
  225. package/node_modules/@fps-games/editor-playable-sdk/dist/runtime-preview/assets.js +1 -5
  226. package/node_modules/@fps-games/editor-playable-sdk/dist/runtime-preview/assets.js.map +1 -1
  227. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.d.ts +4 -0
  228. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.d.ts.map +1 -1
  229. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.js +40 -0
  230. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.js.map +1 -1
  231. package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/inspectors.js +53 -0
  232. package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/inspectors.js.map +1 -1
  233. package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/types.d.ts +2 -0
  234. package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/types.d.ts.map +1 -1
  235. package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/types.js.map +1 -1
  236. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.d.ts +1 -0
  237. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.d.ts.map +1 -1
  238. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.js +1 -0
  239. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.js.map +1 -1
  240. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.d.ts +1 -0
  241. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.d.ts.map +1 -1
  242. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.js +94 -0
  243. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.js.map +1 -1
  244. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-file-handle.d.ts +14 -0
  245. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-file-handle.d.ts.map +1 -0
  246. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-file-handle.js +101 -0
  247. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-file-handle.js.map +1 -0
  248. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-files.d.ts +23 -0
  249. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-files.d.ts.map +1 -0
  250. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-files.js +180 -0
  251. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-files.js.map +1 -0
  252. package/node_modules/@fps-games/editor-playable-sdk/package.json +6 -6
  253. package/node_modules/@fps-games/editor-protocol/dist/agent.d.ts +23 -3
  254. package/node_modules/@fps-games/editor-protocol/dist/agent.d.ts.map +1 -1
  255. package/node_modules/@fps-games/editor-protocol/dist/agent.js.map +1 -1
  256. package/node_modules/@fps-games/editor-protocol/package.json +2 -2
  257. package/node_modules/@fps-games/editor-tooling/package.json +3 -3
  258. package/node_modules/@fps-games/editor-ui/dist/editor-ui-theme.d.ts.map +1 -1
  259. package/node_modules/@fps-games/editor-ui/dist/editor-ui-theme.js +103 -10
  260. package/node_modules/@fps-games/editor-ui/dist/editor-ui-theme.js.map +1 -1
  261. package/node_modules/@fps-games/editor-ui/package.json +1 -1
  262. package/node_modules/@fps-games/playable-assets/dist/identity.d.ts +1 -0
  263. package/node_modules/@fps-games/playable-assets/dist/identity.d.ts.map +1 -1
  264. package/node_modules/@fps-games/playable-assets/dist/identity.js +1 -1
  265. package/node_modules/@fps-games/playable-assets/dist/identity.js.map +1 -1
  266. package/node_modules/@fps-games/playable-assets/dist/index.d.ts +1 -0
  267. package/node_modules/@fps-games/playable-assets/dist/index.d.ts.map +1 -1
  268. package/node_modules/@fps-games/playable-assets/dist/index.js +1 -0
  269. package/node_modules/@fps-games/playable-assets/dist/index.js.map +1 -1
  270. package/node_modules/@fps-games/playable-assets/dist/resource-resolver.d.ts +46 -0
  271. package/node_modules/@fps-games/playable-assets/dist/resource-resolver.d.ts.map +1 -0
  272. package/node_modules/@fps-games/playable-assets/dist/resource-resolver.js +109 -0
  273. package/node_modules/@fps-games/playable-assets/dist/resource-resolver.js.map +1 -0
  274. package/node_modules/@fps-games/playable-assets/package.json +1 -1
  275. package/node_modules/@fps-games/playable-contracts/package.json +1 -1
  276. package/node_modules/@fps-games/playable-rendering/package.json +2 -2
  277. package/node_modules/@fps-games/playable-runtime/dist/runtime.d.ts.map +1 -1
  278. package/node_modules/@fps-games/playable-runtime/dist/runtime.js +5 -0
  279. package/node_modules/@fps-games/playable-runtime/dist/runtime.js.map +1 -1
  280. package/node_modules/@fps-games/playable-runtime/dist/types.d.ts +2 -0
  281. package/node_modules/@fps-games/playable-runtime/dist/types.d.ts.map +1 -1
  282. package/node_modules/@fps-games/playable-runtime/dist/types.js.map +1 -1
  283. package/node_modules/@fps-games/playable-runtime/package.json +12 -12
  284. package/node_modules/@fps-games/playable-runtime-data/package.json +4 -4
  285. package/node_modules/@fps-games/playable-scene/package.json +2 -2
  286. package/node_modules/@fps-games/plugin-api/package.json +1 -1
  287. package/node_modules/@fps-games/plugin-assets/dist/reference.d.ts.map +1 -1
  288. package/node_modules/@fps-games/plugin-assets/dist/reference.js +11 -4
  289. package/node_modules/@fps-games/plugin-assets/dist/reference.js.map +1 -1
  290. package/node_modules/@fps-games/plugin-assets/dist/renderer.d.ts +8 -0
  291. package/node_modules/@fps-games/plugin-assets/dist/renderer.d.ts.map +1 -0
  292. package/node_modules/@fps-games/plugin-assets/dist/renderer.js +13 -0
  293. package/node_modules/@fps-games/plugin-assets/dist/renderer.js.map +1 -0
  294. package/node_modules/@fps-games/plugin-assets/dist/resources.d.ts +12 -0
  295. package/node_modules/@fps-games/plugin-assets/dist/resources.d.ts.map +1 -0
  296. package/node_modules/@fps-games/plugin-assets/dist/resources.js +8 -0
  297. package/node_modules/@fps-games/plugin-assets/dist/resources.js.map +1 -0
  298. package/node_modules/@fps-games/plugin-assets/dist/runtime.d.ts +2 -1
  299. package/node_modules/@fps-games/plugin-assets/dist/runtime.d.ts.map +1 -1
  300. package/node_modules/@fps-games/plugin-assets/dist/runtime.js +3 -0
  301. package/node_modules/@fps-games/plugin-assets/dist/runtime.js.map +1 -1
  302. package/node_modules/@fps-games/plugin-assets/dist/version.d.ts +1 -1
  303. package/node_modules/@fps-games/plugin-assets/dist/version.js +1 -1
  304. package/node_modules/@fps-games/plugin-assets/dist/version.js.map +1 -1
  305. package/node_modules/@fps-games/plugin-assets/package.json +32 -8
  306. package/node_modules/@fps-games/plugin-hierarchy/dist/version.d.ts +1 -1
  307. package/node_modules/@fps-games/plugin-hierarchy/dist/version.js +1 -1
  308. package/node_modules/@fps-games/plugin-hierarchy/dist/version.js.map +1 -1
  309. package/node_modules/@fps-games/plugin-hierarchy/package.json +5 -5
  310. package/node_modules/@fps-games/plugin-host/package.json +2 -2
  311. package/node_modules/@fps-games/plugin-markers/dist/version.d.ts +1 -1
  312. package/node_modules/@fps-games/plugin-markers/dist/version.js +1 -1
  313. package/node_modules/@fps-games/plugin-markers/dist/version.js.map +1 -1
  314. package/node_modules/@fps-games/plugin-markers/package.json +5 -5
  315. package/node_modules/@fps-games/plugin-materials/dist/version.d.ts +1 -1
  316. package/node_modules/@fps-games/plugin-materials/dist/version.js +1 -1
  317. package/node_modules/@fps-games/plugin-materials/dist/version.js.map +1 -1
  318. package/node_modules/@fps-games/plugin-materials/package.json +5 -5
  319. package/node_modules/@fps-games/plugin-rendering/dist/version.d.ts +1 -1
  320. package/node_modules/@fps-games/plugin-rendering/dist/version.js +1 -1
  321. package/node_modules/@fps-games/plugin-rendering/dist/version.js.map +1 -1
  322. package/node_modules/@fps-games/plugin-rendering/package.json +5 -5
  323. package/node_modules/@fps-games/plugin-scene/dist/version.d.ts +1 -1
  324. package/node_modules/@fps-games/plugin-scene/dist/version.js +1 -1
  325. package/node_modules/@fps-games/plugin-scene/dist/version.js.map +1 -1
  326. package/node_modules/@fps-games/plugin-scene/package.json +5 -5
  327. package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.d.ts +1 -1
  328. package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.js +1 -1
  329. package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.js.map +1 -1
  330. package/node_modules/@fps-games/plugin-shadow-map-experiment/package.json +5 -5
  331. package/node_modules/@fps-games/plugin-shadows/dist/version.d.ts +1 -1
  332. package/node_modules/@fps-games/plugin-shadows/dist/version.js +1 -1
  333. package/node_modules/@fps-games/plugin-shadows/dist/version.js.map +1 -1
  334. package/node_modules/@fps-games/plugin-shadows/package.json +7 -7
  335. package/package.json +24 -22
@@ -3,6 +3,8 @@ import { createEditorToolManager, createEditorToolRegistry, resolveEditingContex
3
3
  import { createEditorDiagnosticStore, normalizeEditorDiagnostic, normalizeEditorDiagnosticDetails, } from '@fps-games/editor-core/diagnostics';
4
4
  import {} from '@fps-games/editor-protocol';
5
5
  import { createLocalEditorBrowserUi, resolveLocalEditorBrowserAssetKind, resolveLocalEditorStatusDiagnosticLocator, toTransformOperationPolicyStatusLabel, } from '@fps-games/editor-browser';
6
+ import { mountLocalEditorProjectModelPreview, resolveLocalEditorProjectModelThumbnail, } from './internal/project-model-preview.js';
7
+ import { mountLocalEditorMaterialPreview } from './internal/material-preview.js';
6
8
  import { bindFpsEditorTools, } from '@fps-games/editor-core/plugin-host';
7
9
  import { createLocalEditorHarnessPluginInspectorOptions } from './local-editor-plugin-inspector.js';
8
10
  import { registerLocalEditorHarnessLifecycleOperations, } from './internal/local-editor-lifecycle-operations.js';
@@ -305,6 +307,8 @@ function createLocalEditorHarnessImplementation(options, construction) {
305
307
  handleSessionObserverError: () => { },
306
308
  source: null,
307
309
  assets: [],
310
+ projectFiles: null,
311
+ projectFilesWarning: null,
308
312
  assetFilter: '',
309
313
  updatedAssetProjection: { pending: false },
310
314
  selectedAssetId: null,
@@ -340,6 +344,9 @@ function createLocalEditorHarnessImplementation(options, construction) {
340
344
  sceneViewMeasurement: null,
341
345
  sceneViewSpatialOverlay: null,
342
346
  selectionController: null,
347
+ selectionInspectorRefreshGeneration: 0,
348
+ selectionInspectorRefreshFrame: null,
349
+ selectionInspectorRefreshTimeout: null,
343
350
  sceneRenderScheduler: null,
344
351
  viewportRenderCoordinator: null,
345
352
  sceneFrameStats: null,
@@ -449,11 +456,12 @@ function createLocalEditorHarnessImplementation(options, construction) {
449
456
  state.createSessionChangeObserver = createSessionChangeObserver;
450
457
  state.handleSessionObserverError = handleEditorSessionObserverError;
451
458
  let harness;
459
+ let renderSelectionChange = () => harness.render();
452
460
  const busyOperationExecutors = new WeakMap();
453
461
  let agentLifecycleController;
454
462
  const pluginInspector = createLocalEditorHarnessPluginInspectorOptions(options.pluginHost, options.inspector);
455
- const builtInSceneHierarchyProvider = createLocalEditorHarnessHierarchyScopeProvider(state, options, () => harness.render(), createLocalEditorSceneHierarchyScopeAdapter(state, options), busyOperationExecutors);
456
- const builtInPrefabStageHierarchyProvider = createLocalEditorHarnessHierarchyScopeProvider(state, options, () => harness.render(), createLocalEditorPrefabHierarchyScopeAdapter(state, options), busyOperationExecutors);
463
+ const builtInSceneHierarchyProvider = createLocalEditorHarnessHierarchyScopeProvider(state, options, () => harness.render(), createLocalEditorSceneHierarchyScopeAdapter(state, options), busyOperationExecutors, () => renderSelectionChange());
464
+ const builtInPrefabStageHierarchyProvider = createLocalEditorHarnessHierarchyScopeProvider(state, options, () => harness.render(), createLocalEditorPrefabHierarchyScopeAdapter(state, options), busyOperationExecutors, () => renderSelectionChange());
457
465
  const hierarchySurface = options.pluginHost
458
466
  ? resolveHierarchySurfaceContribution(options.pluginHost.contributions)
459
467
  : options.hierarchy?.surface;
@@ -473,7 +481,10 @@ function createLocalEditorHarnessImplementation(options, construction) {
473
481
  const unregisterStandardTools = createLocalEditorStandardToolRegistrations({
474
482
  activate(tool) {
475
483
  const previous = state.transformTool;
476
- commitEditorStateChange(state, options, () => harness.render(), 'transform-tool-change', () => {
484
+ // Tool Manager publishes immediately after the runtime activates, and that
485
+ // publication owns the UI refresh. Rendering here as well rebuilt the full
486
+ // workbench twice before Babylon could present the first Gizmo frame.
487
+ commitEditorStateChange(state, options, () => { }, 'transform-tool-change', () => {
477
488
  state.transformTool = tool;
478
489
  state.transformConstraint = normalizeTransformConstraint(tool, state.transformConstraint);
479
490
  }, {
@@ -489,6 +500,11 @@ function createLocalEditorHarnessImplementation(options, construction) {
489
500
  });
490
501
  }
491
502
  },
503
+ reconcile(tool) {
504
+ if (state.transformTool !== tool)
505
+ return;
506
+ syncTransformGizmoToSceneArtifacts(state, 'transform-tool-reconcile');
507
+ },
492
508
  cancelActiveOperation() {
493
509
  cancelActiveOperation(state);
494
510
  },
@@ -720,6 +736,21 @@ function createLocalEditorHarnessImplementation(options, construction) {
720
736
  if (patchMarkerRelation(state, options, input))
721
737
  harness.render();
722
738
  },
739
+ onAssetBrowserRefresh: () => runExclusive(state, harness.render, async () => {
740
+ await harness.reloadAssets();
741
+ }, busyOperationExecutors),
742
+ onProjectFileRead: options.persistenceAdapter.loadProjectFile
743
+ ? path => Promise.resolve(options.persistenceAdapter.loadProjectFile(path))
744
+ : undefined,
745
+ onProjectEntrySendToAgent: options.agentContext
746
+ ? input => Promise.resolve(options.agentContext.sendProjectEntry(input)).then(() => undefined)
747
+ : undefined,
748
+ onProjectMediaResolve: options.persistenceAdapter.resolveProjectMedia
749
+ ? path => Promise.resolve(options.persistenceAdapter.resolveProjectMedia(path))
750
+ : undefined,
751
+ onProjectModelPreviewMount: mountLocalEditorProjectModelPreview,
752
+ onProjectModelThumbnailResolve: resolveLocalEditorProjectModelThumbnail,
753
+ onMaterialPreviewMount: mountLocalEditorMaterialPreview,
723
754
  onAssetFilterChange: (value) => {
724
755
  state.assetFilter = value;
725
756
  harness.render();
@@ -897,6 +928,13 @@ function createLocalEditorHarnessImplementation(options, construction) {
897
928
  },
898
929
  },
899
930
  });
931
+ renderSelectionChange = () => {
932
+ if (!state.world || !ui.updatePreview) {
933
+ harness.render();
934
+ return;
935
+ }
936
+ publishLocalEditorSelectionPresentation(state, options, previewState => ui.updatePreview?.(previewState), 'hierarchy-selection-presentation');
937
+ };
900
938
  const discardPrefabStageChanges = () => {
901
939
  const stage = state.prefabStage;
902
940
  if (!stage || !stage.transaction.snapshot().stageDirty)
@@ -958,9 +996,26 @@ function createLocalEditorHarnessImplementation(options, construction) {
958
996
  }
959
997
  return exitPrefabStage(state, options, 'reject');
960
998
  };
961
- const unsubscribeToolManager = toolManager.subscribe(() => {
962
- if (state.toolManagerRenderSuppression === 0)
999
+ const unsubscribeToolManager = toolManager.subscribe(snapshot => {
1000
+ if (state.toolManagerRenderSuppression !== 0)
1001
+ return;
1002
+ const startedAt = typeof performance !== 'undefined' ? performance.now() : Date.now();
1003
+ const previewState = createUiToolPresentationPreviewState(state, snapshot);
1004
+ if (ui.updatePreview)
1005
+ ui.updatePreview(previewState);
1006
+ else
963
1007
  harness.render();
1008
+ if (typeof globalThis.location?.search === 'string'
1009
+ && /(?:^|[?&])debugGizmo=(?:1|true)(?:&|$)/.test(globalThis.location.search)) {
1010
+ console.info('[fps-editor:gizmo]', 'tool-manager.presentation-published', {
1011
+ timestamp: typeof performance !== 'undefined' ? Number(performance.now().toFixed(2)) : Date.now(),
1012
+ durationMs: Number(((typeof performance !== 'undefined' ? performance.now() : Date.now()) - startedAt).toFixed(2)),
1013
+ revision: snapshot.revision,
1014
+ activationGeneration: snapshot.activationGeneration,
1015
+ activeToolId: snapshot.activeToolId,
1016
+ updateMode: ui.updatePreview ? 'preview' : 'full-fallback',
1017
+ });
1018
+ }
964
1019
  });
965
1020
  construction.setCleanup(() => {
966
1021
  harnessDisposed = true;
@@ -1045,16 +1100,45 @@ function createLocalEditorHarnessImplementation(options, construction) {
1045
1100
  }, executor);
1046
1101
  return runResult.accepted ? runResult.value : false;
1047
1102
  };
1103
+ const loadOptionalProjectFiles = async () => {
1104
+ if (!options.persistenceAdapter.loadProjectFiles) {
1105
+ return { projectFiles: state.projectFiles, warning: null };
1106
+ }
1107
+ try {
1108
+ return {
1109
+ projectFiles: await options.persistenceAdapter.loadProjectFiles(),
1110
+ warning: null,
1111
+ };
1112
+ }
1113
+ catch (error) {
1114
+ return {
1115
+ projectFiles: state.projectFiles,
1116
+ warning: `Project file browser unavailable: ${error instanceof Error ? error.message : String(error)}`,
1117
+ };
1118
+ }
1119
+ };
1120
+ const applyProjectFilesWarningToStatus = () => {
1121
+ if (!state.projectFilesWarning)
1122
+ return;
1123
+ state.statusTone = 'warning';
1124
+ state.statusToneStatus = state.status;
1125
+ state.statusDetails = [state.statusDetails, state.projectFilesWarning].filter(Boolean).join(' · ');
1126
+ };
1048
1127
  const loadEditorDocument = async () => {
1049
- const loadedSource = options.persistenceAdapter.loadAuthoringSource
1050
- ? await options.persistenceAdapter.loadAuthoringSource()
1051
- : null;
1128
+ const [loadedSource, projectFilesResult] = await Promise.all([
1129
+ options.persistenceAdapter.loadAuthoringSource
1130
+ ? options.persistenceAdapter.loadAuthoringSource()
1131
+ : null,
1132
+ loadOptionalProjectFiles(),
1133
+ ]);
1052
1134
  const [document, assets] = loadedSource
1053
1135
  ? [loadedSource.document, loadedSource.assets ?? await options.persistenceAdapter.loadAssets()]
1054
1136
  : [await loadDocumentFallback(options), await options.persistenceAdapter.loadAssets()];
1055
1137
  const source = loadedSource?.source ?? null;
1056
1138
  const preparedDocument = options.documentAdapter.prepareDocument?.(document, assets) ?? document;
1057
1139
  state.assets = assets;
1140
+ state.projectFiles = projectFilesResult.projectFiles;
1141
+ state.projectFilesWarning = projectFilesResult.warning;
1058
1142
  state.source = source;
1059
1143
  state.markerGraphVisibility = createDefaultMarkerGraphVisibilityState();
1060
1144
  state.markerGraphVisibilityRevision += 1;
@@ -1121,6 +1205,10 @@ function createLocalEditorHarnessImplementation(options, construction) {
1121
1205
  throw error;
1122
1206
  }
1123
1207
  state.status = `GameWorld disposed; EditorWorld active; assets=${state.assets.length}`;
1208
+ state.statusTone = 'default';
1209
+ state.statusToneStatus = state.status;
1210
+ state.statusDetails = '';
1211
+ applyProjectFilesWarningToStatus();
1124
1212
  harness.render();
1125
1213
  harness.notifyViewportRevealed('editor-enter');
1126
1214
  };
@@ -1344,7 +1432,10 @@ function createLocalEditorHarnessImplementation(options, construction) {
1344
1432
  async reloadAssets() {
1345
1433
  try {
1346
1434
  const previousAssets = state.assets;
1347
- const assets = await options.persistenceAdapter.loadAssets();
1435
+ const [assets, projectFilesResult] = await Promise.all([
1436
+ options.persistenceAdapter.loadAssets(),
1437
+ loadOptionalProjectFiles(),
1438
+ ]);
1348
1439
  const refreshedAssetIds = options.documentAdapter.listAssetSnapshots
1349
1440
  ? findLocalEditorUpdatedAssetIds(options.documentAdapter.listAssetSnapshots(previousAssets), options.documentAdapter.listAssetSnapshots(assets))
1350
1441
  : [];
@@ -1379,6 +1470,9 @@ function createLocalEditorHarnessImplementation(options, construction) {
1379
1470
  state.statusDetails = '';
1380
1471
  }
1381
1472
  state.assets = assets;
1473
+ state.projectFiles = projectFilesResult.projectFiles;
1474
+ state.projectFilesWarning = projectFilesResult.warning;
1475
+ applyProjectFilesWarningToStatus();
1382
1476
  clearArmedPlacement(state);
1383
1477
  harness.render();
1384
1478
  return {
@@ -1416,7 +1510,10 @@ function createLocalEditorHarnessImplementation(options, construction) {
1416
1510
  if (!options.documentAdapter.resolveUpdatedAssetSnapshot) {
1417
1511
  throw new Error('asset_update_snapshot_verification_unavailable');
1418
1512
  }
1419
- const assets = await options.persistenceAdapter.loadAssets();
1513
+ const [assets, projectFilesResult] = await Promise.all([
1514
+ options.persistenceAdapter.loadAssets(),
1515
+ loadOptionalProjectFiles(),
1516
+ ]);
1420
1517
  assertLocalEditorUpdatedAssetSnapshotFreshness(options.documentAdapter.resolveUpdatedAssetSnapshot(assets, { assetId: input.assetId }), input);
1421
1518
  const result = applyLocalEditorUpdatedAssetRefresh(state.session, {
1422
1519
  assetId: input.assetId,
@@ -1430,6 +1527,8 @@ function createLocalEditorHarnessImplementation(options, construction) {
1430
1527
  : {}),
1431
1528
  });
1432
1529
  state.assets = assets;
1530
+ state.projectFiles = projectFilesResult.projectFiles;
1531
+ state.projectFilesWarning = projectFilesResult.warning;
1433
1532
  clearArmedPlacement(state);
1434
1533
  syncLocalEditorUpdatedAssetProjection(state.updatedAssetProjection, result.changed, () => {
1435
1534
  rebuildProjectionFromDocument(state, options, result.workingDocument, result.selection);
@@ -1443,6 +1542,7 @@ function createLocalEditorHarnessImplementation(options, construction) {
1443
1542
  state.statusTone = warnings.length > 0 ? 'warning' : 'success';
1444
1543
  state.statusToneStatus = state.status;
1445
1544
  state.statusDetails = warnings.map(warning => warning.code).join(', ');
1545
+ applyProjectFilesWarningToStatus();
1446
1546
  replaceAssetUpdateDiagnosticSnapshot(state, {
1447
1547
  assetIds: [input.assetId],
1448
1548
  warnings,
@@ -2657,6 +2757,7 @@ async function createEditorWorld(state, options, renderUi, renderPreviewUi, upda
2657
2757
  },
2658
2758
  });
2659
2759
  state.gizmo = gizmo;
2760
+ await gizmo.prepare?.();
2660
2761
  gizmo.setOperationSettings(getScopedTransformOperationSettings(state));
2661
2762
  gizmo.setConstraint(state.transformConstraint);
2662
2763
  const selectionController = createBabylonProjectionSelectionController({
@@ -2669,8 +2770,18 @@ async function createEditorWorld(state, options, renderUi, renderPreviewUi, upda
2669
2770
  isLocked: nodeId => getLocalEditorEditingContext(state).isLocked(nodeId),
2670
2771
  isOperationBlocked: () => state.gizmo?.getState().dragPhase === 'dragging',
2671
2772
  onSelectionCommand(command) {
2672
- if (getLocalEditorEditingContext(state).dispatchSelection(command))
2673
- render();
2773
+ const startedAt = typeof performance !== 'undefined' ? performance.now() : Date.now();
2774
+ if (getLocalEditorEditingContext(state).dispatchSelection(command)) {
2775
+ publishLocalEditorSelectionPresentation(state, options, renderPreviewUi, 'viewport-selection-presentation');
2776
+ if (isLocalEditorSelectionDebugEnabled()) {
2777
+ console.info('[fps-editor:selection]', 'selection.presentation-published', {
2778
+ timestamp: readLocalEditorPerformanceTimestamp(),
2779
+ durationMs: Number(((typeof performance !== 'undefined' ? performance.now() : Date.now()) - startedAt).toFixed(2)),
2780
+ activeId: getCurrentPreviewSelection(state, options).activeId,
2781
+ selectedCount: getCurrentPreviewSelection(state, options).selectedIds.length,
2782
+ });
2783
+ }
2784
+ }
2674
2785
  },
2675
2786
  onFocusIntent(nodeId) {
2676
2787
  if (getLocalEditorEditingContext(state).focus(nodeId))
@@ -2852,9 +2963,9 @@ async function createEditorWorld(state, options, renderUi, renderPreviewUi, upda
2852
2963
  });
2853
2964
  state.postProcess = postProcess;
2854
2965
  postProcess.setProfile(initialRendering.postProcess ?? null);
2855
- const environmentTexture = createBabylonEnvironmentTextureController(world.scene, null);
2966
+ const environmentTexture = createBabylonEnvironmentTextureController(world.scene);
2856
2967
  state.environmentTexture = environmentTexture;
2857
- environmentTexture.setProfile(initialRendering.environment ?? null);
2968
+ await environmentTexture.applyProfile(initialRendering.environment ?? null);
2858
2969
  world.refreshSkyBackdrop();
2859
2970
  const resize = () => {
2860
2971
  engine.resize?.();
@@ -2890,6 +3001,7 @@ function disposeEditorWorld(state) {
2890
3001
  clear();
2891
3002
  });
2892
3003
  run(() => clearPrefabStageForEditorTeardown(state));
3004
+ run(() => cancelScheduledSelectionInspectorRefresh(state));
2893
3005
  state.activeTransformPreview = null;
2894
3006
  disposeField(() => state.sceneViewInteraction, () => { state.sceneViewInteraction = null; });
2895
3007
  if (state.resizeHandler) {
@@ -4380,16 +4492,58 @@ function createMarkerRelationVisibilityOptions(state) {
4380
4492
  };
4381
4493
  }
4382
4494
  function syncTransformGizmoToSceneArtifacts(state, reason, revision = state.editorStateRevision, beginSync = true) {
4383
- if (beginSync && !beginSceneArtifactSync(state, reason, revision))
4495
+ const debugGizmo = typeof globalThis.location?.search === 'string'
4496
+ && /(?:^|[?&])debugGizmo=(?:1|true)(?:&|$)/.test(globalThis.location.search);
4497
+ if (beginSync && !beginSceneArtifactSync(state, reason, revision)) {
4498
+ if (debugGizmo) {
4499
+ console.info('[fps-editor:gizmo]', 'harness.sync.skipped', {
4500
+ timestamp: typeof performance !== 'undefined' ? Number(performance.now().toFixed(2)) : Date.now(),
4501
+ reason,
4502
+ revision,
4503
+ sceneArtifactRevision: state.sceneArtifactRevision,
4504
+ });
4505
+ }
4384
4506
  return;
4507
+ }
4385
4508
  const gizmo = state.gizmo;
4509
+ if (debugGizmo) {
4510
+ console.info('[fps-editor:gizmo]', 'harness.sync.started', {
4511
+ timestamp: typeof performance !== 'undefined' ? Number(performance.now().toFixed(2)) : Date.now(),
4512
+ reason,
4513
+ revision,
4514
+ transformTool: state.transformTool,
4515
+ transformSpace: state.transformSpace,
4516
+ transformConstraint: state.transformConstraint,
4517
+ gizmoState: gizmo?.getState() ?? null,
4518
+ });
4519
+ }
4386
4520
  if (gizmo) {
4387
- gizmo.setTool(state.transformTool);
4388
- gizmo.setSpace(state.transformSpace);
4389
- gizmo.setConstraint(state.transformConstraint);
4390
- gizmo.refreshSelection();
4521
+ const current = gizmo.getState();
4522
+ let attachmentReconciled = false;
4523
+ if (current.tool !== state.transformTool) {
4524
+ gizmo.setTool(state.transformTool);
4525
+ attachmentReconciled = true;
4526
+ }
4527
+ if (current.space !== state.transformSpace) {
4528
+ gizmo.setSpace(state.transformSpace);
4529
+ attachmentReconciled = true;
4530
+ }
4531
+ if (current.constraint !== state.transformConstraint) {
4532
+ gizmo.setConstraint(state.transformConstraint);
4533
+ attachmentReconciled = true;
4534
+ }
4535
+ if (!attachmentReconciled)
4536
+ gizmo.refreshSelection();
4391
4537
  }
4392
4538
  requestEditorArtifactRevealFrame(state, reason);
4539
+ if (debugGizmo) {
4540
+ console.info('[fps-editor:gizmo]', 'harness.sync.completed', {
4541
+ timestamp: typeof performance !== 'undefined' ? Number(performance.now().toFixed(2)) : Date.now(),
4542
+ reason,
4543
+ gizmoState: gizmo?.getState() ?? null,
4544
+ revealFrameRequested: !!state.viewportRenderCoordinator,
4545
+ });
4546
+ }
4393
4547
  }
4394
4548
  function syncTransformOperationSettingsToSceneArtifacts(state, reason, revision = state.editorStateRevision) {
4395
4549
  if (!beginSceneArtifactSync(state, reason, revision))
@@ -4460,12 +4614,21 @@ function syncEditorWorldRenderingFromDocument(state, options, document, reason,
4460
4614
  state.world?.refreshSkyBackdrop();
4461
4615
  return;
4462
4616
  }
4463
- state.worldRenderingKey = key;
4464
4617
  state.shadowPreview?.setOptions(rendering.shadowPreview, refreshOptions);
4465
- state.environmentTexture?.setProfile(rendering.environment);
4466
- state.world?.refreshSkyBackdrop();
4467
- state.postProcess?.setProfile(rendering.postProcess);
4468
- requestEditorSceneFrame(state, reason);
4618
+ const environmentUpdate = state.environmentTexture?.applyProfile(rendering.environment ?? null);
4619
+ if (!environmentUpdate)
4620
+ return;
4621
+ void environmentUpdate.then(() => {
4622
+ state.worldRenderingKey = key;
4623
+ state.world?.refreshSkyBackdrop();
4624
+ state.postProcess?.setProfile(rendering.postProcess);
4625
+ requestEditorSceneFrame(state, reason);
4626
+ }).catch((error) => {
4627
+ if (error?.name === 'AbortError')
4628
+ return;
4629
+ reportLocalEditorWorldRenderingResolutionError(state, error, true);
4630
+ requestEditorSceneFrame(state, `${reason}-failed`);
4631
+ });
4469
4632
  }
4470
4633
  function reportLocalEditorWorldRenderingResolutionError(state, error, keptPrevious) {
4471
4634
  state.status = keptPrevious
@@ -8375,7 +8538,7 @@ function resolveHierarchyReparentInvocation(snapshot, invocation, resolveTarget)
8375
8538
  ...(resolveAnchor(invocation.input?.afterId) !== undefined ? { afterId: resolveAnchor(invocation.input?.afterId) } : {}),
8376
8539
  });
8377
8540
  }
8378
- export function createLocalEditorHarnessHierarchyScopeProvider(state, options, render, adapter, executorStates = new WeakMap()) {
8541
+ export function createLocalEditorHarnessHierarchyScopeProvider(state, options, render, adapter, executorStates = new WeakMap(), renderSelection = render) {
8379
8542
  assertUniqueHierarchyOperationContributionIds(options.hierarchy?.operations ?? []);
8380
8543
  let treeCache = null;
8381
8544
  let cachedSession = null;
@@ -8414,7 +8577,7 @@ export function createLocalEditorHarnessHierarchyScopeProvider(state, options, r
8414
8577
  return validated;
8415
8578
  const changed = adapter.applySelection(input, validated);
8416
8579
  if (changed)
8417
- render();
8580
+ renderSelection();
8418
8581
  const current = getSnapshot();
8419
8582
  const selection = adapter.getSelection();
8420
8583
  const selectionMatches = sameHierarchySelection(selection.selectedIds, input.selectedIds)
@@ -9032,6 +9195,7 @@ function createUiState(state, options, hierarchySnapshot, toolManager) {
9032
9195
  summary: state.summary,
9033
9196
  assetFilter: state.assetFilter,
9034
9197
  assets,
9198
+ projectFiles: state.projectFiles ?? undefined,
9035
9199
  selectedAssetId: state.selectedAssetId,
9036
9200
  assetCountLabel: `${assets.length} assets`,
9037
9201
  selectedIds,
@@ -9042,6 +9206,7 @@ function createUiState(state, options, hierarchySnapshot, toolManager) {
9042
9206
  },
9043
9207
  inspectorObject: previewInspectorObject,
9044
9208
  inspectorMultiObject: previewInspectorMultiObject,
9209
+ inspectorPending: false,
9045
9210
  renderingPanel: document
9046
9211
  ? options.documentAdapter.getRenderingPanelState?.(document, {
9047
9212
  scene: state.world?.scene ?? null,
@@ -9145,7 +9310,7 @@ function createLocalEditorContextActions(state) {
9145
9310
  }),
9146
9311
  ]);
9147
9312
  }
9148
- function createBrowserPrefabStageState(state, options, document) {
9313
+ function createBrowserPrefabStageState(state, options, document, includeInspector = true) {
9149
9314
  const stage = state.prefabStage;
9150
9315
  if (!stage || !document)
9151
9316
  return null;
@@ -9153,7 +9318,9 @@ function createBrowserPrefabStageState(state, options, document) {
9153
9318
  const cachedStructure = getCachedLocalEditorPrefabStageStructure(state, options, document, descriptor);
9154
9319
  const context = cachedStructure.context;
9155
9320
  const structureItems = cachedStructure.items;
9156
- const inspectorObject = options.documentAdapter.getPrefabStageInspectorObject?.(document, descriptor, stage.selectedItemId, context) ?? null;
9321
+ const inspectorObject = includeInspector
9322
+ ? options.documentAdapter.getPrefabStageInspectorObject?.(document, descriptor, stage.selectedItemId, context) ?? null
9323
+ : null;
9157
9324
  const transactionSnapshot = stage.transaction.snapshot();
9158
9325
  return {
9159
9326
  assetId: descriptor.assetId,
@@ -9618,6 +9785,135 @@ function getScopedPreviewSelectionForUiState(state, _options, _fallbackSelection
9618
9785
  function getCurrentPreviewSelection(state, options) {
9619
9786
  return getScopedPreviewSelectionForUiState(state, options, state.session?.getState({ cloneDocuments: false }).selection ?? EMPTY_EDITOR_SELECTION);
9620
9787
  }
9788
+ function createUiToolPresentationPreviewState(state, snapshot) {
9789
+ return {
9790
+ tools: snapshot.tools,
9791
+ activeToolId: snapshot.activeToolId,
9792
+ transformTool: {
9793
+ activeTool: state.transformTool,
9794
+ activeSpace: state.transformSpace,
9795
+ activeConstraint: state.transformConstraint,
9796
+ dragPhase: state.gizmo?.getState().dragPhase ?? 'idle',
9797
+ draggingNodeId: state.gizmo?.getState().draggingNodeId ?? null,
9798
+ },
9799
+ };
9800
+ }
9801
+ function publishLocalEditorSelectionPresentation(state, options, renderPreviewUi, reason) {
9802
+ syncViewportSpatialOverlay(state, options);
9803
+ renderPreviewUi(createUiSelectionPresentationPreviewState(state, options));
9804
+ requestEditorSceneFrame(state, reason);
9805
+ scheduleSelectionInspectorRefresh(state, options, renderPreviewUi);
9806
+ }
9807
+ function createUiSelectionPresentationPreviewState(state, options) {
9808
+ const selection = getCurrentPreviewSelection(state, options);
9809
+ const selectedIds = [...selection.selectedIds];
9810
+ const activeId = selection.activeId;
9811
+ const transformSelectionIsLarge = isLargeSelection(selectedIds);
9812
+ const document = state.session?.getState({ cloneDocuments: false }).workingDocument ?? null;
9813
+ return {
9814
+ selectedIds,
9815
+ activeId,
9816
+ selectionSummary: {
9817
+ count: selectedIds.length,
9818
+ activeId,
9819
+ },
9820
+ inspectorPending: true,
9821
+ transformOperations: {
9822
+ settings: cloneTransformOperationSettings(getScopedTransformOperationSettings(state)),
9823
+ selectedCount: selectedIds.length,
9824
+ activeId,
9825
+ canAlign: !transformSelectionIsLarge && selectedIds.length >= 2 && activeId != null
9826
+ && isLocalEditorEditingCapabilityEnabled(state, LOCAL_EDITOR_EDITING_CAPABILITIES.transformActions),
9827
+ canDistribute: !transformSelectionIsLarge && selectedIds.length >= 3
9828
+ && isLocalEditorEditingCapabilityEnabled(state, LOCAL_EDITOR_EDITING_CAPABILITIES.transformActions),
9829
+ },
9830
+ viewportSpatialOverlay: cloneEditorViewportSpatialOverlayState(state.viewportSpatialOverlay),
9831
+ ...(state.prefabStage
9832
+ ? { prefabStage: createBrowserPrefabStageState(state, options, document, false) }
9833
+ : {}),
9834
+ };
9835
+ }
9836
+ function createUiSelectionInspectorPreviewState(state, options) {
9837
+ const document = state.session?.getState({ cloneDocuments: false }).workingDocument ?? null;
9838
+ if (!document) {
9839
+ return {
9840
+ inspectorObject: null,
9841
+ inspectorMultiObject: null,
9842
+ inspectorPending: false,
9843
+ ...(state.prefabStage ? { prefabStage: null } : {}),
9844
+ };
9845
+ }
9846
+ if (state.prefabStage) {
9847
+ const prefabStage = createBrowserPrefabStageState(state, options, document);
9848
+ return {
9849
+ prefabStage,
9850
+ inspectorObject: prefabStage?.inspectorObject ?? null,
9851
+ inspectorMultiObject: null,
9852
+ inspectorPending: false,
9853
+ };
9854
+ }
9855
+ const editingContext = getLocalEditorEditingContext(state);
9856
+ return {
9857
+ inspectorObject: editingContext.getInspectorObject(document),
9858
+ inspectorMultiObject: editingContext.getInspectorMultiObject(document),
9859
+ inspectorPending: false,
9860
+ };
9861
+ }
9862
+ function cancelScheduledSelectionInspectorRefresh(state) {
9863
+ state.selectionInspectorRefreshGeneration += 1;
9864
+ if (state.selectionInspectorRefreshFrame !== null) {
9865
+ globalThis.cancelAnimationFrame?.(state.selectionInspectorRefreshFrame);
9866
+ state.selectionInspectorRefreshFrame = null;
9867
+ }
9868
+ if (state.selectionInspectorRefreshTimeout !== null) {
9869
+ globalThis.clearTimeout(state.selectionInspectorRefreshTimeout);
9870
+ state.selectionInspectorRefreshTimeout = null;
9871
+ }
9872
+ }
9873
+ function scheduleSelectionInspectorRefresh(state, options, renderPreviewUi) {
9874
+ cancelScheduledSelectionInspectorRefresh(state);
9875
+ const generation = state.selectionInspectorRefreshGeneration;
9876
+ const publish = () => {
9877
+ state.selectionInspectorRefreshTimeout = null;
9878
+ if (generation !== state.selectionInspectorRefreshGeneration || !state.world)
9879
+ return;
9880
+ const startedAt = typeof performance !== 'undefined' ? performance.now() : Date.now();
9881
+ const preview = createUiSelectionInspectorPreviewState(state, options);
9882
+ const stateReadyAt = typeof performance !== 'undefined' ? performance.now() : Date.now();
9883
+ renderPreviewUi(preview);
9884
+ if (isLocalEditorSelectionDebugEnabled()) {
9885
+ const completedAt = typeof performance !== 'undefined' ? performance.now() : Date.now();
9886
+ console.info('[fps-editor:selection]', 'selection.inspector-published', {
9887
+ timestamp: readLocalEditorPerformanceTimestamp(),
9888
+ stateBuildMs: Number((stateReadyAt - startedAt).toFixed(2)),
9889
+ renderMs: Number((completedAt - stateReadyAt).toFixed(2)),
9890
+ durationMs: Number((completedAt - startedAt).toFixed(2)),
9891
+ generation,
9892
+ });
9893
+ }
9894
+ };
9895
+ const deferUntilAfterFrame = () => {
9896
+ state.selectionInspectorRefreshFrame = null;
9897
+ if (generation !== state.selectionInspectorRefreshGeneration || !state.world)
9898
+ return;
9899
+ state.selectionInspectorRefreshTimeout = globalThis.setTimeout(publish, 0);
9900
+ };
9901
+ if (typeof globalThis.requestAnimationFrame === 'function') {
9902
+ state.selectionInspectorRefreshFrame = globalThis.requestAnimationFrame(deferUntilAfterFrame);
9903
+ }
9904
+ else {
9905
+ state.selectionInspectorRefreshTimeout = globalThis.setTimeout(publish, 0);
9906
+ }
9907
+ }
9908
+ function isLocalEditorSelectionDebugEnabled() {
9909
+ return typeof globalThis.location?.search === 'string'
9910
+ && /(?:^|[?&])debug(?:Gizmo|Selection)=(?:1|true)(?:&|$)/.test(globalThis.location.search);
9911
+ }
9912
+ function readLocalEditorPerformanceTimestamp() {
9913
+ return typeof performance !== 'undefined'
9914
+ ? Number(performance.now().toFixed(2))
9915
+ : Date.now();
9916
+ }
9621
9917
  function createUiPreviewState(state, options) {
9622
9918
  const sessionState = state.session?.getState({ cloneDocuments: false });
9623
9919
  const selection = sessionState?.selection;
@@ -10385,12 +10681,14 @@ function toBrowserAssetItem(options, asset) {
10385
10681
  ?? {
10386
10682
  id: asset.assetId ?? asset.id,
10387
10683
  label: asset.displayName ?? asset.label,
10684
+ relativePath: asset.relativePath,
10388
10685
  guid: asset.guid,
10389
10686
  assetId: asset.assetId,
10390
10687
  kind: asset.kind,
10391
10688
  external: asset.external,
10392
10689
  origin: asset.origin,
10393
10690
  dedupeKey: asset.dedupeKey,
10691
+ contentHash: asset.contentHash,
10394
10692
  placeable: asset.placeable,
10395
10693
  preview: asset.preview,
10396
10694
  material: asset.material,