@forgeax/view 0.2.1-beta-20260924075842
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/CHANGELOG.md +11 -0
- package/README.md +742 -0
- package/dist/modules/backend.mjs +54 -0
- package/dist/modules/backend.mjs.map +7 -0
- package/dist/modules/browser.mjs +180 -0
- package/dist/modules/browser.mjs.map +7 -0
- package/dist/modules/carrier-contract.mjs +38 -0
- package/dist/modules/carrier-contract.mjs.map +7 -0
- package/dist/modules/carrier.mjs +13 -0
- package/dist/modules/carrier.mjs.map +7 -0
- package/dist/modules/chunks/chunk-2ASWB6IX.mjs +225 -0
- package/dist/modules/chunks/chunk-2ASWB6IX.mjs.map +7 -0
- package/dist/modules/chunks/chunk-2IJKOG2F.mjs +801 -0
- package/dist/modules/chunks/chunk-2IJKOG2F.mjs.map +7 -0
- package/dist/modules/chunks/chunk-2K3BBJ5S.mjs +9 -0
- package/dist/modules/chunks/chunk-2K3BBJ5S.mjs.map +7 -0
- package/dist/modules/chunks/chunk-32GD5LL6.mjs +482 -0
- package/dist/modules/chunks/chunk-32GD5LL6.mjs.map +7 -0
- package/dist/modules/chunks/chunk-3B4KFAEC.mjs +10 -0
- package/dist/modules/chunks/chunk-3B4KFAEC.mjs.map +7 -0
- package/dist/modules/chunks/chunk-46O5WX43.mjs +25 -0
- package/dist/modules/chunks/chunk-46O5WX43.mjs.map +7 -0
- package/dist/modules/chunks/chunk-47J5JXAB.mjs +237 -0
- package/dist/modules/chunks/chunk-47J5JXAB.mjs.map +7 -0
- package/dist/modules/chunks/chunk-4BXQOUDQ.mjs +17 -0
- package/dist/modules/chunks/chunk-4BXQOUDQ.mjs.map +7 -0
- package/dist/modules/chunks/chunk-4GQWYU2V.mjs +126 -0
- package/dist/modules/chunks/chunk-4GQWYU2V.mjs.map +7 -0
- package/dist/modules/chunks/chunk-4N5X2PRQ.mjs +48 -0
- package/dist/modules/chunks/chunk-4N5X2PRQ.mjs.map +7 -0
- package/dist/modules/chunks/chunk-4WXD2KYX.mjs +56 -0
- package/dist/modules/chunks/chunk-4WXD2KYX.mjs.map +7 -0
- package/dist/modules/chunks/chunk-6ZWWVAZK.mjs +468 -0
- package/dist/modules/chunks/chunk-6ZWWVAZK.mjs.map +7 -0
- package/dist/modules/chunks/chunk-73UZNRHN.mjs +296 -0
- package/dist/modules/chunks/chunk-73UZNRHN.mjs.map +7 -0
- package/dist/modules/chunks/chunk-7ITLCRND.mjs +10 -0
- package/dist/modules/chunks/chunk-7ITLCRND.mjs.map +7 -0
- package/dist/modules/chunks/chunk-7TGVWKH7.mjs +59 -0
- package/dist/modules/chunks/chunk-7TGVWKH7.mjs.map +7 -0
- package/dist/modules/chunks/chunk-7URFF53W.mjs +42 -0
- package/dist/modules/chunks/chunk-7URFF53W.mjs.map +7 -0
- package/dist/modules/chunks/chunk-7YSDRIFN.mjs +14 -0
- package/dist/modules/chunks/chunk-7YSDRIFN.mjs.map +7 -0
- package/dist/modules/chunks/chunk-AAFVCQPK.mjs +52 -0
- package/dist/modules/chunks/chunk-AAFVCQPK.mjs.map +7 -0
- package/dist/modules/chunks/chunk-AEK7ZESQ.mjs +18 -0
- package/dist/modules/chunks/chunk-AEK7ZESQ.mjs.map +7 -0
- package/dist/modules/chunks/chunk-AL6ZWIEU.mjs +42 -0
- package/dist/modules/chunks/chunk-AL6ZWIEU.mjs.map +7 -0
- package/dist/modules/chunks/chunk-ALT7XVMQ.mjs +73 -0
- package/dist/modules/chunks/chunk-ALT7XVMQ.mjs.map +7 -0
- package/dist/modules/chunks/chunk-ASI2HBE6.mjs +116 -0
- package/dist/modules/chunks/chunk-ASI2HBE6.mjs.map +7 -0
- package/dist/modules/chunks/chunk-ATWGCH7I.mjs +174 -0
- package/dist/modules/chunks/chunk-ATWGCH7I.mjs.map +7 -0
- package/dist/modules/chunks/chunk-C45U6IIY.mjs +692 -0
- package/dist/modules/chunks/chunk-C45U6IIY.mjs.map +7 -0
- package/dist/modules/chunks/chunk-C7R3YRA7.mjs +98 -0
- package/dist/modules/chunks/chunk-C7R3YRA7.mjs.map +7 -0
- package/dist/modules/chunks/chunk-CRMICXKN.mjs +87 -0
- package/dist/modules/chunks/chunk-CRMICXKN.mjs.map +7 -0
- package/dist/modules/chunks/chunk-CUH2G6UF.mjs +81 -0
- package/dist/modules/chunks/chunk-CUH2G6UF.mjs.map +7 -0
- package/dist/modules/chunks/chunk-D7GWRZLL.mjs +77 -0
- package/dist/modules/chunks/chunk-D7GWRZLL.mjs.map +7 -0
- package/dist/modules/chunks/chunk-DBWUIBE3.mjs +10 -0
- package/dist/modules/chunks/chunk-DBWUIBE3.mjs.map +7 -0
- package/dist/modules/chunks/chunk-DQWVWWUU.mjs +77 -0
- package/dist/modules/chunks/chunk-DQWVWWUU.mjs.map +7 -0
- package/dist/modules/chunks/chunk-DZZ2WFEU.mjs +122 -0
- package/dist/modules/chunks/chunk-DZZ2WFEU.mjs.map +7 -0
- package/dist/modules/chunks/chunk-E4UIAN26.mjs +58 -0
- package/dist/modules/chunks/chunk-E4UIAN26.mjs.map +7 -0
- package/dist/modules/chunks/chunk-EJGBVKFE.mjs +77 -0
- package/dist/modules/chunks/chunk-EJGBVKFE.mjs.map +7 -0
- package/dist/modules/chunks/chunk-EPSTTHWV.mjs +173 -0
- package/dist/modules/chunks/chunk-EPSTTHWV.mjs.map +7 -0
- package/dist/modules/chunks/chunk-ER7T6QJ3.mjs +64 -0
- package/dist/modules/chunks/chunk-ER7T6QJ3.mjs.map +7 -0
- package/dist/modules/chunks/chunk-FD4BAJ6K.mjs +389 -0
- package/dist/modules/chunks/chunk-FD4BAJ6K.mjs.map +7 -0
- package/dist/modules/chunks/chunk-FJM6WWIY.mjs +80 -0
- package/dist/modules/chunks/chunk-FJM6WWIY.mjs.map +7 -0
- package/dist/modules/chunks/chunk-FKCQYDLX.mjs +162 -0
- package/dist/modules/chunks/chunk-FKCQYDLX.mjs.map +7 -0
- package/dist/modules/chunks/chunk-FLGC65SR.mjs +10 -0
- package/dist/modules/chunks/chunk-FLGC65SR.mjs.map +7 -0
- package/dist/modules/chunks/chunk-FMCACPX5.mjs +289 -0
- package/dist/modules/chunks/chunk-FMCACPX5.mjs.map +7 -0
- package/dist/modules/chunks/chunk-FOBRLUQV.mjs +51 -0
- package/dist/modules/chunks/chunk-FOBRLUQV.mjs.map +7 -0
- package/dist/modules/chunks/chunk-FV3DSKZB.mjs +33 -0
- package/dist/modules/chunks/chunk-FV3DSKZB.mjs.map +7 -0
- package/dist/modules/chunks/chunk-G7BAFAGO.mjs +98 -0
- package/dist/modules/chunks/chunk-G7BAFAGO.mjs.map +7 -0
- package/dist/modules/chunks/chunk-GQBZMCTK.mjs +145 -0
- package/dist/modules/chunks/chunk-GQBZMCTK.mjs.map +7 -0
- package/dist/modules/chunks/chunk-GYWIY7AL.mjs +131 -0
- package/dist/modules/chunks/chunk-GYWIY7AL.mjs.map +7 -0
- package/dist/modules/chunks/chunk-H3KNBALD.mjs +256 -0
- package/dist/modules/chunks/chunk-H3KNBALD.mjs.map +7 -0
- package/dist/modules/chunks/chunk-H3M22JDL.mjs +144 -0
- package/dist/modules/chunks/chunk-H3M22JDL.mjs.map +7 -0
- package/dist/modules/chunks/chunk-HES3DNTM.mjs +40 -0
- package/dist/modules/chunks/chunk-HES3DNTM.mjs.map +7 -0
- package/dist/modules/chunks/chunk-I5BFP7SS.mjs +2392 -0
- package/dist/modules/chunks/chunk-I5BFP7SS.mjs.map +7 -0
- package/dist/modules/chunks/chunk-IGRMZYRD.mjs +15 -0
- package/dist/modules/chunks/chunk-IGRMZYRD.mjs.map +7 -0
- package/dist/modules/chunks/chunk-IKNGC766.mjs +321 -0
- package/dist/modules/chunks/chunk-IKNGC766.mjs.map +7 -0
- package/dist/modules/chunks/chunk-IVHNYKZB.mjs +35 -0
- package/dist/modules/chunks/chunk-IVHNYKZB.mjs.map +7 -0
- package/dist/modules/chunks/chunk-JHOURMYW.mjs +101 -0
- package/dist/modules/chunks/chunk-JHOURMYW.mjs.map +7 -0
- package/dist/modules/chunks/chunk-JURXMRFA.mjs +282 -0
- package/dist/modules/chunks/chunk-JURXMRFA.mjs.map +7 -0
- package/dist/modules/chunks/chunk-JWZIREC3.mjs +18 -0
- package/dist/modules/chunks/chunk-JWZIREC3.mjs.map +7 -0
- package/dist/modules/chunks/chunk-KHRTIZ56.mjs +1400 -0
- package/dist/modules/chunks/chunk-KHRTIZ56.mjs.map +7 -0
- package/dist/modules/chunks/chunk-KLJZZ23J.mjs +102 -0
- package/dist/modules/chunks/chunk-KLJZZ23J.mjs.map +7 -0
- package/dist/modules/chunks/chunk-KNBAYU5I.mjs +49 -0
- package/dist/modules/chunks/chunk-KNBAYU5I.mjs.map +7 -0
- package/dist/modules/chunks/chunk-KSZNCFU4.mjs +125 -0
- package/dist/modules/chunks/chunk-KSZNCFU4.mjs.map +7 -0
- package/dist/modules/chunks/chunk-L45W6KM6.mjs +158 -0
- package/dist/modules/chunks/chunk-L45W6KM6.mjs.map +7 -0
- package/dist/modules/chunks/chunk-LERMYZRC.mjs +239 -0
- package/dist/modules/chunks/chunk-LERMYZRC.mjs.map +7 -0
- package/dist/modules/chunks/chunk-LKJCXYSJ.mjs +91 -0
- package/dist/modules/chunks/chunk-LKJCXYSJ.mjs.map +7 -0
- package/dist/modules/chunks/chunk-MBS3EICT.mjs +25 -0
- package/dist/modules/chunks/chunk-MBS3EICT.mjs.map +7 -0
- package/dist/modules/chunks/chunk-MUOQZPVH.mjs +609 -0
- package/dist/modules/chunks/chunk-MUOQZPVH.mjs.map +7 -0
- package/dist/modules/chunks/chunk-MVEPGFSB.mjs +1 -0
- package/dist/modules/chunks/chunk-MVEPGFSB.mjs.map +7 -0
- package/dist/modules/chunks/chunk-NBJKLWJ5.mjs +42 -0
- package/dist/modules/chunks/chunk-NBJKLWJ5.mjs.map +7 -0
- package/dist/modules/chunks/chunk-NBLGKTEM.mjs +86 -0
- package/dist/modules/chunks/chunk-NBLGKTEM.mjs.map +7 -0
- package/dist/modules/chunks/chunk-NI7CS3I2.mjs +110 -0
- package/dist/modules/chunks/chunk-NI7CS3I2.mjs.map +7 -0
- package/dist/modules/chunks/chunk-NJH2OJFC.mjs +2113 -0
- package/dist/modules/chunks/chunk-NJH2OJFC.mjs.map +7 -0
- package/dist/modules/chunks/chunk-OBK4LIJB.mjs +20 -0
- package/dist/modules/chunks/chunk-OBK4LIJB.mjs.map +7 -0
- package/dist/modules/chunks/chunk-PEUT3FW7.mjs +1 -0
- package/dist/modules/chunks/chunk-PEUT3FW7.mjs.map +7 -0
- package/dist/modules/chunks/chunk-PRZOWPDN.mjs +66 -0
- package/dist/modules/chunks/chunk-PRZOWPDN.mjs.map +7 -0
- package/dist/modules/chunks/chunk-Q4RXBGQS.mjs +55 -0
- package/dist/modules/chunks/chunk-Q4RXBGQS.mjs.map +7 -0
- package/dist/modules/chunks/chunk-QBHBKOIL.mjs +55 -0
- package/dist/modules/chunks/chunk-QBHBKOIL.mjs.map +7 -0
- package/dist/modules/chunks/chunk-QD6CCRMG.mjs +20 -0
- package/dist/modules/chunks/chunk-QD6CCRMG.mjs.map +7 -0
- package/dist/modules/chunks/chunk-QF4V23GW.mjs +39 -0
- package/dist/modules/chunks/chunk-QF4V23GW.mjs.map +7 -0
- package/dist/modules/chunks/chunk-QK6W7MJO.mjs +42 -0
- package/dist/modules/chunks/chunk-QK6W7MJO.mjs.map +7 -0
- package/dist/modules/chunks/chunk-QL7V6DK7.mjs +34 -0
- package/dist/modules/chunks/chunk-QL7V6DK7.mjs.map +7 -0
- package/dist/modules/chunks/chunk-QLBQQKRI.mjs +25 -0
- package/dist/modules/chunks/chunk-QLBQQKRI.mjs.map +7 -0
- package/dist/modules/chunks/chunk-QLZQGZDC.mjs +418 -0
- package/dist/modules/chunks/chunk-QLZQGZDC.mjs.map +7 -0
- package/dist/modules/chunks/chunk-QSKQZGK7.mjs +1625 -0
- package/dist/modules/chunks/chunk-QSKQZGK7.mjs.map +7 -0
- package/dist/modules/chunks/chunk-QURKBAG4.mjs +25 -0
- package/dist/modules/chunks/chunk-QURKBAG4.mjs.map +7 -0
- package/dist/modules/chunks/chunk-R274XBEH.mjs +53 -0
- package/dist/modules/chunks/chunk-R274XBEH.mjs.map +7 -0
- package/dist/modules/chunks/chunk-R4I4JEY5.mjs +77 -0
- package/dist/modules/chunks/chunk-R4I4JEY5.mjs.map +7 -0
- package/dist/modules/chunks/chunk-RR6L6VVR.mjs +9 -0
- package/dist/modules/chunks/chunk-RR6L6VVR.mjs.map +7 -0
- package/dist/modules/chunks/chunk-RXF7SBBZ.mjs +125 -0
- package/dist/modules/chunks/chunk-RXF7SBBZ.mjs.map +7 -0
- package/dist/modules/chunks/chunk-SR66S6EJ.mjs +138 -0
- package/dist/modules/chunks/chunk-SR66S6EJ.mjs.map +7 -0
- package/dist/modules/chunks/chunk-SSQMQJ52.mjs +27 -0
- package/dist/modules/chunks/chunk-SSQMQJ52.mjs.map +7 -0
- package/dist/modules/chunks/chunk-TP26TASL.mjs +20 -0
- package/dist/modules/chunks/chunk-TP26TASL.mjs.map +7 -0
- package/dist/modules/chunks/chunk-TSAEK5P3.mjs +50 -0
- package/dist/modules/chunks/chunk-TSAEK5P3.mjs.map +7 -0
- package/dist/modules/chunks/chunk-UAY27HT3.mjs +68 -0
- package/dist/modules/chunks/chunk-UAY27HT3.mjs.map +7 -0
- package/dist/modules/chunks/chunk-UDLIWGWS.mjs +103 -0
- package/dist/modules/chunks/chunk-UDLIWGWS.mjs.map +7 -0
- package/dist/modules/chunks/chunk-UDVQHPWV.mjs +89 -0
- package/dist/modules/chunks/chunk-UDVQHPWV.mjs.map +7 -0
- package/dist/modules/chunks/chunk-UM23W3G7.mjs +237 -0
- package/dist/modules/chunks/chunk-UM23W3G7.mjs.map +7 -0
- package/dist/modules/chunks/chunk-VDZJWEAA.mjs +214 -0
- package/dist/modules/chunks/chunk-VDZJWEAA.mjs.map +7 -0
- package/dist/modules/chunks/chunk-VIGOJWSO.mjs +42 -0
- package/dist/modules/chunks/chunk-VIGOJWSO.mjs.map +7 -0
- package/dist/modules/chunks/chunk-VY3S5BWI.mjs +284 -0
- package/dist/modules/chunks/chunk-VY3S5BWI.mjs.map +7 -0
- package/dist/modules/chunks/chunk-VZXGRZYU.mjs +47 -0
- package/dist/modules/chunks/chunk-VZXGRZYU.mjs.map +7 -0
- package/dist/modules/chunks/chunk-W5DMQZB5.mjs +42 -0
- package/dist/modules/chunks/chunk-W5DMQZB5.mjs.map +7 -0
- package/dist/modules/chunks/chunk-WOMHSTVZ.mjs +918 -0
- package/dist/modules/chunks/chunk-WOMHSTVZ.mjs.map +7 -0
- package/dist/modules/chunks/chunk-XFQT7XCG.mjs +42 -0
- package/dist/modules/chunks/chunk-XFQT7XCG.mjs.map +7 -0
- package/dist/modules/chunks/chunk-XJZEVRYX.mjs +98 -0
- package/dist/modules/chunks/chunk-XJZEVRYX.mjs.map +7 -0
- package/dist/modules/chunks/chunk-XUYFV23R.mjs +317 -0
- package/dist/modules/chunks/chunk-XUYFV23R.mjs.map +7 -0
- package/dist/modules/chunks/chunk-Y5HXCPPQ.mjs +58 -0
- package/dist/modules/chunks/chunk-Y5HXCPPQ.mjs.map +7 -0
- package/dist/modules/chunks/chunk-YTHGRKGI.mjs +147 -0
- package/dist/modules/chunks/chunk-YTHGRKGI.mjs.map +7 -0
- package/dist/modules/chunks/chunk-YVQSDKAO.mjs +341 -0
- package/dist/modules/chunks/chunk-YVQSDKAO.mjs.map +7 -0
- package/dist/modules/chunks/chunk-YYXQDUVT.mjs +123 -0
- package/dist/modules/chunks/chunk-YYXQDUVT.mjs.map +7 -0
- package/dist/modules/chunks/chunk-ZFXZ2NUI.mjs +142 -0
- package/dist/modules/chunks/chunk-ZFXZ2NUI.mjs.map +7 -0
- package/dist/modules/chunks/chunk-ZLNWF4ET.mjs +9 -0
- package/dist/modules/chunks/chunk-ZLNWF4ET.mjs.map +7 -0
- package/dist/modules/chunks/chunk-ZLU5QW2O.mjs +9 -0
- package/dist/modules/chunks/chunk-ZLU5QW2O.mjs.map +7 -0
- package/dist/modules/chunks/chunk-ZNZPYE2V.mjs +28 -0
- package/dist/modules/chunks/chunk-ZNZPYE2V.mjs.map +7 -0
- package/dist/modules/chunks/core-564N45MO.mjs +7480 -0
- package/dist/modules/chunks/core-564N45MO.mjs.map +7 -0
- package/dist/modules/chunks/css-BKH4SVJG.mjs +8 -0
- package/dist/modules/chunks/css-BKH4SVJG.mjs.map +7 -0
- package/dist/modules/chunks/engine-javascript-PDVIGNGR.mjs +3241 -0
- package/dist/modules/chunks/engine-javascript-PDVIGNGR.mjs.map +7 -0
- package/dist/modules/chunks/github-dark-default-6HVTHEWF.mjs +8 -0
- package/dist/modules/chunks/github-dark-default-6HVTHEWF.mjs.map +7 -0
- package/dist/modules/chunks/github-light-default-LAXRA6XL.mjs +8 -0
- package/dist/modules/chunks/github-light-default-LAXRA6XL.mjs.map +7 -0
- package/dist/modules/chunks/glsl-UC3YWUD2.mjs +18 -0
- package/dist/modules/chunks/glsl-UC3YWUD2.mjs.map +7 -0
- package/dist/modules/chunks/html-FRVIUV63.mjs +19 -0
- package/dist/modules/chunks/html-FRVIUV63.mjs.map +7 -0
- package/dist/modules/chunks/javascript-LN3OC7S2.mjs +8 -0
- package/dist/modules/chunks/javascript-LN3OC7S2.mjs.map +7 -0
- package/dist/modules/chunks/json-5CUGWTOP.mjs +11 -0
- package/dist/modules/chunks/json-5CUGWTOP.mjs.map +7 -0
- package/dist/modules/chunks/json5-YZQI5VNO.mjs +11 -0
- package/dist/modules/chunks/json5-YZQI5VNO.mjs.map +7 -0
- package/dist/modules/chunks/jsonc-SWID6VOZ.mjs +11 -0
- package/dist/modules/chunks/jsonc-SWID6VOZ.mjs.map +7 -0
- package/dist/modules/chunks/jsx-A7RDCLJO.mjs +11 -0
- package/dist/modules/chunks/jsx-A7RDCLJO.mjs.map +7 -0
- package/dist/modules/chunks/markdown-QTCU5KP5.mjs +11 -0
- package/dist/modules/chunks/markdown-QTCU5KP5.mjs.map +7 -0
- package/dist/modules/chunks/python-LAZONBIB.mjs +11 -0
- package/dist/modules/chunks/python-LAZONBIB.mjs.map +7 -0
- package/dist/modules/chunks/rust-XWTPJFJO.mjs +11 -0
- package/dist/modules/chunks/rust-XWTPJFJO.mjs.map +7 -0
- package/dist/modules/chunks/scss-CFXRHUUW.mjs +15 -0
- package/dist/modules/chunks/scss-CFXRHUUW.mjs.map +7 -0
- package/dist/modules/chunks/shellscript-OHO3LCVU.mjs +11 -0
- package/dist/modules/chunks/shellscript-OHO3LCVU.mjs.map +7 -0
- package/dist/modules/chunks/toml-IOHFZJ5B.mjs +11 -0
- package/dist/modules/chunks/toml-IOHFZJ5B.mjs.map +7 -0
- package/dist/modules/chunks/tsx-2E6WNX2E.mjs +11 -0
- package/dist/modules/chunks/tsx-2E6WNX2E.mjs.map +7 -0
- package/dist/modules/chunks/typescript-PBKAS54P.mjs +11 -0
- package/dist/modules/chunks/typescript-PBKAS54P.mjs.map +7 -0
- package/dist/modules/chunks/wgsl-PS6QPRLZ.mjs +11 -0
- package/dist/modules/chunks/wgsl-PS6QPRLZ.mjs.map +7 -0
- package/dist/modules/chunks/xml-JECR2ACB.mjs +18 -0
- package/dist/modules/chunks/xml-JECR2ACB.mjs.map +7 -0
- package/dist/modules/chunks/yaml-P2SV4LOE.mjs +11 -0
- package/dist/modules/chunks/yaml-P2SV4LOE.mjs.map +7 -0
- package/dist/modules/cli-contributions.mjs +32 -0
- package/dist/modules/cli-contributions.mjs.map +7 -0
- package/dist/modules/cli.mjs +14 -0
- package/dist/modules/cli.mjs.map +7 -0
- package/dist/modules/command-executor.mjs +65 -0
- package/dist/modules/command-executor.mjs.map +7 -0
- package/dist/modules/commands.mjs +10 -0
- package/dist/modules/commands.mjs.map +7 -0
- package/dist/modules/embedded.mjs +18608 -0
- package/dist/modules/embedded.mjs.map +7 -0
- package/dist/modules/extension-bridge.mjs +18 -0
- package/dist/modules/extension-bridge.mjs.map +7 -0
- package/dist/modules/frontend-root.mjs +61 -0
- package/dist/modules/frontend-root.mjs.map +7 -0
- package/dist/modules/index.mjs +784 -0
- package/dist/modules/index.mjs.map +7 -0
- package/dist/modules/page.mjs +45 -0
- package/dist/modules/page.mjs.map +7 -0
- package/dist/modules/pages/scene.mjs +18 -0
- package/dist/modules/pages/scene.mjs.map +7 -0
- package/dist/modules/plugin.mjs +56 -0
- package/dist/modules/plugin.mjs.map +7 -0
- package/dist/modules/plugins/asset/frontend.mjs +23 -0
- package/dist/modules/plugins/asset/frontend.mjs.map +7 -0
- package/dist/modules/plugins/asset/i18n.mjs +15 -0
- package/dist/modules/plugins/asset/i18n.mjs.map +7 -0
- package/dist/modules/plugins/asset/identity.mjs +42 -0
- package/dist/modules/plugins/asset/identity.mjs.map +7 -0
- package/dist/modules/plugins/asset/schema.mjs +10 -0
- package/dist/modules/plugins/asset/schema.mjs.map +7 -0
- package/dist/modules/plugins/asset/ui.mjs +16 -0
- package/dist/modules/plugins/asset/ui.mjs.map +7 -0
- package/dist/modules/plugins/content-browser/frontend.mjs +17 -0
- package/dist/modules/plugins/content-browser/frontend.mjs.map +7 -0
- package/dist/modules/plugins/content-browser/i18n.mjs +15 -0
- package/dist/modules/plugins/content-browser/i18n.mjs.map +7 -0
- package/dist/modules/plugins/content-browser/identity.mjs +22 -0
- package/dist/modules/plugins/content-browser/identity.mjs.map +7 -0
- package/dist/modules/plugins/content-browser/schema.mjs +12 -0
- package/dist/modules/plugins/content-browser/schema.mjs.map +7 -0
- package/dist/modules/plugins/content-browser/ui.mjs +15 -0
- package/dist/modules/plugins/content-browser/ui.mjs.map +7 -0
- package/dist/modules/plugins/display/api.mjs +10 -0
- package/dist/modules/plugins/display/api.mjs.map +7 -0
- package/dist/modules/plugins/display/backend.mjs +16 -0
- package/dist/modules/plugins/display/backend.mjs.map +7 -0
- package/dist/modules/plugins/display/carrier-contract.mjs +38 -0
- package/dist/modules/plugins/display/carrier-contract.mjs.map +7 -0
- package/dist/modules/plugins/display/carrier.mjs +13 -0
- package/dist/modules/plugins/display/carrier.mjs.map +7 -0
- package/dist/modules/plugins/display/effects.mjs +8 -0
- package/dist/modules/plugins/display/effects.mjs.map +7 -0
- package/dist/modules/plugins/display/frontend.mjs +14 -0
- package/dist/modules/plugins/display/frontend.mjs.map +7 -0
- package/dist/modules/plugins/display/i18n.mjs +58 -0
- package/dist/modules/plugins/display/i18n.mjs.map +7 -0
- package/dist/modules/plugins/display/identity.mjs +30 -0
- package/dist/modules/plugins/display/identity.mjs.map +7 -0
- package/dist/modules/plugins/display/page-broker.mjs +12 -0
- package/dist/modules/plugins/display/page-broker.mjs.map +7 -0
- package/dist/modules/plugins/display/schema.mjs +40 -0
- package/dist/modules/plugins/display/schema.mjs.map +7 -0
- package/dist/modules/plugins/display/ui.mjs +9 -0
- package/dist/modules/plugins/display/ui.mjs.map +7 -0
- package/dist/modules/plugins/inspector/frontend.mjs +17 -0
- package/dist/modules/plugins/inspector/frontend.mjs.map +7 -0
- package/dist/modules/plugins/inspector/i18n.mjs +15 -0
- package/dist/modules/plugins/inspector/i18n.mjs.map +7 -0
- package/dist/modules/plugins/inspector/identity.mjs +22 -0
- package/dist/modules/plugins/inspector/identity.mjs.map +7 -0
- package/dist/modules/plugins/inspector/schema.mjs +12 -0
- package/dist/modules/plugins/inspector/schema.mjs.map +7 -0
- package/dist/modules/plugins/inspector/ui.mjs +16 -0
- package/dist/modules/plugins/inspector/ui.mjs.map +7 -0
- package/dist/modules/plugins/material/frontend.mjs +25 -0
- package/dist/modules/plugins/material/frontend.mjs.map +7 -0
- package/dist/modules/plugins/material/i18n.mjs +15 -0
- package/dist/modules/plugins/material/i18n.mjs.map +7 -0
- package/dist/modules/plugins/material/identity.mjs +60 -0
- package/dist/modules/plugins/material/identity.mjs.map +7 -0
- package/dist/modules/plugins/material/schema.mjs +47 -0
- package/dist/modules/plugins/material/schema.mjs.map +7 -0
- package/dist/modules/plugins/material/ui.mjs +28 -0
- package/dist/modules/plugins/material/ui.mjs.map +7 -0
- package/dist/modules/plugins/mesh/frontend.mjs +23 -0
- package/dist/modules/plugins/mesh/frontend.mjs.map +7 -0
- package/dist/modules/plugins/mesh/i18n.mjs +15 -0
- package/dist/modules/plugins/mesh/i18n.mjs.map +7 -0
- package/dist/modules/plugins/mesh/identity.mjs +54 -0
- package/dist/modules/plugins/mesh/identity.mjs.map +7 -0
- package/dist/modules/plugins/mesh/schema.mjs +10 -0
- package/dist/modules/plugins/mesh/schema.mjs.map +7 -0
- package/dist/modules/plugins/mesh/ui.mjs +26 -0
- package/dist/modules/plugins/mesh/ui.mjs.map +7 -0
- package/dist/modules/plugins/plugins/api.mjs +11 -0
- package/dist/modules/plugins/plugins/api.mjs.map +7 -0
- package/dist/modules/plugins/plugins/backend.mjs +21 -0
- package/dist/modules/plugins/plugins/backend.mjs.map +7 -0
- package/dist/modules/plugins/plugins/cli.mjs +12 -0
- package/dist/modules/plugins/plugins/cli.mjs.map +7 -0
- package/dist/modules/plugins/plugins/frontend.mjs +17 -0
- package/dist/modules/plugins/plugins/frontend.mjs.map +7 -0
- package/dist/modules/plugins/plugins/i18n.mjs +15 -0
- package/dist/modules/plugins/plugins/i18n.mjs.map +7 -0
- package/dist/modules/plugins/plugins/identity.mjs +26 -0
- package/dist/modules/plugins/plugins/identity.mjs.map +7 -0
- package/dist/modules/plugins/plugins/runtime.mjs +50 -0
- package/dist/modules/plugins/plugins/runtime.mjs.map +7 -0
- package/dist/modules/plugins/plugins/schema.mjs +12 -0
- package/dist/modules/plugins/plugins/schema.mjs.map +7 -0
- package/dist/modules/plugins/plugins/ui/panel.mjs +14 -0
- package/dist/modules/plugins/plugins/ui/panel.mjs.map +7 -0
- package/dist/modules/plugins/plugins/ui.mjs +15 -0
- package/dist/modules/plugins/plugins/ui.mjs.map +7 -0
- package/dist/modules/plugins/scene/frontend.mjs +18 -0
- package/dist/modules/plugins/scene/frontend.mjs.map +7 -0
- package/dist/modules/plugins/scene/identity.mjs +14 -0
- package/dist/modules/plugins/scene/identity.mjs.map +7 -0
- package/dist/modules/plugins/scene-tree/frontend.mjs +17 -0
- package/dist/modules/plugins/scene-tree/frontend.mjs.map +7 -0
- package/dist/modules/plugins/scene-tree/i18n.mjs +15 -0
- package/dist/modules/plugins/scene-tree/i18n.mjs.map +7 -0
- package/dist/modules/plugins/scene-tree/identity.mjs +22 -0
- package/dist/modules/plugins/scene-tree/identity.mjs.map +7 -0
- package/dist/modules/plugins/scene-tree/schema.mjs +12 -0
- package/dist/modules/plugins/scene-tree/schema.mjs.map +7 -0
- package/dist/modules/plugins/scene-tree/ui.mjs +16 -0
- package/dist/modules/plugins/scene-tree/ui.mjs.map +7 -0
- package/dist/modules/plugins/texture/frontend.mjs +23 -0
- package/dist/modules/plugins/texture/frontend.mjs.map +7 -0
- package/dist/modules/plugins/texture/i18n.mjs +15 -0
- package/dist/modules/plugins/texture/i18n.mjs.map +7 -0
- package/dist/modules/plugins/texture/identity.mjs +54 -0
- package/dist/modules/plugins/texture/identity.mjs.map +7 -0
- package/dist/modules/plugins/texture/schema.mjs +10 -0
- package/dist/modules/plugins/texture/schema.mjs.map +7 -0
- package/dist/modules/plugins/texture/ui.mjs +26 -0
- package/dist/modules/plugins/texture/ui.mjs.map +7 -0
- package/dist/modules/plugins/viewport/frontend.mjs +27 -0
- package/dist/modules/plugins/viewport/frontend.mjs.map +7 -0
- package/dist/modules/plugins/viewport/identity.mjs +28 -0
- package/dist/modules/plugins/viewport/identity.mjs.map +7 -0
- package/dist/modules/plugins/viewport/presentation-identity.mjs +10 -0
- package/dist/modules/plugins/viewport/presentation-identity.mjs.map +7 -0
- package/dist/modules/plugins/viewport/presentation.mjs +18 -0
- package/dist/modules/plugins/viewport/presentation.mjs.map +7 -0
- package/dist/modules/plugins/viewport/schema.mjs +18 -0
- package/dist/modules/plugins/viewport/schema.mjs.map +7 -0
- package/dist/modules/plugins/viewport/workspace-shell.mjs +29 -0
- package/dist/modules/plugins/viewport/workspace-shell.mjs.map +7 -0
- package/dist/modules/shell/contract.mjs +10 -0
- package/dist/modules/shell/contract.mjs.map +7 -0
- package/dist/modules/shell/frontend.mjs +14 -0
- package/dist/modules/shell/frontend.mjs.map +7 -0
- package/dist/modules/shell/layout-zones.mjs +20 -0
- package/dist/modules/shell/layout-zones.mjs.map +7 -0
- package/dist/modules/start-cli.mjs +57 -0
- package/dist/modules/start-cli.mjs.map +7 -0
- package/dist/modules/start.mjs +18 -0
- package/dist/modules/start.mjs.map +7 -0
- package/dist/modules/viewer/catalog/backend.mjs +47 -0
- package/dist/modules/viewer/catalog/backend.mjs.map +7 -0
- package/dist/modules/viewer/catalog/frontend.mjs +55 -0
- package/dist/modules/viewer/catalog/frontend.mjs.map +7 -0
- package/dist/modules/viewer/catalog/shared.mjs +43 -0
- package/dist/modules/viewer/catalog/shared.mjs.map +7 -0
- package/dist/modules/viewer/catalog.mjs +85 -0
- package/dist/modules/viewer/catalog.mjs.map +7 -0
- package/dist/modules/viewer/cli.mjs +23 -0
- package/dist/modules/viewer/cli.mjs.map +7 -0
- package/dist/modules/viewer-host/frontend.mjs +65 -0
- package/dist/modules/viewer-host/frontend.mjs.map +7 -0
- package/dist/modules/viewer-host/page-registry.mjs +27 -0
- package/dist/modules/viewer-host/page-registry.mjs.map +7 -0
- package/dist/modules/viewer-host/slot-registry.mjs +8 -0
- package/dist/modules/viewer-host/slot-registry.mjs.map +7 -0
- package/dist/modules/viewer-host.mjs +43 -0
- package/dist/modules/viewer-host.mjs.map +7 -0
- package/dist/modules/viewer.mjs +85 -0
- package/dist/modules/viewer.mjs.map +7 -0
- package/dist/modules/workspace/adopt-surface.mjs +16 -0
- package/dist/modules/workspace/adopt-surface.mjs.map +7 -0
- package/dist/modules/workspace/api.mjs +8 -0
- package/dist/modules/workspace/api.mjs.map +7 -0
- package/dist/modules/workspace/backend.mjs +23 -0
- package/dist/modules/workspace/backend.mjs.map +7 -0
- package/dist/modules/workspace/broker.mjs +16 -0
- package/dist/modules/workspace/broker.mjs.map +7 -0
- package/dist/modules/workspace/cli.mjs +9 -0
- package/dist/modules/workspace/cli.mjs.map +7 -0
- package/dist/modules/workspace/client.mjs +15 -0
- package/dist/modules/workspace/client.mjs.map +7 -0
- package/dist/modules/workspace/command-error.mjs +16 -0
- package/dist/modules/workspace/command-error.mjs.map +7 -0
- package/dist/modules/workspace/contract.mjs +71 -0
- package/dist/modules/workspace/contract.mjs.map +7 -0
- package/dist/modules/workspace/demo-client.mjs +127 -0
- package/dist/modules/workspace/demo-client.mjs.map +7 -0
- package/dist/modules/workspace/engine-adapter.mjs +16 -0
- package/dist/modules/workspace/engine-adapter.mjs.map +7 -0
- package/dist/modules/workspace/engine-presentation.mjs +10 -0
- package/dist/modules/workspace/engine-presentation.mjs.map +7 -0
- package/dist/modules/workspace/extension-bridge.mjs +18 -0
- package/dist/modules/workspace/extension-bridge.mjs.map +7 -0
- package/dist/modules/workspace/frontend-plugin.mjs +18 -0
- package/dist/modules/workspace/frontend-plugin.mjs.map +7 -0
- package/dist/modules/workspace/frontend.mjs +29 -0
- package/dist/modules/workspace/frontend.mjs.map +7 -0
- package/dist/modules/workspace/id.mjs +8 -0
- package/dist/modules/workspace/id.mjs.map +7 -0
- package/dist/modules/workspace/inspection-presentation.mjs +12 -0
- package/dist/modules/workspace/inspection-presentation.mjs.map +7 -0
- package/dist/modules/workspace/locale-bridge.mjs +14 -0
- package/dist/modules/workspace/locale-bridge.mjs.map +7 -0
- package/dist/modules/workspace/page-title.mjs +13 -0
- package/dist/modules/workspace/page-title.mjs.map +7 -0
- package/dist/modules/workspace/presentation.mjs +18 -0
- package/dist/modules/workspace/presentation.mjs.map +7 -0
- package/dist/modules/workspace/preview-surface.mjs +17 -0
- package/dist/modules/workspace/preview-surface.mjs.map +7 -0
- package/dist/modules/workspace/project-session.mjs +18 -0
- package/dist/modules/workspace/project-session.mjs.map +7 -0
- package/dist/modules/workspace/render-resize-sync.mjs +12 -0
- package/dist/modules/workspace/render-resize-sync.mjs.map +7 -0
- package/dist/modules/workspace/resident.mjs +16 -0
- package/dist/modules/workspace/resident.mjs.map +7 -0
- package/dist/modules/workspace/resource-open.mjs +34 -0
- package/dist/modules/workspace/resource-open.mjs.map +7 -0
- package/dist/modules/workspace/resource-page.mjs +27 -0
- package/dist/modules/workspace/resource-page.mjs.map +7 -0
- package/dist/modules/workspace/tool-runtime.mjs +14 -0
- package/dist/modules/workspace/tool-runtime.mjs.map +7 -0
- package/dist/modules/workspace/view-trace.mjs +60 -0
- package/dist/modules/workspace/view-trace.mjs.map +7 -0
- package/dist/modules/workspace/workspace-client-connection.mjs +22 -0
- package/dist/modules/workspace/workspace-client-connection.mjs.map +7 -0
- package/dist/modules/workspace/workspace-recovery.mjs +35 -0
- package/dist/modules/workspace/workspace-recovery.mjs.map +7 -0
- package/dist/modules/workspace/workspace-state.mjs +12 -0
- package/dist/modules/workspace/workspace-state.mjs.map +7 -0
- package/dist/modules/workspace-frontend.mjs +17 -0
- package/dist/modules/workspace-frontend.mjs.map +7 -0
- package/dist/viewer/assets/chunk-CilyBKbf.js +1 -0
- package/dist/viewer/assets/core-DSQma37-.js +13 -0
- package/dist/viewer/assets/core-DSQma37-.js.map +1 -0
- package/dist/viewer/assets/css-Bq1BXecw.js +2 -0
- package/dist/viewer/assets/css-Bq1BXecw.js.map +1 -0
- package/dist/viewer/assets/css-CWQWazmX.js +1 -0
- package/dist/viewer/assets/embedded-D4ZDx--W.js +2 -0
- package/dist/viewer/assets/embedded-D4ZDx--W.js.map +1 -0
- package/dist/viewer/assets/engine-javascript-BvokIV9O.js +142 -0
- package/dist/viewer/assets/engine-javascript-BvokIV9O.js.map +1 -0
- package/dist/viewer/assets/github-dark-default-DaDlj-WZ.js +2 -0
- package/dist/viewer/assets/github-dark-default-DaDlj-WZ.js.map +1 -0
- package/dist/viewer/assets/github-light-default-BqhWxAZd.js +2 -0
- package/dist/viewer/assets/github-light-default-BqhWxAZd.js.map +1 -0
- package/dist/viewer/assets/glsl-BJgVnv11.js +2 -0
- package/dist/viewer/assets/glsl-BJgVnv11.js.map +1 -0
- package/dist/viewer/assets/html-AaaHGGyt.js +2 -0
- package/dist/viewer/assets/html-AaaHGGyt.js.map +1 -0
- package/dist/viewer/assets/javascript-BX9W64FE.js +1 -0
- package/dist/viewer/assets/javascript-DQODvD07.js +2 -0
- package/dist/viewer/assets/javascript-DQODvD07.js.map +1 -0
- package/dist/viewer/assets/json-CpcIDpT7.js +2 -0
- package/dist/viewer/assets/json-CpcIDpT7.js.map +1 -0
- package/dist/viewer/assets/json5-Czq4A7dk.js +2 -0
- package/dist/viewer/assets/json5-Czq4A7dk.js.map +1 -0
- package/dist/viewer/assets/jsonc-BXDfCMmu.js +2 -0
- package/dist/viewer/assets/jsonc-BXDfCMmu.js.map +1 -0
- package/dist/viewer/assets/jsx-DAWscEnf.js +2 -0
- package/dist/viewer/assets/jsx-DAWscEnf.js.map +1 -0
- package/dist/viewer/assets/main-C-2CHTN_.js +15 -0
- package/dist/viewer/assets/main-C-2CHTN_.js.map +1 -0
- package/dist/viewer/assets/markdown-Cx1FMNw-.js +2 -0
- package/dist/viewer/assets/markdown-Cx1FMNw-.js.map +1 -0
- package/dist/viewer/assets/panels-entry-Ddhfjgf0.js +46 -0
- package/dist/viewer/assets/panels-entry-Ddhfjgf0.js.map +1 -0
- package/dist/viewer/assets/python-CYPKjWV9.js +2 -0
- package/dist/viewer/assets/python-CYPKjWV9.js.map +1 -0
- package/dist/viewer/assets/rust-0e5cNx_V.js +2 -0
- package/dist/viewer/assets/rust-0e5cNx_V.js.map +1 -0
- package/dist/viewer/assets/scss-B-aKzLbT.js +2 -0
- package/dist/viewer/assets/scss-B-aKzLbT.js.map +1 -0
- package/dist/viewer/assets/shellscript-CpXD-pSm.js +2 -0
- package/dist/viewer/assets/shellscript-CpXD-pSm.js.map +1 -0
- package/dist/viewer/assets/style-ClttNKZk.css +2 -0
- package/dist/viewer/assets/styles-BXozhwiU.js +11 -0
- package/dist/viewer/assets/styles-BXozhwiU.js.map +1 -0
- package/dist/viewer/assets/toml-GmchYTXa.js +2 -0
- package/dist/viewer/assets/toml-GmchYTXa.js.map +1 -0
- package/dist/viewer/assets/tsx-Crj1Bi53.js +2 -0
- package/dist/viewer/assets/tsx-Crj1Bi53.js.map +1 -0
- package/dist/viewer/assets/typescript-xi0cSHCO.js +2 -0
- package/dist/viewer/assets/typescript-xi0cSHCO.js.map +1 -0
- package/dist/viewer/assets/wgsl-BoEPRo9U.js +2 -0
- package/dist/viewer/assets/wgsl-BoEPRo9U.js.map +1 -0
- package/dist/viewer/assets/xml-B8JqQrMD.js +2 -0
- package/dist/viewer/assets/xml-B8JqQrMD.js.map +1 -0
- package/dist/viewer/assets/yaml-DsIB85X9.js +2 -0
- package/dist/viewer/assets/yaml-DsIB85X9.js.map +1 -0
- package/dist/viewer/index.html +15 -0
- package/dist/viewer/panels.js +1 -0
- package/host.pack.json +13 -0
- package/package.json +174 -0
- package/skills/forgeax-view-cli/SKILL.md +74 -0
- package/skills/forgeax-view-start/SKILL.md +202 -0
- package/skills/forgeax-view-start/scripts/start-view.mjs +202 -0
|
@@ -0,0 +1,418 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Button,
|
|
3
|
+
EmptyState,
|
|
4
|
+
IconButton,
|
|
5
|
+
PanelHeader,
|
|
6
|
+
SearchField,
|
|
7
|
+
Status,
|
|
8
|
+
Surface,
|
|
9
|
+
Text,
|
|
10
|
+
Toolbar
|
|
11
|
+
} from "./chunk-NJH2OJFC.mjs";
|
|
12
|
+
import {
|
|
13
|
+
getLocale,
|
|
14
|
+
subscribeLocale,
|
|
15
|
+
t
|
|
16
|
+
} from "./chunk-4GQWYU2V.mjs";
|
|
17
|
+
import {
|
|
18
|
+
PLUGINS_ACTIONS
|
|
19
|
+
} from "./chunk-QL7V6DK7.mjs";
|
|
20
|
+
import {
|
|
21
|
+
jsonUnchanged
|
|
22
|
+
} from "./chunk-32GD5LL6.mjs";
|
|
23
|
+
|
|
24
|
+
// packages/view-plugin-plugins/src/ui/PluginsPanel.tsx
|
|
25
|
+
import { useCallback as useCallback2, useEffect, useRef, useState } from "react";
|
|
26
|
+
import { Box, Package, RefreshCw, SearchX, ShieldCheck } from "lucide-react";
|
|
27
|
+
|
|
28
|
+
// packages/view-plugin-plugins/src/i18n/useTranslation.ts
|
|
29
|
+
import { useCallback, useSyncExternalStore } from "react";
|
|
30
|
+
function useTranslation() {
|
|
31
|
+
const locale = useSyncExternalStore(subscribeLocale, getLocale, getLocale);
|
|
32
|
+
const t2 = useCallback(
|
|
33
|
+
(key, vars) => t(key, vars),
|
|
34
|
+
[locale]
|
|
35
|
+
);
|
|
36
|
+
return { t: t2, locale };
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// packages/view-plugin-plugins/src/ui/plugin-entries.mjs
|
|
40
|
+
var PLUGIN_TAGS = Object.freeze(["backend", "frontend", "game", "asset", "api", "cli"]);
|
|
41
|
+
function entriesFor(source) {
|
|
42
|
+
const { sourceId, kind, assembly, actual, plugins = [], api } = source;
|
|
43
|
+
const installed = new Map((actual?.entries ?? []).map((entry) => [entry.entryId ?? entry.id, entry]));
|
|
44
|
+
const records = plugins;
|
|
45
|
+
const declared = /* @__PURE__ */ new Map();
|
|
46
|
+
for (const entry of records) {
|
|
47
|
+
const id = entry.entryId ?? entry.id;
|
|
48
|
+
declared.set(id, { ...declared.get(id), ...entry });
|
|
49
|
+
}
|
|
50
|
+
const entries = /* @__PURE__ */ new Map();
|
|
51
|
+
for (const entry of declared.values()) {
|
|
52
|
+
const entryId = entry.entryId ?? entry.id;
|
|
53
|
+
if (!entryId) continue;
|
|
54
|
+
const module = entry.module ?? entry.name;
|
|
55
|
+
const observed = installed.get(entryId);
|
|
56
|
+
const realm = observed?.realm ?? entry.realm;
|
|
57
|
+
const operations = (api?.operations ?? []).filter(({ owner }) => owner && (entryId === `provider:${owner.sourceId}:${owner.providerId}` || entryId === owner.fiberId || entry.fiberId !== void 0 && String(entry.fiberId) === String(owner.fiberId)));
|
|
58
|
+
const tags = /* @__PURE__ */ new Set();
|
|
59
|
+
if (kind === "backend" || kind === "frontend") tags.add(kind);
|
|
60
|
+
const required = observed?.requiredServices ?? entry.requiredServices ?? [];
|
|
61
|
+
if (kind === "game" || kind === "engine" || realm === "engine" && required.some((service) => service === "world" || service === "gameHost")) tags.add("game");
|
|
62
|
+
if (entry.assetGuid) tags.add("asset");
|
|
63
|
+
if (operations.length) tags.add("api");
|
|
64
|
+
const commands = operations.map(({ descriptor }) => descriptor?.path ?? descriptor?.id?.split(".")).filter((path) => Array.isArray(path) && path.length > 0).map((path) => path.join(" "));
|
|
65
|
+
if (commands.length || entry.commandContract) tags.add("cli");
|
|
66
|
+
entries.set(entryId, {
|
|
67
|
+
sourceId,
|
|
68
|
+
entryId,
|
|
69
|
+
module,
|
|
70
|
+
label: module && module !== "unknown" ? module : entry.program || entry.assetGuid || "",
|
|
71
|
+
kind,
|
|
72
|
+
...entry.assetGuid ? { assetGuid: entry.assetGuid } : {},
|
|
73
|
+
...entry.program ? { program: entry.program } : {},
|
|
74
|
+
realm,
|
|
75
|
+
version: entry.program && entry.program === assembly?.root?.program ? assembly.root.codeRevision : "",
|
|
76
|
+
state: observed?.fiberState ?? entry.fiberState ?? (entry.disabled || entry.desiredState === "disabled" ? "disabled" : "unknown"),
|
|
77
|
+
tags: [...tags],
|
|
78
|
+
operations: operations.map((operation) => operation.descriptor.id),
|
|
79
|
+
commands
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
return [...entries.values()];
|
|
83
|
+
}
|
|
84
|
+
function pluginInspector(client) {
|
|
85
|
+
const inspect = typeof client?.inspect === "function" ? client.inspect : client?.inspectPlugins;
|
|
86
|
+
if (typeof client?.sources !== "function" || typeof inspect !== "function") return void 0;
|
|
87
|
+
return { sources: client.sources.bind(client), inspect: inspect.bind(client) };
|
|
88
|
+
}
|
|
89
|
+
async function loadPluginSnapshot({ client, hostAssembly, connectionId } = {}) {
|
|
90
|
+
const sources = [];
|
|
91
|
+
const issues = [];
|
|
92
|
+
const local = hostAssembly ? {
|
|
93
|
+
sourceId: connectionId ? `view-frontend:${connectionId}` : "view-frontend",
|
|
94
|
+
kind: "frontend",
|
|
95
|
+
assembly: hostAssembly.current,
|
|
96
|
+
actual: hostAssembly.status,
|
|
97
|
+
plugins: (hostAssembly.inspection ?? []).map((item) => ({
|
|
98
|
+
entryId: `fiber:${item.uid}`,
|
|
99
|
+
module: item.name,
|
|
100
|
+
fiberState: item.state,
|
|
101
|
+
...item.origin?.guid ? { assetGuid: item.origin.guid } : {},
|
|
102
|
+
...item.origin?.program ? { program: item.origin.program } : {},
|
|
103
|
+
missingServices: item.missingServices
|
|
104
|
+
})),
|
|
105
|
+
local: true
|
|
106
|
+
} : void 0;
|
|
107
|
+
const inspector = pluginInspector(client);
|
|
108
|
+
if (!inspector) issues.push({ sourceId: "remote-hosts", message: "Remote Host inspection unavailable. Only locally observed entries are shown." });
|
|
109
|
+
else {
|
|
110
|
+
try {
|
|
111
|
+
const listed = await inspector.sources();
|
|
112
|
+
const ownConnection = connectionId ?? listed.caller?.connectionId;
|
|
113
|
+
if (local && ownConnection) local.sourceId = `view-frontend:${ownConnection}`;
|
|
114
|
+
const remote = (listed.sources ?? []).filter((source) => !local || !ownConnection || source.sourceId !== local.sourceId && source.connection?.connectionId !== ownConnection);
|
|
115
|
+
const results = await Promise.allSettled(remote.map((source) => inspector.inspect({
|
|
116
|
+
sourceId: source.sourceId,
|
|
117
|
+
generation: source.generation
|
|
118
|
+
})));
|
|
119
|
+
results.forEach((result, index) => {
|
|
120
|
+
const source = remote[index];
|
|
121
|
+
if (result.status === "fulfilled") sources.push({ ...source, ...result.value });
|
|
122
|
+
else {
|
|
123
|
+
sources.push({ ...source, unavailable: true });
|
|
124
|
+
issues.push({ sourceId: source.sourceId, message: result.reason?.message ?? String(result.reason) });
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
} catch (cause) {
|
|
128
|
+
issues.push({ sourceId: "remote-hosts", message: cause?.message ?? String(cause) });
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
if (local) sources.push(local);
|
|
132
|
+
sources.sort((a, b) => (a.kind === "backend" ? 0 : 1) - (b.kind === "backend" ? 0 : 1) || a.sourceId.localeCompare(b.sourceId));
|
|
133
|
+
return { sources, entries: sources.flatMap(entriesFor), issues };
|
|
134
|
+
}
|
|
135
|
+
function filterPluginEntries(entries, { query = "", sourceId = "", tags = [] } = {}) {
|
|
136
|
+
const search = query.trim().toLowerCase();
|
|
137
|
+
return entries.filter((entry) => (!sourceId || entry.sourceId === sourceId) && tags.every((tag) => entry.tags.includes(tag)) && [
|
|
138
|
+
entry.entryId,
|
|
139
|
+
entry.module,
|
|
140
|
+
entry.assetGuid,
|
|
141
|
+
entry.program,
|
|
142
|
+
entry.sourceId,
|
|
143
|
+
entry.kind,
|
|
144
|
+
entry.realm,
|
|
145
|
+
entry.state,
|
|
146
|
+
...entry.tags,
|
|
147
|
+
...entry.operations,
|
|
148
|
+
...entry.commands
|
|
149
|
+
].join(" ").toLowerCase().includes(search));
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// packages/view-plugin-plugins/src/ui/PluginFilters.tsx
|
|
153
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
154
|
+
function PluginFilters({ sources, sourceId, tags, counts, total, onSource, onTag, onReset }) {
|
|
155
|
+
const { t: t2 } = useTranslation();
|
|
156
|
+
return /* @__PURE__ */ jsxs("div", { className: "fx-plugins-filters", children: [
|
|
157
|
+
/* @__PURE__ */ jsxs("div", { className: "fx-plugins-filter-row", role: "group", "aria-label": t2("plugins.hosts"), children: [
|
|
158
|
+
/* @__PURE__ */ jsx(Text, { variant: "caption", className: "fx-plugins-filter-label", children: t2("plugins.hosts") }),
|
|
159
|
+
/* @__PURE__ */ jsxs(
|
|
160
|
+
Button,
|
|
161
|
+
{
|
|
162
|
+
size: "compact",
|
|
163
|
+
variant: "quiet",
|
|
164
|
+
className: "fx-plugin-filter",
|
|
165
|
+
"aria-pressed": !sourceId,
|
|
166
|
+
"data-plugin-host": "all",
|
|
167
|
+
onClick: () => onSource(""),
|
|
168
|
+
children: [
|
|
169
|
+
t2("plugins.allHosts"),
|
|
170
|
+
" ",
|
|
171
|
+
/* @__PURE__ */ jsx("span", { children: total })
|
|
172
|
+
]
|
|
173
|
+
}
|
|
174
|
+
),
|
|
175
|
+
sources.map((source) => /* @__PURE__ */ jsxs(
|
|
176
|
+
Button,
|
|
177
|
+
{
|
|
178
|
+
size: "compact",
|
|
179
|
+
variant: "quiet",
|
|
180
|
+
className: "fx-plugin-filter",
|
|
181
|
+
"aria-pressed": sourceId === source.sourceId,
|
|
182
|
+
title: source.sourceId,
|
|
183
|
+
"data-plugin-host": source.sourceId,
|
|
184
|
+
onClick: () => onSource(source.sourceId),
|
|
185
|
+
children: [
|
|
186
|
+
source.local ? t2("plugins.thisFrontend") : source.sourceId,
|
|
187
|
+
/* @__PURE__ */ jsxs("span", { children: [
|
|
188
|
+
counts[`host:${source.sourceId}`] ?? 0,
|
|
189
|
+
source.unavailable ? " !" : ""
|
|
190
|
+
] })
|
|
191
|
+
]
|
|
192
|
+
},
|
|
193
|
+
source.sourceId
|
|
194
|
+
))
|
|
195
|
+
] }),
|
|
196
|
+
/* @__PURE__ */ jsxs("div", { className: "fx-plugins-filter-row", role: "group", "aria-label": t2("plugins.tags"), children: [
|
|
197
|
+
/* @__PURE__ */ jsx(Text, { variant: "caption", className: "fx-plugins-filter-label", children: t2("plugins.tags") }),
|
|
198
|
+
PLUGIN_TAGS.map((tag) => /* @__PURE__ */ jsxs(
|
|
199
|
+
Button,
|
|
200
|
+
{
|
|
201
|
+
size: "compact",
|
|
202
|
+
variant: "quiet",
|
|
203
|
+
className: "fx-plugin-filter",
|
|
204
|
+
"aria-pressed": tags.includes(tag),
|
|
205
|
+
title: t2(`plugins.tagHelp.${tag}`),
|
|
206
|
+
"data-plugin-tag": tag,
|
|
207
|
+
onClick: () => onTag(tag),
|
|
208
|
+
children: [
|
|
209
|
+
t2(`plugins.tag.${tag}`),
|
|
210
|
+
" ",
|
|
211
|
+
/* @__PURE__ */ jsx("span", { children: counts[tag] ?? 0 })
|
|
212
|
+
]
|
|
213
|
+
},
|
|
214
|
+
tag
|
|
215
|
+
)),
|
|
216
|
+
/* @__PURE__ */ jsx(Button, { size: "compact", variant: "quiet", "data-action": "plugins.reset", onClick: onReset, children: t2("plugins.reset") })
|
|
217
|
+
] }),
|
|
218
|
+
/* @__PURE__ */ jsx(Text, { variant: "caption", className: "fx-plugins-filter-help", children: t2("plugins.filterHelp") })
|
|
219
|
+
] });
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
// packages/view-plugin-plugins/src/ui/PluginsPanel.tsx
|
|
223
|
+
import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
224
|
+
function pluginType(entry) {
|
|
225
|
+
return entry.kind ?? "unknown";
|
|
226
|
+
}
|
|
227
|
+
function stateTone(state) {
|
|
228
|
+
if (state === "active") return "success";
|
|
229
|
+
if (state === "failed" || state === "error") return "error";
|
|
230
|
+
if (state === "pending" || state === "loading" || state === "unloading") return "warning";
|
|
231
|
+
return "info";
|
|
232
|
+
}
|
|
233
|
+
function PluginsPanel(props) {
|
|
234
|
+
const { t: t2 } = useTranslation();
|
|
235
|
+
const inspector = props.client ?? props.workspaceClient;
|
|
236
|
+
const [entries, setEntries] = useState([]);
|
|
237
|
+
const [sources, setSources] = useState([]);
|
|
238
|
+
const [issues, setIssues] = useState([]);
|
|
239
|
+
const [sourceId, setSourceId] = useState("");
|
|
240
|
+
const [tags, setTags] = useState([]);
|
|
241
|
+
const [query, setQuery] = useState("");
|
|
242
|
+
const [error, setError] = useState(null);
|
|
243
|
+
const [loading, setLoading] = useState(false);
|
|
244
|
+
const [selectedEntryId, setSelectedEntryId] = useState(null);
|
|
245
|
+
const request = useRef(0);
|
|
246
|
+
const refresh = useCallback2(async () => {
|
|
247
|
+
const revision = ++request.current;
|
|
248
|
+
setLoading(true);
|
|
249
|
+
setError(null);
|
|
250
|
+
try {
|
|
251
|
+
const snapshot = await loadPluginSnapshot({ client: inspector, hostAssembly: props.hostAssembly, connectionId: props.connectionId });
|
|
252
|
+
if (revision !== request.current) return;
|
|
253
|
+
setEntries((current) => jsonUnchanged(current, snapshot.entries) ? current : snapshot.entries);
|
|
254
|
+
setSources((current) => jsonUnchanged(current, snapshot.sources) ? current : snapshot.sources);
|
|
255
|
+
setIssues((current) => jsonUnchanged(current, snapshot.issues) ? current : snapshot.issues);
|
|
256
|
+
} catch (cause) {
|
|
257
|
+
if (revision !== request.current) return;
|
|
258
|
+
setEntries([]);
|
|
259
|
+
setSources([]);
|
|
260
|
+
setIssues([]);
|
|
261
|
+
setError(cause instanceof Error ? cause.message : t2("plugins.loadErrorTitle"));
|
|
262
|
+
} finally {
|
|
263
|
+
if (revision === request.current) setLoading(false);
|
|
264
|
+
}
|
|
265
|
+
}, [inspector, props.hostAssembly, props.connectionId, t2]);
|
|
266
|
+
useEffect(() => {
|
|
267
|
+
void refresh();
|
|
268
|
+
return () => {
|
|
269
|
+
request.current += 1;
|
|
270
|
+
};
|
|
271
|
+
}, [refresh]);
|
|
272
|
+
const filtered = filterPluginEntries(entries, { query, sourceId, tags });
|
|
273
|
+
const candidates = filterPluginEntries(entries, { query, sourceId });
|
|
274
|
+
const counts = Object.fromEntries(PLUGIN_TAGS.map((tag) => [tag, candidates.filter((entry) => entry.tags.includes(tag)).length]));
|
|
275
|
+
for (const source of sources) counts[`host:${source.sourceId}`] = entries.filter((entry) => entry.sourceId === source.sourceId).length;
|
|
276
|
+
const reset = () => {
|
|
277
|
+
setQuery("");
|
|
278
|
+
setSourceId("");
|
|
279
|
+
setTags([]);
|
|
280
|
+
};
|
|
281
|
+
const hostTone = error ? "error" : loading || issues.length ? "warning" : "info";
|
|
282
|
+
const hostLabel = error ? t2("plugins.loadErrorTitle") : loading ? t2("plugins.loading") : issues.length ? t2("plugins.partial") : t2("plugins.observed");
|
|
283
|
+
return /* @__PURE__ */ jsxs2(Surface, { className: "fx-plugins fx-ui", tone: "sidebar", "data-testid": "panel-plugins", children: [
|
|
284
|
+
/* @__PURE__ */ jsx2(
|
|
285
|
+
PanelHeader,
|
|
286
|
+
{
|
|
287
|
+
className: "fx-plugins-header",
|
|
288
|
+
start: /* @__PURE__ */ jsx2(Text, { as: "h2", variant: "heading", children: t2("plugins.title") }),
|
|
289
|
+
center: /* @__PURE__ */ jsx2(Toolbar, { className: "fx-plugins-toolbar", "aria-label": t2("plugins.toolbar"), children: /* @__PURE__ */ jsx2(
|
|
290
|
+
SearchField,
|
|
291
|
+
{
|
|
292
|
+
"data-action": PLUGINS_ACTIONS.search,
|
|
293
|
+
label: t2("plugins.filterLabel"),
|
|
294
|
+
value: query,
|
|
295
|
+
onChange: (event) => setQuery(event.target.value),
|
|
296
|
+
onClear: () => setQuery(""),
|
|
297
|
+
placeholder: t2("plugins.filterPlaceholder")
|
|
298
|
+
}
|
|
299
|
+
) }),
|
|
300
|
+
end: /* @__PURE__ */ jsx2(
|
|
301
|
+
IconButton,
|
|
302
|
+
{
|
|
303
|
+
"data-action": PLUGINS_ACTIONS.refresh,
|
|
304
|
+
label: t2("plugins.refresh"),
|
|
305
|
+
icon: /* @__PURE__ */ jsx2(RefreshCw, { className: "fx-icon" }),
|
|
306
|
+
variant: "quiet",
|
|
307
|
+
size: "compact",
|
|
308
|
+
disabled: loading,
|
|
309
|
+
onClick: () => void refresh()
|
|
310
|
+
}
|
|
311
|
+
)
|
|
312
|
+
}
|
|
313
|
+
),
|
|
314
|
+
/* @__PURE__ */ jsx2(
|
|
315
|
+
PluginFilters,
|
|
316
|
+
{
|
|
317
|
+
sources,
|
|
318
|
+
sourceId,
|
|
319
|
+
tags,
|
|
320
|
+
counts,
|
|
321
|
+
total: entries.length,
|
|
322
|
+
onSource: setSourceId,
|
|
323
|
+
onTag: (tag) => setTags((current) => current.includes(tag) ? current.filter((value) => value !== tag) : [...current, tag]),
|
|
324
|
+
onReset: reset
|
|
325
|
+
}
|
|
326
|
+
),
|
|
327
|
+
/* @__PURE__ */ jsxs2("div", { className: "fx-plugins-summary", children: [
|
|
328
|
+
/* @__PURE__ */ jsxs2(Text, { as: "span", variant: "caption", children: [
|
|
329
|
+
/* @__PURE__ */ jsx2(ShieldCheck, { className: "fx-icon" }),
|
|
330
|
+
" ",
|
|
331
|
+
t2("plugins.resultCount", { count: filtered.length, total: entries.length })
|
|
332
|
+
] }),
|
|
333
|
+
/* @__PURE__ */ jsx2(Status, { tone: hostTone, children: hostLabel })
|
|
334
|
+
] }),
|
|
335
|
+
issues.length > 0 ? /* @__PURE__ */ jsx2("div", { className: "fx-plugins-notice", role: "status", "data-testid": "plugins-partial", children: issues.map((issue) => /* @__PURE__ */ jsxs2("p", { children: [
|
|
336
|
+
issue.sourceId,
|
|
337
|
+
": ",
|
|
338
|
+
issue.message
|
|
339
|
+
] }, issue.sourceId)) }) : null,
|
|
340
|
+
/* @__PURE__ */ jsxs2("div", { className: "fx-plugins-list", children: [
|
|
341
|
+
!error && sources.filter((source) => filtered.some((entry) => entry.sourceId === source.sourceId)).map((source) => /* @__PURE__ */ jsxs2(
|
|
342
|
+
"section",
|
|
343
|
+
{
|
|
344
|
+
className: "fx-plugin-source",
|
|
345
|
+
"aria-label": source.sourceId,
|
|
346
|
+
children: [
|
|
347
|
+
/* @__PURE__ */ jsxs2("div", { className: "fx-plugin-source-header", children: [
|
|
348
|
+
/* @__PURE__ */ jsx2(Text, { variant: "caption", children: source.sourceId }),
|
|
349
|
+
/* @__PURE__ */ jsx2(Text, { variant: "caption", children: filtered.filter((entry) => entry.sourceId === source.sourceId).length })
|
|
350
|
+
] }),
|
|
351
|
+
filtered.filter((entry) => entry.sourceId === source.sourceId).map((entry) => {
|
|
352
|
+
const entryId = `${entry.sourceId}:${entry.entryId}`;
|
|
353
|
+
const sourceId2 = entry.sourceId;
|
|
354
|
+
const label = entry.label || t2("plugins.unnamed");
|
|
355
|
+
const version = entry.version || "\u2014";
|
|
356
|
+
const selected = selectedEntryId === entryId;
|
|
357
|
+
const type = pluginType(entry);
|
|
358
|
+
return /* @__PURE__ */ jsxs2(
|
|
359
|
+
"button",
|
|
360
|
+
{
|
|
361
|
+
type: "button",
|
|
362
|
+
"data-action": PLUGINS_ACTIONS.select,
|
|
363
|
+
className: `fx-plugin-row${selected ? " selected" : ""}`,
|
|
364
|
+
"data-plugin-kind": type,
|
|
365
|
+
"data-plugin-tags": entry.tags.join(" "),
|
|
366
|
+
"data-source-id": sourceId2,
|
|
367
|
+
"data-entry-id": entry.entryId,
|
|
368
|
+
"data-asset-guid": entry.assetGuid,
|
|
369
|
+
"aria-pressed": selected,
|
|
370
|
+
onClick: () => setSelectedEntryId(entryId),
|
|
371
|
+
children: [
|
|
372
|
+
/* @__PURE__ */ jsx2("span", { className: "fx-plugin-icon", children: sourceId2.includes("view-plugin") || sourceId2.includes("viewport") ? /* @__PURE__ */ jsx2(Package, { size: 15 }) : /* @__PURE__ */ jsx2(Box, { size: 15 }) }),
|
|
373
|
+
/* @__PURE__ */ jsxs2("span", { className: "fx-plugin-copy", children: [
|
|
374
|
+
/* @__PURE__ */ jsx2("strong", { title: label, children: label }),
|
|
375
|
+
entry.program && entry.program !== label ? /* @__PURE__ */ jsx2("small", { title: entry.program, children: entry.program }) : null,
|
|
376
|
+
entry.assetGuid ? /* @__PURE__ */ jsxs2("small", { title: t2("plugins.sourceAssetGuidHelp"), children: [
|
|
377
|
+
t2("plugins.sourceAssetGuid"),
|
|
378
|
+
": ",
|
|
379
|
+
entry.assetGuid
|
|
380
|
+
] }) : null,
|
|
381
|
+
selected && entry.operations.length > 0 ? /* @__PURE__ */ jsx2("small", { className: "fx-plugin-operations", children: entry.commands.join(" \xB7 ") }) : null
|
|
382
|
+
] }),
|
|
383
|
+
/* @__PURE__ */ jsx2("span", { className: "fx-plugin-tags", children: entry.tags.map((tag) => /* @__PURE__ */ jsx2(Status, { className: "fx-plugin-type", tone: "info", pill: true, icon: null, children: t2(`plugins.tag.${tag}`) }, tag)) }),
|
|
384
|
+
/* @__PURE__ */ jsx2("span", { className: "fx-plugin-version", children: version }),
|
|
385
|
+
/* @__PURE__ */ jsx2(Status, { className: "fx-plugin-state", tone: stateTone(entry.state), pill: true, children: entry.state })
|
|
386
|
+
]
|
|
387
|
+
},
|
|
388
|
+
entryId
|
|
389
|
+
);
|
|
390
|
+
})
|
|
391
|
+
]
|
|
392
|
+
},
|
|
393
|
+
source.sourceId
|
|
394
|
+
)),
|
|
395
|
+
!error && !loading && filtered.length === 0 ? /* @__PURE__ */ jsx2(
|
|
396
|
+
EmptyState,
|
|
397
|
+
{
|
|
398
|
+
icon: /* @__PURE__ */ jsx2(SearchX, { className: "fx-plugins-empty-icon" }),
|
|
399
|
+
title: entries.length === 0 ? t2("plugins.empty") : t2("plugins.emptyTitle"),
|
|
400
|
+
description: tags.includes("game") && !entries.some((entry) => entry.tags.includes("game")) ? t2("plugins.gameUnavailable") : entries.length === 0 ? t2("plugins.unavailable") : t2("plugins.emptyDescription")
|
|
401
|
+
}
|
|
402
|
+
) : null,
|
|
403
|
+
error ? /* @__PURE__ */ jsx2(
|
|
404
|
+
EmptyState,
|
|
405
|
+
{
|
|
406
|
+
title: t2("plugins.loadErrorTitle"),
|
|
407
|
+
description: error,
|
|
408
|
+
action: /* @__PURE__ */ jsx2(IconButton, { label: t2("plugins.retry"), icon: /* @__PURE__ */ jsx2(RefreshCw, { className: "fx-icon" }), onClick: () => void refresh() })
|
|
409
|
+
}
|
|
410
|
+
) : null
|
|
411
|
+
] })
|
|
412
|
+
] });
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
export {
|
|
416
|
+
PluginsPanel
|
|
417
|
+
};
|
|
418
|
+
//# sourceMappingURL=chunk-QLZQGZDC.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../packages/view-plugin-plugins/src/ui/PluginsPanel.tsx", "../../../packages/view-plugin-plugins/src/i18n/useTranslation.ts", "../../../packages/view-plugin-plugins/src/ui/plugin-entries.mjs", "../../../packages/view-plugin-plugins/src/ui/PluginFilters.tsx"],
|
|
4
|
+
"sourcesContent": ["import { useCallback, useEffect, useRef, useState } from 'react';\nimport { jsonUnchanged } from '@forgeax/view-workspace-core/contract';\nimport {\n EmptyState,\n IconButton,\n PanelHeader,\n SearchField,\n Status,\n Surface,\n Text,\n Toolbar,\n type StatusTone,\n} from '@forgeax/view-components';\nimport { Box, Package, RefreshCw, SearchX, ShieldCheck } from 'lucide-react';\nimport { useTranslation } from '../i18n/useTranslation';\nimport { PLUGINS_ACTIONS } from '../schema.mjs';\n\nimport { filterPluginEntries, loadPluginSnapshot, PLUGIN_TAGS } from './plugin-entries.mjs';\nimport { PluginFilters, type PluginSource } from './PluginFilters';\n\ntype PluginEntry = {\n entryId: string;\n module: string;\n sourceId: string;\n label: string;\n version: string;\n state: string;\n kind?: string;\n tags: string[];\n operations: string[];\n commands: string[];\n assetGuid?: string;\n program?: string;\n};\n\ntype PluginsInspectorClient = {\n sources?: (options?: { signal?: AbortSignal }) => Promise<unknown>;\n inspect?: (options: {\n sourceId: string;\n generation: number;\n signal?: AbortSignal;\n }) => Promise<unknown>;\n inspectPlugins?: PluginsInspectorClient['inspect'];\n};\n\nfunction pluginType(entry: PluginEntry) {\n return entry.kind ?? 'unknown';\n}\n\nfunction stateTone(state: string): StatusTone {\n if (state === 'active') return 'success';\n if (state === 'failed' || state === 'error') return 'error';\n if (state === 'pending' || state === 'loading' || state === 'unloading') return 'warning';\n return 'info';\n}\n\nexport function PluginsPanel(props: { client?: PluginsInspectorClient; workspaceClient?: PluginsInspectorClient; hostAssembly?: unknown; connectionId?: string }) {\n const { t } = useTranslation();\n const inspector = props.client ?? props.workspaceClient;\n const [entries, setEntries] = useState<PluginEntry[]>([]);\n const [sources, setSources] = useState<PluginSource[]>([]);\n const [issues, setIssues] = useState<{ sourceId: string; message: string }[]>([]);\n const [sourceId, setSourceId] = useState('');\n const [tags, setTags] = useState<string[]>([]);\n const [query, setQuery] = useState('');\n const [error, setError] = useState<string | null>(null);\n const [loading, setLoading] = useState(false);\n const [selectedEntryId, setSelectedEntryId] = useState<string | null>(null);\n\n const request = useRef(0);\n const refresh = useCallback(async () => {\n const revision = ++request.current;\n setLoading(true);\n setError(null);\n try {\n const snapshot = await loadPluginSnapshot({ client: inspector, hostAssembly: props.hostAssembly, connectionId: props.connectionId });\n if (revision !== request.current) return;\n setEntries((current) => jsonUnchanged(current, snapshot.entries) ? current : snapshot.entries);\n setSources((current) => jsonUnchanged(current, snapshot.sources) ? current : snapshot.sources);\n setIssues((current) => jsonUnchanged(current, snapshot.issues) ? current : snapshot.issues);\n } catch (cause) {\n if (revision !== request.current) return;\n setEntries([]);\n setSources([]);\n setIssues([]);\n setError(cause instanceof Error ? cause.message : t('plugins.loadErrorTitle'));\n } finally {\n if (revision === request.current) setLoading(false);\n }\n }, [inspector, props.hostAssembly, props.connectionId, t]);\n\n useEffect(() => {\n void refresh();\n return () => { request.current += 1; };\n }, [refresh]);\n\n const filtered: PluginEntry[] = filterPluginEntries(entries, { query, sourceId, tags });\n const candidates: PluginEntry[] = filterPluginEntries(entries, { query, sourceId });\n const counts: Record<string, number> = Object.fromEntries(PLUGIN_TAGS.map((tag: string) => [tag, candidates.filter(entry => entry.tags.includes(tag)).length]));\n for (const source of sources) counts[`host:${source.sourceId}`] = entries.filter(entry => entry.sourceId === source.sourceId).length;\n const reset = () => { setQuery(''); setSourceId(''); setTags([]); };\n\n const hostTone: StatusTone = error ? 'error' : loading || issues.length ? 'warning' : 'info';\n const hostLabel = error\n ? t('plugins.loadErrorTitle')\n : loading\n ? t('plugins.loading')\n : issues.length ? t('plugins.partial') : t('plugins.observed');\n\n return (\n <Surface className=\"fx-plugins fx-ui\" tone=\"sidebar\" data-testid=\"panel-plugins\">\n <PanelHeader\n className=\"fx-plugins-header\"\n start={<Text as=\"h2\" variant=\"heading\">{t('plugins.title')}</Text>}\n center={(\n <Toolbar className=\"fx-plugins-toolbar\" aria-label={t('plugins.toolbar')}>\n <SearchField\n data-action={PLUGINS_ACTIONS.search}\n label={t('plugins.filterLabel')}\n value={query}\n onChange={(event) => setQuery(event.target.value)}\n onClear={() => setQuery('')}\n placeholder={t('plugins.filterPlaceholder')}\n />\n </Toolbar>\n )}\n end={(\n <IconButton\n data-action={PLUGINS_ACTIONS.refresh}\n label={t('plugins.refresh')}\n icon={<RefreshCw className=\"fx-icon\" />}\n variant=\"quiet\"\n size=\"compact\"\n disabled={loading}\n onClick={() => void refresh()}\n />\n )}\n />\n <PluginFilters sources={sources} sourceId={sourceId} tags={tags} counts={counts} total={entries.length}\n onSource={setSourceId} onTag={tag => setTags(current => current.includes(tag) ? current.filter(value => value !== tag) : [...current, tag])}\n onReset={reset} />\n <div className=\"fx-plugins-summary\">\n <Text as=\"span\" variant=\"caption\">\n <ShieldCheck className=\"fx-icon\" /> {t('plugins.resultCount', { count: filtered.length, total: entries.length })}\n </Text>\n <Status tone={hostTone}>{hostLabel}</Status>\n </div>\n {issues.length > 0 ? <div className=\"fx-plugins-notice\" role=\"status\" data-testid=\"plugins-partial\">\n {issues.map(issue => <p key={issue.sourceId}>{issue.sourceId}: {issue.message}</p>)}\n </div> : null}\n <div className=\"fx-plugins-list\">\n {!error && sources.filter(source => filtered.some(entry => entry.sourceId === source.sourceId)).map(source => <section\n key={source.sourceId} className=\"fx-plugin-source\" aria-label={source.sourceId}>\n <div className=\"fx-plugin-source-header\"><Text variant=\"caption\">{source.sourceId}</Text>\n <Text variant=\"caption\">{filtered.filter(entry => entry.sourceId === source.sourceId).length}</Text></div>\n {filtered.filter(entry => entry.sourceId === source.sourceId).map((entry) => {\n const entryId = `${entry.sourceId}:${entry.entryId}`;\n const sourceId = entry.sourceId;\n const label = entry.label || t('plugins.unnamed');\n const version = entry.version || '\u2014';\n const selected = selectedEntryId === entryId;\n const type = pluginType(entry);\n return (\n <button\n type=\"button\"\n key={entryId}\n data-action={PLUGINS_ACTIONS.select}\n className={`fx-plugin-row${selected ? ' selected' : ''}`}\n data-plugin-kind={type}\n data-plugin-tags={entry.tags.join(' ')}\n data-source-id={sourceId}\n data-entry-id={entry.entryId}\n data-asset-guid={entry.assetGuid}\n aria-pressed={selected}\n onClick={() => setSelectedEntryId(entryId)}\n >\n <span className=\"fx-plugin-icon\">{sourceId.includes('view-plugin') || sourceId.includes('viewport') ? <Package size={15} /> : <Box size={15} />}</span>\n <span className=\"fx-plugin-copy\">\n <strong title={label}>{label}</strong>\n {entry.program && entry.program !== label ? <small title={entry.program}>{entry.program}</small> : null}\n {entry.assetGuid ? <small title={t('plugins.sourceAssetGuidHelp')}>{t('plugins.sourceAssetGuid')}: {entry.assetGuid}</small> : null}\n {selected && entry.operations.length > 0 ? <small className=\"fx-plugin-operations\">{entry.commands.join(' \u00B7 ')}</small> : null}\n </span>\n <span className=\"fx-plugin-tags\">{entry.tags.map(tag => <Status key={tag} className=\"fx-plugin-type\" tone=\"info\" pill icon={null}>{t(`plugins.tag.${tag}`)}</Status>)}</span>\n <span className=\"fx-plugin-version\">{version}</span>\n <Status className=\"fx-plugin-state\" tone={stateTone(entry.state)} pill>\n {entry.state}\n </Status>\n </button>\n );\n })}</section>)}\n {!error && !loading && filtered.length === 0 ? (\n <EmptyState\n icon={<SearchX className=\"fx-plugins-empty-icon\" />}\n title={entries.length === 0 ? t('plugins.empty') : t('plugins.emptyTitle')}\n description={tags.includes('game') && !entries.some(entry => entry.tags.includes('game'))\n ? t('plugins.gameUnavailable') : entries.length === 0 ? t('plugins.unavailable') : t('plugins.emptyDescription')}\n />\n ) : null}\n {error ? (\n <EmptyState\n title={t('plugins.loadErrorTitle')}\n description={error}\n action={<IconButton label={t('plugins.retry')} icon={<RefreshCw className=\"fx-icon\" />} onClick={() => void refresh()} />}\n />\n ) : null}\n </div>\n </Surface>\n );\n}\n", "import { useCallback, useSyncExternalStore } from 'react';\n\nimport { getLocale, subscribeLocale, t as translate } from './index.mjs';\n\nexport function useTranslation() {\n const locale = useSyncExternalStore(subscribeLocale, getLocale, getLocale);\n const t = useCallback(\n (key: string, vars?: Record<string, string | number>) => translate(key, vars),\n [locale],\n );\n return { t, locale };\n}\n", "export const PLUGIN_TAGS = Object.freeze(['backend', 'frontend', 'game', 'asset', 'api', 'cli']);\n\nfunction entriesFor(source) {\n const { sourceId, kind, assembly, actual, plugins = [], api } = source;\n const installed = new Map((actual?.entries ?? []).map(entry => [entry.entryId ?? entry.id, entry]));\n // Backend assembly.current is the FRONTEND projection, not backend installations.\n const records = plugins;\n const declared = new Map();\n for (const entry of records) {\n const id = entry.entryId ?? entry.id;\n declared.set(id, { ...declared.get(id), ...entry });\n }\n const entries = new Map();\n for (const entry of declared.values()) {\n const entryId = entry.entryId ?? entry.id;\n if (!entryId) continue;\n const module = entry.module ?? entry.name;\n const observed = installed.get(entryId);\n const realm = observed?.realm ?? entry.realm;\n const operations = (api?.operations ?? []).filter(({ owner }) => owner && (\n entryId === `provider:${owner.sourceId}:${owner.providerId}` ||\n entryId === owner.fiberId || (entry.fiberId !== undefined && String(entry.fiberId) === String(owner.fiberId))\n ));\n const tags = new Set();\n if (kind === 'backend' || kind === 'frontend') tags.add(kind);\n // A View frontend may use Engine's engine realm. Realm alone is not gameplay evidence.\n const required = observed?.requiredServices ?? entry.requiredServices ?? [];\n if (kind === 'game' || kind === 'engine' ||\n (realm === 'engine' && required.some(service => service === 'world' || service === 'gameHost'))) tags.add('game');\n if (entry.assetGuid) tags.add('asset');\n if (operations.length) tags.add('api');\n const commands = operations.map(({ descriptor }) => descriptor?.path ?? descriptor?.id?.split('.'))\n .filter(path => Array.isArray(path) && path.length > 0).map(path => path.join(' '));\n if (commands.length || entry.commandContract) tags.add('cli');\n entries.set(entryId, {\n sourceId, entryId, module,\n label: module && module !== 'unknown' ? module : entry.program || entry.assetGuid || '', kind,\n ...(entry.assetGuid ? { assetGuid: entry.assetGuid } : {}),\n ...(entry.program ? { program: entry.program } : {}),\n realm,\n version: entry.program && entry.program === assembly?.root?.program ? assembly.root.codeRevision : '',\n state: observed?.fiberState ?? entry.fiberState ?? (entry.disabled || entry.desiredState === 'disabled' ? 'disabled' : 'unknown'),\n tags: [...tags],\n operations: operations.map(operation => operation.descriptor.id),\n commands,\n });\n }\n return [...entries.values()];\n}\n\n/** Both public clients are supported; methods must keep their transport-bound receiver. */\nexport function pluginInspector(client) {\n const inspect = typeof client?.inspect === 'function' ? client.inspect : client?.inspectPlugins;\n if (typeof client?.sources !== 'function' || typeof inspect !== 'function') return undefined;\n return { sources: client.sources.bind(client), inspect: inspect.bind(client) };\n}\n\n/** One failed or unavailable source must not masquerade as a complete frontend-only inventory. */\nexport async function loadPluginSnapshot({ client, hostAssembly, connectionId } = {}) {\n const sources = [];\n const issues = [];\n const local = hostAssembly ? {\n sourceId: connectionId ? `view-frontend:${connectionId}` : 'view-frontend',\n kind: 'frontend', assembly: hostAssembly.current, actual: hostAssembly.status,\n plugins: (hostAssembly.inspection ?? []).map(item => ({\n entryId: `fiber:${item.uid}`,\n module: item.name,\n fiberState: item.state,\n ...(item.origin?.guid ? { assetGuid: item.origin.guid } : {}),\n ...(item.origin?.program ? { program: item.origin.program } : {}),\n missingServices: item.missingServices,\n })), local: true,\n } : undefined;\n const inspector = pluginInspector(client);\n if (!inspector) issues.push({ sourceId: 'remote-hosts', message: 'Remote Host inspection unavailable. Only locally observed entries are shown.' });\n else {\n try {\n const listed = await inspector.sources();\n const ownConnection = connectionId ?? listed.caller?.connectionId;\n if (local && ownConnection) local.sourceId = `view-frontend:${ownConnection}`;\n const remote = (listed.sources ?? []).filter(source => !local || !ownConnection ||\n (source.sourceId !== local.sourceId && source.connection?.connectionId !== ownConnection));\n const results = await Promise.allSettled(remote.map(source => inspector.inspect({\n sourceId: source.sourceId, generation: source.generation,\n })));\n results.forEach((result, index) => {\n const source = remote[index];\n if (result.status === 'fulfilled') sources.push({ ...source, ...result.value });\n else {\n sources.push({ ...source, unavailable: true });\n issues.push({ sourceId: source.sourceId, message: result.reason?.message ?? String(result.reason) });\n }\n });\n } catch (cause) {\n issues.push({ sourceId: 'remote-hosts', message: cause?.message ?? String(cause) });\n }\n }\n if (local) sources.push(local);\n sources.sort((a, b) => (a.kind === 'backend' ? 0 : 1) - (b.kind === 'backend' ? 0 : 1) || a.sourceId.localeCompare(b.sourceId));\n return { sources, entries: sources.flatMap(entriesFor), issues };\n}\n\n/** Entry-only callers require complete inspection; the UI can display partial snapshots. */\nexport async function loadPluginEntries(options) {\n const snapshot = await loadPluginSnapshot(options);\n if (snapshot.issues.length) throw new Error(snapshot.issues.map(issue => issue.message).join('; '));\n return snapshot.entries;\n}\n\n/** Search and Host selection intersect; selected capability tags use AND semantics.\n * @param {any[]} entries\n * @param {{ query?: string, sourceId?: string, tags?: string[] }} options\n */\nexport function filterPluginEntries(entries, { query = '', sourceId = '', tags = [] } = {}) {\n const search = query.trim().toLowerCase();\n return entries.filter(entry => (!sourceId || entry.sourceId === sourceId) &&\n tags.every(tag => entry.tags.includes(tag)) &&\n [entry.entryId, entry.module, entry.assetGuid, entry.program, entry.sourceId, entry.kind, entry.realm, entry.state,\n ...entry.tags, ...entry.operations, ...entry.commands].join(' ').toLowerCase().includes(search));\n}\n", "import { Button, Text } from '@forgeax/view-components';\nimport { useTranslation } from '../i18n/useTranslation';\nimport { PLUGIN_TAGS } from './plugin-entries.mjs';\n\nexport type PluginSource = { sourceId: string; kind: string; local?: boolean; unavailable?: boolean };\n\nexport function PluginFilters({ sources, sourceId, tags, counts, total, onSource, onTag, onReset }: {\n sources: PluginSource[];\n sourceId: string;\n tags: string[];\n counts: Record<string, number>;\n total: number;\n onSource: (sourceId: string) => void;\n onTag: (tag: string) => void;\n onReset: () => void;\n}) {\n const { t } = useTranslation();\n return <div className=\"fx-plugins-filters\">\n <div className=\"fx-plugins-filter-row\" role=\"group\" aria-label={t('plugins.hosts')}>\n <Text variant=\"caption\" className=\"fx-plugins-filter-label\">{t('plugins.hosts')}</Text>\n <Button size=\"compact\" variant=\"quiet\" className=\"fx-plugin-filter\" aria-pressed={!sourceId}\n data-plugin-host=\"all\" onClick={() => onSource('')}>{t('plugins.allHosts')} <span>{total}</span></Button>\n {sources.map(source => <Button key={source.sourceId} size=\"compact\" variant=\"quiet\"\n className=\"fx-plugin-filter\" aria-pressed={sourceId === source.sourceId} title={source.sourceId}\n data-plugin-host={source.sourceId} onClick={() => onSource(source.sourceId)}>\n {source.local ? t('plugins.thisFrontend') : source.sourceId}\n <span>{counts[`host:${source.sourceId}`] ?? 0}{source.unavailable ? ' !' : ''}</span>\n </Button>)}\n </div>\n <div className=\"fx-plugins-filter-row\" role=\"group\" aria-label={t('plugins.tags')}>\n <Text variant=\"caption\" className=\"fx-plugins-filter-label\">{t('plugins.tags')}</Text>\n {PLUGIN_TAGS.map((tag: string) => <Button key={tag} size=\"compact\" variant=\"quiet\"\n className=\"fx-plugin-filter\" aria-pressed={tags.includes(tag)} title={t(`plugins.tagHelp.${tag}`)}\n data-plugin-tag={tag} onClick={() => onTag(tag)}>{t(`plugins.tag.${tag}`)} <span>{counts[tag] ?? 0}</span></Button>)}\n <Button size=\"compact\" variant=\"quiet\" data-action=\"plugins.reset\" onClick={onReset}>{t('plugins.reset')}</Button>\n </div>\n <Text variant=\"caption\" className=\"fx-plugins-filter-help\">{t('plugins.filterHelp')}</Text>\n </div>;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["useCallback", "t", "t", "jsx", "jsxs", "t", "useCallback", "sourceId"]
|
|
7
|
+
}
|