@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,468 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ViewWorkspaceShell,
|
|
3
|
+
createBrowserPagePresentation
|
|
4
|
+
} from "./chunk-QSKQZGK7.mjs";
|
|
5
|
+
import {
|
|
6
|
+
FRONTEND_PLUGIN_ID,
|
|
7
|
+
PAGE_TYPE,
|
|
8
|
+
PANEL_CLOSABLE,
|
|
9
|
+
PANEL_LAYOUT,
|
|
10
|
+
SLOT,
|
|
11
|
+
TITLE_I18N_KEY
|
|
12
|
+
} from "./chunk-TSAEK5P3.mjs";
|
|
13
|
+
import {
|
|
14
|
+
attachViewportRenderResizeSync
|
|
15
|
+
} from "./chunk-ALT7XVMQ.mjs";
|
|
16
|
+
import {
|
|
17
|
+
readEnginePresentation
|
|
18
|
+
} from "./chunk-SSQMQJ52.mjs";
|
|
19
|
+
import {
|
|
20
|
+
createWorkspaceStateReader
|
|
21
|
+
} from "./chunk-FJM6WWIY.mjs";
|
|
22
|
+
|
|
23
|
+
// packages/view-plugin-viewport/src/page-input-gate.mjs
|
|
24
|
+
function attachViewportPageInputGate({ element, input, pageType = PAGE_TYPE, document } = {}) {
|
|
25
|
+
const editor = input?.editor;
|
|
26
|
+
if (!element || typeof editor?.setInputAllowed !== "function") return () => {
|
|
27
|
+
};
|
|
28
|
+
const ownerDocument = document ?? element.ownerDocument ?? globalThis.document;
|
|
29
|
+
const sync = () => {
|
|
30
|
+
const page = typeof element.closest === "function" ? element.closest("[data-forgeax-view-dock-page]") : null;
|
|
31
|
+
const pageHidden = page?.getAttribute?.("aria-hidden") === "true";
|
|
32
|
+
const activePage = ownerDocument?.documentElement?.dataset?.forgeaxViewActivePage;
|
|
33
|
+
const active = !pageHidden && (activePage === void 0 || activePage === pageType);
|
|
34
|
+
editor.setInputAllowed(active);
|
|
35
|
+
};
|
|
36
|
+
const observer = typeof MutationObserver === "function" ? new MutationObserver(sync) : void 0;
|
|
37
|
+
const root = ownerDocument?.documentElement;
|
|
38
|
+
try {
|
|
39
|
+
observer?.observe(root, {
|
|
40
|
+
attributes: true,
|
|
41
|
+
attributeFilter: ["data-forgeax-view-active-page", "aria-hidden"],
|
|
42
|
+
subtree: true
|
|
43
|
+
});
|
|
44
|
+
} catch {
|
|
45
|
+
observer?.disconnect();
|
|
46
|
+
}
|
|
47
|
+
sync();
|
|
48
|
+
return () => {
|
|
49
|
+
observer?.disconnect();
|
|
50
|
+
editor.setInputAllowed(true);
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// packages/view-plugin-viewport/src/play-toolbar.mjs
|
|
55
|
+
function mountPlayToolbar({ document, element, client }) {
|
|
56
|
+
const toolbar = document.createElement("div");
|
|
57
|
+
toolbar.setAttribute("role", "toolbar");
|
|
58
|
+
toolbar.setAttribute("aria-label", "Editor execution");
|
|
59
|
+
Object.assign(toolbar.style, { display: "flex", gap: "6px", padding: "6px", alignItems: "center", flexShrink: "0" });
|
|
60
|
+
const surface = document.createElement("div");
|
|
61
|
+
Object.assign(surface.style, { position: "relative", flex: "1", minHeight: "0" });
|
|
62
|
+
Object.assign(element.style, { display: "flex", flexDirection: "column", height: "100%" });
|
|
63
|
+
element.append(toolbar, surface);
|
|
64
|
+
let state;
|
|
65
|
+
let navigationSpeed = 4;
|
|
66
|
+
let errorText = "";
|
|
67
|
+
let disposed = false;
|
|
68
|
+
let playRequest;
|
|
69
|
+
const pending = /* @__PURE__ */ new Set();
|
|
70
|
+
const buttons = [];
|
|
71
|
+
const status = document.createElement("span");
|
|
72
|
+
status.title = "WASD/QE: move \xB7 Shift: boost \xB7 RMB drag: look / fly \xB7 RMB + wheel: speed \xB7 MMB: pan \xB7 Alt + drag: orbit/pan/dolly \xB7 F: focus \xB7 Esc: release";
|
|
73
|
+
status.setAttribute("role", "status");
|
|
74
|
+
status.style.color = "var(--fx-color-text-secondary)";
|
|
75
|
+
const navHint = document.createElement("div");
|
|
76
|
+
navHint.textContent = "WASD/QE move \xB7 Shift boost \xB7 RMB look/fly \xB7 wheel speed \xB7 F focus";
|
|
77
|
+
Object.assign(navHint.style, {
|
|
78
|
+
position: "absolute",
|
|
79
|
+
right: "8px",
|
|
80
|
+
bottom: "6px",
|
|
81
|
+
zIndex: "1",
|
|
82
|
+
fontSize: "11px",
|
|
83
|
+
lineHeight: "1.4",
|
|
84
|
+
pointerEvents: "none",
|
|
85
|
+
userSelect: "none",
|
|
86
|
+
color: "var(--fx-color-text-secondary)",
|
|
87
|
+
opacity: "0.75",
|
|
88
|
+
textShadow: "0 1px 2px var(--fx-color-background, rgba(0,0,0,0.5))"
|
|
89
|
+
});
|
|
90
|
+
surface.append(navHint);
|
|
91
|
+
const args = () => ({ targetId: state.play.target.targetId, targetGeneration: state.play.target.generation });
|
|
92
|
+
const control = () => state?.targetBinding === "play" ? state?.preview?.camera?.control : void 0;
|
|
93
|
+
const running = () => state?.play?.phase === "running" && state?.targetBinding === "play";
|
|
94
|
+
const add = (label, run, available) => {
|
|
95
|
+
const button2 = document.createElement("button");
|
|
96
|
+
button2.textContent = label;
|
|
97
|
+
button2.type = "button";
|
|
98
|
+
button2.className = "fx-button fx-button--compact";
|
|
99
|
+
button2.setAttribute("data-action", `editor.${label.toLowerCase()}`);
|
|
100
|
+
button2.addEventListener("click", async () => {
|
|
101
|
+
pending.add(label);
|
|
102
|
+
errorText = "";
|
|
103
|
+
render();
|
|
104
|
+
try {
|
|
105
|
+
await run();
|
|
106
|
+
if (!disposed) state = await client.getState();
|
|
107
|
+
} catch (error) {
|
|
108
|
+
if (!disposed) errorText = error.hint ?? error.message;
|
|
109
|
+
} finally {
|
|
110
|
+
pending.delete(label);
|
|
111
|
+
if (!disposed) render();
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
buttons.push({ button: button2, label, available });
|
|
115
|
+
toolbar.append(button2);
|
|
116
|
+
};
|
|
117
|
+
add("Play", async () => {
|
|
118
|
+
const controller = new AbortController();
|
|
119
|
+
playRequest = controller;
|
|
120
|
+
try {
|
|
121
|
+
const options = { signal: controller.signal };
|
|
122
|
+
const opened = await client.call("play.start", { projectId: state.project.id }, options);
|
|
123
|
+
controller.signal.throwIfAborted();
|
|
124
|
+
state = opened;
|
|
125
|
+
render();
|
|
126
|
+
const target = { targetId: opened.play.target.targetId, targetGeneration: opened.play.target.generation };
|
|
127
|
+
await client.call("play.ready", target, options);
|
|
128
|
+
await client.call("camera.get", target, options);
|
|
129
|
+
} catch (error) {
|
|
130
|
+
if (!controller.signal.aborted) throw error;
|
|
131
|
+
} finally {
|
|
132
|
+
if (playRequest === controller) playRequest = void 0;
|
|
133
|
+
}
|
|
134
|
+
}, () => !!state?.project && !state?.play);
|
|
135
|
+
add("Stop", async () => {
|
|
136
|
+
playRequest?.abort();
|
|
137
|
+
if (state?.play) await client.call("play.stop", args());
|
|
138
|
+
}, () => !!state?.play || pending.has("Play"));
|
|
139
|
+
add("Eject", () => client.call("target.control", { ...args(), mode: "observer" }), () => running() && control() !== "observer");
|
|
140
|
+
add("Possess", () => client.call("target.control", { ...args(), mode: "player" }), () => running() && control() === "observer");
|
|
141
|
+
add("Editor", () => client.call("target.select", { targetId: state.editorPreview.target.targetId }), () => !!state?.editorPreview && state?.targetBinding === "play");
|
|
142
|
+
add("Game", async () => {
|
|
143
|
+
await client.call("target.select", { targetId: state.play.target.targetId });
|
|
144
|
+
await client.call("camera.get", args());
|
|
145
|
+
}, () => !!state?.play && state?.targetBinding !== "play");
|
|
146
|
+
toolbar.append(status);
|
|
147
|
+
const render = () => {
|
|
148
|
+
for (const { button: button2, label, available } of buttons) {
|
|
149
|
+
const disabled = pending.has(label) || pending.size > 0 && label !== "Stop" || !available();
|
|
150
|
+
if (button2.disabled !== disabled) button2.disabled = disabled;
|
|
151
|
+
}
|
|
152
|
+
const target = state?.targetBinding ?? "editor";
|
|
153
|
+
if (surface.dataset.forgeaxToolTarget !== target) surface.dataset.forgeaxToolTarget = target;
|
|
154
|
+
let nextStatus = errorText || (state?.play ? `${state.targetBinding === "play" ? "Game" : "Editor"} tools \xB7 ${state.play.phase}${control() === "observer" ? " \xB7 Free camera" : ""}` : pending.has("Play") ? "Preparing Play\u2026" : "Editor tools");
|
|
155
|
+
if (!errorText && state?.targetBinding !== "play")
|
|
156
|
+
nextStatus += " \xB7 Speed " + navigationSpeed.toFixed(2);
|
|
157
|
+
if (status.textContent !== nextStatus) status.textContent = nextStatus;
|
|
158
|
+
};
|
|
159
|
+
const reader = createWorkspaceStateReader(client);
|
|
160
|
+
const unsubscribe = reader.subscribe(() => {
|
|
161
|
+
if (!disposed) {
|
|
162
|
+
state = reader.getSnapshot();
|
|
163
|
+
render();
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
render();
|
|
167
|
+
return {
|
|
168
|
+
surface,
|
|
169
|
+
setNavigationSpeed(speed) {
|
|
170
|
+
navigationSpeed = speed;
|
|
171
|
+
if (!disposed) render();
|
|
172
|
+
},
|
|
173
|
+
dispose() {
|
|
174
|
+
disposed = true;
|
|
175
|
+
playRequest?.abort();
|
|
176
|
+
unsubscribe();
|
|
177
|
+
toolbar.remove();
|
|
178
|
+
surface.remove();
|
|
179
|
+
}
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
// packages/view-plugin-viewport/src/editor-surface.mjs
|
|
184
|
+
function fitEditorSurface(surface) {
|
|
185
|
+
const previous = surface.getAttribute?.("style");
|
|
186
|
+
Object.assign(surface.style, {
|
|
187
|
+
width: "100%",
|
|
188
|
+
height: "100%",
|
|
189
|
+
maxWidth: "100%",
|
|
190
|
+
maxHeight: "100%",
|
|
191
|
+
position: "relative",
|
|
192
|
+
transform: "none",
|
|
193
|
+
overflow: "hidden"
|
|
194
|
+
});
|
|
195
|
+
return () => {
|
|
196
|
+
if (previous == null) surface.removeAttribute?.("style");
|
|
197
|
+
else surface.setAttribute?.("style", previous);
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
// packages/view-plugin-viewport/src/engine-fatal-banner.mjs
|
|
202
|
+
var ENGINE_FATAL_ID = "forgeax-fatal";
|
|
203
|
+
var BANNER_CLASS = "fx-engine-fatal-banner";
|
|
204
|
+
var MESSAGE_CLASS = "fx-engine-fatal-banner__message";
|
|
205
|
+
var ACTIONS_CLASS = "fx-engine-fatal-banner__actions";
|
|
206
|
+
function fatalElement(document) {
|
|
207
|
+
if (!document) return null;
|
|
208
|
+
return document.getElementById?.(ENGINE_FATAL_ID) ?? document.querySelector?.(`#${ENGINE_FATAL_ID}`) ?? null;
|
|
209
|
+
}
|
|
210
|
+
function resolveHost(host) {
|
|
211
|
+
return typeof host === "function" ? host() : host;
|
|
212
|
+
}
|
|
213
|
+
function canvasHost(document, fallback) {
|
|
214
|
+
const canvas = document.querySelector?.(".fx-view-viewport-surface #app") ?? document.querySelector?.("#app");
|
|
215
|
+
if (canvas?.parentElement) return canvas.parentElement;
|
|
216
|
+
return document.querySelector?.('.fx-view-viewport-surface [data-forgeax-view-workspace="targets"]') ?? resolveHost(fallback);
|
|
217
|
+
}
|
|
218
|
+
function readFatalText(notice) {
|
|
219
|
+
return typeof notice?.textContent === "string" ? notice.textContent.trim() : "";
|
|
220
|
+
}
|
|
221
|
+
function isEngineFatalShown(notice) {
|
|
222
|
+
return notice?.style?.display === "grid" && readFatalText(notice) !== "";
|
|
223
|
+
}
|
|
224
|
+
function button(document, label, ariaLabel) {
|
|
225
|
+
const node = document.createElement("button");
|
|
226
|
+
node.type = "button";
|
|
227
|
+
node.className = "fx-button fx-button--compact fx-button--quiet";
|
|
228
|
+
node.textContent = label;
|
|
229
|
+
node.setAttribute("aria-label", ariaLabel);
|
|
230
|
+
return node;
|
|
231
|
+
}
|
|
232
|
+
function createBanner(document, { onCopy, onClose }) {
|
|
233
|
+
const banner = document.createElement("div");
|
|
234
|
+
banner.className = `${BANNER_CLASS} fx-ui`;
|
|
235
|
+
banner.setAttribute("role", "alert");
|
|
236
|
+
banner.hidden = true;
|
|
237
|
+
const message = document.createElement("pre");
|
|
238
|
+
message.className = MESSAGE_CLASS;
|
|
239
|
+
const actions = document.createElement("div");
|
|
240
|
+
actions.className = ACTIONS_CLASS;
|
|
241
|
+
const copy = button(document, "Copy error", "Copy the error reason");
|
|
242
|
+
const close = button(document, "Close", "Dismiss the error banner");
|
|
243
|
+
copy.addEventListener("click", (event) => {
|
|
244
|
+
event.preventDefault();
|
|
245
|
+
event.stopPropagation();
|
|
246
|
+
onCopy(message.textContent?.trim() ?? "", copy);
|
|
247
|
+
});
|
|
248
|
+
close.addEventListener("click", (event) => {
|
|
249
|
+
event.preventDefault();
|
|
250
|
+
event.stopPropagation();
|
|
251
|
+
onClose();
|
|
252
|
+
});
|
|
253
|
+
actions.append(copy, close);
|
|
254
|
+
banner.append(message, actions);
|
|
255
|
+
return { banner, message, copy };
|
|
256
|
+
}
|
|
257
|
+
function placeBanner(banner, host) {
|
|
258
|
+
if (!host || banner.parentNode === host) return;
|
|
259
|
+
host.append?.(banner);
|
|
260
|
+
}
|
|
261
|
+
function attachEngineFatalBanner({
|
|
262
|
+
document = globalThis.document,
|
|
263
|
+
host
|
|
264
|
+
} = {}) {
|
|
265
|
+
if (!document?.createElement) return () => {
|
|
266
|
+
};
|
|
267
|
+
const { banner, message, copy } = createBanner(document, {
|
|
268
|
+
onCopy(text, button2) {
|
|
269
|
+
if (!text || typeof navigator?.clipboard?.writeText !== "function") return;
|
|
270
|
+
void navigator.clipboard.writeText(text).then(() => {
|
|
271
|
+
button2.textContent = "Copied";
|
|
272
|
+
setTimeout(() => {
|
|
273
|
+
if (button2.isConnected) button2.textContent = "Copy error";
|
|
274
|
+
}, 2e3);
|
|
275
|
+
}).catch(() => {
|
|
276
|
+
});
|
|
277
|
+
},
|
|
278
|
+
onClose() {
|
|
279
|
+
fatalElement(document)?.style?.removeProperty?.("display");
|
|
280
|
+
banner.hidden = true;
|
|
281
|
+
}
|
|
282
|
+
});
|
|
283
|
+
const sync = () => {
|
|
284
|
+
placeBanner(banner, canvasHost(document, host));
|
|
285
|
+
const notice = fatalElement(document);
|
|
286
|
+
const text = readFatalText(notice);
|
|
287
|
+
if (!isEngineFatalShown(notice)) {
|
|
288
|
+
banner.hidden = true;
|
|
289
|
+
return;
|
|
290
|
+
}
|
|
291
|
+
if (message.textContent !== text) message.textContent = text;
|
|
292
|
+
if (copy.textContent !== "Copy error") copy.textContent = "Copy error";
|
|
293
|
+
banner.hidden = false;
|
|
294
|
+
};
|
|
295
|
+
if (typeof MutationObserver !== "function") {
|
|
296
|
+
sync();
|
|
297
|
+
return () => banner.remove?.();
|
|
298
|
+
}
|
|
299
|
+
const noticeObserver = new MutationObserver(sync);
|
|
300
|
+
let observed;
|
|
301
|
+
const watchNotice = () => {
|
|
302
|
+
const notice = fatalElement(document);
|
|
303
|
+
if (!notice || notice === observed) {
|
|
304
|
+
sync();
|
|
305
|
+
return;
|
|
306
|
+
}
|
|
307
|
+
observed = notice;
|
|
308
|
+
noticeObserver.observe(notice, {
|
|
309
|
+
attributes: true,
|
|
310
|
+
attributeFilter: ["style"],
|
|
311
|
+
childList: true,
|
|
312
|
+
subtree: true,
|
|
313
|
+
characterData: true
|
|
314
|
+
});
|
|
315
|
+
sync();
|
|
316
|
+
};
|
|
317
|
+
watchNotice();
|
|
318
|
+
const root = document.documentElement ?? document.body;
|
|
319
|
+
const rootObserver = root ? new MutationObserver(watchNotice) : void 0;
|
|
320
|
+
rootObserver?.observe(root, { childList: true, subtree: true });
|
|
321
|
+
return () => {
|
|
322
|
+
noticeObserver.disconnect();
|
|
323
|
+
rootObserver?.disconnect();
|
|
324
|
+
banner.remove?.();
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
// packages/view-plugin-viewport/src/frontend.mjs
|
|
329
|
+
function claimViewportPanel(panelHost) {
|
|
330
|
+
return panelHost.claim({
|
|
331
|
+
id: SLOT,
|
|
332
|
+
pageType: PAGE_TYPE,
|
|
333
|
+
titleKey: TITLE_I18N_KEY,
|
|
334
|
+
activity: { labelKey: TITLE_I18N_KEY, icon: "box" },
|
|
335
|
+
layout: PANEL_LAYOUT,
|
|
336
|
+
closable: PANEL_CLOSABLE,
|
|
337
|
+
dockTitleHidden: true
|
|
338
|
+
});
|
|
339
|
+
}
|
|
340
|
+
function liveWorkspacePresentation(ctx, config, { api, document }) {
|
|
341
|
+
const read = () => readEnginePresentation(config, ctx);
|
|
342
|
+
return new Proxy({}, {
|
|
343
|
+
get(_, prop) {
|
|
344
|
+
if (prop === "surfacePlacement") return "shell";
|
|
345
|
+
const workspace = read();
|
|
346
|
+
if (prop === "attach") {
|
|
347
|
+
return async (input) => {
|
|
348
|
+
const remove = await workspace?.attach?.(input);
|
|
349
|
+
const surface = input.element;
|
|
350
|
+
if (!surface?.style || !surface.parentElement) return remove;
|
|
351
|
+
const onContextMenu = (event) => {
|
|
352
|
+
event.preventDefault();
|
|
353
|
+
};
|
|
354
|
+
surface.addEventListener?.("contextmenu", onContextMenu);
|
|
355
|
+
const restoreFit = fitEditorSurface(surface);
|
|
356
|
+
const detachResize = attachViewportRenderResizeSync({
|
|
357
|
+
api,
|
|
358
|
+
surface,
|
|
359
|
+
target: input.target
|
|
360
|
+
});
|
|
361
|
+
return async () => {
|
|
362
|
+
detachResize();
|
|
363
|
+
surface.removeEventListener?.("contextmenu", onContextMenu);
|
|
364
|
+
restoreFit();
|
|
365
|
+
await remove?.();
|
|
366
|
+
};
|
|
367
|
+
};
|
|
368
|
+
}
|
|
369
|
+
if (prop === "createSurface") {
|
|
370
|
+
if (typeof workspace?.createSurface === "function") return workspace.createSurface;
|
|
371
|
+
return (input) => (input?.document ?? document)?.getElementById?.("app-shell") ?? null;
|
|
372
|
+
}
|
|
373
|
+
return workspace?.[prop];
|
|
374
|
+
}
|
|
375
|
+
});
|
|
376
|
+
}
|
|
377
|
+
var viewportSurfacePlugin = {
|
|
378
|
+
name: FRONTEND_PLUGIN_ID,
|
|
379
|
+
inject: ["viewOperationClient", "viewPlayPresentation"],
|
|
380
|
+
provide: ["viewWorkspaceShell"],
|
|
381
|
+
async apply(ctx, config = {}) {
|
|
382
|
+
const document = config.document ?? globalThis.document;
|
|
383
|
+
const api = ctx.get("viewOperationClient");
|
|
384
|
+
const element = config.viewportSurface;
|
|
385
|
+
if (!element || !document?.createElement) return;
|
|
386
|
+
const workspace = readEnginePresentation(config, ctx);
|
|
387
|
+
if (workspace && !ctx.get("engineWorkspacePresentation", false)) {
|
|
388
|
+
ctx.provide("engineWorkspacePresentation", workspace);
|
|
389
|
+
}
|
|
390
|
+
const presentation = {
|
|
391
|
+
workspace: liveWorkspacePresentation(ctx, config, { api, document }),
|
|
392
|
+
display: createBrowserPagePresentation({ document })
|
|
393
|
+
};
|
|
394
|
+
let shell;
|
|
395
|
+
let play;
|
|
396
|
+
try {
|
|
397
|
+
play = mountPlayToolbar({ document, element, client: api });
|
|
398
|
+
const mainSurface = document.createElement("div");
|
|
399
|
+
Object.assign(mainSurface.style, {
|
|
400
|
+
flex: "1",
|
|
401
|
+
minWidth: "0",
|
|
402
|
+
minHeight: "0",
|
|
403
|
+
width: "100%",
|
|
404
|
+
height: "100%",
|
|
405
|
+
position: "relative"
|
|
406
|
+
});
|
|
407
|
+
Object.assign(play.surface.style, { display: "flex" });
|
|
408
|
+
play.surface.append(mainSurface);
|
|
409
|
+
ctx.effect(() => ctx.get("viewPlayPresentation").attach(mainSurface));
|
|
410
|
+
shell = new ViewWorkspaceShell({
|
|
411
|
+
document,
|
|
412
|
+
element: mainSurface,
|
|
413
|
+
mountId: element.id,
|
|
414
|
+
api,
|
|
415
|
+
presentation,
|
|
416
|
+
resourceBrowser: false,
|
|
417
|
+
inspectorPanel: false,
|
|
418
|
+
presentationOnly: true,
|
|
419
|
+
onNavigationSpeed: (speed) => play.setNavigationSpeed(speed)
|
|
420
|
+
});
|
|
421
|
+
ctx.provide("viewWorkspaceShell", shell);
|
|
422
|
+
ctx.effect(() => attachEngineFatalBanner({ document, host: mainSurface }));
|
|
423
|
+
ctx.effect(() => attachViewportPageInputGate({
|
|
424
|
+
element,
|
|
425
|
+
input: ctx.get("engineWorkspaceInput", false),
|
|
426
|
+
pageType: PAGE_TYPE,
|
|
427
|
+
document
|
|
428
|
+
}));
|
|
429
|
+
} catch (error) {
|
|
430
|
+
await shell?.dispose();
|
|
431
|
+
play?.dispose();
|
|
432
|
+
throw error;
|
|
433
|
+
}
|
|
434
|
+
ctx.effect(() => async () => {
|
|
435
|
+
await shell?.dispose();
|
|
436
|
+
play?.dispose();
|
|
437
|
+
});
|
|
438
|
+
}
|
|
439
|
+
};
|
|
440
|
+
var viewViewportFrontendPlugin = {
|
|
441
|
+
name: FRONTEND_PLUGIN_ID,
|
|
442
|
+
inject: ["viewOperationClient", "viewScenePage"],
|
|
443
|
+
async apply(ctx, config = {}) {
|
|
444
|
+
const panelHost = config.panelHost ?? ctx.get?.("panelHost", false);
|
|
445
|
+
if (!panelHost) return;
|
|
446
|
+
const unclaim = claimViewportPanel(panelHost);
|
|
447
|
+
ctx.effect(() => unclaim);
|
|
448
|
+
const document = config.document ?? globalThis.document;
|
|
449
|
+
if (!document?.createElement) return;
|
|
450
|
+
const element = document.createElement("div");
|
|
451
|
+
element.id = config.workspace?.mountId ?? "forgeax-view-workspace";
|
|
452
|
+
element.className = "fx-view-viewport-surface";
|
|
453
|
+
await panelHost.waitForSlot(SLOT);
|
|
454
|
+
const unmount = panelHost.mount(SLOT, element);
|
|
455
|
+
ctx.effect(() => () => unmount?.());
|
|
456
|
+
await ctx.plugin({
|
|
457
|
+
...viewportSurfacePlugin,
|
|
458
|
+
name: `${FRONTEND_PLUGIN_ID}.surface`
|
|
459
|
+
}, { ...config, viewportSurface: element });
|
|
460
|
+
}
|
|
461
|
+
};
|
|
462
|
+
var frontend_default = viewViewportFrontendPlugin;
|
|
463
|
+
|
|
464
|
+
export {
|
|
465
|
+
viewViewportFrontendPlugin,
|
|
466
|
+
frontend_default
|
|
467
|
+
};
|
|
468
|
+
//# sourceMappingURL=chunk-6ZWWVAZK.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../packages/view-plugin-viewport/src/page-input-gate.mjs", "../../../packages/view-plugin-viewport/src/play-toolbar.mjs", "../../../packages/view-plugin-viewport/src/editor-surface.mjs", "../../../packages/view-plugin-viewport/src/engine-fatal-banner.mjs", "../../../packages/view-plugin-viewport/src/frontend.mjs"],
|
|
4
|
+
"sourcesContent": ["import { PAGE_TYPE } from './identity.mjs';\n\n/**\n * Engine's browser input backend listens on window. When the Editor page is\n * not the active page tab, drop those samples so a sibling preview cannot\n * drive the viewport camera or game.\n */\nexport function attachViewportPageInputGate({ element, input, pageType = PAGE_TYPE, document } = {}) {\n const editor = input?.editor;\n if (!element || typeof editor?.setInputAllowed !== 'function') return () => {};\n const ownerDocument = document ?? element.ownerDocument ?? globalThis.document;\n const sync = () => {\n const page = typeof element.closest === 'function'\n ? element.closest('[data-forgeax-view-dock-page]')\n : null;\n const pageHidden = page?.getAttribute?.('aria-hidden') === 'true';\n const activePage = ownerDocument?.documentElement?.dataset?.forgeaxViewActivePage;\n const active = !pageHidden && (activePage === undefined || activePage === pageType);\n editor.setInputAllowed(active);\n };\n const observer = typeof MutationObserver === 'function'\n ? new MutationObserver(sync)\n : undefined;\n const root = ownerDocument?.documentElement;\n try {\n observer?.observe(root, {\n attributes: true,\n attributeFilter: ['data-forgeax-view-active-page', 'aria-hidden'],\n subtree: true,\n });\n } catch {\n observer?.disconnect();\n }\n sync();\n return () => {\n observer?.disconnect();\n editor.setInputAllowed(true);\n };\n}\n", "import { createWorkspaceStateReader } from '@forgeax/view-workspace-core/workspace-state';\n\n/** Presentation commands use the same target API as the CLI and object panels. */\nexport function mountPlayToolbar({ document, element, client }) {\n const toolbar = document.createElement('div');\n toolbar.setAttribute('role', 'toolbar');\n toolbar.setAttribute('aria-label', 'Editor execution');\n Object.assign(toolbar.style, { display: 'flex', gap: '6px', padding: '6px', alignItems: 'center', flexShrink: '0' });\n const surface = document.createElement('div');\n Object.assign(surface.style, { position: 'relative', flex: '1', minHeight: '0' });\n Object.assign(element.style, { display: 'flex', flexDirection: 'column', height: '100%' });\n element.append(toolbar, surface);\n let state;\n let navigationSpeed = 4;\n let errorText = '';\n let disposed = false;\n let playRequest;\n const pending = new Set();\n const buttons = [];\n const status = document.createElement('span');\n status.title = 'WASD/QE: move \u00B7 Shift: boost \u00B7 RMB drag: look / fly \u00B7 RMB + wheel: speed \u00B7 MMB: pan \u00B7 Alt + drag: orbit/pan/dolly \u00B7 F: focus \u00B7 Esc: release';\n status.setAttribute('role', 'status');\n status.style.color = 'var(--fx-color-text-secondary)';\n // Always-visible navigation hint in the viewport corner; pointer-events stay\n // off so it never intercepts camera input.\n const navHint = document.createElement('div');\n navHint.textContent = 'WASD/QE move \u00B7 Shift boost \u00B7 RMB look/fly \u00B7 wheel speed \u00B7 F focus';\n Object.assign(navHint.style, {\n position: 'absolute', right: '8px', bottom: '6px', zIndex: '1',\n fontSize: '11px', lineHeight: '1.4', pointerEvents: 'none', userSelect: 'none',\n color: 'var(--fx-color-text-secondary)', opacity: '0.75',\n textShadow: '0 1px 2px var(--fx-color-background, rgba(0,0,0,0.5))',\n });\n surface.append(navHint);\n const args = () => ({ targetId: state.play.target.targetId, targetGeneration: state.play.target.generation });\n const control = () => state?.targetBinding === 'play' ? state?.preview?.camera?.control : undefined;\n const running = () => state?.play?.phase === 'running' && state?.targetBinding === 'play';\n const add = (label, run, available) => {\n const button = document.createElement('button');\n button.textContent = label;\n button.type = 'button';\n button.className = 'fx-button fx-button--compact';\n button.setAttribute('data-action', `editor.${label.toLowerCase()}`);\n button.addEventListener('click', async () => {\n pending.add(label); errorText = ''; render();\n try { await run(); if (!disposed) state = await client.getState(); }\n catch (error) { if (!disposed) errorText = error.hint ?? error.message; }\n finally { pending.delete(label); if (!disposed) render(); }\n });\n buttons.push({ button, label, available }); toolbar.append(button);\n };\n add('Play', async () => {\n const controller = new AbortController();\n playRequest = controller;\n try {\n const options = { signal: controller.signal };\n const opened = await client.call('play.start', { projectId: state.project.id }, options);\n controller.signal.throwIfAborted();\n state = opened;\n render();\n const target = { targetId: opened.play.target.targetId, targetGeneration: opened.play.target.generation };\n await client.call('play.ready', target, options);\n await client.call('camera.get', target, options);\n } catch (error) {\n if (!controller.signal.aborted) throw error;\n } finally {\n if (playRequest === controller) playRequest = undefined;\n }\n }, () => !!state?.project && !state?.play);\n add('Stop', async () => {\n playRequest?.abort();\n if (state?.play) await client.call('play.stop', args());\n }, () => !!state?.play || pending.has('Play'));\n add('Eject', () => client.call('target.control', { ...args(), mode: 'observer' }), () => running() && control() !== 'observer');\n add('Possess', () => client.call('target.control', { ...args(), mode: 'player' }), () => running() && control() === 'observer');\n add('Editor', () => client.call('target.select', { targetId: state.editorPreview.target.targetId }), () => !!state?.editorPreview && state?.targetBinding === 'play');\n add('Game', async () => {\n await client.call('target.select', { targetId: state.play.target.targetId });\n await client.call('camera.get', args());\n }, () => !!state?.play && state?.targetBinding !== 'play');\n toolbar.append(status);\n const render = () => {\n for (const { button, label, available } of buttons) {\n const disabled = pending.has(label) || (pending.size > 0 && label !== 'Stop') || !available();\n if (button.disabled !== disabled) button.disabled = disabled;\n }\n const target = state?.targetBinding ?? 'editor';\n if (surface.dataset.forgeaxToolTarget !== target) surface.dataset.forgeaxToolTarget = target;\n let nextStatus = errorText || (state?.play\n ? `${state.targetBinding === 'play' ? 'Game' : 'Editor'} tools \u00B7 ${state.play.phase}${control() === 'observer' ? ' \u00B7 Free camera' : ''}`\n : pending.has('Play') ? 'Preparing Play\u2026' : 'Editor tools');\n if (!errorText && state?.targetBinding !== 'play')\n nextStatus += ' \u00B7 Speed ' + navigationSpeed.toFixed(2);\n if (status.textContent !== nextStatus) status.textContent = nextStatus;\n };\n const reader = createWorkspaceStateReader(client);\n const unsubscribe = reader.subscribe(() => { if (!disposed) { state = reader.getSnapshot(); render(); } });\n render();\n return { surface,\n setNavigationSpeed(speed) { navigationSpeed = speed; if (!disposed) render(); },\n dispose() { disposed = true; playRequest?.abort(); unsubscribe(); toolbar.remove(); surface.remove(); } };\n}\n", "/** Fit the borrowed Editor container without a transformed or cross-tree overlay. */\nexport function fitEditorSurface(surface) {\n const previous = surface.getAttribute?.('style');\n Object.assign(surface.style, {\n width: '100%', height: '100%', maxWidth: '100%', maxHeight: '100%',\n position: 'relative', transform: 'none', overflow: 'hidden',\n });\n return () => {\n if (previous == null) surface.removeAttribute?.('style');\n else surface.setAttribute?.('style', previous);\n };\n}\n", "const ENGINE_FATAL_ID = 'forgeax-fatal';\nconst BANNER_CLASS = 'fx-engine-fatal-banner';\nconst MESSAGE_CLASS = 'fx-engine-fatal-banner__message';\nconst ACTIONS_CLASS = 'fx-engine-fatal-banner__actions';\n\nfunction fatalElement(document) {\n if (!document) return null;\n return document.getElementById?.(ENGINE_FATAL_ID)\n ?? document.querySelector?.(`#${ENGINE_FATAL_ID}`)\n ?? null;\n}\n\nfunction resolveHost(host) {\n return typeof host === 'function' ? host() : host;\n}\n\n/** Canvas box: #app-shell wraps #app. Fall back to the View targets cell. */\nfunction canvasHost(document, fallback) {\n const canvas = document.querySelector?.('.fx-view-viewport-surface #app')\n ?? document.querySelector?.('#app');\n if (canvas?.parentElement) return canvas.parentElement;\n return document.querySelector?.('.fx-view-viewport-surface [data-forgeax-view-workspace=\"targets\"]')\n ?? resolveHost(fallback);\n}\n\nfunction readFatalText(notice) {\n return typeof notice?.textContent === 'string' ? notice.textContent.trim() : '';\n}\n\n/** Engine's generated overlay has no event. show() sets #forgeax-fatal text and inline display:grid. */\nfunction isEngineFatalShown(notice) {\n return notice?.style?.display === 'grid' && readFatalText(notice) !== '';\n}\n\nfunction button(document, label, ariaLabel) {\n const node = document.createElement('button');\n node.type = 'button';\n node.className = 'fx-button fx-button--compact fx-button--quiet';\n node.textContent = label;\n node.setAttribute('aria-label', ariaLabel);\n return node;\n}\n\nfunction createBanner(document, { onCopy, onClose }) {\n const banner = document.createElement('div');\n banner.className = `${BANNER_CLASS} fx-ui`;\n banner.setAttribute('role', 'alert');\n banner.hidden = true;\n const message = document.createElement('pre');\n message.className = MESSAGE_CLASS;\n const actions = document.createElement('div');\n actions.className = ACTIONS_CLASS;\n const copy = button(document, 'Copy error', 'Copy the error reason');\n const close = button(document, 'Close', 'Dismiss the error banner');\n copy.addEventListener('click', (event) => {\n event.preventDefault();\n event.stopPropagation();\n onCopy(message.textContent?.trim() ?? '', copy);\n });\n close.addEventListener('click', (event) => {\n event.preventDefault();\n event.stopPropagation();\n onClose();\n });\n actions.append(copy, close);\n banner.append(message, actions);\n return { banner, message, copy };\n}\n\nfunction placeBanner(banner, host) {\n if (!host || banner.parentNode === host) return;\n host.append?.(banner);\n}\n\n/**\n * Engine does not publish a fatal event. This watches the generated overlay\n * node: id=forgeax-fatal, inline style.display=grid, non-empty textContent.\n * The banner is View DOM, absolutely positioned on the canvas box.\n */\nexport function attachEngineFatalBanner({\n document = globalThis.document,\n host,\n} = {}) {\n if (!document?.createElement) return () => {};\n const { banner, message, copy } = createBanner(document, {\n onCopy(text, button) {\n if (!text || typeof navigator?.clipboard?.writeText !== 'function') return;\n void navigator.clipboard.writeText(text).then(() => {\n button.textContent = 'Copied';\n setTimeout(() => {\n if (button.isConnected) button.textContent = 'Copy error';\n }, 2000);\n }).catch(() => {});\n },\n onClose() {\n // Restore Engine's initial hidden overlay. Keep the node and its text;\n // show() looks it up by id and writes display:grid again.\n fatalElement(document)?.style?.removeProperty?.('display');\n banner.hidden = true;\n },\n });\n\n const sync = () => {\n placeBanner(banner, canvasHost(document, host));\n const notice = fatalElement(document);\n const text = readFatalText(notice);\n if (!isEngineFatalShown(notice)) {\n banner.hidden = true;\n return;\n }\n if (message.textContent !== text) message.textContent = text;\n if (copy.textContent !== 'Copy error') copy.textContent = 'Copy error';\n banner.hidden = false;\n };\n\n if (typeof MutationObserver !== 'function') {\n sync();\n return () => banner.remove?.();\n }\n\n const noticeObserver = new MutationObserver(sync);\n let observed;\n const watchNotice = () => {\n const notice = fatalElement(document);\n if (!notice || notice === observed) {\n sync();\n return;\n }\n observed = notice;\n noticeObserver.observe(notice, {\n attributes: true,\n attributeFilter: ['style'],\n childList: true,\n subtree: true,\n characterData: true,\n });\n sync();\n };\n\n watchNotice();\n const root = document.documentElement ?? document.body;\n const rootObserver = root ? new MutationObserver(watchNotice) : undefined;\n rootObserver?.observe(root, { childList: true, subtree: true });\n return () => {\n noticeObserver.disconnect();\n rootObserver?.disconnect();\n banner.remove?.();\n };\n}\n", "import { readEnginePresentation } from '@forgeax/view-workspace-core/engine-presentation';\nimport { createBrowserPagePresentation, ViewWorkspaceShell } from './workspace-shell.mjs';\nimport { PAGE_TYPE, PANEL_CLOSABLE, PANEL_LAYOUT, FRONTEND_PLUGIN_ID, SLOT, TITLE_I18N_KEY } from './identity.mjs';\nimport { attachViewportRenderResizeSync } from './render-resize-sync.mjs';\nimport { attachViewportPageInputGate } from './page-input-gate.mjs';\nimport { mountPlayToolbar } from './play-toolbar.mjs';\nimport { fitEditorSurface } from './editor-surface.mjs';\nimport { viewPlayPresentationPlugin } from './play-presentation.mjs';\nimport { attachEngineFatalBanner } from './engine-fatal-banner.mjs';\n\nfunction claimViewportPanel(panelHost) {\n return panelHost.claim({\n id: SLOT, pageType: PAGE_TYPE, titleKey: TITLE_I18N_KEY,\n activity: { labelKey: TITLE_I18N_KEY, icon: 'box' }, layout: PANEL_LAYOUT,\n closable: PANEL_CLOSABLE,\n dockTitleHidden: true,\n });\n}\n\nfunction liveWorkspacePresentation(ctx, config, { api, document }) {\n const read = () => readEnginePresentation(config, ctx);\n return new Proxy({}, {\n get(_, prop) {\n if (prop === 'surfacePlacement') return 'shell';\n const workspace = read();\n if (prop === 'attach') {\n return async (input) => {\n const remove = await workspace?.attach?.(input);\n const surface = input.element;\n if (!surface?.style || !surface.parentElement) return remove;\n const onContextMenu = (event) => {\n event.preventDefault();\n };\n surface.addEventListener?.('contextmenu', onContextMenu);\n const restoreFit = fitEditorSurface(surface);\n const detachResize = attachViewportRenderResizeSync({\n api,\n surface,\n target: input.target,\n });\n return async () => {\n detachResize();\n surface.removeEventListener?.('contextmenu', onContextMenu);\n restoreFit();\n await remove?.();\n };\n };\n }\n if (prop === 'createSurface') {\n if (typeof workspace?.createSurface === 'function') return workspace.createSurface;\n return (input) => (input?.document ?? document)?.getElementById?.('app-shell') ?? null;\n }\n return workspace?.[prop];\n },\n });\n}\n\nconst viewportSurfacePlugin = {\n name: FRONTEND_PLUGIN_ID,\n inject: ['viewOperationClient', 'viewPlayPresentation'],\n provide: ['viewWorkspaceShell'],\n async apply(ctx, config = {}) {\n const document = config.document ?? globalThis.document;\n const api = ctx.get('viewOperationClient');\n const element = config.viewportSurface;\n if (!element || !document?.createElement) return;\n const workspace = readEnginePresentation(config, ctx);\n if (workspace && !ctx.get('engineWorkspacePresentation', false)) {\n ctx.provide('engineWorkspacePresentation', workspace);\n }\n const presentation = {\n workspace: liveWorkspacePresentation(ctx, config, { api, document }),\n display: createBrowserPagePresentation({ document }),\n };\n let shell;\n let play;\n try {\n play = mountPlayToolbar({ document, element, client: api });\n const mainSurface = document.createElement('div');\n Object.assign(mainSurface.style, {\n flex: '1',\n minWidth: '0',\n minHeight: '0',\n width: '100%',\n height: '100%',\n position: 'relative',\n });\n Object.assign(play.surface.style, { display: 'flex' });\n play.surface.append(mainSurface);\n ctx.effect(() => ctx.get('viewPlayPresentation').attach(mainSurface));\n shell = new ViewWorkspaceShell({ document, element: mainSurface, mountId: element.id,\n api, presentation,\n resourceBrowser: false, inspectorPanel: false, presentationOnly: true,\n onNavigationSpeed: speed => play.setNavigationSpeed(speed),\n });\n ctx.provide('viewWorkspaceShell', shell);\n ctx.effect(() => attachEngineFatalBanner({ document, host: mainSurface }));\n ctx.effect(() => attachViewportPageInputGate({\n element,\n input: ctx.get('engineWorkspaceInput', false),\n pageType: PAGE_TYPE,\n document,\n }));\n } catch (error) {\n await shell?.dispose(); play?.dispose(); throw error;\n }\n ctx.effect(() => async () => { await shell?.dispose(); play?.dispose(); });\n },\n};\n\nconst viewViewportFrontendPlugin = {\n name: FRONTEND_PLUGIN_ID,\n inject: ['viewOperationClient', 'viewScenePage'],\n async apply(ctx, config = {}) {\n const panelHost = config.panelHost ?? ctx.get?.('panelHost', false);\n if (!panelHost) return;\n const unclaim = claimViewportPanel(panelHost);\n ctx.effect(() => unclaim);\n // Play/Engine providers suspend only the canvas inside this fill slot.\n // The dock is claimed with the other editor panels as soon as the page exists.\n const document = config.document ?? globalThis.document;\n if (!document?.createElement) return;\n const element = document.createElement('div');\n element.id = config.workspace?.mountId ?? 'forgeax-view-workspace';\n element.className = 'fx-view-viewport-surface';\n await panelHost.waitForSlot(SLOT);\n const unmount = panelHost.mount(SLOT, element);\n ctx.effect(() => () => unmount?.());\n await ctx.plugin({\n ...viewportSurfacePlugin,\n name: `${FRONTEND_PLUGIN_ID}.surface`,\n }, { ...config, viewportSurface: element });\n },\n};\n\nexport { viewViewportFrontendPlugin, viewPlayPresentationPlugin };\nexport default viewViewportFrontendPlugin;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["button", "button"]
|
|
7
|
+
}
|