@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.
- package/README.md +67 -9
- package/dist/build-revision.json +1 -1
- package/dist/modules/backend.mjs +34 -34
- package/dist/modules/browser.mjs +55 -49
- package/dist/modules/chunks/{chunk-EWSCJF77.mjs → chunk-2CMCY54A.mjs} +2 -2
- package/dist/modules/chunks/{chunk-M6S5YA6X.mjs → chunk-2RUKPDIE.mjs} +4 -4
- package/dist/modules/chunks/{chunk-M6S5YA6X.mjs.map → chunk-2RUKPDIE.mjs.map} +1 -1
- package/dist/modules/chunks/{chunk-DWT3TA6M.mjs → chunk-3FBX3P3H.mjs} +9 -8
- package/dist/modules/chunks/chunk-3FBX3P3H.mjs.map +7 -0
- package/dist/modules/chunks/{chunk-6KM24NH6.mjs → chunk-3Y5WN22T.mjs} +3 -3
- package/dist/modules/chunks/chunk-3Y5WN22T.mjs.map +7 -0
- package/dist/modules/chunks/{chunk-YFQGSDK3.mjs → chunk-45WL24XN.mjs} +2 -2
- package/dist/modules/chunks/{chunk-FMCHH5R4.mjs → chunk-4FYKRL46.mjs} +3 -3
- package/dist/modules/chunks/{chunk-VW2ZF3P4.mjs → chunk-4MJHVZMB.mjs} +6 -6
- package/dist/modules/chunks/{chunk-XQYF2P6M.mjs → chunk-5HVXQEO3.mjs} +7 -7
- package/dist/modules/chunks/{chunk-XMP4THLF.mjs → chunk-66LM6NO6.mjs} +4 -4
- package/dist/modules/chunks/{chunk-P4UPH74B.mjs → chunk-6C4OCCYB.mjs} +12 -12
- package/dist/modules/chunks/{chunk-P4UPH74B.mjs.map → chunk-6C4OCCYB.mjs.map} +1 -1
- package/dist/modules/chunks/{chunk-ZGOGO7SS.mjs → chunk-6J27SWMY.mjs} +1 -1
- package/dist/modules/chunks/{chunk-JK7K7RG3.mjs → chunk-6VK7HB4X.mjs} +4 -4
- package/dist/modules/chunks/{chunk-HRKW766Y.mjs → chunk-6WZZ7TIC.mjs} +2 -2
- package/dist/modules/chunks/{chunk-FICPCJKR.mjs → chunk-7DFCIN3T.mjs} +3 -3
- package/dist/modules/chunks/{chunk-FICPCJKR.mjs.map → chunk-7DFCIN3T.mjs.map} +1 -1
- package/dist/modules/chunks/{chunk-U64FRQKP.mjs → chunk-7MWZK7HS.mjs} +3 -3
- package/dist/modules/chunks/{chunk-F5RLQAPN.mjs → chunk-A7OGXJAV.mjs} +3 -3
- package/dist/modules/chunks/{chunk-QUFVUMSY.mjs → chunk-AUINYWZP.mjs} +2 -2
- package/dist/modules/chunks/{chunk-PZIAKZJC.mjs → chunk-B24VYGHV.mjs} +3 -3
- package/dist/modules/chunks/{chunk-SRYQLFBV.mjs → chunk-BIUWJROZ.mjs} +3 -3
- package/dist/modules/chunks/{chunk-SRYQLFBV.mjs.map → chunk-BIUWJROZ.mjs.map} +2 -2
- package/dist/modules/chunks/{chunk-X4NNZ5X6.mjs → chunk-C2AMOM7H.mjs} +3 -3
- package/dist/modules/chunks/{chunk-IZAHIOFU.mjs → chunk-C3WVSJZF.mjs} +6 -6
- package/dist/modules/chunks/{chunk-2Z5KEV6L.mjs → chunk-CAXCOZ7Y.mjs} +3 -3
- package/dist/modules/chunks/{chunk-HWZCLROY.mjs → chunk-CN6YN4HP.mjs} +251 -45
- package/dist/modules/chunks/chunk-CN6YN4HP.mjs.map +7 -0
- package/dist/modules/chunks/{chunk-B6QUJ33G.mjs → chunk-CXFQME65.mjs} +3 -3
- package/dist/modules/chunks/{chunk-IJPWKKIU.mjs → chunk-CYOLEAAY.mjs} +14 -13
- package/dist/modules/chunks/chunk-CYOLEAAY.mjs.map +7 -0
- package/dist/modules/chunks/{chunk-U6UMATPV.mjs → chunk-CYU3WWN6.mjs} +3 -3
- package/dist/modules/chunks/{chunk-AGVLPYVE.mjs → chunk-D2LZIQE2.mjs} +2 -2
- package/dist/modules/chunks/{chunk-5YTMN435.mjs → chunk-DC5JP46Y.mjs} +13 -3
- package/dist/modules/chunks/chunk-DC5JP46Y.mjs.map +7 -0
- package/dist/modules/chunks/{chunk-YNHEYXDG.mjs → chunk-DOU4MNMQ.mjs} +3 -3
- package/dist/modules/chunks/{chunk-ZIDEETK4.mjs → chunk-E4G4HDOC.mjs} +3 -3
- package/dist/modules/chunks/{chunk-ZHO2G4JR.mjs → chunk-EZAJ66NW.mjs} +3 -3
- package/dist/modules/chunks/{chunk-APD2EWSZ.mjs → chunk-FIWL6TQS.mjs} +2 -2
- package/dist/modules/chunks/{chunk-U5J7OTEB.mjs → chunk-FSSARTVM.mjs} +3 -3
- package/dist/modules/chunks/{chunk-47RJSHLM.mjs → chunk-FXXPWAXM.mjs} +3 -3
- package/dist/modules/chunks/{chunk-D2RCKG7Q.mjs → chunk-G2QCXN56.mjs} +6 -6
- package/dist/modules/chunks/{chunk-4T3D67CS.mjs → chunk-GRDCA6LD.mjs} +8 -8
- package/dist/modules/chunks/{chunk-4T3D67CS.mjs.map → chunk-GRDCA6LD.mjs.map} +1 -1
- package/dist/modules/chunks/{chunk-WVU3CQ62.mjs → chunk-GUVUL6D2.mjs} +3 -3
- package/dist/modules/chunks/{chunk-YLCJNKIW.mjs → chunk-I32EONBF.mjs} +70 -30
- package/dist/modules/chunks/chunk-I32EONBF.mjs.map +7 -0
- package/dist/modules/chunks/{chunk-E3PJGTLI.mjs → chunk-IGIELQZ2.mjs} +5 -5
- package/dist/modules/chunks/{chunk-5PHAXNFO.mjs → chunk-IMDR26Y3.mjs} +3 -3
- package/dist/modules/chunks/{chunk-55F55BQY.mjs → chunk-JVOHFCI4.mjs} +3 -3
- package/dist/modules/chunks/{chunk-6I7RY73G.mjs → chunk-KCM7ZCQ3.mjs} +5 -5
- package/dist/modules/chunks/chunk-KCM7ZCQ3.mjs.map +7 -0
- package/dist/modules/chunks/{chunk-K2QZRFLE.mjs → chunk-KJTMDFFX.mjs} +4 -4
- package/dist/modules/chunks/{chunk-KX2WU5Z6.mjs → chunk-KPLESRQY.mjs} +3 -3
- package/dist/modules/chunks/{chunk-PW5CE2Y6.mjs → chunk-KUOWDTI6.mjs} +2 -2
- package/dist/modules/chunks/chunk-L6IHUN7X.mjs +13 -0
- package/dist/modules/chunks/chunk-L6IHUN7X.mjs.map +7 -0
- package/dist/modules/chunks/{chunk-INTTYJVW.mjs → chunk-LBQ6DFMP.mjs} +2 -2
- package/dist/modules/chunks/{chunk-OKQ5RBKO.mjs → chunk-LVWHM3UN.mjs} +2 -2
- package/dist/modules/chunks/{chunk-D57DDEV2.mjs → chunk-MDQMARAN.mjs} +6 -6
- package/dist/modules/chunks/{chunk-D57DDEV2.mjs.map → chunk-MDQMARAN.mjs.map} +2 -2
- package/dist/modules/chunks/{chunk-STQPRNEO.mjs → chunk-MLXRIWJA.mjs} +2 -2
- package/dist/modules/chunks/{chunk-D25SR5FS.mjs → chunk-N2SH3JGI.mjs} +3 -3
- package/dist/modules/chunks/{chunk-KI4WGTWL.mjs → chunk-N7NXZ6R3.mjs} +4 -4
- package/dist/modules/chunks/{chunk-KI4WGTWL.mjs.map → chunk-N7NXZ6R3.mjs.map} +2 -2
- package/dist/modules/chunks/{chunk-7IGFAI5H.mjs → chunk-O5QX6H3U.mjs} +5 -5
- package/dist/modules/chunks/{chunk-5W7SC5D4.mjs → chunk-P2Y73QJJ.mjs} +11 -1
- package/dist/modules/chunks/{chunk-5W7SC5D4.mjs.map → chunk-P2Y73QJJ.mjs.map} +2 -2
- package/dist/modules/chunks/{chunk-FNRGLCZW.mjs → chunk-PCQNUFDL.mjs} +39 -13
- package/dist/modules/chunks/chunk-PCQNUFDL.mjs.map +7 -0
- package/dist/modules/chunks/{chunk-46UEGAXY.mjs → chunk-Q7M7VUOZ.mjs} +6 -6
- package/dist/modules/chunks/{chunk-XE6ITXHT.mjs → chunk-QB33CMEU.mjs} +2 -2
- package/dist/modules/chunks/{chunk-E3Z7GLFU.mjs → chunk-QJHQN6OD.mjs} +15 -4
- package/dist/modules/chunks/chunk-QJHQN6OD.mjs.map +7 -0
- package/dist/modules/chunks/{chunk-KAGFU64Y.mjs → chunk-QW2VT3XB.mjs} +2 -2
- package/dist/modules/chunks/{chunk-U5R6MVM4.mjs → chunk-RFTLGEB5.mjs} +2 -2
- package/dist/modules/chunks/{chunk-VKNIYV2W.mjs → chunk-RYYKMDNI.mjs} +202 -35
- package/dist/modules/chunks/chunk-RYYKMDNI.mjs.map +7 -0
- package/dist/modules/chunks/{chunk-P5XMFZY4.mjs → chunk-SFB5BDTB.mjs} +2 -2
- package/dist/modules/chunks/{chunk-4D3Q7K44.mjs → chunk-SNICHQJP.mjs} +2 -2
- package/dist/modules/chunks/{chunk-CX5WREJC.mjs → chunk-SPGFO2TA.mjs} +2 -2
- package/dist/modules/chunks/{chunk-H256DQT6.mjs → chunk-TMPTVIAP.mjs} +2 -2
- package/dist/modules/chunks/{chunk-OQXDADAS.mjs → chunk-UWJYROKS.mjs} +6 -6
- package/dist/modules/chunks/chunk-UWJYROKS.mjs.map +7 -0
- package/dist/modules/chunks/{chunk-TTRUYO7Q.mjs → chunk-UZH2664E.mjs} +3 -3
- package/dist/modules/chunks/{chunk-TTRUYO7Q.mjs.map → chunk-UZH2664E.mjs.map} +2 -2
- package/dist/modules/chunks/{chunk-CKYXAT7H.mjs → chunk-VC4OEPDH.mjs} +2 -2
- package/dist/modules/chunks/{chunk-RJVOH7G2.mjs → chunk-VKWEA6NG.mjs} +27 -27
- package/dist/modules/chunks/{chunk-LZ57Y73Z.mjs → chunk-VSJOW7J4.mjs} +9 -7
- package/dist/modules/chunks/chunk-VSJOW7J4.mjs.map +7 -0
- package/dist/modules/chunks/{chunk-PVP5YBNR.mjs → chunk-WFM434WJ.mjs} +2 -2
- package/dist/modules/chunks/{chunk-TXLD7JI5.mjs → chunk-WJNASQF2.mjs} +2 -2
- package/dist/modules/chunks/{chunk-357UOBAS.mjs → chunk-XUNDH3E7.mjs} +2 -2
- package/dist/modules/chunks/{chunk-PJFFCRRD.mjs → chunk-YDARD4EP.mjs} +2 -2
- package/dist/modules/chunks/{chunk-27XASYEH.mjs → chunk-YU3HRQX7.mjs} +17 -11
- package/dist/modules/chunks/chunk-YU3HRQX7.mjs.map +7 -0
- package/dist/modules/chunks/{chunk-EZSGDSCC.mjs → chunk-ZRE7BDDB.mjs} +30 -5
- package/dist/modules/chunks/chunk-ZRE7BDDB.mjs.map +7 -0
- package/dist/modules/cli-contributions.mjs +14 -14
- package/dist/modules/cli.mjs +5 -5
- package/dist/modules/command-executor.mjs +3 -3
- package/dist/modules/embedded.mjs +82 -42
- package/dist/modules/embedded.mjs.map +2 -2
- package/dist/modules/extension-bridge.mjs +4 -4
- package/dist/modules/frontend-root.mjs +46 -46
- package/dist/modules/index.mjs +71 -65
- package/dist/modules/index.mjs.map +1 -1
- package/dist/modules/pages/scene.mjs +5 -5
- package/dist/modules/plugin.mjs +35 -35
- package/dist/modules/plugins/asset/frontend.mjs +10 -10
- package/dist/modules/plugins/asset/identity.mjs +9 -9
- package/dist/modules/plugins/asset/ui.mjs +3 -3
- package/dist/modules/plugins/content-browser/frontend.mjs +3 -3
- package/dist/modules/plugins/content-browser/identity.mjs +2 -2
- package/dist/modules/plugins/content-browser/ui.mjs +3 -3
- package/dist/modules/plugins/display/api.mjs +1 -1
- package/dist/modules/plugins/display/backend.mjs +4 -4
- package/dist/modules/plugins/display/frontend.mjs +5 -5
- package/dist/modules/plugins/display/identity.mjs +2 -2
- package/dist/modules/plugins/display/ui.mjs +3 -3
- package/dist/modules/plugins/inspector/frontend.mjs +3 -3
- package/dist/modules/plugins/inspector/identity.mjs +2 -2
- package/dist/modules/plugins/inspector/ui.mjs +3 -3
- package/dist/modules/plugins/material/frontend.mjs +10 -10
- package/dist/modules/plugins/material/identity.mjs +9 -9
- package/dist/modules/plugins/material/ui.mjs +10 -10
- package/dist/modules/plugins/mesh/frontend.mjs +10 -10
- package/dist/modules/plugins/mesh/identity.mjs +9 -9
- package/dist/modules/plugins/mesh/ui.mjs +10 -10
- package/dist/modules/plugins/plugins/api.mjs +4 -4
- package/dist/modules/plugins/plugins/backend.mjs +7 -7
- package/dist/modules/plugins/plugins/cli.mjs +5 -5
- package/dist/modules/plugins/plugins/frontend.mjs +3 -3
- package/dist/modules/plugins/plugins/identity.mjs +2 -2
- package/dist/modules/plugins/plugins/runtime.mjs +6 -6
- package/dist/modules/plugins/plugins/ui/panel.mjs +3 -3
- package/dist/modules/plugins/plugins/ui.mjs +4 -4
- package/dist/modules/plugins/scene/frontend.mjs +5 -5
- package/dist/modules/plugins/scene/identity.mjs +2 -2
- package/dist/modules/plugins/scene-tree/frontend.mjs +3 -3
- package/dist/modules/plugins/scene-tree/identity.mjs +2 -2
- package/dist/modules/plugins/scene-tree/ui.mjs +3 -3
- package/dist/modules/plugins/texture/frontend.mjs +10 -10
- package/dist/modules/plugins/texture/identity.mjs +9 -9
- package/dist/modules/plugins/texture/ui.mjs +10 -10
- package/dist/modules/plugins/viewport/frontend.mjs +12 -12
- package/dist/modules/plugins/viewport/identity.mjs +2 -2
- package/dist/modules/plugins/viewport/presentation.mjs +4 -4
- package/dist/modules/plugins/viewport/schema.mjs +2 -2
- package/dist/modules/plugins/viewport/workspace-shell.mjs +9 -9
- package/dist/modules/product.mjs +35 -35
- package/dist/modules/shell/frontend.mjs +1 -1
- package/dist/modules/viewer/catalog/backend.mjs +31 -31
- package/dist/modules/viewer/catalog/frontend.mjs +42 -42
- package/dist/modules/viewer/catalog/shared.mjs +20 -20
- package/dist/modules/viewer/catalog.mjs +51 -51
- package/dist/modules/viewer/cli.mjs +10 -10
- package/dist/modules/viewer-host/frontend.mjs +48 -48
- package/dist/modules/viewer-host/page-registry.mjs +6 -6
- package/dist/modules/viewer-host.mjs +7 -7
- package/dist/modules/viewer.mjs +51 -51
- package/dist/modules/workspace/api.mjs +1 -1
- package/dist/modules/workspace/backend.mjs +10 -10
- package/dist/modules/workspace/broker.mjs +9 -9
- package/dist/modules/workspace/cli.mjs +2 -2
- package/dist/modules/workspace/client.mjs +3 -3
- package/dist/modules/workspace/command-error.mjs +2 -2
- package/dist/modules/workspace/contract.mjs +7 -1
- package/dist/modules/workspace/engine-adapter.mjs +3 -3
- package/dist/modules/workspace/extension-bridge.mjs +4 -4
- package/dist/modules/workspace/frontend-plugin.mjs +8 -8
- package/dist/modules/workspace/frontend.mjs +9 -9
- package/dist/modules/workspace/page-title.mjs +3 -3
- package/dist/modules/workspace/presentation.mjs +4 -4
- package/dist/modules/workspace/preview-surface.mjs +7 -7
- package/dist/modules/workspace/project-session.mjs +2 -2
- package/dist/modules/workspace/render-resize-sync.mjs +2 -2
- package/dist/modules/workspace/resident.mjs +4 -4
- package/dist/modules/workspace/resource-open.mjs +5 -5
- package/dist/modules/workspace/resource-page.mjs +8 -8
- package/dist/modules/workspace/tool-runtime.mjs +7 -5
- package/dist/modules/workspace/view-trace.mjs +3 -3
- package/dist/modules/workspace/workspace-recovery.mjs +4 -4
- package/dist/modules/workspace/workspace-state.mjs +2 -2
- package/dist/modules/workspace-frontend.mjs +8 -8
- package/dist/viewer/assets/{embedded-DXSSFAyM.js → embedded-BKEAtUD6.js} +2 -2
- package/dist/viewer/assets/{embedded-DXSSFAyM.js.map → embedded-BKEAtUD6.js.map} +1 -1
- package/dist/viewer/assets/main-BQrn6wsa.js +22 -0
- package/dist/viewer/assets/main-BQrn6wsa.js.map +1 -0
- package/dist/viewer/assets/{panels-lazy-DqCwhGd9.js → panels-lazy-C_Cs-76A.js} +2 -2
- package/dist/viewer/assets/{panels-lazy-DqCwhGd9.js.map → panels-lazy-C_Cs-76A.js.map} +1 -1
- package/dist/viewer/assets/panels-ui-DEDHJLuE.js +12 -0
- package/dist/viewer/assets/panels-ui-DEDHJLuE.js.map +1 -0
- package/dist/viewer/assets/style-CcYzhsIZ.css +2 -0
- package/dist/viewer/assets/{wgpu_wasm--oeqTwVY.js → wgpu_wasm-cNR5izZM.js} +126 -0
- package/dist/viewer/assets/{wgpu_wasm_bg-WoZ1YI1I.wasm → wgpu_wasm_bg-Dps0jNcQ.wasm} +0 -0
- package/dist/viewer/index.html +4 -4
- package/dist/viewer/panels.js +1 -1
- package/package.json +2 -2
- package/scripts/verify-runtime-content-engine.mjs +7 -4
- package/skills/forgeax-view-cli/SKILL.md +11 -0
- package/dist/modules/chunks/chunk-27XASYEH.mjs.map +0 -7
- package/dist/modules/chunks/chunk-5YTMN435.mjs.map +0 -7
- package/dist/modules/chunks/chunk-6I7RY73G.mjs.map +0 -7
- package/dist/modules/chunks/chunk-6KM24NH6.mjs.map +0 -7
- package/dist/modules/chunks/chunk-DWT3TA6M.mjs.map +0 -7
- package/dist/modules/chunks/chunk-E3Z7GLFU.mjs.map +0 -7
- package/dist/modules/chunks/chunk-EZSGDSCC.mjs.map +0 -7
- package/dist/modules/chunks/chunk-FNRGLCZW.mjs.map +0 -7
- package/dist/modules/chunks/chunk-HWZCLROY.mjs.map +0 -7
- package/dist/modules/chunks/chunk-IJPWKKIU.mjs.map +0 -7
- package/dist/modules/chunks/chunk-LZ57Y73Z.mjs.map +0 -7
- package/dist/modules/chunks/chunk-OQXDADAS.mjs.map +0 -7
- package/dist/modules/chunks/chunk-QELNKFSI.mjs +0 -10
- package/dist/modules/chunks/chunk-QELNKFSI.mjs.map +0 -7
- package/dist/modules/chunks/chunk-VKNIYV2W.mjs.map +0 -7
- package/dist/modules/chunks/chunk-YLCJNKIW.mjs.map +0 -7
- package/dist/viewer/assets/main-CI6ZQziX.js +0 -22
- package/dist/viewer/assets/main-CI6ZQziX.js.map +0 -1
- package/dist/viewer/assets/panels-ui-CfUtl68h.js +0 -12
- package/dist/viewer/assets/panels-ui-CfUtl68h.js.map +0 -1
- package/dist/viewer/assets/style-gOtSMZif.css +0 -2
- /package/dist/modules/chunks/{chunk-EWSCJF77.mjs.map → chunk-2CMCY54A.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-YFQGSDK3.mjs.map → chunk-45WL24XN.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-FMCHH5R4.mjs.map → chunk-4FYKRL46.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-VW2ZF3P4.mjs.map → chunk-4MJHVZMB.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-XQYF2P6M.mjs.map → chunk-5HVXQEO3.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-XMP4THLF.mjs.map → chunk-66LM6NO6.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-ZGOGO7SS.mjs.map → chunk-6J27SWMY.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-JK7K7RG3.mjs.map → chunk-6VK7HB4X.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-HRKW766Y.mjs.map → chunk-6WZZ7TIC.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-U64FRQKP.mjs.map → chunk-7MWZK7HS.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-F5RLQAPN.mjs.map → chunk-A7OGXJAV.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-QUFVUMSY.mjs.map → chunk-AUINYWZP.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-PZIAKZJC.mjs.map → chunk-B24VYGHV.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-X4NNZ5X6.mjs.map → chunk-C2AMOM7H.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-IZAHIOFU.mjs.map → chunk-C3WVSJZF.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-2Z5KEV6L.mjs.map → chunk-CAXCOZ7Y.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-B6QUJ33G.mjs.map → chunk-CXFQME65.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-U6UMATPV.mjs.map → chunk-CYU3WWN6.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-AGVLPYVE.mjs.map → chunk-D2LZIQE2.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-YNHEYXDG.mjs.map → chunk-DOU4MNMQ.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-ZIDEETK4.mjs.map → chunk-E4G4HDOC.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-ZHO2G4JR.mjs.map → chunk-EZAJ66NW.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-APD2EWSZ.mjs.map → chunk-FIWL6TQS.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-U5J7OTEB.mjs.map → chunk-FSSARTVM.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-47RJSHLM.mjs.map → chunk-FXXPWAXM.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-D2RCKG7Q.mjs.map → chunk-G2QCXN56.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-WVU3CQ62.mjs.map → chunk-GUVUL6D2.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-E3PJGTLI.mjs.map → chunk-IGIELQZ2.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-5PHAXNFO.mjs.map → chunk-IMDR26Y3.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-55F55BQY.mjs.map → chunk-JVOHFCI4.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-K2QZRFLE.mjs.map → chunk-KJTMDFFX.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-KX2WU5Z6.mjs.map → chunk-KPLESRQY.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-PW5CE2Y6.mjs.map → chunk-KUOWDTI6.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-INTTYJVW.mjs.map → chunk-LBQ6DFMP.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-OKQ5RBKO.mjs.map → chunk-LVWHM3UN.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-STQPRNEO.mjs.map → chunk-MLXRIWJA.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-D25SR5FS.mjs.map → chunk-N2SH3JGI.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-7IGFAI5H.mjs.map → chunk-O5QX6H3U.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-46UEGAXY.mjs.map → chunk-Q7M7VUOZ.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-XE6ITXHT.mjs.map → chunk-QB33CMEU.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-KAGFU64Y.mjs.map → chunk-QW2VT3XB.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-U5R6MVM4.mjs.map → chunk-RFTLGEB5.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-P5XMFZY4.mjs.map → chunk-SFB5BDTB.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-4D3Q7K44.mjs.map → chunk-SNICHQJP.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-CX5WREJC.mjs.map → chunk-SPGFO2TA.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-H256DQT6.mjs.map → chunk-TMPTVIAP.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-CKYXAT7H.mjs.map → chunk-VC4OEPDH.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-RJVOH7G2.mjs.map → chunk-VKWEA6NG.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-PVP5YBNR.mjs.map → chunk-WFM434WJ.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-TXLD7JI5.mjs.map → chunk-WJNASQF2.mjs.map} +0 -0
- /package/dist/modules/chunks/{chunk-357UOBAS.mjs.map → chunk-XUNDH3E7.mjs.map} +0 -0
- /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-
|
|
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-
|
|
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
|
|
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
|
|
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("
|
|
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
|
-
|
|
1817
|
-
|
|
1818
|
-
|
|
1819
|
-
|
|
1820
|
-
|
|
1821
|
-
|
|
1822
|
-
|
|
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: () =>
|
|
2223
|
-
|
|
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) =>
|
|
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: () =>
|
|
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: () =>
|
|
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="
|
|
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 = "
|
|
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-
|
|
2653
|
+
//# sourceMappingURL=chunk-RYYKMDNI.mjs.map
|