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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (335) hide show
  1. package/dist/agent-bridge/capabilities/ui-regions.d.ts.map +1 -1
  2. package/dist/agent-bridge/capabilities/ui-regions.js +16 -0
  3. package/dist/agent-bridge/capabilities/ui-regions.js.map +1 -1
  4. package/dist/build-info.json +46 -46
  5. package/dist/internal/material-preview.d.ts +22 -0
  6. package/dist/internal/material-preview.d.ts.map +1 -0
  7. package/dist/internal/material-preview.js +186 -0
  8. package/dist/internal/material-preview.js.map +1 -0
  9. package/dist/internal/project-model-preview.d.ts +4 -0
  10. package/dist/internal/project-model-preview.d.ts.map +1 -0
  11. package/dist/internal/project-model-preview.js +359 -0
  12. package/dist/internal/project-model-preview.js.map +1 -0
  13. package/dist/local-editor-agent-context.d.ts +12 -1
  14. package/dist/local-editor-agent-context.d.ts.map +1 -1
  15. package/dist/local-editor-agent-context.js +47 -0
  16. package/dist/local-editor-agent-context.js.map +1 -1
  17. package/dist/local-editor-harness.d.ts +15 -2
  18. package/dist/local-editor-harness.d.ts.map +1 -1
  19. package/dist/local-editor-harness.js +326 -28
  20. package/dist/local-editor-harness.js.map +1 -1
  21. package/dist/local-editor-tools.d.ts +1 -0
  22. package/dist/local-editor-tools.d.ts.map +1 -1
  23. package/dist/local-editor-tools.js +3 -0
  24. package/dist/local-editor-tools.js.map +1 -1
  25. package/dist/playable-babylon-rendering.d.ts +8 -7
  26. package/dist/playable-babylon-rendering.d.ts.map +1 -1
  27. package/dist/playable-babylon-rendering.js +77 -32
  28. package/dist/playable-babylon-rendering.js.map +1 -1
  29. package/dist/playable-local-editor-host.d.ts +4 -0
  30. package/dist/playable-local-editor-host.d.ts.map +1 -1
  31. package/dist/playable-local-editor-host.js +27 -0
  32. package/dist/playable-local-editor-host.js.map +1 -1
  33. package/dist/playable-product-projection-preview.d.ts +2 -0
  34. package/dist/playable-product-projection-preview.d.ts.map +1 -1
  35. package/dist/playable-product-projection-preview.js +7 -4
  36. package/dist/playable-product-projection-preview.js.map +1 -1
  37. package/dist/playable-product-scene-capabilities.d.ts.map +1 -1
  38. package/dist/playable-product-scene-capabilities.js +9 -3
  39. package/dist/playable-product-scene-capabilities.js.map +1 -1
  40. package/dist/playable-sdk.d.ts +1 -1
  41. package/dist/playable-sdk.d.ts.map +1 -1
  42. package/dist/playable-sdk.js +1 -1
  43. package/dist/playable-sdk.js.map +1 -1
  44. package/dist/playable-standard-project.d.ts +0 -1
  45. package/dist/playable-standard-project.d.ts.map +1 -1
  46. package/dist/playable-standard-project.js +17 -5
  47. package/dist/playable-standard-project.js.map +1 -1
  48. package/node_modules/@fps-games/babylon-renderer/dist/environment/environment-texture-controller.d.ts +4 -2
  49. package/node_modules/@fps-games/babylon-renderer/dist/environment/environment-texture-controller.d.ts.map +1 -1
  50. package/node_modules/@fps-games/babylon-renderer/dist/environment/environment-texture-controller.js +301 -121
  51. package/node_modules/@fps-games/babylon-renderer/dist/environment/environment-texture-controller.js.map +1 -1
  52. package/node_modules/@fps-games/babylon-renderer/dist/environment/profile.js +5 -4
  53. package/node_modules/@fps-games/babylon-renderer/dist/environment/profile.js.map +1 -1
  54. package/node_modules/@fps-games/babylon-renderer/dist/environment/types.d.ts +4 -4
  55. package/node_modules/@fps-games/babylon-renderer/dist/environment/types.d.ts.map +1 -1
  56. package/node_modules/@fps-games/babylon-renderer/dist/environment/types.js +1 -1
  57. package/node_modules/@fps-games/babylon-renderer/dist/environment/types.js.map +1 -1
  58. package/node_modules/@fps-games/babylon-renderer/dist/game-world-plugin-lifecycle.d.ts +2 -0
  59. package/node_modules/@fps-games/babylon-renderer/dist/game-world-plugin-lifecycle.d.ts.map +1 -1
  60. package/node_modules/@fps-games/babylon-renderer/dist/game-world-plugin-lifecycle.js +12 -1
  61. package/node_modules/@fps-games/babylon-renderer/dist/game-world-plugin-lifecycle.js.map +1 -1
  62. package/node_modules/@fps-games/babylon-renderer/dist/plugin.d.ts +6 -3
  63. package/node_modules/@fps-games/babylon-renderer/dist/plugin.d.ts.map +1 -1
  64. package/node_modules/@fps-games/babylon-renderer/dist/plugin.js +100 -39
  65. package/node_modules/@fps-games/babylon-renderer/dist/plugin.js.map +1 -1
  66. package/node_modules/@fps-games/babylon-renderer/dist/reference.d.ts +1 -3
  67. package/node_modules/@fps-games/babylon-renderer/dist/reference.d.ts.map +1 -1
  68. package/node_modules/@fps-games/babylon-renderer/dist/reference.js.map +1 -1
  69. package/node_modules/@fps-games/babylon-renderer/package.json +11 -8
  70. package/node_modules/@fps-games/editor-babylon/dist/marker-overlay.js +24 -0
  71. package/node_modules/@fps-games/editor-babylon/dist/marker-overlay.js.map +1 -1
  72. package/node_modules/@fps-games/editor-babylon/dist/projection.d.ts +10 -1
  73. package/node_modules/@fps-games/editor-babylon/dist/projection.d.ts.map +1 -1
  74. package/node_modules/@fps-games/editor-babylon/dist/projection.js +96 -1
  75. package/node_modules/@fps-games/editor-babylon/dist/projection.js.map +1 -1
  76. package/node_modules/@fps-games/editor-babylon/dist/scene-view-spatial-overlay-controller.d.ts.map +1 -1
  77. package/node_modules/@fps-games/editor-babylon/dist/scene-view-spatial-overlay-controller.js +85 -22
  78. package/node_modules/@fps-games/editor-babylon/dist/scene-view-spatial-overlay-controller.js.map +1 -1
  79. package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.d.ts +2 -0
  80. package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.d.ts.map +1 -1
  81. package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.js +150 -4
  82. package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.js.map +1 -1
  83. package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.d.ts +1 -0
  84. package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.d.ts.map +1 -1
  85. package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.js +249 -15
  86. package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.js.map +1 -1
  87. package/node_modules/@fps-games/editor-babylon/dist/types.d.ts +1 -1
  88. package/node_modules/@fps-games/editor-babylon/dist/types.d.ts.map +1 -1
  89. package/node_modules/@fps-games/editor-babylon/dist/types.js.map +1 -1
  90. package/node_modules/@fps-games/editor-babylon/package.json +6 -6
  91. package/node_modules/@fps-games/editor-browser/dist/index.d.ts +5 -0
  92. package/node_modules/@fps-games/editor-browser/dist/index.d.ts.map +1 -1
  93. package/node_modules/@fps-games/editor-browser/dist/index.js +3 -0
  94. package/node_modules/@fps-games/editor-browser/dist/index.js.map +1 -1
  95. package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-browser-continuity.d.ts +35 -0
  96. package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-browser-continuity.d.ts.map +1 -0
  97. package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-browser-continuity.js +136 -0
  98. package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-browser-continuity.js.map +1 -0
  99. package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-filesystem.d.ts +46 -0
  100. package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-filesystem.d.ts.map +1 -0
  101. package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-filesystem.js +283 -0
  102. package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-filesystem.js.map +1 -0
  103. package/node_modules/@fps-games/editor-browser/dist/local-editor-preview-cleanup-registry.d.ts +12 -0
  104. package/node_modules/@fps-games/editor-browser/dist/local-editor-preview-cleanup-registry.d.ts.map +1 -0
  105. package/node_modules/@fps-games/editor-browser/dist/local-editor-preview-cleanup-registry.js +67 -0
  106. package/node_modules/@fps-games/editor-browser/dist/local-editor-preview-cleanup-registry.js.map +1 -0
  107. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-open.d.ts +6 -0
  108. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-open.d.ts.map +1 -0
  109. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-open.js +9 -0
  110. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-open.js.map +1 -0
  111. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-preview.d.ts +7 -0
  112. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-preview.d.ts.map +1 -0
  113. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-preview.js +20 -0
  114. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-preview.js.map +1 -0
  115. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-media-thumbnail-cache.d.ts +9 -0
  116. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-media-thumbnail-cache.d.ts.map +1 -0
  117. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-media-thumbnail-cache.js +219 -0
  118. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-media-thumbnail-cache.js.map +1 -0
  119. package/node_modules/@fps-games/editor-browser/dist/local-editor-tool-presentation.d.ts +14 -0
  120. package/node_modules/@fps-games/editor-browser/dist/local-editor-tool-presentation.d.ts.map +1 -0
  121. package/node_modules/@fps-games/editor-browser/dist/local-editor-tool-presentation.js +42 -0
  122. package/node_modules/@fps-games/editor-browser/dist/local-editor-tool-presentation.js.map +1 -0
  123. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-asset-kind.d.ts.map +1 -1
  124. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-asset-kind.js +2 -0
  125. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-asset-kind.js.map +1 -1
  126. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-console.d.ts +27 -0
  127. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-console.d.ts.map +1 -0
  128. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-console.js +288 -0
  129. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-console.js.map +1 -0
  130. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.d.ts +1 -1
  131. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.d.ts.map +1 -1
  132. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.js +29 -0
  133. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.js.map +1 -1
  134. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.d.ts +20 -1
  135. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.d.ts.map +1 -1
  136. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.js +321 -60
  137. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.js.map +1 -1
  138. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-prefab-stage.d.ts +2 -1
  139. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-prefab-stage.d.ts.map +1 -1
  140. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-prefab-stage.js +4 -2
  141. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-prefab-stage.js.map +1 -1
  142. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.d.ts +63 -3
  143. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.d.ts.map +1 -1
  144. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.js.map +1 -1
  145. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-workbench.d.ts +9 -0
  146. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-workbench.d.ts.map +1 -1
  147. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-workbench.js +88 -16
  148. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-workbench.js.map +1 -1
  149. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.d.ts +2 -1
  150. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.d.ts.map +1 -1
  151. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.js +1463 -356
  152. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.js.map +1 -1
  153. package/node_modules/@fps-games/editor-browser/dist/local-editor-viewport-orientation.d.ts +13 -0
  154. package/node_modules/@fps-games/editor-browser/dist/local-editor-viewport-orientation.d.ts.map +1 -0
  155. package/node_modules/@fps-games/editor-browser/dist/local-editor-viewport-orientation.js +15 -0
  156. package/node_modules/@fps-games/editor-browser/dist/local-editor-viewport-orientation.js.map +1 -0
  157. package/node_modules/@fps-games/editor-browser/package.json +7 -7
  158. package/node_modules/@fps-games/editor-core/dist/editor-tools.d.ts +1 -0
  159. package/node_modules/@fps-games/editor-core/dist/editor-tools.d.ts.map +1 -1
  160. package/node_modules/@fps-games/editor-core/dist/editor-tools.js +3 -1
  161. package/node_modules/@fps-games/editor-core/dist/editor-tools.js.map +1 -1
  162. package/node_modules/@fps-games/editor-core/dist/viewport-tools.d.ts +11 -2
  163. package/node_modules/@fps-games/editor-core/dist/viewport-tools.d.ts.map +1 -1
  164. package/node_modules/@fps-games/editor-core/dist/viewport-tools.js +12 -1
  165. package/node_modules/@fps-games/editor-core/dist/viewport-tools.js.map +1 -1
  166. package/node_modules/@fps-games/editor-core/package.json +6 -6
  167. package/node_modules/@fps-games/editor-forge-play/package.json +2 -2
  168. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/generated-module.d.ts.map +1 -1
  169. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/generated-module.js +10 -3
  170. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/generated-module.js.map +1 -1
  171. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/index.d.ts +2 -1
  172. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/index.d.ts.map +1 -1
  173. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/index.js +1 -1
  174. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/index.js.map +1 -1
  175. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/catalog.d.ts +1 -0
  176. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/catalog.d.ts.map +1 -1
  177. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/catalog.js +5 -0
  178. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/catalog.js.map +1 -1
  179. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/index.d.ts +1 -1
  180. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/index.d.ts.map +1 -1
  181. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/index.js +1 -1
  182. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/index.js.map +1 -1
  183. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/handler.d.ts.map +1 -1
  184. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/handler.js +15 -1
  185. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/handler.js.map +1 -1
  186. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/routes.d.ts.map +1 -1
  187. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/routes.js +3 -0
  188. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/routes.js.map +1 -1
  189. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/types.d.ts +6 -1
  190. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/types.d.ts.map +1 -1
  191. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/types.js.map +1 -1
  192. package/node_modules/@fps-games/editor-playable-sdk/dist/index.d.ts +1 -0
  193. package/node_modules/@fps-games/editor-playable-sdk/dist/index.d.ts.map +1 -1
  194. package/node_modules/@fps-games/editor-playable-sdk/dist/index.js +1 -0
  195. package/node_modules/@fps-games/editor-playable-sdk/dist/index.js.map +1 -1
  196. package/node_modules/@fps-games/editor-playable-sdk/dist/package-resolution/aliases.d.ts +1 -1
  197. package/node_modules/@fps-games/editor-playable-sdk/dist/package-resolution/aliases.d.ts.map +1 -1
  198. package/node_modules/@fps-games/editor-playable-sdk/dist/package-resolution/aliases.js +4 -0
  199. package/node_modules/@fps-games/editor-playable-sdk/dist/package-resolution/aliases.js.map +1 -1
  200. package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-source.d.ts +4 -0
  201. package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-source.d.ts.map +1 -1
  202. package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-source.js +10 -1
  203. package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-source.js.map +1 -1
  204. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/index.d.ts +4 -0
  205. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/index.d.ts.map +1 -0
  206. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/index.js +4 -0
  207. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/index.js.map +1 -0
  208. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/protocol.d.ts +4 -0
  209. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/protocol.d.ts.map +1 -0
  210. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/protocol.js +86 -0
  211. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/protocol.js.map +1 -0
  212. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/support.d.ts +9 -0
  213. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/support.d.ts.map +1 -0
  214. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/support.js +76 -0
  215. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/support.js.map +1 -0
  216. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/types.d.ts +34 -0
  217. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/types.d.ts.map +1 -0
  218. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/types.js +2 -0
  219. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/types.js.map +1 -0
  220. package/node_modules/@fps-games/editor-playable-sdk/dist/rendering-profile/panel.js +4 -4
  221. package/node_modules/@fps-games/editor-playable-sdk/dist/rendering-profile/panel.js.map +1 -1
  222. package/node_modules/@fps-games/editor-playable-sdk/dist/rendering-profile/types.d.ts +2 -1
  223. package/node_modules/@fps-games/editor-playable-sdk/dist/rendering-profile/types.d.ts.map +1 -1
  224. package/node_modules/@fps-games/editor-playable-sdk/dist/rendering-profile/types.js.map +1 -1
  225. package/node_modules/@fps-games/editor-playable-sdk/dist/runtime-preview/assets.js +1 -5
  226. package/node_modules/@fps-games/editor-playable-sdk/dist/runtime-preview/assets.js.map +1 -1
  227. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.d.ts +4 -0
  228. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.d.ts.map +1 -1
  229. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.js +40 -0
  230. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.js.map +1 -1
  231. package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/inspectors.js +53 -0
  232. package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/inspectors.js.map +1 -1
  233. package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/types.d.ts +2 -0
  234. package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/types.d.ts.map +1 -1
  235. package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/types.js.map +1 -1
  236. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.d.ts +1 -0
  237. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.d.ts.map +1 -1
  238. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.js +1 -0
  239. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.js.map +1 -1
  240. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.d.ts +1 -0
  241. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.d.ts.map +1 -1
  242. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.js +94 -0
  243. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.js.map +1 -1
  244. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-file-handle.d.ts +14 -0
  245. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-file-handle.d.ts.map +1 -0
  246. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-file-handle.js +101 -0
  247. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-file-handle.js.map +1 -0
  248. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-files.d.ts +23 -0
  249. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-files.d.ts.map +1 -0
  250. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-files.js +180 -0
  251. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-files.js.map +1 -0
  252. package/node_modules/@fps-games/editor-playable-sdk/package.json +6 -6
  253. package/node_modules/@fps-games/editor-protocol/dist/agent.d.ts +23 -3
  254. package/node_modules/@fps-games/editor-protocol/dist/agent.d.ts.map +1 -1
  255. package/node_modules/@fps-games/editor-protocol/dist/agent.js.map +1 -1
  256. package/node_modules/@fps-games/editor-protocol/package.json +2 -2
  257. package/node_modules/@fps-games/editor-tooling/package.json +3 -3
  258. package/node_modules/@fps-games/editor-ui/dist/editor-ui-theme.d.ts.map +1 -1
  259. package/node_modules/@fps-games/editor-ui/dist/editor-ui-theme.js +103 -10
  260. package/node_modules/@fps-games/editor-ui/dist/editor-ui-theme.js.map +1 -1
  261. package/node_modules/@fps-games/editor-ui/package.json +1 -1
  262. package/node_modules/@fps-games/playable-assets/dist/identity.d.ts +1 -0
  263. package/node_modules/@fps-games/playable-assets/dist/identity.d.ts.map +1 -1
  264. package/node_modules/@fps-games/playable-assets/dist/identity.js +1 -1
  265. package/node_modules/@fps-games/playable-assets/dist/identity.js.map +1 -1
  266. package/node_modules/@fps-games/playable-assets/dist/index.d.ts +1 -0
  267. package/node_modules/@fps-games/playable-assets/dist/index.d.ts.map +1 -1
  268. package/node_modules/@fps-games/playable-assets/dist/index.js +1 -0
  269. package/node_modules/@fps-games/playable-assets/dist/index.js.map +1 -1
  270. package/node_modules/@fps-games/playable-assets/dist/resource-resolver.d.ts +46 -0
  271. package/node_modules/@fps-games/playable-assets/dist/resource-resolver.d.ts.map +1 -0
  272. package/node_modules/@fps-games/playable-assets/dist/resource-resolver.js +109 -0
  273. package/node_modules/@fps-games/playable-assets/dist/resource-resolver.js.map +1 -0
  274. package/node_modules/@fps-games/playable-assets/package.json +1 -1
  275. package/node_modules/@fps-games/playable-contracts/package.json +1 -1
  276. package/node_modules/@fps-games/playable-rendering/package.json +2 -2
  277. package/node_modules/@fps-games/playable-runtime/dist/runtime.d.ts.map +1 -1
  278. package/node_modules/@fps-games/playable-runtime/dist/runtime.js +5 -0
  279. package/node_modules/@fps-games/playable-runtime/dist/runtime.js.map +1 -1
  280. package/node_modules/@fps-games/playable-runtime/dist/types.d.ts +2 -0
  281. package/node_modules/@fps-games/playable-runtime/dist/types.d.ts.map +1 -1
  282. package/node_modules/@fps-games/playable-runtime/dist/types.js.map +1 -1
  283. package/node_modules/@fps-games/playable-runtime/package.json +12 -12
  284. package/node_modules/@fps-games/playable-runtime-data/package.json +4 -4
  285. package/node_modules/@fps-games/playable-scene/package.json +2 -2
  286. package/node_modules/@fps-games/plugin-api/package.json +1 -1
  287. package/node_modules/@fps-games/plugin-assets/dist/reference.d.ts.map +1 -1
  288. package/node_modules/@fps-games/plugin-assets/dist/reference.js +11 -4
  289. package/node_modules/@fps-games/plugin-assets/dist/reference.js.map +1 -1
  290. package/node_modules/@fps-games/plugin-assets/dist/renderer.d.ts +8 -0
  291. package/node_modules/@fps-games/plugin-assets/dist/renderer.d.ts.map +1 -0
  292. package/node_modules/@fps-games/plugin-assets/dist/renderer.js +13 -0
  293. package/node_modules/@fps-games/plugin-assets/dist/renderer.js.map +1 -0
  294. package/node_modules/@fps-games/plugin-assets/dist/resources.d.ts +12 -0
  295. package/node_modules/@fps-games/plugin-assets/dist/resources.d.ts.map +1 -0
  296. package/node_modules/@fps-games/plugin-assets/dist/resources.js +8 -0
  297. package/node_modules/@fps-games/plugin-assets/dist/resources.js.map +1 -0
  298. package/node_modules/@fps-games/plugin-assets/dist/runtime.d.ts +2 -1
  299. package/node_modules/@fps-games/plugin-assets/dist/runtime.d.ts.map +1 -1
  300. package/node_modules/@fps-games/plugin-assets/dist/runtime.js +3 -0
  301. package/node_modules/@fps-games/plugin-assets/dist/runtime.js.map +1 -1
  302. package/node_modules/@fps-games/plugin-assets/dist/version.d.ts +1 -1
  303. package/node_modules/@fps-games/plugin-assets/dist/version.js +1 -1
  304. package/node_modules/@fps-games/plugin-assets/dist/version.js.map +1 -1
  305. package/node_modules/@fps-games/plugin-assets/package.json +32 -8
  306. package/node_modules/@fps-games/plugin-hierarchy/dist/version.d.ts +1 -1
  307. package/node_modules/@fps-games/plugin-hierarchy/dist/version.js +1 -1
  308. package/node_modules/@fps-games/plugin-hierarchy/dist/version.js.map +1 -1
  309. package/node_modules/@fps-games/plugin-hierarchy/package.json +5 -5
  310. package/node_modules/@fps-games/plugin-host/package.json +2 -2
  311. package/node_modules/@fps-games/plugin-markers/dist/version.d.ts +1 -1
  312. package/node_modules/@fps-games/plugin-markers/dist/version.js +1 -1
  313. package/node_modules/@fps-games/plugin-markers/dist/version.js.map +1 -1
  314. package/node_modules/@fps-games/plugin-markers/package.json +5 -5
  315. package/node_modules/@fps-games/plugin-materials/dist/version.d.ts +1 -1
  316. package/node_modules/@fps-games/plugin-materials/dist/version.js +1 -1
  317. package/node_modules/@fps-games/plugin-materials/dist/version.js.map +1 -1
  318. package/node_modules/@fps-games/plugin-materials/package.json +5 -5
  319. package/node_modules/@fps-games/plugin-rendering/dist/version.d.ts +1 -1
  320. package/node_modules/@fps-games/plugin-rendering/dist/version.js +1 -1
  321. package/node_modules/@fps-games/plugin-rendering/dist/version.js.map +1 -1
  322. package/node_modules/@fps-games/plugin-rendering/package.json +5 -5
  323. package/node_modules/@fps-games/plugin-scene/dist/version.d.ts +1 -1
  324. package/node_modules/@fps-games/plugin-scene/dist/version.js +1 -1
  325. package/node_modules/@fps-games/plugin-scene/dist/version.js.map +1 -1
  326. package/node_modules/@fps-games/plugin-scene/package.json +5 -5
  327. package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.d.ts +1 -1
  328. package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.js +1 -1
  329. package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.js.map +1 -1
  330. package/node_modules/@fps-games/plugin-shadow-map-experiment/package.json +5 -5
  331. package/node_modules/@fps-games/plugin-shadows/dist/version.d.ts +1 -1
  332. package/node_modules/@fps-games/plugin-shadows/dist/version.js +1 -1
  333. package/node_modules/@fps-games/plugin-shadows/dist/version.js.map +1 -1
  334. package/node_modules/@fps-games/plugin-shadows/package.json +7 -7
  335. package/package.json +24 -22
