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

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 (245) 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 +43 -43
  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 +310 -21
  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-local-editor-host.d.ts +4 -0
  26. package/dist/playable-local-editor-host.d.ts.map +1 -1
  27. package/dist/playable-local-editor-host.js +27 -0
  28. package/dist/playable-local-editor-host.js.map +1 -1
  29. package/dist/playable-product-scene-capabilities.d.ts.map +1 -1
  30. package/dist/playable-product-scene-capabilities.js +9 -3
  31. package/dist/playable-product-scene-capabilities.js.map +1 -1
  32. package/dist/playable-standard-project.d.ts.map +1 -1
  33. package/dist/playable-standard-project.js +5 -2
  34. package/dist/playable-standard-project.js.map +1 -1
  35. package/node_modules/@fps-games/babylon-renderer/package.json +7 -7
  36. package/node_modules/@fps-games/editor-babylon/dist/marker-overlay.js +24 -0
  37. package/node_modules/@fps-games/editor-babylon/dist/marker-overlay.js.map +1 -1
  38. package/node_modules/@fps-games/editor-babylon/dist/projection.d.ts +10 -1
  39. package/node_modules/@fps-games/editor-babylon/dist/projection.d.ts.map +1 -1
  40. package/node_modules/@fps-games/editor-babylon/dist/projection.js +96 -1
  41. package/node_modules/@fps-games/editor-babylon/dist/projection.js.map +1 -1
  42. package/node_modules/@fps-games/editor-babylon/dist/scene-view-spatial-overlay-controller.d.ts.map +1 -1
  43. package/node_modules/@fps-games/editor-babylon/dist/scene-view-spatial-overlay-controller.js +85 -22
  44. package/node_modules/@fps-games/editor-babylon/dist/scene-view-spatial-overlay-controller.js.map +1 -1
  45. package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.d.ts +2 -0
  46. package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.d.ts.map +1 -1
  47. package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.js +150 -4
  48. package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.js.map +1 -1
  49. package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.d.ts +1 -0
  50. package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.d.ts.map +1 -1
  51. package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.js +249 -15
  52. package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.js.map +1 -1
  53. package/node_modules/@fps-games/editor-babylon/dist/types.d.ts +1 -1
  54. package/node_modules/@fps-games/editor-babylon/dist/types.d.ts.map +1 -1
  55. package/node_modules/@fps-games/editor-babylon/dist/types.js.map +1 -1
  56. package/node_modules/@fps-games/editor-babylon/package.json +6 -6
  57. package/node_modules/@fps-games/editor-browser/dist/index.d.ts +5 -0
  58. package/node_modules/@fps-games/editor-browser/dist/index.d.ts.map +1 -1
  59. package/node_modules/@fps-games/editor-browser/dist/index.js +3 -0
  60. package/node_modules/@fps-games/editor-browser/dist/index.js.map +1 -1
  61. package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-browser-continuity.d.ts +35 -0
  62. package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-browser-continuity.d.ts.map +1 -0
  63. package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-browser-continuity.js +136 -0
  64. package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-browser-continuity.js.map +1 -0
  65. package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-filesystem.d.ts +46 -0
  66. package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-filesystem.d.ts.map +1 -0
  67. package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-filesystem.js +283 -0
  68. package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-filesystem.js.map +1 -0
  69. package/node_modules/@fps-games/editor-browser/dist/local-editor-preview-cleanup-registry.d.ts +12 -0
  70. package/node_modules/@fps-games/editor-browser/dist/local-editor-preview-cleanup-registry.d.ts.map +1 -0
  71. package/node_modules/@fps-games/editor-browser/dist/local-editor-preview-cleanup-registry.js +67 -0
  72. package/node_modules/@fps-games/editor-browser/dist/local-editor-preview-cleanup-registry.js.map +1 -0
  73. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-open.d.ts +6 -0
  74. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-open.d.ts.map +1 -0
  75. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-open.js +9 -0
  76. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-open.js.map +1 -0
  77. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-preview.d.ts +7 -0
  78. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-preview.d.ts.map +1 -0
  79. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-preview.js +20 -0
  80. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-preview.js.map +1 -0
  81. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-media-thumbnail-cache.d.ts +9 -0
  82. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-media-thumbnail-cache.d.ts.map +1 -0
  83. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-media-thumbnail-cache.js +219 -0
  84. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-media-thumbnail-cache.js.map +1 -0
  85. package/node_modules/@fps-games/editor-browser/dist/local-editor-tool-presentation.d.ts +14 -0
  86. package/node_modules/@fps-games/editor-browser/dist/local-editor-tool-presentation.d.ts.map +1 -0
  87. package/node_modules/@fps-games/editor-browser/dist/local-editor-tool-presentation.js +42 -0
  88. package/node_modules/@fps-games/editor-browser/dist/local-editor-tool-presentation.js.map +1 -0
  89. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-asset-kind.d.ts.map +1 -1
  90. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-asset-kind.js +2 -0
  91. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-asset-kind.js.map +1 -1
  92. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-console.d.ts +27 -0
  93. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-console.d.ts.map +1 -0
  94. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-console.js +288 -0
  95. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-console.js.map +1 -0
  96. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.d.ts +1 -1
  97. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.d.ts.map +1 -1
  98. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.js +29 -0
  99. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.js.map +1 -1
  100. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.d.ts +20 -1
  101. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.d.ts.map +1 -1
  102. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.js +321 -60
  103. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.js.map +1 -1
  104. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-prefab-stage.d.ts +2 -1
  105. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-prefab-stage.d.ts.map +1 -1
  106. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-prefab-stage.js +4 -2
  107. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-prefab-stage.js.map +1 -1
  108. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.d.ts +63 -3
  109. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.d.ts.map +1 -1
  110. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.js.map +1 -1
  111. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-workbench.d.ts +9 -0
  112. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-workbench.d.ts.map +1 -1
  113. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-workbench.js +88 -16
  114. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-workbench.js.map +1 -1
  115. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.d.ts +2 -1
  116. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.d.ts.map +1 -1
  117. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.js +1463 -356
  118. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.js.map +1 -1
  119. package/node_modules/@fps-games/editor-browser/dist/local-editor-viewport-orientation.d.ts +13 -0
  120. package/node_modules/@fps-games/editor-browser/dist/local-editor-viewport-orientation.d.ts.map +1 -0
  121. package/node_modules/@fps-games/editor-browser/dist/local-editor-viewport-orientation.js +15 -0
  122. package/node_modules/@fps-games/editor-browser/dist/local-editor-viewport-orientation.js.map +1 -0
  123. package/node_modules/@fps-games/editor-browser/package.json +7 -7
  124. package/node_modules/@fps-games/editor-core/dist/editor-tools.d.ts +1 -0
  125. package/node_modules/@fps-games/editor-core/dist/editor-tools.d.ts.map +1 -1
  126. package/node_modules/@fps-games/editor-core/dist/editor-tools.js +3 -1
  127. package/node_modules/@fps-games/editor-core/dist/editor-tools.js.map +1 -1
  128. package/node_modules/@fps-games/editor-core/dist/viewport-tools.d.ts +11 -2
  129. package/node_modules/@fps-games/editor-core/dist/viewport-tools.d.ts.map +1 -1
  130. package/node_modules/@fps-games/editor-core/dist/viewport-tools.js +12 -1
  131. package/node_modules/@fps-games/editor-core/dist/viewport-tools.js.map +1 -1
  132. package/node_modules/@fps-games/editor-core/package.json +6 -6
  133. package/node_modules/@fps-games/editor-forge-play/package.json +2 -2
  134. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/catalog.d.ts +1 -0
  135. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/catalog.d.ts.map +1 -1
  136. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/catalog.js +5 -0
  137. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/catalog.js.map +1 -1
  138. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/index.d.ts +1 -1
  139. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/index.d.ts.map +1 -1
  140. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/index.js +1 -1
  141. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/index.js.map +1 -1
  142. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/handler.d.ts.map +1 -1
  143. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/handler.js +15 -1
  144. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/handler.js.map +1 -1
  145. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/routes.d.ts.map +1 -1
  146. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/routes.js +3 -0
  147. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/routes.js.map +1 -1
  148. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/types.d.ts +6 -1
  149. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/types.d.ts.map +1 -1
  150. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/types.js.map +1 -1
  151. package/node_modules/@fps-games/editor-playable-sdk/dist/index.d.ts +1 -0
  152. package/node_modules/@fps-games/editor-playable-sdk/dist/index.d.ts.map +1 -1
  153. package/node_modules/@fps-games/editor-playable-sdk/dist/index.js +1 -0
  154. package/node_modules/@fps-games/editor-playable-sdk/dist/index.js.map +1 -1
  155. package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-source.d.ts +4 -0
  156. package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-source.d.ts.map +1 -1
  157. package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-source.js +10 -1
  158. package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-source.js.map +1 -1
  159. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/index.d.ts +4 -0
  160. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/index.d.ts.map +1 -0
  161. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/index.js +4 -0
  162. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/index.js.map +1 -0
  163. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/protocol.d.ts +4 -0
  164. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/protocol.d.ts.map +1 -0
  165. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/protocol.js +86 -0
  166. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/protocol.js.map +1 -0
  167. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/support.d.ts +9 -0
  168. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/support.d.ts.map +1 -0
  169. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/support.js +76 -0
  170. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/support.js.map +1 -0
  171. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/types.d.ts +34 -0
  172. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/types.d.ts.map +1 -0
  173. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/types.js +2 -0
  174. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/types.js.map +1 -0
  175. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.d.ts +4 -0
  176. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.d.ts.map +1 -1
  177. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.js +40 -0
  178. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.js.map +1 -1
  179. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.d.ts +1 -0
  180. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.d.ts.map +1 -1
  181. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.js +1 -0
  182. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.js.map +1 -1
  183. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.d.ts +1 -0
  184. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.d.ts.map +1 -1
  185. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.js +94 -0
  186. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.js.map +1 -1
  187. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-file-handle.d.ts +14 -0
  188. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-file-handle.d.ts.map +1 -0
  189. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-file-handle.js +101 -0
  190. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-file-handle.js.map +1 -0
  191. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-files.d.ts +23 -0
  192. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-files.d.ts.map +1 -0
  193. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-files.js +180 -0
  194. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-files.js.map +1 -0
  195. package/node_modules/@fps-games/editor-playable-sdk/package.json +6 -6
  196. package/node_modules/@fps-games/editor-protocol/dist/agent.d.ts +23 -3
  197. package/node_modules/@fps-games/editor-protocol/dist/agent.d.ts.map +1 -1
  198. package/node_modules/@fps-games/editor-protocol/dist/agent.js.map +1 -1
  199. package/node_modules/@fps-games/editor-protocol/package.json +2 -2
  200. package/node_modules/@fps-games/editor-tooling/package.json +3 -3
  201. package/node_modules/@fps-games/editor-ui/dist/editor-ui-theme.d.ts.map +1 -1
  202. package/node_modules/@fps-games/editor-ui/dist/editor-ui-theme.js +103 -10
  203. package/node_modules/@fps-games/editor-ui/dist/editor-ui-theme.js.map +1 -1
  204. package/node_modules/@fps-games/editor-ui/package.json +1 -1
  205. package/node_modules/@fps-games/playable-assets/package.json +1 -1
  206. package/node_modules/@fps-games/playable-contracts/package.json +1 -1
  207. package/node_modules/@fps-games/playable-rendering/package.json +2 -2
  208. package/node_modules/@fps-games/playable-runtime/package.json +12 -12
  209. package/node_modules/@fps-games/playable-runtime-data/package.json +4 -4
  210. package/node_modules/@fps-games/playable-scene/package.json +2 -2
  211. package/node_modules/@fps-games/plugin-api/package.json +1 -1
  212. package/node_modules/@fps-games/plugin-assets/dist/version.d.ts +1 -1
  213. package/node_modules/@fps-games/plugin-assets/dist/version.js +1 -1
  214. package/node_modules/@fps-games/plugin-assets/dist/version.js.map +1 -1
  215. package/node_modules/@fps-games/plugin-assets/package.json +5 -5
  216. package/node_modules/@fps-games/plugin-hierarchy/dist/version.d.ts +1 -1
  217. package/node_modules/@fps-games/plugin-hierarchy/dist/version.js +1 -1
  218. package/node_modules/@fps-games/plugin-hierarchy/dist/version.js.map +1 -1
  219. package/node_modules/@fps-games/plugin-hierarchy/package.json +5 -5
  220. package/node_modules/@fps-games/plugin-host/package.json +2 -2
  221. package/node_modules/@fps-games/plugin-markers/dist/version.d.ts +1 -1
  222. package/node_modules/@fps-games/plugin-markers/dist/version.js +1 -1
  223. package/node_modules/@fps-games/plugin-markers/dist/version.js.map +1 -1
  224. package/node_modules/@fps-games/plugin-markers/package.json +5 -5
  225. package/node_modules/@fps-games/plugin-materials/dist/version.d.ts +1 -1
  226. package/node_modules/@fps-games/plugin-materials/dist/version.js +1 -1
  227. package/node_modules/@fps-games/plugin-materials/dist/version.js.map +1 -1
  228. package/node_modules/@fps-games/plugin-materials/package.json +5 -5
  229. package/node_modules/@fps-games/plugin-rendering/dist/version.d.ts +1 -1
  230. package/node_modules/@fps-games/plugin-rendering/dist/version.js +1 -1
  231. package/node_modules/@fps-games/plugin-rendering/dist/version.js.map +1 -1
  232. package/node_modules/@fps-games/plugin-rendering/package.json +5 -5
  233. package/node_modules/@fps-games/plugin-scene/dist/version.d.ts +1 -1
  234. package/node_modules/@fps-games/plugin-scene/dist/version.js +1 -1
  235. package/node_modules/@fps-games/plugin-scene/dist/version.js.map +1 -1
  236. package/node_modules/@fps-games/plugin-scene/package.json +5 -5
  237. package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.d.ts +1 -1
  238. package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.js +1 -1
  239. package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.js.map +1 -1
  240. package/node_modules/@fps-games/plugin-shadow-map-experiment/package.json +5 -5
  241. package/node_modules/@fps-games/plugin-shadows/dist/version.d.ts +1 -1
  242. package/node_modules/@fps-games/plugin-shadows/dist/version.js +1 -1
  243. package/node_modules/@fps-games/plugin-shadows/dist/version.js.map +1 -1
  244. package/node_modules/@fps-games/plugin-shadows/package.json +7 -7
  245. package/package.json +22 -22
