@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
@@ -5,13 +5,17 @@
5
5
  */
6
6
  import {} from '@fps-games/editor-core';
7
7
  import { createEditorSceneReadonlyInspectorProperty, } from '../inspector/readonly.js';
8
- import { findEditorSceneMaterialAsset, hasEditorSceneMaterialAsset, } from './binding.js';
8
+ import { default as materialBindingInternals, findEditorSceneMaterialAsset, hasEditorSceneMaterialAsset, } from './binding.js';
9
9
  import { DEFAULT_PBR_EDITOR_SCENE_MATERIAL_ASSET_ID, DEFAULT_STANDARD_EDITOR_SCENE_MATERIAL_ASSET_ID, } from './default-assets.js';
10
- import { createEditorSceneMaterialAssetFieldInspectorPropertyInput as createPlayableEditorSceneMaterialAssetFieldInspectorPropertyInput, createEditorSceneMaterialPickerControlOptions as createPlayableEditorSceneMaterialPickerControlOptions, createEditorSceneTexturePickerControlOptions as createPlayableEditorSceneTexturePickerControlOptions, findEditorSceneInspectorTextureAsset as findPlayableEditorSceneInspectorTextureAsset, getEditorSceneMaterialAssetDisplayName as getPlayableEditorSceneMaterialAssetDisplayName, } from './inspector.js';
10
+ import { createEditorSceneMaterialAssetFieldInspectorPropertyInput as createPlayableEditorSceneMaterialAssetFieldInspectorPropertyInput, createEditorSceneTexturePickerControlOptions as createPlayableEditorSceneTexturePickerControlOptions, findEditorSceneInspectorTextureAsset as findPlayableEditorSceneInspectorTextureAsset, getEditorSceneMaterialAssetDisplayName as getPlayableEditorSceneMaterialAssetDisplayName, } from './inspector.js';
11
11
  import { EDITOR_SCENE_MATERIAL_ASSET_FIELD_PATH_PREFIX, normalizeEditorSceneMaterialAssetValue, parseEditorSceneDuplicateMaterialAssetValue, validateEditorSceneMaterialAssetFieldValue, } from './paths.js';
12
12
  import { isReadonlyEditorSceneMaterialAsset, resolveEditorSceneMaterialAssetKind, } from './profile.js';
13
13
  import {} from './types.js';
14
14
  import { createMaterialAlphaModeOptions, createMaterialLightingModelOptions, } from './text.js';
