@forgeax/view 0.5.0-dev.13604.c415409c3b9d → 0.5.0-dev.13619.c20ebf66cef4

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 (275) hide show
  1. package/README.md +50 -6
  2. package/dist/build-revision.json +1 -1
  3. package/dist/modules/backend.mjs +34 -34
  4. package/dist/modules/browser.mjs +55 -49
  5. package/dist/modules/chunks/{chunk-B6QUJ33G.mjs → chunk-25PFC2DY.mjs} +3 -3
  6. package/dist/modules/chunks/{chunk-6KM24NH6.mjs → chunk-3Y5WN22T.mjs} +3 -3
  7. package/dist/modules/chunks/chunk-3Y5WN22T.mjs.map +7 -0
  8. package/dist/modules/chunks/{chunk-D2RCKG7Q.mjs → chunk-43L37UYV.mjs} +6 -6
  9. package/dist/modules/chunks/{chunk-FNRGLCZW.mjs → chunk-4RTL3LS3.mjs} +36 -10
  10. package/dist/modules/chunks/chunk-4RTL3LS3.mjs.map +7 -0
  11. package/dist/modules/chunks/{chunk-WVU3CQ62.mjs → chunk-4ZI5DFBR.mjs} +3 -3
  12. package/dist/modules/chunks/{chunk-47RJSHLM.mjs → chunk-5HJ336VM.mjs} +3 -3
  13. package/dist/modules/chunks/{chunk-PVP5YBNR.mjs → chunk-5N5FDO5Y.mjs} +2 -2
  14. package/dist/modules/chunks/{chunk-APD2EWSZ.mjs → chunk-5PZL6W3F.mjs} +2 -2
  15. package/dist/modules/chunks/{chunk-LZ57Y73Z.mjs → chunk-5SHQXSSM.mjs} +9 -7
  16. package/dist/modules/chunks/chunk-5SHQXSSM.mjs.map +7 -0
  17. package/dist/modules/chunks/{chunk-KI4WGTWL.mjs → chunk-5WVRCLHN.mjs} +2 -2
  18. package/dist/modules/chunks/{chunk-YNHEYXDG.mjs → chunk-7MQIGD6Q.mjs} +3 -3
  19. package/dist/modules/chunks/{chunk-F5RLQAPN.mjs → chunk-7YWMB7HV.mjs} +3 -3
  20. package/dist/modules/chunks/{chunk-FICPCJKR.mjs → chunk-A22PJUZM.mjs} +3 -3
  21. package/dist/modules/chunks/{chunk-P5XMFZY4.mjs → chunk-A7HXBQUG.mjs} +2 -2
  22. package/dist/modules/chunks/{chunk-TTRUYO7Q.mjs → chunk-AOD6XLJC.mjs} +3 -3
  23. package/dist/modules/chunks/{chunk-TTRUYO7Q.mjs.map → chunk-AOD6XLJC.mjs.map} +2 -2
  24. package/dist/modules/chunks/{chunk-HRKW766Y.mjs → chunk-AZHCKPUL.mjs} +2 -2
  25. package/dist/modules/chunks/chunk-BJTFQQQR.mjs +13 -0
  26. package/dist/modules/chunks/chunk-BJTFQQQR.mjs.map +7 -0
  27. package/dist/modules/chunks/{chunk-6I7RY73G.mjs → chunk-CEB76QBE.mjs} +4 -4
  28. package/dist/modules/chunks/{chunk-VKNIYV2W.mjs → chunk-CRPXFJ6K.mjs} +202 -35
  29. package/dist/modules/chunks/chunk-CRPXFJ6K.mjs.map +7 -0
  30. package/dist/modules/chunks/{chunk-U64FRQKP.mjs → chunk-CVIF6DYH.mjs} +3 -3
  31. package/dist/modules/chunks/{chunk-DWT3TA6M.mjs → chunk-CYQ7BITZ.mjs} +9 -8
  32. package/dist/modules/chunks/chunk-CYQ7BITZ.mjs.map +7 -0
  33. package/dist/modules/chunks/{chunk-OQXDADAS.mjs → chunk-D3GX7HWI.mjs} +6 -6
  34. package/dist/modules/chunks/chunk-D3GX7HWI.mjs.map +7 -0
  35. package/dist/modules/chunks/{chunk-XQYF2P6M.mjs → chunk-D3ISMGT6.mjs} +7 -7
  36. package/dist/modules/chunks/{chunk-OKQ5RBKO.mjs → chunk-DC3PU6SO.mjs} +2 -2
  37. package/dist/modules/chunks/{chunk-4T3D67CS.mjs → chunk-DJKXBCZH.mjs} +7 -7
  38. package/dist/modules/chunks/{chunk-E3PJGTLI.mjs → chunk-DX4M6LZH.mjs} +5 -5
  39. package/dist/modules/chunks/{chunk-IZAHIOFU.mjs → chunk-EOW4JGVV.mjs} +6 -6
  40. package/dist/modules/chunks/{chunk-U5R6MVM4.mjs → chunk-EQRDY5CQ.mjs} +2 -2
  41. package/dist/modules/chunks/{chunk-7IGFAI5H.mjs → chunk-EW7VMNZA.mjs} +5 -5
  42. package/dist/modules/chunks/{chunk-FMCHH5R4.mjs → chunk-FSSKCXPL.mjs} +3 -3
  43. package/dist/modules/chunks/{chunk-357UOBAS.mjs → chunk-FSYQ3LBQ.mjs} +2 -2
  44. package/dist/modules/chunks/{chunk-D25SR5FS.mjs → chunk-FVSDKOXR.mjs} +3 -3
  45. package/dist/modules/chunks/{chunk-XMP4THLF.mjs → chunk-J7QRK3FU.mjs} +4 -4
  46. package/dist/modules/chunks/{chunk-D57DDEV2.mjs → chunk-JE4N575J.mjs} +5 -5
  47. package/dist/modules/chunks/{chunk-ZIDEETK4.mjs → chunk-JKDBKS7P.mjs} +3 -3
  48. package/dist/modules/chunks/{chunk-U5J7OTEB.mjs → chunk-K4C5WOTT.mjs} +3 -3
  49. package/dist/modules/chunks/{chunk-QUFVUMSY.mjs → chunk-KOBAWLZL.mjs} +2 -2
  50. package/dist/modules/chunks/{chunk-CX5WREJC.mjs → chunk-KY2AWNDR.mjs} +2 -2
  51. package/dist/modules/chunks/{chunk-RJVOH7G2.mjs → chunk-L24HPIQP.mjs} +27 -27
  52. package/dist/modules/chunks/{chunk-27XASYEH.mjs → chunk-LCVL3V5U.mjs} +17 -11
  53. package/dist/modules/chunks/chunk-LCVL3V5U.mjs.map +7 -0
  54. package/dist/modules/chunks/{chunk-PJFFCRRD.mjs → chunk-LOVO3P2Q.mjs} +2 -2
  55. package/dist/modules/chunks/{chunk-X4NNZ5X6.mjs → chunk-M66NDY35.mjs} +3 -3
  56. package/dist/modules/chunks/{chunk-EZSGDSCC.mjs → chunk-M7XSCLYV.mjs} +18 -4
  57. package/dist/modules/chunks/chunk-M7XSCLYV.mjs.map +7 -0
  58. package/dist/modules/chunks/{chunk-YLCJNKIW.mjs → chunk-MFEFV3YF.mjs} +70 -30
  59. package/dist/modules/chunks/chunk-MFEFV3YF.mjs.map +7 -0
  60. package/dist/modules/chunks/{chunk-55F55BQY.mjs → chunk-MUBV2LNK.mjs} +3 -3
  61. package/dist/modules/chunks/{chunk-M6S5YA6X.mjs → chunk-NHNPQ3ZS.mjs} +3 -3
  62. package/dist/modules/chunks/{chunk-STQPRNEO.mjs → chunk-NSPN5OQ5.mjs} +2 -2
  63. package/dist/modules/chunks/{chunk-XE6ITXHT.mjs → chunk-NZ4N7AVG.mjs} +2 -2
  64. package/dist/modules/chunks/{chunk-KAGFU64Y.mjs → chunk-OGFZB75B.mjs} +2 -2
  65. package/dist/modules/chunks/{chunk-EWSCJF77.mjs → chunk-OS7BK3FO.mjs} +2 -2
  66. package/dist/modules/chunks/{chunk-HWZCLROY.mjs → chunk-P27F2TZN.mjs} +248 -42
  67. package/dist/modules/chunks/chunk-P27F2TZN.mjs.map +7 -0
  68. package/dist/modules/chunks/{chunk-5W7SC5D4.mjs → chunk-P2Y73QJJ.mjs} +11 -1
  69. package/dist/modules/chunks/{chunk-5W7SC5D4.mjs.map → chunk-P2Y73QJJ.mjs.map} +2 -2
  70. package/dist/modules/chunks/{chunk-U6UMATPV.mjs → chunk-P3ZW2T37.mjs} +3 -3
  71. package/dist/modules/chunks/{chunk-INTTYJVW.mjs → chunk-PHCUCHVL.mjs} +2 -2
  72. package/dist/modules/chunks/{chunk-JK7K7RG3.mjs → chunk-QNJL265P.mjs} +4 -4
  73. package/dist/modules/chunks/{chunk-ZGOGO7SS.mjs → chunk-QNSUBUZF.mjs} +1 -1
  74. package/dist/modules/chunks/{chunk-5YTMN435.mjs → chunk-QNUBIFAY.mjs} +13 -3
  75. package/dist/modules/chunks/chunk-QNUBIFAY.mjs.map +7 -0
  76. package/dist/modules/chunks/{chunk-TXLD7JI5.mjs → chunk-QQP7ZGQD.mjs} +2 -2
  77. package/dist/modules/chunks/{chunk-E3Z7GLFU.mjs → chunk-QYJZ3SOV.mjs} +12 -1
  78. package/dist/modules/chunks/chunk-QYJZ3SOV.mjs.map +7 -0
  79. package/dist/modules/chunks/{chunk-PZIAKZJC.mjs → chunk-R6MT6F3T.mjs} +3 -3
  80. package/dist/modules/chunks/{chunk-P4UPH74B.mjs → chunk-RGM4S2BE.mjs} +3 -3
  81. package/dist/modules/chunks/{chunk-AGVLPYVE.mjs → chunk-SKZC6VTV.mjs} +2 -2
  82. package/dist/modules/chunks/{chunk-4D3Q7K44.mjs → chunk-SSVRSFTX.mjs} +2 -2
  83. package/dist/modules/chunks/{chunk-2Z5KEV6L.mjs → chunk-TFBSEYKW.mjs} +3 -3
  84. package/dist/modules/chunks/{chunk-K2QZRFLE.mjs → chunk-TPLT4PBX.mjs} +4 -4
  85. package/dist/modules/chunks/{chunk-5PHAXNFO.mjs → chunk-U5LBMAG3.mjs} +3 -3
  86. package/dist/modules/chunks/{chunk-46UEGAXY.mjs → chunk-V4SOFUJI.mjs} +6 -6
  87. package/dist/modules/chunks/{chunk-IJPWKKIU.mjs → chunk-VD3C4DYT.mjs} +14 -13
  88. package/dist/modules/chunks/chunk-VD3C4DYT.mjs.map +7 -0
  89. package/dist/modules/chunks/{chunk-YFQGSDK3.mjs → chunk-VD4QU7KY.mjs} +2 -2
  90. package/dist/modules/chunks/{chunk-KX2WU5Z6.mjs → chunk-WC6NGMGI.mjs} +3 -3
  91. package/dist/modules/chunks/{chunk-H256DQT6.mjs → chunk-XOZ5EMNY.mjs} +2 -2
  92. package/dist/modules/chunks/{chunk-ZHO2G4JR.mjs → chunk-XXJ32F5P.mjs} +3 -3
  93. package/dist/modules/chunks/{chunk-VW2ZF3P4.mjs → chunk-Y4SFATAM.mjs} +6 -6
  94. package/dist/modules/chunks/{chunk-SRYQLFBV.mjs → chunk-ZKFH7EMU.mjs} +2 -2
  95. package/dist/modules/chunks/{chunk-CKYXAT7H.mjs → chunk-ZRG7LDCA.mjs} +2 -2
  96. package/dist/modules/chunks/{chunk-PW5CE2Y6.mjs → chunk-ZW7LLDOL.mjs} +2 -2
  97. package/dist/modules/cli-contributions.mjs +14 -14
  98. package/dist/modules/cli.mjs +5 -5
  99. package/dist/modules/command-executor.mjs +3 -3
  100. package/dist/modules/embedded.mjs +82 -42
  101. package/dist/modules/embedded.mjs.map +2 -2
  102. package/dist/modules/extension-bridge.mjs +4 -4
  103. package/dist/modules/frontend-root.mjs +46 -46
  104. package/dist/modules/index.mjs +71 -65
  105. package/dist/modules/index.mjs.map +1 -1
  106. package/dist/modules/pages/scene.mjs +5 -5
  107. package/dist/modules/plugin.mjs +35 -35
  108. package/dist/modules/plugins/asset/frontend.mjs +10 -10
  109. package/dist/modules/plugins/asset/identity.mjs +9 -9
  110. package/dist/modules/plugins/asset/ui.mjs +3 -3
  111. package/dist/modules/plugins/content-browser/frontend.mjs +3 -3
  112. package/dist/modules/plugins/content-browser/identity.mjs +2 -2
  113. package/dist/modules/plugins/content-browser/ui.mjs +3 -3
  114. package/dist/modules/plugins/display/api.mjs +1 -1
  115. package/dist/modules/plugins/display/backend.mjs +4 -4
  116. package/dist/modules/plugins/display/frontend.mjs +5 -5
  117. package/dist/modules/plugins/display/identity.mjs +2 -2
  118. package/dist/modules/plugins/display/ui.mjs +3 -3
  119. package/dist/modules/plugins/inspector/frontend.mjs +3 -3
  120. package/dist/modules/plugins/inspector/identity.mjs +2 -2
  121. package/dist/modules/plugins/inspector/ui.mjs +3 -3
  122. package/dist/modules/plugins/material/frontend.mjs +10 -10
  123. package/dist/modules/plugins/material/identity.mjs +9 -9
  124. package/dist/modules/plugins/material/ui.mjs +10 -10
  125. package/dist/modules/plugins/mesh/frontend.mjs +10 -10
  126. package/dist/modules/plugins/mesh/identity.mjs +9 -9
  127. package/dist/modules/plugins/mesh/ui.mjs +10 -10
  128. package/dist/modules/plugins/plugins/api.mjs +4 -4
  129. package/dist/modules/plugins/plugins/backend.mjs +7 -7
  130. package/dist/modules/plugins/plugins/cli.mjs +5 -5
  131. package/dist/modules/plugins/plugins/frontend.mjs +3 -3
  132. package/dist/modules/plugins/plugins/identity.mjs +2 -2
  133. package/dist/modules/plugins/plugins/runtime.mjs +6 -6
  134. package/dist/modules/plugins/plugins/ui/panel.mjs +3 -3
  135. package/dist/modules/plugins/plugins/ui.mjs +4 -4
  136. package/dist/modules/plugins/scene/frontend.mjs +5 -5
  137. package/dist/modules/plugins/scene/identity.mjs +2 -2
  138. package/dist/modules/plugins/scene-tree/frontend.mjs +3 -3
  139. package/dist/modules/plugins/scene-tree/identity.mjs +2 -2
  140. package/dist/modules/plugins/scene-tree/ui.mjs +3 -3
  141. package/dist/modules/plugins/texture/frontend.mjs +10 -10
  142. package/dist/modules/plugins/texture/identity.mjs +9 -9
  143. package/dist/modules/plugins/texture/ui.mjs +10 -10
  144. package/dist/modules/plugins/viewport/frontend.mjs +12 -12
  145. package/dist/modules/plugins/viewport/identity.mjs +2 -2
  146. package/dist/modules/plugins/viewport/presentation.mjs +4 -4
  147. package/dist/modules/plugins/viewport/schema.mjs +2 -2
  148. package/dist/modules/plugins/viewport/workspace-shell.mjs +9 -9
  149. package/dist/modules/product.mjs +35 -35
  150. package/dist/modules/shell/frontend.mjs +1 -1
  151. package/dist/modules/viewer/catalog/backend.mjs +31 -31
  152. package/dist/modules/viewer/catalog/frontend.mjs +42 -42
  153. package/dist/modules/viewer/catalog/shared.mjs +20 -20
  154. package/dist/modules/viewer/catalog.mjs +51 -51
  155. package/dist/modules/viewer/cli.mjs +10 -10
  156. package/dist/modules/viewer-host/frontend.mjs +48 -48
  157. package/dist/modules/viewer-host/page-registry.mjs +6 -6
  158. package/dist/modules/viewer-host.mjs +7 -7
  159. package/dist/modules/viewer.mjs +51 -51
  160. package/dist/modules/workspace/api.mjs +1 -1
  161. package/dist/modules/workspace/backend.mjs +10 -10
  162. package/dist/modules/workspace/broker.mjs +9 -9
  163. package/dist/modules/workspace/cli.mjs +2 -2
  164. package/dist/modules/workspace/client.mjs +3 -3
  165. package/dist/modules/workspace/command-error.mjs +2 -2
  166. package/dist/modules/workspace/contract.mjs +7 -1
  167. package/dist/modules/workspace/engine-adapter.mjs +3 -3
  168. package/dist/modules/workspace/extension-bridge.mjs +4 -4
  169. package/dist/modules/workspace/frontend-plugin.mjs +8 -8
  170. package/dist/modules/workspace/frontend.mjs +9 -9
  171. package/dist/modules/workspace/page-title.mjs +3 -3
  172. package/dist/modules/workspace/presentation.mjs +4 -4
  173. package/dist/modules/workspace/preview-surface.mjs +7 -7
  174. package/dist/modules/workspace/project-session.mjs +2 -2
  175. package/dist/modules/workspace/render-resize-sync.mjs +2 -2
  176. package/dist/modules/workspace/resident.mjs +4 -4
  177. package/dist/modules/workspace/resource-open.mjs +5 -5
  178. package/dist/modules/workspace/resource-page.mjs +8 -8
  179. package/dist/modules/workspace/tool-runtime.mjs +7 -5
  180. package/dist/modules/workspace/view-trace.mjs +3 -3
  181. package/dist/modules/workspace/workspace-recovery.mjs +4 -4
  182. package/dist/modules/workspace/workspace-state.mjs +2 -2
  183. package/dist/modules/workspace-frontend.mjs +8 -8
  184. package/dist/viewer/assets/{embedded-DXSSFAyM.js → embedded-BZSPh0if.js} +2 -2
  185. package/dist/viewer/assets/{embedded-DXSSFAyM.js.map → embedded-BZSPh0if.js.map} +1 -1
  186. package/dist/viewer/assets/main-CmJEE-8D.js +22 -0
  187. package/dist/viewer/assets/main-CmJEE-8D.js.map +1 -0
  188. package/dist/viewer/assets/panels-ui-Cm3As_jE.js +12 -0
  189. package/dist/viewer/assets/panels-ui-Cm3As_jE.js.map +1 -0
  190. package/dist/viewer/assets/style-CcYzhsIZ.css +2 -0
  191. package/dist/viewer/index.html +3 -3
  192. package/dist/viewer/panels.js +1 -1
  193. package/package.json +2 -2
  194. package/scripts/verify-runtime-content-engine.mjs +7 -4
  195. package/skills/forgeax-view-cli/SKILL.md +4 -0
  196. package/dist/modules/chunks/chunk-27XASYEH.mjs.map +0 -7
  197. package/dist/modules/chunks/chunk-5YTMN435.mjs.map +0 -7
  198. package/dist/modules/chunks/chunk-6KM24NH6.mjs.map +0 -7
  199. package/dist/modules/chunks/chunk-DWT3TA6M.mjs.map +0 -7
  200. package/dist/modules/chunks/chunk-E3Z7GLFU.mjs.map +0 -7
  201. package/dist/modules/chunks/chunk-EZSGDSCC.mjs.map +0 -7
  202. package/dist/modules/chunks/chunk-FNRGLCZW.mjs.map +0 -7
  203. package/dist/modules/chunks/chunk-HWZCLROY.mjs.map +0 -7
  204. package/dist/modules/chunks/chunk-IJPWKKIU.mjs.map +0 -7
  205. package/dist/modules/chunks/chunk-LZ57Y73Z.mjs.map +0 -7
  206. package/dist/modules/chunks/chunk-OQXDADAS.mjs.map +0 -7
  207. package/dist/modules/chunks/chunk-QELNKFSI.mjs +0 -10
  208. package/dist/modules/chunks/chunk-QELNKFSI.mjs.map +0 -7
  209. package/dist/modules/chunks/chunk-VKNIYV2W.mjs.map +0 -7
  210. package/dist/modules/chunks/chunk-YLCJNKIW.mjs.map +0 -7
  211. package/dist/viewer/assets/main-CI6ZQziX.js +0 -22
  212. package/dist/viewer/assets/main-CI6ZQziX.js.map +0 -1
  213. package/dist/viewer/assets/panels-ui-CfUtl68h.js +0 -12
  214. package/dist/viewer/assets/panels-ui-CfUtl68h.js.map +0 -1
  215. package/dist/viewer/assets/style-gOtSMZif.css +0 -2
  216. /package/dist/modules/chunks/{chunk-B6QUJ33G.mjs.map → chunk-25PFC2DY.mjs.map} +0 -0
  217. /package/dist/modules/chunks/{chunk-D2RCKG7Q.mjs.map → chunk-43L37UYV.mjs.map} +0 -0
  218. /package/dist/modules/chunks/{chunk-WVU3CQ62.mjs.map → chunk-4ZI5DFBR.mjs.map} +0 -0
  219. /package/dist/modules/chunks/{chunk-47RJSHLM.mjs.map → chunk-5HJ336VM.mjs.map} +0 -0
  220. /package/dist/modules/chunks/{chunk-PVP5YBNR.mjs.map → chunk-5N5FDO5Y.mjs.map} +0 -0
  221. /package/dist/modules/chunks/{chunk-APD2EWSZ.mjs.map → chunk-5PZL6W3F.mjs.map} +0 -0
  222. /package/dist/modules/chunks/{chunk-KI4WGTWL.mjs.map → chunk-5WVRCLHN.mjs.map} +0 -0
  223. /package/dist/modules/chunks/{chunk-YNHEYXDG.mjs.map → chunk-7MQIGD6Q.mjs.map} +0 -0
  224. /package/dist/modules/chunks/{chunk-F5RLQAPN.mjs.map → chunk-7YWMB7HV.mjs.map} +0 -0
  225. /package/dist/modules/chunks/{chunk-FICPCJKR.mjs.map → chunk-A22PJUZM.mjs.map} +0 -0
  226. /package/dist/modules/chunks/{chunk-P5XMFZY4.mjs.map → chunk-A7HXBQUG.mjs.map} +0 -0
  227. /package/dist/modules/chunks/{chunk-HRKW766Y.mjs.map → chunk-AZHCKPUL.mjs.map} +0 -0
  228. /package/dist/modules/chunks/{chunk-6I7RY73G.mjs.map → chunk-CEB76QBE.mjs.map} +0 -0
  229. /package/dist/modules/chunks/{chunk-U64FRQKP.mjs.map → chunk-CVIF6DYH.mjs.map} +0 -0
  230. /package/dist/modules/chunks/{chunk-XQYF2P6M.mjs.map → chunk-D3ISMGT6.mjs.map} +0 -0
  231. /package/dist/modules/chunks/{chunk-OKQ5RBKO.mjs.map → chunk-DC3PU6SO.mjs.map} +0 -0
  232. /package/dist/modules/chunks/{chunk-4T3D67CS.mjs.map → chunk-DJKXBCZH.mjs.map} +0 -0
  233. /package/dist/modules/chunks/{chunk-E3PJGTLI.mjs.map → chunk-DX4M6LZH.mjs.map} +0 -0
  234. /package/dist/modules/chunks/{chunk-IZAHIOFU.mjs.map → chunk-EOW4JGVV.mjs.map} +0 -0
  235. /package/dist/modules/chunks/{chunk-U5R6MVM4.mjs.map → chunk-EQRDY5CQ.mjs.map} +0 -0
  236. /package/dist/modules/chunks/{chunk-7IGFAI5H.mjs.map → chunk-EW7VMNZA.mjs.map} +0 -0
  237. /package/dist/modules/chunks/{chunk-FMCHH5R4.mjs.map → chunk-FSSKCXPL.mjs.map} +0 -0
  238. /package/dist/modules/chunks/{chunk-357UOBAS.mjs.map → chunk-FSYQ3LBQ.mjs.map} +0 -0
  239. /package/dist/modules/chunks/{chunk-D25SR5FS.mjs.map → chunk-FVSDKOXR.mjs.map} +0 -0
  240. /package/dist/modules/chunks/{chunk-XMP4THLF.mjs.map → chunk-J7QRK3FU.mjs.map} +0 -0
  241. /package/dist/modules/chunks/{chunk-D57DDEV2.mjs.map → chunk-JE4N575J.mjs.map} +0 -0
  242. /package/dist/modules/chunks/{chunk-ZIDEETK4.mjs.map → chunk-JKDBKS7P.mjs.map} +0 -0
  243. /package/dist/modules/chunks/{chunk-U5J7OTEB.mjs.map → chunk-K4C5WOTT.mjs.map} +0 -0
  244. /package/dist/modules/chunks/{chunk-QUFVUMSY.mjs.map → chunk-KOBAWLZL.mjs.map} +0 -0
  245. /package/dist/modules/chunks/{chunk-CX5WREJC.mjs.map → chunk-KY2AWNDR.mjs.map} +0 -0
  246. /package/dist/modules/chunks/{chunk-RJVOH7G2.mjs.map → chunk-L24HPIQP.mjs.map} +0 -0
  247. /package/dist/modules/chunks/{chunk-PJFFCRRD.mjs.map → chunk-LOVO3P2Q.mjs.map} +0 -0
  248. /package/dist/modules/chunks/{chunk-X4NNZ5X6.mjs.map → chunk-M66NDY35.mjs.map} +0 -0
  249. /package/dist/modules/chunks/{chunk-55F55BQY.mjs.map → chunk-MUBV2LNK.mjs.map} +0 -0
  250. /package/dist/modules/chunks/{chunk-M6S5YA6X.mjs.map → chunk-NHNPQ3ZS.mjs.map} +0 -0
  251. /package/dist/modules/chunks/{chunk-STQPRNEO.mjs.map → chunk-NSPN5OQ5.mjs.map} +0 -0
  252. /package/dist/modules/chunks/{chunk-XE6ITXHT.mjs.map → chunk-NZ4N7AVG.mjs.map} +0 -0
  253. /package/dist/modules/chunks/{chunk-KAGFU64Y.mjs.map → chunk-OGFZB75B.mjs.map} +0 -0
  254. /package/dist/modules/chunks/{chunk-EWSCJF77.mjs.map → chunk-OS7BK3FO.mjs.map} +0 -0
  255. /package/dist/modules/chunks/{chunk-U6UMATPV.mjs.map → chunk-P3ZW2T37.mjs.map} +0 -0
  256. /package/dist/modules/chunks/{chunk-INTTYJVW.mjs.map → chunk-PHCUCHVL.mjs.map} +0 -0
  257. /package/dist/modules/chunks/{chunk-JK7K7RG3.mjs.map → chunk-QNJL265P.mjs.map} +0 -0
  258. /package/dist/modules/chunks/{chunk-ZGOGO7SS.mjs.map → chunk-QNSUBUZF.mjs.map} +0 -0
  259. /package/dist/modules/chunks/{chunk-TXLD7JI5.mjs.map → chunk-QQP7ZGQD.mjs.map} +0 -0
  260. /package/dist/modules/chunks/{chunk-PZIAKZJC.mjs.map → chunk-R6MT6F3T.mjs.map} +0 -0
  261. /package/dist/modules/chunks/{chunk-P4UPH74B.mjs.map → chunk-RGM4S2BE.mjs.map} +0 -0
  262. /package/dist/modules/chunks/{chunk-AGVLPYVE.mjs.map → chunk-SKZC6VTV.mjs.map} +0 -0
  263. /package/dist/modules/chunks/{chunk-4D3Q7K44.mjs.map → chunk-SSVRSFTX.mjs.map} +0 -0
  264. /package/dist/modules/chunks/{chunk-2Z5KEV6L.mjs.map → chunk-TFBSEYKW.mjs.map} +0 -0
  265. /package/dist/modules/chunks/{chunk-K2QZRFLE.mjs.map → chunk-TPLT4PBX.mjs.map} +0 -0
  266. /package/dist/modules/chunks/{chunk-5PHAXNFO.mjs.map → chunk-U5LBMAG3.mjs.map} +0 -0
  267. /package/dist/modules/chunks/{chunk-46UEGAXY.mjs.map → chunk-V4SOFUJI.mjs.map} +0 -0
  268. /package/dist/modules/chunks/{chunk-YFQGSDK3.mjs.map → chunk-VD4QU7KY.mjs.map} +0 -0
  269. /package/dist/modules/chunks/{chunk-KX2WU5Z6.mjs.map → chunk-WC6NGMGI.mjs.map} +0 -0
  270. /package/dist/modules/chunks/{chunk-H256DQT6.mjs.map → chunk-XOZ5EMNY.mjs.map} +0 -0
  271. /package/dist/modules/chunks/{chunk-ZHO2G4JR.mjs.map → chunk-XXJ32F5P.mjs.map} +0 -0
  272. /package/dist/modules/chunks/{chunk-VW2ZF3P4.mjs.map → chunk-Y4SFATAM.mjs.map} +0 -0
  273. /package/dist/modules/chunks/{chunk-SRYQLFBV.mjs.map → chunk-ZKFH7EMU.mjs.map} +0 -0
  274. /package/dist/modules/chunks/{chunk-CKYXAT7H.mjs.map → chunk-ZRG7LDCA.mjs.map} +0 -0
  275. /package/dist/modules/chunks/{chunk-PW5CE2Y6.mjs.map → chunk-ZW7LLDOL.mjs.map} +0 -0
