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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (514) hide show
  1. package/dist/build-info.json +44 -44
  2. package/dist/editor-commands/capabilities/assets.d.ts +8 -0
  3. package/dist/editor-commands/capabilities/assets.d.ts.map +1 -0
  4. package/dist/{agent-bridge → editor-commands}/capabilities/assets.js +41 -41
  5. package/dist/editor-commands/capabilities/assets.js.map +1 -0
  6. package/dist/editor-commands/capabilities/editor-state.d.ts +5 -0
  7. package/dist/editor-commands/capabilities/editor-state.d.ts.map +1 -0
  8. package/dist/{agent-bridge → editor-commands}/capabilities/editor-state.js +22 -22
  9. package/dist/editor-commands/capabilities/editor-state.js.map +1 -0
  10. package/dist/editor-commands/capabilities/hierarchy.d.ts +4 -0
  11. package/dist/editor-commands/capabilities/hierarchy.d.ts.map +1 -0
  12. package/dist/{agent-bridge → editor-commands}/capabilities/hierarchy.js +5 -5
  13. package/dist/editor-commands/capabilities/hierarchy.js.map +1 -0
  14. package/dist/editor-commands/capabilities/host-lifecycle.d.ts +11 -0
  15. package/dist/editor-commands/capabilities/host-lifecycle.d.ts.map +1 -0
  16. package/dist/editor-commands/capabilities/host-lifecycle.js +149 -0
  17. package/dist/editor-commands/capabilities/host-lifecycle.js.map +1 -0
  18. package/dist/editor-commands/capabilities/prefabs.d.ts +5 -0
  19. package/dist/editor-commands/capabilities/prefabs.d.ts.map +1 -0
  20. package/dist/{agent-bridge → editor-commands}/capabilities/prefabs.js +93 -93
  21. package/dist/editor-commands/capabilities/prefabs.js.map +1 -0
  22. package/dist/editor-commands/capabilities/scene-objects.d.ts +8 -0
  23. package/dist/editor-commands/capabilities/scene-objects.d.ts.map +1 -0
  24. package/dist/editor-commands/capabilities/scene-objects.js +480 -0
  25. package/dist/editor-commands/capabilities/scene-objects.js.map +1 -0
  26. package/dist/editor-commands/capabilities/selection.d.ts +5 -0
  27. package/dist/editor-commands/capabilities/selection.d.ts.map +1 -0
  28. package/dist/editor-commands/capabilities/selection.js +60 -0
  29. package/dist/editor-commands/capabilities/selection.js.map +1 -0
  30. package/dist/editor-commands/capabilities/shadows.d.ts +5 -0
  31. package/dist/editor-commands/capabilities/shadows.d.ts.map +1 -0
  32. package/dist/{agent-bridge → editor-commands}/capabilities/shadows.js +74 -74
  33. package/dist/editor-commands/capabilities/shadows.js.map +1 -0
  34. package/dist/editor-commands/capabilities/transform.d.ts +5 -0
  35. package/dist/editor-commands/capabilities/transform.d.ts.map +1 -0
  36. package/dist/editor-commands/capabilities/transform.js +164 -0
  37. package/dist/editor-commands/capabilities/transform.js.map +1 -0
  38. package/dist/editor-commands/capabilities/ui-regions.d.ts +4 -0
  39. package/dist/editor-commands/capabilities/ui-regions.d.ts.map +1 -0
  40. package/dist/{agent-bridge → editor-commands}/capabilities/ui-regions.js +55 -57
  41. package/dist/editor-commands/capabilities/ui-regions.js.map +1 -0
  42. package/dist/editor-commands/capabilities/viewport.d.ts +5 -0
  43. package/dist/editor-commands/capabilities/viewport.d.ts.map +1 -0
  44. package/dist/{agent-bridge → editor-commands}/capabilities/viewport.js +100 -100
  45. package/dist/editor-commands/capabilities/viewport.js.map +1 -0
  46. package/dist/editor-commands/command-sources.d.ts +7 -0
  47. package/dist/editor-commands/command-sources.d.ts.map +1 -0
  48. package/dist/editor-commands/command-sources.js +34 -0
  49. package/dist/editor-commands/command-sources.js.map +1 -0
  50. package/dist/editor-commands/diagnostics.d.ts +12 -0
  51. package/dist/editor-commands/diagnostics.d.ts.map +1 -0
  52. package/dist/{agent-bridge → editor-commands}/diagnostics.js +4 -4
  53. package/dist/editor-commands/diagnostics.js.map +1 -0
  54. package/dist/{agent-bridge → editor-commands}/index.d.ts +1 -1
  55. package/dist/editor-commands/index.d.ts.map +1 -0
  56. package/dist/{agent-bridge → editor-commands}/index.js +1 -1
  57. package/dist/editor-commands/index.js.map +1 -0
  58. package/dist/editor-commands/register.d.ts +4 -0
  59. package/dist/editor-commands/register.d.ts.map +1 -0
  60. package/dist/{agent-bridge → editor-commands}/register.js +323 -286
  61. package/dist/editor-commands/register.js.map +1 -0
  62. package/dist/{agent-bridge → editor-commands}/shared.d.ts +80 -80
  63. package/dist/editor-commands/shared.d.ts.map +1 -0
  64. package/dist/{agent-bridge → editor-commands}/shared.js +29 -29
  65. package/dist/editor-commands/shared.js.map +1 -0
  66. package/dist/editor-commands/source-types.d.ts +110 -0
  67. package/dist/editor-commands/source-types.d.ts.map +1 -0
  68. package/dist/editor-commands/source-types.js.map +1 -0
  69. package/dist/editor-plugin-commands.d.ts +4 -0
  70. package/dist/editor-plugin-commands.d.ts.map +1 -0
  71. package/dist/editor-plugin-commands.js +18 -0
  72. package/dist/editor-plugin-commands.js.map +1 -0
  73. package/dist/index.d.ts +2 -2
  74. package/dist/index.d.ts.map +1 -1
  75. package/dist/index.js +1 -1
  76. package/dist/index.js.map +1 -1
  77. package/dist/local-editor-commands.d.ts +2 -0
  78. package/dist/local-editor-commands.d.ts.map +1 -0
  79. package/dist/local-editor-commands.js +2 -0
  80. package/dist/local-editor-commands.js.map +1 -0
  81. package/dist/local-editor-harness.d.ts +35 -21
  82. package/dist/local-editor-harness.d.ts.map +1 -1
  83. package/dist/local-editor-harness.js +1721 -367
  84. package/dist/local-editor-harness.js.map +1 -1
  85. package/dist/local-editor-prefab-stage-transaction.d.ts +2 -1
  86. package/dist/local-editor-prefab-stage-transaction.d.ts.map +1 -1
  87. package/dist/local-editor-prefab-stage-transaction.js +6 -5
  88. package/dist/local-editor-prefab-stage-transaction.js.map +1 -1
  89. package/dist/local-editor-scene-view-interaction-runtime.d.ts.map +1 -1
  90. package/dist/local-editor-scene-view-interaction-runtime.js +2 -5
  91. package/dist/local-editor-scene-view-interaction-runtime.js.map +1 -1
  92. package/dist/playable-local-editor-entry.d.ts +10 -0
  93. package/dist/playable-local-editor-entry.d.ts.map +1 -1
  94. package/dist/playable-local-editor-entry.js +10 -2
  95. package/dist/playable-local-editor-entry.js.map +1 -1
  96. package/dist/playable-local-editor-host.d.ts +3 -32
  97. package/dist/playable-local-editor-host.d.ts.map +1 -1
  98. package/dist/playable-local-editor-host.js +6 -70
  99. package/dist/playable-local-editor-host.js.map +1 -1
  100. package/dist/playable-product-local-editor.d.ts +1 -2
  101. package/dist/playable-product-local-editor.d.ts.map +1 -1
  102. package/dist/playable-product-local-editor.js +0 -1
  103. package/dist/playable-product-local-editor.js.map +1 -1
  104. package/dist/playable-product-projection-preview.d.ts.map +1 -1
  105. package/dist/playable-product-projection-preview.js +1 -1
  106. package/dist/playable-product-projection-preview.js.map +1 -1
  107. package/dist/playable-product-scene-capabilities.d.ts +0 -2
  108. package/dist/playable-product-scene-capabilities.d.ts.map +1 -1
  109. package/dist/playable-product-scene-capabilities.js +33 -6
  110. package/dist/playable-product-scene-capabilities.js.map +1 -1
  111. package/dist/playable-runtime-babylon.d.ts +4 -0
  112. package/dist/playable-runtime-babylon.d.ts.map +1 -1
  113. package/dist/playable-runtime-babylon.js +4 -0
  114. package/dist/playable-runtime-babylon.js.map +1 -1
  115. package/dist/playable-sdk.d.ts +1 -1
  116. package/dist/playable-sdk.d.ts.map +1 -1
  117. package/dist/playable-sdk.js.map +1 -1
  118. package/dist/playable-standard-project.d.ts +0 -2
  119. package/dist/playable-standard-project.d.ts.map +1 -1
  120. package/dist/playable-standard-project.js +1 -2
  121. package/dist/playable-standard-project.js.map +1 -1
  122. package/dist/project-service-projection.d.ts +16 -0
  123. package/dist/project-service-projection.d.ts.map +1 -0
  124. package/dist/project-service-projection.js +67 -0
  125. package/dist/project-service-projection.js.map +1 -0
  126. package/node_modules/@fps-games/babylon-renderer/dist/post-process/babylon-default-pipeline.d.ts +18 -0
  127. package/node_modules/@fps-games/babylon-renderer/dist/post-process/babylon-default-pipeline.d.ts.map +1 -1
  128. package/node_modules/@fps-games/babylon-renderer/dist/post-process/babylon-default-pipeline.js +54 -18
  129. package/node_modules/@fps-games/babylon-renderer/dist/post-process/babylon-default-pipeline.js.map +1 -1
  130. package/node_modules/@fps-games/babylon-renderer/package.json +9 -9
  131. package/node_modules/@fps-games/editor-babylon/dist/projection.d.ts +1 -0
  132. package/node_modules/@fps-games/editor-babylon/dist/projection.d.ts.map +1 -1
  133. package/node_modules/@fps-games/editor-babylon/dist/projection.js +1 -1
  134. package/node_modules/@fps-games/editor-babylon/dist/projection.js.map +1 -1
  135. package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.d.ts.map +1 -1
  136. package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.js +127 -13
  137. package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.js.map +1 -1
  138. package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.d.ts.map +1 -1
  139. package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.js +66 -1
  140. package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.js.map +1 -1
  141. package/node_modules/@fps-games/editor-babylon/package.json +6 -6
  142. package/node_modules/@fps-games/editor-browser/dist/editor-command-service-client.d.ts +32 -0
  143. package/node_modules/@fps-games/editor-browser/dist/editor-command-service-client.d.ts.map +1 -0
  144. package/node_modules/@fps-games/editor-browser/dist/editor-command-service-client.js +254 -0
  145. package/node_modules/@fps-games/editor-browser/dist/editor-command-service-client.js.map +1 -0
  146. package/node_modules/@fps-games/editor-browser/dist/index.d.ts +3 -1
  147. package/node_modules/@fps-games/editor-browser/dist/index.d.ts.map +1 -1
  148. package/node_modules/@fps-games/editor-browser/dist/index.js +2 -0
  149. package/node_modules/@fps-games/editor-browser/dist/index.js.map +1 -1
  150. package/node_modules/@fps-games/editor-browser/dist/local-editor-command-center.d.ts +68 -0
  151. package/node_modules/@fps-games/editor-browser/dist/local-editor-command-center.d.ts.map +1 -0
  152. package/node_modules/@fps-games/editor-browser/dist/local-editor-command-center.js +650 -0
  153. package/node_modules/@fps-games/editor-browser/dist/local-editor-command-center.js.map +1 -0
  154. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-formal-surface-visibility.d.ts +1 -0
  155. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-formal-surface-visibility.d.ts.map +1 -1
  156. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-formal-surface-visibility.js +22 -0
  157. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-formal-surface-visibility.js.map +1 -1
  158. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-controller.d.ts +8 -0
  159. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-controller.d.ts.map +1 -1
  160. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-controller.js +117 -6
  161. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-controller.js.map +1 -1
  162. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-view.d.ts +14 -1
  163. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-view.d.ts.map +1 -1
  164. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-view.js +100 -1
  165. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-view.js.map +1 -1
  166. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.d.ts +8 -1
  167. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.d.ts.map +1 -1
  168. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.js +75 -2
  169. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.js.map +1 -1
  170. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.d.ts +37 -12
  171. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.d.ts.map +1 -1
  172. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.js.map +1 -1
  173. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.d.ts +25 -2
  174. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.d.ts.map +1 -1
  175. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.js +332 -107
  176. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.js.map +1 -1
  177. package/node_modules/@fps-games/editor-browser/package.json +7 -7
  178. package/node_modules/@fps-games/editor-core/dist/editor-authoring-host.d.ts +107 -0
  179. package/node_modules/@fps-games/editor-core/dist/editor-authoring-host.d.ts.map +1 -0
  180. package/node_modules/@fps-games/editor-core/dist/editor-authoring-host.js +1211 -0
  181. package/node_modules/@fps-games/editor-core/dist/editor-authoring-host.js.map +1 -0
  182. package/node_modules/@fps-games/editor-core/dist/editor-command-capability-adapter.d.ts +34 -0
  183. package/node_modules/@fps-games/editor-core/dist/editor-command-capability-adapter.d.ts.map +1 -0
  184. package/node_modules/@fps-games/editor-core/dist/editor-command-capability-adapter.js +260 -0
  185. package/node_modules/@fps-games/editor-core/dist/editor-command-capability-adapter.js.map +1 -0
  186. package/node_modules/@fps-games/editor-core/dist/editor-command-composed-authority.d.ts +9 -0
  187. package/node_modules/@fps-games/editor-core/dist/editor-command-composed-authority.d.ts.map +1 -0
  188. package/node_modules/@fps-games/editor-core/dist/editor-command-composed-authority.js +14 -0
  189. package/node_modules/@fps-games/editor-core/dist/editor-command-composed-authority.js.map +1 -0
  190. package/node_modules/@fps-games/editor-core/dist/editor-command-observability.d.ts +18 -0
  191. package/node_modules/@fps-games/editor-core/dist/editor-command-observability.d.ts.map +1 -0
  192. package/node_modules/@fps-games/editor-core/dist/editor-command-observability.js +113 -0
  193. package/node_modules/@fps-games/editor-core/dist/editor-command-observability.js.map +1 -0
  194. package/node_modules/@fps-games/editor-core/dist/editor-command-system.d.ts +82 -0
  195. package/node_modules/@fps-games/editor-core/dist/editor-command-system.d.ts.map +1 -0
  196. package/node_modules/@fps-games/editor-core/dist/editor-command-system.js +1098 -0
  197. package/node_modules/@fps-games/editor-core/dist/editor-command-system.js.map +1 -0
  198. package/node_modules/@fps-games/editor-core/dist/editor-plugin-host.d.ts +6 -7
  199. package/node_modules/@fps-games/editor-core/dist/editor-plugin-host.d.ts.map +1 -1
  200. package/node_modules/@fps-games/editor-core/dist/editor-plugin-host.js +62 -103
  201. package/node_modules/@fps-games/editor-core/dist/editor-plugin-host.js.map +1 -1
  202. package/node_modules/@fps-games/editor-core/dist/editor-service-gateway.d.ts +30 -0
  203. package/node_modules/@fps-games/editor-core/dist/editor-service-gateway.d.ts.map +1 -0
  204. package/node_modules/@fps-games/editor-core/dist/editor-service-gateway.js +540 -0
  205. package/node_modules/@fps-games/editor-core/dist/editor-service-gateway.js.map +1 -0
  206. package/node_modules/@fps-games/editor-core/dist/editor-session-authority.d.ts +9 -0
  207. package/node_modules/@fps-games/editor-core/dist/editor-session-authority.d.ts.map +1 -0
  208. package/node_modules/@fps-games/editor-core/dist/editor-session-authority.js +61 -0
  209. package/node_modules/@fps-games/editor-core/dist/editor-session-authority.js.map +1 -0
  210. package/node_modules/@fps-games/editor-core/dist/editor-session.d.ts +55 -0
  211. package/node_modules/@fps-games/editor-core/dist/editor-session.d.ts.map +1 -1
  212. package/node_modules/@fps-games/editor-core/dist/editor-session.js +247 -6
  213. package/node_modules/@fps-games/editor-core/dist/editor-session.js.map +1 -1
  214. package/node_modules/@fps-games/editor-core/dist/index.d.ts +6 -2
  215. package/node_modules/@fps-games/editor-core/dist/index.d.ts.map +1 -1
  216. package/node_modules/@fps-games/editor-core/dist/index.js +6 -2
  217. package/node_modules/@fps-games/editor-core/dist/index.js.map +1 -1
  218. package/node_modules/@fps-games/editor-core/package.json +6 -6
  219. package/node_modules/@fps-games/editor-forge-play/dist/index.d.ts +0 -1
  220. package/node_modules/@fps-games/editor-forge-play/dist/index.d.ts.map +1 -1
  221. package/node_modules/@fps-games/editor-forge-play/dist/index.js +0 -1
  222. package/node_modules/@fps-games/editor-forge-play/dist/index.js.map +1 -1
  223. package/node_modules/@fps-games/editor-forge-play/package.json +2 -2
  224. package/node_modules/@fps-games/editor-playable-sdk/dist/bridge-command/protocol.d.ts +2 -0
  225. package/node_modules/@fps-games/editor-playable-sdk/dist/bridge-command/protocol.d.ts.map +1 -1
  226. package/node_modules/@fps-games/editor-playable-sdk/dist/document/helpers.d.ts.map +1 -1
  227. package/node_modules/@fps-games/editor-playable-sdk/dist/document/helpers.js +41 -1
  228. package/node_modules/@fps-games/editor-playable-sdk/dist/document/helpers.js.map +1 -1
  229. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play-types.d.ts +27 -1
  230. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play-types.d.ts.map +1 -1
  231. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play-types.js.map +1 -1
  232. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play.d.ts +2 -0
  233. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play.d.ts.map +1 -1
  234. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play.js +214 -7
  235. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play.js.map +1 -1
  236. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/host-controller.d.ts +1 -0
  237. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/host-controller.d.ts.map +1 -1
  238. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/host-controller.js +11 -3
  239. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/host-controller.js.map +1 -1
  240. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/index.d.ts +2 -4
  241. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/index.d.ts.map +1 -1
  242. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/index.js +0 -1
  243. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/index.js.map +1 -1
  244. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/lifecycle.d.ts.map +1 -1
  245. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/lifecycle.js +77 -31
  246. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/lifecycle.js.map +1 -1
  247. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/types.d.ts +8 -1
  248. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/types.d.ts.map +1 -1
  249. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/types.js.map +1 -1
  250. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/asset-fields.d.ts +21 -1
  251. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/asset-fields.d.ts.map +1 -1
  252. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/asset-fields.js +90 -4
  253. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/asset-fields.js.map +1 -1
  254. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/binding.d.ts +27 -1
  255. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/binding.d.ts.map +1 -1
  256. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/binding.js +161 -1
  257. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/binding.js.map +1 -1
  258. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/inspector.d.ts +2 -2
  259. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/inspector.d.ts.map +1 -1
  260. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/inspector.js +5 -92
  261. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/inspector.js.map +1 -1
  262. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/scene-inspector.d.ts +7 -0
  263. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/scene-inspector.d.ts.map +1 -1
  264. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/scene-inspector.js +26 -9
  265. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/scene-inspector.js.map +1 -1
  266. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/slot-inspector.d.ts +9 -0
  267. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/slot-inspector.d.ts.map +1 -1
  268. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/slot-inspector.js +19 -8
  269. package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/slot-inspector.js.map +1 -1
  270. package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/material-override-inspector.d.ts +5 -0
  271. package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/material-override-inspector.d.ts.map +1 -1
  272. package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/material-override-inspector.js +16 -4
  273. package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/material-override-inspector.js.map +1 -1
  274. package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/stage-inspector.d.ts +9 -0
  275. package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/stage-inspector.d.ts.map +1 -1
  276. package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/stage-inspector.js +12 -2
  277. package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/stage-inspector.js.map +1 -1
  278. package/node_modules/@fps-games/editor-playable-sdk/dist/product/ground-decal.d.ts +2 -1
  279. package/node_modules/@fps-games/editor-playable-sdk/dist/product/ground-decal.d.ts.map +1 -1
  280. package/node_modules/@fps-games/editor-playable-sdk/dist/product/ground-decal.js +10 -5
  281. package/node_modules/@fps-games/editor-playable-sdk/dist/product/ground-decal.js.map +1 -1
  282. package/node_modules/@fps-games/editor-playable-sdk/dist/product/index.d.ts +1 -0
  283. package/node_modules/@fps-games/editor-playable-sdk/dist/product/index.d.ts.map +1 -1
  284. package/node_modules/@fps-games/editor-playable-sdk/dist/product/index.js +1 -0
  285. package/node_modules/@fps-games/editor-playable-sdk/dist/product/index.js.map +1 -1
  286. package/node_modules/@fps-games/editor-playable-sdk/dist/product/project-host-services.d.ts +17 -82
  287. package/node_modules/@fps-games/editor-playable-sdk/dist/product/project-host-services.d.ts.map +1 -1
  288. package/node_modules/@fps-games/editor-playable-sdk/dist/product/project-host-services.js +53 -57
  289. package/node_modules/@fps-games/editor-playable-sdk/dist/product/project-host-services.js.map +1 -1
  290. package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-session.d.ts.map +1 -1
  291. package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-session.js +3 -2
  292. package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-session.js.map +1 -1
  293. package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-authoring-commands.d.ts +10 -0
  294. package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-authoring-commands.d.ts.map +1 -0
  295. package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-authoring-commands.js +256 -0
  296. package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-authoring-commands.js.map +1 -0
  297. package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-scene-assembly.d.ts.map +1 -1
  298. package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-scene-assembly.js +7 -5
  299. package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-scene-assembly.js.map +1 -1
  300. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.d.ts.map +1 -1
  301. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.js +8 -0
  302. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.js.map +1 -1
  303. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/types.d.ts +1 -0
  304. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/types.d.ts.map +1 -1
  305. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/types.js.map +1 -1
  306. package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/inspectors.js +134 -12
  307. package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/inspectors.js.map +1 -1
  308. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-scene-workflow.d.ts.map +1 -1
  309. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-scene-workflow.js +47 -0
  310. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-scene-workflow.js.map +1 -1
  311. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-service-vite.d.ts +27 -0
  312. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-service-vite.d.ts.map +1 -0
  313. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-service-vite.js +592 -0
  314. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-service-vite.js.map +1 -0
  315. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.d.ts +3 -1
  316. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.d.ts.map +1 -1
  317. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.js +2 -1
  318. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.js.map +1 -1
  319. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/plugin.d.ts.map +1 -1
  320. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/plugin.js +61 -6
  321. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/plugin.js.map +1 -1
  322. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-adapter.d.ts +0 -2
  323. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-adapter.d.ts.map +1 -1
  324. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-adapter.js +1 -10
  325. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-adapter.js.map +1 -1
  326. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.d.ts.map +1 -1
  327. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.js +21 -0
  328. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.js.map +1 -1
  329. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-authoring-backend.d.ts +13 -0
  330. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-authoring-backend.d.ts.map +1 -0
  331. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-authoring-backend.js +18 -0
  332. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-authoring-backend.js.map +1 -0
  333. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-editor-service.d.ts +28 -0
  334. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-editor-service.d.ts.map +1 -0
  335. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-editor-service.js +863 -0
  336. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-editor-service.js.map +1 -0
  337. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/types.d.ts +2 -0
  338. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/types.d.ts.map +1 -1
  339. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/types.js.map +1 -1
  340. package/node_modules/@fps-games/editor-playable-sdk/package.json +6 -6
  341. package/node_modules/@fps-games/editor-protocol/dist/editor-command-capabilities.d.ts +1626 -0
  342. package/node_modules/@fps-games/editor-protocol/dist/editor-command-capabilities.d.ts.map +1 -0
  343. package/node_modules/@fps-games/editor-protocol/dist/{agent-bridge.js → editor-command-capabilities.js} +766 -620
  344. package/node_modules/@fps-games/editor-protocol/dist/editor-command-capabilities.js.map +1 -0
  345. package/node_modules/@fps-games/editor-protocol/dist/editor-command-trace.d.ts +69 -0
  346. package/node_modules/@fps-games/editor-protocol/dist/editor-command-trace.d.ts.map +1 -0
  347. package/node_modules/@fps-games/editor-protocol/dist/editor-command-trace.js +22 -0
  348. package/node_modules/@fps-games/editor-protocol/dist/editor-command-trace.js.map +1 -0
  349. package/node_modules/@fps-games/editor-protocol/dist/editor-command.d.ts +136 -0
  350. package/node_modules/@fps-games/editor-protocol/dist/editor-command.d.ts.map +1 -0
  351. package/node_modules/@fps-games/editor-protocol/dist/editor-command.js +2 -0
  352. package/node_modules/@fps-games/editor-protocol/dist/editor-command.js.map +1 -0
  353. package/node_modules/@fps-games/editor-protocol/dist/editor-service.d.ts +225 -0
  354. package/node_modules/@fps-games/editor-protocol/dist/editor-service.d.ts.map +1 -0
  355. package/node_modules/@fps-games/editor-protocol/dist/editor-service.js +4 -0
  356. package/node_modules/@fps-games/editor-protocol/dist/editor-service.js.map +1 -0
  357. package/node_modules/@fps-games/editor-protocol/dist/index.d.ts +6 -3
  358. package/node_modules/@fps-games/editor-protocol/dist/index.d.ts.map +1 -1
  359. package/node_modules/@fps-games/editor-protocol/dist/index.js +6 -3
  360. package/node_modules/@fps-games/editor-protocol/dist/index.js.map +1 -1
  361. package/node_modules/@fps-games/editor-protocol/package.json +2 -2
  362. package/node_modules/@fps-games/editor-tooling/package.json +3 -3
  363. package/node_modules/@fps-games/editor-ui/package.json +1 -1
  364. package/node_modules/@fps-games/playable-assets/package.json +1 -1
  365. package/node_modules/@fps-games/playable-contracts/package.json +1 -1
  366. package/node_modules/@fps-games/playable-rendering/package.json +2 -2
  367. package/node_modules/@fps-games/playable-runtime/package.json +12 -12
  368. package/node_modules/@fps-games/playable-runtime-data/package.json +4 -4
  369. package/node_modules/@fps-games/playable-scene/package.json +2 -2
  370. package/node_modules/@fps-games/plugin-api/package.json +1 -1
  371. package/node_modules/@fps-games/plugin-assets/dist/version.d.ts +1 -1
  372. package/node_modules/@fps-games/plugin-assets/dist/version.js +1 -1
  373. package/node_modules/@fps-games/plugin-assets/dist/version.js.map +1 -1
  374. package/node_modules/@fps-games/plugin-assets/package.json +6 -6
  375. package/node_modules/@fps-games/plugin-hierarchy/dist/kernel.d.ts +1 -0
  376. package/node_modules/@fps-games/plugin-hierarchy/dist/kernel.d.ts.map +1 -1
  377. package/node_modules/@fps-games/plugin-hierarchy/dist/kernel.js +78 -4
  378. package/node_modules/@fps-games/plugin-hierarchy/dist/kernel.js.map +1 -1
  379. package/node_modules/@fps-games/plugin-hierarchy/dist/version.d.ts +1 -1
  380. package/node_modules/@fps-games/plugin-hierarchy/dist/version.js +1 -1
  381. package/node_modules/@fps-games/plugin-hierarchy/dist/version.js.map +1 -1
  382. package/node_modules/@fps-games/plugin-hierarchy/package.json +5 -5
  383. package/node_modules/@fps-games/plugin-host/package.json +2 -2
  384. package/node_modules/@fps-games/plugin-markers/dist/version.d.ts +1 -1
  385. package/node_modules/@fps-games/plugin-markers/dist/version.js +1 -1
  386. package/node_modules/@fps-games/plugin-markers/dist/version.js.map +1 -1
  387. package/node_modules/@fps-games/plugin-markers/package.json +5 -5
  388. package/node_modules/@fps-games/plugin-materials/dist/version.d.ts +1 -1
  389. package/node_modules/@fps-games/plugin-materials/dist/version.js +1 -1
  390. package/node_modules/@fps-games/plugin-materials/dist/version.js.map +1 -1
  391. package/node_modules/@fps-games/plugin-materials/package.json +5 -5
  392. package/node_modules/@fps-games/plugin-rendering/dist/version.d.ts +1 -1
  393. package/node_modules/@fps-games/plugin-rendering/dist/version.js +1 -1
  394. package/node_modules/@fps-games/plugin-rendering/dist/version.js.map +1 -1
  395. package/node_modules/@fps-games/plugin-rendering/package.json +5 -5
  396. package/node_modules/@fps-games/plugin-scene/dist/version.d.ts +1 -1
  397. package/node_modules/@fps-games/plugin-scene/dist/version.js +1 -1
  398. package/node_modules/@fps-games/plugin-scene/dist/version.js.map +1 -1
  399. package/node_modules/@fps-games/plugin-scene/package.json +5 -5
  400. package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.d.ts +1 -1
  401. package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.js +1 -1
  402. package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.js.map +1 -1
  403. package/node_modules/@fps-games/plugin-shadow-map-experiment/package.json +5 -5
  404. package/node_modules/@fps-games/plugin-shadows/dist/version.d.ts +1 -1
  405. package/node_modules/@fps-games/plugin-shadows/dist/version.js +1 -1
  406. package/node_modules/@fps-games/plugin-shadows/dist/version.js.map +1 -1
  407. package/node_modules/@fps-games/plugin-shadows/package.json +7 -7
  408. package/package.json +23 -23
  409. package/dist/agent-bridge/capabilities/assets.d.ts +0 -8
  410. package/dist/agent-bridge/capabilities/assets.d.ts.map +0 -1
  411. package/dist/agent-bridge/capabilities/assets.js.map +0 -1
  412. package/dist/agent-bridge/capabilities/editor-state.d.ts +0 -5
  413. package/dist/agent-bridge/capabilities/editor-state.d.ts.map +0 -1
  414. package/dist/agent-bridge/capabilities/editor-state.js.map +0 -1
  415. package/dist/agent-bridge/capabilities/hierarchy.d.ts +0 -4
  416. package/dist/agent-bridge/capabilities/hierarchy.d.ts.map +0 -1
  417. package/dist/agent-bridge/capabilities/hierarchy.js.map +0 -1
  418. package/dist/agent-bridge/capabilities/host-lifecycle.d.ts +0 -11
  419. package/dist/agent-bridge/capabilities/host-lifecycle.d.ts.map +0 -1
  420. package/dist/agent-bridge/capabilities/host-lifecycle.js +0 -149
  421. package/dist/agent-bridge/capabilities/host-lifecycle.js.map +0 -1
  422. package/dist/agent-bridge/capabilities/prefabs.d.ts +0 -5
  423. package/dist/agent-bridge/capabilities/prefabs.d.ts.map +0 -1
  424. package/dist/agent-bridge/capabilities/prefabs.js.map +0 -1
  425. package/dist/agent-bridge/capabilities/scene-objects.d.ts +0 -8
  426. package/dist/agent-bridge/capabilities/scene-objects.d.ts.map +0 -1
  427. package/dist/agent-bridge/capabilities/scene-objects.js +0 -480
  428. package/dist/agent-bridge/capabilities/scene-objects.js.map +0 -1
  429. package/dist/agent-bridge/capabilities/selection.d.ts +0 -5
  430. package/dist/agent-bridge/capabilities/selection.d.ts.map +0 -1
  431. package/dist/agent-bridge/capabilities/selection.js +0 -60
  432. package/dist/agent-bridge/capabilities/selection.js.map +0 -1
  433. package/dist/agent-bridge/capabilities/shadows.d.ts +0 -5
  434. package/dist/agent-bridge/capabilities/shadows.d.ts.map +0 -1
  435. package/dist/agent-bridge/capabilities/shadows.js.map +0 -1
  436. package/dist/agent-bridge/capabilities/transform.d.ts +0 -5
  437. package/dist/agent-bridge/capabilities/transform.d.ts.map +0 -1
  438. package/dist/agent-bridge/capabilities/transform.js +0 -164
  439. package/dist/agent-bridge/capabilities/transform.js.map +0 -1
  440. package/dist/agent-bridge/capabilities/ui-regions.d.ts +0 -4
  441. package/dist/agent-bridge/capabilities/ui-regions.d.ts.map +0 -1
  442. package/dist/agent-bridge/capabilities/ui-regions.js.map +0 -1
  443. package/dist/agent-bridge/capabilities/viewport.d.ts +0 -5
  444. package/dist/agent-bridge/capabilities/viewport.d.ts.map +0 -1
  445. package/dist/agent-bridge/capabilities/viewport.js.map +0 -1
  446. package/dist/agent-bridge/capability-sources.d.ts +0 -7
  447. package/dist/agent-bridge/capability-sources.d.ts.map +0 -1
  448. package/dist/agent-bridge/capability-sources.js +0 -34
  449. package/dist/agent-bridge/capability-sources.js.map +0 -1
  450. package/dist/agent-bridge/diagnostics.d.ts +0 -12
  451. package/dist/agent-bridge/diagnostics.d.ts.map +0 -1
  452. package/dist/agent-bridge/diagnostics.js.map +0 -1
  453. package/dist/agent-bridge/index.d.ts.map +0 -1
  454. package/dist/agent-bridge/index.js.map +0 -1
  455. package/dist/agent-bridge/register.d.ts +0 -4
  456. package/dist/agent-bridge/register.d.ts.map +0 -1
  457. package/dist/agent-bridge/register.js.map +0 -1
  458. package/dist/agent-bridge/shared.d.ts.map +0 -1
  459. package/dist/agent-bridge/shared.js.map +0 -1
  460. package/dist/agent-bridge/source-types.d.ts +0 -110
  461. package/dist/agent-bridge/source-types.d.ts.map +0 -1
  462. package/dist/agent-bridge/source-types.js.map +0 -1
  463. package/dist/editor-plugin-agent-capabilities.d.ts +0 -4
  464. package/dist/editor-plugin-agent-capabilities.d.ts.map +0 -1
  465. package/dist/editor-plugin-agent-capabilities.js +0 -64
  466. package/dist/editor-plugin-agent-capabilities.js.map +0 -1
  467. package/dist/local-editor-agent-actions.d.ts +0 -43
  468. package/dist/local-editor-agent-actions.d.ts.map +0 -1
  469. package/dist/local-editor-agent-actions.js +0 -321
  470. package/dist/local-editor-agent-actions.js.map +0 -1
  471. package/dist/local-editor-agent-bridge-transport.d.ts +0 -129
  472. package/dist/local-editor-agent-bridge-transport.d.ts.map +0 -1
  473. package/dist/local-editor-agent-bridge-transport.js +0 -403
  474. package/dist/local-editor-agent-bridge-transport.js.map +0 -1
  475. package/dist/local-editor-agent-bridge.d.ts +0 -2
  476. package/dist/local-editor-agent-bridge.d.ts.map +0 -1
  477. package/dist/local-editor-agent-bridge.js +0 -2
  478. package/dist/local-editor-agent-bridge.js.map +0 -1
  479. package/dist/local-editor-agent-context.d.ts +0 -68
  480. package/dist/local-editor-agent-context.d.ts.map +0 -1
  481. package/dist/local-editor-agent-context.js +0 -716
  482. package/dist/local-editor-agent-context.js.map +0 -1
  483. package/node_modules/@fps-games/editor-core/dist/agent-bridge.d.ts +0 -22
  484. package/node_modules/@fps-games/editor-core/dist/agent-bridge.d.ts.map +0 -1
  485. package/node_modules/@fps-games/editor-core/dist/agent-bridge.js +0 -106
  486. package/node_modules/@fps-games/editor-core/dist/agent-bridge.js.map +0 -1
  487. package/node_modules/@fps-games/editor-core/dist/agent-interaction.d.ts +0 -17
  488. package/node_modules/@fps-games/editor-core/dist/agent-interaction.d.ts.map +0 -1
  489. package/node_modules/@fps-games/editor-core/dist/agent-interaction.js +0 -14
  490. package/node_modules/@fps-games/editor-core/dist/agent-interaction.js.map +0 -1
  491. package/node_modules/@fps-games/editor-forge-play/dist/agent-transport.d.ts +0 -23
  492. package/node_modules/@fps-games/editor-forge-play/dist/agent-transport.d.ts.map +0 -1
  493. package/node_modules/@fps-games/editor-forge-play/dist/agent-transport.js +0 -47
  494. package/node_modules/@fps-games/editor-forge-play/dist/agent-transport.js.map +0 -1
  495. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/agent-descriptions.d.ts +0 -112
  496. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/agent-descriptions.d.ts.map +0 -1
  497. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/agent-descriptions.js +0 -159
  498. package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/agent-descriptions.js.map +0 -1
  499. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/session-metadata.d.ts +0 -15
  500. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/session-metadata.d.ts.map +0 -1
  501. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/session-metadata.js +0 -76
  502. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/session-metadata.js.map +0 -1
  503. package/node_modules/@fps-games/editor-protocol/dist/agent-bridge.d.ts +0 -1622
  504. package/node_modules/@fps-games/editor-protocol/dist/agent-bridge.d.ts.map +0 -1
  505. package/node_modules/@fps-games/editor-protocol/dist/agent-bridge.js.map +0 -1
  506. package/node_modules/@fps-games/editor-protocol/dist/agent-trace.d.ts +0 -68
  507. package/node_modules/@fps-games/editor-protocol/dist/agent-trace.d.ts.map +0 -1
  508. package/node_modules/@fps-games/editor-protocol/dist/agent-trace.js +0 -23
  509. package/node_modules/@fps-games/editor-protocol/dist/agent-trace.js.map +0 -1
  510. package/node_modules/@fps-games/editor-protocol/dist/agent.d.ts +0 -187
  511. package/node_modules/@fps-games/editor-protocol/dist/agent.d.ts.map +0 -1
  512. package/node_modules/@fps-games/editor-protocol/dist/agent.js +0 -5
  513. package/node_modules/@fps-games/editor-protocol/dist/agent.js.map +0 -1
  514. /package/dist/{agent-bridge → editor-commands}/source-types.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"binding.js","sourceRoot":"","sources":["../../src/material-binding/binding.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n findEditorSceneModelRenderer,\n} from '../document/index';\nimport {\n normalizeEditorSceneMaterialSlotOwnerPath,\n} from './paths';\nimport type {\n EditorSceneMaterialAsset,\n EditorSceneMaterialAssetOwnershipText,\n EditorSceneMaterialAssetOwnershipView,\n EditorSceneArtistMaterialProfile,\n EditorSceneMaterialBinding,\n EditorSceneMaterialAssetIntegrityResult,\n EditorSceneMaterialAssetUsage,\n EditorSceneMaterialBindingSummary,\n EditorSceneMaterialDocument,\n EditorSceneMaterialGameObject,\n EditorSceneMaterialOverrides,\n EditorSceneMaterialSlotDescriptor,\n EditorSceneSourceMaterialProfile,\n EditorSceneSourceMaterialTextureHint,\n} from './types';\n\ntype EditorSceneMaterialSlotBoundingBox = {\n min?: [number, number, number];\n max?: [number, number, number];\n};\n\nexport const EDITOR_SCENE_ASSET_MESH_SELECTION_SEPARATOR = '::assetMesh::';\n\nexport function findEditorSceneMaterialAsset<\n TMaterialAsset extends EditorSceneMaterialAsset = EditorSceneMaterialAsset,\n>(\n document: Pick<EditorSceneMaterialDocument<EditorSceneMaterialGameObject, TMaterialAsset>, 'scene'>,\n materialAssetId: string,\n): TMaterialAsset | null {\n if (!materialAssetId) return null;\n return document.scene.materialAssets?.find((materialAsset) => materialAsset.id === materialAssetId) ?? null;\n}\n\nexport function hasEditorSceneMaterialAsset(\n document: Pick<EditorSceneMaterialDocument, 'scene'>,\n materialAssetId: string,\n): boolean {\n return !!findEditorSceneMaterialAsset(document, materialAssetId);\n}\n\nexport function createEditorSceneMaterialBindingSummary<\n TMaterialAsset extends EditorSceneMaterialAsset = EditorSceneMaterialAsset,\n>(\n binding: EditorSceneMaterialBinding | null | undefined,\n materialAsset: TMaterialAsset | null | undefined,\n): EditorSceneMaterialBindingSummary<TMaterialAsset> {\n if (materialAsset) {\n return {\n state: 'asset',\n materialAssetId: materialAsset.id,\n materialAsset,\n };\n }\n if (binding?.materialAssetId) {\n return {\n state: 'missing-asset',\n materialAssetId: binding.materialAssetId,\n };\n }\n if (binding?.override) return { state: 'override' };\n return { state: 'inherit' };\n}\n\nexport function collectEditorSceneMaterialAssetBindingIds(\n document: Pick<EditorSceneMaterialDocument, 'scene' | 'assets'>,\n materialAssetId: string,\n): string[] {\n const ids = new Set<string>();\n for (const usage of collectEditorSceneMaterialAssetUsages(document, materialAssetId)) {\n ids.add(usage.gameObjectId);\n }\n return [...ids];\n}\n\nexport function collectEditorSceneMaterialAssetUsages(\n document: Pick<EditorSceneMaterialDocument, 'scene' | 'assets'>,\n materialAssetId: string,\n): EditorSceneMaterialAssetUsage[] {\n const targetMaterialAssetId = materialAssetId.trim();\n if (!targetMaterialAssetId) return [];\n return collectEditorSceneMaterialAssetReferences(document)\n .filter(usage => usage.materialAssetId === targetMaterialAssetId);\n}\n\nexport function createEditorSceneMaterialAssetOwnershipView(\n document: Pick<EditorSceneMaterialDocument, 'scene' | 'assets'>,\n materialAssetId: string,\n text?: EditorSceneMaterialAssetOwnershipText,\n): EditorSceneMaterialAssetOwnershipView {\n const normalizedMaterialAssetId = materialAssetId.trim();\n const usages = collectEditorSceneMaterialAssetUsages(document, normalizedMaterialAssetId);\n const usageCount = usages.length;\n return {\n materialAssetId: normalizedMaterialAssetId,\n usage: {\n count: usageCount,\n items: usages.map(usage => structuredClone(usage)),\n },\n usageCount,\n used: usageCount > 0,\n shared: usageCount > 1,\n ...(text ? {\n usageLabel: text.formatUsageCount(usageCount),\n editImpactLabel: text.formatEditImpact(usageCount),\n duplicateImpactLabel: text.formatDuplicateImpact(usageCount),\n } : {}),\n };\n}\n\nexport function collectEditorSceneMaterialAssetReferences(\n document: Pick<EditorSceneMaterialDocument, 'scene' | 'assets'>,\n): EditorSceneMaterialAssetUsage[] {\n const usages: EditorSceneMaterialAssetUsage[] = [];\n for (const gameObject of document.scene.gameObjects) {\n const gameObjectLabel = getEditorSceneMaterialUsageGameObjectLabel(gameObject);\n const rootMaterialAssetId = readEditorSceneMaterialBindingAssetId(gameObject.overrides?.materialBinding);\n if (rootMaterialAssetId) {\n usages.push({\n kind: 'root',\n gameObjectId: gameObject.id,\n gameObjectName: gameObject.name,\n materialAssetId: rootMaterialAssetId,\n bindingPath: 'overrides.materialBinding.materialAssetId',\n label: gameObjectLabel,\n });\n }\n const materialSlots = collectEditorSceneChildMaterialSlots(document, gameObject);\n const materialSlotsBySlotId = new Map(\n materialSlots\n .filter(slot => !!slot.slotId)\n .map(slot => [slot.slotId!, slot]),\n );\n const materialSlotsByOwnerPath = new Map(\n materialSlots.map(slot => [normalizeEditorSceneMaterialSlotOwnerPath(slot.ownerNodePath), slot]),\n );\n const materialSlotBindings = gameObject.overrides?.materialSlotBindings ?? {};\n for (const [slotId, binding] of Object.entries(materialSlotBindings)) {\n const slotMaterialAssetId = readEditorSceneMaterialBindingAssetId(binding);\n if (!slotMaterialAssetId) continue;\n const slot = materialSlotsBySlotId.get(slotId);\n const slotLabel = getEditorSceneMaterialUsageSlotLabel(slot, slotId);\n usages.push({\n kind: 'slot',\n gameObjectId: gameObject.id,\n gameObjectName: gameObject.name,\n materialAssetId: slotMaterialAssetId,\n bindingPath: `overrides.materialSlotBindings.${slotId}.materialAssetId`,\n label: `${gameObjectLabel} / ${slotLabel}`,\n slotId,\n ownerNodePath: slot?.ownerNodePath ?? slotId,\n });\n }\n }\n for (const asset of document.assets) {\n if (asset.type !== 'prefab' || !asset.prefab) continue;\n collectPrefabMaterialOverrideReferences(usages, {\n ownerId: asset.id,\n ownerName: asset.displayName ?? asset.id,\n path: `assets.${asset.id}.prefab.overrides`,\n overrides: asset.prefab.overrides,\n });\n for (const node of asset.prefab.nodes ?? []) {\n collectPrefabMaterialOverrideReferences(usages, {\n ownerId: `${asset.id}:${node.id}`,\n ownerName: `${asset.displayName ?? asset.id} / ${node.name ?? node.id}`,\n path: `assets.${asset.id}.prefab.nodes.${node.id}.overrides`,\n overrides: node.overrides,\n });\n }\n }\n return usages;\n}\n\nfunction collectPrefabMaterialOverrideReferences(\n usages: EditorSceneMaterialAssetUsage[],\n input: {\n ownerId: string;\n ownerName: string;\n path: string;\n overrides: EditorSceneMaterialOverrides | undefined;\n },\n): void {\n const rootMaterialAssetId = readEditorSceneMaterialBindingAssetId(input.overrides?.materialBinding);\n if (rootMaterialAssetId) {\n usages.push({\n kind: 'root',\n gameObjectId: input.ownerId,\n gameObjectName: input.ownerName,\n materialAssetId: rootMaterialAssetId,\n bindingPath: `${input.path}.materialBinding.materialAssetId`,\n label: input.ownerName,\n });\n }\n for (const [slotId, binding] of Object.entries(input.overrides?.materialSlotBindings ?? {})) {\n const materialAssetId = readEditorSceneMaterialBindingAssetId(binding);\n if (!materialAssetId) continue;\n usages.push({\n kind: 'slot',\n gameObjectId: input.ownerId,\n gameObjectName: input.ownerName,\n materialAssetId,\n bindingPath: `${input.path}.materialSlotBindings.${slotId}.materialAssetId`,\n label: `${input.ownerName} / ${slotId}`,\n slotId,\n ownerNodePath: slotId,\n });\n }\n}\n\nexport function resolveEditorSceneMaterialAssetIntegrity(\n document: Pick<EditorSceneMaterialDocument, 'scene' | 'assets'>,\n): EditorSceneMaterialAssetIntegrityResult {\n const materialAssetIds = [...new Set(\n (document.scene.materialAssets ?? [])\n .map(materialAsset => materialAsset.id?.trim())\n .filter((materialAssetId): materialAssetId is string => !!materialAssetId),\n )];\n const materialAssetIdSet = new Set(materialAssetIds);\n const references = collectEditorSceneMaterialAssetReferences(document);\n const missingReferences = references.filter(usage => !materialAssetIdSet.has(usage.materialAssetId));\n const missingReferencesByAssetId = new Map<string, EditorSceneMaterialAssetUsage[]>();\n for (const usage of missingReferences) {\n const usages = missingReferencesByAssetId.get(usage.materialAssetId) ?? [];\n usages.push(usage);\n missingReferencesByAssetId.set(usage.materialAssetId, usages);\n }\n const issues = [...missingReferencesByAssetId.entries()].map(([materialAssetId, usages]) => ({\n kind: 'missing-material-asset' as const,\n materialAssetId,\n usages,\n }));\n return {\n ok: issues.length === 0,\n materialAssetIds,\n references,\n missingMaterialAssetIds: issues.map(issue => issue.materialAssetId),\n missingReferences,\n issues,\n };\n}\n\nexport function collectEditorSceneChildMaterialSlots(\n document: Pick<EditorSceneMaterialDocument, 'assets'>,\n gameObject: EditorSceneMaterialGameObject,\n): EditorSceneMaterialSlotDescriptor[] {\n const slots = new Map<string, EditorSceneMaterialSlotDescriptor>();\n const ownerNodePaths = new Set<string>();\n for (const slot of readEditorSceneAssetMaterialSlots(document, gameObject)) {\n slots.set(slot.slotId ?? slot.ownerNodePath, slot);\n ownerNodePaths.add(slot.ownerNodePath);\n }\n for (const slotId of Object.keys(gameObject.overrides?.materialSlotBindings ?? {})) {\n if (!slots.has(slotId)) slots.set(slotId, { slotId, ownerNodePath: slotId, label: slotId });\n }\n return [...slots.values()].sort((left, right) => left.ownerNodePath.localeCompare(right.ownerNodePath));\n}\n\nexport function hasDetectedModelMaterialSlots(\n document: Pick<EditorSceneMaterialDocument, 'assets'>,\n gameObject: EditorSceneMaterialGameObject,\n): boolean {\n return readEditorSceneAssetMaterialSlots(document, gameObject).length > 0;\n}\n\nexport function bindDefaultEditorSceneSlotMaterial<\n TGameObject extends EditorSceneMaterialGameObject = EditorSceneMaterialGameObject,\n>(\n gameObject: TGameObject,\n slot: EditorSceneMaterialSlotDescriptor,\n materialAssetId: string,\n): TGameObject {\n const next = structuredClone(gameObject) as TGameObject;\n next.overrides = next.overrides ?? {};\n if (!slot.slotId) return next;\n next.overrides.materialSlotBindings = next.overrides.materialSlotBindings ?? {};\n next.overrides.materialSlotBindings[slot.slotId] = {\n ...(next.overrides.materialSlotBindings[slot.slotId] ?? {}),\n materialAssetId,\n };\n return next;\n}\n\nexport function collectEditorSceneSlotSourceMaterialIndices(slot: Pick<EditorSceneMaterialSlotDescriptor, 'sourceMaterialIndices' | 'sourceMaterialIndex'>): number[] {\n if (slot.sourceMaterialIndices?.length) {\n return [...new Set(slot.sourceMaterialIndices.filter((value): value is number => Number.isInteger(value)))];\n }\n const sourceMaterialIndex = slot.sourceMaterialIndex;\n return typeof sourceMaterialIndex === 'number' && Number.isInteger(sourceMaterialIndex) ? [sourceMaterialIndex] : [];\n}\n\nexport function getEditorSceneSlotSelectionKey(slot: Pick<EditorSceneMaterialSlotDescriptor, 'slotId' | 'ownerNodePath'>): string {\n return slot.slotId;\n}\n\nexport function getEditorSceneSlotMaterialBindingPath(slot: Pick<EditorSceneMaterialSlotDescriptor, 'slotId' | 'ownerNodePath'>): string {\n return `overrides.materialSlotBindings.${slot.slotId}.materialAssetId`;\n}\n\nexport function getEditorSceneSlotMaterialBinding<TBinding extends EditorSceneMaterialBinding = EditorSceneMaterialBinding>(\n gameObject: Pick<EditorSceneMaterialGameObject, 'overrides'>,\n slot: Pick<EditorSceneMaterialSlotDescriptor, 'slotId' | 'ownerNodePath'>,\n): TBinding | undefined {\n return gameObject.overrides?.materialSlotBindings?.[slot.slotId] as TBinding | undefined;\n}\n\nexport function createEditorSceneAssetMeshSelectionId(\n rootGameObjectId: string,\n slotSelectionKey: string,\n): string {\n return `${rootGameObjectId}${EDITOR_SCENE_ASSET_MESH_SELECTION_SEPARATOR}${encodeURIComponent(slotSelectionKey)}`;\n}\n\nexport function parseEditorSceneAssetMeshSelectionId(value: string): { rootGameObjectId: string; slotSelectionKey: string } | null {\n const separatorIndex = value.indexOf(EDITOR_SCENE_ASSET_MESH_SELECTION_SEPARATOR);\n if (separatorIndex < 0) return null;\n const rootGameObjectId = value.slice(0, separatorIndex);\n const encodedSlotSelectionKey = value.slice(separatorIndex + EDITOR_SCENE_ASSET_MESH_SELECTION_SEPARATOR.length);\n if (!rootGameObjectId || !encodedSlotSelectionKey) return null;\n try {\n const slotSelectionKey = decodeURIComponent(encodedSlotSelectionKey).trim().replace(/^\\/+|\\/+$/g, '');\n return slotSelectionKey ? { rootGameObjectId, slotSelectionKey } : null;\n } catch {\n return null;\n }\n}\n\nexport function readEditorSceneMaterialBindingConfig<TBinding extends EditorSceneMaterialBinding = EditorSceneMaterialBinding>(\n value: unknown,\n): TBinding | undefined {\n const source = readEditorSceneRecord(value);\n if (!source) return undefined;\n const binding: EditorSceneMaterialBinding = {};\n const materialAssetId = readEditorSceneString(source.materialAssetId);\n if (materialAssetId) binding.materialAssetId = materialAssetId;\n if (source.override && typeof source.override === 'object' && !Array.isArray(source.override)) {\n binding.override = source.override as EditorSceneArtistMaterialProfile;\n }\n return Object.keys(binding).length > 0 ? binding as TBinding : undefined;\n}\n\nexport function splitEditorSceneFieldPath(path: string): string[] {\n const materialSlotBinding = splitMaterialSlotBindingFieldPath(path);\n return materialSlotBinding ?? path.split('.').filter(Boolean);\n}\n\nexport function splitMaterialSlotBindingFieldPath(path: string): string[] | null {\n const prefix = 'overrides.materialSlotBindings.';\n if (!path.startsWith(prefix)) return null;\n const remainder = path.slice(prefix.length);\n const overrideMarker = '.override.';\n const overrideMarkerIndex = remainder.lastIndexOf(overrideMarker);\n if (overrideMarkerIndex >= 0) {\n const slotId = remainder.slice(0, overrideMarkerIndex);\n const suffix = remainder.slice(overrideMarkerIndex + overrideMarker.length);\n if (!slotId || !suffix) return null;\n return ['overrides', 'materialSlotBindings', slotId, 'override', ...suffix.split('.').filter(Boolean)];\n }\n const materialAssetSuffix = '.materialAssetId';\n if (remainder.endsWith(materialAssetSuffix)) {\n const slotId = remainder.slice(0, -materialAssetSuffix.length);\n if (!slotId) return null;\n return ['overrides', 'materialSlotBindings', slotId, 'materialAssetId'];\n }\n return null;\n}\n\nexport function readEditorSceneAssetMaterialSlots(\n document: Pick<EditorSceneMaterialDocument, 'assets'>,\n gameObject: EditorSceneMaterialGameObject,\n): EditorSceneMaterialSlotDescriptor[] {\n const renderer = findEditorSceneModelRenderer(gameObject);\n if (!renderer) return [];\n const asset = document.assets.find((entry) => entry.id === renderer.assetId);\n const rawSlots = asset?.metadata?.materialSlots;\n if (!Array.isArray(rawSlots)) return [];\n const slots: EditorSceneMaterialSlotDescriptor[] = [];\n for (const rawSlot of rawSlots) {\n const slot = readEditorSceneMaterialSlotDescriptor(rawSlot);\n if (slot) slots.push(slot);\n }\n return slots;\n}\n\nexport function readEditorSceneMaterialSlotDescriptor(value: unknown): EditorSceneMaterialSlotDescriptor | null {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return null;\n const record = value as Record<string, unknown>;\n const ownerNodePath = normalizeEditorSceneMaterialSlotOwnerPath(\n typeof record.ownerNodePath === 'string' ? record.ownerNodePath : '',\n );\n const slotId = typeof record.slotId === 'string' && record.slotId.trim() ? record.slotId.trim() : '';\n if (!slotId || !ownerNodePath) return null;\n const label = typeof record.label === 'string' && record.label.trim()\n ? record.label.trim()\n : ownerNodePath;\n const nodeIndex = Number.isInteger(record.nodeIndex) ? record.nodeIndex as number : undefined;\n const nodeIndexPath = Array.isArray(record.nodeIndexPath)\n ? record.nodeIndexPath.filter(Number.isInteger)\n : undefined;\n const meshIndex = Number.isInteger(record.meshIndex) ? record.meshIndex as number : undefined;\n const primitiveIndex = Number.isInteger(record.primitiveIndex) ? record.primitiveIndex as number : undefined;\n const sourceMaterialIndex = Number.isInteger(record.sourceMaterialIndex) ? record.sourceMaterialIndex as number : undefined;\n const sourceMaterialIndices = Array.isArray(record.sourceMaterialIndices)\n ? record.sourceMaterialIndices.filter(Number.isInteger)\n : undefined;\n const materialName = typeof record.materialName === 'string' && record.materialName.trim()\n ? record.materialName.trim()\n : '';\n const materialNames = Array.isArray(record.materialNames)\n ? record.materialNames.filter((item): item is string => typeof item === 'string' && !!item.trim()).map(item => item.trim())\n : undefined;\n const triangleCount = typeof record.triangleCount === 'number' && Number.isFinite(record.triangleCount)\n ? record.triangleCount\n : undefined;\n const boundingBox = readEditorSceneMaterialSlotBoundingBox(record.boundingBox);\n const sourceMaterialProfiles = readEditorSceneSourceMaterialProfiles(record.sourceMaterialProfiles);\n return {\n slotId,\n ownerNodePath,\n label,\n ...(nodeIndex != null ? { nodeIndex } : {}),\n ...(nodeIndexPath && nodeIndexPath.length > 0 ? { nodeIndexPath } : {}),\n ...(meshIndex != null ? { meshIndex } : {}),\n ...(primitiveIndex != null ? { primitiveIndex } : {}),\n ...(sourceMaterialIndex != null ? { sourceMaterialIndex } : {}),\n ...(sourceMaterialIndices && sourceMaterialIndices.length > 0 ? { sourceMaterialIndices } : {}),\n ...(materialName ? { materialName } : {}),\n ...(materialNames && materialNames.length > 0 ? { materialNames } : {}),\n ...(triangleCount != null ? { triangleCount } : {}),\n ...(boundingBox ? { boundingBox } : {}),\n ...(sourceMaterialProfiles && sourceMaterialProfiles.length > 0 ? { sourceMaterialProfiles } : {}),\n };\n}\n\nfunction readEditorSceneMaterialSlotBoundingBox(value: unknown): EditorSceneMaterialSlotBoundingBox | undefined {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return undefined;\n const record = value as Record<string, unknown>;\n const min = readEditorSceneMaterialSlotVec3Tuple(record.min);\n const max = readEditorSceneMaterialSlotVec3Tuple(record.max);\n if (!min && !max) return undefined;\n return {\n ...(min ? { min } : {}),\n ...(max ? { max } : {}),\n };\n}\n\nfunction readEditorSceneMaterialSlotVec3Tuple(value: unknown): [number, number, number] | null {\n if (!Array.isArray(value) || value.length < 3) return null;\n const [x, y, z] = value;\n return typeof x === 'number' && Number.isFinite(x)\n && typeof y === 'number' && Number.isFinite(y)\n && typeof z === 'number' && Number.isFinite(z)\n ? [x, y, z]\n : null;\n}\n\nfunction readEditorSceneSourceMaterialProfiles(value: unknown): EditorSceneSourceMaterialProfile[] | undefined {\n if (!Array.isArray(value)) return undefined;\n const profiles = value\n .map(readEditorSceneSourceMaterialProfile)\n .filter((profile): profile is EditorSceneSourceMaterialProfile => !!profile);\n return profiles.length > 0 ? profiles : undefined;\n}\n\nfunction readEditorSceneSourceMaterialProfile(value: unknown): EditorSceneSourceMaterialProfile | null {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return null;\n const record = value as Record<string, unknown>;\n if (!Number.isInteger(record.sourceMaterialIndex)) return null;\n const materialName = typeof record.materialName === 'string' && record.materialName.trim()\n ? record.materialName.trim()\n : '';\n const profile = record.profile && typeof record.profile === 'object' && !Array.isArray(record.profile)\n ? record.profile as EditorSceneSourceMaterialProfile['profile']\n : undefined;\n const textureHints = readEditorSceneSourceMaterialTextureHints(record.textureHints);\n return {\n sourceMaterialIndex: record.sourceMaterialIndex as number,\n ...(materialName ? { materialName } : {}),\n ...(profile ? { profile } : {}),\n ...(textureHints && textureHints.length > 0 ? { textureHints } : {}),\n };\n}\n\nfunction readEditorSceneSourceMaterialTextureHints(value: unknown): EditorSceneSourceMaterialTextureHint[] | undefined {\n if (!Array.isArray(value)) return undefined;\n const hints = value\n .map(readEditorSceneSourceMaterialTextureHint)\n .filter((hint): hint is EditorSceneSourceMaterialTextureHint => !!hint);\n return hints.length > 0 ? hints : undefined;\n}\n\nfunction readEditorSceneSourceMaterialTextureHint(value: unknown): EditorSceneSourceMaterialTextureHint | null {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return null;\n const record = value as Record<string, unknown>;\n const profilePath = typeof record.profilePath === 'string' && record.profilePath.trim() ? record.profilePath.trim() : '';\n const reason = typeof record.reason === 'string' && record.reason.trim() ? record.reason.trim() : '';\n if (!profilePath || !reason) return null;\n return {\n profilePath,\n reason,\n ...(Number.isInteger(record.textureIndex) ? { textureIndex: record.textureIndex as number } : {}),\n ...(Number.isInteger(record.imageIndex) ? { imageIndex: record.imageIndex as number } : {}),\n ...(Number.isInteger(record.bufferView) ? { bufferView: record.bufferView as number } : {}),\n ...(typeof record.mimeType === 'string' && record.mimeType.trim() ? { mimeType: record.mimeType.trim() } : {}),\n ...(typeof record.uri === 'string' && record.uri.trim() ? { uri: record.uri.trim() } : {}),\n };\n}\n\nfunction readEditorSceneRecord(value: unknown): Record<string, unknown> | null {\n return value && typeof value === 'object' && !Array.isArray(value) ? value as Record<string, unknown> : null;\n}\n\nfunction readEditorSceneString(value: unknown): string | null {\n return typeof value === 'string' && value.trim() ? value.trim() : null;\n}\n\nfunction getEditorSceneMaterialUsageGameObjectLabel(\n gameObject: Pick<EditorSceneMaterialGameObject, 'id' | 'name'>,\n): string {\n return gameObject.name?.trim() || gameObject.id;\n}\n\nfunction readEditorSceneMaterialBindingAssetId(binding: EditorSceneMaterialBinding | null | undefined): string {\n return typeof binding?.materialAssetId === 'string' ? binding.materialAssetId.trim() : '';\n}\n\nfunction getEditorSceneMaterialUsageSlotLabel(\n slot: EditorSceneMaterialSlotDescriptor | null | undefined,\n fallback: string,\n): string {\n return slot?.label?.trim()\n || slot?.ownerNodePath?.trim()\n || slot?.slotId?.trim()\n || fallback;\n}\n"]}