@@ -1,7 +1,15 @@
1
1
  import { type EditorUiMount, type EditorUiLayerHost } from '@fps-games/editor-ui';
2
2
  import type { LocalEditorAssetBrowserTab, LocalEditorBottomDockTab, LocalEditorBrowserInspectorConflictStrategy, LocalEditorBrowserInspectorControlBindingOptions, LocalEditorBrowserInspectorControlRegistration, LocalEditorBrowserInspectorControlRenderContext, LocalEditorBrowserInspectorEffectMode, LocalEditorBrowserInspectorObject, LocalEditorBrowserInspectorProperty, LocalEditorBrowserInspectorSection, LocalEditorBrowserUiAssetItem, LocalEditorBrowserUiState, LocalEditorRightDockTab, LocalEditorWorkbenchPanelDescriptor } from './local-editor-ui-types';
3
+ import { type LocalEditorAssetFilesystemViewMode } from './local-editor-asset-filesystem';
3
4
  export declare function registerInspectorUiMount<T extends EditorUiMount>(mount: T): T;
4
5
  export declare function disposeInspectorPanelUi(panel: HTMLElement): void;
6
+ export type LocalEditorAssetBrowserViewMode = LocalEditorAssetFilesystemViewMode;
7
+ export interface LocalEditorAssetBrowserViewState {
8
+ expandedFolderPaths?: ReadonlySet<string>;
9
+ folderPath?: string;
10
+ viewMode?: LocalEditorAssetBrowserViewMode;
11
+ selectedEntryPath?: string | null;
12
+ }
5
13
  export type LocalEditorAssetPreviewVariant = 'list' | 'grid' | 'modal';
