@forgeax/view 0.5.0-dev.13604.c415409c3b9d → 0.5.0-dev.13713.d28c4863d779

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 (280) hide show
  1. package/README.md +67 -9
  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-EWSCJF77.mjs → chunk-2CMCY54A.mjs} +2 -2
  6. package/dist/modules/chunks/{chunk-M6S5YA6X.mjs → chunk-2RUKPDIE.mjs} +4 -4
  7. package/dist/modules/chunks/{chunk-M6S5YA6X.mjs.map → chunk-2RUKPDIE.mjs.map} +1 -1
  8. package/dist/modules/chunks/{chunk-DWT3TA6M.mjs → chunk-3FBX3P3H.mjs} +9 -8
  9. package/dist/modules/chunks/chunk-3FBX3P3H.mjs.map +7 -0
  10. package/dist/modules/chunks/{chunk-6KM24NH6.mjs → chunk-3Y5WN22T.mjs} +3 -3
  11. package/dist/modules/chunks/chunk-3Y5WN22T.mjs.map +7 -0
  12. package/dist/modules/chunks/{chunk-YFQGSDK3.mjs → chunk-45WL24XN.mjs} +2 -2
  13. package/dist/modules/chunks/{chunk-FMCHH5R4.mjs → chunk-4FYKRL46.mjs} +3 -3
  14. package/dist/modules/chunks/{chunk-VW2ZF3P4.mjs → chunk-4MJHVZMB.mjs} +6 -6
  15. package/dist/modules/chunks/{chunk-XQYF2P6M.mjs → chunk-5HVXQEO3.mjs} +7 -7
  16. package/dist/modules/chunks/{chunk-XMP4THLF.mjs → chunk-66LM6NO6.mjs} +4 -4
  17. package/dist/modules/chunks/{chunk-P4UPH74B.mjs → chunk-6C4OCCYB.mjs} +12 -12
  18. package/dist/modules/chunks/{chunk-P4UPH74B.mjs.map → chunk-6C4OCCYB.mjs.map} +1 -1
  19. package/dist/modules/chunks/{chunk-ZGOGO7SS.mjs → chunk-6J27SWMY.mjs} +1 -1
  20. package/dist/modules/chunks/{chunk-JK7K7RG3.mjs → chunk-6VK7HB4X.mjs} +4 -4
  21. package/dist/modules/chunks/{chunk-HRKW766Y.mjs → chunk-6WZZ7TIC.mjs} +2 -2
  22. package/dist/modules/chunks/{chunk-FICPCJKR.mjs → chunk-7DFCIN3T.mjs} +3 -3
  23. package/dist/modules/chunks/{chunk-FICPCJKR.mjs.map → chunk-7DFCIN3T.mjs.map} +1 -1
  24. package/dist/modules/chunks/{chunk-U64FRQKP.mjs → chunk-7MWZK7HS.mjs} +3 -3
  25. package/dist/modules/chunks/{chunk-F5RLQAPN.mjs → chunk-A7OGXJAV.mjs} +3 -3
  26. package/dist/modules/chunks/{chunk-QUFVUMSY.mjs → chunk-AUINYWZP.mjs} +2 -2
  27. package/dist/modules/chunks/{chunk-PZIAKZJC.mjs → chunk-B24VYGHV.mjs} +3 -3
  28. package/dist/modules/chunks/{chunk-SRYQLFBV.mjs → chunk-BIUWJROZ.mjs} +3 -3
  29. package/dist/modules/chunks/{chunk-SRYQLFBV.mjs.map → chunk-BIUWJROZ.mjs.map} +2 -2
  30. package/dist/modules/chunks/{chunk-X4NNZ5X6.mjs → chunk-C2AMOM7H.mjs} +3 -3
  31. package/dist/modules/chunks/{chunk-IZAHIOFU.mjs → chunk-C3WVSJZF.mjs} +6 -6
  32. package/dist/modules/chunks/{chunk-2Z5KEV6L.mjs → chunk-CAXCOZ7Y.mjs} +3 -3
  33. package/dist/modules/chunks/{chunk-HWZCLROY.mjs → chunk-CN6YN4HP.mjs} +251 -45
  34. package/dist/modules/chunks/chunk-CN6YN4HP.mjs.map +7 -0
  35. package/dist/modules/chunks/{chunk-B6QUJ33G.mjs → chunk-CXFQME65.mjs} +3 -3
  36. package/dist/modules/chunks/{chunk-IJPWKKIU.mjs → chunk-CYOLEAAY.mjs} +14 -13
  37. package/dist/modules/chunks/chunk-CYOLEAAY.mjs.map +7 -0
  38. package/dist/modules/chunks/{chunk-U6UMATPV.mjs → chunk-CYU3WWN6.mjs} +3 -3
  39. package/dist/modules/chunks/{chunk-AGVLPYVE.mjs → chunk-D2LZIQE2.mjs} +2 -2
  40. package/dist/modules/chunks/{chunk-5YTMN435.mjs → chunk-DC5JP46Y.mjs} +13 -3
  41. package/dist/modules/chunks/chunk-DC5JP46Y.mjs.map +7 -0
  42. package/dist/modules/chunks/{chunk-YNHEYXDG.mjs → chunk-DOU4MNMQ.mjs} +3 -3
  43. package/dist/modules/chunks/{chunk-ZIDEETK4.mjs → chunk-E4G4HDOC.mjs} +3 -3
  44. package/dist/modules/chunks/{chunk-ZHO2G4JR.mjs → chunk-EZAJ66NW.mjs} +3 -3
  45. package/dist/modules/chunks/{chunk-APD2EWSZ.mjs → chunk-FIWL6TQS.mjs} +2 -2
  46. package/dist/modules/chunks/{chunk-U5J7OTEB.mjs → chunk-FSSARTVM.mjs} +3 -3
  47. package/dist/modules/chunks/{chunk-47RJSHLM.mjs → chunk-FXXPWAXM.mjs} +3 -3
  48. package/dist/modules/chunks/{chunk-D2RCKG7Q.mjs → chunk-G2QCXN56.mjs} +6 -6
  49. package/dist/modules/chunks/{chunk-4T3D67CS.mjs → chunk-GRDCA6LD.mjs} +8 -8
  50. package/dist/modules/chunks/{chunk-4T3D67CS.mjs.map → chunk-GRDCA6LD.mjs.map} +1 -1
  51. package/dist/modules/chunks/{chunk-WVU3CQ62.mjs → chunk-GUVUL6D2.mjs} +3 -3
  52. package/dist/modules/chunks/{chunk-YLCJNKIW.mjs → chunk-I32EONBF.mjs} +70 -30
  53. package/dist/modules/chunks/chunk-I32EONBF.mjs.map +7 -0
  54. package/dist/modules/chunks/{chunk-E3PJGTLI.mjs → chunk-IGIELQZ2.mjs} +5 -5
  55. package/dist/modules/chunks/{chunk-5PHAXNFO.mjs → chunk-IMDR26Y3.mjs} +3 -3
  56. package/dist/modules/chunks/{chunk-55F55BQY.mjs → chunk-JVOHFCI4.mjs} +3 -3
  57. package/dist/modules/chunks/{chunk-6I7RY73G.mjs → chunk-KCM7ZCQ3.mjs} +5 -5
  58. package/dist/modules/chunks/chunk-KCM7ZCQ3.mjs.map +7 -0
  59. package/dist/modules/chunks/{chunk-K2QZRFLE.mjs → chunk-KJTMDFFX.mjs} +4 -4
  60. package/dist/modules/chunks/{chunk-KX2WU5Z6.mjs → chunk-KPLESRQY.mjs} +3 -3
  61. package/dist/modules/chunks/{chunk-PW5CE2Y6.mjs → chunk-KUOWDTI6.mjs} +2 -2
  62. package/dist/modules/chunks/chunk-L6IHUN7X.mjs +13 -0
  63. package/dist/modules/chunks/chunk-L6IHUN7X.mjs.map +7 -0
  64. package/dist/modules/chunks/{chunk-INTTYJVW.mjs → chunk-LBQ6DFMP.mjs} +2 -2
  65. package/dist/modules/chunks/{chunk-OKQ5RBKO.mjs → chunk-LVWHM3UN.mjs} +2 -2
  66. package/dist/modules/chunks/{chunk-D57DDEV2.mjs → chunk-MDQMARAN.mjs} +6 -6
  67. package/dist/modules/chunks/{chunk-D57DDEV2.mjs.map → chunk-MDQMARAN.mjs.map} +2 -2
  68. package/dist/modules/chunks/{chunk-STQPRNEO.mjs → chunk-MLXRIWJA.mjs} +2 -2
  69. package/dist/modules/chunks/{chunk-D25SR5FS.mjs → chunk-N2SH3JGI.mjs} +3 -3
  70. package/dist/modules/chunks/{chunk-KI4WGTWL.mjs → chunk-N7NXZ6R3.mjs} +4 -4
  71. package/dist/modules/chunks/{chunk-KI4WGTWL.mjs.map → chunk-N7NXZ6R3.mjs.map} +2 -2
  72. package/dist/modules/chunks/{chunk-7IGFAI5H.mjs → chunk-O5QX6H3U.mjs} +5 -5
  73. package/dist/modules/chunks/{chunk-5W7SC5D4.mjs → chunk-P2Y73QJJ.mjs} +11 -1
  74. package/dist/modules/chunks/{chunk-5W7SC5D4.mjs.map → chunk-P2Y73QJJ.mjs.map} +2 -2
  75. package/dist/modules/chunks/{chunk-FNRGLCZW.mjs → chunk-PCQNUFDL.mjs} +39 -13
  76. package/dist/modules/chunks/chunk-PCQNUFDL.mjs.map +7 -0
  77. package/dist/modules/chunks/{chunk-46UEGAXY.mjs → chunk-Q7M7VUOZ.mjs} +6 -6
  78. package/dist/modules/chunks/{chunk-XE6ITXHT.mjs → chunk-QB33CMEU.mjs} +2 -2
  79. package/dist/modules/chunks/{chunk-E3Z7GLFU.mjs → chunk-QJHQN6OD.mjs} +15 -4
  80. package/dist/modules/chunks/chunk-QJHQN6OD.mjs.map +7 -0
  81. package/dist/modules/chunks/{chunk-KAGFU64Y.mjs → chunk-QW2VT3XB.mjs} +2 -2
  82. package/dist/modules/chunks/{chunk-U5R6MVM4.mjs → chunk-RFTLGEB5.mjs} +2 -2
  83. package/dist/modules/chunks/{chunk-VKNIYV2W.mjs → chunk-RYYKMDNI.mjs} +202 -35
  84. package/dist/modules/chunks/chunk-RYYKMDNI.mjs.map +7 -0
  85. package/dist/modules/chunks/{chunk-P5XMFZY4.mjs → chunk-SFB5BDTB.mjs} +2 -2
  86. package/dist/modules/chunks/{chunk-4D3Q7K44.mjs → chunk-SNICHQJP.mjs} +2 -2
  87. package/dist/modules/chunks/{chunk-CX5WREJC.mjs → chunk-SPGFO2TA.mjs} +2 -2
  88. package/dist/modules/chunks/{chunk-H256DQT6.mjs → chunk-TMPTVIAP.mjs} +2 -2
  89. package/dist/modules/chunks/{chunk-OQXDADAS.mjs → chunk-UWJYROKS.mjs} +6 -6
  90. package/dist/modules/chunks/chunk-UWJYROKS.mjs.map +7 -0
  91. package/dist/modules/chunks/{chunk-TTRUYO7Q.mjs → chunk-UZH2664E.mjs} +3 -3
  92. package/dist/modules/chunks/{chunk-TTRUYO7Q.mjs.map → chunk-UZH2664E.mjs.map} +2 -2
  93. package/dist/modules/chunks/{chunk-CKYXAT7H.mjs → chunk-VC4OEPDH.mjs} +2 -2
  94. package/dist/modules/chunks/{chunk-RJVOH7G2.mjs → chunk-VKWEA6NG.mjs} +27 -27
  95. package/dist/modules/chunks/{chunk-LZ57Y73Z.mjs → chunk-VSJOW7J4.mjs} +9 -7
  96. package/dist/modules/chunks/chunk-VSJOW7J4.mjs.map +7 -0
  97. package/dist/modules/chunks/{chunk-PVP5YBNR.mjs → chunk-WFM434WJ.mjs} +2 -2
  98. package/dist/modules/chunks/{chunk-TXLD7JI5.mjs → chunk-WJNASQF2.mjs} +2 -2
  99. package/dist/modules/chunks/{chunk-357UOBAS.mjs → chunk-XUNDH3E7.mjs} +2 -2
  100. package/dist/modules/chunks/{chunk-PJFFCRRD.mjs → chunk-YDARD4EP.mjs} +2 -2
  101. package/dist/modules/chunks/{chunk-27XASYEH.mjs → chunk-YU3HRQX7.mjs} +17 -11
  102. package/dist/modules/chunks/chunk-YU3HRQX7.mjs.map +7 -0
  103. package/dist/modules/chunks/{chunk-EZSGDSCC.mjs → chunk-ZRE7BDDB.mjs} +30 -5
  104. package/dist/modules/chunks/chunk-ZRE7BDDB.mjs.map +7 -0
  105. package/dist/modules/cli-contributions.mjs +14 -14
  106. package/dist/modules/cli.mjs +5 -5
  107. package/dist/modules/command-executor.mjs +3 -3
  108. package/dist/modules/embedded.mjs +82 -42
  109. package/dist/modules/embedded.mjs.map +2 -2
  110. package/dist/modules/extension-bridge.mjs +4 -4
  111. package/dist/modules/frontend-root.mjs +46 -46
  112. package/dist/modules/index.mjs +71 -65
  113. package/dist/modules/index.mjs.map +1 -1
  114. package/dist/modules/pages/scene.mjs +5 -5
  115. package/dist/modules/plugin.mjs +35 -35
  116. package/dist/modules/plugins/asset/frontend.mjs +10 -10
  117. package/dist/modules/plugins/asset/identity.mjs +9 -9
  118. package/dist/modules/plugins/asset/ui.mjs +3 -3
  119. package/dist/modules/plugins/content-browser/frontend.mjs +3 -3
  120. package/dist/modules/plugins/content-browser/identity.mjs +2 -2
  121. package/dist/modules/plugins/content-browser/ui.mjs +3 -3
  122. package/dist/modules/plugins/display/api.mjs +1 -1
  123. package/dist/modules/plugins/display/backend.mjs +4 -4
  124. package/dist/modules/plugins/display/frontend.mjs +5 -5
  125. package/dist/modules/plugins/display/identity.mjs +2 -2
  126. package/dist/modules/plugins/display/ui.mjs +3 -3
  127. package/dist/modules/plugins/inspector/frontend.mjs +3 -3
  128. package/dist/modules/plugins/inspector/identity.mjs +2 -2
  129. package/dist/modules/plugins/inspector/ui.mjs +3 -3
  130. package/dist/modules/plugins/material/frontend.mjs +10 -10
  131. package/dist/modules/plugins/material/identity.mjs +9 -9
  132. package/dist/modules/plugins/material/ui.mjs +10 -10
  133. package/dist/modules/plugins/mesh/frontend.mjs +10 -10
  134. package/dist/modules/plugins/mesh/identity.mjs +9 -9
  135. package/dist/modules/plugins/mesh/ui.mjs +10 -10
  136. package/dist/modules/plugins/plugins/api.mjs +4 -4
  137. package/dist/modules/plugins/plugins/backend.mjs +7 -7
  138. package/dist/modules/plugins/plugins/cli.mjs +5 -5
  139. package/dist/modules/plugins/plugins/frontend.mjs +3 -3
  140. package/dist/modules/plugins/plugins/identity.mjs +2 -2
  141. package/dist/modules/plugins/plugins/runtime.mjs +6 -6
  142. package/dist/modules/plugins/plugins/ui/panel.mjs +3 -3
  143. package/dist/modules/plugins/plugins/ui.mjs +4 -4
  144. package/dist/modules/plugins/scene/frontend.mjs +5 -5
  145. package/dist/modules/plugins/scene/identity.mjs +2 -2
  146. package/dist/modules/plugins/scene-tree/frontend.mjs +3 -3
  147. package/dist/modules/plugins/scene-tree/identity.mjs +2 -2
  148. package/dist/modules/plugins/scene-tree/ui.mjs +3 -3
  149. package/dist/modules/plugins/texture/frontend.mjs +10 -10
  150. package/dist/modules/plugins/texture/identity.mjs +9 -9
  151. package/dist/modules/plugins/texture/ui.mjs +10 -10
  152. package/dist/modules/plugins/viewport/frontend.mjs +12 -12
  153. package/dist/modules/plugins/viewport/identity.mjs +2 -2
  154. package/dist/modules/plugins/viewport/presentation.mjs +4 -4
  155. package/dist/modules/plugins/viewport/schema.mjs +2 -2
  156. package/dist/modules/plugins/viewport/workspace-shell.mjs +9 -9
  157. package/dist/modules/product.mjs +35 -35
  158. package/dist/modules/shell/frontend.mjs +1 -1
  159. package/dist/modules/viewer/catalog/backend.mjs +31 -31
  160. package/dist/modules/viewer/catalog/frontend.mjs +42 -42
  161. package/dist/modules/viewer/catalog/shared.mjs +20 -20
  162. package/dist/modules/viewer/catalog.mjs +51 -51
  163. package/dist/modules/viewer/cli.mjs +10 -10
  164. package/dist/modules/viewer-host/frontend.mjs +48 -48
  165. package/dist/modules/viewer-host/page-registry.mjs +6 -6
  166. package/dist/modules/viewer-host.mjs +7 -7
  167. package/dist/modules/viewer.mjs +51 -51
  168. package/dist/modules/workspace/api.mjs +1 -1
  169. package/dist/modules/workspace/backend.mjs +10 -10
  170. package/dist/modules/workspace/broker.mjs +9 -9
  171. package/dist/modules/workspace/cli.mjs +2 -2
  172. package/dist/modules/workspace/client.mjs +3 -3
  173. package/dist/modules/workspace/command-error.mjs +2 -2
  174. package/dist/modules/workspace/contract.mjs +7 -1
  175. package/dist/modules/workspace/engine-adapter.mjs +3 -3
  176. package/dist/modules/workspace/extension-bridge.mjs +4 -4
  177. package/dist/modules/workspace/frontend-plugin.mjs +8 -8
  178. package/dist/modules/workspace/frontend.mjs +9 -9
  179. package/dist/modules/workspace/page-title.mjs +3 -3
  180. package/dist/modules/workspace/presentation.mjs +4 -4
  181. package/dist/modules/workspace/preview-surface.mjs +7 -7
  182. package/dist/modules/workspace/project-session.mjs +2 -2
  183. package/dist/modules/workspace/render-resize-sync.mjs +2 -2
  184. package/dist/modules/workspace/resident.mjs +4 -4
  185. package/dist/modules/workspace/resource-open.mjs +5 -5
  186. package/dist/modules/workspace/resource-page.mjs +8 -8
  187. package/dist/modules/workspace/tool-runtime.mjs +7 -5
  188. package/dist/modules/workspace/view-trace.mjs +3 -3
  189. package/dist/modules/workspace/workspace-recovery.mjs +4 -4
  190. package/dist/modules/workspace/workspace-state.mjs +2 -2
  191. package/dist/modules/workspace-frontend.mjs +8 -8
  192. package/dist/viewer/assets/{embedded-DXSSFAyM.js → embedded-BKEAtUD6.js} +2 -2
  193. package/dist/viewer/assets/{embedded-DXSSFAyM.js.map → embedded-BKEAtUD6.js.map} +1 -1
  194. package/dist/viewer/assets/main-BQrn6wsa.js +22 -0
  195. package/dist/viewer/assets/main-BQrn6wsa.js.map +1 -0
  196. package/dist/viewer/assets/{panels-lazy-DqCwhGd9.js → panels-lazy-C_Cs-76A.js} +2 -2
  197. package/dist/viewer/assets/{panels-lazy-DqCwhGd9.js.map → panels-lazy-C_Cs-76A.js.map} +1 -1
  198. package/dist/viewer/assets/panels-ui-DEDHJLuE.js +12 -0
  199. package/dist/viewer/assets/panels-ui-DEDHJLuE.js.map +1 -0
  200. package/dist/viewer/assets/style-CcYzhsIZ.css +2 -0
  201. package/dist/viewer/assets/{wgpu_wasm--oeqTwVY.js → wgpu_wasm-cNR5izZM.js} +126 -0
  202. package/dist/viewer/assets/{wgpu_wasm_bg-WoZ1YI1I.wasm → wgpu_wasm_bg-Dps0jNcQ.wasm} +0 -0
  203. package/dist/viewer/index.html +4 -4
  204. package/dist/viewer/panels.js +1 -1
  205. package/package.json +2 -2
  206. package/scripts/verify-runtime-content-engine.mjs +7 -4
  207. package/skills/forgeax-view-cli/SKILL.md +11 -0
  208. package/dist/modules/chunks/chunk-27XASYEH.mjs.map +0 -7
  209. package/dist/modules/chunks/chunk-5YTMN435.mjs.map +0 -7
  210. package/dist/modules/chunks/chunk-6I7RY73G.mjs.map +0 -7
  211. package/dist/modules/chunks/chunk-6KM24NH6.mjs.map +0 -7
  212. package/dist/modules/chunks/chunk-DWT3TA6M.mjs.map +0 -7
  213. package/dist/modules/chunks/chunk-E3Z7GLFU.mjs.map +0 -7
  214. package/dist/modules/chunks/chunk-EZSGDSCC.mjs.map +0 -7
  215. package/dist/modules/chunks/chunk-FNRGLCZW.mjs.map +0 -7
  216. package/dist/modules/chunks/chunk-HWZCLROY.mjs.map +0 -7
  217. package/dist/modules/chunks/chunk-IJPWKKIU.mjs.map +0 -7
  218. package/dist/modules/chunks/chunk-LZ57Y73Z.mjs.map +0 -7
  219. package/dist/modules/chunks/chunk-OQXDADAS.mjs.map +0 -7
  220. package/dist/modules/chunks/chunk-QELNKFSI.mjs +0 -10
  221. package/dist/modules/chunks/chunk-QELNKFSI.mjs.map +0 -7
  222. package/dist/modules/chunks/chunk-VKNIYV2W.mjs.map +0 -7
  223. package/dist/modules/chunks/chunk-YLCJNKIW.mjs.map +0 -7
  224. package/dist/viewer/assets/main-CI6ZQziX.js +0 -22
  225. package/dist/viewer/assets/main-CI6ZQziX.js.map +0 -1
  226. package/dist/viewer/assets/panels-ui-CfUtl68h.js +0 -12
  227. package/dist/viewer/assets/panels-ui-CfUtl68h.js.map +0 -1
  228. package/dist/viewer/assets/style-gOtSMZif.css +0 -2
  229. /package/dist/modules/chunks/{chunk-EWSCJF77.mjs.map → chunk-2CMCY54A.mjs.map} +0 -0
  230. /package/dist/modules/chunks/{chunk-YFQGSDK3.mjs.map → chunk-45WL24XN.mjs.map} +0 -0
  231. /package/dist/modules/chunks/{chunk-FMCHH5R4.mjs.map → chunk-4FYKRL46.mjs.map} +0 -0
  232. /package/dist/modules/chunks/{chunk-VW2ZF3P4.mjs.map → chunk-4MJHVZMB.mjs.map} +0 -0
  233. /package/dist/modules/chunks/{chunk-XQYF2P6M.mjs.map → chunk-5HVXQEO3.mjs.map} +0 -0
  234. /package/dist/modules/chunks/{chunk-XMP4THLF.mjs.map → chunk-66LM6NO6.mjs.map} +0 -0
  235. /package/dist/modules/chunks/{chunk-ZGOGO7SS.mjs.map → chunk-6J27SWMY.mjs.map} +0 -0
  236. /package/dist/modules/chunks/{chunk-JK7K7RG3.mjs.map → chunk-6VK7HB4X.mjs.map} +0 -0
  237. /package/dist/modules/chunks/{chunk-HRKW766Y.mjs.map → chunk-6WZZ7TIC.mjs.map} +0 -0
  238. /package/dist/modules/chunks/{chunk-U64FRQKP.mjs.map → chunk-7MWZK7HS.mjs.map} +0 -0
  239. /package/dist/modules/chunks/{chunk-F5RLQAPN.mjs.map → chunk-A7OGXJAV.mjs.map} +0 -0
  240. /package/dist/modules/chunks/{chunk-QUFVUMSY.mjs.map → chunk-AUINYWZP.mjs.map} +0 -0
  241. /package/dist/modules/chunks/{chunk-PZIAKZJC.mjs.map → chunk-B24VYGHV.mjs.map} +0 -0
  242. /package/dist/modules/chunks/{chunk-X4NNZ5X6.mjs.map → chunk-C2AMOM7H.mjs.map} +0 -0
  243. /package/dist/modules/chunks/{chunk-IZAHIOFU.mjs.map → chunk-C3WVSJZF.mjs.map} +0 -0
  244. /package/dist/modules/chunks/{chunk-2Z5KEV6L.mjs.map → chunk-CAXCOZ7Y.mjs.map} +0 -0
  245. /package/dist/modules/chunks/{chunk-B6QUJ33G.mjs.map → chunk-CXFQME65.mjs.map} +0 -0
  246. /package/dist/modules/chunks/{chunk-U6UMATPV.mjs.map → chunk-CYU3WWN6.mjs.map} +0 -0
  247. /package/dist/modules/chunks/{chunk-AGVLPYVE.mjs.map → chunk-D2LZIQE2.mjs.map} +0 -0
  248. /package/dist/modules/chunks/{chunk-YNHEYXDG.mjs.map → chunk-DOU4MNMQ.mjs.map} +0 -0
  249. /package/dist/modules/chunks/{chunk-ZIDEETK4.mjs.map → chunk-E4G4HDOC.mjs.map} +0 -0
  250. /package/dist/modules/chunks/{chunk-ZHO2G4JR.mjs.map → chunk-EZAJ66NW.mjs.map} +0 -0
  251. /package/dist/modules/chunks/{chunk-APD2EWSZ.mjs.map → chunk-FIWL6TQS.mjs.map} +0 -0
  252. /package/dist/modules/chunks/{chunk-U5J7OTEB.mjs.map → chunk-FSSARTVM.mjs.map} +0 -0
  253. /package/dist/modules/chunks/{chunk-47RJSHLM.mjs.map → chunk-FXXPWAXM.mjs.map} +0 -0
  254. /package/dist/modules/chunks/{chunk-D2RCKG7Q.mjs.map → chunk-G2QCXN56.mjs.map} +0 -0
  255. /package/dist/modules/chunks/{chunk-WVU3CQ62.mjs.map → chunk-GUVUL6D2.mjs.map} +0 -0
  256. /package/dist/modules/chunks/{chunk-E3PJGTLI.mjs.map → chunk-IGIELQZ2.mjs.map} +0 -0
  257. /package/dist/modules/chunks/{chunk-5PHAXNFO.mjs.map → chunk-IMDR26Y3.mjs.map} +0 -0
  258. /package/dist/modules/chunks/{chunk-55F55BQY.mjs.map → chunk-JVOHFCI4.mjs.map} +0 -0
  259. /package/dist/modules/chunks/{chunk-K2QZRFLE.mjs.map → chunk-KJTMDFFX.mjs.map} +0 -0
  260. /package/dist/modules/chunks/{chunk-KX2WU5Z6.mjs.map → chunk-KPLESRQY.mjs.map} +0 -0
  261. /package/dist/modules/chunks/{chunk-PW5CE2Y6.mjs.map → chunk-KUOWDTI6.mjs.map} +0 -0
  262. /package/dist/modules/chunks/{chunk-INTTYJVW.mjs.map → chunk-LBQ6DFMP.mjs.map} +0 -0
  263. /package/dist/modules/chunks/{chunk-OKQ5RBKO.mjs.map → chunk-LVWHM3UN.mjs.map} +0 -0
  264. /package/dist/modules/chunks/{chunk-STQPRNEO.mjs.map → chunk-MLXRIWJA.mjs.map} +0 -0
  265. /package/dist/modules/chunks/{chunk-D25SR5FS.mjs.map → chunk-N2SH3JGI.mjs.map} +0 -0
  266. /package/dist/modules/chunks/{chunk-7IGFAI5H.mjs.map → chunk-O5QX6H3U.mjs.map} +0 -0
  267. /package/dist/modules/chunks/{chunk-46UEGAXY.mjs.map → chunk-Q7M7VUOZ.mjs.map} +0 -0
  268. /package/dist/modules/chunks/{chunk-XE6ITXHT.mjs.map → chunk-QB33CMEU.mjs.map} +0 -0
  269. /package/dist/modules/chunks/{chunk-KAGFU64Y.mjs.map → chunk-QW2VT3XB.mjs.map} +0 -0
  270. /package/dist/modules/chunks/{chunk-U5R6MVM4.mjs.map → chunk-RFTLGEB5.mjs.map} +0 -0
  271. /package/dist/modules/chunks/{chunk-P5XMFZY4.mjs.map → chunk-SFB5BDTB.mjs.map} +0 -0
  272. /package/dist/modules/chunks/{chunk-4D3Q7K44.mjs.map → chunk-SNICHQJP.mjs.map} +0 -0
  273. /package/dist/modules/chunks/{chunk-CX5WREJC.mjs.map → chunk-SPGFO2TA.mjs.map} +0 -0
  274. /package/dist/modules/chunks/{chunk-H256DQT6.mjs.map → chunk-TMPTVIAP.mjs.map} +0 -0
  275. /package/dist/modules/chunks/{chunk-CKYXAT7H.mjs.map → chunk-VC4OEPDH.mjs.map} +0 -0
  276. /package/dist/modules/chunks/{chunk-RJVOH7G2.mjs.map → chunk-VKWEA6NG.mjs.map} +0 -0
  277. /package/dist/modules/chunks/{chunk-PVP5YBNR.mjs.map → chunk-WFM434WJ.mjs.map} +0 -0
  278. /package/dist/modules/chunks/{chunk-TXLD7JI5.mjs.map → chunk-WJNASQF2.mjs.map} +0 -0
  279. /package/dist/modules/chunks/{chunk-357UOBAS.mjs.map → chunk-XUNDH3E7.mjs.map} +0 -0
  280. /package/dist/modules/chunks/{chunk-PJFFCRRD.mjs.map → chunk-YDARD4EP.mjs.map} +0 -0