@@ -0,0 +1,13 @@
1
+ import type { LocalEditorBrowserViewportViewPreset } from './local-editor-ui-types';
2
+ export type LocalEditorCoordinateAxisDirectionId = 'x-positive' | 'x-negative' | 'y-positive' | 'y-negative' | 'z-positive' | 'z-negative';
3
+ export interface LocalEditorCoordinateAxisDirection {
4
+ id: LocalEditorCoordinateAxisDirectionId;
5
+ axis: 'x' | 'y' | 'z';
6
+ sign: 'positive' | 'negative';
7
+ preset: LocalEditorBrowserViewportViewPreset;
8
+ label: string;
9
+ }
10
+ export declare const LOCAL_EDITOR_COORDINATE_AXIS_DIRECTIONS: readonly LocalEditorCoordinateAxisDirection[];
11
+ export declare function resolveLocalEditorCoordinateAxisDirection(id: LocalEditorCoordinateAxisDirectionId): LocalEditorCoordinateAxisDirection;
12
+ export declare function resolveLocalEditorCoordinateAxisActiveDirection(preset: LocalEditorBrowserViewportViewPreset): LocalEditorCoordinateAxisDirectionId | null;
13
+ //# sourceMappingURL=local-editor-viewport-orientation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-editor-viewport-orientation.d.ts","sourceRoot":"","sources":["../src/local-editor-viewport-orientation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oCAAoC,EAAE,MAAM,yBAAyB,CAAC;AAEpF,MAAM,MAAM,oCAAoC,GAC5C,YAAY,GACZ,YAAY,GACZ,YAAY,GACZ,YAAY,GACZ,YAAY,GACZ,YAAY,CAAC;AAEjB,MAAM,WAAW,kCAAkC;IACjD,EAAE,EAAE,oCAAoC,CAAC;IACzC,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACtB,IAAI,EAAE,UAAU,GAAG,UAAU,CAAC;IAC9B,MAAM,EAAE,oCAAoC,CAAC;IAC7C,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,uCAAuC,EAAE,SAAS,kCAAkC,EAOhG,CAAC;AAEF,wBAAgB,yCAAyC,CACvD,EAAE,EAAE,oCAAoC,GACvC,kCAAkC,CAEpC;AAED,wBAAgB,+CAA+C,CAC7D,MAAM,EAAE,oCAAoC,GAC3C,oCAAoC,GAAG,IAAI,CAE7C"}
@@ -0,0 +1,15 @@
1
+ export const LOCAL_EDITOR_COORDINATE_AXIS_DIRECTIONS = [
2
+ { id: 'x-positive', axis: 'x', sign: 'positive', preset: 'right', label: '+X · 右视图' },
3
+ { id: 'x-negative', axis: 'x', sign: 'negative', preset: 'left', label: '-X · 左视图' },
4
+ { id: 'y-positive', axis: 'y', sign: 'positive', preset: 'top', label: '+Y · 顶视图' },
5
+ { id: 'y-negative', axis: 'y', sign: 'negative', preset: 'bottom', label: '-Y · 底视图' },
6
+ { id: 'z-positive', axis: 'z', sign: 'positive', preset: 'back', label: '+Z · 后视图' },
7
+ { id: 'z-negative', axis: 'z', sign: 'negative', preset: 'front', label: '-Z · 前视图' },
8
+ ];
9
+ export function resolveLocalEditorCoordinateAxisDirection(id) {
10
+ return LOCAL_EDITOR_COORDINATE_AXIS_DIRECTIONS.find(direction => direction.id === id);
11
+ }
12
+ export function resolveLocalEditorCoordinateAxisActiveDirection(preset) {
13
+ return LOCAL_EDITOR_COORDINATE_AXIS_DIRECTIONS.find(direction => direction.preset === preset)?.id ?? null;
14
+ }
15
+ //# sourceMappingURL=local-editor-viewport-orientation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-editor-viewport-orientation.js","sourceRoot":"","sources":["../src/local-editor-viewport-orientation.ts"],"names":[],"mappings":"AAkBA,MAAM,CAAC,MAAM,uCAAuC,GAAkD;IACpG,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;IACrF,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE;IACpF,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE;IACnF,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE;IACtF,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE;IACpF,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;CACtF,CAAC;AAEF,MAAM,UAAU,yCAAyC,CACvD,EAAwC;IAExC,OAAO,uCAAuC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAE,CAAC;AACzF,CAAC;AAED,MAAM,UAAU,+CAA+C,CAC7D,MAA4C;IAE5C,OAAO,uCAAuC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,KAAK,MAAM,CAAC,EAAE,EAAE,IAAI,IAAI,CAAC;AAC5G,CAAC","sourcesContent":["import type { LocalEditorBrowserViewportViewPreset } from './local-editor-ui-types';\n\nexport type LocalEditorCoordinateAxisDirectionId =\n | 'x-positive'\n | 'x-negative'\n | 'y-positive'\n | 'y-negative'\n | 'z-positive'\n | 'z-negative';\n\nexport interface LocalEditorCoordinateAxisDirection {\n id: LocalEditorCoordinateAxisDirectionId;\n axis: 'x' | 'y' | 'z';\n sign: 'positive' | 'negative';\n preset: LocalEditorBrowserViewportViewPreset;\n label: string;\n}\n\nexport const LOCAL_EDITOR_COORDINATE_AXIS_DIRECTIONS: readonly LocalEditorCoordinateAxisDirection[] = [\n { id: 'x-positive', axis: 'x', sign: 'positive', preset: 'right', label: '+X · 右视图' },\n { id: 'x-negative', axis: 'x', sign: 'negative', preset: 'left', label: '-X · 左视图' },\n { id: 'y-positive', axis: 'y', sign: 'positive', preset: 'top', label: '+Y · 顶视图' },\n { id: 'y-negative', axis: 'y', sign: 'negative', preset: 'bottom', label: '-Y · 底视图' },\n { id: 'z-positive', axis: 'z', sign: 'positive', preset: 'back', label: '+Z · 后视图' },\n { id: 'z-negative', axis: 'z', sign: 'negative', preset: 'front', label: '-Z · 前视图' },\n];\n\nexport function resolveLocalEditorCoordinateAxisDirection(\n id: LocalEditorCoordinateAxisDirectionId,\n): LocalEditorCoordinateAxisDirection {\n return LOCAL_EDITOR_COORDINATE_AXIS_DIRECTIONS.find(direction => direction.id === id)!;\n}\n\nexport function resolveLocalEditorCoordinateAxisActiveDirection(\n preset: LocalEditorBrowserViewportViewPreset,\n): LocalEditorCoordinateAxisDirectionId | null {\n return LOCAL_EDITOR_COORDINATE_AXIS_DIRECTIONS.find(direction => direction.preset === preset)?.id ?? null;\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fps-games/editor-browser",
3
- "version": "0.2.1-beta.1",
3
+ "version": "0.2.1-beta.2",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "Browser host adapters for fps-game-editor.",
@@ -22,11 +22,11 @@
22
22
  }
23
23
  },
24
24
  "dependencies": {
25
- "@fps-games/editor-core": "0.2.1-beta.1",
26
- "@fps-games/editor-playable-sdk": "0.2.1-beta.1",
27
- "@fps-games/editor-protocol": "0.2.1-beta.1",
28
- "@fps-games/editor-ui": "0.2.1-beta.1",
29
- "@fps-games/plugin-api": "0.2.1-beta.1",
30
- "@fps-games/plugin-hierarchy": "0.2.1-beta.1"
25
+ "@fps-games/editor-core": "0.2.1-beta.2",
26
+ "@fps-games/editor-playable-sdk": "0.2.1-beta.2",
27
+ "@fps-games/editor-protocol": "0.2.1-beta.2",
28
+ "@fps-games/editor-ui": "0.2.1-beta.2",
29
+ "@fps-games/plugin-api": "0.2.1-beta.2",
30
+ "@fps-games/plugin-hierarchy": "0.2.1-beta.2"
31
31
  }
32
32
  }
@@ -48,6 +48,7 @@ export type EditorToolCancelReason = EditorToolDeactivationReason | 'user';
48
48
  /** A headless Tool runtime. Renderer resources are supplied through injected closures/ports. */