@@ -64,8 +64,18 @@ async function mountViewReactPanelInto({ element, panel, props }) {
64
64
  }
65
65
  function createViewPanelHost({ registry, overlayRoot }) {
66
66
  if (!registry) throw new TypeError("createViewPanelHost requires viewSlotRegistry");
67
+ let revealer;
67
68
  return Object.freeze({
68
69
  registry,
70
+ setRevealer(next) {
71
+ revealer = next;
72
+ return () => {
73
+ if (revealer === next) revealer = void 0;
74
+ };
75
+ },
76
+ reveal(slot) {
77
+ return revealer?.(slot) ?? Promise.resolve(false);
78
+ },
69
79
  waitForSlot: (slot) => waitForViewSlot(registry, slot),
70
80
  mount(slot, node) {
71
81
  return registry.mount(slot, node);
@@ -89,4 +99,4 @@ export {
89
99
  mountViewReactPanelInto,
90
100
  createViewPanelHost
91
101
  };
92
- //# sourceMappingURL=chunk-5W7SC5D4.mjs.map
102
+ //# sourceMappingURL=chunk-P2Y73QJJ.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../packages/viewer/src/host/panel-bridge.ts"],
4
- "sourcesContent": ["import type { SlotRegistry, PanelClaim, PanelMount, Dispose } from '@forgeax/view-workspace-core/frontend-contract';\ntype PanelModule = Record<string, (input: Record<string, unknown> & { mountElement: HTMLElement }) => Dispose | Promise<Dispose>>;\nexport async function loadViewPanels() {\n const pending = globalThis.__forgeaxViewPanelsPromise;\n if (pending) {\n try {\n return await pending as PanelModule;\n } catch (error) {\n throw new Error('View panels development bundle failed to load', { cause: error });\n }\n }\n const href = globalThis.__forgeaxViewPanelsUrl ?? '/panels.js';\n try {\n return await import(/* @vite-ignore */ href) as PanelModule;\n } catch (error) {\n throw new Error(`View panels bundle failed to load from ${href}`, { cause: error });\n }\n}\n\nexport async function waitForViewSlot(registry: SlotRegistry, slot: string) {\n if (typeof registry?.resolveWhenReady === 'function') {\n return registry.resolveWhenReady(slot);\n }\n await new Promise((resolve) => setTimeout(resolve, 0));\n return registry.resolve(slot);\n}\n\nexport async function mountViewReactPanel({ registry, id, slot, pageType, titleKey, activity, layout, panel, props }: PanelMount & { registry: SlotRegistry }) {\n if (!registry) throw new TypeError('mountViewReactPanel requires viewSlotRegistry');\n id ??= slot!;\n if (typeof pageType !== 'string' || pageType.trim() === '') {\n throw new TypeError('mountViewReactPanel requires pageType');\n }\n const unclaim = registry.claim({ id, pageType, titleKey, activity, layout });\n try {\n const mountElement = await waitForViewSlot(registry, id);\n const panels = await loadViewPanels();\n const mountName = `mount${panel}Panel`;\n if (typeof panels[mountName] !== 'function') {\n throw new Error(`View panels bundle is missing ${mountName}`);\n }\n const unmountPanel = await panels[mountName]({\n slot: id,\n ...props,\n mountElement,\n });\n return async () => {\n await unmountPanel?.();\n unclaim();\n };\n } catch (error) {\n unclaim();\n throw error;\n }\n}\n\nexport async function mountViewReactPanelInto({ element, panel, props }: { element: HTMLElement; panel: string; props?: Record<string, unknown> }) {\n if (!element) throw new TypeError('mountViewReactPanelInto requires element');\n const panels = await loadViewPanels();\n const mountName = `mount${panel}Panel`;\n if (typeof panels[mountName] !== 'function') {\n throw new Error(`View panels bundle is missing ${mountName}`);\n }\n return panels[mountName]({ ...props, mountElement: element });\n}\n\nexport function createViewPanelHost({ registry, overlayRoot }: { registry: SlotRegistry; overlayRoot?: HTMLElement }) {\n if (!registry) throw new TypeError('createViewPanelHost requires viewSlotRegistry');\n return Object.freeze({\n registry,\n waitForSlot: (slot: string) => waitForViewSlot(registry, slot),\n mount(slot: string, node: HTMLElement) {\n return registry.mount(slot, node);\n },\n claim(claim: PanelClaim) {\n return registry.claim(claim);\n },\n mountPanel(options: PanelMount) {\n return mountViewReactPanel({ registry, ...options, props: { ...options.props, overlayRoot } });\n },\n mountPanelInto(options: { element: HTMLElement; panel: string; props?: Record<string, unknown> }) {\n return mountViewReactPanelInto({ ...options, props: { ...options.props, overlayRoot } });\n },\n });\n}\n"],
5
- "mappings": ";AAEA,eAAsB,iBAAiB;AACrC,QAAM,UAAU,WAAW;AAC3B,MAAI,SAAS;AACX,QAAI;AACF,aAAO,MAAM;AAAA,IACf,SAAS,OAAO;AACd,YAAM,IAAI,MAAM,iDAAiD,EAAE,OAAO,MAAM,CAAC;AAAA,IACnF;AAAA,EACF;AACA,QAAM,OAAO,WAAW,0BAA0B;AAClD,MAAI;AACF,WAAO,MAAM;AAAA;AAAA,MAA0B;AAAA;AAAA,EACzC,SAAS,OAAO;AACd,UAAM,IAAI,MAAM,0CAA0C,IAAI,IAAI,EAAE,OAAO,MAAM,CAAC;AAAA,EACpF;AACF;AAEA,eAAsB,gBAAgB,UAAwB,MAAc;AAC1E,MAAI,OAAO,UAAU,qBAAqB,YAAY;AACpD,WAAO,SAAS,iBAAiB,IAAI;AAAA,EACvC;AACA,QAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,CAAC,CAAC;AACrD,SAAO,SAAS,QAAQ,IAAI;AAC9B;AAEA,eAAsB,oBAAoB,EAAE,UAAU,IAAI,MAAM,UAAU,UAAU,UAAU,QAAQ,OAAO,MAAM,GAA4C;AAC7J,MAAI,CAAC,SAAU,OAAM,IAAI,UAAU,+CAA+C;AAClF,SAAO;AACP,MAAI,OAAO,aAAa,YAAY,SAAS,KAAK,MAAM,IAAI;AAC1D,UAAM,IAAI,UAAU,uCAAuC;AAAA,EAC7D;AACA,QAAM,UAAU,SAAS,MAAM,EAAE,IAAI,UAAU,UAAU,UAAU,OAAO,CAAC;AAC3E,MAAI;AACF,UAAM,eAAe,MAAM,gBAAgB,UAAU,EAAE;AACvD,UAAM,SAAS,MAAM,eAAe;AACpC,UAAM,YAAY,QAAQ,KAAK;AAC/B,QAAI,OAAO,OAAO,SAAS,MAAM,YAAY;AAC3C,YAAM,IAAI,MAAM,iCAAiC,SAAS,EAAE;AAAA,IAC9D;AACA,UAAM,eAAe,MAAM,OAAO,SAAS,EAAE;AAAA,MAC3C,MAAM;AAAA,MACN,GAAG;AAAA,MACH;AAAA,IACF,CAAC;AACD,WAAO,YAAY;AACjB,YAAM,eAAe;AACrB,cAAQ;AAAA,IACV;AAAA,EACF,SAAS,OAAO;AACd,YAAQ;AACR,UAAM;AAAA,EACR;AACF;AAEA,eAAsB,wBAAwB,EAAE,SAAS,OAAO,MAAM,GAA6E;AACjJ,MAAI,CAAC,QAAS,OAAM,IAAI,UAAU,0CAA0C;AAC5E,QAAM,SAAS,MAAM,eAAe;AACpC,QAAM,YAAY,QAAQ,KAAK;AAC/B,MAAI,OAAO,OAAO,SAAS,MAAM,YAAY;AAC3C,UAAM,IAAI,MAAM,iCAAiC,SAAS,EAAE;AAAA,EAC9D;AACA,SAAO,OAAO,SAAS,EAAE,EAAE,GAAG,OAAO,cAAc,QAAQ,CAAC;AAC9D;AAEO,SAAS,oBAAoB,EAAE,UAAU,YAAY,GAA0D;AACpH,MAAI,CAAC,SAAU,OAAM,IAAI,UAAU,+CAA+C;AAClF,SAAO,OAAO,OAAO;AAAA,IACnB;AAAA,IACA,aAAa,CAAC,SAAiB,gBAAgB,UAAU,IAAI;AAAA,IAC7D,MAAM,MAAc,MAAmB;AACrC,aAAO,SAAS,MAAM,MAAM,IAAI;AAAA,IAClC;AAAA,IACA,MAAM,OAAmB;AACvB,aAAO,SAAS,MAAM,KAAK;AAAA,IAC7B;AAAA,IACA,WAAW,SAAqB;AAC9B,aAAO,oBAAoB,EAAE,UAAU,GAAG,SAAS,OAAO,EAAE,GAAG,QAAQ,OAAO,YAAY,EAAE,CAAC;AAAA,IAC/F;AAAA,IACA,eAAe,SAAmF;AAChG,aAAO,wBAAwB,EAAE,GAAG,SAAS,OAAO,EAAE,GAAG,QAAQ,OAAO,YAAY,EAAE,CAAC;AAAA,IACzF;AAAA,EACF,CAAC;AACH;",
4
+ "sourcesContent": ["import type { SlotRegistry, PanelClaim, PanelMount, Dispose } from '@forgeax/view-workspace-core/frontend-contract';\ntype PanelModule = Record<string, (input: Record<string, unknown> & { mountElement: HTMLElement }) => Dispose | Promise<Dispose>>;\nexport async function loadViewPanels() {\n const pending = globalThis.__forgeaxViewPanelsPromise;\n if (pending) {\n try {\n return await pending as PanelModule;\n } catch (error) {\n throw new Error('View panels development bundle failed to load', { cause: error });\n }\n }\n const href = globalThis.__forgeaxViewPanelsUrl ?? '/panels.js';\n try {\n return await import(/* @vite-ignore */ href) as PanelModule;\n } catch (error) {\n throw new Error(`View panels bundle failed to load from ${href}`, { cause: error });\n }\n}\n\nexport async function waitForViewSlot(registry: SlotRegistry, slot: string) {\n if (typeof registry?.resolveWhenReady === 'function') {\n return registry.resolveWhenReady(slot);\n }\n await new Promise((resolve) => setTimeout(resolve, 0));\n return registry.resolve(slot);\n}\n\nexport async function mountViewReactPanel({ registry, id, slot, pageType, titleKey, activity, layout, panel, props }: PanelMount & { registry: SlotRegistry }) {\n if (!registry) throw new TypeError('mountViewReactPanel requires viewSlotRegistry');\n id ??= slot!;\n if (typeof pageType !== 'string' || pageType.trim() === '') {\n throw new TypeError('mountViewReactPanel requires pageType');\n }\n const unclaim = registry.claim({ id, pageType, titleKey, activity, layout });\n try {\n const mountElement = await waitForViewSlot(registry, id);\n const panels = await loadViewPanels();\n const mountName = `mount${panel}Panel`;\n if (typeof panels[mountName] !== 'function') {\n throw new Error(`View panels bundle is missing ${mountName}`);\n }\n const unmountPanel = await panels[mountName]({\n slot: id,\n ...props,\n mountElement,\n });\n return async () => {\n await unmountPanel?.();\n unclaim();\n };\n } catch (error) {\n unclaim();\n throw error;\n }\n}\n\nexport async function mountViewReactPanelInto({ element, panel, props }: { element: HTMLElement; panel: string; props?: Record<string, unknown> }) {\n if (!element) throw new TypeError('mountViewReactPanelInto requires element');\n const panels = await loadViewPanels();\n const mountName = `mount${panel}Panel`;\n if (typeof panels[mountName] !== 'function') {\n throw new Error(`View panels bundle is missing ${mountName}`);\n }\n return panels[mountName]({ ...props, mountElement: element });\n}\n\nexport function createViewPanelHost({ registry, overlayRoot }: { registry: SlotRegistry; overlayRoot?: HTMLElement }) {\n if (!registry) throw new TypeError('createViewPanelHost requires viewSlotRegistry');\n let revealer: ((slot: string) => Promise<boolean>) | undefined;\n return Object.freeze({\n registry,\n setRevealer(next: (slot: string) => Promise<boolean>) {\n revealer = next;\n return () => { if (revealer === next) revealer = undefined; };\n },\n reveal(slot: string) { return revealer?.(slot) ?? Promise.resolve(false); },\n waitForSlot: (slot: string) => waitForViewSlot(registry, slot),\n mount(slot: string, node: HTMLElement) {\n return registry.mount(slot, node);\n },\n claim(claim: PanelClaim) {\n return registry.claim(claim);\n },\n mountPanel(options: PanelMount) {\n return mountViewReactPanel({ registry, ...options, props: { ...options.props, overlayRoot } });\n },\n mountPanelInto(options: { element: HTMLElement; panel: string; props?: Record<string, unknown> }) {\n return mountViewReactPanelInto({ ...options, props: { ...options.props, overlayRoot } });\n },\n });\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  FRONTEND_PLUGIN_ID,
3
3
  identity_exports
4
- } from "./chunk-FMCHH5R4.mjs";
4
+ } from "./chunk-FSSKCXPL.mjs";
5
5
  import {
6
6
  applyResourcePagePlugin
7
- } from "./chunk-KX2WU5Z6.mjs";
7
+ } from "./chunk-WC6NGMGI.mjs";
8
8
 
9
9
  // packages/view-plugin-texture/src/frontend.ts
10
10
  var VIEW_TEXTURE_FRONTEND_PLUGIN_ID = FRONTEND_PLUGIN_ID;
@@ -22,4 +22,4 @@ export {
22
22
  viewTextureFrontendPlugin,
23
23
  frontend_default
24
24
  };
25
- //# sourceMappingURL=chunk-U6UMATPV.mjs.map
25
+ //# sourceMappingURL=chunk-P3ZW2T37.mjs.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  createWorkspaceStateReader
3
- } from "./chunk-TXLD7JI5.mjs";
3
+ } from "./chunk-QQP7ZGQD.mjs";
4
4
 