6
14
  export interface LocalEditorBrowserInspectorRenderOptions<TDocument = unknown> {
7
15
  title?: string;
@@ -13,7 +21,8 @@ export interface LocalEditorBrowserInspectorRenderOptions<TDocument = unknown> {
13
21
  lockedVectorGroups?: ReadonlySet<string>;
14
22
  }
15
23
  export declare function renderBottomDockPanel<TDocument>(doc: Document, panel: HTMLElement, state: LocalEditorBrowserUiState<TDocument>, activeTab: LocalEditorBottomDockTab, activeAssetBrowserTab?: LocalEditorAssetBrowserTab): void;
16
- export declare function renderWorkbenchBottomDockPanel<TDocument>(doc: Document, panel: HTMLElement, state: LocalEditorBrowserUiState<TDocument>, activeTab: LocalEditorBottomDockTab, panels?: LocalEditorWorkbenchPanelDescriptor[], activeAssetBrowserTab?: LocalEditorAssetBrowserTab): void;
24
+ export declare function renderWorkbenchBottomDockPanel<TDocument>(doc: Document, panel: HTMLElement, state: LocalEditorBrowserUiState<TDocument>, activeTab: LocalEditorBottomDockTab, panels?: LocalEditorWorkbenchPanelDescriptor[], activeAssetBrowserTab?: LocalEditorAssetBrowserTab, assetBrowserView?: LocalEditorAssetBrowserViewState): void;
25
+ export declare function syncLocalEditorAssetBrowserEffectiveFolderPath(panel: Pick<HTMLElement, 'dataset'>, content: Pick<HTMLElement, 'dataset'>): void;
17
26
  export declare function renderWorkbenchRightDockTabs(doc: Document, panel: HTMLElement, activeTab: LocalEditorRightDockTab, panels?: LocalEditorWorkbenchPanelDescriptor[]): void;
18
27
  export declare function renderMarkerPanel<TDocument>(doc: Document, panel: HTMLElement, state: LocalEditorBrowserUiState<TDocument>): void;
19
28
  export declare function shouldShowPrefabModelAddAction<TDocument>(state: LocalEditorBrowserUiState<TDocument>, asset: LocalEditorBrowserUiAssetItem): boolean;
@@ -21,6 +30,16 @@ export declare function renderWorkbenchLeftDockTabs(doc: Document, panel: HTMLEl
21
30
  export declare function renderRenderingPanel<TDocument>(doc: Document, panel: HTMLElement, state: LocalEditorBrowserUiState<TDocument>, options?: {
22
31
  layerHost?: EditorUiLayerHost;
23
32
  }): void;
33
+ export declare function resolveLocalEditorAssetBrowserTypeOptionTitle(title: string, itemCount: number, truncated: boolean): string;
34
+ export declare function resolveLocalEditorAssetBrowserFolderTitle(label: string, descendantItemCount: number, truncated: boolean): string;
35
+ export declare function resolveLocalEditorAssetBrowserCountLabel(input: {
36
+ matchingCount: number;
37
+ normalizedFilter: string;
38
+ resultLimited: boolean;
39
+ truncated: boolean;
40
+ typeLabel: string | null;
41
+ visibleCount: number;
42
+ }): string;
24
43
  export declare function createAssetPreviewElement(doc: Document, asset: LocalEditorBrowserUiAssetItem, variant: LocalEditorAssetPreviewVariant): HTMLElement;
25
44
  export declare function renderInspectorPanel<TDocument>(doc: Document, panel: HTMLElement, state: LocalEditorBrowserUiState<TDocument>, filter?: string, options?: LocalEditorBrowserInspectorRenderOptions<TDocument>): void;
26
45
  export type LocalEditorBrowserInspectorAccessMode = 'editable' | 'mixed' | 'readonly' | 'runtime';
@@ -1 +1 @@
1
- {"version":3,"file":"local-editor-ui-panels.d.ts","sourceRoot":"","sources":["../src/local-editor-ui-panels.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"local-editor-ui-panels.d.ts","sourceRoot":"","sources":["../src/local-editor-ui-panels.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ import { createBadge, createAssetList, createDockTab, createEditorInputStyle, cr
4
4
  import { configureLocalEditorDockPanelContent, createLocalEditorDockPanelViewport, renderLocalEditorDockTabStrip, } from './local-editor-ui-dock-panel.js';
5
5
  import { clearElement, createButton, toTitle } from './local-editor-ui-shared.js';
6
6
  import { resolveLocalEditorAssetBrowserTab, resolveLocalEditorBrowserAssetKind, } from './local-editor-ui-asset-kind.js';
7
+ import { createLocalEditorAssetFilesystemSnapshot, filterLocalEditorAssetFilesystemEntries, resolveLocalEditorAssetFilesystemBreadcrumbs, resolveLocalEditorAssetFilesystemEntryTab, resolveLocalEditorAssetFilesystemExistingFolderPath, resolveLocalEditorAssetFilesystemParentPath, resolveLocalEditorAssetFilesystemVisibleFolders, resolveLocalEditorProjectMediaThumbnailCacheKey, resolveLocalEditorProjectMediaThumbnailKind, } from './local-editor-asset-filesystem.js';
7
8
  import { createLocalEditorBrowserInspectorVectorCopyPayload, } from './local-editor-inspector-clipboard.js';
8
9
  import { resolveLocalEditorBrowserInspectorVectorGroupAxisFromPropertyPath, resolveLocalEditorBrowserInspectorVectorGroupPathFromProperties, } from './local-editor-inspector-groups.js';
9
10
  const inspectorUiMounts = new WeakMap();
@@ -67,6 +68,7 @@ const ASSET_BROWSER_TABS = [
67
68
  { id: 'prefabs', label: '预制体', title: '显示预制体资产' },
68
69
  { id: 'materials', label: '材质', title: '显示项目材质资产' },
69
70
  { id: 'textures', label: '贴图', title: '显示贴图资产' },
71
+ { id: 'audio', label: '音频', title: '显示音频资产' },
70
72
  ];
71
73
  export function renderBottomDockPanel(doc, panel, state, activeTab, activeAssetBrowserTab = 'all') {
72
74
  clearElement(panel);
@@ -76,7 +78,7 @@ export function renderBottomDockPanel(doc, panel, state, activeTab, activeAssetB
76
78
  else
77
79
  renderAssetBrowserContent(doc, panel, state, 'list', activeAssetBrowserTab);
78
80
  }
79
- export function renderWorkbenchBottomDockPanel(doc, panel, state, activeTab, panels = [], activeAssetBrowserTab = 'all') {
81
+ export function renderWorkbenchBottomDockPanel(doc, panel, state, activeTab, panels = [], activeAssetBrowserTab = 'all', assetBrowserView = {}) {
80
82
  clearElement(panel);
81
83
  const tabHeader = doc.createElement('div');
82
84
  renderLocalEditorDockTabStrip(doc, {
@@ -97,10 +99,21 @@ export function renderWorkbenchBottomDockPanel(doc, panel, state, activeTab, pan
97
99
  content.dataset.editorPanelId = activeTab;
98
100
  content.style.cssText = 'flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden;padding:8px';
99
101
  panel.appendChild(content);
100
- if (activeTab === 'history')
102
+ if (activeTab === 'history') {
103
+ delete panel.dataset.editorAssetBrowserFolderPath;
101
104
  renderHistoryPanel(doc, content, state.session?.history ?? null);
105
+ }
106
+ else {
107
+ renderAssetBrowserContent(doc, content, state, assetBrowserView.viewMode ?? 'grid', activeAssetBrowserTab, assetBrowserView.folderPath ?? '/', assetBrowserView.selectedEntryPath ?? null, assetBrowserView.expandedFolderPaths ?? new Set(['/']));
108
+ syncLocalEditorAssetBrowserEffectiveFolderPath(panel, content);
109
+ }
110
+ }
111
+ export function syncLocalEditorAssetBrowserEffectiveFolderPath(panel, content) {
112
+ const effectiveFolderPath = content.dataset.editorAssetBrowserFolderPath;
113
+ if (effectiveFolderPath === undefined)
114
+ delete panel.dataset.editorAssetBrowserFolderPath;
102
115
  else
103
- renderAssetBrowserContent(doc, content, state, 'grid', activeAssetBrowserTab);
116
+ panel.dataset.editorAssetBrowserFolderPath = effectiveFolderPath;
104
117
  }
105
118
  function appendDockTabs(doc, panel, activeTab) {
106
119
  const tabs = doc.createElement('div');
@@ -1311,86 +1324,254 @@ function createHeadingLabel(doc, text) {
1311
1324
  label.style.cssText = 'min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap';
1312
1325
  return label;
1313
1326
  }
1314
- function renderAssetBrowserContent(doc, panel, state, variant = 'list', activeTab = 'all') {
1327
+ function renderAssetBrowserContent(doc, panel, state, variant = 'list', activeTab = 'all', requestedFolderPath = '/', selectedEntryPath = null, expandedFolderPaths = new Set(['/'])) {
1315
1328
  configureLocalEditorDockPanelContent(panel);
1316
- const title = doc.createElement('h2');
1317
- title.className = 'fps-editor-ui-panel-title';
1318
- title.appendChild(createLocalEditorIcon(doc, 'asset'));
1319
- title.appendChild(createHeadingLabel(doc, '资产浏览器'));
1320
- panel.appendChild(title);
1321
- appendAssetBrowserTabs(doc, panel, state, activeTab);
1322
- if (activeTab === 'materials') {
1323
- const createMaterialButton = createToolbarButton(doc, '+ 材质', 'asset');
1329
+ panel.classList.add('fps-editor-ui-asset-filesystem');
1330
+ const snapshot = createLocalEditorAssetFilesystemSnapshot(state.assets, state.projectFiles);
1331
+ const folderPath = resolveLocalEditorAssetFilesystemExistingFolderPath(snapshot, requestedFolderPath);
1332
+ panel.dataset.editorAssetBrowserFolderPath = folderPath;
1333
+ const toolbar = doc.createElement('div');
1334
+ toolbar.className = 'fps-editor-ui-asset-toolbar';
1335
+ const toolbarPrimary = doc.createElement('div');
1336
+ toolbarPrimary.className = 'fps-editor-ui-asset-toolbar-group';
1337
+ if (folderPath === '/@editor/materials' || activeTab === 'materials') {
1338
+ const createMaterialButton = createToolbarButton(doc, '', 'plus');
1324
1339
  createMaterialButton.dataset.editorCreateMaterialAsset = 'true';
1325
1340
  createMaterialButton.title = '新建项目材质';
1326
- createMaterialButton.style.cssText = [
1327
- 'height:28px',
1328
- 'margin:0 0 8px',
1329
- 'padding:0 10px',
1330
- 'font-size:12px',
1331
- 'font-weight:800',
1332
- 'align-self:flex-start',
1333
- ].join(';');
1334
- panel.appendChild(createMaterialButton);
1341
+ createMaterialButton.setAttribute('aria-label', createMaterialButton.title);
1342
+ createMaterialButton.dataset.editorAssetToolbarIcon = 'true';
1343
+ toolbarPrimary.appendChild(createMaterialButton);
1335
1344
  }
1345
+ const parentFolderPath = resolveLocalEditorAssetFilesystemParentPath(snapshot, folderPath);
1346
+ const parentButton = createToolbarButton(doc, '', 'arrow-up');
1347
+ parentButton.dataset.editorAssetBrowserParent = 'true';
1348
+ parentButton.dataset.editorAssetToolbarIcon = 'true';
1349
+ parentButton.title = parentFolderPath ? '返回上一级目录' : '已位于项目根目录';
1350
+ parentButton.setAttribute('aria-label', parentButton.title);
1351
+ parentButton.disabled = !parentFolderPath;
1352
+ if (parentFolderPath)
1353
+ parentButton.dataset.editorAssetFolderPath = parentFolderPath;
1354
+ toolbarPrimary.appendChild(parentButton);
1355
+ const refreshButton = createToolbarButton(doc, '', 'refresh');
1356
+ refreshButton.dataset.editorAssetBrowserRefresh = 'true';
1357
+ refreshButton.dataset.editorAssetToolbarIcon = 'true';
1358
+ refreshButton.title = '刷新项目文件与资产';
1359
+ refreshButton.setAttribute('aria-label', refreshButton.title);
1360
+ toolbarPrimary.appendChild(refreshButton);
1361
+ const gridButton = createToolbarButton(doc, '', 'grid');
1362
+ gridButton.dataset.editorAssetViewMode = 'grid';
1363
+ gridButton.dataset.active = variant === 'grid' ? 'true' : 'false';
1364
+ gridButton.dataset.editorAssetToolbarIcon = 'true';
1365
+ gridButton.title = '网格视图';
1366
+ gridButton.setAttribute('aria-label', gridButton.title);
1367
+ gridButton.setAttribute('aria-pressed', variant === 'grid' ? 'true' : 'false');
1368
+ const listButton = createToolbarButton(doc, '', 'list');
1369
+ listButton.dataset.editorAssetViewMode = 'list';
1370
+ listButton.dataset.active = variant === 'list' ? 'true' : 'false';
1371
+ listButton.dataset.editorAssetToolbarIcon = 'true';
1372
+ listButton.title = '列表视图';
1373
+ listButton.setAttribute('aria-label', listButton.title);
1374
+ listButton.setAttribute('aria-pressed', variant === 'list' ? 'true' : 'false');
1375
+ toolbarPrimary.append(gridButton, listButton);
1376
+ toolbar.appendChild(toolbarPrimary);
1377
+ const typeFilter = doc.createElement('select');
1378
+ typeFilter.className = 'fps-editor-ui-asset-type-filter';
1379
+ typeFilter.dataset.editorAssetBrowserTypeFilter = 'true';
1380
+ typeFilter.title = '按资产类型筛选';
1381
+ for (const tab of ASSET_BROWSER_TABS) {
1382
+ const option = doc.createElement('option');
1383
+ option.value = tab.id;
1384
+ const itemCount = snapshot.entries.filter(entry => (entry.kind !== 'directory'
1385
+ && (tab.id === 'all' || resolveLocalEditorAssetFilesystemEntryTab(entry) === tab.id))).length;
1386
+ option.textContent = tab.label;
1387
+ option.title = resolveLocalEditorAssetBrowserTypeOptionTitle(tab.title, itemCount, snapshot.truncated);
1388
+ typeFilter.appendChild(option);
1389
+ }
1390
+ typeFilter.value = activeTab;
1391
+ toolbar.appendChild(typeFilter);
1392
+ const search = doc.createElement('div');
1393
+ search.className = 'fps-editor-ui-asset-search';
1336
1394
  const filter = doc.createElement('input');
1337
1395
  filter.className = 'fps-editor-ui-search';
1338
1396
  filter.type = 'search';
1339
- filter.placeholder = '筛选资产';
1397
+ filter.placeholder = '搜索文件和资产';
1340
1398
  filter.value = state.assetFilter;
1341
1399
  filter.dataset.editorAssetFilter = 'true';
1342
- panel.appendChild(filter);
1343
- const tabAssets = filterAssetsByBrowserTab(state.assets, activeTab);
1400
+ const searchIcon = createLocalEditorIcon(doc, 'search', { size: 16 });
1401
+ searchIcon.classList.add('fps-editor-ui-asset-search-icon');
1402
+ const clearFilterButton = createToolbarButton(doc, '', 'close');
1403
+ clearFilterButton.dataset.editorAssetFilterClear = 'true';
1404
+ clearFilterButton.dataset.editorAssetToolbarIcon = 'true';
1405
+ clearFilterButton.title = '清除搜索';
1406
+ clearFilterButton.setAttribute('aria-label', clearFilterButton.title);
1407
+ clearFilterButton.hidden = state.assetFilter.length === 0;
1408
+ search.append(searchIcon, filter, clearFilterButton);
1409
+ toolbar.appendChild(search);
1410
+ panel.appendChild(toolbar);
1344
1411
  const normalizedFilter = state.assetFilter.trim().toLowerCase();
1345
- const filteredAssets = tabAssets
1346
- .filter((asset) => {
1412
+ const typeFilterActive = activeTab !== 'all';
1413
+ const recursiveFilterActive = normalizedFilter.length > 0 || typeFilterActive;
1414
+ const folderEntries = filterLocalEditorAssetFilesystemEntries(snapshot, folderPath, recursiveFilterActive, activeTab);
1415
+ const matchingEntries = folderEntries.filter((entry) => {
1347
1416
  if (!normalizedFilter)
1348
1417
  return true;
1418
+ const asset = entry.asset;
1349
1419
  return [
1350
- asset.id,
1351
- asset.assetId ?? '',
1352
- asset.guid ?? '',
1353
- asset.kind ?? '',
1354
- asset.label,
1355
- asset.meta ?? '',
1356
- asset.external?.platformAssetId ?? '',
1357
- asset.external?.assetPath ?? '',
1358
- asset.external?.assetUrl ?? '',
1420
+ entry.label,
1421
+ entry.path,
1422
+ entry.extension ?? '',
1423
+ asset?.id ?? '',
1424
+ asset?.assetId ?? '',
1425
+ asset?.guid ?? '',
1426
+ asset?.label ?? '',
1427
+ asset?.kind ?? '',
1428
+ asset?.relativePath ?? '',
1429
+ asset?.meta ?? '',
1430
+ asset?.external?.platformAssetId ?? '',
1431
+ asset?.external?.assetPath ?? '',
1432
+ asset?.external?.assetUrl ?? '',
1359
1433
  ]
1360
1434
  .some(value => value.toLowerCase().includes(normalizedFilter));
1361
- })
1362
- .slice(0, 80);
1435
+ });
1436
+ const filteredEntries = matchingEntries.slice(0, 200);
1437
+ const resultLimited = matchingEntries.length > filteredEntries.length;
1438
+ const body = doc.createElement('div');
1439
+ body.className = 'fps-editor-ui-asset-filesystem-body';
1440
+ const tree = doc.createElement('aside');
1441
+ tree.className = 'fps-editor-ui-asset-folder-tree';
1442
+ tree.setAttribute('aria-label', '资产目录');
1443
+ const visibleFolders = resolveLocalEditorAssetFilesystemVisibleFolders(snapshot, expandedFolderPaths);
1444
+ for (const folder of visibleFolders) {
1445
+ const hasChildFolders = snapshot.folders.some(candidate => candidate.parentPath === folder.path);
1446
+ const expanded = expandedFolderPaths.has(folder.path);
1447
+ const row = doc.createElement('div');
1448
+ row.className = 'fps-editor-ui-asset-folder-tree-row';
1449
+ row.style.setProperty('--fps-editor-asset-folder-depth', String(folder.depth));
1450
+ const toggle = doc.createElement('button');
1451
+ toggle.type = 'button';
1452
+ toggle.className = 'fps-editor-ui-asset-folder-toggle';
1453
+ toggle.dataset.editorAssetFolderToggle = folder.path;
1454
+ toggle.disabled = !hasChildFolders;
1455
+ toggle.title = hasChildFolders
1456
+ ? `${expanded ? '折叠' : '展开'} ${folder.path === '/' ? snapshot.rootName : folder.label}`
1457
+ : '';
1458
+ toggle.setAttribute('aria-label', toggle.title || `${folder.label} 无子目录`);
1459
+ toggle.setAttribute('aria-expanded', hasChildFolders ? String(expanded) : 'false');
1460
+ if (hasChildFolders) {
1461
+ toggle.appendChild(createLocalEditorIcon(doc, expanded ? 'chevron-down' : 'chevron-right', { size: 13 }));
1462
+ }
1463
+ const button = doc.createElement('button');
1464
+ button.type = 'button';
1465
+ button.className = 'fps-editor-ui-asset-folder-row';
1466
+ button.dataset.editorAssetFolderPath = folder.path;
1467
+ button.dataset.editorAssetFolderTreePath = folder.path;
1468
+ button.dataset.selected = folder.path === folderPath ? 'true' : 'false';
1469
+ button.appendChild(createLocalEditorIcon(doc, folder.path === '/' ? 'root' : 'folder', { size: 15 }));
1470
+ const label = doc.createElement('span');
1471
+ label.className = 'fps-editor-ui-ellipsis';
1472
+ label.textContent = folder.path === '/' ? snapshot.rootName : folder.label;
1473
+ button.title = resolveLocalEditorAssetBrowserFolderTitle(label.textContent, folder.descendantItemCount, snapshot.truncated);
1474
+ button.append(label);
1475
+ row.append(toggle, button);
1476
+ tree.appendChild(row);
1477
+ }
1478
+ body.appendChild(tree);
1479
+ const browser = doc.createElement('section');
1480
+ browser.className = 'fps-editor-ui-asset-browser';
1481
+ const summary = doc.createElement('div');
1482
+ summary.className = 'fps-editor-ui-asset-browser-summary';
1483
+ const breadcrumb = doc.createElement('nav');
1484
+ breadcrumb.className = 'fps-editor-ui-asset-breadcrumb';
1485
+ breadcrumb.setAttribute('aria-label', '当前项目路径');
1486
+ const breadcrumbs = resolveLocalEditorAssetFilesystemBreadcrumbs(snapshot, folderPath);
1487
+ breadcrumbs.forEach((item, index) => {
1488
+ if (index > 0) {
1489
+ const separator = doc.createElement('span');
1490
+ separator.className = 'fps-editor-ui-asset-breadcrumb-separator';
1491
+ separator.textContent = '/';
1492
+ breadcrumb.appendChild(separator);
1493
+ }
1494
+ if (index === breadcrumbs.length - 1) {
1495
+ const current = doc.createElement('span');
1496
+ current.className = 'fps-editor-ui-asset-breadcrumb-current fps-editor-ui-ellipsis';
1497
+ current.textContent = item.label;
1498
+ current.title = item.path;
1499
+ current.setAttribute('aria-current', 'page');
1500
+ breadcrumb.appendChild(current);
1501
+ return;
1502
+ }
1503
+ const segment = doc.createElement('button');
1504
+ segment.type = 'button';
1505
+ segment.className = 'fps-editor-ui-asset-breadcrumb-button fps-editor-ui-ellipsis';
1506
+ segment.dataset.editorAssetFolderPath = item.path;
1507
+ segment.textContent = item.label;
1508
+ segment.title = item.path;
1509
+ breadcrumb.appendChild(segment);
1510
+ });
1363
1511
  const count = doc.createElement('div');
1364
1512
  count.className = 'fps-editor-ui-asset-count';
1365
- const activeTabLabel = ASSET_BROWSER_TABS.find(tab => tab.id === activeTab)?.label ?? '资产';
1366
- count.textContent = activeTab === 'all' && state.assetCountLabel
1367
- ? `${filteredAssets.length} / ${state.assetCountLabel}`
1368
- : `${filteredAssets.length} / ${tabAssets.length} 个${activeTabLabel}资产`;
1369
- panel.appendChild(count);
1513
+ count.textContent = resolveLocalEditorAssetBrowserCountLabel({
1514
+ matchingCount: matchingEntries.length,
1515
+ normalizedFilter,
1516
+ resultLimited,
1517
+ truncated: snapshot.truncated,
1518
+ typeLabel: typeFilterActive
1519
+ ? ASSET_BROWSER_TABS.find(tab => tab.id === activeTab)?.label ?? ''
1520
+ : null,
1521
+ visibleCount: filteredEntries.length,
1522
+ });
1523
+ summary.append(breadcrumb, count);
1524
+ browser.appendChild(summary);
1370
1525
  const list = createAssetList(doc, variant === 'grid');
1371
1526
  list.dataset.editorAssetBrowserList = 'true';
1527
+ list.dataset.searchActive = recursiveFilterActive ? 'true' : 'false';
1372
1528
  list.style.overflow = 'visible';
1529
+ list.style.maxHeight = 'none';
1373
1530
  list.style.paddingRight = '0';
1374
- for (const asset of filteredAssets) {
1531
+ for (const entry of filteredEntries) {
1532
+ if (entry.kind === 'directory') {
1533
+ list.appendChild(createProjectFilesystemEntryButton(doc, entry, variant, selectedEntryPath === entry.path, recursiveFilterActive ? entry.parentPath : undefined));
1534
+ continue;
1535
+ }
1536
+ const asset = entry.asset;
1537
+ if (!asset) {
1538
+ list.appendChild(createProjectFilesystemEntryButton(doc, entry, variant, selectedEntryPath === entry.path, recursiveFilterActive ? entry.parentPath : undefined));
1539
+ continue;
1540
+ }
1375
1541
  const selected = state.selectedAssetId === asset.id;
1376
1542
  const hasPreview = !!asset.preview;
1377
1543
  const button = doc.createElement('button');
1378
1544
  button.className = 'fps-editor-ui-asset-card';
1379
1545
  button.type = 'button';
1380
1546
  button.dataset.editorAssetId = asset.id;
1547
+ button.dataset.editorProjectFilePath = entry.path;
1381
1548
  button.disabled = asset.disabled ?? false;
1382
1549
  button.setAttribute('aria-selected', selected ? 'true' : 'false');
1383
1550
  button.dataset.variant = variant;
1384
1551
  button.dataset.hasPreview = hasPreview ? 'true' : 'false';
1385
- const preview = createAssetPreviewElement(doc, asset, variant);
1552
+ button.dataset.searchResult = recursiveFilterActive ? 'true' : 'false';
1553
+ button.title = entry.path;
1554
+ const mediaThumbnailKind = asset.preview ? null : resolveLocalEditorProjectMediaThumbnailKind(entry);
1555
+ const preview = mediaThumbnailKind
1556
+ ? createProjectMediaThumbnailPlaceholder(doc, entry, variant, mediaThumbnailKind)
1557
+ : createAssetPreviewElement(doc, asset, variant);
1386
1558
  const body = doc.createElement('div');
1387
1559
  body.className = 'fps-editor-ui-asset-card-body';
1388
1560
  const label = doc.createElement('div');
1389
1561
  label.className = 'fps-editor-ui-asset-card-label fps-editor-ui-ellipsis';
1390
- label.textContent = asset.label;
1562
+ label.textContent = entry.kind === 'file' ? entry.label : asset.label;
1391
1563
  const meta = doc.createElement('div');
1392
1564
  meta.className = 'fps-editor-ui-asset-card-meta fps-editor-ui-ellipsis';
1393
- meta.textContent = asset.meta ?? asset.id;
1565
+ meta.textContent = recursiveFilterActive
1566
+ ? [asset.label !== entry.label ? asset.label : '', entry.parentPath]
1567
+ .filter(Boolean)
1568
+ .join(' · ')
1569
+ : entry.kind === 'file'
1570
+ ? [entry.extension?.toUpperCase(), asset.label !== entry.label ? asset.label : '', asset.kind ?? 'asset']
1571
+ .filter(Boolean)
1572
+ .join(' · ')
1573
+ : asset.meta ?? asset.id;
1574
+ meta.title = meta.textContent;
1394
1575
  body.appendChild(label);
1395
1576
  body.appendChild(meta);
1396
1577
  button.appendChild(preview);
@@ -1418,15 +1599,92 @@ function renderAssetBrowserContent(doc, panel, state, variant = 'list', activeTa
1418
1599
  list.appendChild(button);
1419
1600
  }
1420
1601
  }
1421
- if (filteredAssets.length === 0) {
1422
- list.appendChild(createEmptyState(doc, normalizedFilter ? '没有匹配的资产。' : '暂无该类型资产。'));
1602
+ if (filteredEntries.length === 0) {
1603
+ list.appendChild(createEmptyState(doc, recursiveFilterActive ? '当前目录及子目录中没有匹配的资源。' : '当前目录为空。'));
1423
1604
  }
1424
1605
  const viewport = createLocalEditorDockPanelViewport(doc, 'editorAssetBrowserScrollViewport');
1425
1606
  viewport.appendChild(list);
1426
- panel.appendChild(viewport);
1607
+ browser.appendChild(viewport);
1608
+ body.appendChild(browser);
1609
+ panel.appendChild(body);
1610
+ }
1611
+ export function resolveLocalEditorAssetBrowserTypeOptionTitle(title, itemCount, truncated) {
1612
+ return truncated
1613
+ ? `${title},当前清单 ${itemCount} 项 · 文件清单已截断`
1614
+ : `${title},共 ${itemCount} 项`;
1615
+ }
1616
+ export function resolveLocalEditorAssetBrowserFolderTitle(label, descendantItemCount, truncated) {
1617
+ return truncated
1618
+ ? `${label} · 当前清单 ${descendantItemCount} 个文件 · 文件清单已截断`
1619
+ : `${label} · ${descendantItemCount} 个文件`;
1620
+ }
1621
+ export function resolveLocalEditorAssetBrowserCountLabel(input) {
1622
+ const truncationSuffix = input.truncated ? ' · 文件清单已截断' : '';
1623
+ if (input.resultLimited) {
1624
+ return input.truncated
1625
+ ? `显示前 ${input.visibleCount} 项(当前清单 ${input.matchingCount} 项)${truncationSuffix}`
1626
+ : `显示前 ${input.visibleCount} 项(共 ${input.matchingCount} 项)`;
1627
+ }
1628
+ if (input.normalizedFilter)
1629
+ return `${input.visibleCount} 个匹配项${truncationSuffix}`;
1630
+ if (input.typeLabel != null)
1631
+ return `${input.visibleCount} 个${input.typeLabel}资源${truncationSuffix}`;
1632
+ return `${input.visibleCount} 个项目${truncationSuffix}`;
1633
+ }
1634
+ function createProjectFilesystemEntryButton(doc, entry, variant, selected, searchParentPath) {
1635
+ const button = doc.createElement('button');
1636
+ button.className = 'fps-editor-ui-asset-card';
1637
+ button.type = 'button';
1638
+ button.dataset.variant = variant;
1639
+ const mediaThumbnailKind = resolveLocalEditorProjectMediaThumbnailKind(entry);
1640
+ button.dataset.hasPreview = mediaThumbnailKind ? 'true' : 'false';
1641
+ button.dataset.searchResult = searchParentPath ? 'true' : 'false';
1642
+ button.setAttribute('aria-selected', selected ? 'true' : 'false');
1643
+ button.title = entry.path;
1644
+ if (entry.kind === 'directory')
1645
+ button.dataset.editorProjectDirectoryPath = entry.path;
1646
+ else
1647
+ button.dataset.editorProjectFilePath = entry.path;
1648
+ button.appendChild(mediaThumbnailKind
1649
+ ? createProjectMediaThumbnailPlaceholder(doc, entry, variant, mediaThumbnailKind)
1650
+ : createLocalEditorIcon(doc, entry.kind === 'directory' ? 'folder' : 'asset', {
1651
+ size: variant === 'grid' ? 42 : 16,
1652
+ strokeWidth: variant === 'grid' ? 1.35 : 2,
1653
+ }));
1654
+ const body = doc.createElement('div');
1655
+ body.className = 'fps-editor-ui-asset-card-body';
1656
+ const label = doc.createElement('div');
1657
+ label.className = 'fps-editor-ui-asset-card-label fps-editor-ui-ellipsis';
1658
+ label.textContent = entry.label;
1659
+ const meta = doc.createElement('div');
1660
+ meta.className = 'fps-editor-ui-asset-card-meta fps-editor-ui-ellipsis';
1661
+ meta.textContent = searchParentPath || (entry.kind === 'directory'
1662
+ ? 'Folder'
1663
+ : entry.extension?.toUpperCase() || 'File');
1664
+ body.append(label, meta);
1665
+ button.appendChild(body);
1666
+ return button;
1667
+ }
1668
+ function createProjectMediaThumbnailPlaceholder(doc, entry, variant, kind) {
1669
+ const frame = doc.createElement('div');
1670
+ frame.className = 'fps-editor-ui-project-media-thumbnail';
1671
+ frame.dataset.editorProjectMediaThumbnailPath = entry.path;
1672
+ frame.dataset.editorProjectMediaThumbnailKind = kind;
1673
+ const cacheKey = resolveLocalEditorProjectMediaThumbnailCacheKey(entry);
1674
+ if (cacheKey)
1675
+ frame.dataset.editorProjectMediaThumbnailCacheKey = cacheKey;
1676
+ frame.dataset.thumbnailState = 'loading';
1677
+ frame.dataset.variant = variant;
1678
+ const fallback = createLocalEditorIcon(doc, kind === 'model' ? 'object' : 'asset', {
1679
+ size: variant === 'grid' ? 34 : 15,
1680
+ strokeWidth: variant === 'grid' ? 1.35 : 2,
1681
+ });
1682
+ fallback.classList.add('fps-editor-ui-project-media-thumbnail-fallback');
1683
+ frame.appendChild(fallback);
1684
+ return frame;
1427
1685
  }
1428
1686
  export function createAssetPreviewElement(doc, asset, variant) {
1429
- const size = variant === 'modal' ? 220 : variant === 'grid' ? 46 : 24;
1687
+ const size = variant === 'modal' ? 220 : variant === 'grid' ? 64 : 24;
1430
1688
  const preview = asset.preview;
1431
1689
  if (!preview) {
1432
1690
  const kind = resolveLocalEditorBrowserAssetKind(asset);
@@ -1437,7 +1695,10 @@ export function createAssetPreviewElement(doc, asset, variant) {
1437
1695
  : kind === 'texture'
1438
1696
  ? 'asset'
1439
1697
  : 'object';
1440
- return createLocalEditorIcon(doc, icon, { size: variant === 'grid' ? 18 : 16 });
1698
+ return createLocalEditorIcon(doc, icon, {
1699
+ size: variant === 'grid' ? 42 : 16,
1700
+ strokeWidth: variant === 'grid' ? 1.35 : 2,
1701
+ });
1441
1702
  }
1442
1703
  const frame = doc.createElement('div');
1443
1704
  frame.style.cssText = [
@@ -1475,16 +1736,16 @@ export function createAssetPreviewElement(doc, asset, variant) {
1475
1736
  const emissionColor = formatAssetPreviewColor(preview.emissionColor, '#ffffff');
1476
1737
  sphere.style.cssText = [
1477
1738
  'position:relative',
1478
- 'width:82%',
1479
- 'height:82%',
1739
+ 'width:76%',
1740
+ 'height:76%',
1480
1741
  'overflow:hidden',
1481
1742
  'border-radius:999px',
1482
1743
  `background:${baseColor}`,
1483
- 'border:1px solid rgba(255,255,255,0.22)',
1744
+ 'border:1px solid rgba(255,255,255,0.12)',
1484
1745
  'box-shadow:' + [
1485
- `inset -5px -7px 12px rgba(0,0,0,${(0.26 + roughness * 0.14).toFixed(2)})`,
1486
- `inset 5px 5px 10px rgba(255,255,255,${(0.12 + metallic * 0.2).toFixed(2)})`,
1487
- emissionIntensity > 0 ? `0 0 ${Math.round(6 + emissionIntensity * 5)}px ${emissionColor}` : '0 1px 2px rgba(0,0,0,0.4)',
1746
+ `inset -5px -7px 12px rgba(0,0,0,${(0.24 + roughness * 0.12).toFixed(2)})`,
1747
+ `inset 4px 4px 9px rgba(255,255,255,${(0.08 + metallic * 0.14).toFixed(2)})`,
1748
+ emissionIntensity > 0 ? `0 0 ${Math.round(3 + emissionIntensity * 2)}px ${emissionColor}` : '0 1px 2px rgba(0,0,0,0.34)',
1488
1749
  ].join(','),
1489
1750
  ].join(';');
1490
1751
  if (preview.textureUrl) {
@@ -1503,8 +1764,8 @@ export function createAssetPreviewElement(doc, asset, variant) {
1503
1764
  sphere.appendChild(image);
1504
1765
  }
1505
1766
  const shading = doc.createElement('div');
1506
- const highlightAlpha = clampNumber(0.86 - roughness * 0.48 + metallic * 0.12, 0.25, 0.92);
1507
- const highlightEnd = Math.round(9 + roughness * 12);
1767
+ const highlightAlpha = clampNumber(0.66 - roughness * 0.38 + metallic * 0.08, 0.18, 0.72);
1768
+ const highlightEnd = Math.round(8 + roughness * 11);
1508
1769
  const shadowAlpha = clampNumber(0.28 + roughness * 0.14 + metallic * 0.16, 0.2, 0.62);
1509
1770
  const rimAlpha = clampNumber(0.12 + metallic * 0.36, 0.08, 0.52);
1510
1771
  shading.style.cssText = [
@@ -1513,7 +1774,7 @@ export function createAssetPreviewElement(doc, asset, variant) {
1513
1774
  'border-radius:inherit',
1514
1775
  'pointer-events:none',
1515
1776
  'background:' + [
1516
- `radial-gradient(circle at 31% 23%, rgba(255,255,255,${highlightAlpha.toFixed(2)}) 0 ${highlightEnd}%, rgba(255,255,255,0) ${highlightEnd + 17}%)`,
1777
+ `radial-gradient(circle at 31% 23%, rgba(255,255,255,${highlightAlpha.toFixed(2)}) 0 ${highlightEnd}%, rgba(255,255,255,0) ${highlightEnd + 20}%)`,
1517
1778
  `radial-gradient(circle at 70% 82%, rgba(0,0,0,${shadowAlpha.toFixed(2)}) 0 26%, rgba(0,0,0,0) 58%)`,
1518
1779
  `radial-gradient(circle at 82% 22%, rgba(255,255,255,${rimAlpha.toFixed(2)}) 0 9%, rgba(255,255,255,0) 36%)`,
1519
1780
  `linear-gradient(135deg, rgba(255,255,255,${(0.08 + metallic * 0.16).toFixed(2)}), rgba(0,0,0,${(0.12 + roughness * 0.1).toFixed(2)}))`,