49
49
  export interface EditorToolRuntime {
50
50
  activate(context: EditingContextSnapshot): void | Promise<void>;
51
+ reconcile?(context: EditingContextSnapshot): void | Promise<void>;
51
52
  rebind?(context: EditingContextSnapshot): void | Promise<void>;
52
53
  cancel?(reason: EditorToolCancelReason): void | Promise<void>;
53
54
  deactivate?(reason: EditorToolDeactivationReason): void | Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"editor-tools.d.ts","sourceRoot":"","sources":["../src/editor-tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"editor-tools.d.ts","sourceRoot":"","sources":["../src/editor-tools.ts"],"names":[],"mappings":"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"}
@@ -164,8 +164,10 @@ export function createEditorToolManager(options) {
164
164
  if (availability.state !== 'enabled') {
165
165
  throw new Error(`Editor tool is ${availability.state}: ${toolId} (${availability.reason})`);
166
166
  }
167
- if (active?.registration.definition.id === toolId)
167
+ if (active?.registration.definition.id === toolId) {
168
+ await active.runtime.reconcile?.(nextContext);
168
169
  return;
170
+ }
169
171
  activationGeneration += 1;
170
172
  const previous = active;
171
173
  active = null;
@@ -1 +1 @@
1
- {"version":3,"file":"editor-tools.js","sourceRoot":"","sources":["../src/editor-tools.ts"],"names":[],"mappings":"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","sourcesContent":["import type { FpsDisposer } from '@fps-games/plugin-api';\n\nexport type EditorCapabilityId = string;\n\nexport type CapabilityAvailability =\n | Readonly<{ state: 'enabled' }>\n | Readonly<{ state: 'disabled'; reason: string }>\n | Readonly<{ state: 'hidden'; reason: string }>;\n\nexport interface EditorContextActionPresentation {\n readonly id: string;\n readonly label: string;\n readonly icon: string;\n readonly order: number;\n readonly shortcut?: string;\n readonly availability: CapabilityAvailability;\n readonly danger?: boolean;\n}\n\nexport interface EditingContextSnapshot {\n readonly id: string;\n readonly authority: object;\n readonly revision: number;\n readonly capabilities: Readonly<Record<EditorCapabilityId, CapabilityAvailability>>;\n readonly metadata?: Readonly<Record<string, unknown>>;\n}\n\nexport interface EditingContextProvider {\n readonly id: string;\n readonly priority?: number;\n canProvide(): boolean;\n getSnapshot(): EditingContextSnapshot;\n}\n\nexport type EditorToolKind = 'primary' | 'action';\n\nexport interface EditorToolDefinition {\n readonly id: string;\n readonly label: string;\n readonly icon?: string;\n readonly group: string;\n readonly order?: number;\n readonly shortcut?: string;\n readonly kind: EditorToolKind;\n readonly requiredCapabilities?: readonly EditorCapabilityId[];\n readonly fallbackToolId?: string;\n}\n\nexport type EditorToolDeactivationReason =\n | 'tool-change'\n | 'context-change'\n | 'unregistered'\n | 'manager-dispose'\n | 'activation-rollback';\n\nexport type EditorToolCancelReason = EditorToolDeactivationReason | 'user';\n\n/** A headless Tool runtime. Renderer resources are supplied through injected closures/ports. */\nexport interface EditorToolRuntime {\n activate(context: EditingContextSnapshot): void | Promise<void>;\n rebind?(context: EditingContextSnapshot): void | Promise<void>;\n cancel?(reason: EditorToolCancelReason): void | Promise<void>;\n deactivate?(reason: EditorToolDeactivationReason): void | Promise<void>;\n dispose?(): void | Promise<void>;\n}\n\nexport interface EditorToolRuntimeFactoryContext {\n readonly definition: EditorToolDefinition;\n}\n\nexport interface EditorToolRegistration {\n readonly definition: EditorToolDefinition;\n readonly createRuntime: (context: EditorToolRuntimeFactoryContext) => EditorToolRuntime;\n}\n\nexport interface EditorToolPresentation {\n readonly id: string;\n readonly label: string;\n readonly icon?: string;\n readonly group: string;\n readonly order: number;\n readonly shortcut?: string;\n readonly kind: EditorToolKind;\n readonly availability: CapabilityAvailability;\n readonly active: boolean;\n}\n\nexport interface EditorToolRegistrySnapshot {\n readonly revision: number;\n readonly registrations: readonly EditorToolRegistration[];\n}\n\nexport interface EditorToolRegistry {\n register(registration: EditorToolRegistration): FpsDisposer;\n get(id: string): EditorToolRegistration | undefined;\n snapshot(): EditorToolRegistrySnapshot;\n subscribe(listener: (snapshot: EditorToolRegistrySnapshot) => void): FpsDisposer;\n}\n\nexport interface EditorToolManagerSnapshot {\n readonly revision: number;\n readonly context: EditingContextSnapshot | null;\n readonly activeToolId: string | null;\n readonly activationGeneration: number;\n readonly tools: readonly EditorToolPresentation[];\n}\n\nexport interface EditorToolManager {\n snapshot(): EditorToolManagerSnapshot;\n subscribe(listener: (snapshot: EditorToolManagerSnapshot) => void): FpsDisposer;\n activate(toolId: string): Promise<void>;\n cancel(reason?: EditorToolCancelReason): Promise<void>;\n rebindContext(context: EditingContextSnapshot | null): Promise<void>;\n whenIdle(): Promise<void>;\n dispose(): Promise<void>;\n}\n\nexport interface CreateEditorToolManagerOptions {\n readonly registry: EditorToolRegistry;\n readonly context?: EditingContextSnapshot | null;\n readonly fallbackToolId?: string;\n}\n\ninterface EditorToolRuntimeLease {\n readonly registration: EditorToolRegistration;\n readonly runtime: EditorToolRuntime;\n cleanup: {\n readonly reason: EditorToolDeactivationReason;\n cancelComplete: boolean;\n deactivateComplete: boolean;\n disposeComplete: boolean;\n } | null;\n}\n\nconst ENABLED: CapabilityAvailability = Object.freeze({ state: 'enabled' });\n\nexport function createEditorToolRegistry(): EditorToolRegistry {\n const registrations = new Map<string, EditorToolRegistration>();\n const listeners = new Set<(snapshot: EditorToolRegistrySnapshot) => void>();\n let revision = 0;\n const snapshot = (): EditorToolRegistrySnapshot => Object.freeze({\n revision,\n registrations: Object.freeze([...registrations.values()].sort(compareToolRegistrations)),\n });\n const publish = (): void => {\n const next = snapshot();\n for (const listener of [...listeners]) listener(next);\n };\n const registry: EditorToolRegistry = {\n register(registration) {\n const frozen = snapshotEditorToolRegistration(registration);\n const id = frozen.definition.id;\n if (registrations.has(id)) throw new Error(`Duplicate editor tool id: ${id}`);\n registrations.set(id, frozen);\n revision += 1;\n publish();\n let active = true;\n return () => {\n if (!active) return;\n active = false;\n if (registrations.get(id) !== frozen) return;\n registrations.delete(id);\n revision += 1;\n publish();\n };\n },\n get: id => registrations.get(id),\n snapshot,\n subscribe(listener) {\n listeners.add(listener);\n return () => { listeners.delete(listener); };\n },\n };\n return Object.freeze(registry);\n}\n\nexport function createEditorToolManager(options: CreateEditorToolManagerOptions): EditorToolManager {\n const listeners = new Set<(snapshot: EditorToolManagerSnapshot) => void>();\n let context = options.context ? snapshotEditingContext(options.context) : null;\n let active: EditorToolRuntimeLease | null = null;\n const pendingCleanups = new Set<EditorToolRuntimeLease>();\n let activationGeneration = 0;\n let revision = 0;\n let disposed = false;\n let disposeRequested = false;\n let registrySubscribed = true;\n let backgroundFailure: unknown = null;\n let queue: Promise<void> = Promise.resolve();\n\n const managerSnapshot = (): EditorToolManagerSnapshot => Object.freeze({\n revision,\n context,\n activeToolId: active?.registration.definition.id ?? null,\n activationGeneration,\n tools: Object.freeze(options.registry.snapshot().registrations.map(registration => (\n createToolPresentation(registration.definition, context, active?.registration.definition.id ?? null)\n ))),\n });\n const publish = (): void => {\n revision += 1;\n const next = managerSnapshot();\n for (const listener of [...listeners]) listener(next);\n };\n const enqueue = (operation: () => Promise<void>): Promise<void> => {\n const result = queue.then(operation, operation);\n queue = result.catch(() => {});\n return result;\n };\n const requireContext = (): EditingContextSnapshot => {\n if (!context) throw new Error('Editor Tool activation requires an active Editing Context.');\n return context;\n };\n const resolveFallbackId = (removed?: EditorToolRegistration): string | null => {\n const candidates = [\n removed?.definition.fallbackToolId,\n options.fallbackToolId,\n ];\n for (const candidate of candidates) {\n if (!candidate || !options.registry.get(candidate)) continue;\n if (resolveToolAvailability(options.registry.get(candidate)!.definition, context).state === 'enabled') {\n return candidate;\n }\n }\n return options.registry.snapshot().registrations.find(registration => (\n registration.definition.kind === 'primary'\n && resolveToolAvailability(registration.definition, context).state === 'enabled'\n ))?.definition.id ?? null;\n };\n const cleanupRuntime = async (\n current: EditorToolRuntimeLease,\n reason: EditorToolDeactivationReason,\n ): Promise<void> => {\n const cleanup = current.cleanup ??= {\n reason,\n cancelComplete: !current.runtime.cancel,\n deactivateComplete: !current.runtime.deactivate,\n disposeComplete: !current.runtime.dispose,\n };\n pendingCleanups.add(current);\n const errors: unknown[] = [];\n if (!cleanup.cancelComplete) {\n try {\n await current.runtime.cancel!(cleanup.reason);\n cleanup.cancelComplete = true;\n } catch (error) { errors.push(error); }\n }\n if (!cleanup.deactivateComplete) {\n try {\n await current.runtime.deactivate!(cleanup.reason);\n cleanup.deactivateComplete = true;\n } catch (error) { errors.push(error); }\n }\n if (!cleanup.disposeComplete) {\n try {\n await current.runtime.dispose!();\n cleanup.disposeComplete = true;\n } catch (error) { errors.push(error); }\n }\n if (cleanup.cancelComplete && cleanup.deactivateComplete && cleanup.disposeComplete) {\n pendingCleanups.delete(current);\n }\n if (errors.length > 0) throw createAggregateError('Editor Tool cleanup failed.', errors);\n };\n const retryPendingCleanups = async (): Promise<void> => {\n const errors: unknown[] = [];\n for (const pending of [...pendingCleanups]) {\n try { await cleanupRuntime(pending, pending.cleanup?.reason ?? 'manager-dispose'); }\n catch (error) { errors.push(error); }\n }\n if (errors.length > 0) throw createAggregateError('Editor Tool cleanup retry failed.', errors);\n };\n const createRuntimeLease = (\n registration: EditorToolRegistration,\n runtime: EditorToolRuntime,\n ): EditorToolRuntimeLease => ({ registration, runtime, cleanup: null });\n const activateNow = async (toolId: string, allowPendingCleanup = false): Promise<void> => {\n if (disposed || disposeRequested) throw new Error('Editor Tool Manager is disposed.');\n if (!allowPendingCleanup && pendingCleanups.size > 0) await retryPendingCleanups();\n const registration = options.registry.get(toolId);\n if (!registration) throw new Error(`Unknown editor tool: ${toolId}`);\n if (registration.definition.kind !== 'primary') {\n throw new Error(`Editor Tool Manager can only activate primary tools: ${toolId}`);\n }\n const nextContext = requireContext();\n const availability = resolveToolAvailability(registration.definition, nextContext);\n if (availability.state !== 'enabled') {\n throw new Error(`Editor tool is ${availability.state}: ${toolId} (${availability.reason})`);\n }\n if (active?.registration.definition.id === toolId) return;\n\n activationGeneration += 1;\n const previous = active;\n active = null;\n if (previous) {\n try {\n await cleanupRuntime(previous, 'tool-change');\n } catch (error) {\n publish();\n throw error;\n }\n }\n\n let candidate: EditorToolRuntimeLease | null = null;\n try {\n const runtime = registration.createRuntime(Object.freeze({ definition: registration.definition }));\n assertEditorToolRuntime(runtime, toolId);\n candidate = createRuntimeLease(registration, runtime);\n await candidate.runtime.activate(nextContext);\n active = candidate;\n publish();\n } catch (error) {\n const rollbackErrors: unknown[] = [error];\n if (candidate) {\n try { await cleanupRuntime(candidate, 'activation-rollback'); }\n catch (cleanupError) { rollbackErrors.push(cleanupError); }\n }\n if (previous && options.registry.get(previous.registration.definition.id) === previous.registration) {\n let rollbackLease: EditorToolRuntimeLease | null = null;\n try {\n const rollbackRuntime = previous.registration.createRuntime(Object.freeze({\n definition: previous.registration.definition,\n }));\n assertEditorToolRuntime(rollbackRuntime, previous.registration.definition.id);\n rollbackLease = createRuntimeLease(previous.registration, rollbackRuntime);\n await rollbackLease.runtime.activate(nextContext);\n active = rollbackLease;\n } catch (restoreError) {\n rollbackErrors.push(restoreError);\n active = null;\n if (rollbackLease) {\n try { await cleanupRuntime(rollbackLease, 'activation-rollback'); }\n catch (cleanupError) { rollbackErrors.push(cleanupError); }\n }\n const fallbackId = resolveFallbackId(registration);\n if (fallbackId) {\n try { await activateNow(fallbackId, true); }\n catch (fallbackError) { rollbackErrors.push(fallbackError); }\n }\n }\n } else {\n const fallbackId = resolveFallbackId(registration);\n if (fallbackId && fallbackId !== toolId) {\n try { await activateNow(fallbackId, true); }\n catch (fallbackError) { rollbackErrors.push(fallbackError); }\n }\n }\n publish();\n if (rollbackErrors.length === 1) throw error;\n throw createAggregateError('Editor Tool activation and rollback failed.', rollbackErrors);\n }\n };\n const handleRegistryChange = (): void => {\n if (disposed) return;\n publish();\n const current = active;\n if (!current || options.registry.get(current.registration.definition.id) === current.registration) return;\n void enqueue(async () => {\n try {\n if (active !== current) return;\n active = null;\n activationGeneration += 1;\n let cleanupError: unknown;\n try { await cleanupRuntime(current, 'unregistered'); }\n catch (error) { cleanupError = error; }\n const fallbackId = resolveFallbackId(current.registration);\n let fallbackError: unknown;\n if (fallbackId) {\n try { await activateNow(fallbackId, true); }\n catch (error) { fallbackError = error; }\n } else publish();\n if (cleanupError && fallbackError) {\n throw createAggregateError('Editor Tool unload cleanup and fallback failed.', [cleanupError, fallbackError]);\n }\n if (cleanupError) throw cleanupError;\n if (fallbackError) throw fallbackError;\n } catch (error) {\n backgroundFailure = backgroundFailure\n ? createAggregateError('Multiple background Editor Tool operations failed.', [backgroundFailure, error])\n : error;\n publish();\n throw error;\n }\n }).catch(() => { /* Background failure is retained for whenIdle()/dispose retry. */ });\n };\n const unsubscribeRegistry = options.registry.subscribe(handleRegistryChange);\n\n const manager: EditorToolManager = {\n snapshot: managerSnapshot,\n subscribe(listener) {\n if (disposed) throw new Error('Editor Tool Manager is disposed.');\n listeners.add(listener);\n return () => { listeners.delete(listener); };\n },\n activate(toolId) {\n return enqueue(() => activateNow(toolId));\n },\n cancel(reason = 'user') {\n return enqueue(async () => {\n if (disposed) return;\n await active?.runtime.cancel?.(reason);\n });\n },\n rebindContext(nextContext) {\n return enqueue(async () => {\n if (disposed || disposeRequested) throw new Error('Editor Tool Manager is disposed.');\n const frozen = nextContext ? snapshotEditingContext(nextContext) : null;\n if (sameContextRevision(context, frozen)) return;\n const previousContext = context;\n context = frozen;\n activationGeneration += 1;\n const current = active;\n if (!current) {\n publish();\n return;\n }\n const availability = resolveToolAvailability(current.registration.definition, context);\n if (!context || availability.state !== 'enabled') {\n active = null;\n let cleanupError: unknown;\n try { await cleanupRuntime(current, 'context-change'); }\n catch (error) { cleanupError = error; }\n const fallbackId = resolveFallbackId(current.registration);\n let fallbackError: unknown;\n if (fallbackId) {\n try { await activateNow(fallbackId); }\n catch (error) { fallbackError = error; }\n } else publish();\n if (cleanupError && fallbackError) {\n throw createAggregateError(\n 'Editing Context cleanup and fallback activation failed.',\n [cleanupError, fallbackError],\n );\n }\n if (cleanupError) throw cleanupError;\n if (fallbackError) throw fallbackError;\n return;\n }\n try {\n if (current.runtime.rebind) await current.runtime.rebind(context);\n else {\n await current.runtime.deactivate?.('context-change');\n await current.runtime.activate(context);\n }\n } catch (error) {\n context = previousContext;\n let rollbackError: unknown;\n try {\n if (!previousContext) throw new Error('Previous Editing Context is unavailable.');\n if (current.runtime.rebind) await current.runtime.rebind(previousContext);\n else await current.runtime.activate(previousContext);\n } catch (caught) {\n rollbackError = caught;\n active = null;\n try { await cleanupRuntime(current, 'activation-rollback'); }\n catch (cleanupError) {\n rollbackError = createAggregateError('Editing Context rollback cleanup failed.', [caught, cleanupError]);\n }\n const fallbackId = resolveFallbackId(current.registration);\n if (fallbackId && fallbackId !== current.registration.definition.id) {\n try { await activateNow(fallbackId, true); }\n catch (fallbackError) {\n rollbackError = createAggregateError(\n 'Editing Context rollback and fallback failed.',\n [rollbackError, fallbackError],\n );\n }\n }\n }\n publish();\n if (rollbackError) {\n throw createAggregateError('Editing Context rebind and rollback failed.', [error, rollbackError]);\n }\n throw error;\n }\n publish();\n });\n },\n whenIdle() {\n return queue.then(async () => {\n if (backgroundFailure) {\n const error = backgroundFailure;\n backgroundFailure = null;\n throw error;\n }\n if (pendingCleanups.size > 0) await retryPendingCleanups();\n });\n },\n dispose() {\n return enqueue(async () => {\n if (disposed) return;\n disposeRequested = true;\n if (registrySubscribed) {\n registrySubscribed = false;\n unsubscribeRegistry();\n }\n const current = active;\n const previouslyPending = [...pendingCleanups];\n active = null;\n activationGeneration += 1;\n const cleanupErrors: unknown[] = [];\n if (current) {\n try { await cleanupRuntime(current, 'manager-dispose'); }\n catch (error) { cleanupErrors.push(error); }\n }\n for (const pending of previouslyPending) {\n try { await cleanupRuntime(pending, pending.cleanup?.reason ?? 'manager-dispose'); }\n catch (error) { cleanupErrors.push(error); }\n }\n if (cleanupErrors.length > 0) {\n throw createAggregateError('Editor Tool Manager dispose cleanup failed.', cleanupErrors);\n }\n disposed = true;\n listeners.clear();\n });\n },\n };\n return Object.freeze(manager);\n}\n\nexport function resolveEditingContextProvider(\n providers: readonly EditingContextProvider[],\n): EditingContextProvider {\n const available = providers.filter(provider => provider.canProvide()).sort((left, right) => {\n const priority = (right.priority ?? 0) - (left.priority ?? 0);\n return priority || left.id.localeCompare(right.id);\n });\n const selected = available[0];\n if (!selected) throw new Error('No Editing Context provider can provide the current scope.');\n if (available[1] && (available[1].priority ?? 0) === (selected.priority ?? 0)) {\n throw new Error(\n `Ambiguous Editing Context providers at priority ${selected.priority ?? 0}: ${selected.id}, ${available[1].id}`,\n );\n }\n return selected;\n}\n\nexport function resolveToolAvailability(\n definition: EditorToolDefinition,\n context: EditingContextSnapshot | null,\n): CapabilityAvailability {\n if (!context) return Object.freeze({ state: 'disabled', reason: 'No active Editing Context.' });\n let disabled: CapabilityAvailability | null = null;\n for (const capabilityId of definition.requiredCapabilities ?? []) {\n const availability = context.capabilities[capabilityId]\n ?? Object.freeze({ state: 'hidden' as const, reason: `Capability is unavailable: ${capabilityId}` });\n if (availability.state === 'hidden') return availability;\n if (availability.state === 'disabled') disabled ??= availability;\n }\n return disabled ?? ENABLED;\n}\n\nexport function snapshotEditorToolRegistration(\n registration: EditorToolRegistration,\n): EditorToolRegistration {\n if (!registration || typeof registration !== 'object') {\n throw new Error('Editor Tool registration must be an object.');\n }\n if (typeof registration.createRuntime !== 'function') {\n throw new Error('Editor Tool registration requires createRuntime().');\n }\n return Object.freeze({\n definition: snapshotEditorToolDefinition(registration.definition),\n createRuntime: registration.createRuntime,\n });\n}\n\nexport function snapshotEditorToolDefinition(definition: EditorToolDefinition): EditorToolDefinition {\n if (!definition || typeof definition !== 'object') throw new Error('Editor Tool definition must be an object.');\n const id = assertNamespacedId(definition.id, 'Editor Tool id');\n const label = assertNonEmpty(definition.label, 'Editor Tool label');\n const group = assertNamespacedId(definition.group, 'Editor Tool group');\n if (definition.kind !== 'primary' && definition.kind !== 'action') {\n throw new Error(`Unknown Editor Tool kind: ${String(definition.kind)}`);\n }\n const order = definition.order ?? 0;\n if (!Number.isFinite(order)) throw new Error('Editor Tool order must be finite.');\n const requiredCapabilities = Object.freeze((definition.requiredCapabilities ?? []).map(capability => (\n assertNamespacedId(capability, 'Editor capability id')\n )));\n if (new Set(requiredCapabilities).size !== requiredCapabilities.length) {\n throw new Error(`Editor Tool required capabilities must be unique: ${id}`);\n }\n return Object.freeze({\n id,\n label,\n group,\n order,\n kind: definition.kind,\n requiredCapabilities,\n ...(definition.icon === undefined ? {} : { icon: assertNonEmpty(definition.icon, 'Editor Tool icon') }),\n ...(definition.shortcut === undefined ? {} : {\n shortcut: assertNonEmpty(definition.shortcut, 'Editor Tool shortcut').toUpperCase(),\n }),\n ...(definition.fallbackToolId === undefined ? {} : {\n fallbackToolId: assertNamespacedId(definition.fallbackToolId, 'Editor Tool fallback id'),\n }),\n });\n}\n\nexport function snapshotEditingContext(context: EditingContextSnapshot): EditingContextSnapshot {\n if (!context || typeof context !== 'object') throw new Error('Editing Context snapshot must be an object.');\n const id = assertNamespacedId(context.id, 'Editing Context id');\n if (!context.authority || typeof context.authority !== 'object') {\n throw new Error('Editing Context authority must be an object token.');\n }\n if (!Number.isSafeInteger(context.revision) || context.revision < 0) {\n throw new Error('Editing Context revision must be a non-negative safe integer.');\n }\n const capabilities: Record<string, CapabilityAvailability> = {};\n for (const [capabilityId, availability] of Object.entries(context.capabilities ?? {})) {\n capabilities[assertNamespacedId(capabilityId, 'Editor capability id')] = snapshotAvailability(availability);\n }\n return Object.freeze({\n id,\n authority: context.authority,\n revision: context.revision,\n capabilities: Object.freeze(capabilities),\n ...(context.metadata ? { metadata: Object.freeze({ ...context.metadata }) } : {}),\n });\n}\n\nfunction createToolPresentation(\n definition: EditorToolDefinition,\n context: EditingContextSnapshot | null,\n activeToolId: string | null,\n): EditorToolPresentation {\n return Object.freeze({\n id: definition.id,\n label: definition.label,\n group: definition.group,\n order: definition.order ?? 0,\n kind: definition.kind,\n availability: resolveToolAvailability(definition, context),\n active: activeToolId === definition.id,\n ...(definition.icon ? { icon: definition.icon } : {}),\n ...(definition.shortcut ? { shortcut: definition.shortcut } : {}),\n });\n}\n\nfunction snapshotAvailability(value: CapabilityAvailability): CapabilityAvailability {\n if (!value || typeof value !== 'object') throw new Error('Capability availability must be an object.');\n if (value.state === 'enabled') return ENABLED;\n if (value.state === 'disabled' || value.state === 'hidden') {\n return Object.freeze({ state: value.state, reason: assertNonEmpty(value.reason, 'Capability reason') });\n }\n throw new Error(`Unknown capability availability state: ${String((value as { state?: unknown }).state)}`);\n}\n\nfunction compareToolRegistrations(left: EditorToolRegistration, right: EditorToolRegistration): number {\n const group = left.definition.group.localeCompare(right.definition.group);\n if (group) return group;\n const order = (left.definition.order ?? 0) - (right.definition.order ?? 0);\n return order || left.definition.id.localeCompare(right.definition.id);\n}\n\nfunction sameContextRevision(\n left: EditingContextSnapshot | null,\n right: EditingContextSnapshot | null,\n): boolean {\n return left === right || (!!left && !!right\n && left.id === right.id\n && left.authority === right.authority\n && left.revision === right.revision);\n}\n\nfunction assertEditorToolRuntime(value: EditorToolRuntime, id: string): void {\n if (!value || typeof value !== 'object' || typeof value.activate !== 'function') {\n throw new Error(`Editor Tool runtime is invalid: ${id}`);\n }\n}\n\nfunction assertNamespacedId(value: string, label: string): string {\n const normalized = assertNonEmpty(value, label);\n if (!/^[a-z0-9]+(?:[._-][a-z0-9]+)+$/.test(normalized)) {\n throw new Error(`${label} must be namespaced lowercase, got: ${value}`);\n }\n return normalized;\n}\n\nfunction assertNonEmpty(value: string, label: string): string {\n if (typeof value !== 'string' || !value.trim()) throw new Error(`${label} must be a non-empty string.`);\n return value.trim();\n}\n\nfunction createAggregateError(message: string, errors: readonly unknown[]): Error {\n const aggregate = new Error(message) as Error & { errors: readonly unknown[] };\n aggregate.errors = Object.freeze([...errors]);\n return aggregate;\n}\n"]}
1
+ {"version":3,"file":"editor-tools.js","sourceRoot":"","sources":["../src/editor-tools.ts"],"names":[],"mappings":"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","sourcesContent":["import type { FpsDisposer } from '@fps-games/plugin-api';\n\nexport type EditorCapabilityId = string;\n\nexport type CapabilityAvailability =\n | Readonly<{ state: 'enabled' }>\n | Readonly<{ state: 'disabled'; reason: string }>\n | Readonly<{ state: 'hidden'; reason: string }>;\n\nexport interface EditorContextActionPresentation {\n readonly id: string;\n readonly label: string;\n readonly icon: string;\n readonly order: number;\n readonly shortcut?: string;\n readonly availability: CapabilityAvailability;\n readonly danger?: boolean;\n}\n\nexport interface EditingContextSnapshot {\n readonly id: string;\n readonly authority: object;\n readonly revision: number;\n readonly capabilities: Readonly<Record<EditorCapabilityId, CapabilityAvailability>>;\n readonly metadata?: Readonly<Record<string, unknown>>;\n}\n\nexport interface EditingContextProvider {\n readonly id: string;\n readonly priority?: number;\n canProvide(): boolean;\n getSnapshot(): EditingContextSnapshot;\n}\n\nexport type EditorToolKind = 'primary' | 'action';\n\nexport interface EditorToolDefinition {\n readonly id: string;\n readonly label: string;\n readonly icon?: string;\n readonly group: string;\n readonly order?: number;\n readonly shortcut?: string;\n readonly kind: EditorToolKind;\n readonly requiredCapabilities?: readonly EditorCapabilityId[];\n readonly fallbackToolId?: string;\n}\n\nexport type EditorToolDeactivationReason =\n | 'tool-change'\n | 'context-change'\n | 'unregistered'\n | 'manager-dispose'\n | 'activation-rollback';\n\nexport type EditorToolCancelReason = EditorToolDeactivationReason | 'user';\n\n/** A headless Tool runtime. Renderer resources are supplied through injected closures/ports. */\nexport interface EditorToolRuntime {\n activate(context: EditingContextSnapshot): void | Promise<void>;\n reconcile?(context: EditingContextSnapshot): void | Promise<void>;\n rebind?(context: EditingContextSnapshot): void | Promise<void>;\n cancel?(reason: EditorToolCancelReason): void | Promise<void>;\n deactivate?(reason: EditorToolDeactivationReason): void | Promise<void>;\n dispose?(): void | Promise<void>;\n}\n\nexport interface EditorToolRuntimeFactoryContext {\n readonly definition: EditorToolDefinition;\n}\n\nexport interface EditorToolRegistration {\n readonly definition: EditorToolDefinition;\n readonly createRuntime: (context: EditorToolRuntimeFactoryContext) => EditorToolRuntime;\n}\n\nexport interface EditorToolPresentation {\n readonly id: string;\n readonly label: string;\n readonly icon?: string;\n readonly group: string;\n readonly order: number;\n readonly shortcut?: string;\n readonly kind: EditorToolKind;\n readonly availability: CapabilityAvailability;\n readonly active: boolean;\n}\n\nexport interface EditorToolRegistrySnapshot {\n readonly revision: number;\n readonly registrations: readonly EditorToolRegistration[];\n}\n\nexport interface EditorToolRegistry {\n register(registration: EditorToolRegistration): FpsDisposer;\n get(id: string): EditorToolRegistration | undefined;\n snapshot(): EditorToolRegistrySnapshot;\n subscribe(listener: (snapshot: EditorToolRegistrySnapshot) => void): FpsDisposer;\n}\n\nexport interface EditorToolManagerSnapshot {\n readonly revision: number;\n readonly context: EditingContextSnapshot | null;\n readonly activeToolId: string | null;\n readonly activationGeneration: number;\n readonly tools: readonly EditorToolPresentation[];\n}\n\nexport interface EditorToolManager {\n snapshot(): EditorToolManagerSnapshot;\n subscribe(listener: (snapshot: EditorToolManagerSnapshot) => void): FpsDisposer;\n activate(toolId: string): Promise<void>;\n cancel(reason?: EditorToolCancelReason): Promise<void>;\n rebindContext(context: EditingContextSnapshot | null): Promise<void>;\n whenIdle(): Promise<void>;\n dispose(): Promise<void>;\n}\n\nexport interface CreateEditorToolManagerOptions {\n readonly registry: EditorToolRegistry;\n readonly context?: EditingContextSnapshot | null;\n readonly fallbackToolId?: string;\n}\n\ninterface EditorToolRuntimeLease {\n readonly registration: EditorToolRegistration;\n readonly runtime: EditorToolRuntime;\n cleanup: {\n readonly reason: EditorToolDeactivationReason;\n cancelComplete: boolean;\n deactivateComplete: boolean;\n disposeComplete: boolean;\n } | null;\n}\n\nconst ENABLED: CapabilityAvailability = Object.freeze({ state: 'enabled' });\n\nexport function createEditorToolRegistry(): EditorToolRegistry {\n const registrations = new Map<string, EditorToolRegistration>();\n const listeners = new Set<(snapshot: EditorToolRegistrySnapshot) => void>();\n let revision = 0;\n const snapshot = (): EditorToolRegistrySnapshot => Object.freeze({\n revision,\n registrations: Object.freeze([...registrations.values()].sort(compareToolRegistrations)),\n });\n const publish = (): void => {\n const next = snapshot();\n for (const listener of [...listeners]) listener(next);\n };\n const registry: EditorToolRegistry = {\n register(registration) {\n const frozen = snapshotEditorToolRegistration(registration);\n const id = frozen.definition.id;\n if (registrations.has(id)) throw new Error(`Duplicate editor tool id: ${id}`);\n registrations.set(id, frozen);\n revision += 1;\n publish();\n let active = true;\n return () => {\n if (!active) return;\n active = false;\n if (registrations.get(id) !== frozen) return;\n registrations.delete(id);\n revision += 1;\n publish();\n };\n },\n get: id => registrations.get(id),\n snapshot,\n subscribe(listener) {\n listeners.add(listener);\n return () => { listeners.delete(listener); };\n },\n };\n return Object.freeze(registry);\n}\n\nexport function createEditorToolManager(options: CreateEditorToolManagerOptions): EditorToolManager {\n const listeners = new Set<(snapshot: EditorToolManagerSnapshot) => void>();\n let context = options.context ? snapshotEditingContext(options.context) : null;\n let active: EditorToolRuntimeLease | null = null;\n const pendingCleanups = new Set<EditorToolRuntimeLease>();\n let activationGeneration = 0;\n let revision = 0;\n let disposed = false;\n let disposeRequested = false;\n let registrySubscribed = true;\n let backgroundFailure: unknown = null;\n let queue: Promise<void> = Promise.resolve();\n\n const managerSnapshot = (): EditorToolManagerSnapshot => Object.freeze({\n revision,\n context,\n activeToolId: active?.registration.definition.id ?? null,\n activationGeneration,\n tools: Object.freeze(options.registry.snapshot().registrations.map(registration => (\n createToolPresentation(registration.definition, context, active?.registration.definition.id ?? null)\n ))),\n });\n const publish = (): void => {\n revision += 1;\n const next = managerSnapshot();\n for (const listener of [...listeners]) listener(next);\n };\n const enqueue = (operation: () => Promise<void>): Promise<void> => {\n const result = queue.then(operation, operation);\n queue = result.catch(() => {});\n return result;\n };\n const requireContext = (): EditingContextSnapshot => {\n if (!context) throw new Error('Editor Tool activation requires an active Editing Context.');\n return context;\n };\n const resolveFallbackId = (removed?: EditorToolRegistration): string | null => {\n const candidates = [\n removed?.definition.fallbackToolId,\n options.fallbackToolId,\n ];\n for (const candidate of candidates) {\n if (!candidate || !options.registry.get(candidate)) continue;\n if (resolveToolAvailability(options.registry.get(candidate)!.definition, context).state === 'enabled') {\n return candidate;\n }\n }\n return options.registry.snapshot().registrations.find(registration => (\n registration.definition.kind === 'primary'\n && resolveToolAvailability(registration.definition, context).state === 'enabled'\n ))?.definition.id ?? null;\n };\n const cleanupRuntime = async (\n current: EditorToolRuntimeLease,\n reason: EditorToolDeactivationReason,\n ): Promise<void> => {\n const cleanup = current.cleanup ??= {\n reason,\n cancelComplete: !current.runtime.cancel,\n deactivateComplete: !current.runtime.deactivate,\n disposeComplete: !current.runtime.dispose,\n };\n pendingCleanups.add(current);\n const errors: unknown[] = [];\n if (!cleanup.cancelComplete) {\n try {\n await current.runtime.cancel!(cleanup.reason);\n cleanup.cancelComplete = true;\n } catch (error) { errors.push(error); }\n }\n if (!cleanup.deactivateComplete) {\n try {\n await current.runtime.deactivate!(cleanup.reason);\n cleanup.deactivateComplete = true;\n } catch (error) { errors.push(error); }\n }\n if (!cleanup.disposeComplete) {\n try {\n await current.runtime.dispose!();\n cleanup.disposeComplete = true;\n } catch (error) { errors.push(error); }\n }\n if (cleanup.cancelComplete && cleanup.deactivateComplete && cleanup.disposeComplete) {\n pendingCleanups.delete(current);\n }\n if (errors.length > 0) throw createAggregateError('Editor Tool cleanup failed.', errors);\n };\n const retryPendingCleanups = async (): Promise<void> => {\n const errors: unknown[] = [];\n for (const pending of [...pendingCleanups]) {\n try { await cleanupRuntime(pending, pending.cleanup?.reason ?? 'manager-dispose'); }\n catch (error) { errors.push(error); }\n }\n if (errors.length > 0) throw createAggregateError('Editor Tool cleanup retry failed.', errors);\n };\n const createRuntimeLease = (\n registration: EditorToolRegistration,\n runtime: EditorToolRuntime,\n ): EditorToolRuntimeLease => ({ registration, runtime, cleanup: null });\n const activateNow = async (toolId: string, allowPendingCleanup = false): Promise<void> => {\n if (disposed || disposeRequested) throw new Error('Editor Tool Manager is disposed.');\n if (!allowPendingCleanup && pendingCleanups.size > 0) await retryPendingCleanups();\n const registration = options.registry.get(toolId);\n if (!registration) throw new Error(`Unknown editor tool: ${toolId}`);\n if (registration.definition.kind !== 'primary') {\n throw new Error(`Editor Tool Manager can only activate primary tools: ${toolId}`);\n }\n const nextContext = requireContext();\n const availability = resolveToolAvailability(registration.definition, nextContext);\n if (availability.state !== 'enabled') {\n throw new Error(`Editor tool is ${availability.state}: ${toolId} (${availability.reason})`);\n }\n if (active?.registration.definition.id === toolId) {\n await active.runtime.reconcile?.(nextContext);\n return;\n }\n\n activationGeneration += 1;\n const previous = active;\n active = null;\n if (previous) {\n try {\n await cleanupRuntime(previous, 'tool-change');\n } catch (error) {\n publish();\n throw error;\n }\n }\n\n let candidate: EditorToolRuntimeLease | null = null;\n try {\n const runtime = registration.createRuntime(Object.freeze({ definition: registration.definition }));\n assertEditorToolRuntime(runtime, toolId);\n candidate = createRuntimeLease(registration, runtime);\n await candidate.runtime.activate(nextContext);\n active = candidate;\n publish();\n } catch (error) {\n const rollbackErrors: unknown[] = [error];\n if (candidate) {\n try { await cleanupRuntime(candidate, 'activation-rollback'); }\n catch (cleanupError) { rollbackErrors.push(cleanupError); }\n }\n if (previous && options.registry.get(previous.registration.definition.id) === previous.registration) {\n let rollbackLease: EditorToolRuntimeLease | null = null;\n try {\n const rollbackRuntime = previous.registration.createRuntime(Object.freeze({\n definition: previous.registration.definition,\n }));\n assertEditorToolRuntime(rollbackRuntime, previous.registration.definition.id);\n rollbackLease = createRuntimeLease(previous.registration, rollbackRuntime);\n await rollbackLease.runtime.activate(nextContext);\n active = rollbackLease;\n } catch (restoreError) {\n rollbackErrors.push(restoreError);\n active = null;\n if (rollbackLease) {\n try { await cleanupRuntime(rollbackLease, 'activation-rollback'); }\n catch (cleanupError) { rollbackErrors.push(cleanupError); }\n }\n const fallbackId = resolveFallbackId(registration);\n if (fallbackId) {\n try { await activateNow(fallbackId, true); }\n catch (fallbackError) { rollbackErrors.push(fallbackError); }\n }\n }\n } else {\n const fallbackId = resolveFallbackId(registration);\n if (fallbackId && fallbackId !== toolId) {\n try { await activateNow(fallbackId, true); }\n catch (fallbackError) { rollbackErrors.push(fallbackError); }\n }\n }\n publish();\n if (rollbackErrors.length === 1) throw error;\n throw createAggregateError('Editor Tool activation and rollback failed.', rollbackErrors);\n }\n };\n const handleRegistryChange = (): void => {\n if (disposed) return;\n publish();\n const current = active;\n if (!current || options.registry.get(current.registration.definition.id) === current.registration) return;\n void enqueue(async () => {\n try {\n if (active !== current) return;\n active = null;\n activationGeneration += 1;\n let cleanupError: unknown;\n try { await cleanupRuntime(current, 'unregistered'); }\n catch (error) { cleanupError = error; }\n const fallbackId = resolveFallbackId(current.registration);\n let fallbackError: unknown;\n if (fallbackId) {\n try { await activateNow(fallbackId, true); }\n catch (error) { fallbackError = error; }\n } else publish();\n if (cleanupError && fallbackError) {\n throw createAggregateError('Editor Tool unload cleanup and fallback failed.', [cleanupError, fallbackError]);\n }\n if (cleanupError) throw cleanupError;\n if (fallbackError) throw fallbackError;\n } catch (error) {\n backgroundFailure = backgroundFailure\n ? createAggregateError('Multiple background Editor Tool operations failed.', [backgroundFailure, error])\n : error;\n publish();\n throw error;\n }\n }).catch(() => { /* Background failure is retained for whenIdle()/dispose retry. */ });\n };\n const unsubscribeRegistry = options.registry.subscribe(handleRegistryChange);\n\n const manager: EditorToolManager = {\n snapshot: managerSnapshot,\n subscribe(listener) {\n if (disposed) throw new Error('Editor Tool Manager is disposed.');\n listeners.add(listener);\n return () => { listeners.delete(listener); };\n },\n activate(toolId) {\n return enqueue(() => activateNow(toolId));\n },\n cancel(reason = 'user') {\n return enqueue(async () => {\n if (disposed) return;\n await active?.runtime.cancel?.(reason);\n });\n },\n rebindContext(nextContext) {\n return enqueue(async () => {\n if (disposed || disposeRequested) throw new Error('Editor Tool Manager is disposed.');\n const frozen = nextContext ? snapshotEditingContext(nextContext) : null;\n if (sameContextRevision(context, frozen)) return;\n const previousContext = context;\n context = frozen;\n activationGeneration += 1;\n const current = active;\n if (!current) {\n publish();\n return;\n }\n const availability = resolveToolAvailability(current.registration.definition, context);\n if (!context || availability.state !== 'enabled') {\n active = null;\n let cleanupError: unknown;\n try { await cleanupRuntime(current, 'context-change'); }\n catch (error) { cleanupError = error; }\n const fallbackId = resolveFallbackId(current.registration);\n let fallbackError: unknown;\n if (fallbackId) {\n try { await activateNow(fallbackId); }\n catch (error) { fallbackError = error; }\n } else publish();\n if (cleanupError && fallbackError) {\n throw createAggregateError(\n 'Editing Context cleanup and fallback activation failed.',\n [cleanupError, fallbackError],\n );\n }\n if (cleanupError) throw cleanupError;\n if (fallbackError) throw fallbackError;\n return;\n }\n try {\n if (current.runtime.rebind) await current.runtime.rebind(context);\n else {\n await current.runtime.deactivate?.('context-change');\n await current.runtime.activate(context);\n }\n } catch (error) {\n context = previousContext;\n let rollbackError: unknown;\n try {\n if (!previousContext) throw new Error('Previous Editing Context is unavailable.');\n if (current.runtime.rebind) await current.runtime.rebind(previousContext);\n else await current.runtime.activate(previousContext);\n } catch (caught) {\n rollbackError = caught;\n active = null;\n try { await cleanupRuntime(current, 'activation-rollback'); }\n catch (cleanupError) {\n rollbackError = createAggregateError('Editing Context rollback cleanup failed.', [caught, cleanupError]);\n }\n const fallbackId = resolveFallbackId(current.registration);\n if (fallbackId && fallbackId !== current.registration.definition.id) {\n try { await activateNow(fallbackId, true); }\n catch (fallbackError) {\n rollbackError = createAggregateError(\n 'Editing Context rollback and fallback failed.',\n [rollbackError, fallbackError],\n );\n }\n }\n }\n publish();\n if (rollbackError) {\n throw createAggregateError('Editing Context rebind and rollback failed.', [error, rollbackError]);\n }\n throw error;\n }\n publish();\n });\n },\n whenIdle() {\n return queue.then(async () => {\n if (backgroundFailure) {\n const error = backgroundFailure;\n backgroundFailure = null;\n throw error;\n }\n if (pendingCleanups.size > 0) await retryPendingCleanups();\n });\n },\n dispose() {\n return enqueue(async () => {\n if (disposed) return;\n disposeRequested = true;\n if (registrySubscribed) {\n registrySubscribed = false;\n unsubscribeRegistry();\n }\n const current = active;\n const previouslyPending = [...pendingCleanups];\n active = null;\n activationGeneration += 1;\n const cleanupErrors: unknown[] = [];\n if (current) {\n try { await cleanupRuntime(current, 'manager-dispose'); }\n catch (error) { cleanupErrors.push(error); }\n }\n for (const pending of previouslyPending) {\n try { await cleanupRuntime(pending, pending.cleanup?.reason ?? 'manager-dispose'); }\n catch (error) { cleanupErrors.push(error); }\n }\n if (cleanupErrors.length > 0) {\n throw createAggregateError('Editor Tool Manager dispose cleanup failed.', cleanupErrors);\n }\n disposed = true;\n listeners.clear();\n });\n },\n };\n return Object.freeze(manager);\n}\n\nexport function resolveEditingContextProvider(\n providers: readonly EditingContextProvider[],\n): EditingContextProvider {\n const available = providers.filter(provider => provider.canProvide()).sort((left, right) => {\n const priority = (right.priority ?? 0) - (left.priority ?? 0);\n return priority || left.id.localeCompare(right.id);\n });\n const selected = available[0];\n if (!selected) throw new Error('No Editing Context provider can provide the current scope.');\n if (available[1] && (available[1].priority ?? 0) === (selected.priority ?? 0)) {\n throw new Error(\n `Ambiguous Editing Context providers at priority ${selected.priority ?? 0}: ${selected.id}, ${available[1].id}`,\n );\n }\n return selected;\n}\n\nexport function resolveToolAvailability(\n definition: EditorToolDefinition,\n context: EditingContextSnapshot | null,\n): CapabilityAvailability {\n if (!context) return Object.freeze({ state: 'disabled', reason: 'No active Editing Context.' });\n let disabled: CapabilityAvailability | null = null;\n for (const capabilityId of definition.requiredCapabilities ?? []) {\n const availability = context.capabilities[capabilityId]\n ?? Object.freeze({ state: 'hidden' as const, reason: `Capability is unavailable: ${capabilityId}` });\n if (availability.state === 'hidden') return availability;\n if (availability.state === 'disabled') disabled ??= availability;\n }\n return disabled ?? ENABLED;\n}\n\nexport function snapshotEditorToolRegistration(\n registration: EditorToolRegistration,\n): EditorToolRegistration {\n if (!registration || typeof registration !== 'object') {\n throw new Error('Editor Tool registration must be an object.');\n }\n if (typeof registration.createRuntime !== 'function') {\n throw new Error('Editor Tool registration requires createRuntime().');\n }\n return Object.freeze({\n definition: snapshotEditorToolDefinition(registration.definition),\n createRuntime: registration.createRuntime,\n });\n}\n\nexport function snapshotEditorToolDefinition(definition: EditorToolDefinition): EditorToolDefinition {\n if (!definition || typeof definition !== 'object') throw new Error('Editor Tool definition must be an object.');\n const id = assertNamespacedId(definition.id, 'Editor Tool id');\n const label = assertNonEmpty(definition.label, 'Editor Tool label');\n const group = assertNamespacedId(definition.group, 'Editor Tool group');\n if (definition.kind !== 'primary' && definition.kind !== 'action') {\n throw new Error(`Unknown Editor Tool kind: ${String(definition.kind)}`);\n }\n const order = definition.order ?? 0;\n if (!Number.isFinite(order)) throw new Error('Editor Tool order must be finite.');\n const requiredCapabilities = Object.freeze((definition.requiredCapabilities ?? []).map(capability => (\n assertNamespacedId(capability, 'Editor capability id')\n )));\n if (new Set(requiredCapabilities).size !== requiredCapabilities.length) {\n throw new Error(`Editor Tool required capabilities must be unique: ${id}`);\n }\n return Object.freeze({\n id,\n label,\n group,\n order,\n kind: definition.kind,\n requiredCapabilities,\n ...(definition.icon === undefined ? {} : { icon: assertNonEmpty(definition.icon, 'Editor Tool icon') }),\n ...(definition.shortcut === undefined ? {} : {\n shortcut: assertNonEmpty(definition.shortcut, 'Editor Tool shortcut').toUpperCase(),\n }),\n ...(definition.fallbackToolId === undefined ? {} : {\n fallbackToolId: assertNamespacedId(definition.fallbackToolId, 'Editor Tool fallback id'),\n }),\n });\n}\n\nexport function snapshotEditingContext(context: EditingContextSnapshot): EditingContextSnapshot {\n if (!context || typeof context !== 'object') throw new Error('Editing Context snapshot must be an object.');\n const id = assertNamespacedId(context.id, 'Editing Context id');\n if (!context.authority || typeof context.authority !== 'object') {\n throw new Error('Editing Context authority must be an object token.');\n }\n if (!Number.isSafeInteger(context.revision) || context.revision < 0) {\n throw new Error('Editing Context revision must be a non-negative safe integer.');\n }\n const capabilities: Record<string, CapabilityAvailability> = {};\n for (const [capabilityId, availability] of Object.entries(context.capabilities ?? {})) {\n capabilities[assertNamespacedId(capabilityId, 'Editor capability id')] = snapshotAvailability(availability);\n }\n return Object.freeze({\n id,\n authority: context.authority,\n revision: context.revision,\n capabilities: Object.freeze(capabilities),\n ...(context.metadata ? { metadata: Object.freeze({ ...context.metadata }) } : {}),\n });\n}\n\nfunction createToolPresentation(\n definition: EditorToolDefinition,\n context: EditingContextSnapshot | null,\n activeToolId: string | null,\n): EditorToolPresentation {\n return Object.freeze({\n id: definition.id,\n label: definition.label,\n group: definition.group,\n order: definition.order ?? 0,\n kind: definition.kind,\n availability: resolveToolAvailability(definition, context),\n active: activeToolId === definition.id,\n ...(definition.icon ? { icon: definition.icon } : {}),\n ...(definition.shortcut ? { shortcut: definition.shortcut } : {}),\n });\n}\n\nfunction snapshotAvailability(value: CapabilityAvailability): CapabilityAvailability {\n if (!value || typeof value !== 'object') throw new Error('Capability availability must be an object.');\n if (value.state === 'enabled') return ENABLED;\n if (value.state === 'disabled' || value.state === 'hidden') {\n return Object.freeze({ state: value.state, reason: assertNonEmpty(value.reason, 'Capability reason') });\n }\n throw new Error(`Unknown capability availability state: ${String((value as { state?: unknown }).state)}`);\n}\n\nfunction compareToolRegistrations(left: EditorToolRegistration, right: EditorToolRegistration): number {\n const group = left.definition.group.localeCompare(right.definition.group);\n if (group) return group;\n const order = (left.definition.order ?? 0) - (right.definition.order ?? 0);\n return order || left.definition.id.localeCompare(right.definition.id);\n}\n\nfunction sameContextRevision(\n left: EditingContextSnapshot | null,\n right: EditingContextSnapshot | null,\n): boolean {\n return left === right || (!!left && !!right\n && left.id === right.id\n && left.authority === right.authority\n && left.revision === right.revision);\n}\n\nfunction assertEditorToolRuntime(value: EditorToolRuntime, id: string): void {\n if (!value || typeof value !== 'object' || typeof value.activate !== 'function') {\n throw new Error(`Editor Tool runtime is invalid: ${id}`);\n }\n}\n\nfunction assertNamespacedId(value: string, label: string): string {\n const normalized = assertNonEmpty(value, label);\n if (!/^[a-z0-9]+(?:[._-][a-z0-9]+)+$/.test(normalized)) {\n throw new Error(`${label} must be namespaced lowercase, got: ${value}`);\n }\n return normalized;\n}\n\nfunction assertNonEmpty(value: string, label: string): string {\n if (typeof value !== 'string' || !value.trim()) throw new Error(`${label} must be a non-empty string.`);\n return value.trim();\n}\n\nfunction createAggregateError(message: string, errors: readonly unknown[]): Error {\n const aggregate = new Error(message) as Error & { errors: readonly unknown[] };\n aggregate.errors = Object.freeze([...errors]);\n return aggregate;\n}\n"]}
@@ -35,6 +35,15 @@ export interface EditorViewportBounds {
35
35
  max: EditorTransformVec3;
36
36
  center: EditorTransformVec3;
37
37
  size: EditorTransformVec3;
38
+ oriented?: {
39
+ center: EditorTransformVec3;
40
+ size: EditorTransformVec3;
41
+ axes: {
42
+ x: EditorTransformVec3;
43
+ y: EditorTransformVec3;
44
+ z: EditorTransformVec3;
45
+ };
46
+ };
38
47
  }
39
48
  export interface EditorViewportScreenPoint {
40
49
  x: number;
@@ -72,7 +81,7 @@ export interface EditorViewportSpatialOverlayState {
72
81
  markers: EditorViewportSpatialOverlayMarker[];
73
82
  }
74
83
  export declare const DEFAULT_EDITOR_VIEWPORT_OVERLAY_SETTINGS: {
75
- bounds: false;
84
+ bounds: true;
76
85
  dimensions: false;
77
86
  edgeLengths: false;
78
87
  anchor: false;
@@ -83,7 +92,7 @@ export declare const DEFAULT_EDITOR_VIEWPORT_TOOL_STATE: {
83
92
  activeUtilityTool: "none";
84
93
  markersVisible: true;
85
94
  overlay: {
86
- bounds: false;
95
+ bounds: true;
87
96
  dimensions: false;
88
97
  edgeLengths: false;
89
98
  anchor: false;
@@ -1 +1 @@
1
- {"version":3,"file":"viewport-tools.d.ts","sourceRoot":"","sources":["../src/viewport-tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"viewport-tools.d.ts","sourceRoot":"","sources":["../src/viewport-tools.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  export const DEFAULT_EDITOR_VIEWPORT_OVERLAY_SETTINGS = {
2
- bounds: false,
2
+ bounds: true,
3
3
  dimensions: false,
4
4
  edgeLengths: false,
5
5
  anchor: false,
@@ -30,6 +30,17 @@ export function cloneEditorViewportSpatialOverlayState(state) {
30
30
  max: { ...state.bounds.max },
31
31
  center: { ...state.bounds.center },
32
32
  size: { ...state.bounds.size },
33
+ ...(state.bounds.oriented ? {
34
+ oriented: {
35
+ center: { ...state.bounds.oriented.center },
36
+ size: { ...state.bounds.oriented.size },
37
+ axes: {
38
+ x: { ...state.bounds.oriented.axes.x },
39
+ y: { ...state.bounds.oriented.axes.y },
40
+ z: { ...state.bounds.oriented.axes.z },
41
+ },
42
+ },
43
+ } : {}),
33
44
  }
34
45
  : null,
35
46
  anchor: state.anchor ? { ...state.anchor } : null,
@@ -1 +1 @@
1
- {"version":3,"file":"viewport-tools.js","sourceRoot":"","sources":["../src/viewport-tools.ts"],"names":[],"mappings":"AAiGA,MAAM,CAAC,MAAM,wCAAwC,GAAG;IACtD,MAAM,EAAE,KAAK;IACb,UAAU,EAAE,KAAK;IACjB,WAAW,EAAE,KAAK;IAClB,MAAM,EAAE,KAAK;CAC0B,CAAC;AAE1C,MAAM,CAAC,MAAM,kCAAkC,GAAG;IAChD,UAAU,EAAE,aAAa;IACzB,cAAc,EAAE,aAAa;IAC7B,iBAAiB,EAAE,MAAM;IACzB,cAAc,EAAE,IAAI;IACpB,OAAO,EAAE,wCAAwC;CAChB,CAAC;AAEpC,MAAM,UAAU,kCAAkC,CAChD,QAAuC;IAEvC,OAAO,EAAE,GAAG,QAAQ,EAAE,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,KAA8B;IAE9B,OAAO;QACL,GAAG,KAAK;QACR,OAAO,EAAE,kCAAkC,CAAC,KAAK,CAAC,OAAO,CAAC;KAC3D,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sCAAsC,CACpD,KAAwC;IAExC,OAAO;QACL,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,MAAM,EAAE,KAAK,CAAC,MAAM;YAClB,CAAC,CAAC;gBACE,GAAG,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE;gBAC5B,GAAG,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE;gBAC5B,MAAM,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE;gBAClC,IAAI,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE;aAC/B;YACH,CAAC,CAAC,IAAI;QACR,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI;QACjD,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC9B,GAAG,IAAI;YACP,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE;YACxB,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE;SACrB,CAAC,CAAC;QACH,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;QACjD,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACpC,GAAG,MAAM;YACT,QAAQ,EAAE,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE;SACjC,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,4CAA4C;IAC1D,OAAO;QACL,MAAM,EAAE,KAAK;QACb,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,IAAI;QACZ,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,EAAE;KACZ,CAAC;AACJ,CAAC","sourcesContent":["import type { EditorTransformVec3 } from './transform-gizmo';\n\nexport type EditorViewportViewPreset =\n | 'perspective'\n | 'top'\n | 'bottom'\n | 'front'\n | 'back'\n | 'left'\n | 'right'\n | 'iso'\n | 'threeQuarterTop';\n\nexport type EditorViewportProjectionMode = 'perspective' | 'orthographic';\n\nexport type EditorViewportUtilityTool = 'none' | 'measure-distance';\n\nexport interface EditorViewportOverlaySettings {\n bounds: boolean;\n dimensions: boolean;\n edgeLengths: boolean;\n anchor: boolean;\n}\n\nexport interface EditorViewportToolState {\n viewPreset: EditorViewportViewPreset;\n projectionMode: EditorViewportProjectionMode;\n activeUtilityTool: EditorViewportUtilityTool;\n markersVisible: boolean;\n overlay: EditorViewportOverlaySettings;\n}\n\nexport interface EditorViewportGroundMeasurement {\n active: boolean;\n start: EditorTransformVec3 | null;\n end: EditorTransformVec3 | null;\n preview: EditorTransformVec3 | null;\n distance: number | null;\n screenStart?: EditorViewportScreenPoint | null;\n screenEnd?: EditorViewportScreenPoint | null;\n screenPreview?: EditorViewportScreenPoint | null;\n label?: {\n text: string;\n x: number;\n y: number;\n } | null;\n}\n\nexport interface EditorViewportBounds {\n min: EditorTransformVec3;\n max: EditorTransformVec3;\n center: EditorTransformVec3;\n size: EditorTransformVec3;\n}\n\nexport interface EditorViewportScreenPoint {\n x: number;\n y: number;\n depth: number;\n}\n\nexport type EditorViewportSpatialOverlayLineKind = 'bounds';\n\nexport interface EditorViewportSpatialOverlayLine {\n id: string;\n kind: EditorViewportSpatialOverlayLineKind;\n start: EditorViewportScreenPoint;\n end: EditorViewportScreenPoint;\n}\n\nexport type EditorViewportSpatialOverlayLabelKind = 'dimension' | 'edge-length' | 'anchor';\n\nexport interface EditorViewportSpatialOverlayLabel {\n id: string;\n kind: EditorViewportSpatialOverlayLabelKind;\n text: string;\n x: number;\n y: number;\n}\n\nexport interface EditorViewportSpatialOverlayMarker {\n id: string;\n kind: 'anchor';\n position: EditorViewportScreenPoint;\n label: string;\n}\n\nexport interface EditorViewportSpatialOverlayState {\n active: boolean;\n nodeId: string | null;\n bounds: EditorViewportBounds | null;\n anchor: EditorTransformVec3 | null;\n lines: EditorViewportSpatialOverlayLine[];\n labels: EditorViewportSpatialOverlayLabel[];\n markers: EditorViewportSpatialOverlayMarker[];\n}\n\nexport const DEFAULT_EDITOR_VIEWPORT_OVERLAY_SETTINGS = {\n bounds: false,\n dimensions: false,\n edgeLengths: false,\n anchor: false,\n} satisfies EditorViewportOverlaySettings;\n\nexport const DEFAULT_EDITOR_VIEWPORT_TOOL_STATE = {\n viewPreset: 'perspective',\n projectionMode: 'perspective',\n activeUtilityTool: 'none',\n markersVisible: true,\n overlay: DEFAULT_EDITOR_VIEWPORT_OVERLAY_SETTINGS,\n} satisfies EditorViewportToolState;\n\nexport function cloneEditorViewportOverlaySettings(\n settings: EditorViewportOverlaySettings,\n): EditorViewportOverlaySettings {\n return { ...settings };\n}\n\nexport function cloneEditorViewportToolState(\n state: EditorViewportToolState,\n): EditorViewportToolState {\n return {\n ...state,\n overlay: cloneEditorViewportOverlaySettings(state.overlay),\n };\n}\n\nexport function cloneEditorViewportSpatialOverlayState(\n state: EditorViewportSpatialOverlayState,\n): EditorViewportSpatialOverlayState {\n return {\n active: state.active,\n nodeId: state.nodeId,\n bounds: state.bounds\n ? {\n min: { ...state.bounds.min },\n max: { ...state.bounds.max },\n center: { ...state.bounds.center },\n size: { ...state.bounds.size },\n }\n : null,\n anchor: state.anchor ? { ...state.anchor } : null,\n lines: state.lines.map(line => ({\n ...line,\n start: { ...line.start },\n end: { ...line.end },\n })),\n labels: state.labels.map(label => ({ ...label })),\n markers: state.markers.map(marker => ({\n ...marker,\n position: { ...marker.position },\n })),\n };\n}\n\nexport function createEmptyEditorViewportSpatialOverlayState(): EditorViewportSpatialOverlayState {\n return {\n active: false,\n nodeId: null,\n bounds: null,\n anchor: null,\n lines: [],\n labels: [],\n markers: [],\n };\n}\n"]}
1
+ {"version":3,"file":"viewport-tools.js","sourceRoot":"","sources":["../src/viewport-tools.ts"],"names":[],"mappings":"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","sourcesContent":["import type { EditorTransformVec3 } from './transform-gizmo';\n\nexport type EditorViewportViewPreset =\n | 'perspective'\n | 'top'\n | 'bottom'\n | 'front'\n | 'back'\n | 'left'\n | 'right'\n | 'iso'\n | 'threeQuarterTop';\n\nexport type EditorViewportProjectionMode = 'perspective' | 'orthographic';\n\nexport type EditorViewportUtilityTool = 'none' | 'measure-distance';\n\nexport interface EditorViewportOverlaySettings {\n bounds: boolean;\n dimensions: boolean;\n edgeLengths: boolean;\n anchor: boolean;\n}\n\nexport interface EditorViewportToolState {\n viewPreset: EditorViewportViewPreset;\n projectionMode: EditorViewportProjectionMode;\n activeUtilityTool: EditorViewportUtilityTool;\n markersVisible: boolean;\n overlay: EditorViewportOverlaySettings;\n}\n\nexport interface EditorViewportGroundMeasurement {\n active: boolean;\n start: EditorTransformVec3 | null;\n end: EditorTransformVec3 | null;\n preview: EditorTransformVec3 | null;\n distance: number | null;\n screenStart?: EditorViewportScreenPoint | null;\n screenEnd?: EditorViewportScreenPoint | null;\n screenPreview?: EditorViewportScreenPoint | null;\n label?: {\n text: string;\n x: number;\n y: number;\n } | null;\n}\n\nexport interface EditorViewportBounds {\n min: EditorTransformVec3;\n max: EditorTransformVec3;\n center: EditorTransformVec3;\n size: EditorTransformVec3;\n oriented?: {\n center: EditorTransformVec3;\n size: EditorTransformVec3;\n axes: {\n x: EditorTransformVec3;\n y: EditorTransformVec3;\n z: EditorTransformVec3;\n };\n };\n}\n\nexport interface EditorViewportScreenPoint {\n x: number;\n y: number;\n depth: number;\n}\n\nexport type EditorViewportSpatialOverlayLineKind = 'bounds';\n\nexport interface EditorViewportSpatialOverlayLine {\n id: string;\n kind: EditorViewportSpatialOverlayLineKind;\n start: EditorViewportScreenPoint;\n end: EditorViewportScreenPoint;\n}\n\nexport type EditorViewportSpatialOverlayLabelKind = 'dimension' | 'edge-length' | 'anchor';\n\nexport interface EditorViewportSpatialOverlayLabel {\n id: string;\n kind: EditorViewportSpatialOverlayLabelKind;\n text: string;\n x: number;\n y: number;\n}\n\nexport interface EditorViewportSpatialOverlayMarker {\n id: string;\n kind: 'anchor';\n position: EditorViewportScreenPoint;\n label: string;\n}\n\nexport interface EditorViewportSpatialOverlayState {\n active: boolean;\n nodeId: string | null;\n bounds: EditorViewportBounds | null;\n anchor: EditorTransformVec3 | null;\n lines: EditorViewportSpatialOverlayLine[];\n labels: EditorViewportSpatialOverlayLabel[];\n markers: EditorViewportSpatialOverlayMarker[];\n}\n\nexport const DEFAULT_EDITOR_VIEWPORT_OVERLAY_SETTINGS = {\n bounds: true,\n dimensions: false,\n edgeLengths: false,\n anchor: false,\n} satisfies EditorViewportOverlaySettings;\n\nexport const DEFAULT_EDITOR_VIEWPORT_TOOL_STATE = {\n viewPreset: 'perspective',\n projectionMode: 'perspective',\n activeUtilityTool: 'none',\n markersVisible: true,\n overlay: DEFAULT_EDITOR_VIEWPORT_OVERLAY_SETTINGS,\n} satisfies EditorViewportToolState;\n\nexport function cloneEditorViewportOverlaySettings(\n settings: EditorViewportOverlaySettings,\n): EditorViewportOverlaySettings {\n return { ...settings };\n}\n\nexport function cloneEditorViewportToolState(\n state: EditorViewportToolState,\n): EditorViewportToolState {\n return {\n ...state,\n overlay: cloneEditorViewportOverlaySettings(state.overlay),\n };\n}\n\nexport function cloneEditorViewportSpatialOverlayState(\n state: EditorViewportSpatialOverlayState,\n): EditorViewportSpatialOverlayState {\n return {\n active: state.active,\n nodeId: state.nodeId,\n bounds: state.bounds\n ? {\n min: { ...state.bounds.min },\n max: { ...state.bounds.max },\n center: { ...state.bounds.center },\n size: { ...state.bounds.size },\n ...(state.bounds.oriented ? {\n oriented: {\n center: { ...state.bounds.oriented.center },\n size: { ...state.bounds.oriented.size },\n axes: {\n x: { ...state.bounds.oriented.axes.x },\n y: { ...state.bounds.oriented.axes.y },\n z: { ...state.bounds.oriented.axes.z },\n },\n },\n } : {}),\n }\n : null,\n anchor: state.anchor ? { ...state.anchor } : null,\n lines: state.lines.map(line => ({\n ...line,\n start: { ...line.start },\n end: { ...line.end },\n })),\n labels: state.labels.map(label => ({ ...label })),\n markers: state.markers.map(marker => ({\n ...marker,\n position: { ...marker.position },\n })),\n };\n}\n\nexport function createEmptyEditorViewportSpatialOverlayState(): EditorViewportSpatialOverlayState {\n return {\n active: false,\n nodeId: null,\n bounds: null,\n anchor: null,\n lines: [],\n labels: [],\n markers: [],\n };\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fps-games/editor-core",
3
- "version": "0.2.1-beta.1",
3
+ "version": "0.2.1-beta.2",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "Core runtime shell and adapter contracts for fps-game-editor.",
@@ -38,10 +38,10 @@
38
38
  }
39
39
  },
40
40
  "dependencies": {
41
- "@fps-games/plugin-api": "0.2.1-beta.1",
42
- "@fps-games/plugin-host": "0.2.1-beta.1",
43
- "@fps-games/playable-contracts": "0.2.1-beta.1",
44
- "@fps-games/playable-scene": "0.2.1-beta.1",
45
- "@fps-games/editor-protocol": "0.2.1-beta.1"
41
+ "@fps-games/plugin-api": "0.2.1-beta.2",
42
+ "@fps-games/plugin-host": "0.2.1-beta.2",
43
+ "@fps-games/playable-contracts": "0.2.1-beta.2",
44
+ "@fps-games/playable-scene": "0.2.1-beta.2",
45
+ "@fps-games/editor-protocol": "0.2.1-beta.2"
46
46
  }
47
47
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fps-games/editor-forge-play",
3
- "version": "0.2.1-beta.1",
3
+ "version": "0.2.1-beta.2",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "description": "Forge Play bridge adapter for fps-game-editor.",
@@ -14,6 +14,6 @@
14
14
  }
15
15
  },
16
16
  "dependencies": {
17
- "@fps-games/editor-protocol": "0.2.1-beta.1"
17
+ "@fps-games/editor-protocol": "0.2.1-beta.2"
18
18
  }
19
19
  }
@@ -4,4 +4,5 @@ export declare function createEditorSceneAssetLibrary<TExternal = unknown, TDefa
4
4
  export declare function createEditorSceneAssetHydrationCatalog<TExternal = unknown, TDefaults = unknown, TMaterialMode extends string = string>(catalogEntries: readonly EditorSceneAssetCatalogEntry<TExternal, TDefaults, TMaterialMode>[]): Array<EditorSceneAssetLibraryItem<TDefaults, TExternal, TMaterialMode>>;
5
5
  export declare function createEditorSceneAssetLibraryItem<TExternal = unknown, TDefaults = unknown, TMaterialMode extends string = string>(entry: EditorSceneAssetCatalogEntry<TExternal, TDefaults, TMaterialMode>): EditorSceneAssetLibraryItem<TDefaults, TExternal, TMaterialMode>;
6
6
  export declare function compareEditorSceneAssetLibraryItems(a: EditorSceneAssetLibraryItem, b: EditorSceneAssetLibraryItem): number;
7
+ export declare function resolveEditorSceneAssetLibraryItemRelativePath(asset: EditorSceneAssetLibraryItem): string | undefined;
7
8
  //# sourceMappingURL=catalog.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/asset-library/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,2BAA2B,EAC5B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EACV,4BAA4B,EAC7B,MAAM,SAAS,CAAC;AAEjB,wBAAgB,6BAA6B,CAC3C,SAAS,GAAG,OAAO,EACnB,SAAS,GAAG,OAAO,EACnB,aAAa,SAAS,MAAM,GAAG,MAAM,EAErC,cAAc,EAAE,SAAS,4BAA4B,CAAC,SAAS,EAAE,SAAS,EAAE,aAAa,CAAC,EAAE,GAC3F,KAAK,CAAC,2BAA2B,CAAC,SAAS,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAKzE;AAED,wBAAgB,sCAAsC,CACpD,SAAS,GAAG,OAAO,EACnB,SAAS,GAAG,OAAO,EACnB,aAAa,SAAS,MAAM,GAAG,MAAM,EAErC,cAAc,EAAE,SAAS,4BAA4B,CAAC,SAAS,EAAE,SAAS,EAAE,aAAa,CAAC,EAAE,GAC3F,KAAK,CAAC,2BAA2B,CAAC,SAAS,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAKzE;AAED,wBAAgB,iCAAiC,CAC/C,SAAS,GAAG,OAAO,EACnB,SAAS,GAAG,OAAO,EACnB,aAAa,SAAS,MAAM,GAAG,MAAM,EAErC,KAAK,EAAE,4BAA4B,CAAC,SAAS,EAAE,SAAS,EAAE,aAAa,CAAC,GACvE,2BAA2B,CAAC,SAAS,EAAE,SAAS,EAAE,aAAa,CAAC,CA+BlE;AAED,wBAAgB,mCAAmC,CACjD,CAAC,EAAE,2BAA2B,EAC9B,CAAC,EAAE,2BAA2B,GAC7B,MAAM,CAKR"}
1
+ {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/asset-library/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,2BAA2B,EAC5B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EACV,4BAA4B,EAC7B,MAAM,SAAS,CAAC;AAEjB,wBAAgB,6BAA6B,CAC3C,SAAS,GAAG,OAAO,EACnB,SAAS,GAAG,OAAO,EACnB,aAAa,SAAS,MAAM,GAAG,MAAM,EAErC,cAAc,EAAE,SAAS,4BAA4B,CAAC,SAAS,EAAE,SAAS,EAAE,aAAa,CAAC,EAAE,GAC3F,KAAK,CAAC,2BAA2B,CAAC,SAAS,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAKzE;AAED,wBAAgB,sCAAsC,CACpD,SAAS,GAAG,OAAO,EACnB,SAAS,GAAG,OAAO,EACnB,aAAa,SAAS,MAAM,GAAG,MAAM,EAErC,cAAc,EAAE,SAAS,4BAA4B,CAAC,SAAS,EAAE,SAAS,EAAE,aAAa,CAAC,EAAE,GAC3F,KAAK,CAAC,2BAA2B,CAAC,SAAS,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAKzE;AAED,wBAAgB,iCAAiC,CAC/C,SAAS,GAAG,OAAO,EACnB,SAAS,GAAG,OAAO,EACnB,aAAa,SAAS,MAAM,GAAG,MAAM,EAErC,KAAK,EAAE,4BAA4B,CAAC,SAAS,EAAE,SAAS,EAAE,aAAa,CAAC,GACvE,2BAA2B,CAAC,SAAS,EAAE,SAAS,EAAE,aAAa,CAAC,CA+BlE;AAED,wBAAgB,mCAAmC,CACjD,CAAC,EAAE,2BAA2B,EAC9B,CAAC,EAAE,2BAA2B,GAC7B,MAAM,CAKR;AAED,wBAAgB,8CAA8C,CAC5D,KAAK,EAAE,2BAA2B,GACjC,MAAM,GAAG,SAAS,CAIpB"}
@@ -48,6 +48,11 @@ export function compareEditorSceneAssetLibraryItems(a, b) {
48
48
  || a.assetId.localeCompare(b.assetId)
49
49
  || a.type.localeCompare(b.type);
50
50
  }
51
+ export function resolveEditorSceneAssetLibraryItemRelativePath(asset) {
52
+ return readNonEmptyString(asset.relativePath)
53
+ ?? readNonEmptyString(asset.metadata?.relativePath)
54
+ ?? undefined;
55
+ }
51
56
  function inferEditorSceneAssetCategory(entry) {
52
57
  if (entry.kind === 'prefab')
53
58
  return 'Prefab';