5
5
  // packages/view-plugin-display/src/ui/run-observer.ts
6
6
  function failureText(error) {
@@ -193,4 +193,4 @@ function mountRunObserver({ document, surface, status, client }) {
193
193
  export {
194
194
  mountRunObserver
195
195
  };
196
- //# sourceMappingURL=chunk-INTTYJVW.mjs.map
196
+ //# sourceMappingURL=chunk-PHCUCHVL.mjs.map
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  connectViewWorkspace
3
- } from "./chunk-U5J7OTEB.mjs";
3
+ } from "./chunk-K4C5WOTT.mjs";
4
4
  import {
5
5
  workspaceDiagnosticRecord
6
- } from "./chunk-U5R6MVM4.mjs";
6
+ } from "./chunk-EQRDY5CQ.mjs";
7
7
  import {
8
8
  VIEW_WORKSPACE_OPERATIONS
9
- } from "./chunk-E3Z7GLFU.mjs";
9
+ } from "./chunk-QYJZ3SOV.mjs";
10
10
 
11
11
  // src/cli.ts
12
12
  import { randomUUID } from "node:crypto";
@@ -227,4 +227,4 @@ if (isDirectInvocation()) {
227
227
  export {
228
228
  runViewWorkspaceCli
229
229
  };
230
- //# sourceMappingURL=chunk-JK7K7RG3.mjs.map
230
+ //# sourceMappingURL=chunk-QNJL265P.mjs.map
@@ -17,4 +17,4 @@ var shell_default = {
17
17
  export {
18
18
  shell_default
19
19
  };
20
- //# sourceMappingURL=chunk-ZGOGO7SS.mjs.map
20
+ //# sourceMappingURL=chunk-QNSUBUZF.mjs.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  VIEW_WORKSPACE_TAB_ID
3
- } from "./chunk-E3Z7GLFU.mjs";
3
+ } from "./chunk-QYJZ3SOV.mjs";
4
4
 