15
+ // Inspector assembly evaluates many asset fields against one immutable document.
16
+ // Standalone public picker helpers intentionally remain fresh by default.
17
+ const NULL_MATERIAL_ASSET_CACHE_KEY = {};
18
+ const cachedMaterialPickerControlOptions = new WeakMap();
15
19
  export function createMaterialAssetSelectorInspectorProperty(document, nodeKind, input) {
16
20
  const currentAsset = input.currentAsset ?? findEditorSceneMaterialAsset(document, input.value);
17
21
  return {
@@ -47,7 +51,7 @@ export function createMaterialAssetSelectorInspectorProperty(document, nodeKind,
47
51
  }
48
52
  export function createMaterialAssetPickerControlOptions(document, currentAsset, text, currentValue) {
49
53
  return {
50
- ...createPlayableEditorSceneMaterialPickerControlOptions({
54
+ ...materialBindingInternals.createPickerControlOptions({
51
55
  materialAssets: document.scene.materialAssets ?? [],
52
56
  currentAsset,
53
57
  currentValue,
@@ -55,7 +59,7 @@ export function createMaterialAssetPickerControlOptions(document, currentAsset,
55
59
  displayText: createEditorSceneMaterialDisplayText(text),
56
60
  document,
57
61
  ownershipText: createEditorSceneMaterialOwnershipText(text),
58
- }),
62
+ }, materialBindingInternals.createUsageIndex(document)),
59
63
  actionDisabledReason: text.batchReplaceUnsupported,
60
64
  };
61
65
  }
@@ -328,4 +332,86 @@ function createMaterialAssetFieldInspectorProperty(document, materialAsset, fiel
328
332
  coerce: (inputValue) => normalizeEditorSceneMaterialAssetValue(fieldPath, inputValue),
329
333
  };
330
334
  }
335
+ function createMaterialAssetSelectorInspectorPropertyWithUsage(document, nodeKind, input, usageIndex) {
336
+ const currentAsset = input.currentAsset ?? findEditorSceneMaterialAsset(document, input.value);
337
+ return {
338
+ path: input.path,
339
+ label: input.label,
340
+ valueType: 'string',
341
+ control: 'custom',
342
+ customControl: 'asset-picker-card',
343
+ value: input.value,
344
+ readOnly: false,
345
+ persistence: 'document',
346
+ commitMode: 'change',
347
+ order: input.order,
348
+ controlOptions: createMaterialAssetPickerControlOptionsWithUsage(document, currentAsset, input.text, input.value, usageIndex),
349
+ tooltip: input.text.tooltips.materialAsset,
350
+ tags: ['ArtistMaterial', 'MaterialAsset'],
351
+ document,
352
+ validate: value => {
353
+ const duplicateMaterialAssetId = parseEditorSceneDuplicateMaterialAssetValue(value);
354
+ if (duplicateMaterialAssetId && hasEditorSceneMaterialAsset(document, duplicateMaterialAssetId)) {
355
+ return { ok: true, value };
356
+ }
357
+ if (value == null || value === '')
358
+ return { ok: true, value };
359
+ if (typeof value === 'string' && hasEditorSceneMaterialAsset(document, value)) {
360
+ return { ok: true, value };
361
+ }
362
+ return { ok: false, message: `Material asset not found: ${String(value)}` };
363
+ },
364
+ coerce: value => (typeof value === 'string' ? value.trim() : value),
365
+ effect: nodeKind === 'group' ? 'unsupported' : undefined,
366
+ disabledReason: nodeKind === 'group' ? 'Groups do not own materials.' : undefined,
367
+ };
368
+ }
369
+ function createMaterialAssetSelectorInspectorPropertyWithCachedUsage(document, nodeKind, input) {
370
+ return createMaterialAssetSelectorInspectorPropertyWithUsage(document, nodeKind, input, materialBindingInternals.getCachedUsageIndex(document));
371
+ }
372
+ function createMaterialAssetPickerControlOptionsWithUsage(document, currentAsset, text, currentValue, usageIndex) {
373
+ return {
374
+ ...materialBindingInternals.createPickerControlOptions({
375
+ materialAssets: document.scene.materialAssets ?? [],
376
+ currentAsset,
377
+ currentValue,
378
+ pickerText: createEditorSceneMaterialPickerText(text),
379
+ displayText: createEditorSceneMaterialDisplayText(text),
380
+ document,
381
+ ownershipText: createEditorSceneMaterialOwnershipText(text),
382
+ }, usageIndex),
383
+ actionDisabledReason: text.batchReplaceUnsupported,
384
+ };
385
+ }
386
+ function createMaterialAssetPickerControlOptionsWithCachedUsage(document, currentAsset, text, currentValue) {
387
+ let byText = cachedMaterialPickerControlOptions.get(document);
388
+ if (!byText) {
389
+ byText = new WeakMap();
390
+ cachedMaterialPickerControlOptions.set(document, byText);
391
+ }
392
+ let byAsset = byText.get(text);
393
+ if (!byAsset) {
394
+ byAsset = new WeakMap();
395
+ byText.set(text, byAsset);
396
+ }
397
+ const assetKey = currentAsset ?? NULL_MATERIAL_ASSET_CACHE_KEY;
398
+ let byValue = byAsset.get(assetKey);
399
+ if (!byValue) {
400
+ byValue = new Map();
401
+ byAsset.set(assetKey, byValue);
402
+ }
403
+ const cached = byValue.get(currentValue);
404
+ if (cached)
405
+ return cached;
406
+ const options = createMaterialAssetPickerControlOptionsWithUsage(document, currentAsset, text, currentValue, materialBindingInternals.getCachedUsageIndex(document));
407
+ byValue.set(currentValue, options);
408
+ return options;
409
+ }
410
+ const materialAssetFieldInternals = {
411
+ createSelectorInspectorPropertyWithUsage: createMaterialAssetSelectorInspectorPropertyWithUsage,
412
+ createSelectorInspectorPropertyWithCachedUsage: createMaterialAssetSelectorInspectorPropertyWithCachedUsage,
413
+ createPickerControlOptionsWithUsage: createMaterialAssetPickerControlOptionsWithUsage,
414
+ createPickerControlOptionsWithCachedUsage: createMaterialAssetPickerControlOptionsWithCachedUsage,
415
+ };
416
+ export default materialAssetFieldInternals;
331
417
  //# sourceMappingURL=asset-fields.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"asset-fields.js","sourceRoot":"","sources":["../../src/material-binding/asset-fields.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * SDK ownership: playable material inspector asset fields\n * Reviewed: 2026-07-06\n * Purpose: playable material Inspector fields, copy, slots, and material asset section assembly.\n */\nimport {\n type InspectorProperty,\n} from '@fps-games/editor-core';\n\nimport type {\n EditorSceneNodeKind,\n} from '../document/index';\nimport {\n createEditorSceneReadonlyInspectorProperty,\n} from '../inspector/readonly';\nimport {\n findEditorSceneMaterialAsset,\n hasEditorSceneMaterialAsset,\n} from './binding';\nimport {\n DEFAULT_PBR_EDITOR_SCENE_MATERIAL_ASSET_ID,\n DEFAULT_STANDARD_EDITOR_SCENE_MATERIAL_ASSET_ID,\n} from './default-assets';\nimport {\n createEditorSceneMaterialAssetFieldInspectorPropertyInput as createPlayableEditorSceneMaterialAssetFieldInspectorPropertyInput,\n createEditorSceneMaterialPickerControlOptions as createPlayableEditorSceneMaterialPickerControlOptions,\n createEditorSceneTexturePickerControlOptions as createPlayableEditorSceneTexturePickerControlOptions,\n findEditorSceneInspectorTextureAsset as findPlayableEditorSceneInspectorTextureAsset,\n getEditorSceneMaterialAssetDisplayName as getPlayableEditorSceneMaterialAssetDisplayName,\n} from './inspector';\nimport {\n EDITOR_SCENE_MATERIAL_ASSET_FIELD_PATH_PREFIX,\n normalizeEditorSceneMaterialAssetValue,\n parseEditorSceneDuplicateMaterialAssetValue,\n validateEditorSceneMaterialAssetFieldValue,\n} from './paths';\nimport {\n isReadonlyEditorSceneMaterialAsset,\n resolveEditorSceneMaterialAssetKind,\n} from './profile';\nimport {\n type EditorSceneInspectorTextureAsset,\n type EditorSceneMaterialAsset,\n type EditorSceneMaterialDocument,\n type EditorSceneMaterialInspectorContext,\n} from './types';\nimport {\n createMaterialAlphaModeOptions,\n createMaterialLightingModelOptions,\n type ArtistMaterialInspectorText,\n} from './text';\n\ntype EditorSceneDocument = EditorSceneMaterialDocument;\n\nexport function createMaterialAssetSelectorInspectorProperty(\n document: EditorSceneDocument,\n nodeKind: EditorSceneNodeKind,\n input: {\n path: string;\n label: string;\n value: string;\n order: number;\n text: ArtistMaterialInspectorText;\n currentAsset?: EditorSceneMaterialAsset | null;\n },\n): InspectorProperty<EditorSceneDocument> {\n const currentAsset = input.currentAsset ?? findEditorSceneMaterialAsset(document, input.value);\n return {\n path: input.path,\n label: input.label,\n valueType: 'string',\n control: 'custom',\n customControl: 'asset-picker-card',\n value: input.value,\n readOnly: false,\n persistence: 'document',\n commitMode: 'change',\n order: input.order,\n controlOptions: createMaterialAssetPickerControlOptions(document, currentAsset, input.text, input.value),\n tooltip: input.text.tooltips.materialAsset,\n tags: ['ArtistMaterial', 'MaterialAsset'],\n document,\n validate: (value) => {\n const duplicateMaterialAssetId = parseEditorSceneDuplicateMaterialAssetValue(value);\n if (duplicateMaterialAssetId && hasEditorSceneMaterialAsset(document, duplicateMaterialAssetId)) {\n return { ok: true, value };\n }\n if (value == null || value === '') return { ok: true, value };\n if (typeof value === 'string' && hasEditorSceneMaterialAsset(document, value)) return { ok: true, value };\n return { ok: false, message: `Material asset not found: ${String(value)}` };\n },\n coerce: (value) => (typeof value === 'string' ? value.trim() : value),\n effect: nodeKind === 'group' ? 'unsupported' : undefined,\n disabledReason: nodeKind === 'group' ? 'Groups do not own materials.' : undefined,\n };\n}\n\n\n\nexport function createMaterialAssetPickerControlOptions(\n document: EditorSceneDocument,\n currentAsset: EditorSceneMaterialAsset | null,\n text: ArtistMaterialInspectorText,\n currentValue: string,\n): Record<string, unknown> {\n return {\n ...createPlayableEditorSceneMaterialPickerControlOptions({\n materialAssets: document.scene.materialAssets ?? [],\n currentAsset,\n currentValue,\n pickerText: createEditorSceneMaterialPickerText(text),\n displayText: createEditorSceneMaterialDisplayText(text),\n document,\n ownershipText: createEditorSceneMaterialOwnershipText(text),\n }),\n actionDisabledReason: text.batchReplaceUnsupported,\n };\n}\n\nfunction createReadonlyInspectorProperty(\n path: string,\n label: string,\n value: unknown,\n order: number,\n tooltip?: string,\n): InspectorProperty<EditorSceneDocument> {\n return createEditorSceneReadonlyInspectorProperty<EditorSceneDocument>({\n path,\n label,\n value,\n order,\n persistence: 'readonly',\n source: 'Document',\n tooltip,\n })!;\n}\n\n\n\nfunction getEditorSceneMaterialAssetDisplayName(\n materialAsset: EditorSceneMaterialAsset,\n text: ArtistMaterialInspectorText,\n): string {\n return getPlayableEditorSceneMaterialAssetDisplayName(\n materialAsset,\n createEditorSceneMaterialDisplayText(text),\n );\n}\n\n\n\nfunction createEditorSceneMaterialPickerText(text: ArtistMaterialInspectorText) {\n return {\n materialPickerTitle: text.materialPickerTitle,\n replace: text.replace,\n duplicateForObject: text.duplicateForObject,\n duplicateForObjectTooltip: text.tooltips.duplicateForObject,\n summaryMissingAsset: text.summaryMissingAsset,\n summaryInherit: text.summaryInherit,\n inheritNone: text.inheritNone,\n };\n}\n\n\n\nfunction createEditorSceneMaterialOwnershipText(text: ArtistMaterialInspectorText) {\n return {\n formatUsageCount: text.formatUsageCount,\n formatEditImpact: text.formatMaterialEditImpact,\n formatDuplicateImpact: text.formatDuplicateMaterialImpact,\n };\n}\n\n\n\nfunction createEditorSceneMaterialDisplayText(text: ArtistMaterialInspectorText) {\n return {\n defaultMaterial: text.defaultMaterial,\n defaultStandardMaterial: text.defaultStandardMaterial,\n defaultMaterialMeta: text.defaultMaterialMeta,\n defaultStandardMaterialMeta: text.defaultStandardMaterialMeta,\n formatMaterialMeta: (materialAssetId: string) => `Material - ${materialAssetId}`,\n };\n}\n\n\n\nexport function createArtistMaterialAssetInspectorProperties(\n document: EditorSceneDocument,\n materialAsset: EditorSceneMaterialAsset | null,\n text: ArtistMaterialInspectorText,\n orderOffset: number,\n context: EditorSceneMaterialInspectorContext = {},\n): InspectorProperty<EditorSceneDocument>[] {\n if (!materialAsset) {\n return [];\n }\n const materialKind = resolveEditorSceneMaterialAssetKind(materialAsset);\n const identityProperties = createReadonlyArtistMaterialAssetIdentityProperties(materialAsset, text, orderOffset);\n if (isEditorSceneMaterialAssetReadonlyForAssetFields(materialAsset, context)) {\n return [\n ...identityProperties,\n createEditorSceneReadonlyInspectorProperty({\n path: `scene.materialAssets.${materialAsset.id}.profile`,\n label: text.assetProfile,\n value: text.defaultMaterialReadOnly,\n order: orderOffset + 2,\n source: 'Document',\n effect: 'default',\n disabledReason: text.defaultMaterialReadOnly,\n tags: ['ArtistMaterial', 'MaterialAsset'],\n tooltip: text.tooltips.assetProfile,\n })!,\n ];\n }\n const profile = materialAsset.profile ?? {};\n const properties: InspectorProperty<EditorSceneDocument>[] = [\n ...identityProperties,\n createMaterialAssetEnumInspectorProperty(document, materialAsset, 'profile.lightingModel', text.assetLightingModel, profile.lightingModel ?? 'lit', orderOffset + 1, createMaterialLightingModelOptions(text), text.tooltips.lightingModel),\n createMaterialTexturePickerInspectorProperty({\n path: `${EDITOR_SCENE_MATERIAL_ASSET_FIELD_PATH_PREFIX}${materialAsset.id}.profile.baseColor.texture.textureAssetId`,\n label: text.assetBaseTexture,\n value: readArtistMaterialTexturePickerValue(profile.baseColor?.texture),\n order: orderOffset + 2,\n text,\n context,\n tooltip: text.tooltips.baseTexture,\n }),\n createMaterialAssetNumberInspectorProperty(document, materialAsset, 'profile.baseColor.brightness', text.assetBrightness, profile.baseColor?.brightness ?? 1, orderOffset + 3, 0, 2, 0.05, text.tooltips.brightness),\n createMaterialAssetNumberInspectorProperty(document, materialAsset, 'profile.baseColor.saturation', text.assetSaturation, profile.baseColor?.saturation ?? 1, orderOffset + 4, 0, 2, 0.05, text.tooltips.saturation),\n createMaterialAssetNumberInspectorProperty(document, materialAsset, 'profile.baseColor.contrast', text.assetContrast, profile.baseColor?.contrast ?? 1, orderOffset + 5, 0, 2, 0.05, text.tooltips.contrast),\n createMaterialAssetNumberInspectorProperty(document, materialAsset, 'profile.baseColor.hue', text.assetHue, profile.baseColor?.hue ?? 0, orderOffset + 6, -180, 180, 1, text.tooltips.hue),\n createMaterialAssetFieldInspectorProperty(document, materialAsset, 'profile.baseColor.color', text.assetBaseColor, profile.baseColor?.color ?? { r: 1, g: 1, b: 1 }, orderOffset + 7, 'color', 'color', 'immediate', text.tooltips.baseColor),\n createMaterialTexturePickerInspectorProperty({\n path: `${EDITOR_SCENE_MATERIAL_ASSET_FIELD_PATH_PREFIX}${materialAsset.id}.profile.normal.texture.textureAssetId`,\n label: text.assetNormalTexture,\n value: readArtistMaterialTexturePickerValue(profile.normal?.texture),\n order: orderOffset + 8,\n text,\n context,\n tooltip: text.tooltips.normalTexture,\n }),\n createMaterialAssetNumberInspectorProperty(document, materialAsset, 'profile.normal.strength', text.assetNormalStrength, profile.normal?.strength ?? 1, orderOffset + 9, 0, 4, 0.05, text.tooltips.normalStrength),\n ];\n if (materialKind === 'pbr') {\n properties.push(\n createMaterialAssetNumberInspectorProperty(document, materialAsset, 'profile.metallic', text.assetMetallic, profile.metallic ?? 0, orderOffset + 10, 0, 1, 0.05, text.tooltips.metallic),\n createMaterialAssetNumberInspectorProperty(document, materialAsset, 'profile.roughness', text.assetRoughness, profile.roughness ?? 1, orderOffset + 11, 0, 1, 0.05, text.tooltips.roughness),\n createMaterialTexturePickerInspectorProperty({\n path: `${EDITOR_SCENE_MATERIAL_ASSET_FIELD_PATH_PREFIX}${materialAsset.id}.profile.metallicRoughness.texture.textureAssetId`,\n label: text.assetMetallicRoughnessTexture,\n value: readArtistMaterialTexturePickerValue(profile.metallicRoughness?.texture),\n order: orderOffset + 12,\n text,\n context,\n tooltip: text.tooltips.metallicRoughnessTexture,\n }),\n createMaterialTexturePickerInspectorProperty({\n path: `${EDITOR_SCENE_MATERIAL_ASSET_FIELD_PATH_PREFIX}${materialAsset.id}.profile.occlusion.texture.textureAssetId`,\n label: text.assetOcclusionTexture,\n value: readArtistMaterialTexturePickerValue(profile.occlusion?.texture),\n order: orderOffset + 13,\n text,\n context,\n tooltip: text.tooltips.occlusionTexture,\n }),\n createMaterialAssetNumberInspectorProperty(document, materialAsset, 'profile.occlusion.strength', text.assetOcclusionStrength, profile.occlusion?.strength ?? 1, orderOffset + 14, 0, 4, 0.05, text.tooltips.occlusionStrength),\n );\n }\n properties.push(\n createMaterialAssetFieldInspectorProperty(document, materialAsset, 'profile.emission.color', text.assetEmissionColor, profile.emission?.color ?? { r: 0, g: 0, b: 0 }, orderOffset + 20, 'color', 'color', 'immediate', text.tooltips.emissionColor),\n createMaterialAssetNumberInspectorProperty(document, materialAsset, 'profile.emission.intensity', text.assetEmissionIntensity, profile.emission?.intensity ?? 0, orderOffset + 21, 0, undefined, 0.05, text.tooltips.emissionIntensity),\n createMaterialTexturePickerInspectorProperty({\n path: `${EDITOR_SCENE_MATERIAL_ASSET_FIELD_PATH_PREFIX}${materialAsset.id}.profile.emission.texture.textureAssetId`,\n label: text.assetEmissionTexture,\n value: readArtistMaterialTexturePickerValue(profile.emission?.texture),\n order: orderOffset + 22,\n text,\n context,\n tooltip: text.tooltips.emissionTexture,\n }),\n createMaterialTexturePickerInspectorProperty({\n path: `${EDITOR_SCENE_MATERIAL_ASSET_FIELD_PATH_PREFIX}${materialAsset.id}.profile.emission.maskTexture.textureAssetId`,\n label: text.assetEmissionMaskUrl,\n value: readArtistMaterialTexturePickerValue(profile.emission?.maskTexture),\n order: orderOffset + 23,\n text,\n context,\n tooltip: text.tooltips.emissionMaskUrl,\n }),\n createMaterialAssetEnumInspectorProperty(document, materialAsset, 'profile.alpha.mode', text.assetAlphaMode, profile.alpha?.mode ?? 'opaque', orderOffset + 30, createMaterialAlphaModeOptions(text), text.tooltips.alphaMode),\n createMaterialAssetNumberInspectorProperty(document, materialAsset, 'profile.alpha.opacity', text.assetAlphaOpacity, profile.alpha?.opacity ?? 1, orderOffset + 31, 0, 1, 0.05, text.tooltips.alphaOpacity),\n createMaterialAssetNumberInspectorProperty(document, materialAsset, 'profile.alpha.cutoff', text.assetAlphaCutoff, profile.alpha?.cutoff ?? 0.5, orderOffset + 32, 0, 1, 0.01, text.tooltips.alphaCutoff),\n createMaterialTexturePickerInspectorProperty({\n path: `${EDITOR_SCENE_MATERIAL_ASSET_FIELD_PATH_PREFIX}${materialAsset.id}.profile.alpha.texture.textureAssetId`,\n label: text.assetAlphaTexture,\n value: readArtistMaterialTexturePickerValue(profile.alpha?.texture),\n order: orderOffset + 33,\n text,\n context,\n tooltip: text.tooltips.alphaTexture,\n }),\n );\n return properties;\n}\n\nfunction readEditorSceneDefaultMaterialAssetIds(context: EditorSceneMaterialInspectorContext): readonly string[] {\n return context.defaultMaterialAssetIds ?? [\n DEFAULT_PBR_EDITOR_SCENE_MATERIAL_ASSET_ID,\n DEFAULT_STANDARD_EDITOR_SCENE_MATERIAL_ASSET_ID,\n ];\n}\n\nfunction isEditorSceneMaterialAssetReadonlyForAssetFields(\n materialAsset: EditorSceneMaterialAsset,\n context: EditorSceneMaterialInspectorContext,\n): boolean {\n return isReadonlyEditorSceneMaterialAsset(materialAsset, readEditorSceneDefaultMaterialAssetIds(context))\n || materialAsset.system?.preset === 'default-pbr'\n || materialAsset.system?.preset === 'default-standard';\n}\n\n\n\nfunction createReadonlyArtistMaterialAssetIdentityProperties(\n materialAsset: EditorSceneMaterialAsset,\n text: ArtistMaterialInspectorText,\n orderOffset: number,\n): InspectorProperty<EditorSceneDocument>[] {\n return [\n createReadonlyInspectorProperty(\n `${EDITOR_SCENE_MATERIAL_ASSET_FIELD_PATH_PREFIX}${materialAsset.id}.name`,\n text.assetName,\n getEditorSceneMaterialAssetDisplayName(materialAsset, text),\n orderOffset,\n text.tooltips.assetName,\n ),\n createReadonlyInspectorProperty(\n `${EDITOR_SCENE_MATERIAL_ASSET_FIELD_PATH_PREFIX}${materialAsset.id}.materialKind`,\n text.assetKind,\n getEditorSceneMaterialKindLabel(resolveEditorSceneMaterialAssetKind(materialAsset), text),\n orderOffset + 1,\n text.tooltips.assetKind,\n ),\n ];\n}\n\n\n\n\nfunction getEditorSceneMaterialKindLabel(\n materialKind: 'pbr' | 'standard',\n text: ArtistMaterialInspectorText,\n): string {\n return materialKind === 'standard' ? text.assetKindStandard : text.assetKindPbr;\n}\n\n\n\n\nfunction createMaterialTexturePickerInspectorProperty(input: {\n path: string;\n label: string;\n value: string;\n order: number;\n text: ArtistMaterialInspectorText;\n context: EditorSceneMaterialInspectorContext;\n tooltip?: string;\n}): InspectorProperty<EditorSceneDocument> {\n const currentTexture = findEditorSceneInspectorTextureAssetFromContext(input.context, input.value);\n return {\n path: input.path,\n label: input.label,\n valueType: 'string',\n control: 'custom',\n customControl: 'asset-picker-card',\n value: input.value,\n readOnly: false,\n persistence: 'document',\n commitMode: 'change',\n order: input.order,\n tooltip: input.tooltip,\n tags: ['ArtistMaterial', 'TextureAsset'],\n controlOptions: createTexturePickerControlOptions(input.context, input.text, input.value, currentTexture),\n validate: (value) => {\n const normalized = normalizeMaterialTexturePickerPropertyValue(input.context, input.path, value);\n return normalized.ok\n ? { ok: true, value: normalized.value }\n : { ok: false, message: 'Invalid texture selection.' };\n },\n coerce: (value) => {\n const normalized = normalizeMaterialTexturePickerPropertyValue(input.context, input.path, value);\n return normalized.ok ? normalized.value : null;\n },\n };\n}\n\n\n\nexport function createTexturePickerControlOptions(\n context: EditorSceneMaterialInspectorContext,\n text: ArtistMaterialInspectorText,\n currentValue: string,\n currentTexture: EditorSceneInspectorTextureAsset | null,\n): Record<string, unknown> {\n return {\n ...createPlayableEditorSceneTexturePickerControlOptions({\n textureAssets: context.textureAssets,\n currentTexture,\n currentValue,\n pickerText: createEditorSceneTexturePickerText(text),\n candidateValue: 'assetId',\n }),\n };\n}\n\n\n\nexport function findEditorSceneInspectorTextureAssetFromContext(\n context: EditorSceneMaterialInspectorContext,\n value: string,\n): EditorSceneInspectorTextureAsset | null {\n return findPlayableEditorSceneInspectorTextureAsset(context.textureAssets, value) as EditorSceneInspectorTextureAsset | null;\n}\n\n\n\nexport function readArtistMaterialTexturePickerValue(\n texture: { textureAssetId?: string | null; url?: string | null } | null | undefined,\n): string {\n const textureAssetId = typeof texture?.textureAssetId === 'string' ? texture.textureAssetId.trim() : '';\n if (textureAssetId) return textureAssetId;\n const textureUrl = typeof texture?.url === 'string' ? texture.url.trim() : '';\n return textureUrl;\n}\n\n\n\nfunction normalizeMaterialTexturePickerPropertyValue(\n context: EditorSceneMaterialInspectorContext,\n path: string,\n value: unknown,\n): { ok: true; value: string | null } | { ok: false } {\n if (value == null || value === '') return { ok: true, value: null };\n if (typeof value !== 'string') return { ok: false };\n const trimmed = value.trim();\n if (!trimmed) return { ok: true, value: null };\n if (!path.endsWith('.textureAssetId')) return { ok: true, value: trimmed };\n const textureAsset = findPlayableEditorSceneInspectorTextureAsset(context.textureAssets, trimmed);\n if (textureAsset) return { ok: true, value: textureAsset.id };\n return /^[A-Za-z0-9_-]+$/.test(trimmed) ? { ok: true, value: trimmed } : { ok: true, value: null };\n}\n\n\n\nfunction createEditorSceneTexturePickerText(text: ArtistMaterialInspectorText) {\n return {\n texturePickerTitle: text.texturePickerTitle,\n replace: text.replace,\n inheritNone: text.inheritNone,\n summaryInherit: text.summaryInherit,\n };\n}\n\n\n\nfunction createMaterialAssetNumberInspectorProperty(\n document: EditorSceneDocument,\n materialAsset: EditorSceneMaterialAsset,\n path: string,\n label: string,\n value: number,\n order: number,\n min?: number,\n max?: number,\n step = 0.05,\n tooltip?: string,\n): InspectorProperty<EditorSceneDocument> {\n return {\n ...createMaterialAssetFieldInspectorProperty(document, materialAsset, path, label, value, order, 'number', 'number', 'live', tooltip),\n min,\n max,\n step,\n };\n}\n\n\n\nfunction createMaterialAssetEnumInspectorProperty(\n document: EditorSceneDocument,\n materialAsset: EditorSceneMaterialAsset,\n path: string,\n label: string,\n value: string,\n order: number,\n options: InspectorProperty<EditorSceneDocument>['options'],\n tooltip?: string,\n): InspectorProperty<EditorSceneDocument> {\n return {\n ...createMaterialAssetFieldInspectorProperty(document, materialAsset, path, label, value, order, 'enum', 'enum', 'immediate', tooltip),\n options,\n controlOptions: { variant: 'segmented' },\n };\n}\n\n\n\nfunction createMaterialAssetFieldInspectorProperty(\n document: EditorSceneDocument,\n materialAsset: EditorSceneMaterialAsset,\n fieldPath: string,\n label: string,\n value: unknown,\n order: number,\n valueType: InspectorProperty<EditorSceneDocument>['valueType'],\n control: InspectorProperty<EditorSceneDocument>['control'],\n commitMode: InspectorProperty<EditorSceneDocument>['commitMode'],\n tooltip?: string,\n): InspectorProperty<EditorSceneDocument> {\n return {\n ...createPlayableEditorSceneMaterialAssetFieldInspectorPropertyInput({\n document,\n materialAsset,\n fieldPath,\n label,\n value,\n order,\n valueType,\n control,\n commitMode,\n tooltip,\n pathPrefix: EDITOR_SCENE_MATERIAL_ASSET_FIELD_PATH_PREFIX,\n }),\n validate: (inputValue) => {\n const normalizedValue = normalizeEditorSceneMaterialAssetValue(fieldPath, inputValue);\n return validateEditorSceneMaterialAssetFieldValue(fieldPath, normalizedValue)\n ? { ok: true, value: normalizedValue }\n : { ok: false, message: `Invalid material asset field: ${fieldPath}.` };\n },\n coerce: (inputValue) => normalizeEditorSceneMaterialAssetValue(fieldPath, inputValue),\n };\n}\n"]}
1
+ {"version":3,"file":"asset-fields.js","sourceRoot":"","sources":["../../src/material-binding/asset-fields.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * SDK ownership: playable material inspector asset fields\n * Reviewed: 2026-07-06\n * Purpose: playable material Inspector fields, copy, slots, and material asset section assembly.\n */\nimport {\n type InspectorProperty,\n} from '@fps-games/editor-core';\n\nimport type {\n EditorSceneNodeKind,\n} from '../document/index';\nimport {\n createEditorSceneReadonlyInspectorProperty,\n} from '../inspector/readonly';\nimport {\n default as materialBindingInternals,\n findEditorSceneMaterialAsset,\n hasEditorSceneMaterialAsset,\n} from './binding';\nimport {\n DEFAULT_PBR_EDITOR_SCENE_MATERIAL_ASSET_ID,\n DEFAULT_STANDARD_EDITOR_SCENE_MATERIAL_ASSET_ID,\n} from './default-assets';\nimport {\n createEditorSceneMaterialAssetFieldInspectorPropertyInput as createPlayableEditorSceneMaterialAssetFieldInspectorPropertyInput,\n createEditorSceneTexturePickerControlOptions as createPlayableEditorSceneTexturePickerControlOptions,\n findEditorSceneInspectorTextureAsset as findPlayableEditorSceneInspectorTextureAsset,\n getEditorSceneMaterialAssetDisplayName as getPlayableEditorSceneMaterialAssetDisplayName,\n} from './inspector';\nimport {\n EDITOR_SCENE_MATERIAL_ASSET_FIELD_PATH_PREFIX,\n normalizeEditorSceneMaterialAssetValue,\n parseEditorSceneDuplicateMaterialAssetValue,\n validateEditorSceneMaterialAssetFieldValue,\n} from './paths';\nimport {\n isReadonlyEditorSceneMaterialAsset,\n resolveEditorSceneMaterialAssetKind,\n} from './profile';\nimport {\n type EditorSceneInspectorTextureAsset,\n type EditorSceneMaterialAsset,\n type EditorSceneMaterialDocument,\n type EditorSceneMaterialInspectorContext,\n} from './types';\nimport {\n createMaterialAlphaModeOptions,\n createMaterialLightingModelOptions,\n type ArtistMaterialInspectorText,\n} from './text';\n\ntype EditorSceneDocument = EditorSceneMaterialDocument;\n\n// Inspector assembly evaluates many asset fields against one immutable document.\n// Standalone public picker helpers intentionally remain fresh by default.\n\nconst NULL_MATERIAL_ASSET_CACHE_KEY = {};\nconst cachedMaterialPickerControlOptions = new WeakMap<\n object,\n WeakMap<ArtistMaterialInspectorText, WeakMap<object, Map<string, Record<string, unknown>>>>\n>();\n\nexport function createMaterialAssetSelectorInspectorProperty(\n document: EditorSceneDocument,\n nodeKind: EditorSceneNodeKind,\n input: {\n path: string;\n label: string;\n value: string;\n order: number;\n text: ArtistMaterialInspectorText;\n currentAsset?: EditorSceneMaterialAsset | null;\n },\n): InspectorProperty<EditorSceneDocument> {\n const currentAsset = input.currentAsset ?? findEditorSceneMaterialAsset(document, input.value);\n return {\n path: input.path,\n label: input.label,\n valueType: 'string',\n control: 'custom',\n customControl: 'asset-picker-card',\n value: input.value,\n readOnly: false,\n persistence: 'document',\n commitMode: 'change',\n order: input.order,\n controlOptions: createMaterialAssetPickerControlOptions(document, currentAsset, input.text, input.value),\n tooltip: input.text.tooltips.materialAsset,\n tags: ['ArtistMaterial', 'MaterialAsset'],\n document,\n validate: (value) => {\n const duplicateMaterialAssetId = parseEditorSceneDuplicateMaterialAssetValue(value);\n if (duplicateMaterialAssetId && hasEditorSceneMaterialAsset(document, duplicateMaterialAssetId)) {\n return { ok: true, value };\n }\n if (value == null || value === '') return { ok: true, value };\n if (typeof value === 'string' && hasEditorSceneMaterialAsset(document, value)) return { ok: true, value };\n return { ok: false, message: `Material asset not found: ${String(value)}` };\n },\n coerce: (value) => (typeof value === 'string' ? value.trim() : value),\n effect: nodeKind === 'group' ? 'unsupported' : undefined,\n disabledReason: nodeKind === 'group' ? 'Groups do not own materials.' : undefined,\n };\n}\n\n\n\nexport function createMaterialAssetPickerControlOptions(\n document: EditorSceneDocument,\n currentAsset: EditorSceneMaterialAsset | null,\n text: ArtistMaterialInspectorText,\n currentValue: string,\n): Record<string, unknown> {\n return {\n ...materialBindingInternals.createPickerControlOptions({\n materialAssets: document.scene.materialAssets ?? [],\n currentAsset,\n currentValue,\n pickerText: createEditorSceneMaterialPickerText(text),\n displayText: createEditorSceneMaterialDisplayText(text),\n document,\n ownershipText: createEditorSceneMaterialOwnershipText(text),\n }, materialBindingInternals.createUsageIndex(document)),\n actionDisabledReason: text.batchReplaceUnsupported,\n };\n}\n\nfunction createReadonlyInspectorProperty(\n path: string,\n label: string,\n value: unknown,\n order: number,\n tooltip?: string,\n): InspectorProperty<EditorSceneDocument> {\n return createEditorSceneReadonlyInspectorProperty<EditorSceneDocument>({\n path,\n label,\n value,\n order,\n persistence: 'readonly',\n source: 'Document',\n tooltip,\n })!;\n}\n\n\n\nfunction getEditorSceneMaterialAssetDisplayName(\n materialAsset: EditorSceneMaterialAsset,\n text: ArtistMaterialInspectorText,\n): string {\n return getPlayableEditorSceneMaterialAssetDisplayName(\n materialAsset,\n createEditorSceneMaterialDisplayText(text),\n );\n}\n\n\n\nfunction createEditorSceneMaterialPickerText(text: ArtistMaterialInspectorText) {\n return {\n materialPickerTitle: text.materialPickerTitle,\n replace: text.replace,\n duplicateForObject: text.duplicateForObject,\n duplicateForObjectTooltip: text.tooltips.duplicateForObject,\n summaryMissingAsset: text.summaryMissingAsset,\n summaryInherit: text.summaryInherit,\n inheritNone: text.inheritNone,\n };\n}\n\n\n\nfunction createEditorSceneMaterialOwnershipText(text: ArtistMaterialInspectorText) {\n return {\n formatUsageCount: text.formatUsageCount,\n formatEditImpact: text.formatMaterialEditImpact,\n formatDuplicateImpact: text.formatDuplicateMaterialImpact,\n };\n}\n\n\n\nfunction createEditorSceneMaterialDisplayText(text: ArtistMaterialInspectorText) {\n return {\n defaultMaterial: text.defaultMaterial,\n defaultStandardMaterial: text.defaultStandardMaterial,\n defaultMaterialMeta: text.defaultMaterialMeta,\n defaultStandardMaterialMeta: text.defaultStandardMaterialMeta,\n formatMaterialMeta: (materialAssetId: string) => `Material - ${materialAssetId}`,\n };\n}\n\n\n\nexport function createArtistMaterialAssetInspectorProperties(\n document: EditorSceneDocument,\n materialAsset: EditorSceneMaterialAsset | null,\n text: ArtistMaterialInspectorText,\n orderOffset: number,\n context: EditorSceneMaterialInspectorContext = {},\n): InspectorProperty<EditorSceneDocument>[] {\n if (!materialAsset) {\n return [];\n }\n const materialKind = resolveEditorSceneMaterialAssetKind(materialAsset);\n const identityProperties = createReadonlyArtistMaterialAssetIdentityProperties(materialAsset, text, orderOffset);\n if (isEditorSceneMaterialAssetReadonlyForAssetFields(materialAsset, context)) {\n return [\n ...identityProperties,\n createEditorSceneReadonlyInspectorProperty({\n path: `scene.materialAssets.${materialAsset.id}.profile`,\n label: text.assetProfile,\n value: text.defaultMaterialReadOnly,\n order: orderOffset + 2,\n source: 'Document',\n effect: 'default',\n disabledReason: text.defaultMaterialReadOnly,\n tags: ['ArtistMaterial', 'MaterialAsset'],\n tooltip: text.tooltips.assetProfile,\n })!,\n ];\n }\n const profile = materialAsset.profile ?? {};\n const properties: InspectorProperty<EditorSceneDocument>[] = [\n ...identityProperties,\n createMaterialAssetEnumInspectorProperty(document, materialAsset, 'profile.lightingModel', text.assetLightingModel, profile.lightingModel ?? 'lit', orderOffset + 1, createMaterialLightingModelOptions(text), text.tooltips.lightingModel),\n createMaterialTexturePickerInspectorProperty({\n path: `${EDITOR_SCENE_MATERIAL_ASSET_FIELD_PATH_PREFIX}${materialAsset.id}.profile.baseColor.texture.textureAssetId`,\n label: text.assetBaseTexture,\n value: readArtistMaterialTexturePickerValue(profile.baseColor?.texture),\n order: orderOffset + 2,\n text,\n context,\n tooltip: text.tooltips.baseTexture,\n }),\n createMaterialAssetNumberInspectorProperty(document, materialAsset, 'profile.baseColor.brightness', text.assetBrightness, profile.baseColor?.brightness ?? 1, orderOffset + 3, 0, 2, 0.05, text.tooltips.brightness),\n createMaterialAssetNumberInspectorProperty(document, materialAsset, 'profile.baseColor.saturation', text.assetSaturation, profile.baseColor?.saturation ?? 1, orderOffset + 4, 0, 2, 0.05, text.tooltips.saturation),\n createMaterialAssetNumberInspectorProperty(document, materialAsset, 'profile.baseColor.contrast', text.assetContrast, profile.baseColor?.contrast ?? 1, orderOffset + 5, 0, 2, 0.05, text.tooltips.contrast),\n createMaterialAssetNumberInspectorProperty(document, materialAsset, 'profile.baseColor.hue', text.assetHue, profile.baseColor?.hue ?? 0, orderOffset + 6, -180, 180, 1, text.tooltips.hue),\n createMaterialAssetFieldInspectorProperty(document, materialAsset, 'profile.baseColor.color', text.assetBaseColor, profile.baseColor?.color ?? { r: 1, g: 1, b: 1 }, orderOffset + 7, 'color', 'color', 'immediate', text.tooltips.baseColor),\n createMaterialTexturePickerInspectorProperty({\n path: `${EDITOR_SCENE_MATERIAL_ASSET_FIELD_PATH_PREFIX}${materialAsset.id}.profile.normal.texture.textureAssetId`,\n label: text.assetNormalTexture,\n value: readArtistMaterialTexturePickerValue(profile.normal?.texture),\n order: orderOffset + 8,\n text,\n context,\n tooltip: text.tooltips.normalTexture,\n }),\n createMaterialAssetNumberInspectorProperty(document, materialAsset, 'profile.normal.strength', text.assetNormalStrength, profile.normal?.strength ?? 1, orderOffset + 9, 0, 4, 0.05, text.tooltips.normalStrength),\n ];\n if (materialKind === 'pbr') {\n properties.push(\n createMaterialAssetNumberInspectorProperty(document, materialAsset, 'profile.metallic', text.assetMetallic, profile.metallic ?? 0, orderOffset + 10, 0, 1, 0.05, text.tooltips.metallic),\n createMaterialAssetNumberInspectorProperty(document, materialAsset, 'profile.roughness', text.assetRoughness, profile.roughness ?? 1, orderOffset + 11, 0, 1, 0.05, text.tooltips.roughness),\n createMaterialTexturePickerInspectorProperty({\n path: `${EDITOR_SCENE_MATERIAL_ASSET_FIELD_PATH_PREFIX}${materialAsset.id}.profile.metallicRoughness.texture.textureAssetId`,\n label: text.assetMetallicRoughnessTexture,\n value: readArtistMaterialTexturePickerValue(profile.metallicRoughness?.texture),\n order: orderOffset + 12,\n text,\n context,\n tooltip: text.tooltips.metallicRoughnessTexture,\n }),\n createMaterialTexturePickerInspectorProperty({\n path: `${EDITOR_SCENE_MATERIAL_ASSET_FIELD_PATH_PREFIX}${materialAsset.id}.profile.occlusion.texture.textureAssetId`,\n label: text.assetOcclusionTexture,\n value: readArtistMaterialTexturePickerValue(profile.occlusion?.texture),\n order: orderOffset + 13,\n text,\n context,\n tooltip: text.tooltips.occlusionTexture,\n }),\n createMaterialAssetNumberInspectorProperty(document, materialAsset, 'profile.occlusion.strength', text.assetOcclusionStrength, profile.occlusion?.strength ?? 1, orderOffset + 14, 0, 4, 0.05, text.tooltips.occlusionStrength),\n );\n }\n properties.push(\n createMaterialAssetFieldInspectorProperty(document, materialAsset, 'profile.emission.color', text.assetEmissionColor, profile.emission?.color ?? { r: 0, g: 0, b: 0 }, orderOffset + 20, 'color', 'color', 'immediate', text.tooltips.emissionColor),\n createMaterialAssetNumberInspectorProperty(document, materialAsset, 'profile.emission.intensity', text.assetEmissionIntensity, profile.emission?.intensity ?? 0, orderOffset + 21, 0, undefined, 0.05, text.tooltips.emissionIntensity),\n createMaterialTexturePickerInspectorProperty({\n path: `${EDITOR_SCENE_MATERIAL_ASSET_FIELD_PATH_PREFIX}${materialAsset.id}.profile.emission.texture.textureAssetId`,\n label: text.assetEmissionTexture,\n value: readArtistMaterialTexturePickerValue(profile.emission?.texture),\n order: orderOffset + 22,\n text,\n context,\n tooltip: text.tooltips.emissionTexture,\n }),\n createMaterialTexturePickerInspectorProperty({\n path: `${EDITOR_SCENE_MATERIAL_ASSET_FIELD_PATH_PREFIX}${materialAsset.id}.profile.emission.maskTexture.textureAssetId`,\n label: text.assetEmissionMaskUrl,\n value: readArtistMaterialTexturePickerValue(profile.emission?.maskTexture),\n order: orderOffset + 23,\n text,\n context,\n tooltip: text.tooltips.emissionMaskUrl,\n }),\n createMaterialAssetEnumInspectorProperty(document, materialAsset, 'profile.alpha.mode', text.assetAlphaMode, profile.alpha?.mode ?? 'opaque', orderOffset + 30, createMaterialAlphaModeOptions(text), text.tooltips.alphaMode),\n createMaterialAssetNumberInspectorProperty(document, materialAsset, 'profile.alpha.opacity', text.assetAlphaOpacity, profile.alpha?.opacity ?? 1, orderOffset + 31, 0, 1, 0.05, text.tooltips.alphaOpacity),\n createMaterialAssetNumberInspectorProperty(document, materialAsset, 'profile.alpha.cutoff', text.assetAlphaCutoff, profile.alpha?.cutoff ?? 0.5, orderOffset + 32, 0, 1, 0.01, text.tooltips.alphaCutoff),\n createMaterialTexturePickerInspectorProperty({\n path: `${EDITOR_SCENE_MATERIAL_ASSET_FIELD_PATH_PREFIX}${materialAsset.id}.profile.alpha.texture.textureAssetId`,\n label: text.assetAlphaTexture,\n value: readArtistMaterialTexturePickerValue(profile.alpha?.texture),\n order: orderOffset + 33,\n text,\n context,\n tooltip: text.tooltips.alphaTexture,\n }),\n );\n return properties;\n}\n\nfunction readEditorSceneDefaultMaterialAssetIds(context: EditorSceneMaterialInspectorContext): readonly string[] {\n return context.defaultMaterialAssetIds ?? [\n DEFAULT_PBR_EDITOR_SCENE_MATERIAL_ASSET_ID,\n DEFAULT_STANDARD_EDITOR_SCENE_MATERIAL_ASSET_ID,\n ];\n}\n\nfunction isEditorSceneMaterialAssetReadonlyForAssetFields(\n materialAsset: EditorSceneMaterialAsset,\n context: EditorSceneMaterialInspectorContext,\n): boolean {\n return isReadonlyEditorSceneMaterialAsset(materialAsset, readEditorSceneDefaultMaterialAssetIds(context))\n || materialAsset.system?.preset === 'default-pbr'\n || materialAsset.system?.preset === 'default-standard';\n}\n\n\n\nfunction createReadonlyArtistMaterialAssetIdentityProperties(\n materialAsset: EditorSceneMaterialAsset,\n text: ArtistMaterialInspectorText,\n orderOffset: number,\n): InspectorProperty<EditorSceneDocument>[] {\n return [\n createReadonlyInspectorProperty(\n `${EDITOR_SCENE_MATERIAL_ASSET_FIELD_PATH_PREFIX}${materialAsset.id}.name`,\n text.assetName,\n getEditorSceneMaterialAssetDisplayName(materialAsset, text),\n orderOffset,\n text.tooltips.assetName,\n ),\n createReadonlyInspectorProperty(\n `${EDITOR_SCENE_MATERIAL_ASSET_FIELD_PATH_PREFIX}${materialAsset.id}.materialKind`,\n text.assetKind,\n getEditorSceneMaterialKindLabel(resolveEditorSceneMaterialAssetKind(materialAsset), text),\n orderOffset + 1,\n text.tooltips.assetKind,\n ),\n ];\n}\n\n\n\n\nfunction getEditorSceneMaterialKindLabel(\n materialKind: 'pbr' | 'standard',\n text: ArtistMaterialInspectorText,\n): string {\n return materialKind === 'standard' ? text.assetKindStandard : text.assetKindPbr;\n}\n\n\n\n\nfunction createMaterialTexturePickerInspectorProperty(input: {\n path: string;\n label: string;\n value: string;\n order: number;\n text: ArtistMaterialInspectorText;\n context: EditorSceneMaterialInspectorContext;\n tooltip?: string;\n}): InspectorProperty<EditorSceneDocument> {\n const currentTexture = findEditorSceneInspectorTextureAssetFromContext(input.context, input.value);\n return {\n path: input.path,\n label: input.label,\n valueType: 'string',\n control: 'custom',\n customControl: 'asset-picker-card',\n value: input.value,\n readOnly: false,\n persistence: 'document',\n commitMode: 'change',\n order: input.order,\n tooltip: input.tooltip,\n tags: ['ArtistMaterial', 'TextureAsset'],\n controlOptions: createTexturePickerControlOptions(input.context, input.text, input.value, currentTexture),\n validate: (value) => {\n const normalized = normalizeMaterialTexturePickerPropertyValue(input.context, input.path, value);\n return normalized.ok\n ? { ok: true, value: normalized.value }\n : { ok: false, message: 'Invalid texture selection.' };\n },\n coerce: (value) => {\n const normalized = normalizeMaterialTexturePickerPropertyValue(input.context, input.path, value);\n return normalized.ok ? normalized.value : null;\n },\n };\n}\n\n\n\nexport function createTexturePickerControlOptions(\n context: EditorSceneMaterialInspectorContext,\n text: ArtistMaterialInspectorText,\n currentValue: string,\n currentTexture: EditorSceneInspectorTextureAsset | null,\n): Record<string, unknown> {\n return {\n ...createPlayableEditorSceneTexturePickerControlOptions({\n textureAssets: context.textureAssets,\n currentTexture,\n currentValue,\n pickerText: createEditorSceneTexturePickerText(text),\n candidateValue: 'assetId',\n }),\n };\n}\n\n\n\nexport function findEditorSceneInspectorTextureAssetFromContext(\n context: EditorSceneMaterialInspectorContext,\n value: string,\n): EditorSceneInspectorTextureAsset | null {\n return findPlayableEditorSceneInspectorTextureAsset(context.textureAssets, value) as EditorSceneInspectorTextureAsset | null;\n}\n\n\n\nexport function readArtistMaterialTexturePickerValue(\n texture: { textureAssetId?: string | null; url?: string | null } | null | undefined,\n): string {\n const textureAssetId = typeof texture?.textureAssetId === 'string' ? texture.textureAssetId.trim() : '';\n if (textureAssetId) return textureAssetId;\n const textureUrl = typeof texture?.url === 'string' ? texture.url.trim() : '';\n return textureUrl;\n}\n\n\n\nfunction normalizeMaterialTexturePickerPropertyValue(\n context: EditorSceneMaterialInspectorContext,\n path: string,\n value: unknown,\n): { ok: true; value: string | null } | { ok: false } {\n if (value == null || value === '') return { ok: true, value: null };\n if (typeof value !== 'string') return { ok: false };\n const trimmed = value.trim();\n if (!trimmed) return { ok: true, value: null };\n if (!path.endsWith('.textureAssetId')) return { ok: true, value: trimmed };\n const textureAsset = findPlayableEditorSceneInspectorTextureAsset(context.textureAssets, trimmed);\n if (textureAsset) return { ok: true, value: textureAsset.id };\n return /^[A-Za-z0-9_-]+$/.test(trimmed) ? { ok: true, value: trimmed } : { ok: true, value: null };\n}\n\n\n\nfunction createEditorSceneTexturePickerText(text: ArtistMaterialInspectorText) {\n return {\n texturePickerTitle: text.texturePickerTitle,\n replace: text.replace,\n inheritNone: text.inheritNone,\n summaryInherit: text.summaryInherit,\n };\n}\n\n\n\nfunction createMaterialAssetNumberInspectorProperty(\n document: EditorSceneDocument,\n materialAsset: EditorSceneMaterialAsset,\n path: string,\n label: string,\n value: number,\n order: number,\n min?: number,\n max?: number,\n step = 0.05,\n tooltip?: string,\n): InspectorProperty<EditorSceneDocument> {\n return {\n ...createMaterialAssetFieldInspectorProperty(document, materialAsset, path, label, value, order, 'number', 'number', 'live', tooltip),\n min,\n max,\n step,\n };\n}\n\n\n\nfunction createMaterialAssetEnumInspectorProperty(\n document: EditorSceneDocument,\n materialAsset: EditorSceneMaterialAsset,\n path: string,\n label: string,\n value: string,\n order: number,\n options: InspectorProperty<EditorSceneDocument>['options'],\n tooltip?: string,\n): InspectorProperty<EditorSceneDocument> {\n return {\n ...createMaterialAssetFieldInspectorProperty(document, materialAsset, path, label, value, order, 'enum', 'enum', 'immediate', tooltip),\n options,\n controlOptions: { variant: 'segmented' },\n };\n}\n\n\n\nfunction createMaterialAssetFieldInspectorProperty(\n document: EditorSceneDocument,\n materialAsset: EditorSceneMaterialAsset,\n fieldPath: string,\n label: string,\n value: unknown,\n order: number,\n valueType: InspectorProperty<EditorSceneDocument>['valueType'],\n control: InspectorProperty<EditorSceneDocument>['control'],\n commitMode: InspectorProperty<EditorSceneDocument>['commitMode'],\n tooltip?: string,\n): InspectorProperty<EditorSceneDocument> {\n return {\n ...createPlayableEditorSceneMaterialAssetFieldInspectorPropertyInput({\n document,\n materialAsset,\n fieldPath,\n label,\n value,\n order,\n valueType,\n control,\n commitMode,\n tooltip,\n pathPrefix: EDITOR_SCENE_MATERIAL_ASSET_FIELD_PATH_PREFIX,\n }),\n validate: (inputValue) => {\n const normalizedValue = normalizeEditorSceneMaterialAssetValue(fieldPath, inputValue);\n return validateEditorSceneMaterialAssetFieldValue(fieldPath, normalizedValue)\n ? { ok: true, value: normalizedValue }\n : { ok: false, message: `Invalid material asset field: ${fieldPath}.` };\n },\n coerce: (inputValue) => normalizeEditorSceneMaterialAssetValue(fieldPath, inputValue),\n };\n}\n\ntype MaterialUsageIndex = ReturnType<typeof materialBindingInternals.createUsageIndex>;\ntype MaterialAssetSelectorInspectorPropertyInput = {\n path: string;\n label: string;\n value: string;\n order: number;\n text: ArtistMaterialInspectorText;\n currentAsset?: EditorSceneMaterialAsset | null;\n};\n\nfunction createMaterialAssetSelectorInspectorPropertyWithUsage(\n document: EditorSceneDocument,\n nodeKind: EditorSceneNodeKind,\n input: MaterialAssetSelectorInspectorPropertyInput,\n usageIndex: MaterialUsageIndex,\n): InspectorProperty<EditorSceneDocument> {\n const currentAsset = input.currentAsset ?? findEditorSceneMaterialAsset(document, input.value);\n return {\n path: input.path,\n label: input.label,\n valueType: 'string',\n control: 'custom',\n customControl: 'asset-picker-card',\n value: input.value,\n readOnly: false,\n persistence: 'document',\n commitMode: 'change',\n order: input.order,\n controlOptions: createMaterialAssetPickerControlOptionsWithUsage(\n document,\n currentAsset,\n input.text,\n input.value,\n usageIndex,\n ),\n tooltip: input.text.tooltips.materialAsset,\n tags: ['ArtistMaterial', 'MaterialAsset'],\n document,\n validate: value => {\n const duplicateMaterialAssetId = parseEditorSceneDuplicateMaterialAssetValue(value);\n if (duplicateMaterialAssetId && hasEditorSceneMaterialAsset(document, duplicateMaterialAssetId)) {\n return { ok: true, value };\n }\n if (value == null || value === '') return { ok: true, value };\n if (typeof value === 'string' && hasEditorSceneMaterialAsset(document, value)) {\n return { ok: true, value };\n }\n return { ok: false, message: `Material asset not found: ${String(value)}` };\n },\n coerce: value => (typeof value === 'string' ? value.trim() : value),\n effect: nodeKind === 'group' ? 'unsupported' : undefined,\n disabledReason: nodeKind === 'group' ? 'Groups do not own materials.' : undefined,\n };\n}\n\nfunction createMaterialAssetSelectorInspectorPropertyWithCachedUsage(\n document: EditorSceneDocument,\n nodeKind: EditorSceneNodeKind,\n input: MaterialAssetSelectorInspectorPropertyInput,\n): InspectorProperty<EditorSceneDocument> {\n return createMaterialAssetSelectorInspectorPropertyWithUsage(\n document,\n nodeKind,\n input,\n materialBindingInternals.getCachedUsageIndex(document),\n );\n}\n\nfunction createMaterialAssetPickerControlOptionsWithUsage(\n document: EditorSceneDocument,\n currentAsset: EditorSceneMaterialAsset | null,\n text: ArtistMaterialInspectorText,\n currentValue: string,\n usageIndex: MaterialUsageIndex,\n): Record<string, unknown> {\n return {\n ...materialBindingInternals.createPickerControlOptions({\n materialAssets: document.scene.materialAssets ?? [],\n currentAsset,\n currentValue,\n pickerText: createEditorSceneMaterialPickerText(text),\n displayText: createEditorSceneMaterialDisplayText(text),\n document,\n ownershipText: createEditorSceneMaterialOwnershipText(text),\n }, usageIndex),\n actionDisabledReason: text.batchReplaceUnsupported,\n };\n}\n\nfunction createMaterialAssetPickerControlOptionsWithCachedUsage(\n document: EditorSceneDocument,\n currentAsset: EditorSceneMaterialAsset | null,\n text: ArtistMaterialInspectorText,\n currentValue: string,\n): Record<string, unknown> {\n let byText = cachedMaterialPickerControlOptions.get(document as object);\n if (!byText) {\n byText = new WeakMap();\n cachedMaterialPickerControlOptions.set(document as object, byText);\n }\n let byAsset = byText.get(text);\n if (!byAsset) {\n byAsset = new WeakMap();\n byText.set(text, byAsset);\n }\n const assetKey = currentAsset ?? NULL_MATERIAL_ASSET_CACHE_KEY;\n let byValue = byAsset.get(assetKey);\n if (!byValue) {\n byValue = new Map();\n byAsset.set(assetKey, byValue);\n }\n const cached = byValue.get(currentValue);\n if (cached) return cached;\n const options = createMaterialAssetPickerControlOptionsWithUsage(\n document,\n currentAsset,\n text,\n currentValue,\n materialBindingInternals.getCachedUsageIndex(document),\n );\n byValue.set(currentValue, options);\n return options;\n}\n\nconst materialAssetFieldInternals = {\n createSelectorInspectorPropertyWithUsage:\n createMaterialAssetSelectorInspectorPropertyWithUsage,\n createSelectorInspectorPropertyWithCachedUsage:\n createMaterialAssetSelectorInspectorPropertyWithCachedUsage,\n createPickerControlOptionsWithUsage:\n createMaterialAssetPickerControlOptionsWithUsage,\n createPickerControlOptionsWithCachedUsage:\n createMaterialAssetPickerControlOptionsWithCachedUsage,\n};\n\nexport default materialAssetFieldInternals;\n"]}
@@ -1,4 +1,4 @@
1
- import type { EditorSceneMaterialAsset, EditorSceneMaterialAssetOwnershipText, EditorSceneMaterialAssetOwnershipView, EditorSceneMaterialBinding, EditorSceneMaterialAssetIntegrityResult, EditorSceneMaterialAssetUsage, EditorSceneMaterialBindingSummary, EditorSceneMaterialDocument, EditorSceneMaterialGameObject, EditorSceneMaterialSlotDescriptor } from './types';
1
+ import type { EditorSceneMaterialAsset, EditorSceneMaterialAssetDisplayText, EditorSceneMaterialAssetOwnershipText, EditorSceneMaterialAssetOwnershipView, EditorSceneMaterialBinding, EditorSceneMaterialAssetIntegrityResult, EditorSceneMaterialAssetUsage, EditorSceneMaterialBindingSummary, EditorSceneMaterialBrowserAssetItem, EditorSceneMaterialDocument, EditorSceneMaterialGameObject, EditorSceneMaterialPickerControlOptions, EditorSceneMaterialPickerText, EditorSceneMaterialSlotDescriptor } from './types';
2
2
  export declare const EDITOR_SCENE_ASSET_MESH_SELECTION_SEPARATOR = "::assetMesh::";
3
3
  export declare function findEditorSceneMaterialAsset<TMaterialAsset extends EditorSceneMaterialAsset = EditorSceneMaterialAsset>(document: Pick<EditorSceneMaterialDocument<EditorSceneMaterialGameObject, TMaterialAsset>, 'scene'>, materialAssetId: string): TMaterialAsset | null;
4
4
  export declare function hasEditorSceneMaterialAsset(document: Pick<EditorSceneMaterialDocument, 'scene'>, materialAssetId: string): boolean;
@@ -25,4 +25,30 @@ export declare function splitEditorSceneFieldPath(path: string): string[];
25
25
  export declare function splitMaterialSlotBindingFieldPath(path: string): string[] | null;
26
26
  export declare function readEditorSceneAssetMaterialSlots(document: Pick<EditorSceneMaterialDocument, 'assets'>, gameObject: EditorSceneMaterialGameObject): EditorSceneMaterialSlotDescriptor[];
27
27
  export declare function readEditorSceneMaterialSlotDescriptor(value: unknown): EditorSceneMaterialSlotDescriptor | null;
28
+ interface InternalMaterialPickerInput<TMaterialAsset extends EditorSceneMaterialAsset = EditorSceneMaterialAsset> {
29
+ materialAssets: readonly TMaterialAsset[];
30
+ currentAsset?: TMaterialAsset | null;
31
+ currentValue: string;
32
+ pickerText: EditorSceneMaterialPickerText;
33
+ displayText: EditorSceneMaterialAssetDisplayText;
34
+ document?: Pick<EditorSceneMaterialDocument<EditorSceneMaterialGameObject, TMaterialAsset>, 'scene' | 'assets'>;
35
+ ownershipText?: EditorSceneMaterialAssetOwnershipText;
36
+ }
37
+ declare class InternalMaterialUsageIndex {
38
+ private readonly byMaterialId;
39
+ private readonly byOwnerId;
40
+ constructor(document: Pick<EditorSceneMaterialDocument, 'scene' | 'assets'>);
41
+ forMaterial(materialAssetId: string): readonly EditorSceneMaterialAssetUsage[];
42
+ forOwner(ownerId: string): readonly EditorSceneMaterialAssetUsage[];
43
+ }
44
+ declare function getCachedMaterialUsageIndex(document: Pick<EditorSceneMaterialDocument, 'scene' | 'assets'>): InternalMaterialUsageIndex;
45
+ declare function createInternalMaterialPickerControlOptions<TMaterialAsset extends EditorSceneMaterialAsset = EditorSceneMaterialAsset>(input: InternalMaterialPickerInput<TMaterialAsset>, usageIndex: InternalMaterialUsageIndex | null): EditorSceneMaterialPickerControlOptions;
46
+ declare function createInternalMaterialBrowserAssetItems<TMaterialAsset extends EditorSceneMaterialAsset = EditorSceneMaterialAsset>(document: Pick<EditorSceneMaterialDocument<EditorSceneMaterialGameObject, TMaterialAsset>, 'scene' | 'assets'>, usageIndex: InternalMaterialUsageIndex): Array<EditorSceneMaterialBrowserAssetItem<NonNullable<TMaterialAsset['profile']>>>;
47
+ declare const materialBindingInternals: {
48
+ createUsageIndex(document: Pick<EditorSceneMaterialDocument, "scene" | "assets">): InternalMaterialUsageIndex;
49
+ getCachedUsageIndex: typeof getCachedMaterialUsageIndex;
50
+ createPickerControlOptions: typeof createInternalMaterialPickerControlOptions;
51
+ createBrowserAssetItems: typeof createInternalMaterialBrowserAssetItems;
52
+ };
53
+ export default materialBindingInternals;
28
54
  //# sourceMappingURL=binding.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"binding.d.ts","sourceRoot":"","sources":["../../src/material-binding/binding.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"binding.d.ts","sourceRoot":"","sources":["../../src/material-binding/binding.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,7 @@
1
1
  import { findEditorSceneModelRenderer, } from '../document/index.js';
2
- import { normalizeEditorSceneMaterialSlotOwnerPath, } from './paths.js';
2
+ import { createEditorSceneDuplicateMaterialAssetValue, normalizeEditorSceneMaterialSlotOwnerPath, } from './paths.js';
3
+ import { createEditorSceneMaterialAssetMeta, createEditorSceneMaterialAssetPreview, } from './preview.js';
4
+ import { resolveEditorSceneMaterialAssetKind, } from './profile.js';
3
5
  export const EDITOR_SCENE_ASSET_MESH_SELECTION_SEPARATOR = '::assetMesh::';
4
6
  export function findEditorSceneMaterialAsset(document, materialAssetId) {
5
7
  if (!materialAssetId)
@@ -438,4 +440,162 @@ function getEditorSceneMaterialUsageSlotLabel(slot, fallback) {
438
440
  || slot?.slotId?.trim()
439
441
  || fallback;
440
442
  }
443
+ class InternalMaterialUsageIndex {
444
+ constructor(document) {
445
+ this.byMaterialId = new Map();
446
+ this.byOwnerId = new Map();
447
+ for (const usage of collectEditorSceneMaterialAssetReferences(document)) {
448
+ const materialUsages = this.byMaterialId.get(usage.materialAssetId) ?? [];
449
+ materialUsages.push(usage);
450
+ this.byMaterialId.set(usage.materialAssetId, materialUsages);
451
+ const ownerUsages = this.byOwnerId.get(usage.gameObjectId) ?? [];
452
+ ownerUsages.push(usage);
453
+ this.byOwnerId.set(usage.gameObjectId, ownerUsages);
454
+ }
455
+ }
456
+ forMaterial(materialAssetId) {
457
+ return this.byMaterialId.get(materialAssetId.trim()) ?? [];
458
+ }
459
+ forOwner(ownerId) {
460
+ return this.byOwnerId.get(ownerId) ?? [];
461
+ }
462
+ }
463
+ const cachedMaterialUsageIndexes = new WeakMap();
464
+ function getCachedMaterialUsageIndex(document) {
465
+ let index = cachedMaterialUsageIndexes.get(document);
466
+ if (!index) {
467
+ index = new InternalMaterialUsageIndex(document);
468
+ cachedMaterialUsageIndexes.set(document, index);
469
+ }
470
+ return index;
471
+ }
472
+ function getInternalMaterialAssetDefaultPreset(materialAsset) {
473
+ return materialAsset?.system?.preset;
474
+ }
475
+ function getInternalMaterialAssetDisplayName(materialAsset, text) {
476
+ const preset = getInternalMaterialAssetDefaultPreset(materialAsset);
477
+ if (preset === 'default-pbr')
478
+ return text.defaultMaterial;
479
+ if (preset === 'default-standard')
480
+ return text.defaultStandardMaterial;
481
+ return materialAsset.name || materialAsset.id;
482
+ }
483
+ function getInternalMaterialAssetDisplayMeta(materialAsset, text) {
484
+ const preset = getInternalMaterialAssetDefaultPreset(materialAsset);
485
+ if (preset === 'default-pbr')
486
+ return text.defaultMaterialMeta;
487
+ if (preset === 'default-standard')
488
+ return text.defaultStandardMaterialMeta;
489
+ return text.formatMaterialMeta(materialAsset.id);
490
+ }
491
+ function createInternalMaterialPickerControlOptions(input, usageIndex) {
492
+ const currentAsset = input.currentAsset ?? null;
493
+ const currentOwnership = currentAsset
494
+ ? createInternalMaterialOwnershipView(input.document, currentAsset.id, input.ownershipText, usageIndex)
495
+ : null;
496
+ const currentBaseMeta = currentAsset
497
+ ? getInternalMaterialAssetDisplayMeta(currentAsset, input.displayText)
498
+ : (input.currentValue ? input.pickerText.summaryMissingAsset : input.pickerText.summaryInherit);
499
+ const currentMeta = currentOwnership
500
+ ? createInternalMaterialPickerMeta(currentBaseMeta, currentOwnership)
501
+ : currentBaseMeta;
502
+ return {
503
+ pickerKind: 'material',
504
+ pickerTitle: input.pickerText.materialPickerTitle,
505
+ actionLabel: input.pickerText.replace,
506
+ copyActionLabel: currentAsset ? input.pickerText.duplicateForObject : '',
507
+ copyActionValue: currentAsset ? createEditorSceneDuplicateMaterialAssetValue(currentAsset.id) : '',
508
+ copyActionTooltip: currentAsset
509
+ ? createInternalMaterialPickerCopyTooltip(input.pickerText.duplicateForObjectTooltip, currentOwnership)
510
+ : '',
511
+ placeholder: input.currentValue ? input.pickerText.summaryMissingAsset : input.pickerText.inheritNone,
512
+ currentLabel: currentAsset
513
+ ? getInternalMaterialAssetDisplayName(currentAsset, input.displayText)
514
+ : (input.currentValue ? input.currentValue : input.pickerText.inheritNone),
515
+ currentMeta,
516
+ ...(currentOwnership?.usageLabel ? { currentUsageLabel: currentOwnership.usageLabel } : {}),
517
+ ...(currentOwnership?.editImpactLabel ? { currentEditImpactLabel: currentOwnership.editImpactLabel } : {}),
518
+ ...(currentOwnership ? { currentOwnership } : {}),
519
+ currentPreview: currentAsset ? createEditorSceneMaterialAssetPreview(currentAsset.profile) : undefined,
520
+ candidates: [{
521
+ label: input.pickerText.inheritNone,
522
+ value: '',
523
+ meta: input.pickerText.summaryInherit,
524
+ }, ...input.materialAssets.map(materialAsset => {
525
+ const ownership = createInternalMaterialOwnershipView(input.document, materialAsset.id, input.ownershipText, usageIndex);
526
+ return {
527
+ label: getInternalMaterialAssetDisplayName(materialAsset, input.displayText),
528
+ value: materialAsset.id,
529
+ meta: createInternalMaterialPickerMeta(getInternalMaterialAssetDisplayMeta(materialAsset, input.displayText), ownership),
530
+ kind: 'material',
531
+ preview: createEditorSceneMaterialAssetPreview(materialAsset.profile),
532
+ ...(ownership?.usageLabel ? { usageLabel: ownership.usageLabel } : {}),
533
+ ...(ownership ? { ownership } : {}),
534
+ };
535
+ })],
536
+ };
537
+ }
538
+ function createInternalMaterialOwnershipView(document, materialAssetId, text, usageIndex) {
539
+ if (!document || !usageIndex)
540
+ return null;
541
+ const normalizedMaterialAssetId = materialAssetId.trim();
542
+ const usages = usageIndex.forMaterial(normalizedMaterialAssetId);
543
+ const usageCount = usages.length;
544
+ return {
545
+ materialAssetId: normalizedMaterialAssetId,
546
+ usage: {
547
+ count: usageCount,
548
+ items: usages.map(usage => structuredClone(usage)),
549
+ },
550
+ usageCount,
551
+ used: usageCount > 0,
552
+ shared: usageCount > 1,
553
+ ...(text ? {
554
+ usageLabel: text.formatUsageCount(usageCount),
555
+ editImpactLabel: text.formatEditImpact(usageCount),
556
+ duplicateImpactLabel: text.formatDuplicateImpact(usageCount),
557
+ } : {}),
558
+ };
559
+ }
560
+ function createInternalMaterialPickerMeta(baseMeta, ownership) {
561
+ return [baseMeta, ownership?.usageLabel].filter(Boolean).join(' · ');
562
+ }
563
+ function createInternalMaterialPickerCopyTooltip(baseTooltip, ownership) {
564
+ return [baseTooltip, ownership?.duplicateImpactLabel].filter(Boolean).join(' · ');
565
+ }
566
+ function createInternalMaterialBrowserAssetItems(document, usageIndex) {
567
+ return (document.scene.materialAssets ?? []).map(materialAsset => {
568
+ const usages = usageIndex.forMaterial(materialAsset.id);
569
+ return {
570
+ id: `material:${materialAsset.id}`,
571
+ assetId: materialAsset.id,
572
+ kind: 'material',
573
+ label: materialAsset.name || materialAsset.id,
574
+ meta: createEditorSceneMaterialAssetMeta(materialAsset.profile, materialAsset.id),
575
+ preview: createEditorSceneMaterialAssetPreview(materialAsset.profile),
576
+ material: {
577
+ id: materialAsset.id,
578
+ name: materialAsset.name || materialAsset.id,
579
+ materialKind: resolveEditorSceneMaterialAssetKind(materialAsset),
580
+ readonly: materialAsset.system?.readonly === true
581
+ || getInternalMaterialAssetDefaultPreset(materialAsset) != null,
582
+ usage: {
583
+ count: usages.length,
584
+ items: usages.map(usage => structuredClone(usage)),
585
+ },
586
+ profile: structuredClone(materialAsset.profile ?? {}),
587
+ },
588
+ placeable: false,
589
+ };
590
+ });
591
+ }
592
+ const materialBindingInternals = {
593
+ createUsageIndex(document) {
594
+ return new InternalMaterialUsageIndex(document);
595
+ },
596
+ getCachedUsageIndex: getCachedMaterialUsageIndex,
597
+ createPickerControlOptions: createInternalMaterialPickerControlOptions,
598
+ createBrowserAssetItems: createInternalMaterialBrowserAssetItems,
599
+ };
600
+ export default materialBindingInternals;
441
601
  //# sourceMappingURL=binding.js.map