1
+ {"version":3,"file":"binding.js","sourceRoot":"","sources":["../../src/material-binding/binding.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,4BAA4B,GAC7B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,4CAA4C,EAC5C,yCAAyC,GAC1C,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,kCAAkC,EAClC,qCAAqC,GACtC,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,mCAAmC,GACpC,MAAM,WAAW,CAAC;AA2BnB,MAAM,CAAC,MAAM,2CAA2C,GAAG,eAAe,CAAC;AAE3E,MAAM,UAAU,4BAA4B,CAG1C,QAAmG,EACnG,eAAuB;IAEvB,IAAI,CAAC,eAAe;QAAE,OAAO,IAAI,CAAC;IAClC,OAAO,QAAQ,CAAC,KAAK,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,KAAK,eAAe,CAAC,IAAI,IAAI,CAAC;AAC9G,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,QAAoD,EACpD,eAAuB;IAEvB,OAAO,CAAC,CAAC,4BAA4B,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,uCAAuC,CAGrD,OAAsD,EACtD,aAAgD;IAEhD,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO;YACL,KAAK,EAAE,OAAO;YACd,eAAe,EAAE,aAAa,CAAC,EAAE;YACjC,aAAa;SACd,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,EAAE,eAAe,EAAE,CAAC;QAC7B,OAAO;YACL,KAAK,EAAE,eAAe;YACtB,eAAe,EAAE,OAAO,CAAC,eAAe;SACzC,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,EAAE,QAAQ;QAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;IACpD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,yCAAyC,CACvD,QAA+D,EAC/D,eAAuB;IAEvB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,KAAK,MAAM,KAAK,IAAI,qCAAqC,CAAC,QAAQ,EAAE,eAAe,CAAC,EAAE,CAAC;QACrF,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,qCAAqC,CACnD,QAA+D,EAC/D,eAAuB;IAEvB,MAAM,qBAAqB,GAAG,eAAe,CAAC,IAAI,EAAE,CAAC;IACrD,IAAI,CAAC,qBAAqB;QAAE,OAAO,EAAE,CAAC;IACtC,OAAO,yCAAyC,CAAC,QAAQ,CAAC;SACvD,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,KAAK,qBAAqB,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,2CAA2C,CACzD,QAA+D,EAC/D,eAAuB,EACvB,IAA4C;IAE5C,MAAM,yBAAyB,GAAG,eAAe,CAAC,IAAI,EAAE,CAAC;IACzD,MAAM,MAAM,GAAG,qCAAqC,CAAC,QAAQ,EAAE,yBAAyB,CAAC,CAAC;IAC1F,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC;IACjC,OAAO;QACL,eAAe,EAAE,yBAAyB;QAC1C,KAAK,EAAE;YACL,KAAK,EAAE,UAAU;YACjB,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;SACnD;QACD,UAAU;QACV,IAAI,EAAE,UAAU,GAAG,CAAC;QACpB,MAAM,EAAE,UAAU,GAAG,CAAC;QACtB,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;YACT,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC;YAC7C,eAAe,EAAE,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC;YAClD,oBAAoB,EAAE,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC;SAC7D,CAAC,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,yCAAyC,CACvD,QAA+D;IAE/D,MAAM,MAAM,GAAoC,EAAE,CAAC;IACnD,KAAK,MAAM,UAAU,IAAI,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QACpD,MAAM,eAAe,GAAG,0CAA0C,CAAC,UAAU,CAAC,CAAC;QAC/E,MAAM,mBAAmB,GAAG,qCAAqC,CAAC,UAAU,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;QACzG,IAAI,mBAAmB,EAAE,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,MAAM;gBACZ,YAAY,EAAE,UAAU,CAAC,EAAE;gBAC3B,cAAc,EAAE,UAAU,CAAC,IAAI;gBAC/B,eAAe,EAAE,mBAAmB;gBACpC,WAAW,EAAE,2CAA2C;gBACxD,KAAK,EAAE,eAAe;aACvB,CAAC,CAAC;QACL,CAAC;QACD,MAAM,aAAa,GAAG,oCAAoC,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACjF,MAAM,qBAAqB,GAAG,IAAI,GAAG,CACnC,aAAa;aACV,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;aAC7B,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAO,EAAE,IAAI,CAAC,CAAC,CACrC,CAAC;QACF,MAAM,wBAAwB,GAAG,IAAI,GAAG,CACtC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,yCAAyC,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC,CAAC,CACjG,CAAC;QACF,MAAM,oBAAoB,GAAG,UAAU,CAAC,SAAS,EAAE,oBAAoB,IAAI,EAAE,CAAC;QAC9E,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE,CAAC;YACrE,MAAM,mBAAmB,GAAG,qCAAqC,CAAC,OAAO,CAAC,CAAC;YAC3E,IAAI,CAAC,mBAAmB;gBAAE,SAAS;YACnC,MAAM,IAAI,GAAG,qBAAqB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC/C,MAAM,SAAS,GAAG,oCAAoC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACrE,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,MAAM;gBACZ,YAAY,EAAE,UAAU,CAAC,EAAE;gBAC3B,cAAc,EAAE,UAAU,CAAC,IAAI;gBAC/B,eAAe,EAAE,mBAAmB;gBACpC,WAAW,EAAE,kCAAkC,MAAM,kBAAkB;gBACvE,KAAK,EAAE,GAAG,eAAe,MAAM,SAAS,EAAE;gBAC1C,MAAM;gBACN,aAAa,EAAE,IAAI,EAAE,aAAa,IAAI,MAAM;aAC7C,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;QACpC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE,SAAS;QACvD,uCAAuC,CAAC,MAAM,EAAE;YAC9C,OAAO,EAAE,KAAK,CAAC,EAAE;YACjB,SAAS,EAAE,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,EAAE;YACxC,IAAI,EAAE,UAAU,KAAK,CAAC,EAAE,mBAAmB;YAC3C,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,SAAS;SAClC,CAAC,CAAC;QACH,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;YAC5C,uCAAuC,CAAC,MAAM,EAAE;gBAC9C,OAAO,EAAE,GAAG,KAAK,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,EAAE;gBACjC,SAAS,EAAE,GAAG,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,EAAE;gBACvE,IAAI,EAAE,UAAU,KAAK,CAAC,EAAE,iBAAiB,IAAI,CAAC,EAAE,YAAY;gBAC5D,SAAS,EAAE,IAAI,CAAC,SAAS;aAC1B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,uCAAuC,CAC9C,MAAuC,EACvC,KAKC;IAED,MAAM,mBAAmB,GAAG,qCAAqC,CAAC,KAAK,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;IACpG,IAAI,mBAAmB,EAAE,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,MAAM;YACZ,YAAY,EAAE,KAAK,CAAC,OAAO;YAC3B,cAAc,EAAE,KAAK,CAAC,SAAS;YAC/B,eAAe,EAAE,mBAAmB;YACpC,WAAW,EAAE,GAAG,KAAK,CAAC,IAAI,kCAAkC;YAC5D,KAAK,EAAE,KAAK,CAAC,SAAS;SACvB,CAAC,CAAC;IACL,CAAC;IACD,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,oBAAoB,IAAI,EAAE,CAAC,EAAE,CAAC;QAC5F,MAAM,eAAe,GAAG,qCAAqC,CAAC,OAAO,CAAC,CAAC;QACvE,IAAI,CAAC,eAAe;YAAE,SAAS;QAC/B,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,MAAM;YACZ,YAAY,EAAE,KAAK,CAAC,OAAO;YAC3B,cAAc,EAAE,KAAK,CAAC,SAAS;YAC/B,eAAe;YACf,WAAW,EAAE,GAAG,KAAK,CAAC,IAAI,yBAAyB,MAAM,kBAAkB;YAC3E,KAAK,EAAE,GAAG,KAAK,CAAC,SAAS,MAAM,MAAM,EAAE;YACvC,MAAM;YACN,aAAa,EAAE,MAAM;SACtB,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,MAAM,UAAU,wCAAwC,CACtD,QAA+D;IAE/D,MAAM,gBAAgB,GAAG,CAAC,GAAG,IAAI,GAAG,CAClC,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,IAAI,EAAE,CAAC;aAClC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC;aAC9C,MAAM,CAAC,CAAC,eAAe,EAA6B,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,CAC7E,CAAC,CAAC;IACH,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC;IACrD,MAAM,UAAU,GAAG,yCAAyC,CAAC,QAAQ,CAAC,CAAC;IACvE,MAAM,iBAAiB,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;IACrG,MAAM,0BAA0B,GAAG,IAAI,GAAG,EAA2C,CAAC;IACtF,KAAK,MAAM,KAAK,IAAI,iBAAiB,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,0BAA0B,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;QAC3E,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnB,0BAA0B,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;IAChE,CAAC;IACD,MAAM,MAAM,GAAG,CAAC,GAAG,0BAA0B,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3F,IAAI,EAAE,wBAAiC;QACvC,eAAe;QACf,MAAM;KACP,CAAC,CAAC,CAAC;IACJ,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;QACvB,gBAAgB;QAChB,UAAU;QACV,uBAAuB,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC;QACnE,iBAAiB;QACjB,MAAM;KACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oCAAoC,CAClD,QAAqD,EACrD,UAAyC;IAEzC,MAAM,KAAK,GAAG,IAAI,GAAG,EAA6C,CAAC;IACnE,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;IACzC,KAAK,MAAM,IAAI,IAAI,iCAAiC,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,CAAC;QAC3E,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;QACnD,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACzC,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,oBAAoB,IAAI,EAAE,CAAC,EAAE,CAAC;QACnF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9F,CAAC;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;AAC1G,CAAC;AAED,MAAM,UAAU,6BAA6B,CAC3C,QAAqD,EACrD,UAAyC;IAEzC,OAAO,iCAAiC,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,kCAAkC,CAGhD,UAAuB,EACvB,IAAuC,EACvC,eAAuB;IAEvB,MAAM,IAAI,GAAG,eAAe,CAAC,UAAU,CAAgB,CAAC;IACxD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;IACtC,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAC9B,IAAI,CAAC,SAAS,CAAC,oBAAoB,GAAG,IAAI,CAAC,SAAS,CAAC,oBAAoB,IAAI,EAAE,CAAC;IAChF,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG;QACjD,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC3D,eAAe;KAChB,CAAC;IACF,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,2CAA2C,CAAC,IAA8F;IACxJ,IAAI,IAAI,CAAC,qBAAqB,EAAE,MAAM,EAAE,CAAC;QACvC,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9G,CAAC;IACD,MAAM,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC;IACrD,OAAO,OAAO,mBAAmB,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACvH,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,IAAyE;IACtH,OAAO,IAAI,CAAC,MAAM,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,qCAAqC,CAAC,IAAyE;IAC7H,OAAO,kCAAkC,IAAI,CAAC,MAAM,kBAAkB,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,iCAAiC,CAC/C,UAA4D,EAC5D,IAAyE;IAEzE,OAAO,UAAU,CAAC,SAAS,EAAE,oBAAoB,EAAE,CAAC,IAAI,CAAC,MAAM,CAAyB,CAAC;AAC3F,CAAC;AAED,MAAM,UAAU,qCAAqC,CACnD,gBAAwB,EACxB,gBAAwB;IAExB,OAAO,GAAG,gBAAgB,GAAG,2CAA2C,GAAG,kBAAkB,CAAC,gBAAgB,CAAC,EAAE,CAAC;AACpH,CAAC;AAED,MAAM,UAAU,oCAAoC,CAAC,KAAa;IAChE,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,2CAA2C,CAAC,CAAC;IAClF,IAAI,cAAc,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACpC,MAAM,gBAAgB,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;IACxD,MAAM,uBAAuB,GAAG,KAAK,CAAC,KAAK,CAAC,cAAc,GAAG,2CAA2C,CAAC,MAAM,CAAC,CAAC;IACjH,IAAI,CAAC,gBAAgB,IAAI,CAAC,uBAAuB;QAAE,OAAO,IAAI,CAAC;IAC/D,IAAI,CAAC;QACH,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,uBAAuB,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QACtG,OAAO,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,oCAAoC,CAClD,KAAc;IAEd,MAAM,MAAM,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAC5C,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC9B,MAAM,OAAO,GAA+B,EAAE,CAAC;IAC/C,MAAM,eAAe,GAAG,qBAAqB,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;IACtE,IAAI,eAAe;QAAE,OAAO,CAAC,eAAe,GAAG,eAAe,CAAC;IAC/D,IAAI,MAAM,CAAC,QAAQ,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9F,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC,QAA4C,CAAC;IACzE,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAmB,CAAC,CAAC,CAAC,SAAS,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,IAAY;IACpD,MAAM,mBAAmB,GAAG,iCAAiC,CAAC,IAAI,CAAC,CAAC;IACpE,OAAO,mBAAmB,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,iCAAiC,CAAC,IAAY;IAC5D,MAAM,MAAM,GAAG,iCAAiC,CAAC;IACjD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,cAAc,GAAG,YAAY,CAAC;IACpC,MAAM,mBAAmB,GAAG,SAAS,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;IAClE,IAAI,mBAAmB,IAAI,CAAC,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,mBAAmB,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;QAC5E,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACpC,OAAO,CAAC,WAAW,EAAE,sBAAsB,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IACzG,CAAC;IACD,MAAM,mBAAmB,GAAG,kBAAkB,CAAC;IAC/C,IAAI,SAAS,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAC/D,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACzB,OAAO,CAAC,WAAW,EAAE,sBAAsB,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,iCAAiC,CAC/C,QAAqD,EACrD,UAAyC;IAEzC,MAAM,QAAQ,GAAG,4BAA4B,CAAC,UAAU,CAAC,CAAC;IAC1D,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,CAAC;IACzB,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC7E,MAAM,QAAQ,GAAG,KAAK,EAAE,QAAQ,EAAE,aAAa,CAAC;IAChD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;QAAE,OAAO,EAAE,CAAC;IACxC,MAAM,KAAK,GAAwC,EAAE,CAAC;IACtD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,qCAAqC,CAAC,OAAO,CAAC,CAAC;QAC5D,IAAI,IAAI;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,qCAAqC,CAAC,KAAc;IAClE,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7E,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,MAAM,aAAa,GAAG,yCAAyC,CAC7D,OAAO,MAAM,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CACrE,CAAC;IACF,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACrG,IAAI,CAAC,MAAM,IAAI,CAAC,aAAa;QAAE,OAAO,IAAI,CAAC;IAC3C,MAAM,KAAK,GAAG,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE;QACnE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE;QACrB,CAAC,CAAC,aAAa,CAAC;IAClB,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAmB,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9F,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC;QACvD,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;QAC/C,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAmB,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9F,MAAM,cAAc,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,cAAwB,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7G,MAAM,mBAAmB,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,mBAA6B,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5H,MAAM,qBAAqB,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,qBAAqB,CAAC;QACvE,CAAC,CAAC,MAAM,CAAC,qBAAqB,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;QACvD,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,YAAY,GAAG,OAAO,MAAM,CAAC,YAAY,KAAK,QAAQ,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE;QACxF,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE;QAC5B,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC;QACvD,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC3H,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,aAAa,GAAG,OAAO,MAAM,CAAC,aAAa,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC;QACrG,CAAC,CAAC,MAAM,CAAC,aAAa;QACtB,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,WAAW,GAAG,sCAAsC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAC/E,MAAM,sBAAsB,GAAG,qCAAqC,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;IACpG,OAAO;QACL,MAAM;QACN,aAAa;QACb,KAAK;QACL,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3C,GAAG,CAAC,aAAa,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3C,GAAG,CAAC,cAAc,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,GAAG,CAAC,mBAAmB,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,GAAG,CAAC,qBAAqB,IAAI,qBAAqB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,qBAAqB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/F,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,GAAG,CAAC,aAAa,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,GAAG,CAAC,aAAa,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,GAAG,CAAC,sBAAsB,IAAI,sBAAsB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,sBAAsB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACnG,CAAC;AACJ,CAAC;AAED,SAAS,sCAAsC,CAAC,KAAc;IAC5D,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAClF,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,MAAM,GAAG,GAAG,oCAAoC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC7D,MAAM,GAAG,GAAG,oCAAoC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC7D,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IACnC,OAAO;QACL,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACxB,CAAC;AACJ,CAAC;AAED,SAAS,oCAAoC,CAAC,KAAc;IAC1D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3D,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC;IACxB,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;WAC7C,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;WAC3C,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACX,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED,SAAS,qCAAqC,CAAC,KAAc;IAC3D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5C,MAAM,QAAQ,GAAG,KAAK;SACnB,GAAG,CAAC,oCAAoC,CAAC;SACzC,MAAM,CAAC,CAAC,OAAO,EAA+C,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC/E,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AACpD,CAAC;AAED,SAAS,oCAAoC,CAAC,KAAc;IAC1D,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7E,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,mBAAmB,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/D,MAAM,YAAY,GAAG,OAAO,MAAM,CAAC,YAAY,KAAK,QAAQ,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE;QACxF,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE;QAC5B,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;QACpG,CAAC,CAAC,MAAM,CAAC,OAAsD;QAC/D,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,YAAY,GAAG,yCAAyC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IACpF,OAAO;QACL,mBAAmB,EAAE,MAAM,CAAC,mBAA6B;QACzD,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/B,GAAG,CAAC,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACrE,CAAC;AACJ,CAAC;AAED,SAAS,yCAAyC,CAAC,KAAc;IAC/D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5C,MAAM,KAAK,GAAG,KAAK;SAChB,GAAG,CAAC,wCAAwC,CAAC;SAC7C,MAAM,CAAC,CAAC,IAAI,EAAgD,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC1E,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9C,CAAC;AAED,SAAS,wCAAwC,CAAC,KAAc;IAC9D,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7E,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,MAAM,WAAW,GAAG,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ,IAAI,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACzH,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACrG,IAAI,CAAC,WAAW,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzC,OAAO;QACL,WAAW;QACX,MAAM;QACN,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,YAAsB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjG,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAoB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3F,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAoB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3F,GAAG,CAAC,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9G,GAAG,CAAC,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC3F,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAc;IAC3C,OAAO,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAgC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/G,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAc;IAC3C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACzE,CAAC;AAED,SAAS,0CAA0C,CACjD,UAA8D;IAE9D,OAAO,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,UAAU,CAAC,EAAE,CAAC;AAClD,CAAC;AAED,SAAS,qCAAqC,CAAC,OAAsD;IACnG,OAAO,OAAO,OAAO,EAAE,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC5F,CAAC;AAED,SAAS,oCAAoC,CAC3C,IAA0D,EAC1D,QAAgB;IAEhB,OAAO,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;WACrB,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE;WAC3B,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;WACpB,QAAQ,CAAC;AAChB,CAAC;AAcD,MAAM,0BAA0B;IAI9B,YAAY,QAA+D;QAH1D,iBAAY,GAAG,IAAI,GAAG,EAA2C,CAAC;QAClE,cAAS,GAAG,IAAI,GAAG,EAA2C,CAAC;QAG9E,KAAK,MAAM,KAAK,IAAI,yCAAyC,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxE,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;YAC1E,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC3B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC;YAC7D,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;YACjE,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACxB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED,WAAW,CAAC,eAAuB;QACjC,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;IAC7D,CAAC;IAED,QAAQ,CAAC,OAAe;QACtB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IAC3C,CAAC;CACF;AAED,MAAM,0BAA0B,GAAG,IAAI,OAAO,EAAsC,CAAC;AAErF,SAAS,2BAA2B,CAClC,QAA+D;IAE/D,IAAI,KAAK,GAAG,0BAA0B,CAAC,GAAG,CAAC,QAAkB,CAAC,CAAC;IAC/D,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,KAAK,GAAG,IAAI,0BAA0B,CAAC,QAAQ,CAAC,CAAC;QACjD,0BAA0B,CAAC,GAAG,CAAC,QAAkB,EAAE,KAAK,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,qCAAqC,CAC5C,aAA0E;IAE1E,OAAO,aAAa,EAAE,MAAM,EAAE,MAAM,CAAC;AACvC,CAAC;AAED,SAAS,mCAAmC,CAC1C,aAAuE,EACvE,IAAyC;IAEzC,MAAM,MAAM,GAAG,qCAAqC,CAAC,aAAa,CAAC,CAAC;IACpE,IAAI,MAAM,KAAK,aAAa;QAAE,OAAO,IAAI,CAAC,eAAe,CAAC;IAC1D,IAAI,MAAM,KAAK,kBAAkB;QAAE,OAAO,IAAI,CAAC,uBAAuB,CAAC;IACvE,OAAO,aAAa,CAAC,IAAI,IAAI,aAAa,CAAC,EAAE,CAAC;AAChD,CAAC;AAED,SAAS,mCAAmC,CAC1C,aAA0E,EAC1E,IAAyC;IAEzC,MAAM,MAAM,GAAG,qCAAqC,CAAC,aAAa,CAAC,CAAC;IACpE,IAAI,MAAM,KAAK,aAAa;QAAE,OAAO,IAAI,CAAC,mBAAmB,CAAC;IAC9D,IAAI,MAAM,KAAK,kBAAkB;QAAE,OAAO,IAAI,CAAC,2BAA2B,CAAC;IAC3E,OAAO,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,0CAA0C,CAGjD,KAAkD,EAClD,UAA6C;IAE7C,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,IAAI,IAAI,CAAC;IAChD,MAAM,gBAAgB,GAAG,YAAY;QACnC,CAAC,CAAC,mCAAmC,CAAC,KAAK,CAAC,QAAQ,EAAE,YAAY,CAAC,EAAE,EAAE,KAAK,CAAC,aAAa,EAAE,UAAU,CAAC;QACvG,CAAC,CAAC,IAAI,CAAC;IACT,MAAM,eAAe,GAAG,YAAY;QAClC,CAAC,CAAC,mCAAmC,CAAC,YAAY,EAAE,KAAK,CAAC,WAAW,CAAC;QACtE,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;IAClG,MAAM,WAAW,GAAG,gBAAgB;QAClC,CAAC,CAAC,gCAAgC,CAAC,eAAe,EAAE,gBAAgB,CAAC;QACrE,CAAC,CAAC,eAAe,CAAC;IACpB,OAAO;QACL,UAAU,EAAE,UAAU;QACtB,WAAW,EAAE,KAAK,CAAC,UAAU,CAAC,mBAAmB;QACjD,WAAW,EAAE,KAAK,CAAC,UAAU,CAAC,OAAO;QACrC,eAAe,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE;QACxE,eAAe,EAAE,YAAY,CAAC,CAAC,CAAC,4CAA4C,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;QAClG,iBAAiB,EAAE,YAAY;YAC7B,CAAC,CAAC,uCAAuC,CAAC,KAAK,CAAC,UAAU,CAAC,yBAAyB,EAAE,gBAAgB,CAAC;YACvG,CAAC,CAAC,EAAE;QACN,WAAW,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW;QACrG,YAAY,EAAE,YAAY;YACxB,CAAC,CAAC,mCAAmC,CAAC,YAAY,EAAE,KAAK,CAAC,WAAW,CAAC;YACtE,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC;QAC5E,WAAW;QACX,GAAG,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,gBAAgB,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3F,GAAG,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,sBAAsB,EAAE,gBAAgB,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1G,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,cAAc,EAAE,YAAY,CAAC,CAAC,CAAC,qCAAqC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;QACtG,UAAU,EAAE,CAAC;gBACX,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW;gBACnC,KAAK,EAAE,EAAE;gBACT,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,cAAc;aACtC,EAAE,GAAG,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE;gBAC7C,MAAM,SAAS,GAAG,mCAAmC,CACnD,KAAK,CAAC,QAAQ,EACd,aAAa,CAAC,EAAE,EAChB,KAAK,CAAC,aAAa,EACnB,UAAU,CACX,CAAC;gBACF,OAAO;oBACL,KAAK,EAAE,mCAAmC,CAAC,aAAa,EAAE,KAAK,CAAC,WAAW,CAAC;oBAC5E,KAAK,EAAE,aAAa,CAAC,EAAE;oBACvB,IAAI,EAAE,gCAAgC,CACpC,mCAAmC,CAAC,aAAa,EAAE,KAAK,CAAC,WAAW,CAAC,EACrE,SAAS,CACV;oBACD,IAAI,EAAE,UAAmB;oBACzB,OAAO,EAAE,qCAAqC,CAAC,aAAa,CAAC,OAAO,CAAC;oBACrE,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACtE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACpC,CAAC;YACJ,CAAC,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC;AAED,SAAS,mCAAmC,CAC1C,QAAkF,EAClF,eAAuB,EACvB,IAAuD,EACvD,UAA6C;IAE7C,IAAI,CAAC,QAAQ,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAC1C,MAAM,yBAAyB,GAAG,eAAe,CAAC,IAAI,EAAE,CAAC;IACzD,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,yBAAyB,CAAC,CAAC;IACjE,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC;IACjC,OAAO;QACL,eAAe,EAAE,yBAAyB;QAC1C,KAAK,EAAE;YACL,KAAK,EAAE,UAAU;YACjB,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;SACnD;QACD,UAAU;QACV,IAAI,EAAE,UAAU,GAAG,CAAC;QACpB,MAAM,EAAE,UAAU,GAAG,CAAC;QACtB,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;YACT,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC;YAC7C,eAAe,EAAE,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC;YAClD,oBAAoB,EAAE,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC;SAC7D,CAAC,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;AACJ,CAAC;AAED,SAAS,gCAAgC,CACvC,QAAgB,EAChB,SAAuD;IAEvD,OAAO,CAAC,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,uCAAuC,CAC9C,WAAmB,EACnB,SAAuD;IAEvD,OAAO,CAAC,WAAW,EAAE,SAAS,EAAE,oBAAoB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACpF,CAAC;AAED,SAAS,uCAAuC,CAG9C,QAA8G,EAC9G,UAAsC;IAEtC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE;QAC/D,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QACxD,OAAO;YACL,EAAE,EAAE,YAAY,aAAa,CAAC,EAAE,EAAE;YAClC,OAAO,EAAE,aAAa,CAAC,EAAE;YACzB,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,aAAa,CAAC,IAAI,IAAI,aAAa,CAAC,EAAE;YAC7C,IAAI,EAAE,kCAAkC,CAAC,aAAa,CAAC,OAAO,EAAE,aAAa,CAAC,EAAE,CAAC;YACjF,OAAO,EAAE,qCAAqC,CAAC,aAAa,CAAC,OAAO,CAAC;YACrE,QAAQ,EAAE;gBACR,EAAE,EAAE,aAAa,CAAC,EAAE;gBACpB,IAAI,EAAE,aAAa,CAAC,IAAI,IAAI,aAAa,CAAC,EAAE;gBAC5C,YAAY,EAAE,mCAAmC,CAAC,aAAa,CAAC;gBAChE,QAAQ,EAAE,aAAa,CAAC,MAAM,EAAE,QAAQ,KAAK,IAAI;uBAC5C,qCAAqC,CAAC,aAAa,CAAC,IAAI,IAAI;gBACjE,KAAK,EAAE;oBACL,KAAK,EAAE,MAAM,CAAC,MAAM;oBACpB,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;iBACnD;gBACD,OAAO,EAAE,eAAe,CAAC,aAAa,CAAC,OAAO,IAAI,EAAE,CAA2C;aAChG;YACD,SAAS,EAAE,KAAK;SACjB,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,wBAAwB,GAAG;IAC/B,gBAAgB,CACd,QAA+D;QAE/D,OAAO,IAAI,0BAA0B,CAAC,QAAQ,CAAC,CAAC;IAClD,CAAC;IACD,mBAAmB,EAAE,2BAA2B;IAChD,0BAA0B,EAAE,0CAA0C;IACtE,uBAAuB,EAAE,uCAAuC;CACjE,CAAC;AAEF,eAAe,wBAAwB,CAAC","sourcesContent":["import {\n findEditorSceneModelRenderer,\n} from '../document/index';\nimport {\n createEditorSceneDuplicateMaterialAssetValue,\n normalizeEditorSceneMaterialSlotOwnerPath,\n} from './paths';\nimport {\n createEditorSceneMaterialAssetMeta,\n createEditorSceneMaterialAssetPreview,\n} from './preview';\nimport {\n resolveEditorSceneMaterialAssetKind,\n} from './profile';\nimport type {\n EditorSceneMaterialAsset,\n EditorSceneMaterialAssetDisplayText,\n EditorSceneMaterialAssetOwnershipText,\n EditorSceneMaterialAssetOwnershipView,\n EditorSceneArtistMaterialProfile,\n EditorSceneMaterialBinding,\n EditorSceneMaterialAssetIntegrityResult,\n EditorSceneMaterialAssetUsage,\n EditorSceneMaterialBindingSummary,\n EditorSceneMaterialBrowserAssetItem,\n EditorSceneMaterialDocument,\n EditorSceneMaterialGameObject,\n EditorSceneMaterialOverrides,\n EditorSceneMaterialPickerControlOptions,\n EditorSceneMaterialPickerText,\n EditorSceneMaterialSlotDescriptor,\n EditorSceneSourceMaterialProfile,\n EditorSceneSourceMaterialTextureHint,\n} from './types';\n\ntype EditorSceneMaterialSlotBoundingBox = {\n min?: [number, number, number];\n max?: [number, number, number];\n};\n\nexport const EDITOR_SCENE_ASSET_MESH_SELECTION_SEPARATOR = '::assetMesh::';\n\nexport function findEditorSceneMaterialAsset<\n TMaterialAsset extends EditorSceneMaterialAsset = EditorSceneMaterialAsset,\n>(\n document: Pick<EditorSceneMaterialDocument<EditorSceneMaterialGameObject, TMaterialAsset>, 'scene'>,\n materialAssetId: string,\n): TMaterialAsset | null {\n if (!materialAssetId) return null;\n return document.scene.materialAssets?.find((materialAsset) => materialAsset.id === materialAssetId) ?? null;\n}\n\nexport function hasEditorSceneMaterialAsset(\n document: Pick<EditorSceneMaterialDocument, 'scene'>,\n materialAssetId: string,\n): boolean {\n return !!findEditorSceneMaterialAsset(document, materialAssetId);\n}\n\nexport function createEditorSceneMaterialBindingSummary<\n TMaterialAsset extends EditorSceneMaterialAsset = EditorSceneMaterialAsset,\n>(\n binding: EditorSceneMaterialBinding | null | undefined,\n materialAsset: TMaterialAsset | null | undefined,\n): EditorSceneMaterialBindingSummary<TMaterialAsset> {\n if (materialAsset) {\n return {\n state: 'asset',\n materialAssetId: materialAsset.id,\n materialAsset,\n };\n }\n if (binding?.materialAssetId) {\n return {\n state: 'missing-asset',\n materialAssetId: binding.materialAssetId,\n };\n }\n if (binding?.override) return { state: 'override' };\n return { state: 'inherit' };\n}\n\nexport function collectEditorSceneMaterialAssetBindingIds(\n document: Pick<EditorSceneMaterialDocument, 'scene' | 'assets'>,\n materialAssetId: string,\n): string[] {\n const ids = new Set<string>();\n for (const usage of collectEditorSceneMaterialAssetUsages(document, materialAssetId)) {\n ids.add(usage.gameObjectId);\n }\n return [...ids];\n}\n\nexport function collectEditorSceneMaterialAssetUsages(\n document: Pick<EditorSceneMaterialDocument, 'scene' | 'assets'>,\n materialAssetId: string,\n): EditorSceneMaterialAssetUsage[] {\n const targetMaterialAssetId = materialAssetId.trim();\n if (!targetMaterialAssetId) return [];\n return collectEditorSceneMaterialAssetReferences(document)\n .filter(usage => usage.materialAssetId === targetMaterialAssetId);\n}\n\nexport function createEditorSceneMaterialAssetOwnershipView(\n document: Pick<EditorSceneMaterialDocument, 'scene' | 'assets'>,\n materialAssetId: string,\n text?: EditorSceneMaterialAssetOwnershipText,\n): EditorSceneMaterialAssetOwnershipView {\n const normalizedMaterialAssetId = materialAssetId.trim();\n const usages = collectEditorSceneMaterialAssetUsages(document, normalizedMaterialAssetId);\n const usageCount = usages.length;\n return {\n materialAssetId: normalizedMaterialAssetId,\n usage: {\n count: usageCount,\n items: usages.map(usage => structuredClone(usage)),\n },\n usageCount,\n used: usageCount > 0,\n shared: usageCount > 1,\n ...(text ? {\n usageLabel: text.formatUsageCount(usageCount),\n editImpactLabel: text.formatEditImpact(usageCount),\n duplicateImpactLabel: text.formatDuplicateImpact(usageCount),\n } : {}),\n };\n}\n\nexport function collectEditorSceneMaterialAssetReferences(\n document: Pick<EditorSceneMaterialDocument, 'scene' | 'assets'>,\n): EditorSceneMaterialAssetUsage[] {\n const usages: EditorSceneMaterialAssetUsage[] = [];\n for (const gameObject of document.scene.gameObjects) {\n const gameObjectLabel = getEditorSceneMaterialUsageGameObjectLabel(gameObject);\n const rootMaterialAssetId = readEditorSceneMaterialBindingAssetId(gameObject.overrides?.materialBinding);\n if (rootMaterialAssetId) {\n usages.push({\n kind: 'root',\n gameObjectId: gameObject.id,\n gameObjectName: gameObject.name,\n materialAssetId: rootMaterialAssetId,\n bindingPath: 'overrides.materialBinding.materialAssetId',\n label: gameObjectLabel,\n });\n }\n const materialSlots = collectEditorSceneChildMaterialSlots(document, gameObject);\n const materialSlotsBySlotId = new Map(\n materialSlots\n .filter(slot => !!slot.slotId)\n .map(slot => [slot.slotId!, slot]),\n );\n const materialSlotsByOwnerPath = new Map(\n materialSlots.map(slot => [normalizeEditorSceneMaterialSlotOwnerPath(slot.ownerNodePath), slot]),\n );\n const materialSlotBindings = gameObject.overrides?.materialSlotBindings ?? {};\n for (const [slotId, binding] of Object.entries(materialSlotBindings)) {\n const slotMaterialAssetId = readEditorSceneMaterialBindingAssetId(binding);\n if (!slotMaterialAssetId) continue;\n const slot = materialSlotsBySlotId.get(slotId);\n const slotLabel = getEditorSceneMaterialUsageSlotLabel(slot, slotId);\n usages.push({\n kind: 'slot',\n gameObjectId: gameObject.id,\n gameObjectName: gameObject.name,\n materialAssetId: slotMaterialAssetId,\n bindingPath: `overrides.materialSlotBindings.${slotId}.materialAssetId`,\n label: `${gameObjectLabel} / ${slotLabel}`,\n slotId,\n ownerNodePath: slot?.ownerNodePath ?? slotId,\n });\n }\n }\n for (const asset of document.assets) {\n if (asset.type !== 'prefab' || !asset.prefab) continue;\n collectPrefabMaterialOverrideReferences(usages, {\n ownerId: asset.id,\n ownerName: asset.displayName ?? asset.id,\n path: `assets.${asset.id}.prefab.overrides`,\n overrides: asset.prefab.overrides,\n });\n for (const node of asset.prefab.nodes ?? []) {\n collectPrefabMaterialOverrideReferences(usages, {\n ownerId: `${asset.id}:${node.id}`,\n ownerName: `${asset.displayName ?? asset.id} / ${node.name ?? node.id}`,\n path: `assets.${asset.id}.prefab.nodes.${node.id}.overrides`,\n overrides: node.overrides,\n });\n }\n }\n return usages;\n}\n\nfunction collectPrefabMaterialOverrideReferences(\n usages: EditorSceneMaterialAssetUsage[],\n input: {\n ownerId: string;\n ownerName: string;\n path: string;\n overrides: EditorSceneMaterialOverrides | undefined;\n },\n): void {\n const rootMaterialAssetId = readEditorSceneMaterialBindingAssetId(input.overrides?.materialBinding);\n if (rootMaterialAssetId) {\n usages.push({\n kind: 'root',\n gameObjectId: input.ownerId,\n gameObjectName: input.ownerName,\n materialAssetId: rootMaterialAssetId,\n bindingPath: `${input.path}.materialBinding.materialAssetId`,\n label: input.ownerName,\n });\n }\n for (const [slotId, binding] of Object.entries(input.overrides?.materialSlotBindings ?? {})) {\n const materialAssetId = readEditorSceneMaterialBindingAssetId(binding);\n if (!materialAssetId) continue;\n usages.push({\n kind: 'slot',\n gameObjectId: input.ownerId,\n gameObjectName: input.ownerName,\n materialAssetId,\n bindingPath: `${input.path}.materialSlotBindings.${slotId}.materialAssetId`,\n label: `${input.ownerName} / ${slotId}`,\n slotId,\n ownerNodePath: slotId,\n });\n }\n}\n\nexport function resolveEditorSceneMaterialAssetIntegrity(\n document: Pick<EditorSceneMaterialDocument, 'scene' | 'assets'>,\n): EditorSceneMaterialAssetIntegrityResult {\n const materialAssetIds = [...new Set(\n (document.scene.materialAssets ?? [])\n .map(materialAsset => materialAsset.id?.trim())\n .filter((materialAssetId): materialAssetId is string => !!materialAssetId),\n )];\n const materialAssetIdSet = new Set(materialAssetIds);\n const references = collectEditorSceneMaterialAssetReferences(document);\n const missingReferences = references.filter(usage => !materialAssetIdSet.has(usage.materialAssetId));\n const missingReferencesByAssetId = new Map<string, EditorSceneMaterialAssetUsage[]>();\n for (const usage of missingReferences) {\n const usages = missingReferencesByAssetId.get(usage.materialAssetId) ?? [];\n usages.push(usage);\n missingReferencesByAssetId.set(usage.materialAssetId, usages);\n }\n const issues = [...missingReferencesByAssetId.entries()].map(([materialAssetId, usages]) => ({\n kind: 'missing-material-asset' as const,\n materialAssetId,\n usages,\n }));\n return {\n ok: issues.length === 0,\n materialAssetIds,\n references,\n missingMaterialAssetIds: issues.map(issue => issue.materialAssetId),\n missingReferences,\n issues,\n };\n}\n\nexport function collectEditorSceneChildMaterialSlots(\n document: Pick<EditorSceneMaterialDocument, 'assets'>,\n gameObject: EditorSceneMaterialGameObject,\n): EditorSceneMaterialSlotDescriptor[] {\n const slots = new Map<string, EditorSceneMaterialSlotDescriptor>();\n const ownerNodePaths = new Set<string>();\n for (const slot of readEditorSceneAssetMaterialSlots(document, gameObject)) {\n slots.set(slot.slotId ?? slot.ownerNodePath, slot);\n ownerNodePaths.add(slot.ownerNodePath);\n }\n for (const slotId of Object.keys(gameObject.overrides?.materialSlotBindings ?? {})) {\n if (!slots.has(slotId)) slots.set(slotId, { slotId, ownerNodePath: slotId, label: slotId });\n }\n return [...slots.values()].sort((left, right) => left.ownerNodePath.localeCompare(right.ownerNodePath));\n}\n\nexport function hasDetectedModelMaterialSlots(\n document: Pick<EditorSceneMaterialDocument, 'assets'>,\n gameObject: EditorSceneMaterialGameObject,\n): boolean {\n return readEditorSceneAssetMaterialSlots(document, gameObject).length > 0;\n}\n\nexport function bindDefaultEditorSceneSlotMaterial<\n TGameObject extends EditorSceneMaterialGameObject = EditorSceneMaterialGameObject,\n>(\n gameObject: TGameObject,\n slot: EditorSceneMaterialSlotDescriptor,\n materialAssetId: string,\n): TGameObject {\n const next = structuredClone(gameObject) as TGameObject;\n next.overrides = next.overrides ?? {};\n if (!slot.slotId) return next;\n next.overrides.materialSlotBindings = next.overrides.materialSlotBindings ?? {};\n next.overrides.materialSlotBindings[slot.slotId] = {\n ...(next.overrides.materialSlotBindings[slot.slotId] ?? {}),\n materialAssetId,\n };\n return next;\n}\n\nexport function collectEditorSceneSlotSourceMaterialIndices(slot: Pick<EditorSceneMaterialSlotDescriptor, 'sourceMaterialIndices' | 'sourceMaterialIndex'>): number[] {\n if (slot.sourceMaterialIndices?.length) {\n return [...new Set(slot.sourceMaterialIndices.filter((value): value is number => Number.isInteger(value)))];\n }\n const sourceMaterialIndex = slot.sourceMaterialIndex;\n return typeof sourceMaterialIndex === 'number' && Number.isInteger(sourceMaterialIndex) ? [sourceMaterialIndex] : [];\n}\n\nexport function getEditorSceneSlotSelectionKey(slot: Pick<EditorSceneMaterialSlotDescriptor, 'slotId' | 'ownerNodePath'>): string {\n return slot.slotId;\n}\n\nexport function getEditorSceneSlotMaterialBindingPath(slot: Pick<EditorSceneMaterialSlotDescriptor, 'slotId' | 'ownerNodePath'>): string {\n return `overrides.materialSlotBindings.${slot.slotId}.materialAssetId`;\n}\n\nexport function getEditorSceneSlotMaterialBinding<TBinding extends EditorSceneMaterialBinding = EditorSceneMaterialBinding>(\n gameObject: Pick<EditorSceneMaterialGameObject, 'overrides'>,\n slot: Pick<EditorSceneMaterialSlotDescriptor, 'slotId' | 'ownerNodePath'>,\n): TBinding | undefined {\n return gameObject.overrides?.materialSlotBindings?.[slot.slotId] as TBinding | undefined;\n}\n\nexport function createEditorSceneAssetMeshSelectionId(\n rootGameObjectId: string,\n slotSelectionKey: string,\n): string {\n return `${rootGameObjectId}${EDITOR_SCENE_ASSET_MESH_SELECTION_SEPARATOR}${encodeURIComponent(slotSelectionKey)}`;\n}\n\nexport function parseEditorSceneAssetMeshSelectionId(value: string): { rootGameObjectId: string; slotSelectionKey: string } | null {\n const separatorIndex = value.indexOf(EDITOR_SCENE_ASSET_MESH_SELECTION_SEPARATOR);\n if (separatorIndex < 0) return null;\n const rootGameObjectId = value.slice(0, separatorIndex);\n const encodedSlotSelectionKey = value.slice(separatorIndex + EDITOR_SCENE_ASSET_MESH_SELECTION_SEPARATOR.length);\n if (!rootGameObjectId || !encodedSlotSelectionKey) return null;\n try {\n const slotSelectionKey = decodeURIComponent(encodedSlotSelectionKey).trim().replace(/^\\/+|\\/+$/g, '');\n return slotSelectionKey ? { rootGameObjectId, slotSelectionKey } : null;\n } catch {\n return null;\n }\n}\n\nexport function readEditorSceneMaterialBindingConfig<TBinding extends EditorSceneMaterialBinding = EditorSceneMaterialBinding>(\n value: unknown,\n): TBinding | undefined {\n const source = readEditorSceneRecord(value);\n if (!source) return undefined;\n const binding: EditorSceneMaterialBinding = {};\n const materialAssetId = readEditorSceneString(source.materialAssetId);\n if (materialAssetId) binding.materialAssetId = materialAssetId;\n if (source.override && typeof source.override === 'object' && !Array.isArray(source.override)) {\n binding.override = source.override as EditorSceneArtistMaterialProfile;\n }\n return Object.keys(binding).length > 0 ? binding as TBinding : undefined;\n}\n\nexport function splitEditorSceneFieldPath(path: string): string[] {\n const materialSlotBinding = splitMaterialSlotBindingFieldPath(path);\n return materialSlotBinding ?? path.split('.').filter(Boolean);\n}\n\nexport function splitMaterialSlotBindingFieldPath(path: string): string[] | null {\n const prefix = 'overrides.materialSlotBindings.';\n if (!path.startsWith(prefix)) return null;\n const remainder = path.slice(prefix.length);\n const overrideMarker = '.override.';\n const overrideMarkerIndex = remainder.lastIndexOf(overrideMarker);\n if (overrideMarkerIndex >= 0) {\n const slotId = remainder.slice(0, overrideMarkerIndex);\n const suffix = remainder.slice(overrideMarkerIndex + overrideMarker.length);\n if (!slotId || !suffix) return null;\n return ['overrides', 'materialSlotBindings', slotId, 'override', ...suffix.split('.').filter(Boolean)];\n }\n const materialAssetSuffix = '.materialAssetId';\n if (remainder.endsWith(materialAssetSuffix)) {\n const slotId = remainder.slice(0, -materialAssetSuffix.length);\n if (!slotId) return null;\n return ['overrides', 'materialSlotBindings', slotId, 'materialAssetId'];\n }\n return null;\n}\n\nexport function readEditorSceneAssetMaterialSlots(\n document: Pick<EditorSceneMaterialDocument, 'assets'>,\n gameObject: EditorSceneMaterialGameObject,\n): EditorSceneMaterialSlotDescriptor[] {\n const renderer = findEditorSceneModelRenderer(gameObject);\n if (!renderer) return [];\n const asset = document.assets.find((entry) => entry.id === renderer.assetId);\n const rawSlots = asset?.metadata?.materialSlots;\n if (!Array.isArray(rawSlots)) return [];\n const slots: EditorSceneMaterialSlotDescriptor[] = [];\n for (const rawSlot of rawSlots) {\n const slot = readEditorSceneMaterialSlotDescriptor(rawSlot);\n if (slot) slots.push(slot);\n }\n return slots;\n}\n\nexport function readEditorSceneMaterialSlotDescriptor(value: unknown): EditorSceneMaterialSlotDescriptor | null {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return null;\n const record = value as Record<string, unknown>;\n const ownerNodePath = normalizeEditorSceneMaterialSlotOwnerPath(\n typeof record.ownerNodePath === 'string' ? record.ownerNodePath : '',\n );\n const slotId = typeof record.slotId === 'string' && record.slotId.trim() ? record.slotId.trim() : '';\n if (!slotId || !ownerNodePath) return null;\n const label = typeof record.label === 'string' && record.label.trim()\n ? record.label.trim()\n : ownerNodePath;\n const nodeIndex = Number.isInteger(record.nodeIndex) ? record.nodeIndex as number : undefined;\n const nodeIndexPath = Array.isArray(record.nodeIndexPath)\n ? record.nodeIndexPath.filter(Number.isInteger)\n : undefined;\n const meshIndex = Number.isInteger(record.meshIndex) ? record.meshIndex as number : undefined;\n const primitiveIndex = Number.isInteger(record.primitiveIndex) ? record.primitiveIndex as number : undefined;\n const sourceMaterialIndex = Number.isInteger(record.sourceMaterialIndex) ? record.sourceMaterialIndex as number : undefined;\n const sourceMaterialIndices = Array.isArray(record.sourceMaterialIndices)\n ? record.sourceMaterialIndices.filter(Number.isInteger)\n : undefined;\n const materialName = typeof record.materialName === 'string' && record.materialName.trim()\n ? record.materialName.trim()\n : '';\n const materialNames = Array.isArray(record.materialNames)\n ? record.materialNames.filter((item): item is string => typeof item === 'string' && !!item.trim()).map(item => item.trim())\n : undefined;\n const triangleCount = typeof record.triangleCount === 'number' && Number.isFinite(record.triangleCount)\n ? record.triangleCount\n : undefined;\n const boundingBox = readEditorSceneMaterialSlotBoundingBox(record.boundingBox);\n const sourceMaterialProfiles = readEditorSceneSourceMaterialProfiles(record.sourceMaterialProfiles);\n return {\n slotId,\n ownerNodePath,\n label,\n ...(nodeIndex != null ? { nodeIndex } : {}),\n ...(nodeIndexPath && nodeIndexPath.length > 0 ? { nodeIndexPath } : {}),\n ...(meshIndex != null ? { meshIndex } : {}),\n ...(primitiveIndex != null ? { primitiveIndex } : {}),\n ...(sourceMaterialIndex != null ? { sourceMaterialIndex } : {}),\n ...(sourceMaterialIndices && sourceMaterialIndices.length > 0 ? { sourceMaterialIndices } : {}),\n ...(materialName ? { materialName } : {}),\n ...(materialNames && materialNames.length > 0 ? { materialNames } : {}),\n ...(triangleCount != null ? { triangleCount } : {}),\n ...(boundingBox ? { boundingBox } : {}),\n ...(sourceMaterialProfiles && sourceMaterialProfiles.length > 0 ? { sourceMaterialProfiles } : {}),\n };\n}\n\nfunction readEditorSceneMaterialSlotBoundingBox(value: unknown): EditorSceneMaterialSlotBoundingBox | undefined {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return undefined;\n const record = value as Record<string, unknown>;\n const min = readEditorSceneMaterialSlotVec3Tuple(record.min);\n const max = readEditorSceneMaterialSlotVec3Tuple(record.max);\n if (!min && !max) return undefined;\n return {\n ...(min ? { min } : {}),\n ...(max ? { max } : {}),\n };\n}\n\nfunction readEditorSceneMaterialSlotVec3Tuple(value: unknown): [number, number, number] | null {\n if (!Array.isArray(value) || value.length < 3) return null;\n const [x, y, z] = value;\n return typeof x === 'number' && Number.isFinite(x)\n && typeof y === 'number' && Number.isFinite(y)\n && typeof z === 'number' && Number.isFinite(z)\n ? [x, y, z]\n : null;\n}\n\nfunction readEditorSceneSourceMaterialProfiles(value: unknown): EditorSceneSourceMaterialProfile[] | undefined {\n if (!Array.isArray(value)) return undefined;\n const profiles = value\n .map(readEditorSceneSourceMaterialProfile)\n .filter((profile): profile is EditorSceneSourceMaterialProfile => !!profile);\n return profiles.length > 0 ? profiles : undefined;\n}\n\nfunction readEditorSceneSourceMaterialProfile(value: unknown): EditorSceneSourceMaterialProfile | null {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return null;\n const record = value as Record<string, unknown>;\n if (!Number.isInteger(record.sourceMaterialIndex)) return null;\n const materialName = typeof record.materialName === 'string' && record.materialName.trim()\n ? record.materialName.trim()\n : '';\n const profile = record.profile && typeof record.profile === 'object' && !Array.isArray(record.profile)\n ? record.profile as EditorSceneSourceMaterialProfile['profile']\n : undefined;\n const textureHints = readEditorSceneSourceMaterialTextureHints(record.textureHints);\n return {\n sourceMaterialIndex: record.sourceMaterialIndex as number,\n ...(materialName ? { materialName } : {}),\n ...(profile ? { profile } : {}),\n ...(textureHints && textureHints.length > 0 ? { textureHints } : {}),\n };\n}\n\nfunction readEditorSceneSourceMaterialTextureHints(value: unknown): EditorSceneSourceMaterialTextureHint[] | undefined {\n if (!Array.isArray(value)) return undefined;\n const hints = value\n .map(readEditorSceneSourceMaterialTextureHint)\n .filter((hint): hint is EditorSceneSourceMaterialTextureHint => !!hint);\n return hints.length > 0 ? hints : undefined;\n}\n\nfunction readEditorSceneSourceMaterialTextureHint(value: unknown): EditorSceneSourceMaterialTextureHint | null {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return null;\n const record = value as Record<string, unknown>;\n const profilePath = typeof record.profilePath === 'string' && record.profilePath.trim() ? record.profilePath.trim() : '';\n const reason = typeof record.reason === 'string' && record.reason.trim() ? record.reason.trim() : '';\n if (!profilePath || !reason) return null;\n return {\n profilePath,\n reason,\n ...(Number.isInteger(record.textureIndex) ? { textureIndex: record.textureIndex as number } : {}),\n ...(Number.isInteger(record.imageIndex) ? { imageIndex: record.imageIndex as number } : {}),\n ...(Number.isInteger(record.bufferView) ? { bufferView: record.bufferView as number } : {}),\n ...(typeof record.mimeType === 'string' && record.mimeType.trim() ? { mimeType: record.mimeType.trim() } : {}),\n ...(typeof record.uri === 'string' && record.uri.trim() ? { uri: record.uri.trim() } : {}),\n };\n}\n\nfunction readEditorSceneRecord(value: unknown): Record<string, unknown> | null {\n return value && typeof value === 'object' && !Array.isArray(value) ? value as Record<string, unknown> : null;\n}\n\nfunction readEditorSceneString(value: unknown): string | null {\n return typeof value === 'string' && value.trim() ? value.trim() : null;\n}\n\nfunction getEditorSceneMaterialUsageGameObjectLabel(\n gameObject: Pick<EditorSceneMaterialGameObject, 'id' | 'name'>,\n): string {\n return gameObject.name?.trim() || gameObject.id;\n}\n\nfunction readEditorSceneMaterialBindingAssetId(binding: EditorSceneMaterialBinding | null | undefined): string {\n return typeof binding?.materialAssetId === 'string' ? binding.materialAssetId.trim() : '';\n}\n\nfunction getEditorSceneMaterialUsageSlotLabel(\n slot: EditorSceneMaterialSlotDescriptor | null | undefined,\n fallback: string,\n): string {\n return slot?.label?.trim()\n || slot?.ownerNodePath?.trim()\n || slot?.slotId?.trim()\n || fallback;\n}\n\ninterface InternalMaterialPickerInput<\n TMaterialAsset extends EditorSceneMaterialAsset = EditorSceneMaterialAsset,\n> {\n materialAssets: readonly TMaterialAsset[];\n currentAsset?: TMaterialAsset | null;\n currentValue: string;\n pickerText: EditorSceneMaterialPickerText;\n displayText: EditorSceneMaterialAssetDisplayText;\n document?: Pick<EditorSceneMaterialDocument<EditorSceneMaterialGameObject, TMaterialAsset>, 'scene' | 'assets'>;\n ownershipText?: EditorSceneMaterialAssetOwnershipText;\n}\n\nclass InternalMaterialUsageIndex {\n private readonly byMaterialId = new Map<string, EditorSceneMaterialAssetUsage[]>();\n private readonly byOwnerId = new Map<string, EditorSceneMaterialAssetUsage[]>();\n\n constructor(document: Pick<EditorSceneMaterialDocument, 'scene' | 'assets'>) {\n for (const usage of collectEditorSceneMaterialAssetReferences(document)) {\n const materialUsages = this.byMaterialId.get(usage.materialAssetId) ?? [];\n materialUsages.push(usage);\n this.byMaterialId.set(usage.materialAssetId, materialUsages);\n const ownerUsages = this.byOwnerId.get(usage.gameObjectId) ?? [];\n ownerUsages.push(usage);\n this.byOwnerId.set(usage.gameObjectId, ownerUsages);\n }\n }\n\n forMaterial(materialAssetId: string): readonly EditorSceneMaterialAssetUsage[] {\n return this.byMaterialId.get(materialAssetId.trim()) ?? [];\n }\n\n forOwner(ownerId: string): readonly EditorSceneMaterialAssetUsage[] {\n return this.byOwnerId.get(ownerId) ?? [];\n }\n}\n\nconst cachedMaterialUsageIndexes = new WeakMap<object, InternalMaterialUsageIndex>();\n\nfunction getCachedMaterialUsageIndex(\n document: Pick<EditorSceneMaterialDocument, 'scene' | 'assets'>,\n): InternalMaterialUsageIndex {\n let index = cachedMaterialUsageIndexes.get(document as object);\n if (!index) {\n index = new InternalMaterialUsageIndex(document);\n cachedMaterialUsageIndexes.set(document as object, index);\n }\n return index;\n}\n\nfunction getInternalMaterialAssetDefaultPreset(\n materialAsset: Pick<EditorSceneMaterialAsset, 'system'> | null | undefined,\n): string | undefined {\n return materialAsset?.system?.preset;\n}\n\nfunction getInternalMaterialAssetDisplayName(\n materialAsset: Pick<EditorSceneMaterialAsset, 'id' | 'name' | 'system'>,\n text: EditorSceneMaterialAssetDisplayText,\n): string {\n const preset = getInternalMaterialAssetDefaultPreset(materialAsset);\n if (preset === 'default-pbr') return text.defaultMaterial;\n if (preset === 'default-standard') return text.defaultStandardMaterial;\n return materialAsset.name || materialAsset.id;\n}\n\nfunction getInternalMaterialAssetDisplayMeta(\n materialAsset: Pick<EditorSceneMaterialAsset, 'id' | 'profile' | 'system'>,\n text: EditorSceneMaterialAssetDisplayText,\n): string {\n const preset = getInternalMaterialAssetDefaultPreset(materialAsset);\n if (preset === 'default-pbr') return text.defaultMaterialMeta;\n if (preset === 'default-standard') return text.defaultStandardMaterialMeta;\n return text.formatMaterialMeta(materialAsset.id);\n}\n\nfunction createInternalMaterialPickerControlOptions<\n TMaterialAsset extends EditorSceneMaterialAsset = EditorSceneMaterialAsset,\n>(\n input: InternalMaterialPickerInput<TMaterialAsset>,\n usageIndex: InternalMaterialUsageIndex | null,\n): EditorSceneMaterialPickerControlOptions {\n const currentAsset = input.currentAsset ?? null;\n const currentOwnership = currentAsset\n ? createInternalMaterialOwnershipView(input.document, currentAsset.id, input.ownershipText, usageIndex)\n : null;\n const currentBaseMeta = currentAsset\n ? getInternalMaterialAssetDisplayMeta(currentAsset, input.displayText)\n : (input.currentValue ? input.pickerText.summaryMissingAsset : input.pickerText.summaryInherit);\n const currentMeta = currentOwnership\n ? createInternalMaterialPickerMeta(currentBaseMeta, currentOwnership)\n : currentBaseMeta;\n return {\n pickerKind: 'material',\n pickerTitle: input.pickerText.materialPickerTitle,\n actionLabel: input.pickerText.replace,\n copyActionLabel: currentAsset ? input.pickerText.duplicateForObject : '',\n copyActionValue: currentAsset ? createEditorSceneDuplicateMaterialAssetValue(currentAsset.id) : '',\n copyActionTooltip: currentAsset\n ? createInternalMaterialPickerCopyTooltip(input.pickerText.duplicateForObjectTooltip, currentOwnership)\n : '',\n placeholder: input.currentValue ? input.pickerText.summaryMissingAsset : input.pickerText.inheritNone,\n currentLabel: currentAsset\n ? getInternalMaterialAssetDisplayName(currentAsset, input.displayText)\n : (input.currentValue ? input.currentValue : input.pickerText.inheritNone),\n currentMeta,\n ...(currentOwnership?.usageLabel ? { currentUsageLabel: currentOwnership.usageLabel } : {}),\n ...(currentOwnership?.editImpactLabel ? { currentEditImpactLabel: currentOwnership.editImpactLabel } : {}),\n ...(currentOwnership ? { currentOwnership } : {}),\n currentPreview: currentAsset ? createEditorSceneMaterialAssetPreview(currentAsset.profile) : undefined,\n candidates: [{\n label: input.pickerText.inheritNone,\n value: '',\n meta: input.pickerText.summaryInherit,\n }, ...input.materialAssets.map(materialAsset => {\n const ownership = createInternalMaterialOwnershipView(\n input.document,\n materialAsset.id,\n input.ownershipText,\n usageIndex,\n );\n return {\n label: getInternalMaterialAssetDisplayName(materialAsset, input.displayText),\n value: materialAsset.id,\n meta: createInternalMaterialPickerMeta(\n getInternalMaterialAssetDisplayMeta(materialAsset, input.displayText),\n ownership,\n ),\n kind: 'material' as const,\n preview: createEditorSceneMaterialAssetPreview(materialAsset.profile),\n ...(ownership?.usageLabel ? { usageLabel: ownership.usageLabel } : {}),\n ...(ownership ? { ownership } : {}),\n };\n })],\n };\n}\n\nfunction createInternalMaterialOwnershipView(\n document: Pick<EditorSceneMaterialDocument, 'scene' | 'assets'> | null | undefined,\n materialAssetId: string,\n text: EditorSceneMaterialAssetOwnershipText | undefined,\n usageIndex: InternalMaterialUsageIndex | null,\n): EditorSceneMaterialAssetOwnershipView | null {\n if (!document || !usageIndex) return null;\n const normalizedMaterialAssetId = materialAssetId.trim();\n const usages = usageIndex.forMaterial(normalizedMaterialAssetId);\n const usageCount = usages.length;\n return {\n materialAssetId: normalizedMaterialAssetId,\n usage: {\n count: usageCount,\n items: usages.map(usage => structuredClone(usage)),\n },\n usageCount,\n used: usageCount > 0,\n shared: usageCount > 1,\n ...(text ? {\n usageLabel: text.formatUsageCount(usageCount),\n editImpactLabel: text.formatEditImpact(usageCount),\n duplicateImpactLabel: text.formatDuplicateImpact(usageCount),\n } : {}),\n };\n}\n\nfunction createInternalMaterialPickerMeta(\n baseMeta: string,\n ownership: EditorSceneMaterialAssetOwnershipView | null,\n): string {\n return [baseMeta, ownership?.usageLabel].filter(Boolean).join(' · ');\n}\n\nfunction createInternalMaterialPickerCopyTooltip(\n baseTooltip: string,\n ownership: EditorSceneMaterialAssetOwnershipView | null,\n): string {\n return [baseTooltip, ownership?.duplicateImpactLabel].filter(Boolean).join(' · ');\n}\n\nfunction createInternalMaterialBrowserAssetItems<\n TMaterialAsset extends EditorSceneMaterialAsset = EditorSceneMaterialAsset,\n>(\n document: Pick<EditorSceneMaterialDocument<EditorSceneMaterialGameObject, TMaterialAsset>, 'scene' | 'assets'>,\n usageIndex: InternalMaterialUsageIndex,\n): Array<EditorSceneMaterialBrowserAssetItem<NonNullable<TMaterialAsset['profile']>>> {\n return (document.scene.materialAssets ?? []).map(materialAsset => {\n const usages = usageIndex.forMaterial(materialAsset.id);\n return {\n id: `material:${materialAsset.id}`,\n assetId: materialAsset.id,\n kind: 'material',\n label: materialAsset.name || materialAsset.id,\n meta: createEditorSceneMaterialAssetMeta(materialAsset.profile, materialAsset.id),\n preview: createEditorSceneMaterialAssetPreview(materialAsset.profile),\n material: {\n id: materialAsset.id,\n name: materialAsset.name || materialAsset.id,\n materialKind: resolveEditorSceneMaterialAssetKind(materialAsset),\n readonly: materialAsset.system?.readonly === true\n || getInternalMaterialAssetDefaultPreset(materialAsset) != null,\n usage: {\n count: usages.length,\n items: usages.map(usage => structuredClone(usage)),\n },\n profile: structuredClone(materialAsset.profile ?? {}) as NonNullable<TMaterialAsset['profile']>,\n },\n placeable: false,\n };\n });\n}\n\nconst materialBindingInternals = {\n createUsageIndex(\n document: Pick<EditorSceneMaterialDocument, 'scene' | 'assets'>,\n ): InternalMaterialUsageIndex {\n return new InternalMaterialUsageIndex(document);\n },\n getCachedUsageIndex: getCachedMaterialUsageIndex,\n createPickerControlOptions: createInternalMaterialPickerControlOptions,\n createBrowserAssetItems: createInternalMaterialBrowserAssetItems,\n};\n\nexport default materialBindingInternals;\n"]}
@@ -1,5 +1,5 @@
1
1
  import type { InspectorProperty } from '@fps-games/editor-core';
2
- import type { EditorSceneInspectorTextureAsset, EditorSceneMaterialAsset, EditorSceneMaterialAssetDisplayText, EditorSceneMaterialAssetFieldInspectorPropertyInput, EditorSceneMaterialAssetOwnershipText, EditorSceneMaterialBrowserAssetItem, EditorSceneMaterialDocument, EditorSceneMaterialGameObject, EditorSceneMaterialPickerControlOptions, EditorSceneMaterialPickerText, EditorSceneTextureAssetPreview, EditorSceneTexturePickerControlOptions, EditorSceneTexturePickerText } from './types';
2
+ import type { EditorSceneInspectorTextureAsset, EditorSceneMaterialAsset, EditorSceneMaterialAssetDisplayText, EditorSceneMaterialAssetFieldInspectorPropertyInput, EditorSceneMaterialBrowserAssetItem, EditorSceneMaterialDocument, EditorSceneMaterialGameObject, EditorSceneMaterialPickerControlOptions, EditorSceneMaterialPickerText, EditorSceneTextureAssetPreview, EditorSceneTexturePickerControlOptions, EditorSceneTexturePickerText } from './types';
3
3
  export declare function getEditorSceneMaterialAssetDefaultPreset(materialAsset: Pick<EditorSceneMaterialAsset, 'system'> | null | undefined): string | undefined;
4
4
  export declare function getEditorSceneMaterialAssetDisplayName(materialAsset: Pick<EditorSceneMaterialAsset, 'id' | 'name' | 'system'>, text: EditorSceneMaterialAssetDisplayText): string;
5
5
  export declare function getEditorSceneMaterialAssetDisplayMeta(materialAsset: Pick<EditorSceneMaterialAsset, 'id' | 'profile' | 'system'>, text: EditorSceneMaterialAssetDisplayText): string;
@@ -10,7 +10,7 @@ export declare function createEditorSceneMaterialPickerControlOptions<TMaterialA
10
10
  pickerText: EditorSceneMaterialPickerText;
11
11
  displayText: EditorSceneMaterialAssetDisplayText;
12
12
  document?: Pick<EditorSceneMaterialDocument<EditorSceneMaterialGameObject, TMaterialAsset>, 'scene' | 'assets'>;
13
- ownershipText?: EditorSceneMaterialAssetOwnershipText;
13
+ ownershipText?: import('./types').EditorSceneMaterialAssetOwnershipText;
14
14
  }): EditorSceneMaterialPickerControlOptions;
