@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,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../packages/view-workspace-core/src/broker.mjs", "../../../packages/view-workspace-core/src/file-preview.mjs"],
|
|
4
|
+
"sourcesContent": ["import { randomUUID } from 'node:crypto';\nimport { runWorkspaceToolApi } from './tool-runtime.mjs';\nimport {\n VIEW_DISPLAY_TAB_ID, VIEW_WORKSPACE_TAB_ID, VIEW_WORKSPACE_API_VERSION,\n VIEW_FILE_GET_SERVICE, VIEW_WORKSPACE_SERVICES, VIEW_WORKSPACE_STATE_TOPIC, VIEW_WORKSPACE_OPERATIONS,\n assertWorkspaceRequest, cloneWorkspaceValue, requireWorkspaceString,\n serializeWorkspaceState, serializeWorkspaceAsset, serializeWorkspaceInspection,\n serializeWorkspaceOpenRequest, workspaceCapabilities, workspaceError,\n workspaceUiFingerprint,\n} from './contract.mjs';\nimport { createWorkspaceId } from './id.mjs';\nimport {\n editorSceneTargetIds,\n isEditorWorkspaceAsset,\n isTypePreviewAsset,\n logResourceOpen,\n selectEditorWorkspacePreview,\n summarizeResourceAsset,\n} from './resource-open.mjs';\nimport { readWorkspaceFilePreview } from './file-preview.mjs';\nimport {\n isWorkspaceTargetRecoveryCode,\n resolveWorkspaceFailure,\n resolveWorkspaceReopenRoot,\n} from './workspace-recovery.mjs';\n\nconst ENGINE_SOURCE = 'engine-workspace';\nconst UI_OPERATIONS = Object.freeze({\n 'target.select': (workspace, args) => workspace.selectTarget(args),\n 'tabs.get': (workspace) => workspace.snapshot(),\n 'tabs.select': (workspace, args) => workspace.selectTab(args),\n 'scene.select': (workspace, args, context) => workspace.selectSceneEntity(args, context),\n 'scene.pick': (workspace, args, context) => workspace.pickSceneEntity(args, context),\n 'scene.clear': (workspace, args, context) => workspace.clearSceneSelection(args, context),\n});\n\n/** View bindings and display snapshots. Engine owns all project and target resources. */\nexport class ViewWorkspaceBroker {\n constructor({ engine, toolApi, display = () => undefined, accessToken = randomUUID(), authorize } = {}) {\n this.engine = engine;\n this.toolApi = toolApi;\n this.display = display;\n this.accessToken = accessToken;\n this.authorize = authorize;\n this.selectedTabId = VIEW_WORKSPACE_TAB_ID;\n this.targetBinding = 'editor';\n this.editorTargetId = undefined;\n this.playOwner = undefined;\n this.revision = 0;\n this.listeners = new Set();\n this.assets = null;\n this.inspection = null;\n this.openRequest = null;\n this.openRequestSequence = 0;\n this.resourceOpens = new Map();\n this.sceneSelection = null;\n this.selectionAbort?.abort();\n this.previewProjection = null;\n this.projectOwner = undefined;\n this.previewOwner = undefined;\n this.workspaceTargetLost = false;\n this.disposing = false;\n this.publishFingerprint = '';\n }\n\n get project() { return this.engine?.project?.project ?? null; }\n get projectTarget() { return this.engine?.project?.target ?? null; }\n get preview() { this.syncBindings(); return this.previewProjection; }\n\n previews() { return this.engine?.previews ?? (this.engine?.preview ? [this.engine.preview] : []); }\n classifiedPreviews() {\n return this.previews().map((preview) => ({\n target: preview.target,\n asset: this.hydrateAsset(preview.asset),\n }));\n }\n editorPreview() {\n const live = this.previews();\n const selected = selectEditorWorkspacePreview(this.classifiedPreviews(), this.editorTargetId);\n if (!selected) return undefined;\n return live.find((preview) => String(preview.target.targetId) === String(selected.target.targetId));\n }\n boundTarget() { return this.targetBinding === 'play' ? this.engine?.play : this.previews().find(preview => preview.target.targetId === this.previewTargetId) ?? this.editorPreview(); }\n hydrateAsset(asset) {\n if (!asset?.guid) return asset ?? null;\n if (asset.kind) return asset;\n const catalog = Array.isArray(this.assets)\n ? this.assets.find((entry) => entry.guid === asset.guid)\n : undefined;\n if (!catalog?.kind) return asset;\n return { ...asset, kind: catalog.kind, name: asset.name ?? catalog.name };\n }\n selectTarget({ targetId } = {}) {\n if (targetId === this.engine?.play?.target.targetId) this.targetBinding = 'play';\n else {\n const preview = this.previews().find((entry) => entry.target.targetId === targetId);\n if (!preview) throw workspaceError('view-workspace-target-mismatch', 'An existing preview or Play target', 'Refresh tabs.get.');\n this.targetBinding = 'editor';\n this.previewTargetId = targetId;\n if (isEditorWorkspaceAsset(this.hydrateAsset(preview.asset))) this.editorTargetId = String(targetId);\n }\n this.changed();\n return this.snapshot();\n }\n syncBindings() {\n if (this.playOwner !== this.engine?.play) {\n this.playOwner = this.engine?.play;\n this.targetBinding = this.playOwner ? 'play' : 'editor';\n if (!this.playOwner) this.previewTargetId = this.editorPreview()?.target.targetId;\n }\n if (this.projectOwner !== this.engine?.project) {\n this.projectOwner = this.engine?.project;\n this.assets = null;\n this.inspection = null;\n this.openRequest = null;\n this.openRequestSequence = 0;\n this.resourceOpens = new Map();\n this.editorTargetId = undefined;\n this.sceneSelection = null;\n this.selectionAbort?.abort();\n }\n if (this.previewOwner !== this.boundTarget()) {\n this.previewOwner = this.boundTarget();\n this.sceneSelection = null;\n this.selectionAbort?.abort();\n this.previewProjection = this.previewOwner ? {\n target: this.previewOwner.target, asset: this.previewOwner.asset,\n presentation: this.previewOwner.presentation,\n } : null;\n }\n }\n\n snapshot() {\n this.syncBindings();\n const display = this.display?.();\n return serializeWorkspaceState({\n revision: this.revision, selectedTabId: this.selectedTabId,\n tabs: [\n { tabId: VIEW_DISPLAY_TAB_ID, kind: 'display', selected: this.selectedTabId === VIEW_DISPLAY_TAB_ID,\n state: display?.state, run: display?.occupancy?.run, target: display?.occupancy?.target,\n targetId: display?.occupancy?.targetId },\n { tabId: VIEW_WORKSPACE_TAB_ID, kind: 'workspace', selected: this.selectedTabId === VIEW_WORKSPACE_TAB_ID,\n state: this.previewProjection ? 'previewing' : this.project ? 'project-open' : 'empty',\n ...(this.previewProjection?.target ?? this.projectTarget ? { target: this.previewProjection?.target ?? this.projectTarget } : {}) },\n ],\n project: this.project, projectTarget: this.projectTarget,\n assets: this.assets,\n preview: this.previewProjection && { ...this.previewProjection, target: this.boundTarget().target, asset: this.hydrateAsset(this.previewProjection.asset) },\n editorPreview: this.editorPreview() ? { target: this.editorPreview().target, asset: this.hydrateAsset(this.editorPreview().asset) } : null,\n previews: this.previews().map(preview => ({ target: preview.target, asset: this.hydrateAsset(preview.asset) })),\n play: this.engine?.play ? { target: this.engine.play.target, phase: this.engine.play.phase } : null,\n targetBinding: this.targetBinding,\n inspection: this.inspection,\n openRequest: this.openRequest,\n resourceOpens: Object.fromEntries(this.resourceOpens),\n sceneSelection: this.sceneSelection,\n workspaceTargetLost: this.workspaceTargetLost,\n });\n }\n\n changed() {\n const current = this.snapshot();\n const fingerprint = workspaceUiFingerprint(current);\n if (fingerprint === this.publishFingerprint) return;\n this.revision += 1;\n const state = this.snapshot();\n this.publishFingerprint = workspaceUiFingerprint(state);\n for (const listener of this.listeners) { try { listener(state); } catch { /* UI observers do not own operations. */ } }\n }\n subscribe(listener) {\n this.listeners.add(listener);\n const state = this.snapshot();\n this.publishFingerprint ||= workspaceUiFingerprint(state);\n listener(state);\n return () => this.listeners.delete(listener);\n }\n capabilities() {\n const descriptions = this.toolApi?.list().filter(record => record.callable && (record.owner.sourceId === ENGINE_SOURCE || record.descriptor.id.startsWith('view.display.')))\n .map(record => ({ id: record.descriptor.id.replace(/^(engine|view)\\./, ''), path: record.descriptor.path, title: record.descriptor.title, summary: record.descriptor.summary, inputSchema: record.descriptor.inputSchema, outputSchema: record.descriptor.outputSchema })) ?? [];\n const operations = [...Object.keys(UI_OPERATIONS), ...descriptions.map(item => item.id),\n ...VIEW_WORKSPACE_OPERATIONS.filter(id => id.startsWith('plugins.') && this.toolApi?.describe(id, 'view-backend').some(record => record.callable))]\n .filter(id => VIEW_WORKSPACE_OPERATIONS.includes(id));\n return { ...workspaceCapabilities({ ready: !!this.engine && !this.disposing, headed: this.projectTarget?.headed === true, operations }), descriptions };\n }\n async authorizeRequest(request, caller) {\n if (this.disposing) throw workspaceError('view-workspace-stopping', 'View bindings to remain available', 'Reconnect to the backend.');\n if (request.token !== this.accessToken || (this.authorize && !await this.authorize({ clientId: request.clientId, operation: request.operation, request, caller }))) {\n throw workspaceError('view-workspace-unauthorized', 'an authorized workspace connection', 'Connect with the issued token.', { clientId: request.clientId });\n }\n }\n async call(rawRequest, { signal, caller } = {}) {\n const request = assertWorkspaceRequest(rawRequest);\n await this.authorizeRequest(request, caller);\n const ui = UI_OPERATIONS[request.operation];\n if (ui) return ui(this, request.args, { signal, caller, clientId: request.clientId });\n if (request.operation === 'project.reopen') {\n return this.reopenProject(request.args, {\n signal,\n caller,\n clientId: request.clientId,\n token: request.token,\n requestId: request.requestId,\n });\n }\n return this.invoke(request.operation, request.args, { signal, caller, clientId: request.clientId, token: request.token, requestId: request.requestId });\n }\n async invoke(operation, args = {}, { signal, caller, clientId = 'view-owner', token, requestId } = {}) {\n const { tabId, ...input } = args;\n if (tabId !== undefined) this.assertWorkspaceTab(tabId);\n const inspector = operation.startsWith('plugins.');\n const presentation = operation.startsWith('display.');\n const id = inspector ? operation : `${presentation ? 'view' : 'engine'}.${operation}`;\n const sourceId = inspector || presentation ? 'view-backend' : ENGINE_SOURCE;\n const owner = this.toolApi?.describe(id, sourceId).find(record => record.callable)?.owner;\n if (!owner) throw workspaceError('view-workspace-operation-unavailable', `Engine operation ${operation} to be installed`, 'Enable the Engine capability; UI plugins do not provide domain APIs.', { operation });\n const requestedPreview = [...this.previews(), this.engine?.play].find(preview => preview?.target.targetId === input.targetId);\n const terminal = await this.toolApi.run(id, inspector ? {\n apiVersion: 'forgeax.view.inspector/1', operation, args: input, ...input, clientId, token, requestId,\n } : presentation ? input : { ...input, clientId }, { sourceId, providerId: owner.providerId, generation: owner.generation, caller, signal }).terminal;\n if (terminal.outcome === 'failed') {\n const resolved = resolveWorkspaceFailure(terminal.failure);\n const addressesWorkspace = input.targetId === undefined ||\n [this.projectTarget, this.editorPreview()?.target].some(target => target &&\n target.targetId === input.targetId &&\n (input.targetGeneration === undefined || target.generation === input.targetGeneration));\n if (isWorkspaceTargetRecoveryCode(resolved.code) && addressesWorkspace) {\n this.workspaceTargetLost = true;\n }\n // Engine can revoke a target before its asynchronous close completes and\n // publishes state. Reconcile the actual binding before returning a late\n // query failure, so observers can revoke their obsolete requests.\n this.changed();\n throw workspaceError(resolved.code, resolved.expected, resolved.hint, resolved.detail);\n }\n const result = terminal.result;\n if (Array.isArray(result?.assets)) this.assets = result.assets.map(asset => serializeWorkspaceAsset({ ...asset, ...(asset.ddc || !asset.cookReceiptUrl ? {} : { ddc: { receiptUrl: asset.cookReceiptUrl } }) }));\n if (result?.inspection) this.inspection = serializeWorkspaceInspection(result.inspection);\n if (operation === 'asset.open') this.bindOpenedAsset(result, input.guid);\n if (operation === 'preview.close' && input.targetId != null && String(input.targetId) === this.editorTargetId) {\n this.editorTargetId = undefined;\n }\n this.syncBindings();\n if (operation === 'asset.open') this.recordOpenRequest({ requestId, result, guid: input.guid });\n if ((operation.startsWith('camera.') || operation === 'target.control') && this.previewProjection && this.boundTarget() === requestedPreview) {\n this.previewProjection.camera = result?.camera;\n this.previewProjection.cameraVersion = result?.version;\n this.previewProjection.interaction = result?.interaction ?? null;\n }\n if (!['scene-tree.get', 'entity.inspect', 'workspace.get', 'preview.capture'].includes(operation)) this.changed();\n if (['project.open', 'project.close', 'project.reopen', 'asset.open', 'preview.close', 'camera.abort', 'play.start', 'play.ready', 'play.stop'].includes(operation)) {\n if (operation === 'project.open' || operation === 'project.reopen') this.workspaceTargetLost = false;\n return this.snapshot();\n }\n if (operation.startsWith('camera.')) return { ...cloneWorkspaceValue(result), apiVersion: VIEW_WORKSPACE_API_VERSION, target: requestedPreview?.target };\n if (operation === 'assets.list') return { ...cloneWorkspaceValue(result), assets: this.assets };\n return cloneWorkspaceValue(result);\n }\n assertWorkspaceTab(tabId) {\n requireWorkspaceString(tabId, 'tabId');\n if (tabId !== VIEW_WORKSPACE_TAB_ID) throw workspaceError('view-workspace-tab-read-only', 'the Editor binding', 'Address AI execution through the Engine run API.', { tabId });\n }\n selectTab({ tabId } = {}) {\n if (![VIEW_DISPLAY_TAB_ID, VIEW_WORKSPACE_TAB_ID].includes(tabId)) throw workspaceError('view-workspace-tab-not-found', 'an existing tab', 'Refresh tabs.get.', { tabId });\n this.selectedTabId = tabId; this.changed(); return this.snapshot();\n }\n async selectSceneEntity(args = {}, context) {\n requireWorkspaceString(args.entityId, 'entityId');\n return this.changeSceneSelection(args, context, () => args);\n }\n pickSceneEntity(args = {}, context) {\n return this.changeSceneSelection(args, context, async requestContext => {\n const result = await this.invoke('target.pick', args, requestContext);\n if (result?.entityId === null) return null;\n requireWorkspaceString(result?.entityId, 'pick.entityId');\n return { entityId: result.entityId };\n });\n }\n clearSceneSelection(args = {}, context) {\n return this.changeSceneSelection(args, context, () => null);\n }\n async changeSceneSelection({ tabId, targetId, targetGeneration } = {}, context, resolveSelection) {\n if (tabId !== undefined) this.assertWorkspaceTab(tabId);\n this.syncBindings();\n const requested = this.boundTarget();\n if (!requested || requested.target.targetId !== targetId || requested.target.generation !== targetGeneration) throw workspaceError('view-workspace-selection-stale', 'The bound target and generation', 'Select the target before changing its selection.');\n this.selectionAbort?.abort();\n const controller = new AbortController();\n this.selectionAbort = controller;\n const signal = context?.signal ? AbortSignal.any([context.signal, controller.signal]) : controller.signal;\n const requestContext = { ...context, signal };\n const assertCurrent = () => {\n signal.throwIfAborted();\n if (this.boundTarget() !== requested) throw workspaceError('view-workspace-selection-stale', 'The same selected target', 'Refresh the hierarchy.');\n };\n const selection = await resolveSelection(requestContext);\n assertCurrent();\n const { entityId, label } = selection ?? {};\n if (selection) {\n const result = await this.invoke('entity.inspect', { entityId, targetId, targetGeneration }, requestContext);\n assertCurrent();\n if (result?.entityId !== entityId) throw workspaceError(\n 'view-workspace-selection-stale', 'The inspected entity on the same target', 'Refresh the hierarchy before selecting.');\n }\n await this.invoke('entity.highlight', { ...(selection ? { entityId } : {}), targetId, targetGeneration }, requestContext);\n assertCurrent();\n this.sceneSelection = selection ? { primary: { entityId, ...(label === undefined ? {} : { label: String(label) }) }, targetId, targetGeneration } : null;\n this.changed();\n return this.snapshot();\n }\n openProject(args, context) { return this.invoke('project.open', args, context); }\n async reopenProject(args = {}, context) {\n const root = resolveWorkspaceReopenRoot(this.snapshot(), args.root);\n const { tabId, ...rest } = args;\n return this.openProject({ ...rest, root, ...(tabId === undefined ? {} : { tabId }) }, context);\n }\n closeProject(args, context) { return this.invoke('project.close', args, context); }\n listAssets(args, context) { return this.invoke('assets.list', args, context); }\n inspectAsset(args, context) { return this.invoke('asset.inspect', args, context); }\n rebuildAssetSource(args, { mode = 'rebuild', ...context } = {}) { return this.invoke(`asset-source.${mode}`, args, context); }\n bindOpenedAsset(result, guid) {\n this.targetBinding = 'editor';\n const kind = this.hydrateAsset(result?.preview?.asset)?.kind\n ?? this.hydrateAsset(result?.asset)?.kind\n ?? this.assets?.find((entry) => entry?.guid === guid)?.kind;\n if (kind && !isTypePreviewAsset({ kind })) {\n const targetId = result?.preview?.target?.targetId\n ?? result?.target?.targetId\n ?? this.previews().find((entry) => this.hydrateAsset(entry.asset)?.guid === guid)?.target?.targetId;\n if (targetId != null) {\n this.editorTargetId = String(targetId);\n this.previewTargetId = this.editorTargetId;\n }\n return;\n }\n const editorId = this.editorPreview()?.target?.targetId;\n if (editorId !== undefined) this.previewTargetId = editorId;\n }\n recordOpenRequest({ requestId, result, guid } = {}) {\n const requested = typeof guid === 'string' && guid.trim() !== '' ? guid : undefined;\n const editor = this.editorPreview();\n const editorIds = editorSceneTargetIds(\n this.classifiedPreviews(),\n editor ? { target: editor.target, asset: this.hydrateAsset(editor.asset) } : undefined,\n );\n const extras = this.previews().filter((entry) =>\n entry?.target?.targetId && !editorIds.has(String(entry.target.targetId)),\n );\n const preview = [result?.preview, ...extras].find((entry) =>\n entry?.target &&\n !editorIds.has(String(entry.target.targetId)) &&\n (!entry.asset || requested === undefined || entry.asset.guid === requested),\n );\n const catalogAsset = requested && Array.isArray(this.assets)\n ? this.assets.find((entry) => entry?.guid === requested && entry?.kind)\n : undefined;\n const asset = [\n this.hydrateAsset(result?.preview?.asset),\n this.hydrateAsset(result?.asset),\n this.hydrateAsset(preview?.asset),\n catalogAsset,\n ].find((candidate) =>\n candidate?.guid &&\n candidate?.kind &&\n (requested === undefined || candidate.guid === requested),\n );\n if (!asset?.guid || !asset?.kind) {\n logResourceOpen('open-request-skipped', {\n reason: 'asset-kind-unavailable',\n requested: requested ?? null,\n resultPreview: summarizeResourceAsset(result?.preview?.asset),\n resultAsset: summarizeResourceAsset(result?.asset),\n extraPreview: summarizeResourceAsset(preview?.asset),\n extraPreviewCount: extras.length,\n catalog: summarizeResourceAsset(catalogAsset),\n editorTargetId: this.editorTargetId ?? null,\n }, { level: 'warn' });\n return;\n }\n this.openRequestSequence += 1;\n const inspection =\n result?.inspection?.guid === asset.guid\n ? result.inspection\n : (this.inspection?.guid === asset.guid ? this.inspection : undefined);\n const previewMatches = preview?.target && (!preview.asset || preview.asset.guid === asset.guid);\n const recordedPreview = previewMatches ? { asset, target: preview.target } : undefined;\n this.openRequest = serializeWorkspaceOpenRequest({\n requestId: typeof requestId === 'string' && requestId.trim() !== ''\n ? requestId\n : createWorkspaceId('open'),\n sequence: this.openRequestSequence,\n asset,\n preview: recordedPreview,\n ...(inspection === undefined ? {} : { inspection }),\n });\n this.resourceOpens.set(asset.kind, {\n asset,\n preview: recordedPreview,\n });\n logResourceOpen('open-request-recorded', {\n requestId: this.openRequest.requestId,\n sequence: this.openRequest.sequence,\n asset: summarizeResourceAsset(this.openRequest.asset),\n hasPreview: Boolean(this.openRequest.preview?.target),\n previewTargetId: this.openRequest.preview?.target?.targetId ?? null,\n });\n }\n openAsset(args, context) { return this.invoke('asset.open', args, context); }\n closePreview(args, context) { return this.invoke('preview.close', args, context); }\n capture(args, context) { return this.invoke('preview.capture', args, context); }\n resizePreview(args, context) { return this.invoke('preview.resize', args, context); }\n getCamera(args, context) { return this.invoke('camera.get', args, context); }\n beginCamera(args, context) { return this.invoke('camera.begin', { ...args, interactionId: args.interactionId ?? randomUUID() }, context); }\n updateCamera(args, context) { return this.invoke('camera.update', args, context); }\n commitCamera(args, context) { return this.invoke('camera.commit', args, context); }\n abortCamera(args, context) { return this.invoke('camera.abort', args, context); }\n getSceneTree(args, context) { return this.invoke('scene-tree.get', args, context); }\n async revokeConnection(connectionId) {\n if (typeof connectionId !== 'string') return;\n for (const preview of [this.engine?.preview, this.engine?.play]) {\n if (!preview) continue;\n // The target may already be gone together with its browser page; revoking\n // its input connection is best-effort cleanup, not a failure.\n try {\n const result = await preview.revokeConnection?.({ targetId: preview.target.targetId, connectionId });\n this.syncBindings();\n if (this.previewOwner === preview && this.previewProjection && result) {\n this.previewProjection.interaction = result.interaction ?? null;\n this.previewProjection.cameraVersion = result.version;\n }\n } catch {\n // A lost target owns its own teardown.\n }\n }\n this.changed();\n }\n /**\n * Reset per-page UI session state when a new View frontend page is admitted.\n * The open project and its Engine session stay; everything the previous page\n * accumulated after project.open returns to the just-opened state, so a\n * refreshed page's first snapshot does not inherit the old page's history.\n */\n resetPageSession() {\n if (this.disposing) return;\n this.selectedTabId = VIEW_WORKSPACE_TAB_ID;\n this.targetBinding = 'editor';\n this.previewTargetId = undefined;\n this.inspection = null;\n this.openRequest = null;\n this.openRequestSequence = 0;\n this.resourceOpens = new Map();\n this.sceneSelection = null;\n this.selectionAbort?.abort();\n this.selectionAbort = undefined;\n // Rebuild the preview projection from the editor target so camera and\n // interaction state held for the previous page are not carried over.\n this.previewOwner = undefined;\n this.syncBindings();\n this.changed();\n // A refreshed page may have destroyed the Engine workspace session along\n // with its browser page. Probe the session so a lost target surfaces as\n // workspaceTargetLost through the existing recovery path instead of\n // waiting for the next user operation to fail.\n const project = this.project;\n if (project) {\n void this.invoke('assets.list', { projectId: project.id }).catch(() => {});\n }\n }\n registerTransport(transport, { routeThroughTools = false } = {}) {\n const capabilities = transport.register(VIEW_WORKSPACE_SERVICES.capabilities, () => this.capabilities());\n const call = transport.register(VIEW_WORKSPACE_SERVICES.call, async ({ payload, signal, caller }) => {\n try {\n return routeThroughTools\n ? await runWorkspaceToolApi(this.toolApi, {\n operation: `view.workspace.${payload.operation}`, args: payload.args,\n clientId: payload.clientId, token: payload.token, requestId: payload.requestId,\n caller, signal, sourceId: 'view-workspace',\n })\n : await this.call(payload, { signal, caller });\n }\n catch (error) {\n if (!error.code?.startsWith('view-')) throw error;\n throw Object.assign(new Error(error.message), { name: 'HostAssemblyError', code: 'host-transport-failure',\n expected: error.expected, hint: error.hint, detail: { ...error.detail, remoteCode: error.code } });\n }\n });\n const fileGet = transport.register(VIEW_FILE_GET_SERVICE, async ({ payload }) => {\n try { return await readWorkspaceFilePreview(this, payload); }\n catch (error) {\n if (!error.code?.startsWith('view-')) throw error;\n throw Object.assign(new Error(error.message), { name: 'HostAssemblyError', code: 'host-transport-failure',\n expected: error.expected, hint: error.hint, detail: { ...error.detail, remoteCode: error.code } });\n }\n });\n const subscription = this.subscribe(state => transport.publish(VIEW_WORKSPACE_STATE_TOPIC, state));\n const observer = transport.connect();\n const engineSubscription = observer.subscribe('engine.workspace.state', () => this.changed());\n return () => { capabilities(); call(); fileGet(); subscription(); engineSubscription(); observer.close(); };\n }\n async dispose() { this.selectionAbort?.abort(); this.disposing = true; this.listeners.clear(); }\n}\n", "import { readFile, stat } from 'node:fs/promises';\nimport { extname, isAbsolute, relative, resolve } from 'node:path';\n\nimport { workspaceError } from './contract.mjs';\n\n/**\n * Editor `/api/files` classify() equivalent. Unknown extensions are text so\n * `.pack.json` / `.pack.ts` / `.ts` / `.js` decode as UTF-8. Binary kinds skip\n * decode and leave `content` unset \u2014 the preview then shows the no-text note.\n */\nconst EXT_KIND = Object.freeze({\n '.png': { kind: 'image', mime: 'image/png' },\n '.jpg': { kind: 'image', mime: 'image/jpeg' },\n '.jpeg': { kind: 'image', mime: 'image/jpeg' },\n '.gif': { kind: 'image', mime: 'image/gif' },\n '.webp': { kind: 'image', mime: 'image/webp' },\n '.avif': { kind: 'image', mime: 'image/avif' },\n '.bmp': { kind: 'image', mime: 'image/bmp' },\n '.ico': { kind: 'image', mime: 'image/x-icon' },\n '.svg': { kind: 'image', mime: 'image/svg+xml' },\n '.mp3': { kind: 'audio', mime: 'audio/mpeg' },\n '.wav': { kind: 'audio', mime: 'audio/wav' },\n '.ogg': { kind: 'audio', mime: 'audio/ogg' },\n '.m4a': { kind: 'audio', mime: 'audio/mp4' },\n '.flac': { kind: 'audio', mime: 'audio/flac' },\n '.aac': { kind: 'audio', mime: 'audio/aac' },\n '.mp4': { kind: 'video', mime: 'video/mp4' },\n '.webm': { kind: 'video', mime: 'video/webm' },\n '.mov': { kind: 'video', mime: 'video/quicktime' },\n '.glb': { kind: 'model', mime: 'model/gltf-binary' },\n '.gltf': { kind: 'model', mime: 'model/gltf+json' },\n '.fbx': { kind: 'model', mime: 'application/octet-stream' },\n '.ttf': { kind: 'binary', mime: 'font/ttf' },\n '.otf': { kind: 'binary', mime: 'font/otf' },\n '.woff': { kind: 'binary', mime: 'font/woff' },\n '.woff2': { kind: 'binary', mime: 'font/woff2' },\n});\n\n/** Inline data URLs for browser media preview in the content browser. */\nexport const MAX_BINARY_PREVIEW_BYTES = 10 * 1024 * 1024;\n\nconst BINARY_PREVIEW_KINDS = new Set(['image', 'audio', 'video', 'binary']);\n\nexport function classifyFile(path) {\n const ext = extname(path).toLowerCase();\n return EXT_KIND[ext] ?? { kind: 'text', mime: 'text/plain; charset=utf-8' };\n}\n\nexport function resolveProjectFilePath(root, input) {\n if (typeof root !== 'string' || root.trim() === '') return null;\n if (typeof input !== 'string' || input.length === 0 || input.includes('\\0')) return null;\n const rootAbs = resolve(root);\n const abs = isAbsolute(input) ? resolve(input) : resolve(rootAbs, input);\n const rel = relative(rootAbs, abs);\n if (rel === '' || rel.startsWith('..') || isAbsolute(rel)) return null;\n const normalized = rel.split(/[/\\\\]/).join('/');\n if (normalized === '.forgeax/ddc' || normalized.startsWith('.forgeax/ddc/')) return null;\n return { abs, rel: normalized };\n}\n\nexport async function readFilePreview(absPath, rel) {\n let info;\n try {\n info = await stat(absPath);\n } catch {\n throw new Error('not found');\n }\n if (info.isDirectory()) throw new Error('is a directory');\n const ext = extname(rel).toLowerCase();\n const { kind, mime } = classifyFile(rel);\n const base = { path: rel, kind, mime, size: info.size, mtime: info.mtimeMs };\n if (kind === 'text') {\n const content = await readFile(absPath, 'utf8');\n return { ...base, content };\n }\n if (kind === 'image' && ext === '.svg') {\n const content = await readFile(absPath, 'utf8');\n return { ...base, content };\n }\n if (BINARY_PREVIEW_KINDS.has(kind)) {\n if (info.size > MAX_BINARY_PREVIEW_BYTES) return base;\n const buffer = await readFile(absPath);\n return { ...base, dataUrl: `data:${mime};base64,${buffer.toString('base64')}` };\n }\n return base;\n}\n\nexport async function readWorkspaceFilePreview(workspace, payload = {}) {\n const root = workspace?.project?.root;\n if (typeof root !== 'string' || root.trim() === '') {\n throw workspaceError(\n 'view-workspace-project-closed',\n 'an open project',\n 'Open a project before previewing source files.',\n );\n }\n const resolved = resolveProjectFilePath(root, payload?.path);\n if (!resolved) {\n throw workspaceError(\n 'view-workspace-invalid-args',\n 'path to be a file inside the open project',\n 'Provide a project-relative or in-project absolute path.',\n { field: 'path' },\n );\n }\n try {\n return await readFilePreview(resolved.abs, resolved.rel);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n if (message.startsWith('is a directory')) {\n throw workspaceError(\n 'view-workspace-invalid-args',\n 'a file path',\n message,\n { path: resolved.rel },\n );\n }\n throw workspaceError(\n 'view-workspace-file-not-found',\n 'the file to exist in the open project',\n 'Refresh the content browser and retry.',\n { path: resolved.rel },\n );\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
// packages/view-workspace-core/src/adopt-surface.mjs
|
|
2
|
+
var SCENE_SHELL_ID = "app-shell";
|
|
3
|
+
function readSceneShell(document) {
|
|
4
|
+
return document?.getElementById?.(SCENE_SHELL_ID) ?? null;
|
|
5
|
+
}
|
|
6
|
+
function placeSurface(container, surface, { replace = false } = {}) {
|
|
7
|
+
if (!container || !surface || surface.parentNode === container) return false;
|
|
8
|
+
if (container.isConnected === false) return false;
|
|
9
|
+
if (replace && typeof container.replaceChildren === "function") {
|
|
10
|
+
container.replaceChildren(surface);
|
|
11
|
+
return true;
|
|
12
|
+
}
|
|
13
|
+
container.append?.(surface);
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
function keepSurfaceInContainer({
|
|
17
|
+
document,
|
|
18
|
+
getContainer,
|
|
19
|
+
getSurface,
|
|
20
|
+
replace = false,
|
|
21
|
+
onPlace,
|
|
22
|
+
poll = false
|
|
23
|
+
} = {}) {
|
|
24
|
+
let stopped = false;
|
|
25
|
+
const sync = () => {
|
|
26
|
+
if (stopped) return;
|
|
27
|
+
const container = getContainer?.();
|
|
28
|
+
const surface = getSurface?.();
|
|
29
|
+
if (!container || !surface || container.isConnected === false) return;
|
|
30
|
+
if (!placeSurface(container, surface, { replace })) return;
|
|
31
|
+
onPlace?.(surface, container);
|
|
32
|
+
};
|
|
33
|
+
sync();
|
|
34
|
+
const root = document?.documentElement ?? document?.body;
|
|
35
|
+
const Observer = document?.defaultView?.MutationObserver ?? globalThis.MutationObserver;
|
|
36
|
+
const win = document?.defaultView ?? globalThis;
|
|
37
|
+
let observer;
|
|
38
|
+
let raf = 0;
|
|
39
|
+
if (root && typeof Observer === "function") {
|
|
40
|
+
observer = new Observer(sync);
|
|
41
|
+
observer.observe(root, { childList: true, subtree: true });
|
|
42
|
+
}
|
|
43
|
+
if (poll && typeof win.requestAnimationFrame === "function") {
|
|
44
|
+
const tick = () => {
|
|
45
|
+
if (stopped) return;
|
|
46
|
+
sync();
|
|
47
|
+
raf = win.requestAnimationFrame(tick);
|
|
48
|
+
};
|
|
49
|
+
raf = win.requestAnimationFrame(tick);
|
|
50
|
+
}
|
|
51
|
+
return () => {
|
|
52
|
+
stopped = true;
|
|
53
|
+
observer?.disconnect();
|
|
54
|
+
if (raf) win.cancelAnimationFrame?.(raf);
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
function watchUntilReady({ document, probe } = {}) {
|
|
58
|
+
let stopped = false;
|
|
59
|
+
const win = document?.defaultView ?? globalThis;
|
|
60
|
+
const Observer = document?.defaultView?.MutationObserver ?? globalThis.MutationObserver;
|
|
61
|
+
let observer;
|
|
62
|
+
let raf = 0;
|
|
63
|
+
const stop = () => {
|
|
64
|
+
if (stopped) return;
|
|
65
|
+
stopped = true;
|
|
66
|
+
observer?.disconnect();
|
|
67
|
+
if (raf) win.cancelAnimationFrame?.(raf);
|
|
68
|
+
};
|
|
69
|
+
const tick = () => {
|
|
70
|
+
if (stopped) return;
|
|
71
|
+
if (probe?.()) stop();
|
|
72
|
+
};
|
|
73
|
+
tick();
|
|
74
|
+
if (stopped) return stop;
|
|
75
|
+
const root = document?.documentElement ?? document?.body;
|
|
76
|
+
if (root && typeof Observer === "function") {
|
|
77
|
+
observer = new Observer(tick);
|
|
78
|
+
observer.observe(root, { childList: true, subtree: true });
|
|
79
|
+
}
|
|
80
|
+
if (typeof win.requestAnimationFrame === "function") {
|
|
81
|
+
const loop = () => {
|
|
82
|
+
if (stopped) return;
|
|
83
|
+
tick();
|
|
84
|
+
raf = win.requestAnimationFrame(loop);
|
|
85
|
+
};
|
|
86
|
+
raf = win.requestAnimationFrame(loop);
|
|
87
|
+
}
|
|
88
|
+
return stop;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export {
|
|
92
|
+
SCENE_SHELL_ID,
|
|
93
|
+
readSceneShell,
|
|
94
|
+
placeSurface,
|
|
95
|
+
keepSurfaceInContainer,
|
|
96
|
+
watchUntilReady
|
|
97
|
+
};
|
|
98
|
+
//# sourceMappingURL=chunk-C7R3YRA7.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../packages/view-workspace-core/src/adopt-surface.mjs"],
|
|
4
|
+
"sourcesContent": ["export const SCENE_SHELL_ID = 'app-shell';\n\nexport function readSceneShell(document) {\n return document?.getElementById?.(SCENE_SHELL_ID) ?? null;\n}\n\nexport function placeSurface(container, surface, { replace = false } = {}) {\n if (!container || !surface || surface.parentNode === container) return false;\n // Engine createApp(canvas) requires isConnected. Never pull a live node into\n // a detached View host (Dock/page not mounted yet).\n if (container.isConnected === false) return false;\n if (replace && typeof container.replaceChildren === 'function') {\n container.replaceChildren(surface);\n return true;\n }\n container.append?.(surface);\n return true;\n}\n\n/**\n * Keep a live Engine node inside a View container regardless of which DOM\n * appears first. Re-adopts if the node is moved back to body/parking.\n */\nexport function keepSurfaceInContainer({\n document,\n getContainer,\n getSurface,\n replace = false,\n onPlace,\n poll = false,\n} = {}) {\n let stopped = false;\n const sync = () => {\n if (stopped) return;\n const container = getContainer?.();\n const surface = getSurface?.();\n if (!container || !surface || container.isConnected === false) return;\n if (!placeSurface(container, surface, { replace })) return;\n onPlace?.(surface, container);\n };\n sync();\n const root = document?.documentElement ?? document?.body;\n const Observer = document?.defaultView?.MutationObserver ?? globalThis.MutationObserver;\n const win = document?.defaultView ?? globalThis;\n let observer;\n let raf = 0;\n if (root && typeof Observer === 'function') {\n observer = new Observer(sync);\n observer.observe(root, { childList: true, subtree: true });\n }\n if (poll && typeof win.requestAnimationFrame === 'function') {\n const tick = () => {\n if (stopped) return;\n sync();\n raf = win.requestAnimationFrame(tick);\n };\n raf = win.requestAnimationFrame(tick);\n }\n return () => {\n stopped = true;\n observer?.disconnect();\n if (raf) win.cancelAnimationFrame?.(raf);\n };\n}\n\nexport function watchUntilReady({ document, probe } = {}) {\n let stopped = false;\n const win = document?.defaultView ?? globalThis;\n const Observer = document?.defaultView?.MutationObserver ?? globalThis.MutationObserver;\n let observer;\n let raf = 0;\n const stop = () => {\n if (stopped) return;\n stopped = true;\n observer?.disconnect();\n if (raf) win.cancelAnimationFrame?.(raf);\n };\n const tick = () => {\n if (stopped) return;\n if (probe?.()) stop();\n };\n tick();\n if (stopped) return stop;\n const root = document?.documentElement ?? document?.body;\n if (root && typeof Observer === 'function') {\n observer = new Observer(tick);\n observer.observe(root, { childList: true, subtree: true });\n }\n if (typeof win.requestAnimationFrame === 'function') {\n const loop = () => {\n if (stopped) return;\n tick();\n raf = win.requestAnimationFrame(loop);\n };\n raf = win.requestAnimationFrame(loop);\n }\n return stop;\n}\n"],
|
|
5
|
+
"mappings": ";AAAO,IAAM,iBAAiB;AAEvB,SAAS,eAAe,UAAU;AACvC,SAAO,UAAU,iBAAiB,cAAc,KAAK;AACvD;AAEO,SAAS,aAAa,WAAW,SAAS,EAAE,UAAU,MAAM,IAAI,CAAC,GAAG;AACzE,MAAI,CAAC,aAAa,CAAC,WAAW,QAAQ,eAAe,UAAW,QAAO;AAGvE,MAAI,UAAU,gBAAgB,MAAO,QAAO;AAC5C,MAAI,WAAW,OAAO,UAAU,oBAAoB,YAAY;AAC9D,cAAU,gBAAgB,OAAO;AACjC,WAAO;AAAA,EACT;AACA,YAAU,SAAS,OAAO;AAC1B,SAAO;AACT;AAMO,SAAS,uBAAuB;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA,OAAO;AACT,IAAI,CAAC,GAAG;AACN,MAAI,UAAU;AACd,QAAM,OAAO,MAAM;AACjB,QAAI,QAAS;AACb,UAAM,YAAY,eAAe;AACjC,UAAM,UAAU,aAAa;AAC7B,QAAI,CAAC,aAAa,CAAC,WAAW,UAAU,gBAAgB,MAAO;AAC/D,QAAI,CAAC,aAAa,WAAW,SAAS,EAAE,QAAQ,CAAC,EAAG;AACpD,cAAU,SAAS,SAAS;AAAA,EAC9B;AACA,OAAK;AACL,QAAM,OAAO,UAAU,mBAAmB,UAAU;AACpD,QAAM,WAAW,UAAU,aAAa,oBAAoB,WAAW;AACvE,QAAM,MAAM,UAAU,eAAe;AACrC,MAAI;AACJ,MAAI,MAAM;AACV,MAAI,QAAQ,OAAO,aAAa,YAAY;AAC1C,eAAW,IAAI,SAAS,IAAI;AAC5B,aAAS,QAAQ,MAAM,EAAE,WAAW,MAAM,SAAS,KAAK,CAAC;AAAA,EAC3D;AACA,MAAI,QAAQ,OAAO,IAAI,0BAA0B,YAAY;AAC3D,UAAM,OAAO,MAAM;AACjB,UAAI,QAAS;AACb,WAAK;AACL,YAAM,IAAI,sBAAsB,IAAI;AAAA,IACtC;AACA,UAAM,IAAI,sBAAsB,IAAI;AAAA,EACtC;AACA,SAAO,MAAM;AACX,cAAU;AACV,cAAU,WAAW;AACrB,QAAI,IAAK,KAAI,uBAAuB,GAAG;AAAA,EACzC;AACF;AAEO,SAAS,gBAAgB,EAAE,UAAU,MAAM,IAAI,CAAC,GAAG;AACxD,MAAI,UAAU;AACd,QAAM,MAAM,UAAU,eAAe;AACrC,QAAM,WAAW,UAAU,aAAa,oBAAoB,WAAW;AACvE,MAAI;AACJ,MAAI,MAAM;AACV,QAAM,OAAO,MAAM;AACjB,QAAI,QAAS;AACb,cAAU;AACV,cAAU,WAAW;AACrB,QAAI,IAAK,KAAI,uBAAuB,GAAG;AAAA,EACzC;AACA,QAAM,OAAO,MAAM;AACjB,QAAI,QAAS;AACb,QAAI,QAAQ,EAAG,MAAK;AAAA,EACtB;AACA,OAAK;AACL,MAAI,QAAS,QAAO;AACpB,QAAM,OAAO,UAAU,mBAAmB,UAAU;AACpD,MAAI,QAAQ,OAAO,aAAa,YAAY;AAC1C,eAAW,IAAI,SAAS,IAAI;AAC5B,aAAS,QAAQ,MAAM,EAAE,WAAW,MAAM,SAAS,KAAK,CAAC;AAAA,EAC3D;AACA,MAAI,OAAO,IAAI,0BAA0B,YAAY;AACnD,UAAM,OAAO,MAAM;AACjB,UAAI,QAAS;AACb,WAAK;AACL,YAAM,IAAI,sBAAsB,IAAI;AAAA,IACtC;AACA,UAAM,IAAI,sBAAsB,IAAI;AAAA,EACtC;AACA,SAAO;AACT;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
// packages/view-plugin-content-browser/src/schema.mjs
|
|
2
|
+
var CONTENT_BROWSER_UI_SCHEMA_VERSION = "forgeax.view.content-browser.ui/1";
|
|
3
|
+
var CONTENT_BROWSER_ACTIONS = Object.freeze({
|
|
4
|
+
search: "content-browser.search",
|
|
5
|
+
navigate: "content-browser.navigate",
|
|
6
|
+
navigateBack: "content-browser.navigate.back",
|
|
7
|
+
navigateForward: "content-browser.navigate.forward",
|
|
8
|
+
refresh: "content-browser.refresh",
|
|
9
|
+
setView: "content-browser.view.set",
|
|
10
|
+
setThumbnailSize: "content-browser.thumbnail-size.set",
|
|
11
|
+
setFilter: "content-browser.filter.set",
|
|
12
|
+
setSort: "content-browser.sort.set",
|
|
13
|
+
select: "content-browser.select",
|
|
14
|
+
activate: "content-browser.activate",
|
|
15
|
+
toggleFavorite: "content-browser.favorite.toggle",
|
|
16
|
+
toggleSourceGroup: "content-browser.source-group.toggle",
|
|
17
|
+
toggleDetailPanel: "content-browser.detail-panel.toggle",
|
|
18
|
+
togglePackExpansion: "content-browser.pack.expand.toggle",
|
|
19
|
+
showContextMenu: "content-browser.context-menu.show",
|
|
20
|
+
copyPath: "content-browser.copy-path"
|
|
21
|
+
});
|
|
22
|
+
var CONTENT_BROWSER_MODEL_SCHEMA = Object.freeze({
|
|
23
|
+
$id: CONTENT_BROWSER_UI_SCHEMA_VERSION,
|
|
24
|
+
type: "object",
|
|
25
|
+
required: ["projectLabel", "folder", "view", "files", "folders"],
|
|
26
|
+
properties: {
|
|
27
|
+
projectLabel: { type: "string" },
|
|
28
|
+
folder: { type: "string" },
|
|
29
|
+
view: { enum: ["grid", "list", "column"] },
|
|
30
|
+
thumbnailSize: { type: "number", minimum: 48, maximum: 200 },
|
|
31
|
+
detailPanelOpen: { type: "boolean" },
|
|
32
|
+
favorites: { type: "array", items: { type: "string" } },
|
|
33
|
+
expandedPacks: { type: "array", items: { type: "string" } },
|
|
34
|
+
folders: {
|
|
35
|
+
type: "array",
|
|
36
|
+
items: {
|
|
37
|
+
type: "object",
|
|
38
|
+
required: ["type", "path", "name", "childCount"],
|
|
39
|
+
properties: {
|
|
40
|
+
type: { const: "folder" },
|
|
41
|
+
path: { type: "string" },
|
|
42
|
+
name: { type: "string" },
|
|
43
|
+
childCount: { type: "number" }
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
files: {
|
|
48
|
+
type: "array",
|
|
49
|
+
items: {
|
|
50
|
+
type: "object",
|
|
51
|
+
required: ["type", "path", "name", "family", "assets"],
|
|
52
|
+
properties: {
|
|
53
|
+
type: { const: "file" },
|
|
54
|
+
path: { type: "string" },
|
|
55
|
+
name: { type: "string" },
|
|
56
|
+
family: {
|
|
57
|
+
enum: ["code", "config", "doc", "scene", "pack", "meta", "image", "audio", "model", "font", "ui", "data", "other"]
|
|
58
|
+
},
|
|
59
|
+
isAssetPackage: { type: "boolean" },
|
|
60
|
+
assets: {
|
|
61
|
+
type: "array",
|
|
62
|
+
items: {
|
|
63
|
+
type: "object",
|
|
64
|
+
required: ["type", "guid", "kind", "name", "packPath"],
|
|
65
|
+
properties: {
|
|
66
|
+
type: { const: "asset" },
|
|
67
|
+
guid: { type: "string" },
|
|
68
|
+
kind: { type: "string" },
|
|
69
|
+
name: { type: "string" },
|
|
70
|
+
packPath: { type: "string" },
|
|
71
|
+
estimatedSize: { type: "number" },
|
|
72
|
+
packModifiedAt: { type: "number" }
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
export {
|
|
83
|
+
CONTENT_BROWSER_UI_SCHEMA_VERSION,
|
|
84
|
+
CONTENT_BROWSER_ACTIONS,
|
|
85
|
+
CONTENT_BROWSER_MODEL_SCHEMA
|
|
86
|
+
};
|
|
87
|
+
//# sourceMappingURL=chunk-CRMICXKN.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../packages/view-plugin-content-browser/src/schema.mjs"],
|
|
4
|
+
"sourcesContent": ["export const CONTENT_BROWSER_UI_SCHEMA_VERSION = 'forgeax.view.content-browser.ui/1';\n\nexport const CONTENT_BROWSER_ACTIONS = Object.freeze({\n search: 'content-browser.search',\n navigate: 'content-browser.navigate',\n navigateBack: 'content-browser.navigate.back',\n navigateForward: 'content-browser.navigate.forward',\n refresh: 'content-browser.refresh',\n setView: 'content-browser.view.set',\n setThumbnailSize: 'content-browser.thumbnail-size.set',\n setFilter: 'content-browser.filter.set',\n setSort: 'content-browser.sort.set',\n select: 'content-browser.select',\n activate: 'content-browser.activate',\n toggleFavorite: 'content-browser.favorite.toggle',\n toggleSourceGroup: 'content-browser.source-group.toggle',\n toggleDetailPanel: 'content-browser.detail-panel.toggle',\n togglePackExpansion: 'content-browser.pack.expand.toggle',\n showContextMenu: 'content-browser.context-menu.show',\n copyPath: 'content-browser.copy-path',\n});\n\nexport const CONTENT_BROWSER_MODEL_SCHEMA = Object.freeze({\n $id: CONTENT_BROWSER_UI_SCHEMA_VERSION,\n type: 'object',\n required: ['projectLabel', 'folder', 'view', 'files', 'folders'],\n properties: {\n projectLabel: { type: 'string' },\n folder: { type: 'string' },\n view: { enum: ['grid', 'list', 'column'] },\n thumbnailSize: { type: 'number', minimum: 48, maximum: 200 },\n detailPanelOpen: { type: 'boolean' },\n favorites: { type: 'array', items: { type: 'string' } },\n expandedPacks: { type: 'array', items: { type: 'string' } },\n folders: {\n type: 'array',\n items: {\n type: 'object',\n required: ['type', 'path', 'name', 'childCount'],\n properties: {\n type: { const: 'folder' },\n path: { type: 'string' },\n name: { type: 'string' },\n childCount: { type: 'number' },\n },\n },\n },\n files: {\n type: 'array',\n items: {\n type: 'object',\n required: ['type', 'path', 'name', 'family', 'assets'],\n properties: {\n type: { const: 'file' },\n path: { type: 'string' },\n name: { type: 'string' },\n family: {\n enum: ['code', 'config', 'doc', 'scene', 'pack', 'meta', 'image', 'audio', 'model', 'font', 'ui', 'data', 'other'],\n },\n isAssetPackage: { type: 'boolean' },\n assets: {\n type: 'array',\n items: {\n type: 'object',\n required: ['type', 'guid', 'kind', 'name', 'packPath'],\n properties: {\n type: { const: 'asset' },\n guid: { type: 'string' },\n kind: { type: 'string' },\n name: { type: 'string' },\n packPath: { type: 'string' },\n estimatedSize: { type: 'number' },\n packModifiedAt: { type: 'number' },\n },\n },\n },\n },\n },\n },\n },\n});\n"],
|
|
5
|
+
"mappings": ";AAAO,IAAM,oCAAoC;AAE1C,IAAM,0BAA0B,OAAO,OAAO;AAAA,EACnD,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,cAAc;AAAA,EACd,iBAAiB;AAAA,EACjB,SAAS;AAAA,EACT,SAAS;AAAA,EACT,kBAAkB;AAAA,EAClB,WAAW;AAAA,EACX,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,gBAAgB;AAAA,EAChB,mBAAmB;AAAA,EACnB,mBAAmB;AAAA,EACnB,qBAAqB;AAAA,EACrB,iBAAiB;AAAA,EACjB,UAAU;AACZ,CAAC;AAEM,IAAM,+BAA+B,OAAO,OAAO;AAAA,EACxD,KAAK;AAAA,EACL,MAAM;AAAA,EACN,UAAU,CAAC,gBAAgB,UAAU,QAAQ,SAAS,SAAS;AAAA,EAC/D,YAAY;AAAA,IACV,cAAc,EAAE,MAAM,SAAS;AAAA,IAC/B,QAAQ,EAAE,MAAM,SAAS;AAAA,IACzB,MAAM,EAAE,MAAM,CAAC,QAAQ,QAAQ,QAAQ,EAAE;AAAA,IACzC,eAAe,EAAE,MAAM,UAAU,SAAS,IAAI,SAAS,IAAI;AAAA,IAC3D,iBAAiB,EAAE,MAAM,UAAU;AAAA,IACnC,WAAW,EAAE,MAAM,SAAS,OAAO,EAAE,MAAM,SAAS,EAAE;AAAA,IACtD,eAAe,EAAE,MAAM,SAAS,OAAO,EAAE,MAAM,SAAS,EAAE;AAAA,IAC1D,SAAS;AAAA,MACP,MAAM;AAAA,MACN,OAAO;AAAA,QACL,MAAM;AAAA,QACN,UAAU,CAAC,QAAQ,QAAQ,QAAQ,YAAY;AAAA,QAC/C,YAAY;AAAA,UACV,MAAM,EAAE,OAAO,SAAS;AAAA,UACxB,MAAM,EAAE,MAAM,SAAS;AAAA,UACvB,MAAM,EAAE,MAAM,SAAS;AAAA,UACvB,YAAY,EAAE,MAAM,SAAS;AAAA,QAC/B;AAAA,MACF;AAAA,IACF;AAAA,IACA,OAAO;AAAA,MACL,MAAM;AAAA,MACN,OAAO;AAAA,QACL,MAAM;AAAA,QACN,UAAU,CAAC,QAAQ,QAAQ,QAAQ,UAAU,QAAQ;AAAA,QACrD,YAAY;AAAA,UACV,MAAM,EAAE,OAAO,OAAO;AAAA,UACtB,MAAM,EAAE,MAAM,SAAS;AAAA,UACvB,MAAM,EAAE,MAAM,SAAS;AAAA,UACvB,QAAQ;AAAA,YACN,MAAM,CAAC,QAAQ,UAAU,OAAO,SAAS,QAAQ,QAAQ,SAAS,SAAS,SAAS,QAAQ,MAAM,QAAQ,OAAO;AAAA,UACnH;AAAA,UACA,gBAAgB,EAAE,MAAM,UAAU;AAAA,UAClC,QAAQ;AAAA,YACN,MAAM;AAAA,YACN,OAAO;AAAA,cACL,MAAM;AAAA,cACN,UAAU,CAAC,QAAQ,QAAQ,QAAQ,QAAQ,UAAU;AAAA,cACrD,YAAY;AAAA,gBACV,MAAM,EAAE,OAAO,QAAQ;AAAA,gBACvB,MAAM,EAAE,MAAM,SAAS;AAAA,gBACvB,MAAM,EAAE,MAAM,SAAS;AAAA,gBACvB,MAAM,EAAE,MAAM,SAAS;AAAA,gBACvB,UAAU,EAAE,MAAM,SAAS;AAAA,gBAC3B,eAAe,EAAE,MAAM,SAAS;AAAA,gBAChC,gBAAgB,EAAE,MAAM,SAAS;AAAA,cACnC;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF,CAAC;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import {
|
|
2
|
+
BROWSER_CARRIER,
|
|
3
|
+
FALLBACK_REASONS,
|
|
4
|
+
VIEW_CARRIER,
|
|
5
|
+
VIEW_PROTOCOL_VERSION,
|
|
6
|
+
browserFallback,
|
|
7
|
+
createLeaseRequest
|
|
8
|
+
} from "./chunk-GQBZMCTK.mjs";
|
|
9
|
+
|
|
10
|
+
// packages/view-plugin-display/src/carrier-adapter.mjs
|
|
11
|
+
var ViewCarrierAdapter = class {
|
|
12
|
+
constructor({ broker, attachTarget } = {}) {
|
|
13
|
+
if (!broker || typeof broker.allocate !== "function" || typeof broker.release !== "function") {
|
|
14
|
+
throw new TypeError("View carrier adapter requires the in-process View resource broker");
|
|
15
|
+
}
|
|
16
|
+
this.broker = broker;
|
|
17
|
+
this.attachTarget = attachTarget;
|
|
18
|
+
}
|
|
19
|
+
async select(input, { signal } = {}) {
|
|
20
|
+
const request = createLeaseRequest(input);
|
|
21
|
+
if (request.headless) return browserFallback(FALLBACK_REASONS.HEADLESS_REQUESTED);
|
|
22
|
+
const decision = await this.broker.allocate(request, { signal });
|
|
23
|
+
return decision.carrier === VIEW_CARRIER ? { ...decision, carrier: "borrowed" } : decision;
|
|
24
|
+
}
|
|
25
|
+
async release(decision, reason = "engine-release") {
|
|
26
|
+
if (!decision || decision.carrier !== "borrowed") return { released: false, reason: "not-borrowed" };
|
|
27
|
+
return decision.release(reason);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Optional local-process attachment hook. No browser connection implementation
|
|
31
|
+
* is hidden here; the Engine browser layer supplies its public attachment
|
|
32
|
+
* implementation and receives the exact allocated target handle.
|
|
33
|
+
*/
|
|
34
|
+
async attach(decision) {
|
|
35
|
+
if (!decision || decision.carrier !== "borrowed") return decision;
|
|
36
|
+
if (typeof this.attachTarget !== "function") {
|
|
37
|
+
throw new Error("Engine adapter must provide attachTarget for View pages");
|
|
38
|
+
}
|
|
39
|
+
const attached = await this.attachTarget(decision.target);
|
|
40
|
+
if (!attached || typeof attached !== "object" || !attached.page || !attached.execution || typeof attached.close !== "function") {
|
|
41
|
+
throw new TypeError(
|
|
42
|
+
"View attachTarget must return an explicit owner page, execution realm, and close handle"
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
if (attached.execution.kind === "frame") {
|
|
46
|
+
const surface = attached.page.locator(attached.execution.surfaceSelector);
|
|
47
|
+
const identity = await surface.evaluate((element) => ({
|
|
48
|
+
id: element.id,
|
|
49
|
+
leaseId: element.dataset.forgeaxViewLeaseId,
|
|
50
|
+
generation: element.dataset.forgeaxViewGeneration
|
|
51
|
+
}));
|
|
52
|
+
if (identity.id !== decision.target.surfaceId || identity.leaseId !== decision.target.leaseId || identity.generation !== String(decision.target.generation)) {
|
|
53
|
+
await attached.close("view-surface-identity-mismatch");
|
|
54
|
+
throw new Error("View display surface no longer owns the selected lease");
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
page: attached.page,
|
|
59
|
+
target: decision.target,
|
|
60
|
+
execution: attached.execution,
|
|
61
|
+
close: attached.close
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
function createViewCarrierAdapter(options) {
|
|
66
|
+
return new ViewCarrierAdapter(options);
|
|
67
|
+
}
|
|
68
|
+
var VIEW_ENGINE_CARRIER_CONTRACT = Object.freeze({
|
|
69
|
+
carrier: "borrowed",
|
|
70
|
+
fallbackCarrier: BROWSER_CARRIER,
|
|
71
|
+
protocolVersion: VIEW_PROTOCOL_VERSION,
|
|
72
|
+
targetIdentity: "leaseId + targetId + surfaceId + run identity + generation",
|
|
73
|
+
ownership: "Engine owns attachment, navigation, observation, capture, and service lifetime"
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
export {
|
|
77
|
+
ViewCarrierAdapter,
|
|
78
|
+
createViewCarrierAdapter,
|
|
79
|
+
VIEW_ENGINE_CARRIER_CONTRACT
|
|
80
|
+
};
|
|
81
|
+
//# sourceMappingURL=chunk-CUH2G6UF.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../packages/view-plugin-display/src/carrier-adapter.mjs"],
|
|
4
|
+
"sourcesContent": ["import {\n FALLBACK_REASONS,\n BROWSER_CARRIER,\n VIEW_CARRIER,\n VIEW_PROTOCOL_VERSION,\n browserFallback,\n createLeaseRequest,\n} from './carrier-contract.mjs';\n\n/**\n * The narrow Engine-facing seam. Engine owns browser attachment, navigation,\n * observation, capture, and service lifetime; this adapter only selects and\n * releases a View carrier by its authenticated target identity.\n */\nexport class ViewCarrierAdapter {\n constructor({ broker, attachTarget } = {}) {\n if (!broker || typeof broker.allocate !== 'function' || typeof broker.release !== 'function') {\n throw new TypeError('View carrier adapter requires the in-process View resource broker');\n }\n this.broker = broker;\n this.attachTarget = attachTarget;\n }\n\n async select(input, { signal } = {}) {\n const request = createLeaseRequest(input);\n // A headless request must not even touch the View broker.\n if (request.headless) return browserFallback(FALLBACK_REASONS.HEADLESS_REQUESTED);\n // The broker is the sole carrier authority. It owns admission, target\n // identity, capability checks, and the exact platform lease.\n const decision = await this.broker.allocate(request, { signal });\n return decision.carrier === VIEW_CARRIER\n ? { ...decision, carrier: 'borrowed' }\n : decision;\n }\n\n async release(decision, reason = 'engine-release') {\n if (!decision || decision.carrier !== 'borrowed') return { released: false, reason: 'not-borrowed' };\n return decision.release(reason);\n }\n\n /**\n * Optional local-process attachment hook. No browser connection implementation\n * is hidden here; the Engine browser layer supplies its public attachment\n * implementation and receives the exact allocated target handle.\n */\n async attach(decision) {\n if (!decision || decision.carrier !== 'borrowed') return decision;\n if (typeof this.attachTarget !== 'function') {\n throw new Error('Engine adapter must provide attachTarget for View pages');\n }\n const attached = await this.attachTarget(decision.target);\n if (\n !attached ||\n typeof attached !== 'object' ||\n !attached.page ||\n !attached.execution ||\n typeof attached.close !== 'function'\n ) {\n throw new TypeError(\n 'View attachTarget must return an explicit owner page, execution realm, and close handle',\n );\n }\n if (attached.execution.kind === 'frame') {\n const surface = attached.page.locator(attached.execution.surfaceSelector);\n const identity = await surface.evaluate((element) => ({\n id: element.id,\n leaseId: element.dataset.forgeaxViewLeaseId,\n generation: element.dataset.forgeaxViewGeneration,\n }));\n if (identity.id !== decision.target.surfaceId ||\n identity.leaseId !== decision.target.leaseId ||\n identity.generation !== String(decision.target.generation)) {\n await attached.close('view-surface-identity-mismatch');\n throw new Error('View display surface no longer owns the selected lease');\n }\n }\n return {\n page: attached.page,\n target: decision.target,\n execution: attached.execution,\n close: attached.close,\n };\n }\n}\n\nexport function createViewCarrierAdapter(options) {\n return new ViewCarrierAdapter(options);\n}\n\nexport const VIEW_ENGINE_CARRIER_CONTRACT = Object.freeze({\n carrier: 'borrowed',\n fallbackCarrier: BROWSER_CARRIER,\n protocolVersion: VIEW_PROTOCOL_VERSION,\n targetIdentity: 'leaseId + targetId + surfaceId + run identity + generation',\n ownership: 'Engine owns attachment, navigation, observation, capture, and service lifetime',\n});\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;AAcO,IAAM,qBAAN,MAAyB;AAAA,EAC9B,YAAY,EAAE,QAAQ,aAAa,IAAI,CAAC,GAAG;AACzC,QAAI,CAAC,UAAU,OAAO,OAAO,aAAa,cAAc,OAAO,OAAO,YAAY,YAAY;AAC5F,YAAM,IAAI,UAAU,mEAAmE;AAAA,IACzF;AACA,SAAK,SAAS;AACd,SAAK,eAAe;AAAA,EACtB;AAAA,EAEA,MAAM,OAAO,OAAO,EAAE,OAAO,IAAI,CAAC,GAAG;AACnC,UAAM,UAAU,mBAAmB,KAAK;AAExC,QAAI,QAAQ,SAAU,QAAO,gBAAgB,iBAAiB,kBAAkB;AAGhF,UAAM,WAAW,MAAM,KAAK,OAAO,SAAS,SAAS,EAAE,OAAO,CAAC;AAC/D,WAAO,SAAS,YAAY,eACxB,EAAE,GAAG,UAAU,SAAS,WAAW,IACnC;AAAA,EACN;AAAA,EAEA,MAAM,QAAQ,UAAU,SAAS,kBAAkB;AACjD,QAAI,CAAC,YAAY,SAAS,YAAY,WAAY,QAAO,EAAE,UAAU,OAAO,QAAQ,eAAe;AACnG,WAAO,SAAS,QAAQ,MAAM;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,OAAO,UAAU;AACrB,QAAI,CAAC,YAAY,SAAS,YAAY,WAAY,QAAO;AACzD,QAAI,OAAO,KAAK,iBAAiB,YAAY;AAC3C,YAAM,IAAI,MAAM,yDAAyD;AAAA,IAC3E;AACA,UAAM,WAAW,MAAM,KAAK,aAAa,SAAS,MAAM;AACxD,QACE,CAAC,YACD,OAAO,aAAa,YACpB,CAAC,SAAS,QACV,CAAC,SAAS,aACV,OAAO,SAAS,UAAU,YAC1B;AACA,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AACA,QAAI,SAAS,UAAU,SAAS,SAAS;AACvC,YAAM,UAAU,SAAS,KAAK,QAAQ,SAAS,UAAU,eAAe;AACxE,YAAM,WAAW,MAAM,QAAQ,SAAS,CAAC,aAAa;AAAA,QACpD,IAAI,QAAQ;AAAA,QACZ,SAAS,QAAQ,QAAQ;AAAA,QACzB,YAAY,QAAQ,QAAQ;AAAA,MAC9B,EAAE;AACF,UAAI,SAAS,OAAO,SAAS,OAAO,aAChC,SAAS,YAAY,SAAS,OAAO,WACrC,SAAS,eAAe,OAAO,SAAS,OAAO,UAAU,GAAG;AAC9D,cAAM,SAAS,MAAM,gCAAgC;AACrD,cAAM,IAAI,MAAM,wDAAwD;AAAA,MAC1E;AAAA,IACF;AACA,WAAO;AAAA,MACL,MAAM,SAAS;AAAA,MACf,QAAQ,SAAS;AAAA,MACjB,WAAW,SAAS;AAAA,MACpB,OAAO,SAAS;AAAA,IAClB;AAAA,EACF;AACF;AAEO,SAAS,yBAAyB,SAAS;AAChD,SAAO,IAAI,mBAAmB,OAAO;AACvC;AAEO,IAAM,+BAA+B,OAAO,OAAO;AAAA,EACxD,SAAS;AAAA,EACT,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,gBAAgB;AAAA,EAChB,WAAW;AACb,CAAC;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import {
|
|
2
|
+
RESOURCE_PREVIEW_LAYOUT,
|
|
3
|
+
RESOURCE_PROPERTIES_LAYOUT
|
|
4
|
+
} from "./chunk-YYXQDUVT.mjs";
|
|
5
|
+
import {
|
|
6
|
+
VIEW_PAGE_TYPES
|
|
7
|
+
} from "./chunk-32GD5LL6.mjs";
|
|
8
|
+
import {
|
|
9
|
+
__export
|
|
10
|
+
} from "./chunk-FLGC65SR.mjs";
|
|
11
|
+
|
|
12
|
+
// packages/view-plugin-texture/src/identity.mjs
|
|
13
|
+
var identity_exports = {};
|
|
14
|
+
__export(identity_exports, {
|
|
15
|
+
FRONTEND_MODULE: () => FRONTEND_MODULE,
|
|
16
|
+
FRONTEND_PLUGIN_ID: () => FRONTEND_PLUGIN_ID,
|
|
17
|
+
PAGE_ORDER: () => PAGE_ORDER,
|
|
18
|
+
PAGE_PRIORITY: () => PAGE_PRIORITY,
|
|
19
|
+
PAGE_TITLE_I18N_KEY: () => PAGE_TITLE_I18N_KEY,
|
|
20
|
+
PAGE_TYPE: () => PAGE_TYPE,
|
|
21
|
+
PLUGIN_ID: () => PLUGIN_ID,
|
|
22
|
+
PREVIEW_ICON: () => PREVIEW_ICON,
|
|
23
|
+
PREVIEW_LAYOUT: () => PREVIEW_LAYOUT,
|
|
24
|
+
PREVIEW_PANEL: () => PREVIEW_PANEL,
|
|
25
|
+
PREVIEW_SLOT: () => PREVIEW_SLOT,
|
|
26
|
+
PREVIEW_TITLE_I18N_KEY: () => PREVIEW_TITLE_I18N_KEY,
|
|
27
|
+
PROPERTIES_ICON: () => PROPERTIES_ICON,
|
|
28
|
+
PROPERTIES_LAYOUT: () => PROPERTIES_LAYOUT,
|
|
29
|
+
PROPERTIES_PANEL: () => PROPERTIES_PANEL,
|
|
30
|
+
PROPERTIES_SLOT: () => PROPERTIES_SLOT,
|
|
31
|
+
PROPERTIES_TITLE_I18N_KEY: () => PROPERTIES_TITLE_I18N_KEY,
|
|
32
|
+
RESOURCE_KINDS: () => RESOURCE_KINDS,
|
|
33
|
+
RESOURCE_SELECTOR: () => RESOURCE_SELECTOR
|
|
34
|
+
});
|
|
35
|
+
var PLUGIN_ID = "forgeax.view.texture";
|
|
36
|
+
var FRONTEND_PLUGIN_ID = "forgeax.view.page.texture.frontend";
|
|
37
|
+
var FRONTEND_MODULE = "@forgeax/view/plugins/texture/frontend";
|
|
38
|
+
var PAGE_TYPE = VIEW_PAGE_TYPES.texture;
|
|
39
|
+
var PAGE_TITLE_I18N_KEY = "view.pages.texture";
|
|
40
|
+
var PAGE_ORDER = 32;
|
|
41
|
+
var PREVIEW_SLOT = "texture-preview";
|
|
42
|
+
var PROPERTIES_SLOT = "texture-properties";
|
|
43
|
+
var RESOURCE_KINDS = Object.freeze(["texture", "image"]);
|
|
44
|
+
var RESOURCE_SELECTOR = Object.freeze({ kinds: RESOURCE_KINDS });
|
|
45
|
+
var PAGE_PRIORITY = 20;
|
|
46
|
+
var PREVIEW_LAYOUT = RESOURCE_PREVIEW_LAYOUT;
|
|
47
|
+
var PROPERTIES_LAYOUT = RESOURCE_PROPERTIES_LAYOUT;
|
|
48
|
+
var PREVIEW_PANEL = "TexturePreview";
|
|
49
|
+
var PROPERTIES_PANEL = "TextureProperties";
|
|
50
|
+
var PREVIEW_ICON = "image";
|
|
51
|
+
var PROPERTIES_ICON = "detail";
|
|
52
|
+
var PREVIEW_TITLE_I18N_KEY = "view.slots.texturePreview";
|
|
53
|
+
var PROPERTIES_TITLE_I18N_KEY = "view.slots.textureProperties";
|
|
54
|
+
|
|
55
|
+
export {
|
|
56
|
+
PLUGIN_ID,
|
|
57
|
+
FRONTEND_PLUGIN_ID,
|
|
58
|
+
FRONTEND_MODULE,
|
|
59
|
+
PAGE_TYPE,
|
|
60
|
+
PAGE_TITLE_I18N_KEY,
|
|
61
|
+
PAGE_ORDER,
|
|
62
|
+
PREVIEW_SLOT,
|
|
63
|
+
PROPERTIES_SLOT,
|
|
64
|
+
RESOURCE_KINDS,
|
|
65
|
+
RESOURCE_SELECTOR,
|
|
66
|
+
PAGE_PRIORITY,
|
|
67
|
+
PREVIEW_LAYOUT,
|
|
68
|
+
PROPERTIES_LAYOUT,
|
|
69
|
+
PREVIEW_PANEL,
|
|
70
|
+
PROPERTIES_PANEL,
|
|
71
|
+
PREVIEW_ICON,
|
|
72
|
+
PROPERTIES_ICON,
|
|
73
|
+
PREVIEW_TITLE_I18N_KEY,
|
|
74
|
+
PROPERTIES_TITLE_I18N_KEY,
|
|
75
|
+
identity_exports
|
|
76
|
+
};
|
|
77
|
+
//# sourceMappingURL=chunk-D7GWRZLL.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../packages/view-plugin-texture/src/identity.mjs"],
|
|
4
|
+
"sourcesContent": ["import { VIEW_PAGE_TYPES } from '@forgeax/view-workspace-core/contract';\nimport {\n RESOURCE_PREVIEW_LAYOUT,\n RESOURCE_PROPERTIES_LAYOUT,\n} from '@forgeax/view-workspace-core/resource-page';\n\nexport const PLUGIN_ID = 'forgeax.view.texture';\nexport const FRONTEND_PLUGIN_ID = 'forgeax.view.page.texture.frontend';\nexport const FRONTEND_MODULE = '@forgeax/view/plugins/texture/frontend';\nexport const PAGE_TYPE = VIEW_PAGE_TYPES.texture;\nexport const PAGE_TITLE_I18N_KEY = 'view.pages.texture';\nexport const PAGE_ORDER = 32;\nexport const PREVIEW_SLOT = 'texture-preview';\nexport const PROPERTIES_SLOT = 'texture-properties';\nexport const RESOURCE_KINDS = Object.freeze(['texture', 'image']);\nexport const RESOURCE_SELECTOR = Object.freeze({ kinds: RESOURCE_KINDS });\nexport const PAGE_PRIORITY = 20;\nexport const PREVIEW_LAYOUT = RESOURCE_PREVIEW_LAYOUT;\nexport const PROPERTIES_LAYOUT = RESOURCE_PROPERTIES_LAYOUT;\nexport const PREVIEW_PANEL = 'TexturePreview';\nexport const PROPERTIES_PANEL = 'TextureProperties';\nexport const PREVIEW_ICON = 'image';\nexport const PROPERTIES_ICON = 'detail';\nexport const PREVIEW_TITLE_I18N_KEY = 'view.slots.texturePreview';\nexport const PROPERTIES_TITLE_I18N_KEY = 'view.slots.textureProperties';\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMO,IAAM,YAAY;AAClB,IAAM,qBAAqB;AAC3B,IAAM,kBAAkB;AACxB,IAAM,YAAY,gBAAgB;AAClC,IAAM,sBAAsB;AAC5B,IAAM,aAAa;AACnB,IAAM,eAAe;AACrB,IAAM,kBAAkB;AACxB,IAAM,iBAAiB,OAAO,OAAO,CAAC,WAAW,OAAO,CAAC;AACzD,IAAM,oBAAoB,OAAO,OAAO,EAAE,OAAO,eAAe,CAAC;AACjE,IAAM,gBAAgB;AACtB,IAAM,iBAAiB;AACvB,IAAM,oBAAoB;AAC1B,IAAM,gBAAgB;AACtB,IAAM,mBAAmB;AACzB,IAAM,eAAe;AACrB,IAAM,kBAAkB;AACxB,IAAM,yBAAyB;AAC/B,IAAM,4BAA4B;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|