5
5
  // packages/view-workspace-core/src/project-session.ts
6
6
  var KEY = "forgeax.view.project-session/1";
@@ -94,6 +94,7 @@ function createProjectSession(client, { window = globalThis } = {}) {
94
94
  restoring: Boolean(pageTarget ? navigation?.type === "reload" : explicitRoot || record?.root && record?.targetId)
95
95
  };
96
96
  let initializing = true;
97
+ let openedIntent = Boolean(pageTarget || explicitRoot || record?.targetId);
97
98
  let retryTimer;
98
99
  let cancelDelay;
99
100
  let reconnecting;
@@ -145,6 +146,10 @@ function createProjectSession(client, { window = globalThis } = {}) {
145
146
  if (disposed || (snapshot.revision ?? 0) < (state.snapshot.revision ?? -1)) return;
146
147
  changed({ snapshot });
147
148
  releaseReload(snapshot);
149
+ if (!pageTarget && !explicitRoot && !record?.targetId && !initializing && !state.busy && !openedIntent && snapshot.projectIntent?.root) {
150
+ void open(snapshot.projectIntent.root);
151
+ return;
152
+ }
148
153
  const remoteTargetUrl = snapshot?.projectTarget?.url;
149
154
  if (!pageTarget && !explicitRoot && !record?.targetId && !initializing && !state.busy && snapshot?.workspaceTargetLost !== true && snapshot?.projectPhase !== "failed" && typeof snapshot?.project?.root === "string" && snapshot.project.root.trim() !== "" && typeof remoteTargetUrl === "string" && remoteTargetUrl.trim() !== "") {
150
155
  void Promise.resolve(navigate(snapshot)).catch(fail);
@@ -159,7 +164,10 @@ function createProjectSession(client, { window = globalThis } = {}) {
159
164
  };
160
165
  save(window, record);
161
166
  };
162
- const fail = (error) => changed({ busy: false, error: error instanceof Error ? error.message : String(error) });
167
+ const fail = (error) => {
168
+ reloadWatch = false;
169
+ changed({ busy: false, restoring: false, error: error instanceof Error ? error.message : String(error) });
170
+ };
163
171
  const run = async (action) => {
164
172
  if (disposed || state.busy) return;
165
173
  changed({ busy: true, error: null, restoring: true });
@@ -205,6 +213,7 @@ function createProjectSession(client, { window = globalThis } = {}) {
205
213
  return navigate(await client.reopenProject({ ...options, expectedTargetId, expectedTargetState: "lost" }));
206
214
  };
207
215
  const open = (root) => run(async () => {
216
+ openedIntent = true;
208
217
  const snapshot = await client.getState({ signal: controller.signal });
209
218
  accept(snapshot);
210
219
  if (snapshot.project) {
@@ -285,6 +294,7 @@ function createProjectSession(client, { window = globalThis } = {}) {
285
294
  if (!pageTarget) {
286
295
  if (explicitRoot) await open(explicitRoot);
287
296
  else if (record?.root && record?.targetId) await reconnect();
297
+ else if (snapshot.projectIntent?.root) await open(snapshot.projectIntent.root);
288
298
  return;
289
299
  }
290
300
  })().catch(fail).finally(() => {
@@ -322,4 +332,4 @@ export {
322
332
  navigateProjectSession,
323
333
  createProjectSession
324
334
  };
325
- //# sourceMappingURL=chunk-5YTMN435.mjs.map
335
+ //# sourceMappingURL=chunk-QNUBIFAY.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../packages/view-workspace-core/src/project-session.ts"],
4
+ "sourcesContent": ["import type { WorkspaceState } from './contract.ts';\nimport type { ViewWorkspaceClient } from './client.ts';\nexport type ProjectSessionWindow = Pick<Window, 'location' | 'localStorage' | 'sessionStorage' | 'performance' | 'history' | 'addEventListener' | 'removeEventListener'> & { fetch: typeof fetch };\ntype ProjectSessionRecord = { version: number; root?: string; entry?: string; targetId?: string; preferences?: Record<string, string> };\nexport type ProjectSessionState = { snapshot: WorkspaceState; busy: boolean; error: string | null; restoring: boolean };\nexport type ProjectSession = ReturnType<typeof createProjectSession>;\n\nimport { VIEW_WORKSPACE_TAB_ID } from './contract.ts';\n\nconst KEY = 'forgeax.view.project-session/1';\nconst HASH = 'forgeaxViewRestore';\nconst PREFERENCES = ['forgeax-view-theme', 'forgeax.view.locale'];\nconst isLoopback = (hostname: string) => ['localhost', '127.0.0.1', '[::1]'].includes(hostname);\n\nexport function restoreProjectPreferences(window: ProjectSessionWindow = globalThis) {\n const record = readProjectSession(window);\n for (const key of PREFERENCES) {\n const value = record?.preferences?.[key];\n if (typeof value === 'string') {\n try { window.localStorage?.setItem(key, value); } catch { /* Optional preference. */ }\n }\n }\n}\n\nexport function readProjectSession(window: ProjectSessionWindow = globalThis): ProjectSessionRecord | null {\n try {\n const hash = new URLSearchParams(new URL(window.location.href).hash.slice(1));\n const raw = hash.get(HASH) ?? window.sessionStorage?.getItem(KEY) ?? 'null';\n if (raw.length > 64000) return null;\n const value = JSON.parse(raw);\n if (value?.version !== 1 || typeof value.root !== 'string' || !value.root.trim()) return null;\n if (value.targetId !== undefined && typeof value.targetId !== 'string') return null;\n if (value.resources !== undefined && (!Array.isArray(value.resources) ||\n value.resources.length > 32 || !value.resources.every((guid: unknown) => typeof guid === 'string'))) return null;\n const presentation = value.presentation;\n if (presentation !== undefined && (!presentation || typeof presentation !== 'object' || Array.isArray(presentation) ||\n (presentation.pageOrder !== undefined && (!Array.isArray(presentation.pageOrder) ||\n !presentation.pageOrder.every((type: unknown) => typeof type === 'string'))) ||\n (presentation.activeType !== undefined && typeof presentation.activeType !== 'string') ||\n (presentation.layouts !== undefined && (!presentation.layouts || typeof presentation.layouts !== 'object' ||\n Array.isArray(presentation.layouts))))) return null;\n if (value.entry) {\n const entry = new URL(value.entry);\n const current = new URL(window.location.href);\n const sameHost = entry.hostname === current.hostname || (isLoopback(entry.hostname) && isLoopback(current.hostname));\n if (!sameHost || entry.protocol !== current.protocol ||\n !['http:', 'https:'].includes(entry.protocol) || entry.username || entry.password) return null;\n }\n // Read old records without reviving their resource, camera or layout history.\n return { version: 1, root: value.root, entry: value.entry, targetId: value.targetId, preferences: value.preferences };\n } catch { return null; }\n}\n\nfunction save(window: ProjectSessionWindow, value: ProjectSessionRecord | null) {\n if (!value) return;\n value.preferences = {};\n for (const key of PREFERENCES) {\n try {\n const preference = window.localStorage?.getItem(key);\n if (preference) value.preferences[key] = preference;\n } catch { /* Storage is optional. */ }\n }\n try { window.sessionStorage?.setItem(KEY, JSON.stringify(value)); } catch { /* Storage is optional. */ }\n}\n\nexport function projectSessionUrl(url: string, record: ProjectSessionRecord | null) {\n const next = new URL(url);\n next.hash = new URLSearchParams({ [HASH]: JSON.stringify(record) }).toString();\n return next.href;\n}\n\n/** Transfer the confirmed project identity across origins, never runtime history. */\nexport function navigateProjectSession(snapshot: WorkspaceState, window: ProjectSessionWindow = globalThis, record: ProjectSessionRecord | null = readProjectSession(window)) {\n const url = snapshot?.projectTarget?.url;\n if (!url || !window.location?.assign) return;\n if (!snapshot.project?.root) { window.location.assign(url); return; }\n const current = new URL(window.location.href);\n const next = {\n ...record, version: 1, root: snapshot.project.root,\n targetId: snapshot.projectTarget?.targetId,\n entry: record?.entry ?? current.origin + current.pathname,\n };\n save(window, next);\n window.location.assign(projectSessionUrl(url, next));\n}\n\n/** One Cordis-owned project intent/recovery projection shared by all React consumers. */\nexport function createProjectSession(client: ViewWorkspaceClient, { window = globalThis }: { window?: ProjectSessionWindow } = {}) {\n let disposed = false;\n let record = readProjectSession(window);\n const location = window.location;\n const url = location?.href ? new URL(location.href) : null;\n const explicitRoot = url?.searchParams.get('project')?.trim();\n const pageTarget = url?.searchParams.get('forgeaxWorkspaceTarget');\n const navigation = window.performance?.getEntriesByType?.('navigation')?.[0] as PerformanceNavigationTiming | undefined;\n let state: ProjectSessionState = {\n snapshot: {}, busy: false, error: null,\n restoring: Boolean(pageTarget ? navigation?.type === 'reload' : explicitRoot || (record?.root && record?.targetId)),\n };\n let initializing = true;\n let openedIntent = Boolean(pageTarget || explicitRoot || record?.targetId);\n let retryTimer: ReturnType<typeof setTimeout> | undefined;\n let cancelDelay: (() => void) | undefined;\n let reconnecting: Promise<void> | undefined;\n let cancelNavigation: (() => void) | undefined;\n const listeners = new Set<(state: ProjectSessionState) => void>();\n const controller = new AbortController();\n const options = { tabId: VIEW_WORKSPACE_TAB_ID, signal: controller.signal };\n const changed = (patch: Partial<ProjectSessionState>) => {\n if (disposed) return;\n state = { ...state, ...patch };\n for (const listener of listeners) listener(state);\n };\n let reloadWatch = Boolean(pageTarget && navigation?.type === 'reload');\n let reloadSawStarting = false;\n let reloadFloor = -1;\n const releaseReload = (snapshot: WorkspaceState) => {\n if (!reloadWatch) return;\n if (snapshot?.workspaceTargetLost === true) {\n reloadWatch = false;\n changed({ restoring: false, busy: false });\n return;\n }\n if (snapshot?.projectTarget?.targetId !== pageTarget) return;\n const phase = snapshot.projectPhase;\n const generation = typeof snapshot.browserGeneration === 'number' ? snapshot.browserGeneration : undefined;\n if (phase === 'starting') {\n reloadSawStarting = true;\n reloadFloor = generation ?? reloadFloor;\n changed({ restoring: true });\n return;\n }\n if (phase === 'failed') {\n reloadWatch = false;\n changed({ restoring: false, busy: false });\n return;\n }\n if (phase === 'running') {\n if (reloadSawStarting && (generation ?? 0) <= reloadFloor) return;\n // The detach may not have been observed yet. Leave the watch open so a\n // later `starting` hides the shell again until the replacement generation.\n if (reloadSawStarting) reloadWatch = false;\n changed({ restoring: false, busy: false });\n return;\n }\n // An engine that does not report browser phase must not trap the shell on refresh.\n if (phase === undefined) {\n reloadWatch = false;\n changed({ restoring: false, busy: false });\n }\n };\n const accept = (snapshot: WorkspaceState) => {\n if (disposed || (snapshot.revision ?? 0) < (state.snapshot.revision ?? -1)) return;\n changed({ snapshot });\n releaseReload(snapshot);\n // A project opened outside this page (for example `view project open`)\n // is adopted by an empty shell that holds no earlier target identity.\n // Headed documents carry pageTarget and never adopt; a page remembering\n // another target keeps its explicit conflict instead of chasing someone\n // else's session.\n if (!pageTarget && !explicitRoot && !record?.targetId && !initializing && !state.busy && !openedIntent\n && snapshot.projectIntent?.root) {\n void open(snapshot.projectIntent.root);\n return;\n }\n const remoteTargetUrl = snapshot?.projectTarget?.url;\n if (!pageTarget && !explicitRoot && !record?.targetId && !initializing && !state.busy\n && snapshot?.workspaceTargetLost !== true && snapshot?.projectPhase !== 'failed'\n && typeof snapshot?.project?.root === 'string' && snapshot.project.root.trim() !== ''\n && typeof remoteTargetUrl === 'string' && remoteTargetUrl.trim() !== '') {\n void Promise.resolve(navigate(snapshot)).catch(fail);\n return;\n }\n if (initializing || !pageTarget || snapshot.projectTarget?.targetId !== pageTarget || !snapshot.project?.root) return;\n record = {\n ...record, version: 1, root: snapshot.project.root, targetId: pageTarget,\n };\n save(window, record);\n };\n const fail = (error: unknown) => {\n // A terminal failure ends restoration. Keep the error visible and allow an\n // explicit retry instead of leaving project pages behind a loading screen.\n reloadWatch = false;\n changed({ busy: false, restoring: false, error: error instanceof Error ? error.message : String(error) });\n };\n const run = async (action: () => Promise<unknown>) => {\n if (disposed || state.busy) return;\n changed({ busy: true, error: null, restoring: true });\n try { await action(); }\n catch (error) { if (!controller.signal.aborted) fail(error); }\n finally { changed({ busy: false }); }\n };\n const navigate = (snapshot: WorkspaceState) => {\n if (disposed) return;\n record = { ...record, version: 1, root: snapshot?.project?.root,\n targetId: snapshot?.projectTarget?.targetId };\n if (!snapshot?.projectTarget?.url || !window.addEventListener) return navigateProjectSession(snapshot, window, record);\n // Keep this document's activation pending until the browser leaves. Starting\n // another App here races the old project server's guarded replacement.\n return new Promise<void>(resolve => {\n const leave = () => {\n window.removeEventListener('pagehide', leave);\n cancelNavigation = undefined;\n resolve();\n };\n cancelNavigation = leave;\n window.addEventListener('pagehide', leave, { once: true });\n try { navigateProjectSession(snapshot, window, record); }\n catch (error) { leave(); throw error; }\n });\n };\n const recover = async () => {\n const snapshot = await client.getState({ signal: controller.signal });\n accept(snapshot);\n const expectedTargetId = pageTarget ?? record?.targetId;\n if (!expectedTargetId || snapshot.projectTarget?.targetId !== expectedTargetId)\n throw new Error('The project changed in another page. Open the current View entry and choose a project explicitly.');\n return navigate(await client.reopenProject({ ...options, expectedTargetId, expectedTargetState: 'lost' }));\n };\n const open = (root: string) => run(async () => {\n openedIntent = true;\n const snapshot = await client.getState({ signal: controller.signal });\n accept(snapshot);\n if (snapshot.project) {\n if (snapshot.project.root !== root) throw new Error('Another project is already open. Close it explicitly before opening a different project.');\n record = { ...record, version: 1, root, targetId: snapshot.projectTarget?.targetId };\n await recover();\n return;\n }\n record = { version: 1, root, entry: url ? url.origin + url.pathname : undefined };\n return navigate(await client.openProject(root, { ...options, expectedTargetId: null }));\n });\n const reconnect = () => run(recover);\n const stop = client.subscribe(accept);\n const probeEntry = async () => {\n if (!record?.entry || disposed) return;\n changed({ busy: true, error: null, restoring: true });\n for (const delay of [0, 250, 500, 1000, 2000, 4000]) {\n await new Promise<void>(resolve => {\n cancelDelay = resolve;\n retryTimer = setTimeout(resolve, delay);\n });\n cancelDelay = undefined;\n if (disposed) return;\n try {\n const response = await window.fetch(new URL('/__forgeax/view/health', record.entry), {\n cache: 'no-store', signal: AbortSignal.any([controller.signal, AbortSignal.timeout(2000)]),\n });\n if (!response.ok) throw new Error('View entry is unavailable');\n if (!disposed) {\n const destination = projectSessionUrl(record.entry, record);\n if (!window.addEventListener) location.replace(destination);\n else await new Promise<void>(resolve => {\n const leave = () => {\n window.removeEventListener('pagehide', leave);\n cancelNavigation = undefined;\n resolve();\n };\n cancelNavigation = leave;\n window.addEventListener('pagehide', leave, { once: true });\n try { location.replace(destination); }\n catch (error) { leave(); throw error; }\n });\n }\n return;\n } catch (error) { if (disposed) return; }\n }\n fail(new Error('View is unavailable. Start or reconnect the backend and View, then retry.'));\n };\n const returnToEntry = () => reconnecting ??= probeEntry().finally(() => { reconnecting = undefined; });\n const disconnect = pageTarget ? client.onDisconnect?.(error => {\n if (/stopped|stopping|unauthorized|forbidden|incompatible/i.test(error?.message ?? '')) {\n fail(error);\n } else void returnToEntry();\n }) : undefined;\n const ready = (async () => {\n if (!url) return;\n if (url.hash.includes(HASH)) {\n save(window, record);\n url.hash = '';\n window.history?.replaceState(null, '', url.href);\n }\n // Refresh keeps this document. The project server and its catalog stay up;\n // the replacement browser reports ready and the shell leaves `restoring`.\n // Do not reopen the project or replay the previous page's resource history.\n if (pageTarget && navigation?.type === 'reload') {\n const snapshot = await client.getState({ signal: controller.signal });\n accept(snapshot);\n return;\n }\n const snapshot = await client.getState({ signal: controller.signal });\n accept(snapshot);\n if (!pageTarget) {\n if (explicitRoot) await open(explicitRoot);\n else if (record?.root && record?.targetId) await reconnect();\n else if (snapshot.projectIntent?.root) await open(snapshot.projectIntent.root);\n // A project remote-opened before this page loaded leaves no explicit\n // intent and no remembered target here; the post-initialization accept\n // below adopts its headed document.\n return;\n }\n })().catch(fail).finally(() => { initializing = false; accept(state.snapshot); });\n return {\n ready, open, reconnect,\n reconnectHost: returnToEntry,\n getSnapshot: () => state,\n subscribe(listener: (state: ProjectSessionState) => void) { listeners.add(listener); listener(state); return () => listeners.delete(listener); },\n dispose() {\n disposed = true;\n controller.abort();\n clearTimeout(retryTimer);\n cancelDelay?.();\n cancelNavigation?.();\n disconnect?.();\n stop();\n listeners.clear();\n },\n };\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["snapshot"]
7
+ }
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  workspaceUiFingerprint
3
- } from "./chunk-E3Z7GLFU.mjs";
3
+ } from "./chunk-QYJZ3SOV.mjs";
4
4
 
5
5
  // packages/view-workspace-core/src/workspace-state.ts
6
6
  function createWorkspaceObservation(reader, isCurrent) {
@@ -77,4 +77,4 @@ export {
77
77
  createWorkspaceObservation,
78
78
  createWorkspaceStateReader
79
79
  };
80
- //# sourceMappingURL=chunk-TXLD7JI5.mjs.map
80
+ //# sourceMappingURL=chunk-QQP7ZGQD.mjs.map
@@ -25,6 +25,9 @@ var VIEW_WORKSPACE_SERVICES = Object.freeze({
25
25
  call: "forgeax.view.workspace.call"
26
26
  });
27
27
  var VIEW_FILE_GET_SERVICE = "forgeax.view.file.get";
28
+ var VIEW_PACK_SOURCES_SERVICE = "forgeax.view.pack.sources";
29
+ var VIEW_PACK_REVEAL_TOPIC = "forgeax.view.pack.reveal";
30
+ var VIEW_PACK_REVEAL_ACK_SERVICE = "forgeax.view.pack.reveal.ack";
28
31
  var VIEW_WORKSPACE_STATE_TOPIC = "forgeax.view.workspace.state";
29
32
  var VIEW_PAGE_TYPES = Object.freeze({
30
33
  editor: "editor",
@@ -37,6 +40,9 @@ var VIEW_PAGE_TYPES = Object.freeze({
37
40
  });
38
41
  var VIEW_WORKSPACE_COOK_MODES = Object.freeze(["rebuild", "cold-cook"]);
39
42
  var VIEW_WORKSPACE_CORE_OPERATIONS = Object.freeze([
43
+ "workspace.summary",
44
+ "pages.list",
45
+ "pack.reveal",
40
46
  "tabs.get",
41
47
  "tabs.select",
42
48
  "scene.select",
@@ -310,6 +316,7 @@ function serializeWorkspaceAsset(asset) {
310
316
  ...asset.sourcePath === void 0 ? {} : { sourcePath: String(asset.sourcePath) },
311
317
  ...asset.sourceKind === void 0 ? {} : { sourceKind: String(asset.sourceKind) },
312
318
  ...asset.packageId === void 0 ? {} : { packageId: String(asset.packageId) },
319
+ ...asset.lifecycle === void 0 ? {} : { lifecycle: asset.lifecycle },
313
320
  ...asset.packageUrl === void 0 ? {} : { packageUrl: String(asset.packageUrl) },
314
321
  ...asset.cookReceiptUrl === void 0 ? {} : { cookReceiptUrl: String(asset.cookReceiptUrl) },
315
322
  ...asset.label === void 0 ? {} : { label: String(asset.label) },
@@ -430,6 +437,7 @@ function serializeWorkspaceState(state) {
430
437
  selectedTabId: state.selectedTabId,
431
438
  tabs: state.tabs,
432
439
  project: serializeWorkspaceProject(state.project),
440
+ ...typeof state.projectIntent?.root === "string" ? { projectIntent: { root: state.projectIntent.root } } : {},
433
441
  projectTarget: serializeWorkspaceTarget(state.projectTarget),
434
442
  assets: Array.isArray(state.assets) ? state.assets.map((asset) => serializeWorkspaceAsset(asset)) : null,
435
443
  preview: state.preview ? {
@@ -458,6 +466,9 @@ export {
458
466
  VIEW_WORKSPACE_API_VERSION,
459
467
  VIEW_WORKSPACE_SERVICES,
460
468
  VIEW_FILE_GET_SERVICE,
469
+ VIEW_PACK_SOURCES_SERVICE,
470
+ VIEW_PACK_REVEAL_TOPIC,
471
+ VIEW_PACK_REVEAL_ACK_SERVICE,
461
472
  VIEW_WORKSPACE_STATE_TOPIC,
462
473
  VIEW_PAGE_TYPES,
463
474
  VIEW_WORKSPACE_COOK_MODES,
@@ -488,4 +499,4 @@ export {
488
499
  serializeWorkspaceInspection,
489
500
  serializeWorkspaceState
490
501
  };
491
- //# sourceMappingURL=chunk-E3Z7GLFU.mjs.map
502
+ //# sourceMappingURL=chunk-QYJZ3SOV.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../packages/view-workspace-core/src/scene-selection.ts", "../../../packages/view-workspace-core/src/contract.ts"],
4
+ "sourcesContent": ["import { type WorkspaceSceneSelection, requireWorkspaceString } from './contract.ts';\n\n/**\n * Workspace-authoritative scene entity selection (Inspector + Hierarchy + Viewport).\n * Orthogonal to asset catalog selection and `inspection` (asset.inspect metadata).\n */\nexport function serializeWorkspaceSceneSelection(sceneSelection: WorkspaceSceneSelection | null | undefined) {\n if (!sceneSelection?.primary) return null;\n const entityId = requireWorkspaceString(\n sceneSelection.primary.entityId,\n 'sceneSelection.primary.entityId',\n );\n return {\n ...(sceneSelection.targetId === undefined ? {} : { targetId: sceneSelection.targetId, targetGeneration: sceneSelection.targetGeneration }),\n primary: {\n entityId,\n ...(sceneSelection.primary.label === undefined\n ? {}\n : { label: String(sceneSelection.primary.label) }),\n },\n };\n}\n\nexport function createEmptySceneSelection() {\n return null;\n}\n", "import type { EngineWorkspaceTarget, EngineWorkspaceProject, EngineWorkspaceAsset, EngineWorkspaceCameraResult, EngineWorkspaceAssetBinding } from '@forgeax/engine/app';\nimport { createWorkspaceId } from './id.ts';\nimport { serializeWorkspaceSceneSelection } from './scene-selection.ts';\n\nexport type WorkspaceTarget = Partial<EngineWorkspaceTarget> & Pick<EngineWorkspaceTarget, 'targetId'>;\nexport type WorkspaceProject = EngineWorkspaceProject;\nexport type WorkspaceDdc = { state?: string; guid?: string; desiredKey?: string; receiptUrl?: string; hint?: string };\nexport type WorkspaceAsset = EngineWorkspaceAsset & {\n sourcePath?: string;\n sourceKind?: string; packageId?: string; packageUrl?: string; cookReceiptUrl?: string; lifecycle?: 'missing' | 'cooking' | 'current' | 'stale' | 'failed';\n label?: string; revision?: string; previewable?: boolean; ddc?: WorkspaceDdc;\n};\nexport type WorkspaceInspection = {\n guid?: string; kind?: string; asset?: WorkspaceAsset; source?: { path?: string; kind?: string; revision?: string };\n meta?: Record<string, unknown>; ddc?: WorkspaceDdc; revision?: string;\n};\nexport type WorkspaceSceneSelection = {\n targetId?: string; targetGeneration?: number; primary: { entityId: string; label?: string };\n};\nexport type WorkspaceResourceOpen = { asset: WorkspaceAsset; preview?: WorkspacePreview };\nexport type WorkspaceTab = { tabId: string; kind: string; selected: boolean; state?: string; width?: number; height?: number; target?: WorkspaceTarget | null; targetId?: string; run?: unknown };\nexport type WorkspaceRequest = { apiVersion: string; operation: string; clientId: string; requestId: string; args: Record<string, unknown>; token?: string };\nexport type WorkspacePreview = {\n target: WorkspaceTarget; asset?: WorkspaceAsset | null; assetBinding?: EngineWorkspaceAssetBinding;\n camera?: EngineWorkspaceCameraResult['camera']; cameraVersion?: number; interaction?: Pick<NonNullable<EngineWorkspaceCameraResult['interaction']>, 'interactionId'> | null;\n};\nexport type WorkspaceOpenRequest = {\n requestId: string; sequence: number; asset: WorkspaceAsset; preview?: WorkspacePreview;\n target?: WorkspaceTarget; inspection?: WorkspaceInspection;\n};\nexport type WorkspaceState = {\n apiVersion?: string; revision?: number; selectedTabId?: string | null; tabs?: readonly WorkspaceTab[];\n projectIntent?: { root: string };\n project?: WorkspaceProject | null; projectTarget?: WorkspaceTarget | null; assets?: readonly WorkspaceAsset[] | null;\n preview?: WorkspacePreview | null; previews?: readonly WorkspacePreview[]; editorPreview?: WorkspacePreview | null;\n play?: { target: WorkspaceTarget; phase?: string } | null; targetBinding?: string;\n inspection?: WorkspaceInspection | null; openRequest?: WorkspaceOpenRequest | null;\n resourceOpens?: Map<string, WorkspaceResourceOpen> | Record<string, WorkspaceResourceOpen>;\n sceneSelection?: WorkspaceSceneSelection | null; workspaceTargetLost?: boolean; projectPhase?: string; browserGeneration?: number;\n};\nexport type WorkspaceSummary = {\n revision: number;\n project: Pick<WorkspaceProject, 'id' | 'root' | 'name'> | null;\n projectPhase: string | null;\n browserGeneration: number | null;\n targets: readonly { targetId: string; generation?: number; role: 'project' | 'play' | 'preview' }[];\n hasMoreTargets: boolean;\n};\nexport type WorkspacePages = { pages: readonly ({ connectionId: string } & WorkspaceSummary)[]; hasMorePages: boolean };\nexport type WorkspacePackReveal = { projectId: string; sourcePath: string; revision: string; packageId?: string; connectionId?: string };\nexport type WorkspacePackRevealResult = {\n ok: boolean; code: string; requestId?: string; connectionId?: string;\n projectId?: string; sourcePath?: string; revision?: string;\n candidates?: readonly string[]; reason?: string;\n};\n\n/**\n * Public wire contract for the user workspace. The contract is deliberately\n * transport agnostic: the CLI and the browser client both send these calls to\n * the same Engine Host service. No command implementation lives in the\n * frontend.\n */\nexport const VIEW_WORKSPACE_API_VERSION = 'forgeax.view.workspace/1';\n\nexport const VIEW_WORKSPACE_SERVICES = Object.freeze({\n capabilities: 'forgeax.view.workspace.capabilities',\n call: 'forgeax.view.workspace.call',\n});\n\n/** Host service for Content Browser source preview. Not a workspace CLI operation. */\nexport const VIEW_FILE_GET_SERVICE = 'forgeax.view.file.get';\nexport const VIEW_PACK_SOURCES_SERVICE = 'forgeax.view.pack.sources';\nexport const VIEW_PACK_REVEAL_TOPIC = 'forgeax.view.pack.reveal';\nexport const VIEW_PACK_REVEAL_ACK_SERVICE = 'forgeax.view.pack.reveal.ack';\n\nexport const VIEW_WORKSPACE_STATE_TOPIC = 'forgeax.view.workspace.state';\n\nexport const VIEW_PAGE_TYPES = Object.freeze({\n editor: 'editor',\n display: 'display',\n plugins: 'plugins',\n material: 'material',\n mesh: 'mesh',\n texture: 'texture',\n asset: 'asset',\n});\n\nexport const VIEW_WORKSPACE_COOK_MODES = Object.freeze(['rebuild', 'cold-cook']);\n\nexport const VIEW_WORKSPACE_CORE_OPERATIONS = Object.freeze([\n 'workspace.summary',\n 'pages.list',\n 'pack.reveal',\n 'tabs.get',\n 'tabs.select',\n 'scene.select',\n 'scene.pick',\n 'scene.clear',\n 'project.open',\n 'project.close',\n 'project.reopen',\n]);\n\nexport const VIEW_WORKSPACE_DOMAIN_OPERATIONS = Object.freeze([\n ...VIEW_WORKSPACE_CORE_OPERATIONS,\n 'display.bind', 'display.status',\n 'assets.list',\n 'asset.inspect',\n 'asset-source.rebuild',\n 'asset-source.cold-cook',\n 'asset.open',\n 'runtime-pack.inspect', 'runtime-pack.admit', 'runtime-pack.generate',\n 'runtime-pack.snapshot', 'runtime-pack.restore', 'runtime-pack.withdraw',\n 'runtime-pack.plugin-install', 'runtime-pack.plugin-inspect', 'runtime-pack.plugin-dispose',\n 'runtime-pack.prepare',\n 'play.start', 'play.ready', 'play.stop', 'target.control', 'target.select', 'target.pick', 'entity.highlight',\n 'preview.close',\n 'preview.capture',\n 'preview.resize',\n 'camera.get',\n 'camera.begin',\n 'camera.update',\n 'camera.commit',\n 'camera.abort',\n 'scene-tree.get',\n 'entity.inspect',\n 'entity.focus',\n 'run.start', 'run.status', 'run.reload', 'run.stop', 'run.capture', 'run.eval', 'run.find', 'run.focus', 'run.camera.get', 'run.camera.set', 'run.camera.release',\n]);\n\n// The CLI/help surface is derived from both ordinary workspace and inspector\n// plugin contributions. Inspector calls use their own Engine Host services.\nexport const VIEW_WORKSPACE_OPERATIONS = Object.freeze([\n ...VIEW_WORKSPACE_DOMAIN_OPERATIONS,\n 'plugins.sources',\n 'plugins.inspect',\n 'plugins.watch',\n]);\n\nexport const VIEW_DISPLAY_TAB_ID = 'forgeax-cli-display';\nexport const VIEW_WORKSPACE_TAB_ID = 'forgeax-user-workspace';\n\nconst OPERATION_SET = new Set(VIEW_WORKSPACE_OPERATIONS);\n\nconst OPAQUE_WORKSPACE_DIAGNOSTICS = new Set([\n 'the contribution executor to return a result',\n 'the producer operation to succeed',\n 'the workspace command to complete',\n 'Inspect the resident View workspace and retry.',\n 'Inspect the provider snapshot and retry.',\n 'Inspect detail and repair the owning producer before retrying.',\n 'Inspect the browser page failure details.',\n 'Inspect the Engine command or tool result.',\n 'Refresh the inspector source and retry.',\n 'the View workspace provider to complete the operation',\n 'the View API provider to complete the operation',\n]);\n\nexport function isOpaqueWorkspaceDiagnostic(value: unknown) {\n if (typeof value !== 'string') return true;\n const text = value.trim();\n if (text === '') return true;\n if (OPAQUE_WORKSPACE_DIAGNOSTICS.has(text)) return true;\n if (/^the browser workspace operation \\S+ to complete$/.test(text)) return true;\n if (/^(?:workspace|inspector) operation \\S+ to complete$/.test(text)) return true;\n if (/^Engine .+ to succeed$/.test(text)) return true;\n return false;\n}\n\nfunction workspaceErrorMessage(code: string, expected: string | undefined, hint: string | undefined) {\n const parts: string[] = [];\n for (const value of [expected, hint]) {\n if (typeof value !== 'string') continue;\n const text = value.trim();\n if (!text || parts.includes(text)) continue;\n parts.push(text);\n }\n const real = parts.filter((text) => !isOpaqueWorkspaceDiagnostic(text));\n const chosen = real.length > 0 ? real : parts;\n return chosen.length > 0 ? `${code}: ${chosen.join(' \u2014 ')}` : String(code ?? 'view-workspace-error');\n}\n\nexport class ViewWorkspaceError extends Error {\n declare readonly code: string;\n declare readonly expected: string | undefined;\n declare readonly hint: string | undefined;\n declare readonly detail: Record<string, unknown>;\n constructor(code: string, expected: string | undefined, hint: string | undefined, detail: Record<string, unknown> = {}) {\n super(workspaceErrorMessage(code, expected, hint));\n this.name = 'ViewWorkspaceError';\n this.code = code;\n this.expected = expected;\n this.hint = hint;\n this.detail = detail;\n }\n}\n\nexport function workspaceError(code: string, expected: string | undefined, hint: string | undefined, detail: Record<string, unknown> = {}) {\n return new ViewWorkspaceError(code, expected, hint, detail);\n}\n\nexport function requireWorkspaceString(value: unknown, field: string) {\n if (typeof value !== 'string' || value.trim() === '') {\n throw workspaceError(\n 'view-workspace-invalid-args',\n `${field} to be a non-empty string`,\n `Provide a non-empty ${field}.`,\n { field },\n );\n }\n return value;\n}\n\nexport function requireWorkspaceObject(value: unknown, field: string) {\n if (value === null || typeof value !== 'object' || Array.isArray(value)) {\n throw workspaceError(\n 'view-workspace-invalid-args',\n `${field} to be an object`,\n `Provide an object for ${field}.`,\n { field },\n );\n }\n return value as Record<string, unknown>;\n}\n\nexport function requireWorkspaceInteger(value: unknown, field: string, { min = 0 } = {}) {\n if (typeof value !== 'number' || !Number.isSafeInteger(value) || value < min) {\n throw workspaceError(\n 'view-workspace-invalid-args',\n `${field} to be an integer >= ${min}`,\n `Provide a valid ${field}.`,\n { field, min },\n );\n }\n return value;\n}\n\nexport function cloneWorkspaceValue<T>(value: T): T {\n if (value === undefined) return value;\n return JSON.parse(JSON.stringify(value));\n}\n\nexport function jsonUnchanged(left: unknown, right: unknown) {\n if (left === right) return true;\n if (left == null || right == null) return left === right;\n return JSON.stringify(left) === JSON.stringify(right);\n}\n\nfunction omitUiTelemetry(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(omitUiTelemetry);\n if (!value || typeof value !== 'object') return value;\n const next: Record<string, unknown> = {};\n for (const [key, nested] of Object.entries(value)) {\n if (key === 'frameId' || key === 'cameraVersion' || key === 'interaction' || key === 'inputVersion') continue;\n if (key === 'camera' && nested && typeof nested === 'object' && !Array.isArray(nested)) {\n if ('control' in nested && nested.control !== undefined) next.camera = { control: nested.control };\n continue;\n }\n next[key] = omitUiTelemetry(nested);\n }\n return next;\n}\n\n/**\n * Stable UI identity for a workspace snapshot. Omits per-frame telemetry so\n * camera orbit, submitted frame ids, play input versions, and revision bumps\n * do not rebuild panels. Nested `tabs[].target.frameId` is included in the walk.\n */\nexport function workspaceUiFingerprint(state: WorkspaceState | null | undefined) {\n if (!state) return '';\n const { revision: _revision, ...rest } = state;\n return JSON.stringify(omitUiTelemetry(rest));\n}\n\nexport function createWorkspaceRequest(operation: string, args: Record<string, unknown> = {}, { clientId, token, requestId }: { clientId?: string; token?: string; requestId?: string } = {}) {\n if (!OPERATION_SET.has(operation)) {\n throw workspaceError(\n 'view-workspace-operation-unknown',\n 'operation to be present in the View workspace API',\n 'Refresh the workspace API capabilities and use a supported operation.',\n { operation },\n );\n }\n const request: WorkspaceRequest = {\n apiVersion: VIEW_WORKSPACE_API_VERSION,\n operation,\n clientId: requireWorkspaceString(clientId, 'clientId'),\n requestId: requestId === undefined ? createWorkspaceId('request') : requireWorkspaceString(requestId, 'requestId'),\n args: requireWorkspaceObject(args, 'args'),\n };\n if (token !== undefined) request.token = requireWorkspaceString(token, 'token');\n return Object.freeze(request);\n}\n\nexport function assertWorkspaceRequest(value: unknown) {\n const request = requireWorkspaceObject(value, 'request');\n if (request.apiVersion !== VIEW_WORKSPACE_API_VERSION) {\n throw workspaceError(\n 'view-workspace-version-mismatch',\n `API version ${VIEW_WORKSPACE_API_VERSION}`,\n 'Install a matching View workspace client.',\n { actual: request.apiVersion, expected: VIEW_WORKSPACE_API_VERSION },\n );\n }\n if (typeof request.operation !== 'string' || !OPERATION_SET.has(request.operation)) {\n throw workspaceError(\n 'view-workspace-operation-unknown',\n 'operation to be present in the View workspace API',\n 'Refresh the workspace API capabilities and use a supported operation.',\n { operation: request.operation },\n );\n }\n requireWorkspaceString(request.clientId, 'clientId');\n requireWorkspaceString(request.requestId, 'requestId');\n requireWorkspaceObject(request.args, 'args');\n return request as WorkspaceRequest;\n}\n\nexport function workspaceCapabilities({\n ready = true,\n headed = ready,\n reason,\n code,\n operations = VIEW_WORKSPACE_OPERATIONS,\n}: { ready?: boolean; headed?: boolean; reason?: unknown; code?: unknown; operations?: readonly string[] } = {}) {\n return {\n apiVersion: VIEW_WORKSPACE_API_VERSION,\n ready: Boolean(ready),\n headed: Boolean(headed),\n operations: [...operations],\n ...(reason === undefined ? {} : { reason: String(reason) }),\n ...(code === undefined ? {} : { code: String(code) }),\n };\n}\n\nexport function serializeWorkspaceTarget(target: WorkspaceTarget): WorkspaceTarget;\nexport function serializeWorkspaceTarget(target: null | undefined): null;\nexport function serializeWorkspaceTarget(target: WorkspaceTarget | null | undefined): WorkspaceTarget | null;\nexport function serializeWorkspaceTarget(target: WorkspaceTarget | null | undefined): WorkspaceTarget | null {\n if (!target) return null;\n requireWorkspaceString(target.targetId, 'target.targetId');\n return {\n targetId: target.targetId,\n ...(target.generation === undefined ? {} : { generation: target.generation }),\n ...(target.sessionId === undefined ? {} : { sessionId: String(target.sessionId) }),\n ...(target.worldId === undefined ? {} : { worldId: String(target.worldId) }),\n headed: target.headed === true,\n ...(target.frameId === undefined ? {} : { frameId: target.frameId }),\n ...(target.width === undefined ? {} : { width: target.width }),\n ...(target.height === undefined ? {} : { height: target.height }),\n ...(target.url === undefined ? {} : { url: String(target.url) }),\n ...(target.surface === undefined || typeof target.surface !== 'string'\n ? {}\n : { surface: target.surface }),\n };\n}\n\nexport function serializeWorkspaceProject(project: WorkspaceProject | null | undefined) {\n if (!project) return null;\n requireWorkspaceString(project.id, 'project.id');\n requireWorkspaceString(project.root, 'project.root');\n return {\n id: project.id,\n root: project.root,\n ...(project.name === undefined ? {} : { name: String(project.name) }),\n ...(project.revision === undefined ? {} : { revision: String(project.revision) }),\n };\n}\n\nexport function serializeWorkspaceAsset(asset: WorkspaceAsset) {\n requireWorkspaceString(asset.guid, 'asset.guid');\n requireWorkspaceString(asset.kind, 'asset.kind');\n return {\n guid: asset.guid,\n kind: asset.kind,\n ...(asset.name === undefined ? {} : { name: String(asset.name) }),\n ...(asset.sourceKey === undefined ? {} : { sourceKey: String(asset.sourceKey) }),\n ...(asset.path === undefined ? {} : { path: String(asset.path) }),\n ...(asset.sourcePath === undefined ? {} : { sourcePath: String(asset.sourcePath) }),\n ...(asset.sourceKind === undefined ? {} : { sourceKind: String(asset.sourceKind) }),\n ...(asset.packageId === undefined ? {} : { packageId: String(asset.packageId) }),\n ...(asset.lifecycle === undefined ? {} : { lifecycle: asset.lifecycle }),\n ...(asset.packageUrl === undefined ? {} : { packageUrl: String(asset.packageUrl) }),\n ...(asset.cookReceiptUrl === undefined ? {} : { cookReceiptUrl: String(asset.cookReceiptUrl) }),\n ...(asset.label === undefined ? {} : { label: String(asset.label) }),\n ...(asset.revision === undefined ? {} : { revision: String(asset.revision) }),\n ...(asset.previewable === undefined ? {} : { previewable: Boolean(asset.previewable) }),\n ...(serializeWorkspaceDdc(asset.ddc) === undefined ? {} : { ddc: serializeWorkspaceDdc(asset.ddc) }),\n };\n}\n\nexport function serializeWorkspaceDdc(ddc: WorkspaceDdc | null | undefined) {\n if (!ddc || typeof ddc !== 'object' || Array.isArray(ddc)) return undefined;\n const state = ddc.state === undefined ? undefined : String(ddc.state);\n return cloneWorkspaceValue({\n ...(state === undefined ? {} : { state }),\n ...(ddc.guid === undefined ? {} : { guid: String(ddc.guid) }),\n ...(ddc.desiredKey === undefined ? {} : { desiredKey: String(ddc.desiredKey) }),\n ...(ddc.receiptUrl === undefined ? {} : { receiptUrl: String(ddc.receiptUrl) }),\n ...(ddc.hint === undefined ? {} : { hint: String(ddc.hint) }),\n });\n}\n\nexport function serializeWorkspaceOpenRequest(request: WorkspaceOpenRequest): WorkspaceOpenRequest;\nexport function serializeWorkspaceOpenRequest(request: null | undefined): null;\nexport function serializeWorkspaceOpenRequest(request: WorkspaceOpenRequest | null | undefined): WorkspaceOpenRequest | null;\nexport function serializeWorkspaceOpenRequest(request: WorkspaceOpenRequest | null | undefined): WorkspaceOpenRequest | null {\n if (!request) return null;\n requireWorkspaceString(request.requestId, 'openRequest.requestId');\n requireWorkspaceInteger(request.sequence, 'openRequest.sequence', { min: 1 });\n const asset = serializeWorkspaceAsset(request.asset);\n const previewTarget = request.preview?.target ?? request.target;\n const previewAsset = request.preview?.asset ?? (previewTarget ? asset : undefined);\n return {\n requestId: request.requestId,\n sequence: request.sequence,\n asset,\n ...(previewTarget\n ? {\n preview: {\n asset: previewAsset ? serializeWorkspaceAsset(previewAsset) : asset,\n target: serializeWorkspaceTarget(previewTarget),\n },\n }\n : {}),\n ...(request.inspection\n ? { inspection: serializeWorkspaceInspection(request.inspection) }\n : {}),\n };\n}\n\nexport function serializeWorkspaceResourceOpens(opens: WorkspaceState['resourceOpens']) {\n if (!opens || typeof opens !== 'object') return undefined;\n const entries = opens instanceof Map ? [...opens.entries()] : Object.entries(opens);\n const serialized: Record<string, { asset: WorkspaceAsset; preview?: WorkspacePreview }> = {};\n for (const [kind, entry] of entries) {\n if (typeof kind !== 'string' || !entry?.asset) continue;\n const asset = serializeWorkspaceAsset(entry.asset);\n const previewTarget = entry.preview?.target;\n serialized[kind] = {\n asset,\n ...(previewTarget\n ? {\n preview: {\n asset: serializeWorkspaceAsset(entry.preview?.asset ?? asset),\n target: serializeWorkspaceTarget(previewTarget),\n },\n }\n : {}),\n };\n }\n return serialized;\n}\n\nexport function workspaceInspectionFactRows(inspection: WorkspaceInspection | null | undefined) {\n if (!inspection || typeof inspection !== 'object' || Array.isArray(inspection)) {\n return Object.freeze([]);\n }\n const asset: Partial<WorkspaceAsset> = inspection.asset && typeof inspection.asset === 'object' ? inspection.asset : {};\n const rows: { label: string; value: string }[] = [];\n const add = (label: string, value: unknown) => {\n if (value === undefined || value === null) return;\n if (typeof value === 'string' && value.trim() === '') return;\n rows.push(\n Object.freeze({\n label,\n value: typeof value === 'object' ? JSON.stringify(value) : String(value),\n }),\n );\n };\n add('GUID', inspection.guid ?? asset.guid);\n add('Kind', asset.kind);\n add('Name', asset.name);\n add('Path', asset.path);\n add('Source', inspection.source?.path ?? asset.sourcePath);\n add('Revision', inspection.revision ?? asset.revision ?? inspection.source?.revision);\n add('Package', asset.packageId ?? asset.packageUrl);\n if (inspection.ddc?.state) add('DDC', inspection.ddc.state);\n const meta = inspection.meta;\n if (meta && typeof meta === 'object' && !Array.isArray(meta)) {\n for (const [key, value] of Object.entries(meta)) add(key, value);\n }\n return Object.freeze(rows);\n}\n\nexport function serializeWorkspaceInspection(inspection: WorkspaceInspection): WorkspaceInspection;\nexport function serializeWorkspaceInspection(inspection: null | undefined): null;\nexport function serializeWorkspaceInspection(inspection: WorkspaceInspection | null | undefined): WorkspaceInspection | null;\nexport function serializeWorkspaceInspection(inspection: WorkspaceInspection | null | undefined): WorkspaceInspection | null {\n if (!inspection) return null;\n const guid = requireWorkspaceString(inspection.guid ?? inspection.asset?.guid, 'inspection.guid');\n const asset = serializeWorkspaceAsset({\n ...inspection.asset,\n guid,\n kind: requireWorkspaceString(inspection.asset?.kind ?? inspection.kind, 'inspection.kind'),\n });\n const source = inspection.source;\n return {\n guid,\n asset,\n ...(source === undefined || source === null\n ? {}\n : {\n source: {\n ...(source.path === undefined ? {} : { path: String(source.path) }),\n ...(source.kind === undefined ? {} : { kind: String(source.kind) }),\n ...(source.revision === undefined ? {} : { revision: String(source.revision) }),\n },\n }),\n ...(inspection.meta !== null && typeof inspection.meta === 'object' && !Array.isArray(inspection.meta)\n ? { meta: cloneWorkspaceValue(inspection.meta) }\n : {}),\n ...(serializeWorkspaceDdc(inspection.ddc) === undefined\n ? {}\n : { ddc: serializeWorkspaceDdc(inspection.ddc) }),\n ...(inspection.revision === undefined ? {} : { revision: String(inspection.revision) }),\n };\n}\n\nexport function serializeWorkspaceState(state: WorkspaceState): WorkspaceState {\n return cloneWorkspaceValue({\n apiVersion: VIEW_WORKSPACE_API_VERSION,\n revision: state.revision,\n selectedTabId: state.selectedTabId,\n tabs: state.tabs,\n project: serializeWorkspaceProject(state.project),\n ...(typeof state.projectIntent?.root === 'string' ? { projectIntent: { root: state.projectIntent.root } } : {}),\n projectTarget: serializeWorkspaceTarget(state.projectTarget),\n assets: Array.isArray(state.assets) ? state.assets.map((asset) => serializeWorkspaceAsset(asset)) : null,\n preview: state.preview\n ? {\n asset: state.preview.asset ? serializeWorkspaceAsset(state.preview.asset) : null,\n target: serializeWorkspaceTarget(state.preview.target),\n assetBinding: state.preview.assetBinding,\n camera: state.preview.camera,\n cameraVersion: state.preview.cameraVersion,\n interaction: state.preview.interaction\n ? { interactionId: state.preview.interaction.interactionId }\n : null,\n }\n : null,\n previews: (state.previews ?? []).map(preview => ({ target: serializeWorkspaceTarget(preview.target), asset: preview.asset ? serializeWorkspaceAsset(preview.asset) : null, assetBinding: preview.assetBinding })),\n editorPreview: state.editorPreview ? { target: serializeWorkspaceTarget(state.editorPreview.target), asset: state.editorPreview.asset ? serializeWorkspaceAsset(state.editorPreview.asset) : null, assetBinding: state.editorPreview.assetBinding } : null,\n play: state.play ? { target: serializeWorkspaceTarget(state.play.target), phase: state.play.phase } : null,\n targetBinding: state.targetBinding ?? 'editor',\n inspection: serializeWorkspaceInspection(state.inspection),\n openRequest: serializeWorkspaceOpenRequest(state.openRequest),\n resourceOpens: serializeWorkspaceResourceOpens(state.resourceOpens),\n sceneSelection: serializeWorkspaceSceneSelection(state.sceneSelection),\n workspaceTargetLost: state.workspaceTargetLost === true,\n ...(state.projectPhase === undefined ? {} : { projectPhase: state.projectPhase }),\n ...(state.browserGeneration === undefined ? {} : { browserGeneration: state.browserGeneration }),\n });\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  RESOURCE_PREVIEW_LAYOUT,
3
3
  RESOURCE_PROPERTIES_LAYOUT
4
- } from "./chunk-KX2WU5Z6.mjs";
4
+ } from "./chunk-WC6NGMGI.mjs";
5
5
  import {
6
6
  VIEW_PAGE_TYPES
7
- } from "./chunk-E3Z7GLFU.mjs";
7
+ } from "./chunk-QYJZ3SOV.mjs";
8
8
  import {
9
9
  __export
10
10
  } from "./chunk-FLGC65SR.mjs";
@@ -83,4 +83,4 @@ export {
83
83
  TITLE_I18N_KEY,
84
84
  identity_exports
85
85
  };
86
- //# sourceMappingURL=chunk-PZIAKZJC.mjs.map
86
+ //# sourceMappingURL=chunk-R6MT6F3T.mjs.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  workspaceDiagnosticRecord
3
- } from "./chunk-U5R6MVM4.mjs";
3
+ } from "./chunk-EQRDY5CQ.mjs";
4
4
  import {
5
5
  ViewWorkspaceError
6
- } from "./chunk-E3Z7GLFU.mjs";
6
+ } from "./chunk-QYJZ3SOV.mjs";
7
7
 
8
8
  // packages/view-workspace-core/src/engine-adapter.ts
9
9
  var VIEW_ENGINE_WORKSPACE_ADAPTER = Object.freeze({
@@ -395,4 +395,4 @@ export {
395
395
  createEngineWorkspaceAdapter,
396
396
  isEngineWorkspaceAdapter
397
397
  };
398
- //# sourceMappingURL=chunk-P4UPH74B.mjs.map
398
+ //# sourceMappingURL=chunk-RGM4S2BE.mjs.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  VIEW_PAGE_TYPES
3
- } from "./chunk-E3Z7GLFU.mjs";
3
+ } from "./chunk-QYJZ3SOV.mjs";
4
4
  import {
5
5
  __export
6
6
  } from "./chunk-FLGC65SR.mjs";
@@ -46,4 +46,4 @@ export {
46
46
  VIEW_STATUS_SERVICE,
47
47
  identity_exports
48
48
  };
49
- //# sourceMappingURL=chunk-AGVLPYVE.mjs.map
49
+ //# sourceMappingURL=chunk-SKZC6VTV.mjs.map
@@ -5,7 +5,7 @@ import {
5
5
  PANEL_LAYOUT,
6
6
  SLOT,
7
7
  TITLE_I18N_KEY
8
- } from "./chunk-EWSCJF77.mjs";
8
+ } from "./chunk-OS7BK3FO.mjs";
9
9
 
10
10
  // packages/view-plugin-plugins/src/frontend.ts
11
11
  var VIEW_PLUGINS_FRONTEND_PLUGIN_ID = FRONTEND_PLUGIN_ID;
@@ -62,4 +62,4 @@ export {
62
62
  viewPluginsListFrontendPlugin,
63
63
  frontend_default
64
64
  };
65
- //# sourceMappingURL=chunk-4D3Q7K44.mjs.map
65
+ //# sourceMappingURL=chunk-SSVRSFTX.mjs.map
@@ -14,10 +14,10 @@ import {
14
14
  } from "./chunk-ZYTHV373.mjs";
15
15
  import {
16
16
  createWorkspaceStateReader
17
- } from "./chunk-TXLD7JI5.mjs";
17
+ } from "./chunk-QQP7ZGQD.mjs";
18
18
  import {
19
19
  VIEW_WORKSPACE_TAB_ID
20
- } from "./chunk-E3Z7GLFU.mjs";
20
+ } from "./chunk-QYJZ3SOV.mjs";
21
21
 
22
22
  // packages/view-plugin-asset/src/ui/mount.tsx
23
23
  import { createRoot } from "react-dom/client";
@@ -118,4 +118,4 @@ async function mountAssetPropertiesPanel(props) {
118
118
  export {
119
119
  mountAssetPropertiesPanel
120
120
  };
121
- //# sourceMappingURL=chunk-2Z5KEV6L.mjs.map
121
+ //# sourceMappingURL=chunk-TFBSEYKW.mjs.map
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  navigateProjectSession
3
- } from "./chunk-5YTMN435.mjs";
3
+ } from "./chunk-QNUBIFAY.mjs";
4
4
  import {
5
5
  workspaceDiagnosticRecord
6
- } from "./chunk-U5R6MVM4.mjs";
6
+ } from "./chunk-EQRDY5CQ.mjs";
7
7
  import {
8
8
  VIEW_WORKSPACE_TAB_ID,
9
9
  isOpaqueWorkspaceDiagnostic,
10
10
  workspaceError
11
- } from "./chunk-E3Z7GLFU.mjs";
11
+ } from "./chunk-QYJZ3SOV.mjs";
12
12
 
13
13
  // packages/view-workspace-core/src/workspace-recovery.ts
14
14
  var VIEW_WORKSPACE_PAGE_LOST_CODE = "view-workspace-page-lost";
@@ -226,4 +226,4 @@ export {
226
226
  navigateToWorkspaceProjectTarget,
227
227
  reopenWorkspaceProject
228
228
  };
229
- //# sourceMappingURL=chunk-K2QZRFLE.mjs.map
229
+ //# sourceMappingURL=chunk-TPLT4PBX.mjs.map
@@ -19,10 +19,10 @@ import {
19
19
  } from "./chunk-KGA5CEJD.mjs";
20
20
  import {
21
21
  workspaceDiagnosticRecord
22
- } from "./chunk-U5R6MVM4.mjs";
22
+ } from "./chunk-EQRDY5CQ.mjs";
23
23
  import {
24
24
  jsonUnchanged
25
- } from "./chunk-E3Z7GLFU.mjs";
25
+ } from "./chunk-QYJZ3SOV.mjs";
26
26
 