@@ -27,12 +27,15 @@ import {
27
27
  } from "./chunk-ABRO535N.mjs";
28
28
  import {
29
29
  createWorkspaceStateReader
30
- } from "./chunk-TXLD7JI5.mjs";
30
+ } from "./chunk-WJNASQF2.mjs";
31
31
  import {
32
32
  VIEW_FILE_GET_SERVICE,
33
+ VIEW_PACK_REVEAL_ACK_SERVICE,
34
+ VIEW_PACK_REVEAL_TOPIC,
35
+ VIEW_PACK_SOURCES_SERVICE,
33
36
  VIEW_WORKSPACE_TAB_ID,
34
37
  workspaceUiFingerprint
35
- } from "./chunk-E3Z7GLFU.mjs";
38
+ } from "./chunk-QJHQN6OD.mjs";
36
39
 
37
40
  // packages/view-plugin-content-browser/src/ui/mount.tsx
38
41
  import { createRoot } from "react-dom/client";
@@ -132,6 +135,10 @@ function viewItemKey(item) {
132
135
  function isResourceGroup(assetCount) {
133
136
  return assetCount > 1;
134
137
  }
138
+ function isPackSourceFileName(name) {
139
+ const lower = name.toLowerCase();
140
+ return lower.endsWith(".pack.ts") || lower.endsWith(".pack.json");
141
+ }
135
142
  function fileFamilyOf(name) {
136
143
  const lower = name.toLowerCase();
137
144
  if (lower.endsWith(".meta.json")) return "meta";
@@ -357,22 +364,25 @@ function deriveViewItems({
357
364
  activeKinds,
358
365
  sortState,
359
366
  expandedPacks,
360
- withKindLabel
367
+ withKindLabel,
368
+ revealPath
361
369
  }) {
362
370
  const query = searchQuery.trim().toLowerCase();
363
371
  const searchActive = query !== "";
364
372
  const kindFilterActive = activeKinds.size > 0;
365
373
  const labeledFiles = files.map(withKindLabel);
374
+ const revealed = labeledFiles.find((file) => file.path === revealPath && dirOfPath(file.path) === currentPath);
366
375
  const foldersInPath = folders.filter((folder) => dirOfPath(folder.path) === currentPath).filter(() => activeFamilies.size === 0 || activeFamilies.has("dir")).filter((folder) => {
367
376
  if (!query) return true;
368
377
  const prefix = `${folder.path}/`;
369
378
  return matchesSearch(folder, query) || labeledFiles.some((file) => file.path.startsWith(prefix) && matchesSearch(file, query));
370
379
  }).toSorted((a, b) => compareItems(a, b, "name", sortState.dir));
371
- const filesInPath = labeledFiles.filter((file) => dirOfPath(file.path) === currentPath).filter((file) => activeFamilies.size === 0 || activeFamilies.has(file.family)).filter((file) => !query || matchesSearch(file, query)).toSorted((a, b) => compareItems(a, b, sortState.key, sortState.dir));
380
+ const filesInPath = labeledFiles.filter((file) => dirOfPath(file.path) === currentPath).filter((file) => file === revealed || activeFamilies.size === 0 || activeFamilies.has(file.family)).filter((file) => file === revealed || !query || matchesSearch(file, query)).toSorted((a, b) => compareItems(a, b, sortState.key, sortState.dir));
372
381
  if (kindFilterActive) {
373
382
  const seen = /* @__PURE__ */ new Set();
374
383
  const out = [];
375
384
  for (const file of filesInPath) {
385
+ if (file === revealed) continue;
376
386
  for (const asset of file.assets) {
377
387
  if (seen.has(asset.guid) || !activeKinds.has(asset.kind)) continue;
378
388
  if (query && !matchesSearch(asset, query) && !file.name.toLowerCase().includes(query)) continue;
@@ -381,7 +391,7 @@ function deriveViewItems({
381
391
  }
382
392
  }
383
393
  out.sort((a, b) => a.name.localeCompare(b.name));
384
- return { foldersInPath: [], filesInPath, viewItems: out, searchActive, kindFilterActive };
394
+ return { foldersInPath: [], filesInPath, viewItems: [...revealed ? [revealed, ...revealed.assets] : [], ...out], searchActive, kindFilterActive };
385
395
  }
386
396
  const items = [...foldersInPath];
387
397
  for (const file of filesInPath) {
@@ -389,7 +399,7 @@ function deriveViewItems({
389
399
  items.push(file);
390
400
  continue;
391
401
  }
392
- if (file.assets.length === 1) {
402
+ if (file.assets.length === 1 && !file.isAssetPackage) {
393
403
  items.push(...file.assets);
394
404
  continue;
395
405
  }
@@ -471,6 +481,7 @@ function CBDetailsList({
471
481
  tabIndex: 0,
472
482
  className: `cb-details-row${selected ? " sel" : ""}${opening ? " is-busy" : ""}`,
473
483
  "data-action": CONTENT_BROWSER_ACTIONS.select,
484
+ "data-cb-path": item.type === "file" ? item.path : void 0,
474
485
  "aria-selected": selected,
475
486
  "aria-busy": opening || void 0,
476
487
  onClick: (event) => onSelect(item, event),
@@ -614,7 +625,7 @@ function CBGrid({
614
625
  const Icon = itemIcon(item);
615
626
  const isFolder = item.type === "folder";
616
627
  const isFile = item.type === "file";
617
- const groupCount = grouping && isFile && item.assets.length >= 2 ? item.assets.length : 0;
628
+ const groupCount = grouping && isFile && item.assets.length > 0 && item.isAssetPackage ? item.assets.length : 0;
618
629
  const stacked = groupCount >= 2;
619
630
  const meta = isFolder ? null : isFile ? item.kindLabel : assetKindLabel(item.kind, t2);
620
631
  return /* @__PURE__ */ jsxs2(
@@ -624,6 +635,7 @@ function CBGrid({
624
635
  tabIndex: 0,
625
636
  className: `cb-grid-item cb-fe-card${isFolder ? " cb-grid-folder" : ""}${isFile ? " cb-file-card" : ""}${selected ? " sel" : ""}${expanded ? " cb-pack-expanded" : ""}${stacked ? " cb-group-card" : ""}${groupKey ? " cb-group-member" : ""}${opening ? " is-busy" : ""}`,
626
637
  "data-action": CONTENT_BROWSER_ACTIONS.select,
638
+ "data-cb-path": item.type === "file" ? item.path : void 0,
627
639
  "data-cb-group": groupKey,
628
640
  "aria-selected": selected,
629
641
  "aria-busy": opening || void 0,
@@ -678,7 +690,7 @@ function CBGrid({
678
690
  index += 1;
679
691
  continue;
680
692
  }
681
- if (grouping && item.type === "file" && item.assets.length >= 2 && expandedPacks.has(item.path)) {
693
+ if (grouping && item.type === "file" && item.assets.length > 0 && item.isAssetPackage && expandedPacks.has(item.path)) {
682
694
  const guids = new Set(item.assets.map((asset) => asset.guid));
683
695
  nodes.push(renderCard(item, true, item.path));
684
696
  let nextIndex = index + 1;
@@ -1300,6 +1312,7 @@ function CBPreviewPanel({
1300
1312
  diskFiles,
1301
1313
  projectLabel,
1302
1314
  readPreview,
1315
+ onOpenAsset,
1303
1316
  onClose,
1304
1317
  onDrag,
1305
1318
  onDragEnd
@@ -1399,7 +1412,7 @@ function CBPreviewPanel({
1399
1412
  } else if (previewItem.type === "file") {
1400
1413
  const showSource = filePreviewMode === "source" && showDualPreview;
1401
1414
  if (previewItem.assets.length > 0 && !showSource) {
1402
- body = /* @__PURE__ */ jsx8(FileAssetList, { file: previewItem, t: t2 });
1415
+ body = /* @__PURE__ */ jsx8(FileAssetList, { file: previewItem, t: t2, onOpenAsset });
1403
1416
  } else {
1404
1417
  body = /* @__PURE__ */ jsx8(
1405
1418
  FileContentPreview,
@@ -1412,6 +1425,14 @@ function CBPreviewPanel({
1412
1425
  }
1413
1426
  );
1414
1427
  }
1428
+ if (previewItem.diagnostic) body = /* @__PURE__ */ jsxs6(Fragment, { children: [
1429
+ /* @__PURE__ */ jsxs6("div", { className: "cb-preview-note", role: "status", children: [
1430
+ previewItem.diagnostic.code,
1431
+ ": ",
1432
+ previewItem.diagnostic.hint
1433
+ ] }),
1434
+ body
1435
+ ] });
1415
1436
  } else {
1416
1437
  const showSource = showDualPreview && filePreviewMode === "source" && dualPreviewFile;
1417
1438
  body = showSource ? /* @__PURE__ */ jsx8(
@@ -1464,10 +1485,10 @@ function CBPreviewPanel({
1464
1485
  ] })
1465
1486
  ] });
1466
1487
  }
1467
- function FileAssetList({ file, t: t2 }) {
1488
+ function FileAssetList({ file, t: t2, onOpenAsset }) {
1468
1489
  return /* @__PURE__ */ jsx8("div", { className: "cb-preview-asset-list", children: file.assets.map((asset) => {
1469
1490
  const Icon = itemIcon(asset);
1470
- return /* @__PURE__ */ jsxs6("div", { className: "cb-preview-asset-row", children: [
1491
+ return /* @__PURE__ */ jsxs6("button", { type: "button", className: "cb-preview-asset-row cb-preview-asset-action", onClick: () => onOpenAsset?.(asset), disabled: !onOpenAsset, children: [
1471
1492
  /* @__PURE__ */ jsx8("span", { className: "cb-preview-list-ico", children: /* @__PURE__ */ jsx8(Icon, { size: 15 }) }),
1472
1493
  /* @__PURE__ */ jsxs6("div", { className: "cb-preview-asset-main", children: [
1473
1494
  /* @__PURE__ */ jsx8("div", { title: asset.name, children: asset.name }),
@@ -1680,7 +1701,7 @@ function BoundRuntimePacks({ client, target }) {
1680
1701
  }
1681
1702
 
1682
1703
  // packages/view-plugin-content-browser/src/ui/workspace-catalog.ts
1683
- function projectCatalog(root, assets) {
1704
+ function projectCatalog(root, assets, sources = []) {
1684
1705
  const files = /* @__PURE__ */ new Map();
1685
1706
  const prefix = `${root.replaceAll("\\", "/").replace(/\/$/, "")}/`;
1686
1707
  for (const asset of assets) {
@@ -1711,7 +1732,18 @@ function projectCatalog(root, assets) {
1711
1732
  };
1712
1733
  file.assets.push(item);
1713
1734
  file.family = fileFamilyOfWithAssets(file.name, file.assets);
1714
- file.isAssetPackage = isResourceGroup(file.assets.length);
1735
+ file.isAssetPackage = isPackSourceFileName(file.name) || isResourceGroup(file.assets.length);
1736
+ }
1737
+ for (const source of sources) {
1738
+ const path = source.sourcePath.replaceAll("\\", "/");
1739
+ if (path.startsWith("/") || path.split("/").includes("..") || !isPackSourceFileName(path)) continue;
1740
+ let file = files.get(path);
1741
+ if (!file) {
1742
+ file = { type: "file", path, diskPath: path, name: path.split("/").at(-1), family: "pack", assets: [], isAssetPackage: true, kindLabel: "" };
1743
+ files.set(path, file);
1744
+ }
1745
+ file.isAssetPackage = true;
1746
+ if (source.diagnostic) file.diagnostic = source.diagnostic;
1715
1747
  }
1716
1748
  const folders = /* @__PURE__ */ new Map();
1717
1749
  for (const file of files.values()) {
@@ -1788,7 +1820,8 @@ function toFxMenuItems(items, close) {
1788
1820
  });
1789
1821
  }
1790
1822
  function ContentBrowserPanel({
1791
- client
1823
+ client,
1824
+ revealPanel
1792
1825
  }) {
1793
1826
  const { t: t2 } = useTranslation();
1794
1827
  const [snapshot, setSnapshot] = useState7({});
@@ -1797,9 +1830,10 @@ function ContentBrowserPanel({
1797
1830
  const [runtimeOpen, setRuntimeOpen] = useState7(false);
1798
1831
  const [loading, setLoading] = useState7(false);
1799
1832
  const [openingKeys, setOpeningKeys] = useState7(/* @__PURE__ */ new Set());
1833
+ const [packSources, setPackSources] = useState7([]);
1800
1834
  const project = snapshot.project;
1801
1835
  const projectLabel = project?.name ?? project?.root ?? "No project";
1802
- const catalog = useMemo2(() => projectCatalog(project?.root ?? "", snapshot.assets ?? []), [project?.root, snapshot.assets]);
1836
+ const catalog = useMemo2(() => projectCatalog(project?.root ?? "", snapshot.assets ?? [], packSources), [project?.root, snapshot.assets, packSources]);
1803
1837
  const files = catalog.files;
1804
1838
  const folders = catalog.folders;
1805
1839
  const clientRef = useRef4(client);
@@ -1813,14 +1847,14 @@ function ContentBrowserPanel({
1813
1847
  const refresh = useCallback5(async (signal) => {
1814
1848
  if (!connected || !project || !client) return;
1815
1849
  setLoading(true);
1816
- try {
1817
- await client.listAssets(project.id, { tabId: VIEW_WORKSPACE_TAB_ID, signal });
1818
- if (!signal?.aborted) setLoadFailed(false);
1819
- } catch {
1820
- if (!signal?.aborted) setLoadFailed(true);
1821
- } finally {
1822
- if (!signal?.aborted) setLoading(false);
1823
- }
1850
+ const [assetsResult, sourceResult] = await Promise.allSettled([
1851
+ client.listAssets(project.id, { tabId: VIEW_WORKSPACE_TAB_ID, signal }),
1852
+ client.transport?.request?.(VIEW_PACK_SOURCES_SERVICE, { projectId: project.id }, { signal })
1853
+ ]);
1854
+ if (signal?.aborted) return;
1855
+ if (sourceResult.status === "fulfilled") setPackSources(sourceResult.value?.sources ?? []);
1856
+ setLoadFailed(assetsResult.status === "rejected" && sourceResult.status === "rejected");
1857
+ setLoading(false);
1824
1858
  }, [client, connected, project?.id]);
1825
1859
  useEffect5(() => {
1826
1860
  if (!client || !connected) {
@@ -1857,11 +1891,19 @@ function ContentBrowserPanel({
1857
1891
  const [thumbnailSize, setThumbnailSize] = useState7(80);
1858
1892
  const [detailPanelOpen, setDetailPanelOpen] = useState7(true);
1859
1893
  const [query, setQuery] = useState7("");
1894
+ const [revealFocus, setRevealFocus] = useState7(null);
1895
+ const revealEpoch = useRef4(0);
1896
+ const cancelReveal = useCallback5(() => {
1897
+ revealEpoch.current++;
1898
+ setRevealFocus(null);
1899
+ }, []);
1860
1900
  const [activeFamilies, setActiveFamilies] = useState7(/* @__PURE__ */ new Set());
1861
1901
  const [activeKinds, setActiveKinds] = useState7(/* @__PURE__ */ new Set());
1862
1902
  const [sortState, setSortState] = useState7({ key: "name", dir: "asc" });
1863
1903
  const [history, setHistory] = useState7([""]);
1864
1904
  const [historyIndex, setHistoryIndex] = useState7(0);
1905
+ const historyRef = useRef4({ history, historyIndex });
1906
+ historyRef.current = { history, historyIndex };
1865
1907
  const openEpoch = useRef4(0);
1866
1908
  const landedForEpoch = useRef4(-1);
1867
1909
  const userMovedEpoch = useRef4(-1);
@@ -1884,6 +1926,7 @@ function ContentBrowserPanel({
1884
1926
  const [previewWidth, setPreviewWidth] = useLocalSize("view.cb.previewWidth", 280, 180, 560);
1885
1927
  useEffect5(() => {
1886
1928
  openEpoch.current += 1;
1929
+ setPackSources([]);
1887
1930
  setHistory([""]);
1888
1931
  setHistoryIndex(0);
1889
1932
  setSelectedIds(/* @__PURE__ */ new Set());
@@ -1892,6 +1935,7 @@ function ContentBrowserPanel({
1892
1935
  setExpandedPacks(/* @__PURE__ */ new Set());
1893
1936
  setFavorites(/* @__PURE__ */ new Set());
1894
1937
  setQuery("");
1938
+ cancelReveal();
1895
1939
  }, [project?.id]);
1896
1940
  useEffect5(() => {
1897
1941
  const epoch = openEpoch.current;
@@ -1924,14 +1968,109 @@ function ContentBrowserPanel({
1924
1968
  searchQuery: query,
1925
1969
  activeFamilies,
1926
1970
  activeKinds,
1971
+ revealPath: revealFocus,
1927
1972
  sortState,
1928
1973
  expandedPacks,
1929
1974
  withKindLabel: (file) => file
1930
1975
  }),
1931
- [activeFamilies, activeKinds, expandedPacks, folder, folders, labeledFiles, query, sortState]
1976
+ [activeFamilies, activeKinds, expandedPacks, folder, folders, labeledFiles, query, revealFocus, sortState]
1932
1977
  );
1933
1978
  const { viewItems, foldersInPath, searchActive } = derived;
1979
+ useEffect5(() => {
1980
+ const transport = client?.transport;
1981
+ if (!client || !transport?.subscribe || !transport.request || !project?.id) return;
1982
+ const workspaceClient = client;
1983
+ let retired = false;
1984
+ let activeRequestId;
1985
+ const unsubscribe = transport.subscribe(VIEW_PACK_REVEAL_TOPIC, async (intent) => {
1986
+ if (intent.cancelled) {
1987
+ if (activeRequestId === intent.requestId) {
1988
+ activeRequestId = void 0;
1989
+ ++revealEpoch.current;
1990
+ setRevealFocus(null);
1991
+ }
1992
+ return;
1993
+ }
1994
+ activeRequestId = intent.requestId;
1995
+ const epoch = ++revealEpoch.current;
1996
+ const current = () => !retired && epoch === revealEpoch.current;
1997
+ const acknowledge = async (shown, reason) => {
1998
+ if (retired) return;
1999
+ await transport.request(VIEW_PACK_REVEAL_ACK_SERVICE, {
2000
+ requestId: intent.requestId,
2001
+ projectId: intent.projectId,
2002
+ sourcePath: intent.sourcePath,
2003
+ revision: intent.revision,
2004
+ shown,
2005
+ reason
2006
+ }).catch(() => {
2007
+ });
2008
+ };
2009
+ if (intent.projectId !== project.id) {
2010
+ await acknowledge(false, "project-mismatch");
2011
+ return;
2012
+ }
2013
+ if (!revealPanel) {
2014
+ await acknowledge(false, "panel-reveal-unavailable");
2015
+ return;
2016
+ }
2017
+ try {
2018
+ const inventory = await transport.request(VIEW_PACK_SOURCES_SERVICE, { projectId: project.id });
2019
+ const source = inventory.sources.find((row) => row.sourcePath === intent.sourcePath);
2020
+ if (!source || source.revision !== intent.revision) {
2021
+ await acknowledge(false, "source-revision-changed");
2022
+ return;
2023
+ }
2024
+ if (!current()) {
2025
+ await acknowledge(false, "user-navigation-cancelled");
2026
+ return;
2027
+ }
2028
+ setPackSources(inventory.sources);
2029
+ await workspaceClient.selectTab(VIEW_WORKSPACE_TAB_ID);
2030
+ if (!current()) {
2031
+ await acknowledge(false, "user-navigation-cancelled");
2032
+ return;
2033
+ }
2034
+ if (!await revealPanel() || !current()) {
2035
+ await acknowledge(false, "panel-reveal-unavailable");
2036
+ return;
2037
+ }
2038
+ const path = source.sourcePath;
2039
+ const directory = path.slice(0, path.lastIndexOf("/"));
2040
+ setRevealFocus(path);
2041
+ const currentHistory = historyRef.current;
2042
+ const nextHistory = [...currentHistory.history.slice(0, currentHistory.historyIndex + 1), directory];
2043
+ setHistory(nextHistory);
2044
+ setHistoryIndex(nextHistory.length - 1);
2045
+ setExpandedPacks((current2) => new Set(current2).add(path));
2046
+ setSelectedIds(/* @__PURE__ */ new Set([path]));
2047
+ setPreviewKey(path);
2048
+ for (let attempt = 0; attempt < 40 && current(); attempt++) {
2049
+ await new Promise((resolve) => requestAnimationFrame(resolve));
2050
+ const panel = document.querySelector('[data-testid="panel-content-browser"]');
2051
+ const card = [...panel?.querySelectorAll("[data-cb-path]") ?? []].find((element) => element.dataset.cbPath === path);
2052
+ if (card) card.scrollIntoView({ block: "nearest" });
2053
+ await new Promise((resolve) => requestAnimationFrame(resolve));
2054
+ const panelRect = panel?.getBoundingClientRect();
2055
+ const cardRect = card?.getBoundingClientRect();
2056
+ const shown = current() && card?.getAttribute("aria-selected") === "true" && document.documentElement.dataset.forgeaxViewActivePage === "editor" && !!panelRect && !!cardRect && panelRect.width > 0 && panelRect.height > 0 && cardRect.width > 0 && cardRect.height > 0 && cardRect.bottom > panelRect.top && cardRect.top < panelRect.bottom && cardRect.right > panelRect.left && cardRect.left < panelRect.right;
2057
+ if (shown) {
2058
+ await acknowledge(true);
2059
+ return;
2060
+ }
2061
+ }
2062
+ await acknowledge(false, current() ? "pack-card-not-visible" : "user-navigation-cancelled");
2063
+ } catch (error) {
2064
+ await acknowledge(false, `reveal-error:${error instanceof Error ? error.message : String(error)}`.slice(0, 160));
2065
+ }
2066
+ });
2067
+ return () => {
2068
+ retired = true;
2069
+ unsubscribe();
2070
+ };
2071
+ }, [client, project?.id, revealPanel]);
1934
2072
  const navigate = (path) => {
2073
+ cancelReveal();
1935
2074
  userMovedEpoch.current = openEpoch.current;
1936
2075
  const normalized = normalizePathInput(path);
1937
2076
  if (normalized === folder) return;
@@ -1941,6 +2080,7 @@ function ContentBrowserPanel({
1941
2080
  setHistoryIndex(next.length - 1);
1942
2081
  };
1943
2082
  const selectItem = (item, event) => {
2083
+ cancelReveal();
1944
2084
  setActionError("");
1945
2085
  const key = viewItemKey(item);
1946
2086
  const toggleOff = Boolean((event?.ctrlKey || event?.metaKey) && selectedIds.has(key));
@@ -1969,13 +2109,18 @@ function ContentBrowserPanel({
1969
2109
  }
1970
2110
  };
1971
2111
  const assetToOpen = (item) => item.type === "asset" ? item : item.type === "file" ? item.assets.find((asset) => asset.kind === "scene") ?? item.assets[0] : void 0;
1972
- const canActivate = (item) => item.type === "folder" || !!client && !!project && !!assetToOpen(item);
2112
+ const canActivate = (item) => item.type === "folder" || item.type === "file" && item.isAssetPackage && !!project || !!client && !!project && !!assetToOpen(item);
1973
2113
  const activateItem = (item) => {
1974
2114
  setActionError("");
1975
2115
  if (item.type === "folder") {
1976
2116
  navigate(item.path);
1977
2117
  return;
1978
2118
  }
2119
+ if (item.type === "file" && item.isAssetPackage) {
2120
+ setPreviewKey(viewItemKey(item));
2121
+ if (item.assets.length > 0) setExpandedPacks((current) => new Set(current).add(item.path));
2122
+ return;
2123
+ }
1979
2124
  if (!client || !project) return;
1980
2125
  const guid = assetToOpen(item)?.guid;
1981
2126
  if (!guid) return;
@@ -2083,6 +2228,7 @@ function ContentBrowserPanel({
2083
2228
  }
2084
2229
  ];
2085
2230
  const applyFilter = (filterId) => {
2231
+ cancelReveal();
2086
2232
  const next = toggleFilterId(filterId, activeFamilies, activeKinds);
2087
2233
  setActiveFamilies(next.families);
2088
2234
  setActiveKinds(next.kinds);
@@ -2219,8 +2365,14 @@ function ContentBrowserPanel({
2219
2365
  canGoBack: historyIndex > 0,
2220
2366
  canGoForward: historyIndex < history.length - 1,
2221
2367
  refreshDisabled: !project || loading,
2222
- onBack: () => setHistoryIndex((index) => Math.max(0, index - 1)),
2223
- onForward: () => setHistoryIndex((index) => Math.min(history.length - 1, index + 1)),
2368
+ onBack: () => {
2369
+ cancelReveal();
2370
+ setHistoryIndex((index) => Math.max(0, index - 1));
2371
+ },
2372
+ onForward: () => {
2373
+ cancelReveal();
2374
+ setHistoryIndex((index) => Math.min(history.length - 1, index + 1));
2375
+ },
2224
2376
  onRefresh: () => void refresh(),
2225
2377
  onNavigate: navigate
2226
2378
  }
@@ -2247,7 +2399,13 @@ function ContentBrowserPanel({
2247
2399
  }
2248
2400
  ),
2249
2401
  /* @__PURE__ */ jsx10(Button, { ref: filterButtonRef, size: "compact", variant: "quiet", "data-action": CONTENT_BROWSER_ACTIONS.setFilter, className: activeFilterCount ? "is-active" : void 0, leadingIcon: /* @__PURE__ */ jsx10(Filter, { size: 14 }), onClick: () => openToolbarMenu("filter"), children: filterLabel }),
2250
- /* @__PURE__ */ jsx10(SearchField, { className: "cb-search-box", "data-action": CONTENT_BROWSER_ACTIONS.search, value: query, onChange: (event) => setQuery(event.target.value), onClear: () => setQuery(""), placeholder: t2("contentBrowser.searchPlaceholder"), label: t2("contentBrowser.search") }),
2402
+ /* @__PURE__ */ jsx10(SearchField, { className: "cb-search-box", "data-action": CONTENT_BROWSER_ACTIONS.search, value: query, onChange: (event) => {
2403
+ cancelReveal();
2404
+ setQuery(event.target.value);
2405
+ }, onClear: () => {
2406
+ cancelReveal();
2407
+ setQuery("");
2408
+ }, placeholder: t2("contentBrowser.searchPlaceholder"), label: t2("contentBrowser.search") }),
2251
2409
  /* @__PURE__ */ jsx10(Button, { ref: sortButtonRef, size: "compact", variant: "quiet", "data-action": CONTENT_BROWSER_ACTIONS.setSort, leadingIcon: /* @__PURE__ */ jsx10(ArrowUpDown, { size: 14 }), onClick: () => openToolbarMenu("sort"), children: sortLabels[sortState.key] })
2252
2410
  ] }),
2253
2411
  loading ? /* @__PURE__ */ jsx10("div", { role: "status", children: "Loading assets..." }) : null,
@@ -2271,7 +2429,10 @@ function ContentBrowserPanel({
2271
2429
  onSelect: selectItem,
2272
2430
  onActivate: activateItem,
2273
2431
  onContextMenu: (event, item) => showMenu(event, itemMenu(item)),
2274
- onBlankClick: () => setSelectedIds(/* @__PURE__ */ new Set())
2432
+ onBlankClick: () => {
2433
+ cancelReveal();
2434
+ setSelectedIds(/* @__PURE__ */ new Set());
2435
+ }
2275
2436
  }
2276
2437
  ) : /* @__PURE__ */ jsx10(
2277
2438
  CBGrid,
@@ -2287,7 +2448,10 @@ function ContentBrowserPanel({
2287
2448
  onActivate: activateItem,
2288
2449
  onContextMenu: (event, item) => showMenu(event, itemMenu(item)),
2289
2450
  onTogglePackExpansion: togglePackExpansion,
2290
- onBlankClick: () => setSelectedIds(/* @__PURE__ */ new Set())
2451
+ onBlankClick: () => {
2452
+ cancelReveal();
2453
+ setSelectedIds(/* @__PURE__ */ new Set());
2454
+ }
2291
2455
  }
2292
2456
  ),
2293
2457
  /* @__PURE__ */ jsxs8("footer", { className: "cb-status", children: [
@@ -2303,6 +2467,7 @@ function ContentBrowserPanel({
2303
2467
  diskFiles: labeledFiles,
2304
2468
  projectLabel,
2305
2469
  readPreview,
2470
+ onOpenAsset: activateItem,
2306
2471
  onClose: () => setPreviewKey(null),
2307
2472
  onDrag: (delta) => {
2308
2473
  const next = previewWidth - delta;
@@ -2348,6 +2513,7 @@ function ContentBrowserPanel({
2348
2513
  }),
2349
2514
  /* @__PURE__ */ jsx10("div", { className: "cb-filter-separator" }),
2350
2515
  /* @__PURE__ */ jsx10("button", { type: "button", className: "cb-filter-option cb-filter-clear", disabled: activeFilterCount === 0, onClick: () => {
2516
+ cancelReveal();
2351
2517
  setActiveFamilies(/* @__PURE__ */ new Set());
2352
2518
  setActiveKinds(/* @__PURE__ */ new Set());
2353
2519
  }, children: t2("contentBrowser.clearFilters") })
@@ -2456,10 +2622,10 @@ function ContentBrowserPanel({
2456
2622
  }
2457
2623
 
2458
2624
  // packages/view-plugin-content-browser/src/ui/content-browser.css
2459
- var css2 = '/* packages/view-plugin-content-browser/src/ui/content-browser.css */\n.cb-root {\n --cb-layout-min-width: calc(var(--fx-component-panel-chat-min-width) + var(--fx-ref-space-48) + var(--fx-ref-space-32));\n --cb-source-width: calc(var(--fx-component-panel-config-min-width) - var(--fx-ref-space-48));\n --cb-source-min-width: calc(var(--fx-ref-space-48) * 2 + var(--fx-ref-space-32) + var(--fx-ref-space-12));\n --cb-resize-width: var(--fx-ref-space-6);\n --cb-resize-offset: calc(-1 * var(--fx-ref-space-2));\n --cb-grid-min-width: calc(var(--fx-ref-space-48) * 2 + var(--fx-ref-space-24));\n --cb-grid-min-height: calc(var(--fx-ref-space-48) * 2 + var(--fx-ref-space-32) + var(--fx-ref-space-12));\n --cb-thumb-default: calc(var(--fx-ref-space-48) + var(--fx-ref-space-32) + var(--fx-ref-space-8));\n --cb-import-pop-left: calc(var(--fx-component-navigation-rail-width) + var(--fx-ref-space-12));\n --cb-card-line: 13px;\n --cb-folder-icon: #c9a86a;\n --cb-group-stack: 6px;\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n min-width: var(--cb-layout-min-width);\n min-height: 0;\n overflow: hidden;\n background: var(--fx-color-surface-canvas);\n color: var(--fx-color-text-secondary);\n font: var(--fx-type-compact-font-weight) var(--fx-type-compact-font-size)/var(--fx-type-compact-line-height) var(--fx-type-compact-font-family);\n user-select: none;\n}\n.cb-root * {\n box-sizing: border-box;\n}\n.cb-root :where(input, textarea, .cb-address, .cb-address-input, .cb-preview-source, .cb-preview-code-plain, .cb-preview-code-shiki) {\n user-select: text;\n}\n.cb-root button,\n.cb-root input {\n font: inherit;\n}\n.cb-split {\n display: flex;\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n.cb-source-panel {\n flex: 0 0 var(--cb-src-w, var(--cb-source-width));\n width: var(--cb-src-w, var(--cb-source-width));\n min-width: var(--cb-source-min-width);\n overflow: auto;\n background: var(--fx-color-surface-sidebar);\n}\n.cb-resize-handle {\n position: relative;\n z-index: var(--fx-layer-sticky);\n flex: 0 0 var(--cb-resize-width);\n width: var(--cb-resize-width);\n margin: 0 var(--cb-resize-offset);\n cursor: col-resize;\n}\n.cb-resize-handle::after {\n content: "";\n position: absolute;\n inset: 0 auto 0 50%;\n width: var(--fx-border-width);\n background: var(--fx-color-border-subtle);\n}\n.cb-resize-handle:hover::after {\n background: var(--fx-color-border-focus);\n}\n.cb-source-tree {\n min-width: 0;\n padding: var(--fx-ref-space-4) 0;\n}\n.cb-source-group + .cb-source-group {\n margin-top: var(--fx-ref-space-2);\n}\n.cb-source-group-head,\n.cb-source-row {\n appearance: none;\n display: flex;\n align-items: center;\n width: 100%;\n min-width: 0;\n border: var(--fx-border-width) solid transparent;\n text-align: left;\n cursor: pointer;\n}\n.cb-source-group-head {\n gap: var(--fx-ref-space-4);\n padding: var(--fx-ref-space-4) var(--fx-ref-space-8);\n background: var(--fx-color-surface-raised);\n color: var(--fx-color-text-secondary);\n font-weight: var(--fx-ref-font-weight-600);\n}\n.cb-source-group-head:hover,\n.cb-source-row:hover {\n background: var(--fx-color-surface-hover);\n color: var(--fx-color-text-primary);\n}\n.cb-source-group-head.collapsed .cb-source-chev,\n.cb-source-chev.collapsed {\n transform: rotate(-90deg);\n}\n.cb-source-group-icon {\n flex: 0 0 auto;\n color: var(--fx-color-text-muted);\n}\n.cb-source-group-head .cb-folder-icon {\n color: var(--cb-folder-icon);\n}\n.cb-source-group-name,\n.cb-source-name {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.cb-source-group-body {\n padding: var(--fx-ref-space-2) 0 var(--fx-ref-space-4);\n}\n.cb-source-empty {\n padding: var(--fx-ref-space-4) var(--fx-ref-space-12) var(--fx-ref-space-4) var(--fx-ref-space-16);\n color: var(--fx-color-text-muted);\n font-size: var(--fx-type-caption-font-size);\n font-style: italic;\n}\n.cb-source-row {\n gap: var(--fx-ref-space-4);\n min-height: var(--fx-component-editor-row-height);\n padding-top: var(--fx-ref-space-4);\n padding-right: var(--fx-ref-space-12);\n padding-bottom: var(--fx-ref-space-4);\n background: transparent;\n color: var(--fx-color-text-secondary);\n}\n.cb-source-row.is-path:not(.is-sel) {\n background: color-mix(in srgb, var(--fx-color-surface-hover) 55%, transparent);\n color: var(--fx-color-text-primary);\n}\n.cb-source-group-head.is-sel,\n.cb-source-row.is-sel {\n background: var(--fx-color-selection-bg);\n color: var(--fx-color-selection-fg);\n box-shadow: inset var(--fx-border-focus-width) 0 0 var(--fx-color-selection-indicator);\n}\n.cb-source-row:focus-visible,\n.cb-source-group-head:focus-visible {\n outline: var(--fx-border-focus-width) solid var(--fx-color-border-focus);\n outline-offset: calc(-1 * var(--fx-border-focus-width));\n}\n.cb-source-chev {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--fx-component-choice-size);\n height: var(--fx-component-choice-size);\n flex: 0 0 var(--fx-component-choice-size);\n color: var(--fx-color-text-muted);\n transition: transform var(--fx-motion-hover) var(--fx-motion-ease);\n}\n.cb-source-chev.hidden {\n visibility: hidden;\n}\n.cb-source-icon {\n display: inline-flex;\n flex: 0 0 var(--fx-component-choice-size);\n color: var(--cb-folder-icon);\n}\n.cb-source-name {\n flex: 1;\n}\n.cb-source-fav-row {\n display: flex;\n align-items: stretch;\n width: 100%;\n min-width: 0;\n}\n.cb-source-fav-row .cb-source-row {\n flex: 1;\n width: auto;\n min-width: 0;\n padding-right: var(--fx-ref-space-4);\n background: transparent;\n box-shadow: none;\n}\n.cb-source-fav-row .cb-source-row:hover {\n background: transparent;\n}\n.cb-source-fav-row:hover {\n background: var(--fx-color-surface-hover);\n color: var(--fx-color-text-primary);\n}\n.cb-source-fav-row.is-path:not(.is-sel) {\n background: color-mix(in srgb, var(--fx-color-surface-hover) 55%, transparent);\n color: var(--fx-color-text-primary);\n}\n.cb-source-fav-row.is-sel {\n background: var(--fx-color-selection-bg);\n color: var(--fx-color-selection-fg);\n box-shadow: inset var(--fx-border-focus-width) 0 0 var(--fx-color-selection-indicator);\n}\n.cb-source-unfav {\n appearance: none;\n flex: 0 0 auto;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--fx-component-control-icon-hit-area-min);\n padding: 0;\n border: 0;\n background: transparent;\n color: var(--fx-color-status-warning-fg);\n cursor: pointer;\n}\n.cb-source-unfav:hover {\n color: var(--fx-color-text-primary);\n}\n.cb-asset-view {\n position: relative;\n display: flex;\n flex: 1;\n flex-direction: column;\n min-width: 0;\n min-height: 0;\n overflow: hidden;\n}\n.cb-toolbar {\n position: relative;\n flex: 0 0 var(--fx-component-panel-header-height);\n gap: var(--fx-ref-space-6);\n min-width: 0;\n padding: 0 var(--fx-ref-space-8);\n}\n.cb-toolbar > .fx-panel-header__slot:nth-child(2) {\n flex: 1 1 auto;\n}\n.cb-toolbar-group {\n flex: 0 0 auto;\n}\n.cb-navigation-bar {\n flex: 1 1 auto;\n min-width: calc(var(--fx-ref-space-48) + var(--fx-ref-space-32));\n overflow: hidden;\n}\n.cb-address-slot {\n display: flex;\n flex: 1 1 auto;\n align-items: center;\n min-width: var(--fx-ref-space-32);\n height: var(--fx-component-control-height-compact);\n}\n.cb-address,\n.cb-address-input {\n width: 100%;\n height: var(--fx-component-control-height-compact);\n min-width: 0;\n box-sizing: border-box;\n border: var(--fx-border-width) solid var(--fx-color-border-control);\n border-radius: var(--fx-radius-control);\n background: var(--fx-color-surface-inset);\n color: var(--fx-color-text-secondary);\n}\n.cb-address {\n display: flex;\n align-items: center;\n padding: 0 var(--fx-ref-space-8);\n overflow: hidden;\n cursor: text;\n}\n.cb-address-crumb {\n display: flex;\n flex: 0 1 auto;\n align-items: center;\n min-width: 0;\n overflow: hidden;\n}\n.cb-root .cb-address:focus-visible,\n.cb-root .cb-address-input:focus,\n.cb-root .cb-address-input:focus-visible {\n outline: none;\n border-color: var(--fx-color-border-essential);\n}\n.cb-address-input {\n margin: 0;\n padding: 0 var(--fx-ref-space-8);\n font: inherit;\n color: var(--fx-color-text-primary);\n appearance: none;\n outline: none;\n}\n.cb-address-input::placeholder {\n color: var(--fx-color-text-muted);\n}\n.cb-crumb-segment {\n display: inline-flex;\n align-items: center;\n min-width: 0;\n color: var(--fx-color-text-muted);\n}\n.cb-crumb-item {\n min-width: 0;\n padding: var(--fx-ref-space-2) var(--fx-ref-space-4);\n border: 0;\n border-radius: var(--fx-ref-radius-4);\n background: transparent;\n color: var(--fx-color-text-muted);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n cursor: pointer;\n}\n.cb-crumb-item:hover {\n background: var(--fx-color-surface-hover);\n color: var(--fx-color-text-primary);\n}\n.cb-crumb-current {\n color: var(--fx-color-text-primary);\n font-weight: var(--fx-ref-font-weight-600);\n}\n.cb-crumb-chevron {\n display: inline-flex;\n align-items: center;\n flex-shrink: 0;\n color: var(--fx-color-text-muted);\n}\n.cb-crumb-chevron-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--fx-ref-space-16);\n height: var(--fx-component-control-height-compact);\n padding: 0;\n border: 0;\n border-radius: var(--fx-ref-radius-4);\n background: transparent;\n color: var(--fx-color-text-muted);\n cursor: pointer;\n appearance: none;\n}\n.cb-crumb-chevron-btn > svg {\n transition: transform 0.12s ease;\n}\n.cb-crumb-chevron-btn:hover {\n background: var(--fx-color-surface-hover);\n color: var(--fx-color-text-primary);\n}\n.cb-crumb-chevron-btn[aria-expanded=true] {\n color: var(--fx-color-text-primary);\n}\n.cb-crumb-chevron-btn[aria-expanded=true] > svg {\n transform: rotate(90deg);\n}\n.cb-crumb-chevron .fx-menu-dropdown__anchor {\n display: inline-flex;\n}\n.cb-crumb-menu .fx-menu {\n max-height: 320px;\n overflow-y: auto;\n}\n.cb-crumb-menu .fx-menu__item[data-active] {\n color: var(--fx-color-text-primary);\n font-weight: var(--fx-ref-font-weight-600);\n}\n.cb-content-body {\n display: flex;\n flex: 1;\n min-width: 0;\n min-height: 0;\n overflow: hidden;\n}\n.cb-grid-column {\n display: flex;\n flex: 1;\n flex-direction: column;\n min-width: 0;\n min-height: var(--cb-grid-min-height);\n overflow: hidden;\n}\n.cb-filter-bar {\n position: relative;\n flex: 0 0 var(--fx-component-panel-header-height);\n gap: var(--fx-ref-space-6);\n padding: var(--fx-ref-space-6) var(--fx-ref-space-8);\n border-bottom: var(--fx-border-width) solid var(--fx-color-border-subtle);\n}\n.cb-filter-bar .is-active {\n color: var(--fx-color-brand-text);\n background: var(--fx-color-brand-soft);\n}\n.cb-search-box {\n flex: 0 0 auto;\n width: var(--fx-component-menu-min-width);\n max-width: 100%;\n}\n.cb-search-box .fx-input {\n height: var(--fx-component-control-height-compact);\n}\n.cb-pop {\n position: absolute;\n z-index: var(--fx-layer-popover);\n}\n.cb-pop-create {\n top: var(--fx-component-panel-header-height);\n left: var(--fx-ref-space-8);\n}\n.cb-pop-import {\n top: var(--fx-component-panel-header-height);\n left: var(--cb-import-pop-left);\n}\n.cb-settings-menu {\n min-width: var(--fx-component-menu-min-width);\n padding: var(--fx-ref-space-6);\n border: var(--fx-border-width) solid var(--fx-color-border-default);\n border-radius: var(--fx-radius-popover);\n background: var(--fx-color-surface-raised);\n color: var(--fx-color-text-primary);\n box-shadow: var(--fx-shadow-floating);\n}\n.cb-settings-menu > strong {\n display: block;\n padding: var(--fx-ref-space-6) var(--fx-ref-space-8);\n color: var(--fx-color-text-muted);\n font-size: var(--fx-type-caption-font-size);\n}\n.cb-menu-title {\n display: inline-flex;\n align-items: center;\n gap: var(--fx-ref-space-6);\n}\n.cb-menu-icon-placeholder {\n width: var(--fx-component-control-icon-size);\n}\n.cb-layout-switch {\n padding: var(--fx-ref-space-2) var(--fx-ref-space-8) var(--fx-ref-space-6);\n}\n.cb-settings-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--fx-ref-space-12);\n padding: var(--fx-ref-space-8);\n}\n.cb-settings-label {\n color: var(--fx-color-text-secondary);\n white-space: nowrap;\n}\n.cb-settings-range {\n flex: 0 0 auto;\n}\n.cb-settings-switch-row {\n margin: 0 var(--fx-ref-space-2);\n}\n.cb-grid-view {\n position: relative;\n flex: 1;\n min-width: 0;\n min-height: 0;\n overflow-x: hidden;\n overflow-y: auto;\n}\n.cb-fe-grid {\n display: grid;\n width: 100%;\n max-width: 100%;\n min-width: 0;\n grid-template-columns: repeat(auto-fill, minmax(0, var(--cb-thumb, 88px)));\n grid-auto-rows: max-content;\n align-content: start;\n justify-content: start;\n gap: calc(var(--fx-ref-space-8) + var(--cb-group-stack));\n padding: var(--fx-ref-space-12);\n overflow-x: hidden;\n}\n.cb-grid-item {\n position: relative;\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n max-width: 100%;\n min-width: 0;\n overflow: hidden;\n padding: var(--fx-ref-space-4);\n border: var(--fx-border-width) solid transparent;\n border-radius: var(--fx-radius-control);\n background: var(--fx-color-surface-raised);\n color: var(--fx-color-text-secondary);\n cursor: pointer;\n}\n.cb-grid-folder {\n background: transparent;\n}\n.cb-grid-item:hover {\n background: var(--fx-color-surface-hover);\n}\n.cb-grid-item.sel {\n border-color: var(--fx-color-selection-indicator);\n background: var(--fx-color-selection-bg);\n box-shadow: 0 0 0 var(--fx-border-width) var(--fx-color-selection-indicator);\n}\n.cb-grid-item:focus-visible {\n outline: var(--fx-border-focus-width) solid var(--fx-color-border-focus);\n outline-offset: var(--fx-border-focus-offset);\n}\n.cb-grid-item.is-busy,\n.cb-details-row.is-busy {\n cursor: progress;\n}\n.cb-item-busy-veil {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background: color-mix(in srgb, var(--fx-color-surface-raised) 55%, transparent);\n pointer-events: none;\n}\n.cb-item-busy-veil .fx-spinner,\n.cb-item-busy-inline {\n width: 14px;\n height: 14px;\n flex: 0 0 14px;\n}\n.cb-grid-view.cb-layout-list .cb-item-busy-inline {\n margin-left: auto;\n}\n.cb-grid-thumb {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n aspect-ratio: 1;\n overflow: hidden;\n border-radius: var(--fx-radius-control);\n background: var(--fx-color-surface-inset);\n}\n.cb-grid-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n color: var(--fx-color-text-muted);\n}\n.cb-grid-icon svg {\n width: 46%;\n height: 46%;\n}\n.cb-folder-icon {\n color: var(--cb-folder-icon);\n}\n.cb-preview-ico.cb-folder-icon,\n.cb-preview-list-ico.cb-folder-icon,\n.cb-details-icon.cb-folder-icon,\n.cb-filter-option-icon.cb-folder-icon {\n color: var(--cb-folder-icon);\n}\n.cb-grid-thumb .cb-folder-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n}\n.cb-grid-thumb .cb-folder-icon svg {\n width: 86%;\n height: 86%;\n color: currentColor;\n}\n.cb-grid-label {\n width: 100%;\n margin-top: var(--fx-ref-space-4);\n overflow: hidden;\n text-align: center;\n}\n.cb-fe-label {\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n width: 100%;\n flex: 0 0 auto;\n height: calc(var(--cb-card-line) * 4);\n overflow: hidden;\n}\n.cb-fe-name {\n display: -webkit-box;\n margin-top: 0;\n overflow: hidden;\n color: var(--fx-color-text-primary);\n font-size: var(--fx-type-caption-font-size);\n line-height: var(--cb-card-line);\n text-align: center;\n white-space: normal;\n word-break: normal;\n overflow-wrap: anywhere;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 4;\n}\n.cb-fe-label.has-kind .cb-fe-name {\n min-height: calc(var(--cb-card-line) * 3);\n -webkit-line-clamp: 3;\n}\n.cb-card-meta,\n.cb-card-kind {\n width: 100%;\n flex: 0 0 auto;\n margin-top: auto;\n overflow: hidden;\n color: var(--fx-color-text-muted);\n font-size: var(--fx-type-caption-font-size);\n line-height: var(--cb-card-line);\n text-align: center;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.cb-fe-grid.cb-layout-list {\n grid-template-columns: minmax(0, 1fr);\n grid-auto-rows: auto;\n gap: var(--fx-ref-space-2);\n padding: var(--fx-ref-space-4) var(--fx-ref-space-6);\n overflow-x: hidden;\n}\n.cb-grid-view.cb-layout-list .cb-grid-item {\n flex-direction: row;\n align-items: center;\n width: 100%;\n min-width: 0;\n min-height: 40px;\n padding: var(--fx-ref-space-4) var(--fx-ref-space-8);\n gap: var(--fx-ref-space-8);\n overflow: hidden;\n box-shadow: none;\n}\n.cb-grid-view.cb-layout-list .cb-grid-item.sel {\n box-shadow: none;\n}\n.cb-grid-view.cb-layout-list .cb-grid-thumb {\n width: 32px;\n height: 32px;\n flex: 0 0 32px;\n aspect-ratio: auto;\n overflow: visible;\n}\n.cb-grid-view.cb-layout-list .cb-file-thumb {\n position: static;\n}\n.cb-grid-view.cb-layout-list .cb-grid-thumb svg {\n width: 20px;\n height: 20px;\n}\n.cb-layout-list .cb-fe-label {\n flex: 1 1 auto;\n min-width: 0;\n height: auto;\n overflow: hidden;\n flex-direction: row;\n align-items: center;\n text-align: left;\n}\n.cb-layout-list .cb-fe-name,\n.cb-layout-list .cb-fe-label.has-kind .cb-fe-name {\n display: block;\n flex: 1;\n min-width: 0;\n min-height: 0;\n overflow: hidden;\n text-align: left;\n white-space: nowrap;\n text-overflow: ellipsis;\n -webkit-line-clamp: unset;\n}\n.cb-layout-list .cb-card-meta,\n.cb-layout-list .cb-card-kind {\n margin-top: 0;\n}\n.cb-layout-list .cb-card-meta {\n display: none;\n}\n.cb-grid-view.cb-layout-list .cb-group-card:not(.cb-pack-expanded),\n.cb-grid-view.cb-layout-list .cb-group-card.sel:not(.cb-pack-expanded) {\n box-shadow: none;\n}\n.cb-grid-view.cb-layout-list .cb-group-member:not(.sel) {\n background: transparent;\n}\n.cb-grid-view.cb-layout-list .cb-group-member:not(.sel):hover {\n background: var(--fx-color-surface-hover);\n}\n.cb-grid-view.cb-layout-list .cb-group-card,\n.cb-grid-view.cb-layout-list .cb-pack-expanded {\n padding-right: calc(var(--fx-ref-space-8) + 44px);\n}\n.cb-grid-view.cb-layout-list .cb-group-badge {\n top: 50%;\n right: var(--fx-ref-space-8);\n bottom: auto;\n transform: translateY(-50%);\n}\n.cb-details-view {\n display: flex;\n flex: 1;\n flex-direction: column;\n min-height: 0;\n overflow: auto;\n padding: 0 var(--fx-ref-space-6) var(--fx-ref-space-8);\n --cb-details-cols: minmax(160px, 1fr) 160px 90px 130px;\n}\n.cb-details-header,\n.cb-details-row {\n display: grid;\n grid-template-columns: var(--cb-details-cols);\n align-items: center;\n}\n.cb-details-header {\n position: sticky;\n z-index: var(--fx-layer-sticky);\n top: 0;\n min-height: var(--fx-component-editor-row-height);\n border-bottom: var(--fx-border-width) solid var(--fx-color-border-default);\n background: var(--fx-color-surface-canvas);\n color: var(--fx-color-text-muted);\n font-size: var(--fx-type-caption-font-size);\n}\n.cb-details-th {\n display: flex;\n align-items: center;\n gap: var(--fx-ref-space-4);\n height: 100%;\n padding: var(--fx-ref-space-4) var(--fx-ref-space-8);\n border: 0;\n background: transparent;\n color: inherit;\n text-align: left;\n cursor: pointer;\n}\n.cb-details-th:hover {\n color: var(--fx-color-text-primary);\n}\n.cb-details-th.active,\n.cb-details-th[data-active=true] {\n color: var(--fx-color-brand-text);\n}\n.cb-details-sort-arrow {\n font-size: 9px;\n}\n.cb-details-body {\n display: flex;\n flex-direction: column;\n}\n.cb-details-row {\n position: relative;\n width: 100%;\n border-radius: var(--fx-ref-radius-4);\n color: var(--fx-color-text-secondary);\n cursor: pointer;\n}\n.cb-details-row:hover {\n background: var(--fx-color-surface-hover);\n}\n.cb-details-row.sel {\n background: var(--fx-color-selection-bg);\n box-shadow: inset var(--fx-border-focus-width) 0 0 var(--fx-color-selection-indicator);\n}\n.cb-details-row:focus-visible {\n outline: var(--fx-border-focus-width) solid var(--fx-color-border-focus);\n outline-offset: -2px;\n}\n.cb-details-cell {\n min-width: 0;\n padding: var(--fx-ref-space-4) var(--fx-ref-space-8);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.cb-details-name {\n display: flex;\n align-items: center;\n gap: var(--fx-ref-space-6);\n}\n.cb-details-icon {\n display: inline-flex;\n width: 16px;\n height: 16px;\n flex: 0 0 16px;\n}\n.cb-details-icon svg {\n width: 16px;\n height: 16px;\n}\n.cb-details-type,\n.cb-details-size,\n.cb-details-modified {\n color: var(--fx-color-text-muted);\n}\n.cb-empty {\n grid-column: 1 / -1;\n color: var(--fx-color-text-muted);\n}\n.cb-status {\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex: 0 0 var(--fx-component-editor-row-height);\n min-height: var(--fx-component-editor-row-height);\n padding: var(--fx-ref-space-4) var(--fx-ref-space-8);\n border-top: var(--fx-border-width) solid var(--fx-color-border-subtle);\n color: var(--fx-color-text-muted);\n font-size: var(--fx-type-caption-font-size);\n}\n.cb-file-thumb {\n position: relative;\n}\n.cb-group-card:not(.cb-pack-expanded) {\n box-shadow:\n 3px 3px 0 0 var(--fx-color-surface-raised),\n 3px 3px 0 1px var(--fx-color-border-subtle),\n 6px 6px 0 0 var(--fx-color-surface-raised),\n 6px 6px 0 1px var(--fx-color-border-subtle);\n}\n.cb-group-card.sel:not(.cb-pack-expanded) {\n box-shadow:\n 0 0 0 var(--fx-border-width) var(--fx-color-selection-indicator),\n 3px 3px 0 0 var(--fx-color-surface-raised),\n 3px 3px 0 1px var(--fx-color-border-subtle),\n 6px 6px 0 0 var(--fx-color-surface-raised),\n 6px 6px 0 1px var(--fx-color-border-subtle);\n}\n.cb-group-badge {\n position: absolute;\n right: 3px;\n bottom: 3px;\n z-index: 2;\n display: flex;\n align-items: center;\n gap: 3px;\n height: 22px;\n padding: 0 8px;\n border: 0;\n border-radius: 11px;\n background: color-mix(in srgb, var(--fx-color-surface-canvas) 62%, transparent);\n color: var(--fx-color-text-inverse);\n font-size: 11px;\n font-weight: var(--fx-ref-font-weight-600);\n cursor: pointer;\n}\n.cb-group-badge:hover {\n background: rgb(0 0 0 / 62%);\n color: #fff;\n}\n.cb-group-badge svg {\n width: 11px;\n height: 11px;\n transition: transform var(--fx-motion-hover) var(--fx-motion-ease);\n}\n.cb-group-backdrops {\n position: absolute;\n inset: 0;\n z-index: 0;\n pointer-events: none;\n}\n.cb-group-backdrop {\n position: absolute;\n background: rgb(0 0 0 / 10%);\n}\n.cb-group-member {\n z-index: 1;\n}\n.cb-group-badge.open svg {\n transform: rotate(180deg);\n}\n.cb-preview-panel {\n display: flex;\n flex: 0 0 var(--cb-preview-w, 280px);\n flex-direction: column;\n width: var(--cb-preview-w, 280px);\n min-width: 180px;\n max-width: 560px;\n min-height: 0;\n overflow: hidden;\n border-left: var(--fx-border-width) solid var(--fx-color-border-subtle);\n background: var(--fx-color-surface-canvas);\n}\n.cb-preview-head {\n display: flex;\n align-items: center;\n gap: var(--fx-ref-space-8);\n padding: var(--fx-ref-space-8) var(--fx-ref-space-8);\n border-bottom: var(--fx-border-width) solid var(--fx-color-border-subtle);\n flex-shrink: 0;\n}\n.cb-preview-mode-bar {\n display: flex;\n gap: var(--fx-ref-space-4);\n padding: var(--fx-ref-space-6) var(--fx-ref-space-8);\n border-bottom: var(--fx-border-width) solid var(--fx-color-border-subtle);\n flex-shrink: 0;\n}\n.cb-preview-mode-btn {\n flex: 1 1 0;\n min-width: 0;\n height: 24px;\n padding: 0 var(--fx-ref-space-8);\n overflow: hidden;\n border: var(--fx-border-width) solid var(--fx-color-border-subtle);\n border-radius: var(--fx-radius-control);\n background: transparent;\n color: var(--fx-color-text-muted);\n text-overflow: ellipsis;\n white-space: nowrap;\n cursor: pointer;\n}\n.cb-preview-mode-btn:hover {\n color: var(--fx-color-text-primary);\n background: var(--fx-color-surface-hover);\n}\n.cb-preview-mode-btn.is-active {\n color: var(--fx-color-text-primary);\n border-color: var(--fx-color-border-strong);\n background: var(--fx-color-surface-raised);\n}\n.cb-preview-ico,\n.cb-preview-list-ico {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex: 0 0 28px;\n width: 28px;\n height: 28px;\n border-radius: var(--fx-radius-control);\n background: var(--fx-color-surface-raised);\n color: var(--fx-color-text-muted);\n}\n.cb-preview-list-ico {\n flex-basis: 16px;\n width: 16px;\n height: 16px;\n background: transparent;\n}\n.cb-preview-title {\n flex: 1;\n min-width: 0;\n}\n.cb-preview-title .name {\n overflow: hidden;\n color: var(--fx-color-text-primary);\n font-weight: var(--fx-ref-font-weight-600);\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.cb-preview-title .meta {\n overflow: hidden;\n color: var(--fx-color-text-muted);\n font: var(--fx-type-code-font-weight) var(--fx-type-caption-font-size)/var(--fx-type-caption-line-height) var(--fx-type-code-font-family);\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.cb-preview-close {\n width: 24px;\n height: 24px;\n}\n.cb-preview-body {\n flex: 1;\n min-height: 0;\n overflow: auto;\n padding: var(--fx-ref-space-8);\n}\n.cb-preview-empty .cb-preview-body {\n display: flex;\n align-items: center;\n justify-content: center;\n text-align: center;\n color: var(--fx-color-text-muted);\n}\n.cb-preview-list,\n.cb-preview-asset-list {\n display: flex;\n flex-direction: column;\n gap: var(--fx-ref-space-4);\n}\n.cb-preview-list-item,\n.cb-preview-asset-row {\n display: flex;\n align-items: center;\n gap: var(--fx-ref-space-8);\n min-width: 0;\n padding: var(--fx-ref-space-4) var(--fx-ref-space-6);\n border-radius: var(--fx-radius-control);\n color: var(--fx-color-text-secondary);\n}\n.cb-preview-list-item:hover,\n.cb-preview-asset-row:hover {\n background: var(--fx-color-surface-hover);\n}\n.cb-preview-list-item > span:nth-of-type(2) {\n flex: 1 1 0;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.cb-preview-list-item .sub,\n.cb-preview-asset-row .guid,\n.cb-preview-asset-row .kind {\n color: var(--fx-color-text-muted);\n font: var(--fx-type-code-font-weight) var(--fx-type-caption-font-size)/var(--fx-type-caption-line-height) var(--fx-type-code-font-family);\n}\n.cb-preview-list-item .sub {\n flex: 0 1 38%;\n min-width: 0;\n margin-left: auto;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.cb-preview-asset-row > .cb-preview-asset-main {\n flex: 1 1 0;\n min-width: 0;\n}\n.cb-preview-asset-row > .cb-preview-asset-main > div {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.cb-preview-asset-row .kind {\n margin-left: 0;\n}\n.cb-preview-asset-row .guid {\n flex: 0 1 auto;\n max-width: 42%;\n min-width: 0;\n margin-left: auto;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.cb-preview-media {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--fx-ref-space-8);\n min-height: 0;\n}\n.cb-preview-image {\n display: block;\n max-width: 100%;\n max-height: min(360px, 50vh);\n object-fit: contain;\n border-radius: var(--fx-radius-control);\n background: var(--fx-color-surface-inset);\n}\n.cb-preview-audio,\n.cb-preview-video {\n width: 100%;\n max-width: 100%;\n}\n.cb-preview-video {\n max-height: min(360px, 50vh);\n border-radius: var(--fx-radius-control);\n background: #000;\n}\n.cb-preview-font-sample {\n margin: 0;\n color: var(--fx-color-text-primary);\n font-size: 1.35rem;\n line-height: 1.4;\n text-align: center;\n}\n.cb-preview-font-meta {\n margin: 0;\n max-width: 100%;\n overflow: hidden;\n color: var(--fx-color-text-muted);\n font: var(--fx-type-caption-font-size)/var(--fx-type-caption-line-height) var(--fx-type-code-font-family);\n text-align: center;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.cb-preview-asset-hero {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--fx-ref-space-16) 0 var(--fx-ref-space-8);\n}\n.cb-preview-hero-icon {\n color: var(--fx-color-text-muted);\n}\n.cb-preview-note {\n padding: var(--fx-ref-space-8) var(--fx-ref-space-8);\n overflow: hidden;\n border: var(--fx-border-width) solid var(--fx-color-border-subtle);\n border-radius: var(--fx-radius-control);\n background: var(--fx-color-surface-raised);\n color: var(--fx-color-text-muted);\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.cb-preview-source {\n margin: 0;\n padding: var(--fx-ref-space-8);\n overflow: auto;\n border: var(--fx-border-width) solid var(--fx-color-border-subtle);\n border-radius: var(--fx-radius-control);\n background: var(--fx-color-surface-inset);\n color: var(--fx-color-text-secondary);\n font: var(--fx-type-code-font-weight) var(--fx-type-code-font-size)/var(--fx-type-code-line-height) var(--fx-type-code-font-family);\n white-space: pre-wrap;\n}\n.cb-preview-code {\n display: flex;\n flex-direction: column;\n gap: var(--fx-ref-space-6);\n min-height: 0;\n}\n.cb-preview-code-head {\n display: flex;\n align-items: center;\n gap: var(--fx-ref-space-8);\n}\n.cb-preview-code-badge {\n padding: var(--fx-ref-space-2) var(--fx-ref-space-8);\n border-radius: var(--fx-radius-pill);\n background: var(--fx-color-surface-hover);\n color: var(--fx-color-text-muted);\n font: var(--fx-type-code-font-weight) var(--fx-type-caption-font-size)/var(--fx-type-caption-line-height) var(--fx-type-code-font-family);\n letter-spacing: 0.03em;\n text-transform: uppercase;\n}\n.cb-preview-code-hint {\n color: var(--fx-color-text-disabled);\n font-size: var(--fx-type-caption-font-size);\n}\n.cb-preview-code-plain,\n.cb-preview-code-shiki pre.shiki {\n margin: 0;\n white-space: pre-wrap;\n word-break: break-word;\n font: var(--fx-type-code-font-weight) var(--fx-type-code-font-size)/var(--fx-type-code-line-height) var(--fx-type-code-font-family);\n}\n.cb-preview-code-plain {\n color: var(--fx-color-text-secondary);\n}\n.cb-preview-code-shiki pre.shiki {\n background: transparent !important;\n}\n.cb-preview-code-shiki pre.shiki code {\n background: transparent;\n padding: 0;\n border-radius: 0;\n color: inherit;\n font-size: inherit;\n}\n.cb-filter-menu-body {\n min-width: 220px;\n padding: var(--fx-ref-space-4);\n border: var(--fx-border-width) solid var(--fx-color-border-default);\n border-radius: var(--fx-radius-popover);\n background: var(--fx-color-surface-raised);\n box-shadow: var(--fx-shadow-floating);\n}\n.cb-filter-section {\n padding: var(--fx-ref-space-6) var(--fx-ref-space-8) var(--fx-ref-space-4);\n color: var(--fx-color-text-muted);\n font-size: var(--fx-type-caption-font-size);\n font-weight: var(--fx-ref-font-weight-600);\n}\n.cb-filter-separator {\n height: var(--fx-border-width);\n margin: var(--fx-ref-space-4) 0;\n background: var(--fx-color-border-subtle);\n}\n.cb-filter-option {\n display: flex;\n align-items: center;\n gap: var(--fx-ref-space-8);\n width: 100%;\n min-height: var(--fx-component-editor-row-height);\n padding: var(--fx-ref-space-4) var(--fx-ref-space-8);\n border: 0;\n border-radius: var(--fx-radius-control);\n background: transparent;\n color: var(--fx-color-text-secondary);\n text-align: left;\n cursor: pointer;\n}\n.cb-filter-option:hover {\n background: var(--fx-color-surface-hover);\n color: var(--fx-color-text-primary);\n}\n.cb-filter-option:disabled {\n color: var(--fx-color-text-disabled);\n cursor: default;\n}\n.cb-filter-option-icon {\n flex: 0 0 14px;\n width: 14px;\n color: var(--fx-color-text-muted);\n}\n.cb-filter-check {\n flex: 0 0 var(--fx-component-choice-size);\n pointer-events: none;\n}\n.cb-filter-check.fx-choice {\n align-items: center;\n gap: 0;\n min-height: 0;\n margin: 0;\n}\n.cb-filter-check .fx-choice__text {\n display: none;\n}\n.cb-radio-menu {\n width: 14px;\n height: 14px;\n flex: 0 0 14px;\n border: var(--fx-border-width) solid var(--fx-color-border-control);\n border-radius: 999px;\n}\n.cb-radio-menu[data-checked=true] {\n border-color: var(--fx-color-choice-indicator);\n background:\n radial-gradient(\n circle at center,\n var(--fx-color-choice-indicator) 4px,\n transparent 5px);\n}\n@container (max-width: 660px) {\n .cb-toolbar-group .fx-button {\n width: var(--fx-component-control-height-compact);\n padding: 0;\n font-size: 0;\n }\n}\n';
2460
- if (typeof document !== "undefined" && !document.querySelector('style[data-forgeax-css="1ef84f0e3fb40317f76b77e1b83b84b7c994dc8c43c3bc38be5abb2446c7740b"]')) {
2625
+ var css2 = '/* packages/view-plugin-content-browser/src/ui/content-browser.css */\n.cb-root {\n --cb-layout-min-width: calc(var(--fx-component-panel-chat-min-width) + var(--fx-ref-space-48) + var(--fx-ref-space-32));\n --cb-source-width: calc(var(--fx-component-panel-config-min-width) - var(--fx-ref-space-48));\n --cb-source-min-width: calc(var(--fx-ref-space-48) * 2 + var(--fx-ref-space-32) + var(--fx-ref-space-12));\n --cb-resize-width: var(--fx-ref-space-6);\n --cb-resize-offset: calc(-1 * var(--fx-ref-space-2));\n --cb-grid-min-width: calc(var(--fx-ref-space-48) * 2 + var(--fx-ref-space-24));\n --cb-grid-min-height: calc(var(--fx-ref-space-48) * 2 + var(--fx-ref-space-32) + var(--fx-ref-space-12));\n --cb-thumb-default: calc(var(--fx-ref-space-48) + var(--fx-ref-space-32) + var(--fx-ref-space-8));\n --cb-import-pop-left: calc(var(--fx-component-navigation-rail-width) + var(--fx-ref-space-12));\n --cb-card-line: 13px;\n --cb-folder-icon: #c9a86a;\n --cb-group-stack: 6px;\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n min-width: var(--cb-layout-min-width);\n min-height: 0;\n overflow: hidden;\n background: var(--fx-color-surface-canvas);\n color: var(--fx-color-text-secondary);\n font: var(--fx-type-compact-font-weight) var(--fx-type-compact-font-size)/var(--fx-type-compact-line-height) var(--fx-type-compact-font-family);\n user-select: none;\n}\n.cb-root * {\n box-sizing: border-box;\n}\n.cb-root :where(input, textarea, .cb-address, .cb-address-input, .cb-preview-source, .cb-preview-code-plain, .cb-preview-code-shiki) {\n user-select: text;\n}\n.cb-root button,\n.cb-root input {\n font: inherit;\n}\n.cb-split {\n display: flex;\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n.cb-source-panel {\n flex: 0 0 var(--cb-src-w, var(--cb-source-width));\n width: var(--cb-src-w, var(--cb-source-width));\n min-width: var(--cb-source-min-width);\n overflow: auto;\n background: var(--fx-color-surface-sidebar);\n}\n.cb-resize-handle {\n position: relative;\n z-index: var(--fx-layer-sticky);\n flex: 0 0 var(--cb-resize-width);\n width: var(--cb-resize-width);\n margin: 0 var(--cb-resize-offset);\n cursor: col-resize;\n}\n.cb-resize-handle::after {\n content: "";\n position: absolute;\n inset: 0 auto 0 50%;\n width: var(--fx-border-width);\n background: var(--fx-color-border-subtle);\n}\n.cb-resize-handle:hover::after {\n background: var(--fx-color-border-focus);\n}\n.cb-source-tree {\n min-width: 0;\n padding: var(--fx-ref-space-4) 0;\n}\n.cb-source-group + .cb-source-group {\n margin-top: var(--fx-ref-space-2);\n}\n.cb-source-group-head,\n.cb-source-row {\n appearance: none;\n display: flex;\n align-items: center;\n width: 100%;\n min-width: 0;\n border: var(--fx-border-width) solid transparent;\n text-align: left;\n cursor: pointer;\n}\n.cb-source-group-head {\n gap: var(--fx-ref-space-4);\n padding: var(--fx-ref-space-4) var(--fx-ref-space-8);\n background: var(--fx-color-surface-raised);\n color: var(--fx-color-text-secondary);\n font-weight: var(--fx-ref-font-weight-600);\n}\n.cb-source-group-head:hover,\n.cb-source-row:hover {\n background: var(--fx-color-surface-hover);\n color: var(--fx-color-text-primary);\n}\n.cb-source-group-head.collapsed .cb-source-chev,\n.cb-source-chev.collapsed {\n transform: rotate(-90deg);\n}\n.cb-source-group-icon {\n flex: 0 0 auto;\n color: var(--fx-color-text-muted);\n}\n.cb-source-group-head .cb-folder-icon {\n color: var(--cb-folder-icon);\n}\n.cb-source-group-name,\n.cb-source-name {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.cb-source-group-body {\n padding: var(--fx-ref-space-2) 0 var(--fx-ref-space-4);\n}\n.cb-source-empty {\n padding: var(--fx-ref-space-4) var(--fx-ref-space-12) var(--fx-ref-space-4) var(--fx-ref-space-16);\n color: var(--fx-color-text-muted);\n font-size: var(--fx-type-caption-font-size);\n font-style: italic;\n}\n.cb-source-row {\n gap: var(--fx-ref-space-4);\n min-height: var(--fx-component-editor-row-height);\n padding-top: var(--fx-ref-space-4);\n padding-right: var(--fx-ref-space-12);\n padding-bottom: var(--fx-ref-space-4);\n background: transparent;\n color: var(--fx-color-text-secondary);\n}\n.cb-source-row.is-path:not(.is-sel) {\n background: color-mix(in srgb, var(--fx-color-surface-hover) 55%, transparent);\n color: var(--fx-color-text-primary);\n}\n.cb-source-group-head.is-sel,\n.cb-source-row.is-sel {\n background: var(--fx-color-selection-bg);\n color: var(--fx-color-selection-fg);\n box-shadow: inset var(--fx-border-focus-width) 0 0 var(--fx-color-selection-indicator);\n}\n.cb-source-row:focus-visible,\n.cb-source-group-head:focus-visible {\n outline: var(--fx-border-focus-width) solid var(--fx-color-border-focus);\n outline-offset: calc(-1 * var(--fx-border-focus-width));\n}\n.cb-source-chev {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--fx-component-choice-size);\n height: var(--fx-component-choice-size);\n flex: 0 0 var(--fx-component-choice-size);\n color: var(--fx-color-text-muted);\n transition: transform var(--fx-motion-hover) var(--fx-motion-ease);\n}\n.cb-source-chev.hidden {\n visibility: hidden;\n}\n.cb-source-icon {\n display: inline-flex;\n flex: 0 0 var(--fx-component-choice-size);\n color: var(--cb-folder-icon);\n}\n.cb-source-name {\n flex: 1;\n}\n.cb-source-fav-row {\n display: flex;\n align-items: stretch;\n width: 100%;\n min-width: 0;\n}\n.cb-source-fav-row .cb-source-row {\n flex: 1;\n width: auto;\n min-width: 0;\n padding-right: var(--fx-ref-space-4);\n background: transparent;\n box-shadow: none;\n}\n.cb-source-fav-row .cb-source-row:hover {\n background: transparent;\n}\n.cb-source-fav-row:hover {\n background: var(--fx-color-surface-hover);\n color: var(--fx-color-text-primary);\n}\n.cb-source-fav-row.is-path:not(.is-sel) {\n background: color-mix(in srgb, var(--fx-color-surface-hover) 55%, transparent);\n color: var(--fx-color-text-primary);\n}\n.cb-source-fav-row.is-sel {\n background: var(--fx-color-selection-bg);\n color: var(--fx-color-selection-fg);\n box-shadow: inset var(--fx-border-focus-width) 0 0 var(--fx-color-selection-indicator);\n}\n.cb-source-unfav {\n appearance: none;\n flex: 0 0 auto;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--fx-component-control-icon-hit-area-min);\n padding: 0;\n border: 0;\n background: transparent;\n color: var(--fx-color-status-warning-fg);\n cursor: pointer;\n}\n.cb-source-unfav:hover {\n color: var(--fx-color-text-primary);\n}\n.cb-asset-view {\n position: relative;\n display: flex;\n flex: 1;\n flex-direction: column;\n min-width: 0;\n min-height: 0;\n overflow: hidden;\n}\n.cb-toolbar {\n position: relative;\n flex: 0 0 var(--fx-component-panel-header-height);\n gap: var(--fx-ref-space-6);\n min-width: 0;\n padding: 0 var(--fx-ref-space-8);\n}\n.cb-toolbar > .fx-panel-header__slot:nth-child(2) {\n flex: 1 1 auto;\n}\n.cb-toolbar-group {\n flex: 0 0 auto;\n}\n.cb-navigation-bar {\n flex: 1 1 auto;\n min-width: calc(var(--fx-ref-space-48) + var(--fx-ref-space-32));\n overflow: hidden;\n}\n.cb-address-slot {\n display: flex;\n flex: 1 1 auto;\n align-items: center;\n min-width: var(--fx-ref-space-32);\n height: var(--fx-component-control-height-compact);\n}\n.cb-address,\n.cb-address-input {\n width: 100%;\n height: var(--fx-component-control-height-compact);\n min-width: 0;\n box-sizing: border-box;\n border: var(--fx-border-width) solid var(--fx-color-border-control);\n border-radius: var(--fx-radius-control);\n background: var(--fx-color-surface-inset);\n color: var(--fx-color-text-secondary);\n}\n.cb-address {\n display: flex;\n align-items: center;\n padding: 0 var(--fx-ref-space-8);\n overflow: hidden;\n cursor: text;\n}\n.cb-address-crumb {\n display: flex;\n flex: 0 1 auto;\n align-items: center;\n min-width: 0;\n overflow: hidden;\n}\n.cb-root .cb-address:focus-visible,\n.cb-root .cb-address-input:focus,\n.cb-root .cb-address-input:focus-visible {\n outline: none;\n border-color: var(--fx-color-border-essential);\n}\n.cb-address-input {\n margin: 0;\n padding: 0 var(--fx-ref-space-8);\n font: inherit;\n color: var(--fx-color-text-primary);\n appearance: none;\n outline: none;\n}\n.cb-address-input::placeholder {\n color: var(--fx-color-text-muted);\n}\n.cb-crumb-segment {\n display: inline-flex;\n align-items: center;\n min-width: 0;\n color: var(--fx-color-text-muted);\n}\n.cb-crumb-item {\n min-width: 0;\n padding: var(--fx-ref-space-2) var(--fx-ref-space-4);\n border: 0;\n border-radius: var(--fx-ref-radius-4);\n background: transparent;\n color: var(--fx-color-text-muted);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n cursor: pointer;\n}\n.cb-crumb-item:hover {\n background: var(--fx-color-surface-hover);\n color: var(--fx-color-text-primary);\n}\n.cb-crumb-current {\n color: var(--fx-color-text-primary);\n font-weight: var(--fx-ref-font-weight-600);\n}\n.cb-crumb-chevron {\n display: inline-flex;\n align-items: center;\n flex-shrink: 0;\n color: var(--fx-color-text-muted);\n}\n.cb-crumb-chevron-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--fx-ref-space-16);\n height: var(--fx-component-control-height-compact);\n padding: 0;\n border: 0;\n border-radius: var(--fx-ref-radius-4);\n background: transparent;\n color: var(--fx-color-text-muted);\n cursor: pointer;\n appearance: none;\n}\n.cb-crumb-chevron-btn > svg {\n transition: transform 0.12s ease;\n}\n.cb-crumb-chevron-btn:hover {\n background: var(--fx-color-surface-hover);\n color: var(--fx-color-text-primary);\n}\n.cb-crumb-chevron-btn[aria-expanded=true] {\n color: var(--fx-color-text-primary);\n}\n.cb-crumb-chevron-btn[aria-expanded=true] > svg {\n transform: rotate(90deg);\n}\n.cb-crumb-chevron .fx-menu-dropdown__anchor {\n display: inline-flex;\n}\n.cb-crumb-menu .fx-menu {\n max-height: 320px;\n overflow-y: auto;\n}\n.cb-crumb-menu .fx-menu__item[data-active] {\n color: var(--fx-color-text-primary);\n font-weight: var(--fx-ref-font-weight-600);\n}\n.cb-content-body {\n display: flex;\n flex: 1;\n min-width: 0;\n min-height: 0;\n overflow: hidden;\n}\n.cb-grid-column {\n display: flex;\n flex: 1;\n flex-direction: column;\n min-width: 0;\n min-height: var(--cb-grid-min-height);\n overflow: hidden;\n}\n.cb-filter-bar {\n position: relative;\n flex: 0 0 var(--fx-component-panel-header-height);\n gap: var(--fx-ref-space-6);\n padding: var(--fx-ref-space-6) var(--fx-ref-space-8);\n border-bottom: var(--fx-border-width) solid var(--fx-color-border-subtle);\n}\n.cb-filter-bar .is-active {\n color: var(--fx-color-brand-text);\n background: var(--fx-color-brand-soft);\n}\n.cb-search-box {\n flex: 0 0 auto;\n width: var(--fx-component-menu-min-width);\n max-width: 100%;\n}\n.cb-search-box .fx-input {\n height: var(--fx-component-control-height-compact);\n}\n.cb-pop {\n position: absolute;\n z-index: var(--fx-layer-popover);\n}\n.cb-pop-create {\n top: var(--fx-component-panel-header-height);\n left: var(--fx-ref-space-8);\n}\n.cb-pop-import {\n top: var(--fx-component-panel-header-height);\n left: var(--cb-import-pop-left);\n}\n.cb-settings-menu {\n min-width: var(--fx-component-menu-min-width);\n padding: var(--fx-ref-space-6);\n border: var(--fx-border-width) solid var(--fx-color-border-default);\n border-radius: var(--fx-radius-popover);\n background: var(--fx-color-surface-raised);\n color: var(--fx-color-text-primary);\n box-shadow: var(--fx-shadow-floating);\n}\n.cb-settings-menu > strong {\n display: block;\n padding: var(--fx-ref-space-6) var(--fx-ref-space-8);\n color: var(--fx-color-text-muted);\n font-size: var(--fx-type-caption-font-size);\n}\n.cb-menu-title {\n display: inline-flex;\n align-items: center;\n gap: var(--fx-ref-space-6);\n}\n.cb-menu-icon-placeholder {\n width: var(--fx-component-control-icon-size);\n}\n.cb-layout-switch {\n padding: var(--fx-ref-space-2) var(--fx-ref-space-8) var(--fx-ref-space-6);\n}\n.cb-settings-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--fx-ref-space-12);\n padding: var(--fx-ref-space-8);\n}\n.cb-settings-label {\n color: var(--fx-color-text-secondary);\n white-space: nowrap;\n}\n.cb-settings-range {\n flex: 0 0 auto;\n}\n.cb-settings-switch-row {\n margin: 0 var(--fx-ref-space-2);\n}\n.cb-grid-view {\n position: relative;\n flex: 1;\n min-width: 0;\n min-height: 0;\n overflow-x: hidden;\n overflow-y: auto;\n}\n.cb-fe-grid {\n display: grid;\n width: 100%;\n max-width: 100%;\n min-width: 0;\n grid-template-columns: repeat(auto-fill, minmax(0, var(--cb-thumb, 88px)));\n grid-auto-rows: max-content;\n align-content: start;\n justify-content: start;\n gap: calc(var(--fx-ref-space-8) + var(--cb-group-stack));\n padding: var(--fx-ref-space-12);\n overflow-x: hidden;\n}\n.cb-grid-item {\n position: relative;\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n max-width: 100%;\n min-width: 0;\n overflow: hidden;\n padding: var(--fx-ref-space-4);\n border: var(--fx-border-width) solid transparent;\n border-radius: var(--fx-radius-control);\n background: var(--fx-color-surface-raised);\n color: var(--fx-color-text-secondary);\n cursor: pointer;\n}\n.cb-grid-folder {\n background: transparent;\n}\n.cb-grid-item:hover {\n background: var(--fx-color-surface-hover);\n}\n.cb-grid-item.sel {\n border-color: var(--fx-color-selection-indicator);\n background: var(--fx-color-selection-bg);\n box-shadow: 0 0 0 var(--fx-border-width) var(--fx-color-selection-indicator);\n}\n.cb-grid-item:focus-visible {\n outline: var(--fx-border-focus-width) solid var(--fx-color-border-focus);\n outline-offset: var(--fx-border-focus-offset);\n}\n.cb-grid-item.is-busy,\n.cb-details-row.is-busy {\n cursor: progress;\n}\n.cb-item-busy-veil {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background: color-mix(in srgb, var(--fx-color-surface-raised) 55%, transparent);\n pointer-events: none;\n}\n.cb-item-busy-veil .fx-spinner,\n.cb-item-busy-inline {\n width: 14px;\n height: 14px;\n flex: 0 0 14px;\n}\n.cb-grid-view.cb-layout-list .cb-item-busy-inline {\n margin-left: auto;\n}\n.cb-grid-thumb {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n aspect-ratio: 1;\n overflow: hidden;\n border-radius: var(--fx-radius-control);\n background: var(--fx-color-surface-inset);\n}\n.cb-grid-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n color: var(--fx-color-text-muted);\n}\n.cb-grid-icon svg {\n width: 46%;\n height: 46%;\n}\n.cb-folder-icon {\n color: var(--cb-folder-icon);\n}\n.cb-preview-ico.cb-folder-icon,\n.cb-preview-list-ico.cb-folder-icon,\n.cb-details-icon.cb-folder-icon,\n.cb-filter-option-icon.cb-folder-icon {\n color: var(--cb-folder-icon);\n}\n.cb-grid-thumb .cb-folder-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n}\n.cb-grid-thumb .cb-folder-icon svg {\n width: 86%;\n height: 86%;\n color: currentColor;\n}\n.cb-grid-label {\n width: 100%;\n margin-top: var(--fx-ref-space-4);\n overflow: hidden;\n text-align: center;\n}\n.cb-fe-label {\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n width: 100%;\n flex: 0 0 auto;\n height: calc(var(--cb-card-line) * 4);\n overflow: hidden;\n}\n.cb-fe-name {\n display: -webkit-box;\n margin-top: 0;\n overflow: hidden;\n color: var(--fx-color-text-primary);\n font-size: var(--fx-type-caption-font-size);\n line-height: var(--cb-card-line);\n text-align: center;\n white-space: normal;\n word-break: normal;\n overflow-wrap: anywhere;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 4;\n}\n.cb-fe-label.has-kind .cb-fe-name {\n min-height: calc(var(--cb-card-line) * 3);\n -webkit-line-clamp: 3;\n}\n.cb-card-meta,\n.cb-card-kind {\n width: 100%;\n flex: 0 0 auto;\n margin-top: auto;\n overflow: hidden;\n color: var(--fx-color-text-muted);\n font-size: var(--fx-type-caption-font-size);\n line-height: var(--cb-card-line);\n text-align: center;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.cb-fe-grid.cb-layout-list {\n grid-template-columns: minmax(0, 1fr);\n grid-auto-rows: auto;\n gap: var(--fx-ref-space-2);\n padding: var(--fx-ref-space-4) var(--fx-ref-space-6);\n overflow-x: hidden;\n}\n.cb-grid-view.cb-layout-list .cb-grid-item {\n flex-direction: row;\n align-items: center;\n width: 100%;\n min-width: 0;\n min-height: 40px;\n padding: var(--fx-ref-space-4) var(--fx-ref-space-8);\n gap: var(--fx-ref-space-8);\n overflow: hidden;\n box-shadow: none;\n}\n.cb-grid-view.cb-layout-list .cb-grid-item.sel {\n box-shadow: none;\n}\n.cb-grid-view.cb-layout-list .cb-grid-thumb {\n width: 32px;\n height: 32px;\n flex: 0 0 32px;\n aspect-ratio: auto;\n overflow: visible;\n}\n.cb-grid-view.cb-layout-list .cb-file-thumb {\n position: static;\n}\n.cb-grid-view.cb-layout-list .cb-grid-thumb svg {\n width: 20px;\n height: 20px;\n}\n.cb-layout-list .cb-fe-label {\n flex: 1 1 auto;\n min-width: 0;\n height: auto;\n overflow: hidden;\n flex-direction: row;\n align-items: center;\n text-align: left;\n}\n.cb-layout-list .cb-fe-name,\n.cb-layout-list .cb-fe-label.has-kind .cb-fe-name {\n display: block;\n flex: 1;\n min-width: 0;\n min-height: 0;\n overflow: hidden;\n text-align: left;\n white-space: nowrap;\n text-overflow: ellipsis;\n -webkit-line-clamp: unset;\n}\n.cb-layout-list .cb-card-meta,\n.cb-layout-list .cb-card-kind {\n margin-top: 0;\n}\n.cb-layout-list .cb-card-meta {\n display: none;\n}\n.cb-grid-view.cb-layout-list .cb-group-card:not(.cb-pack-expanded),\n.cb-grid-view.cb-layout-list .cb-group-card.sel:not(.cb-pack-expanded) {\n box-shadow: none;\n}\n.cb-grid-view.cb-layout-list .cb-group-member:not(.sel) {\n background: transparent;\n}\n.cb-grid-view.cb-layout-list .cb-group-member:not(.sel):hover {\n background: var(--fx-color-surface-hover);\n}\n.cb-grid-view.cb-layout-list .cb-group-card,\n.cb-grid-view.cb-layout-list .cb-pack-expanded {\n padding-right: calc(var(--fx-ref-space-8) + 44px);\n}\n.cb-grid-view.cb-layout-list .cb-group-badge {\n top: 50%;\n right: var(--fx-ref-space-8);\n bottom: auto;\n transform: translateY(-50%);\n}\n.cb-details-view {\n display: flex;\n flex: 1;\n flex-direction: column;\n min-height: 0;\n overflow: auto;\n padding: 0 var(--fx-ref-space-6) var(--fx-ref-space-8);\n --cb-details-cols: minmax(160px, 1fr) 160px 90px 130px;\n}\n.cb-details-header,\n.cb-details-row {\n display: grid;\n grid-template-columns: var(--cb-details-cols);\n align-items: center;\n}\n.cb-details-header {\n position: sticky;\n z-index: var(--fx-layer-sticky);\n top: 0;\n min-height: var(--fx-component-editor-row-height);\n border-bottom: var(--fx-border-width) solid var(--fx-color-border-default);\n background: var(--fx-color-surface-canvas);\n color: var(--fx-color-text-muted);\n font-size: var(--fx-type-caption-font-size);\n}\n.cb-details-th {\n display: flex;\n align-items: center;\n gap: var(--fx-ref-space-4);\n height: 100%;\n padding: var(--fx-ref-space-4) var(--fx-ref-space-8);\n border: 0;\n background: transparent;\n color: inherit;\n text-align: left;\n cursor: pointer;\n}\n.cb-details-th:hover {\n color: var(--fx-color-text-primary);\n}\n.cb-details-th.active,\n.cb-details-th[data-active=true] {\n color: var(--fx-color-brand-text);\n}\n.cb-details-sort-arrow {\n font-size: 9px;\n}\n.cb-details-body {\n display: flex;\n flex-direction: column;\n}\n.cb-details-row {\n position: relative;\n width: 100%;\n border-radius: var(--fx-ref-radius-4);\n color: var(--fx-color-text-secondary);\n cursor: pointer;\n}\n.cb-details-row:hover {\n background: var(--fx-color-surface-hover);\n}\n.cb-details-row.sel {\n background: var(--fx-color-selection-bg);\n box-shadow: inset var(--fx-border-focus-width) 0 0 var(--fx-color-selection-indicator);\n}\n.cb-details-row:focus-visible {\n outline: var(--fx-border-focus-width) solid var(--fx-color-border-focus);\n outline-offset: -2px;\n}\n.cb-details-cell {\n min-width: 0;\n padding: var(--fx-ref-space-4) var(--fx-ref-space-8);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.cb-details-name {\n display: flex;\n align-items: center;\n gap: var(--fx-ref-space-6);\n}\n.cb-details-icon {\n display: inline-flex;\n width: 16px;\n height: 16px;\n flex: 0 0 16px;\n}\n.cb-details-icon svg {\n width: 16px;\n height: 16px;\n}\n.cb-details-type,\n.cb-details-size,\n.cb-details-modified {\n color: var(--fx-color-text-muted);\n}\n.cb-empty {\n grid-column: 1 / -1;\n color: var(--fx-color-text-muted);\n}\n.cb-status {\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex: 0 0 var(--fx-component-editor-row-height);\n min-height: var(--fx-component-editor-row-height);\n padding: var(--fx-ref-space-4) var(--fx-ref-space-8);\n border-top: var(--fx-border-width) solid var(--fx-color-border-subtle);\n color: var(--fx-color-text-muted);\n font-size: var(--fx-type-caption-font-size);\n}\n.cb-file-thumb {\n position: relative;\n}\n.cb-group-card:not(.cb-pack-expanded) {\n box-shadow:\n 3px 3px 0 0 var(--fx-color-surface-raised),\n 3px 3px 0 1px var(--fx-color-border-subtle),\n 6px 6px 0 0 var(--fx-color-surface-raised),\n 6px 6px 0 1px var(--fx-color-border-subtle);\n}\n.cb-group-card.sel:not(.cb-pack-expanded) {\n box-shadow:\n 0 0 0 var(--fx-border-width) var(--fx-color-selection-indicator),\n 3px 3px 0 0 var(--fx-color-surface-raised),\n 3px 3px 0 1px var(--fx-color-border-subtle),\n 6px 6px 0 0 var(--fx-color-surface-raised),\n 6px 6px 0 1px var(--fx-color-border-subtle);\n}\n.cb-group-badge {\n position: absolute;\n right: 3px;\n bottom: 3px;\n z-index: 2;\n display: flex;\n align-items: center;\n gap: 3px;\n height: 22px;\n padding: 0 8px;\n border: 0;\n border-radius: 11px;\n background: color-mix(in srgb, var(--fx-color-surface-canvas) 62%, transparent);\n color: var(--fx-color-text-inverse);\n font-size: 11px;\n font-weight: var(--fx-ref-font-weight-600);\n cursor: pointer;\n}\n.cb-group-badge:hover {\n background: rgb(0 0 0 / 62%);\n color: #fff;\n}\n.cb-group-badge svg {\n width: 11px;\n height: 11px;\n transition: transform var(--fx-motion-hover) var(--fx-motion-ease);\n}\n.cb-group-backdrops {\n position: absolute;\n inset: 0;\n z-index: 0;\n pointer-events: none;\n}\n.cb-group-backdrop {\n position: absolute;\n background: rgb(0 0 0 / 10%);\n}\n.cb-group-member {\n z-index: 1;\n}\n.cb-group-badge.open svg {\n transform: rotate(180deg);\n}\n.cb-preview-panel {\n display: flex;\n flex: 0 0 var(--cb-preview-w, 280px);\n flex-direction: column;\n width: var(--cb-preview-w, 280px);\n min-width: 180px;\n max-width: 560px;\n min-height: 0;\n overflow: hidden;\n border-left: var(--fx-border-width) solid var(--fx-color-border-subtle);\n background: var(--fx-color-surface-canvas);\n}\n.cb-preview-head {\n display: flex;\n align-items: center;\n gap: var(--fx-ref-space-8);\n padding: var(--fx-ref-space-8) var(--fx-ref-space-8);\n border-bottom: var(--fx-border-width) solid var(--fx-color-border-subtle);\n flex-shrink: 0;\n}\n.cb-preview-mode-bar {\n display: flex;\n gap: var(--fx-ref-space-4);\n padding: var(--fx-ref-space-6) var(--fx-ref-space-8);\n border-bottom: var(--fx-border-width) solid var(--fx-color-border-subtle);\n flex-shrink: 0;\n}\n.cb-preview-mode-btn {\n flex: 1 1 0;\n min-width: 0;\n height: 24px;\n padding: 0 var(--fx-ref-space-8);\n overflow: hidden;\n border: var(--fx-border-width) solid var(--fx-color-border-subtle);\n border-radius: var(--fx-radius-control);\n background: transparent;\n color: var(--fx-color-text-muted);\n text-overflow: ellipsis;\n white-space: nowrap;\n cursor: pointer;\n}\n.cb-preview-mode-btn:hover {\n color: var(--fx-color-text-primary);\n background: var(--fx-color-surface-hover);\n}\n.cb-preview-mode-btn.is-active {\n color: var(--fx-color-text-primary);\n border-color: var(--fx-color-border-strong);\n background: var(--fx-color-surface-raised);\n}\n.cb-preview-ico,\n.cb-preview-list-ico {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex: 0 0 28px;\n width: 28px;\n height: 28px;\n border-radius: var(--fx-radius-control);\n background: var(--fx-color-surface-raised);\n color: var(--fx-color-text-muted);\n}\n.cb-preview-list-ico {\n flex-basis: 16px;\n width: 16px;\n height: 16px;\n background: transparent;\n}\n.cb-preview-title {\n flex: 1;\n min-width: 0;\n}\n.cb-preview-title .name {\n overflow: hidden;\n color: var(--fx-color-text-primary);\n font-weight: var(--fx-ref-font-weight-600);\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.cb-preview-title .meta {\n overflow: hidden;\n color: var(--fx-color-text-muted);\n font: var(--fx-type-code-font-weight) var(--fx-type-caption-font-size)/var(--fx-type-caption-line-height) var(--fx-type-code-font-family);\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.cb-preview-close {\n width: 24px;\n height: 24px;\n}\n.cb-preview-body {\n flex: 1;\n min-height: 0;\n overflow: auto;\n padding: var(--fx-ref-space-8);\n}\n.cb-preview-empty .cb-preview-body {\n display: flex;\n align-items: center;\n justify-content: center;\n text-align: center;\n color: var(--fx-color-text-muted);\n}\n.cb-preview-list,\n.cb-preview-asset-list {\n display: flex;\n flex-direction: column;\n gap: var(--fx-ref-space-4);\n}\n.cb-preview-list-item,\n.cb-preview-asset-row {\n display: flex;\n align-items: center;\n gap: var(--fx-ref-space-8);\n min-width: 0;\n padding: var(--fx-ref-space-4) var(--fx-ref-space-6);\n border-radius: var(--fx-radius-control);\n color: var(--fx-color-text-secondary);\n}\n.cb-preview-list-item:hover,\n.cb-preview-asset-row:hover {\n background: var(--fx-color-surface-hover);\n}\n.cb-preview-asset-action {\n width: 100%;\n border: 0;\n background: transparent;\n font: inherit;\n text-align: left;\n cursor: pointer;\n}\n.cb-preview-asset-action:disabled {\n cursor: default;\n}\n.cb-preview-list-item > span:nth-of-type(2) {\n flex: 1 1 0;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.cb-preview-list-item .sub,\n.cb-preview-asset-row .guid,\n.cb-preview-asset-row .kind {\n color: var(--fx-color-text-muted);\n font: var(--fx-type-code-font-weight) var(--fx-type-caption-font-size)/var(--fx-type-caption-line-height) var(--fx-type-code-font-family);\n}\n.cb-preview-list-item .sub {\n flex: 0 1 38%;\n min-width: 0;\n margin-left: auto;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.cb-preview-asset-row > .cb-preview-asset-main {\n flex: 1 1 0;\n min-width: 0;\n}\n.cb-preview-asset-row > .cb-preview-asset-main > div {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.cb-preview-asset-row .kind {\n margin-left: 0;\n}\n.cb-preview-asset-row .guid {\n flex: 0 1 auto;\n max-width: 42%;\n min-width: 0;\n margin-left: auto;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.cb-preview-media {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--fx-ref-space-8);\n min-height: 0;\n}\n.cb-preview-image {\n display: block;\n max-width: 100%;\n max-height: min(360px, 50vh);\n object-fit: contain;\n border-radius: var(--fx-radius-control);\n background: var(--fx-color-surface-inset);\n}\n.cb-preview-audio,\n.cb-preview-video {\n width: 100%;\n max-width: 100%;\n}\n.cb-preview-video {\n max-height: min(360px, 50vh);\n border-radius: var(--fx-radius-control);\n background: #000;\n}\n.cb-preview-font-sample {\n margin: 0;\n color: var(--fx-color-text-primary);\n font-size: 1.35rem;\n line-height: 1.4;\n text-align: center;\n}\n.cb-preview-font-meta {\n margin: 0;\n max-width: 100%;\n overflow: hidden;\n color: var(--fx-color-text-muted);\n font: var(--fx-type-caption-font-size)/var(--fx-type-caption-line-height) var(--fx-type-code-font-family);\n text-align: center;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.cb-preview-asset-hero {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--fx-ref-space-16) 0 var(--fx-ref-space-8);\n}\n.cb-preview-hero-icon {\n color: var(--fx-color-text-muted);\n}\n.cb-preview-note {\n padding: var(--fx-ref-space-8) var(--fx-ref-space-8);\n overflow: hidden;\n border: var(--fx-border-width) solid var(--fx-color-border-subtle);\n border-radius: var(--fx-radius-control);\n background: var(--fx-color-surface-raised);\n color: var(--fx-color-text-muted);\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.cb-preview-source {\n margin: 0;\n padding: var(--fx-ref-space-8);\n overflow: auto;\n border: var(--fx-border-width) solid var(--fx-color-border-subtle);\n border-radius: var(--fx-radius-control);\n background: var(--fx-color-surface-inset);\n color: var(--fx-color-text-secondary);\n font: var(--fx-type-code-font-weight) var(--fx-type-code-font-size)/var(--fx-type-code-line-height) var(--fx-type-code-font-family);\n white-space: pre-wrap;\n}\n.cb-preview-code {\n display: flex;\n flex-direction: column;\n gap: var(--fx-ref-space-6);\n min-height: 0;\n}\n.cb-preview-code-head {\n display: flex;\n align-items: center;\n gap: var(--fx-ref-space-8);\n}\n.cb-preview-code-badge {\n padding: var(--fx-ref-space-2) var(--fx-ref-space-8);\n border-radius: var(--fx-radius-pill);\n background: var(--fx-color-surface-hover);\n color: var(--fx-color-text-muted);\n font: var(--fx-type-code-font-weight) var(--fx-type-caption-font-size)/var(--fx-type-caption-line-height) var(--fx-type-code-font-family);\n letter-spacing: 0.03em;\n text-transform: uppercase;\n}\n.cb-preview-code-hint {\n color: var(--fx-color-text-disabled);\n font-size: var(--fx-type-caption-font-size);\n}\n.cb-preview-code-plain,\n.cb-preview-code-shiki pre.shiki {\n margin: 0;\n white-space: pre-wrap;\n word-break: break-word;\n font: var(--fx-type-code-font-weight) var(--fx-type-code-font-size)/var(--fx-type-code-line-height) var(--fx-type-code-font-family);\n}\n.cb-preview-code-plain {\n color: var(--fx-color-text-secondary);\n}\n.cb-preview-code-shiki pre.shiki {\n background: transparent !important;\n}\n.cb-preview-code-shiki pre.shiki code {\n background: transparent;\n padding: 0;\n border-radius: 0;\n color: inherit;\n font-size: inherit;\n}\n.cb-filter-menu-body {\n min-width: 220px;\n padding: var(--fx-ref-space-4);\n border: var(--fx-border-width) solid var(--fx-color-border-default);\n border-radius: var(--fx-radius-popover);\n background: var(--fx-color-surface-raised);\n box-shadow: var(--fx-shadow-floating);\n}\n.cb-filter-section {\n padding: var(--fx-ref-space-6) var(--fx-ref-space-8) var(--fx-ref-space-4);\n color: var(--fx-color-text-muted);\n font-size: var(--fx-type-caption-font-size);\n font-weight: var(--fx-ref-font-weight-600);\n}\n.cb-filter-separator {\n height: var(--fx-border-width);\n margin: var(--fx-ref-space-4) 0;\n background: var(--fx-color-border-subtle);\n}\n.cb-filter-option {\n display: flex;\n align-items: center;\n gap: var(--fx-ref-space-8);\n width: 100%;\n min-height: var(--fx-component-editor-row-height);\n padding: var(--fx-ref-space-4) var(--fx-ref-space-8);\n border: 0;\n border-radius: var(--fx-radius-control);\n background: transparent;\n color: var(--fx-color-text-secondary);\n text-align: left;\n cursor: pointer;\n}\n.cb-filter-option:hover {\n background: var(--fx-color-surface-hover);\n color: var(--fx-color-text-primary);\n}\n.cb-filter-option:disabled {\n color: var(--fx-color-text-disabled);\n cursor: default;\n}\n.cb-filter-option-icon {\n flex: 0 0 14px;\n width: 14px;\n color: var(--fx-color-text-muted);\n}\n.cb-filter-check {\n flex: 0 0 var(--fx-component-choice-size);\n pointer-events: none;\n}\n.cb-filter-check.fx-choice {\n align-items: center;\n gap: 0;\n min-height: 0;\n margin: 0;\n}\n.cb-filter-check .fx-choice__text {\n display: none;\n}\n.cb-radio-menu {\n width: 14px;\n height: 14px;\n flex: 0 0 14px;\n border: var(--fx-border-width) solid var(--fx-color-border-control);\n border-radius: 999px;\n}\n.cb-radio-menu[data-checked=true] {\n border-color: var(--fx-color-choice-indicator);\n background:\n radial-gradient(\n circle at center,\n var(--fx-color-choice-indicator) 4px,\n transparent 5px);\n}\n@container (max-width: 660px) {\n .cb-toolbar-group .fx-button {\n width: var(--fx-component-control-height-compact);\n padding: 0;\n font-size: 0;\n }\n}\n';
2626
+ if (typeof document !== "undefined" && !document.querySelector('style[data-forgeax-css="f8536512d1ab898e14c4d55ccd55b2be4ec64286bffba06434440b4d40f152be"]')) {
2461
2627
  const style = document.createElement("style");
2462
- style.dataset.forgeaxCss = "1ef84f0e3fb40317f76b77e1b83b84b7c994dc8c43c3bc38be5abb2446c7740b";
2628
+ style.dataset.forgeaxCss = "f8536512d1ab898e14c4d55ccd55b2be4ec64286bffba06434440b4d40f152be";
2463
2629
  style.textContent = css2;
2464
2630
  document.head.append(style);
2465
2631
  }
@@ -2473,7 +2639,8 @@ async function mountContentBrowserPanel(props) {
2473
2639
  /* @__PURE__ */ jsx11(OverlayRootProvider, { root: props.overlayRoot ?? props.mountElement, children: /* @__PURE__ */ jsx11(
2474
2640
  ContentBrowserPanel,
2475
2641
  {
2476
- client: props.client
2642
+ client: props.client,
2643
+ revealPanel: props.revealPanel
2477
2644
  }
2478
2645
  ) })
2479
2646
  );
@@ -2483,4 +2650,4 @@ async function mountContentBrowserPanel(props) {
2483
2650
  export {
2484
2651
  mountContentBrowserPanel
2485
2652
  };
2486
- //# sourceMappingURL=chunk-VKNIYV2W.mjs.map
2653
+ //# sourceMappingURL=chunk-RYYKMDNI.mjs.map