15
15
  export declare function findEditorSceneInspectorTextureAsset(textureAssets: readonly EditorSceneInspectorTextureAsset[] | undefined, value: string): EditorSceneInspectorTextureAsset | null;
16
16
  export declare function createEditorSceneTextureAssetPreview(texture: Pick<EditorSceneInspectorTextureAsset, 'url' | 'label'>): EditorSceneTextureAssetPreview;
@@ -1 +1 @@
1
- {"version":3,"file":"inspector.d.ts","sourceRoot":"","sources":["../../src/material-binding/inspector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"inspector.d.ts","sourceRoot":"","sources":["../../src/material-binding/inspector.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,6 @@
1
- import { EDITOR_SCENE_DUPLICATE_MATERIAL_ASSET_VALUE_PREFIX, EDITOR_SCENE_MATERIAL_ASSET_FIELD_PATH_PREFIX, createEditorSceneDuplicateMaterialAssetValue, } from './paths.js';
2
- import { createEditorSceneMaterialAssetMeta, createEditorSceneMaterialAssetPreview, } from './preview.js';
3
- import { collectEditorSceneMaterialAssetUsages, createEditorSceneMaterialAssetOwnershipView, } from './binding.js';
4
- import { isReadonlyEditorSceneMaterialAsset, resolveEditorSceneMaterialAssetKind, } from './profile.js';
1
+ import { EDITOR_SCENE_DUPLICATE_MATERIAL_ASSET_VALUE_PREFIX, EDITOR_SCENE_MATERIAL_ASSET_FIELD_PATH_PREFIX, } from './paths.js';
2
+ import { isReadonlyEditorSceneMaterialAsset, } from './profile.js';
3
+ import { default as materialBindingInternals, } from './binding.js';
5
4
  export function getEditorSceneMaterialAssetDefaultPreset(materialAsset) {
6
5
  return materialAsset?.system?.preset;
7
6
  }
@@ -22,71 +21,7 @@ export function getEditorSceneMaterialAssetDisplayMeta(materialAsset, text) {
22
21
  return text.formatMaterialMeta(materialAsset.id);
23
22
  }
24
23
  export function createEditorSceneMaterialPickerControlOptions(input) {
25
- const currentAsset = input.currentAsset ?? null;
26
- const currentOwnership = currentAsset
27
- ? createEditorSceneMaterialPickerOwnership(input.document, currentAsset.id, input.ownershipText)
28
- : null;
29
- const currentBaseMeta = currentAsset
30
- ? getEditorSceneMaterialAssetDisplayMeta(currentAsset, input.displayText)
31
- : (input.currentValue ? input.pickerText.summaryMissingAsset : input.pickerText.summaryInherit);
32
- const currentMeta = currentOwnership
33
- ? createEditorSceneMaterialPickerMeta(currentBaseMeta, currentOwnership)
34
- : currentBaseMeta;
35
- return {
36
- pickerKind: 'material',
37
- pickerTitle: input.pickerText.materialPickerTitle,
38
- actionLabel: input.pickerText.replace,
39
- copyActionLabel: currentAsset ? input.pickerText.duplicateForObject : '',
40
- copyActionValue: currentAsset ? createEditorSceneDuplicateMaterialAssetValue(currentAsset.id) : '',
41
- copyActionTooltip: currentAsset
42
- ? createEditorSceneMaterialPickerCopyTooltip(input.pickerText.duplicateForObjectTooltip, currentOwnership)
43
- : '',
44
- placeholder: input.currentValue ? input.pickerText.summaryMissingAsset : input.pickerText.inheritNone,
45
- currentLabel: currentAsset
46
- ? getEditorSceneMaterialAssetDisplayName(currentAsset, input.displayText)
47
- : (input.currentValue ? input.currentValue : input.pickerText.inheritNone),
48
- currentMeta,
49
- ...(currentOwnership?.usageLabel ? { currentUsageLabel: currentOwnership.usageLabel } : {}),
50
- ...(currentOwnership?.editImpactLabel ? { currentEditImpactLabel: currentOwnership.editImpactLabel } : {}),
51
- ...(currentOwnership ? { currentOwnership } : {}),
52
- currentPreview: currentAsset ? createEditorSceneMaterialAssetPreview(currentAsset.profile) : undefined,
53
- candidates: [
54
- {
55
- label: input.pickerText.inheritNone,
56
- value: '',
57
- meta: input.pickerText.summaryInherit,
58
- },
59
- ...input.materialAssets.map((materialAsset) => {
60
- const ownership = createEditorSceneMaterialPickerOwnership(input.document, materialAsset.id, input.ownershipText);
61
- return {
62
- label: getEditorSceneMaterialAssetDisplayName(materialAsset, input.displayText),
63
- value: materialAsset.id,
64
- meta: createEditorSceneMaterialPickerMeta(getEditorSceneMaterialAssetDisplayMeta(materialAsset, input.displayText), ownership),
65
- kind: 'material',
66
- preview: createEditorSceneMaterialAssetPreview(materialAsset.profile),
67
- ...(ownership?.usageLabel ? { usageLabel: ownership.usageLabel } : {}),
68
- ...(ownership ? { ownership } : {}),
69
- };
70
- }),
71
- ],
72
- };
73
- }
74
- function createEditorSceneMaterialPickerOwnership(document, materialAssetId, text) {
75
- if (!document)
76
- return null;
77
- return createEditorSceneMaterialAssetOwnershipView(document, materialAssetId, text);
78
- }
79
- function createEditorSceneMaterialPickerMeta(baseMeta, ownership) {
80
- return [
81
- baseMeta,
82
- ownership?.usageLabel,
83
- ].filter(Boolean).join(' · ');
84
- }
85
- function createEditorSceneMaterialPickerCopyTooltip(baseTooltip, ownership) {
86
- return [
87
- baseTooltip,
88
- ownership?.duplicateImpactLabel,
89
- ].filter(Boolean).join(' · ');
24
+ return materialBindingInternals.createPickerControlOptions(input, input.document ? materialBindingInternals.createUsageIndex(input.document) : null);
90
25
  }
91
26
  export function findEditorSceneInspectorTextureAsset(textureAssets, value) {
92
27
  const normalized = value.trim();
@@ -138,29 +73,7 @@ function isEditorSceneMaterialTextureAsset(texture) {
138
73
  return texture.usage !== 'environment';
139
74
  }
140
75
  export function createEditorSceneMaterialBrowserAssetItems(document) {
141
- return (document.scene.materialAssets ?? []).map((materialAsset) => {
142
- const usages = collectEditorSceneMaterialAssetUsages(document, materialAsset.id);
143
- return {
144
- id: `material:${materialAsset.id}`,
145
- assetId: materialAsset.id,
146
- kind: 'material',
147
- label: materialAsset.name || materialAsset.id,
148
- meta: createEditorSceneMaterialAssetMeta(materialAsset.profile, materialAsset.id),
149
- preview: createEditorSceneMaterialAssetPreview(materialAsset.profile),
150
- material: {
151
- id: materialAsset.id,
152
- name: materialAsset.name || materialAsset.id,
153
- materialKind: resolveEditorSceneMaterialAssetKind(materialAsset),
154
- readonly: materialAsset.system?.readonly === true || getEditorSceneMaterialAssetDefaultPreset(materialAsset) != null,
155
- usage: {
156
- count: usages.length,
157
- items: usages.map(usage => structuredClone(usage)),
158
- },
159
- profile: structuredClone(materialAsset.profile ?? {}),
160
- },
161
- placeable: false,
162
- };
163
- });
76
+ return materialBindingInternals.createBrowserAssetItems(document, materialBindingInternals.createUsageIndex(document));
164
77
  }
165
78
  export function isEditorSceneMaterialAssetReadonlyForInspector(materialAsset, defaultMaterialAssetIds = []) {
166
79
  return isReadonlyEditorSceneMaterialAsset(materialAsset, defaultMaterialAssetIds);
@@ -1 +1 @@
1
- {"version":3,"file":"inspector.js","sourceRoot":"","sources":["../../src/material-binding/inspector.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n InspectorProperty,\n} from '@fps-games/editor-core';\nimport {\n EDITOR_SCENE_DUPLICATE_MATERIAL_ASSET_VALUE_PREFIX,\n EDITOR_SCENE_MATERIAL_ASSET_FIELD_PATH_PREFIX,\n createEditorSceneDuplicateMaterialAssetValue,\n} from './paths';\nimport {\n createEditorSceneMaterialAssetMeta,\n createEditorSceneMaterialAssetPreview,\n} from './preview';\nimport {\n collectEditorSceneMaterialAssetUsages,\n createEditorSceneMaterialAssetOwnershipView,\n} from './binding';\nimport {\n isReadonlyEditorSceneMaterialAsset,\n resolveEditorSceneMaterialAssetKind,\n} from './profile';\nimport type {\n EditorSceneInspectorTextureAsset,\n EditorSceneMaterialAsset,\n EditorSceneMaterialAssetDisplayText,\n EditorSceneMaterialAssetFieldInspectorPropertyInput,\n EditorSceneMaterialAssetOwnershipText,\n EditorSceneMaterialAssetOwnershipView,\n EditorSceneMaterialBrowserAssetItem,\n EditorSceneMaterialDocument,\n EditorSceneMaterialGameObject,\n EditorSceneMaterialPickerControlOptions,\n EditorSceneMaterialPickerText,\n EditorSceneTextureAssetPreview,\n EditorSceneTexturePickerControlOptions,\n EditorSceneTexturePickerText,\n} from './types';\n\nexport function getEditorSceneMaterialAssetDefaultPreset(\n materialAsset: Pick<EditorSceneMaterialAsset, 'system'> | null | undefined,\n): string | undefined {\n return materialAsset?.system?.preset;\n}\n\nexport function getEditorSceneMaterialAssetDisplayName(\n materialAsset: Pick<EditorSceneMaterialAsset, 'id' | 'name' | 'system'>,\n text: EditorSceneMaterialAssetDisplayText,\n): string {\n const preset = getEditorSceneMaterialAssetDefaultPreset(materialAsset);\n if (preset === 'default-pbr') return text.defaultMaterial;\n if (preset === 'default-standard') return text.defaultStandardMaterial;\n return materialAsset.name || materialAsset.id;\n}\n\nexport function getEditorSceneMaterialAssetDisplayMeta(\n materialAsset: Pick<EditorSceneMaterialAsset, 'id' | 'profile' | 'system'>,\n text: EditorSceneMaterialAssetDisplayText,\n): string {\n const preset = getEditorSceneMaterialAssetDefaultPreset(materialAsset);\n if (preset === 'default-pbr') return text.defaultMaterialMeta;\n if (preset === 'default-standard') return text.defaultStandardMaterialMeta;\n return text.formatMaterialMeta(materialAsset.id);\n}\n\nexport function createEditorSceneMaterialPickerControlOptions<\n TMaterialAsset extends EditorSceneMaterialAsset = EditorSceneMaterialAsset,\n>(input: {\n materialAssets: readonly TMaterialAsset[];\n currentAsset?: TMaterialAsset | null;\n currentValue: string;\n pickerText: EditorSceneMaterialPickerText;\n displayText: EditorSceneMaterialAssetDisplayText;\n document?: Pick<EditorSceneMaterialDocument<EditorSceneMaterialGameObject, TMaterialAsset>, 'scene' | 'assets'>;\n ownershipText?: EditorSceneMaterialAssetOwnershipText;\n}): EditorSceneMaterialPickerControlOptions {\n const currentAsset = input.currentAsset ?? null;\n const currentOwnership = currentAsset\n ? createEditorSceneMaterialPickerOwnership(input.document, currentAsset.id, input.ownershipText)\n : null;\n const currentBaseMeta = currentAsset\n ? getEditorSceneMaterialAssetDisplayMeta(currentAsset, input.displayText)\n : (input.currentValue ? input.pickerText.summaryMissingAsset : input.pickerText.summaryInherit);\n const currentMeta = currentOwnership\n ? createEditorSceneMaterialPickerMeta(currentBaseMeta, currentOwnership)\n : currentBaseMeta;\n return {\n pickerKind: 'material',\n pickerTitle: input.pickerText.materialPickerTitle,\n actionLabel: input.pickerText.replace,\n copyActionLabel: currentAsset ? input.pickerText.duplicateForObject : '',\n copyActionValue: currentAsset ? createEditorSceneDuplicateMaterialAssetValue(currentAsset.id) : '',\n copyActionTooltip: currentAsset\n ? createEditorSceneMaterialPickerCopyTooltip(input.pickerText.duplicateForObjectTooltip, currentOwnership)\n : '',\n placeholder: input.currentValue ? input.pickerText.summaryMissingAsset : input.pickerText.inheritNone,\n currentLabel: currentAsset\n ? getEditorSceneMaterialAssetDisplayName(currentAsset, input.displayText)\n : (input.currentValue ? input.currentValue : input.pickerText.inheritNone),\n currentMeta,\n ...(currentOwnership?.usageLabel ? { currentUsageLabel: currentOwnership.usageLabel } : {}),\n ...(currentOwnership?.editImpactLabel ? { currentEditImpactLabel: currentOwnership.editImpactLabel } : {}),\n ...(currentOwnership ? { currentOwnership } : {}),\n currentPreview: currentAsset ? createEditorSceneMaterialAssetPreview(currentAsset.profile) : undefined,\n candidates: [\n {\n label: input.pickerText.inheritNone,\n value: '',\n meta: input.pickerText.summaryInherit,\n },\n ...input.materialAssets.map((materialAsset) => {\n const ownership = createEditorSceneMaterialPickerOwnership(input.document, materialAsset.id, input.ownershipText);\n return {\n label: getEditorSceneMaterialAssetDisplayName(materialAsset, input.displayText),\n value: materialAsset.id,\n meta: createEditorSceneMaterialPickerMeta(\n getEditorSceneMaterialAssetDisplayMeta(materialAsset, input.displayText),\n ownership,\n ),\n kind: 'material' as const,\n preview: createEditorSceneMaterialAssetPreview(materialAsset.profile),\n ...(ownership?.usageLabel ? { usageLabel: ownership.usageLabel } : {}),\n ...(ownership ? { ownership } : {}),\n };\n }),\n ],\n };\n}\n\nfunction createEditorSceneMaterialPickerOwnership(\n document: Pick<EditorSceneMaterialDocument, 'scene' | 'assets'> | null | undefined,\n materialAssetId: string,\n text?: EditorSceneMaterialAssetOwnershipText,\n): EditorSceneMaterialAssetOwnershipView | null {\n if (!document) return null;\n return createEditorSceneMaterialAssetOwnershipView(document, materialAssetId, text);\n}\n\nfunction createEditorSceneMaterialPickerMeta(\n baseMeta: string,\n ownership: EditorSceneMaterialAssetOwnershipView | null,\n): string {\n return [\n baseMeta,\n ownership?.usageLabel,\n ].filter(Boolean).join(' · ');\n}\n\nfunction createEditorSceneMaterialPickerCopyTooltip(\n baseTooltip: string,\n ownership: EditorSceneMaterialAssetOwnershipView | null,\n): string {\n return [\n baseTooltip,\n ownership?.duplicateImpactLabel,\n ].filter(Boolean).join(' · ');\n}\n\nexport function findEditorSceneInspectorTextureAsset(\n textureAssets: readonly EditorSceneInspectorTextureAsset[] | undefined,\n value: string,\n): EditorSceneInspectorTextureAsset | null {\n const normalized = value.trim();\n if (!normalized) return null;\n return textureAssets?.find(texture => texture.url === normalized || texture.id === normalized) ?? null;\n}\n\nexport function createEditorSceneTextureAssetPreview(\n texture: Pick<EditorSceneInspectorTextureAsset, 'url' | 'label'>,\n): EditorSceneTextureAssetPreview {\n return {\n kind: 'image',\n url: texture.url,\n alt: texture.label,\n fit: 'contain',\n };\n}\n\nexport function createEditorSceneTexturePickerControlOptions(input: {\n textureAssets?: readonly EditorSceneInspectorTextureAsset[];\n currentTexture?: EditorSceneInspectorTextureAsset | null;\n currentValue: string;\n pickerText: EditorSceneTexturePickerText;\n candidateValue?: 'assetId' | 'url';\n}): EditorSceneTexturePickerControlOptions {\n const currentTexture = input.currentTexture ?? findEditorSceneInspectorTextureAsset(input.textureAssets, input.currentValue);\n const candidateValue = input.candidateValue ?? 'url';\n const candidateTextures = (input.textureAssets ?? []).filter(isEditorSceneMaterialTextureAsset);\n return {\n pickerKind: 'texture',\n pickerTitle: input.pickerText.texturePickerTitle,\n actionLabel: input.pickerText.replace,\n placeholder: input.pickerText.inheritNone,\n currentLabel: currentTexture?.label ?? (input.currentValue ? input.currentValue : input.pickerText.inheritNone),\n currentMeta: currentTexture?.meta ?? (input.currentValue ? input.currentValue : input.pickerText.summaryInherit),\n currentPreview: currentTexture ? createEditorSceneTextureAssetPreview(currentTexture) : undefined,\n candidates: [\n {\n label: input.pickerText.inheritNone,\n value: '',\n meta: input.pickerText.summaryInherit,\n },\n ...candidateTextures.map(texture => ({\n label: texture.label,\n value: candidateValue === 'assetId' ? texture.id : texture.url,\n meta: texture.meta ?? texture.id,\n kind: 'texture' as const,\n preview: createEditorSceneTextureAssetPreview(texture),\n })),\n ],\n };\n}\n\nfunction isEditorSceneMaterialTextureAsset(texture: EditorSceneInspectorTextureAsset): boolean {\n if (texture.capabilities?.materialTexture === true) return true;\n if (texture.capabilities?.materialTexture === false) return false;\n return texture.usage !== 'environment';\n}\n\nexport function createEditorSceneMaterialBrowserAssetItems<\n TMaterialAsset extends EditorSceneMaterialAsset = EditorSceneMaterialAsset,\n>(\n document: Pick<EditorSceneMaterialDocument<EditorSceneMaterialGameObject, TMaterialAsset>, 'scene' | 'assets'>,\n): Array<EditorSceneMaterialBrowserAssetItem<NonNullable<TMaterialAsset['profile']>>> {\n return (document.scene.materialAssets ?? []).map((materialAsset) => {\n const usages = collectEditorSceneMaterialAssetUsages(document, materialAsset.id);\n return {\n id: `material:${materialAsset.id}`,\n assetId: materialAsset.id,\n kind: 'material',\n label: materialAsset.name || materialAsset.id,\n meta: createEditorSceneMaterialAssetMeta(materialAsset.profile, materialAsset.id),\n preview: createEditorSceneMaterialAssetPreview(materialAsset.profile),\n material: {\n id: materialAsset.id,\n name: materialAsset.name || materialAsset.id,\n materialKind: resolveEditorSceneMaterialAssetKind(materialAsset),\n readonly: materialAsset.system?.readonly === true || getEditorSceneMaterialAssetDefaultPreset(materialAsset) != null,\n usage: {\n count: usages.length,\n items: usages.map(usage => structuredClone(usage)),\n },\n profile: structuredClone(materialAsset.profile ?? {}) as NonNullable<TMaterialAsset['profile']>,\n },\n placeable: false,\n };\n });\n}\n\nexport function isEditorSceneMaterialAssetReadonlyForInspector(\n materialAsset: EditorSceneMaterialAsset | null | undefined,\n defaultMaterialAssetIds: readonly string[] = [],\n): boolean {\n return isReadonlyEditorSceneMaterialAsset(materialAsset, defaultMaterialAssetIds);\n}\n\nexport function createEditorSceneMaterialAssetFieldInspectorPropertyInput<\n TDocument,\n TMaterialAsset extends EditorSceneMaterialAsset = EditorSceneMaterialAsset,\n>(\n input: EditorSceneMaterialAssetFieldInspectorPropertyInput<TDocument, TMaterialAsset>,\n): Omit<InspectorProperty<TDocument>, 'validate' | 'coerce'> {\n const pathPrefix = input.pathPrefix ?? EDITOR_SCENE_MATERIAL_ASSET_FIELD_PATH_PREFIX;\n return {\n path: `${pathPrefix}${input.materialAsset.id}.${input.fieldPath}`,\n label: input.label,\n valueType: input.valueType,\n control: input.control,\n value: input.value,\n readOnly: false,\n persistence: 'document',\n commitMode: input.commitMode,\n order: input.order,\n tooltip: input.tooltip,\n tags: input.tags ?? ['ArtistMaterial', 'MaterialAsset'],\n document: input.document,\n };\n}\n\nexport function isEditorSceneDuplicateMaterialAssetPickerValue(value: unknown): boolean {\n return typeof value === 'string' && value.startsWith(EDITOR_SCENE_DUPLICATE_MATERIAL_ASSET_VALUE_PREFIX);\n}\n"]}
1
+ {"version":3,"file":"inspector.js","sourceRoot":"","sources":["../../src/material-binding/inspector.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n InspectorProperty,\n} from '@fps-games/editor-core';\nimport {\n EDITOR_SCENE_DUPLICATE_MATERIAL_ASSET_VALUE_PREFIX,\n EDITOR_SCENE_MATERIAL_ASSET_FIELD_PATH_PREFIX,\n} from './paths';\nimport {\n isReadonlyEditorSceneMaterialAsset,\n} from './profile';\nimport {\n default as materialBindingInternals,\n} from './binding';\nimport type {\n EditorSceneInspectorTextureAsset,\n EditorSceneMaterialAsset,\n EditorSceneMaterialAssetDisplayText,\n EditorSceneMaterialAssetFieldInspectorPropertyInput,\n EditorSceneMaterialBrowserAssetItem,\n EditorSceneMaterialDocument,\n EditorSceneMaterialGameObject,\n EditorSceneMaterialPickerControlOptions,\n EditorSceneMaterialPickerText,\n EditorSceneTextureAssetPreview,\n EditorSceneTexturePickerControlOptions,\n EditorSceneTexturePickerText,\n} from './types';\n\nexport function getEditorSceneMaterialAssetDefaultPreset(\n materialAsset: Pick<EditorSceneMaterialAsset, 'system'> | null | undefined,\n): string | undefined {\n return materialAsset?.system?.preset;\n}\n\nexport function getEditorSceneMaterialAssetDisplayName(\n materialAsset: Pick<EditorSceneMaterialAsset, 'id' | 'name' | 'system'>,\n text: EditorSceneMaterialAssetDisplayText,\n): string {\n const preset = getEditorSceneMaterialAssetDefaultPreset(materialAsset);\n if (preset === 'default-pbr') return text.defaultMaterial;\n if (preset === 'default-standard') return text.defaultStandardMaterial;\n return materialAsset.name || materialAsset.id;\n}\n\nexport function getEditorSceneMaterialAssetDisplayMeta(\n materialAsset: Pick<EditorSceneMaterialAsset, 'id' | 'profile' | 'system'>,\n text: EditorSceneMaterialAssetDisplayText,\n): string {\n const preset = getEditorSceneMaterialAssetDefaultPreset(materialAsset);\n if (preset === 'default-pbr') return text.defaultMaterialMeta;\n if (preset === 'default-standard') return text.defaultStandardMaterialMeta;\n return text.formatMaterialMeta(materialAsset.id);\n}\n\nexport function createEditorSceneMaterialPickerControlOptions<\n TMaterialAsset extends EditorSceneMaterialAsset = EditorSceneMaterialAsset,\n>(input: {\n materialAssets: readonly TMaterialAsset[];\n currentAsset?: TMaterialAsset | null;\n currentValue: string;\n pickerText: EditorSceneMaterialPickerText;\n displayText: EditorSceneMaterialAssetDisplayText;\n document?: Pick<EditorSceneMaterialDocument<EditorSceneMaterialGameObject, TMaterialAsset>, 'scene' | 'assets'>;\n ownershipText?: import('./types').EditorSceneMaterialAssetOwnershipText;\n}): EditorSceneMaterialPickerControlOptions {\n return materialBindingInternals.createPickerControlOptions(\n input,\n input.document ? materialBindingInternals.createUsageIndex(input.document) : null,\n );\n}\n\nexport function findEditorSceneInspectorTextureAsset(\n textureAssets: readonly EditorSceneInspectorTextureAsset[] | undefined,\n value: string,\n): EditorSceneInspectorTextureAsset | null {\n const normalized = value.trim();\n if (!normalized) return null;\n return textureAssets?.find(texture => texture.url === normalized || texture.id === normalized) ?? null;\n}\n\nexport function createEditorSceneTextureAssetPreview(\n texture: Pick<EditorSceneInspectorTextureAsset, 'url' | 'label'>,\n): EditorSceneTextureAssetPreview {\n return {\n kind: 'image',\n url: texture.url,\n alt: texture.label,\n fit: 'contain',\n };\n}\n\nexport function createEditorSceneTexturePickerControlOptions(input: {\n textureAssets?: readonly EditorSceneInspectorTextureAsset[];\n currentTexture?: EditorSceneInspectorTextureAsset | null;\n currentValue: string;\n pickerText: EditorSceneTexturePickerText;\n candidateValue?: 'assetId' | 'url';\n}): EditorSceneTexturePickerControlOptions {\n const currentTexture = input.currentTexture ?? findEditorSceneInspectorTextureAsset(input.textureAssets, input.currentValue);\n const candidateValue = input.candidateValue ?? 'url';\n const candidateTextures = (input.textureAssets ?? []).filter(isEditorSceneMaterialTextureAsset);\n return {\n pickerKind: 'texture',\n pickerTitle: input.pickerText.texturePickerTitle,\n actionLabel: input.pickerText.replace,\n placeholder: input.pickerText.inheritNone,\n currentLabel: currentTexture?.label ?? (input.currentValue ? input.currentValue : input.pickerText.inheritNone),\n currentMeta: currentTexture?.meta ?? (input.currentValue ? input.currentValue : input.pickerText.summaryInherit),\n currentPreview: currentTexture ? createEditorSceneTextureAssetPreview(currentTexture) : undefined,\n candidates: [\n {\n label: input.pickerText.inheritNone,\n value: '',\n meta: input.pickerText.summaryInherit,\n },\n ...candidateTextures.map(texture => ({\n label: texture.label,\n value: candidateValue === 'assetId' ? texture.id : texture.url,\n meta: texture.meta ?? texture.id,\n kind: 'texture' as const,\n preview: createEditorSceneTextureAssetPreview(texture),\n })),\n ],\n };\n}\n\nfunction isEditorSceneMaterialTextureAsset(texture: EditorSceneInspectorTextureAsset): boolean {\n if (texture.capabilities?.materialTexture === true) return true;\n if (texture.capabilities?.materialTexture === false) return false;\n return texture.usage !== 'environment';\n}\n\nexport function createEditorSceneMaterialBrowserAssetItems<\n TMaterialAsset extends EditorSceneMaterialAsset = EditorSceneMaterialAsset,\n>(\n document: Pick<EditorSceneMaterialDocument<EditorSceneMaterialGameObject, TMaterialAsset>, 'scene' | 'assets'>,\n): Array<EditorSceneMaterialBrowserAssetItem<NonNullable<TMaterialAsset['profile']>>> {\n return materialBindingInternals.createBrowserAssetItems(\n document,\n materialBindingInternals.createUsageIndex(document),\n );\n}\n\nexport function isEditorSceneMaterialAssetReadonlyForInspector(\n materialAsset: EditorSceneMaterialAsset | null | undefined,\n defaultMaterialAssetIds: readonly string[] = [],\n): boolean {\n return isReadonlyEditorSceneMaterialAsset(materialAsset, defaultMaterialAssetIds);\n}\n\nexport function createEditorSceneMaterialAssetFieldInspectorPropertyInput<\n TDocument,\n TMaterialAsset extends EditorSceneMaterialAsset = EditorSceneMaterialAsset,\n>(\n input: EditorSceneMaterialAssetFieldInspectorPropertyInput<TDocument, TMaterialAsset>,\n): Omit<InspectorProperty<TDocument>, 'validate' | 'coerce'> {\n const pathPrefix = input.pathPrefix ?? EDITOR_SCENE_MATERIAL_ASSET_FIELD_PATH_PREFIX;\n return {\n path: `${pathPrefix}${input.materialAsset.id}.${input.fieldPath}`,\n label: input.label,\n valueType: input.valueType,\n control: input.control,\n value: input.value,\n readOnly: false,\n persistence: 'document',\n commitMode: input.commitMode,\n order: input.order,\n tooltip: input.tooltip,\n tags: input.tags ?? ['ArtistMaterial', 'MaterialAsset'],\n document: input.document,\n };\n}\n\nexport function isEditorSceneDuplicateMaterialAssetPickerValue(value: unknown): boolean {\n return typeof value === 'string' && value.startsWith(EDITOR_SCENE_DUPLICATE_MATERIAL_ASSET_VALUE_PREFIX);\n}\n"]}
@@ -24,4 +24,11 @@ export type EditorSceneAssetMeshSelectionTarget = {
24
24
  };
25
25
  export declare function createArtistMaterialInspectorSections(document: EditorSceneMaterialDocument, gameObject: EditorSceneMaterialGameObject, nodeKind: EditorSceneNodeKind, context: EditorSceneMaterialInspectorContext | undefined, services: MaterialInspectorServices): InspectorSection<EditorSceneMaterialDocument>[];
26
26
  export declare function createEditorSceneAssetMeshInspectorSections(document: EditorSceneMaterialDocument, target: EditorSceneAssetMeshSelectionTarget, context?: EditorSceneMaterialInspectorContext): InspectorSection<EditorSceneMaterialDocument>[];
27
+ declare function createArtistMaterialInspectorSectionsWithCachedUsage(document: EditorSceneMaterialDocument, gameObject: EditorSceneMaterialGameObject, nodeKind: EditorSceneNodeKind, context: EditorSceneMaterialInspectorContext | undefined, services: MaterialInspectorServices): InspectorSection<EditorSceneMaterialDocument>[];
28
+ declare function createEditorSceneAssetMeshInspectorSectionsWithCachedUsage(document: EditorSceneMaterialDocument, target: EditorSceneAssetMeshSelectionTarget, context?: EditorSceneMaterialInspectorContext): InspectorSection<EditorSceneMaterialDocument>[];
29
+ declare const sceneInspectorInternals: {
30
+ createArtistMaterialInspectorSectionsWithCachedUsage: typeof createArtistMaterialInspectorSectionsWithCachedUsage;
31
+ createEditorSceneAssetMeshInspectorSectionsWithCachedUsage: typeof createEditorSceneAssetMeshInspectorSectionsWithCachedUsage;
32
+ };
33
+ export default sceneInspectorInternals;
27
34
  //# sourceMappingURL=scene-inspector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scene-inspector.d.ts","sourceRoot":"","sources":["../../src/material-binding/scene-inspector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,wBAAwB,CAAC;AAIhC,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,mBAAmB,CAAC;AAa3B,OAAO,EACL,4CAA4C,EAC5C,4CAA4C,EAC5C,uCAAuC,EACvC,iCAAiC,EAEjC,oCAAoC,EACrC,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAKL,kCAAkC,EAEnC,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAEL,8BAA8B,EAC9B,mCAAmC,EACnC,KAAK,+BAA+B,EACpC,KAAK,2BAA2B,EACjC,MAAM,QAAQ,CAAC;AAIhB,OAAO,KAAK,EACV,2BAA2B,EAC3B,6BAA6B,EAC7B,mCAAmC,EACnC,iCAAiC,EAClC,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,4CAA4C,EAC5C,uCAAuC,EACvC,4CAA4C,EAC5C,iCAAiC,EACjC,kCAAkC,EAClC,8BAA8B,EAC9B,mCAAmC,EACnC,oCAAoC,EACpC,KAAK,+BAA+B,EACpC,KAAK,2BAA2B,GACjC,CAAC;AAEF,wBAAgB,0CAA0C,CACxD,QAAQ,EAAE,2BAA2B,EACrC,EAAE,EAAE,MAAM,GACT,mCAAmC,GAAG,IAAI,CAsB5C;AAED,wBAAgB,kCAAkC,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGxE;AAED,MAAM,WAAW,yBAAyB;IACxC,+BAA+B,EAAE,wCAAwC,CAAC;CAC3E;AAED,KAAK,wCAAwC,GAAG,CAC9C,QAAQ,EAAE,2BAA2B,GAAG,IAAI,EAC5C,QAAQ,EAAE,mBAAmB,EAC7B,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC,2BAA2B,CAAC,EAAE,UAAU,GAAG,aAAa,GAAG,UAAU,CAAC,KACpG,iBAAiB,CAAC,2BAA2B,CAAC,CAAC;AAEpD,MAAM,MAAM,mCAAmC,GAAG;IAChD,EAAE,EAAE,MAAM,CAAC;IACX,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,6BAA6B,CAAC;IAC1C,IAAI,EAAE,iCAAiC,CAAC;CACzC,CAAC;AAEF,wBAAgB,qCAAqC,CACnD,QAAQ,EAAE,2BAA2B,EACrC,UAAU,EAAE,6BAA6B,EACzC,QAAQ,EAAE,mBAAmB,EAC7B,OAAO,EAAE,mCAAmC,YAAK,EACjD,QAAQ,EAAE,yBAAyB,GAClC,gBAAgB,CAAC,2BAA2B,CAAC,EAAE,CAqDjD;AAED,wBAAgB,2CAA2C,CACzD,QAAQ,EAAE,2BAA2B,EACrC,MAAM,EAAE,mCAAmC,EAC3C,OAAO,GAAE,mCAAwC,GAChD,gBAAgB,CAAC,2BAA2B,CAAC,EAAE,CAyCjD"}
1
+ {"version":3,"file":"scene-inspector.d.ts","sourceRoot":"","sources":["../../src/material-binding/scene-inspector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,wBAAwB,CAAC;AAIhC,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,mBAAmB,CAAC;AAc3B,OAAO,EAEL,4CAA4C,EAC5C,4CAA4C,EAC5C,uCAAuC,EACvC,iCAAiC,EAEjC,oCAAoC,EACrC,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAIL,kCAAkC,EAEnC,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAEL,8BAA8B,EAC9B,mCAAmC,EACnC,KAAK,+BAA+B,EACpC,KAAK,2BAA2B,EACjC,MAAM,QAAQ,CAAC;AAIhB,OAAO,KAAK,EACV,2BAA2B,EAC3B,6BAA6B,EAC7B,mCAAmC,EACnC,iCAAiC,EAClC,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,4CAA4C,EAC5C,uCAAuC,EACvC,4CAA4C,EAC5C,iCAAiC,EACjC,kCAAkC,EAClC,8BAA8B,EAC9B,mCAAmC,EACnC,oCAAoC,EACpC,KAAK,+BAA+B,EACpC,KAAK,2BAA2B,GACjC,CAAC;AAEF,wBAAgB,0CAA0C,CACxD,QAAQ,EAAE,2BAA2B,EACrC,EAAE,EAAE,MAAM,GACT,mCAAmC,GAAG,IAAI,CAsB5C;AAED,wBAAgB,kCAAkC,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGxE;AAED,MAAM,WAAW,yBAAyB;IACxC,+BAA+B,EAAE,wCAAwC,CAAC;CAC3E;AAED,KAAK,wCAAwC,GAAG,CAC9C,QAAQ,EAAE,2BAA2B,GAAG,IAAI,EAC5C,QAAQ,EAAE,mBAAmB,EAC7B,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC,2BAA2B,CAAC,EAAE,UAAU,GAAG,aAAa,GAAG,UAAU,CAAC,KACpG,iBAAiB,CAAC,2BAA2B,CAAC,CAAC;AAEpD,MAAM,MAAM,mCAAmC,GAAG;IAChD,EAAE,EAAE,MAAM,CAAC;IACX,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,6BAA6B,CAAC;IAC1C,IAAI,EAAE,iCAAiC,CAAC;CACzC,CAAC;AAEF,wBAAgB,qCAAqC,CACnD,QAAQ,EAAE,2BAA2B,EACrC,UAAU,EAAE,6BAA6B,EACzC,QAAQ,EAAE,mBAAmB,EAC7B,OAAO,EAAE,mCAAmC,YAAK,EACjD,QAAQ,EAAE,yBAAyB,GAClC,gBAAgB,CAAC,2BAA2B,CAAC,EAAE,CASjD;AA6ED,wBAAgB,2CAA2C,CACzD,QAAQ,EAAE,2BAA2B,EACrC,MAAM,EAAE,mCAAmC,EAC3C,OAAO,GAAE,mCAAwC,GAChD,gBAAgB,CAAC,2BAA2B,CAAC,EAAE,CAOjD;AAkDD,iBAAS,oDAAoD,CAC3D,QAAQ,EAAE,2BAA2B,EACrC,UAAU,EAAE,6BAA6B,EACzC,QAAQ,EAAE,mBAAmB,EAC7B,OAAO,EAAE,mCAAmC,YAAK,EACjD,QAAQ,EAAE,yBAAyB,GAClC,gBAAgB,CAAC,2BAA2B,CAAC,EAAE,CASjD;AAED,iBAAS,0DAA0D,CACjE,QAAQ,EAAE,2BAA2B,EACrC,MAAM,EAAE,mCAAmC,EAC3C,OAAO,GAAE,mCAAwC,GAChD,gBAAgB,CAAC,2BAA2B,CAAC,EAAE,CAOjD;AAED,QAAA,MAAM,uBAAuB;;;CAG5B,CAAC;AAEF,eAAe,uBAAuB,CAAC"}
@@ -1,9 +1,9 @@
1
1
  import { createEditorSceneReadonlyInspectorProperty, } from '../inspector/index.js';
2
2
  import { readEditorSceneNodeKind, } from '../document/index.js';
3
- import { collectEditorSceneChildMaterialSlots, findEditorSceneMaterialAsset, getEditorSceneSlotMaterialBinding, getEditorSceneSlotMaterialBindingPath, getEditorSceneSlotSelectionKey, hasDetectedModelMaterialSlots, parseEditorSceneAssetMeshSelectionId, } from './binding.js';
3
+ import { default as materialBindingInternals, collectEditorSceneChildMaterialSlots, findEditorSceneMaterialAsset, getEditorSceneSlotMaterialBinding, getEditorSceneSlotMaterialBindingPath, getEditorSceneSlotSelectionKey, hasDetectedModelMaterialSlots, parseEditorSceneAssetMeshSelectionId, } from './binding.js';
4
4
  import { parseEditorSceneMaterialAssetFieldPath, } from './paths.js';
5
- import { createArtistMaterialAssetInspectorProperties, createMaterialAssetSelectorInspectorProperty, createMaterialAssetPickerControlOptions, createTexturePickerControlOptions, findEditorSceneInspectorTextureAssetFromContext as findEditorSceneInspectorTextureAsset, readArtistMaterialTexturePickerValue, } from './asset-fields.js';
6
- import { createArtistMaterialBindingSummary, createChildMaterialBindingInspectorProperties, createChildMaterialBindingSummary, createReadonlyMaterialSlotListInspectorProperties, formatEditorSceneMaterialSlotLabel, hasReadonlyEditorSceneMaterialSlotReimportIssues, } from './slot-inspector.js';
5
+ import { default as materialAssetFieldInternals, createArtistMaterialAssetInspectorProperties, createMaterialAssetSelectorInspectorProperty, createMaterialAssetPickerControlOptions, createTexturePickerControlOptions, findEditorSceneInspectorTextureAssetFromContext as findEditorSceneInspectorTextureAsset, readArtistMaterialTexturePickerValue, } from './asset-fields.js';
6
+ import { default as slotInspectorInternals, createArtistMaterialBindingSummary, createChildMaterialBindingSummary, formatEditorSceneMaterialSlotLabel, hasReadonlyEditorSceneMaterialSlotReimportIssues, } from './slot-inspector.js';
7
7
  import { MATERIAL_LANGUAGE_OPTIONS, getArtistMaterialInspectorText, readArtistMaterialInspectorLanguage, } from './text.js';
8
8
  import { resolveEditorSceneMaterialSlotReimportDiff, } from './reimport.js';
9
9
  export { createArtistMaterialAssetInspectorProperties, createMaterialAssetPickerControlOptions, createMaterialAssetSelectorInspectorProperty, createTexturePickerControlOptions, formatEditorSceneMaterialSlotLabel, getArtistMaterialInspectorText, readArtistMaterialInspectorLanguage, readArtistMaterialTexturePickerValue, };
@@ -38,6 +38,9 @@ export function isEditorSceneAssetMeshWritablePath(path) {
38
38
  || parseEditorSceneMaterialAssetFieldPath(path) != null;
39
39
  }
40
40
  export function createArtistMaterialInspectorSections(document, gameObject, nodeKind, context = {}, services) {
41
+ return createArtistMaterialInspectorSectionsWithUsage(document, gameObject, nodeKind, context, services, materialBindingInternals.createUsageIndex(document));
42
+ }
43
+ function createArtistMaterialInspectorSectionsWithUsage(document, gameObject, nodeKind, context, services, usageIndex) {
41
44
  const sections = [];
42
45
  const language = readArtistMaterialInspectorLanguage(gameObject);
43
46
  const text = getArtistMaterialInspectorText(language);
@@ -57,14 +60,14 @@ export function createArtistMaterialInspectorSections(document, gameObject, node
57
60
  collapsedByDefault: false,
58
61
  properties: [
59
62
  createMaterialLanguageInspectorProperty(nodeKind, text, language, 0, services),
60
- createMaterialAssetSelectorInspectorProperty(document, nodeKind, {
63
+ materialAssetFieldInternals.createSelectorInspectorPropertyWithUsage(document, nodeKind, {
61
64
  path: 'overrides.materialBinding.materialAssetId',
62
65
  label: text.materialCard,
63
66
  value: rootBinding?.materialAssetId ?? '',
64
67
  order: 1,
65
68
  text,
66
69
  currentAsset: rootAsset,
67
- }),
70
+ }, usageIndex),
68
71
  ...createArtistMaterialAssetInspectorProperties(document, rootAsset, text, 10, context),
69
72
  ],
70
73
  });
@@ -72,8 +75,8 @@ export function createArtistMaterialInspectorSections(document, gameObject, node
72
75
  const slotProperties = nodeKind === 'primitive'
73
76
  ? []
74
77
  : hasDetectedSlots || hasReadonlyReimportConflicts
75
- ? createReadonlyMaterialSlotListInspectorProperties(document, gameObject, text)
76
- : createChildMaterialBindingInspectorProperties(document, gameObject, nodeKind, context);
78
+ ? slotInspectorInternals.createReadonlyMaterialSlotListInspectorPropertiesWithUsage(document, gameObject, text, usageIndex)
79
+ : slotInspectorInternals.createChildMaterialBindingInspectorPropertiesWithUsage(document, gameObject, nodeKind, context, usageIndex);
77
80
  if (slotProperties.length > 0) {
78
81
  sections.push({
79
82
  id: 'artistMaterialSlots',
@@ -89,20 +92,23 @@ export function createArtistMaterialInspectorSections(document, gameObject, node
89
92
  return sections;
90
93
  }
91
94
  export function createEditorSceneAssetMeshInspectorSections(document, target, context = {}) {
95
+ return createEditorSceneAssetMeshInspectorSectionsWithUsage(document, target, context, materialBindingInternals.createUsageIndex(document));
96
+ }
97
+ function createEditorSceneAssetMeshInspectorSectionsWithUsage(document, target, context, usageIndex) {
92
98
  const gameObject = target.gameObject;
93
99
  const nodeKind = readEditorSceneNodeKind(gameObject);
94
100
  const text = getArtistMaterialInspectorText(readArtistMaterialInspectorLanguage(gameObject));
95
101
  const binding = getEditorSceneSlotMaterialBinding(gameObject, target.slot);
96
102
  const materialAsset = findEditorSceneMaterialAsset(document, binding?.materialAssetId ?? '');
97
103
  const properties = [
98
- createMaterialAssetSelectorInspectorProperty(document, nodeKind, {
104
+ materialAssetFieldInternals.createSelectorInspectorPropertyWithUsage(document, nodeKind, {
99
105
  path: target.materialBindingPath,
100
106
  label: target.label,
101
107
  value: binding?.materialAssetId ?? '',
102
108
  order: 0,
103
109
  text,
104
110
  currentAsset: materialAsset,
105
- }),
111
+ }, usageIndex),
106
112
  ...createArtistMaterialAssetInspectorProperties(document, materialAsset, text, 10, context),
107
113
  ];
108
114
  return [
@@ -130,6 +136,17 @@ export function createEditorSceneAssetMeshInspectorSections(document, target, co
130
136
  },
131
137
  ];
132
138
  }
139
+ function createArtistMaterialInspectorSectionsWithCachedUsage(document, gameObject, nodeKind, context = {}, services) {
140
+ return createArtistMaterialInspectorSectionsWithUsage(document, gameObject, nodeKind, context, services, materialBindingInternals.getCachedUsageIndex(document));
141
+ }
142
+ function createEditorSceneAssetMeshInspectorSectionsWithCachedUsage(document, target, context = {}) {
143
+ return createEditorSceneAssetMeshInspectorSectionsWithUsage(document, target, context, materialBindingInternals.getCachedUsageIndex(document));
144
+ }
145
+ const sceneInspectorInternals = {
146
+ createArtistMaterialInspectorSectionsWithCachedUsage,
147
+ createEditorSceneAssetMeshInspectorSectionsWithCachedUsage,
148
+ };
149
+ export default sceneInspectorInternals;
133
150
  function createMaterialLanguageInspectorProperty(nodeKind, text, language, order, services) {
134
151
  return services.createDocumentInspectorProperty(null, nodeKind, {
135
152
  path: 'metadata.artistMaterialInspectorLanguage',