27
27
  // packages/view-plugin-plugins/src/ui/PluginsPanel.tsx
28
28
  import { useCallback as useCallback2, useEffect, useRef, useState } from "react";
@@ -441,4 +441,4 @@ function PluginsPanel(props) {
441
441
  export {
442
442
  PluginsPanel
443
443
  };
444
- //# sourceMappingURL=chunk-5PHAXNFO.mjs.map
444
+ //# sourceMappingURL=chunk-U5LBMAG3.mjs.map
@@ -15,20 +15,20 @@ import {
15
15
  } from "./chunk-ZYTHV373.mjs";
16
16
  import {
17
17
  RESOURCE_KINDS
18
- } from "./chunk-X4NNZ5X6.mjs";
18
+ } from "./chunk-M66NDY35.mjs";
19
19
  import {
20
20
  bindWorkspacePreviewSurface
21
- } from "./chunk-B6QUJ33G.mjs";
21
+ } from "./chunk-25PFC2DY.mjs";
22
22
  import {
23
23
  selectWorkspaceResourcePreview,
24
24
  selectWorkspaceResourceSubject
25
- } from "./chunk-ZIDEETK4.mjs";
25
+ } from "./chunk-JKDBKS7P.mjs";
26
26
  import {
27
27
  createWorkspaceStateReader
28
- } from "./chunk-TXLD7JI5.mjs";
28
+ } from "./chunk-QQP7ZGQD.mjs";
29
29
  import {
30
30
  VIEW_WORKSPACE_TAB_ID
31
- } from "./chunk-E3Z7GLFU.mjs";
31
+ } from "./chunk-QYJZ3SOV.mjs";
32
32
 
33
33
  // packages/view-plugin-mesh/src/ui/mount.tsx
34
34
  import { createRoot } from "react-dom/client";
@@ -241,4 +241,4 @@ export {
241
241
  mountMeshPreviewPanel,
242
242
  mountMeshPropertiesPanel
243
243
  };
244
- //# sourceMappingURL=chunk-46UEGAXY.mjs.map
244
+ //# sourceMappingURL=chunk-V4SOFUJI.mjs.map