@objectstack/console 17.5.0 → 17.6.0
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 +378 -0
- package/dist/.objectstack-injection.json +2 -2
- package/dist/.objectui-sha +1 -1
- package/dist/assets/{ActionResultDialog-CLdIyOW6.js → ActionResultDialog-4kHDGnT3.js} +3 -3
- package/dist/assets/{AiPendingActionsPage-OKYz66yR.js → AiPendingActionsPage-JjOddm0h.js} +1 -1
- package/dist/assets/{ApiConsolePage-CcrKovu8.js → ApiConsolePage-BgS26lbp.js} +1 -1
- package/dist/assets/AppDocsIndex-BDoH5ECM.js +1 -0
- package/dist/assets/{AppManagementPage-D_xz8cTZ.js → AppManagementPage-CCgKmNTj.js} +1 -1
- package/dist/assets/ApprovalsInboxPage-C6S1vk0X.js +1 -0
- package/dist/assets/AuditLogPage-v2dKXMuk.js +1 -0
- package/dist/assets/BookPage-DwFMcTSN.js +1 -0
- package/dist/assets/{ComponentNavView-BxsixSU9.js → ComponentNavView-B5g9c6fx.js} +1 -1
- package/dist/assets/{CreateViewDialog-xyKlpLEW.js → CreateViewDialog-D3l-tYHM.js} +1 -1
- package/dist/assets/DashboardView-BOcovpPd.js +1 -0
- package/dist/assets/DocPage-B6AkH5WI.js +1 -0
- package/dist/assets/{DocsIndex-B2zw_HAp.js → DocsIndex-DwW2QsYY.js} +1 -1
- package/dist/assets/{DocsLayout-DezZ8x7_.js → DocsLayout-D63StSgd.js} +1 -1
- package/dist/assets/DocsSlug-CP9fcabi.js +1 -0
- package/dist/assets/ExpressionProvider-CrL6jhVq.js +1 -0
- package/dist/assets/{FlowRunsPage-CvY3nJMF.js → FlowRunsPage-CxdaiUyk.js} +1 -1
- package/dist/assets/{IntegrationsPage-2leVkVDH.js → IntegrationsPage-DvG0x0Nb.js} +2 -2
- package/dist/assets/{InterfaceListPage-BdECC_i3.js → InterfaceListPage-C4wPYohR.js} +1 -1
- package/dist/assets/{MarketplaceInstalledPage-EPPHSitW.js → MarketplaceInstalledPage-B7KETQG2.js} +1 -1
- package/dist/assets/MarketplacePackagePage-CfgKDpNH.js +4 -0
- package/dist/assets/{MarketplacePage-BnQKykgv.js → MarketplacePage-DNEyU5AE.js} +1 -1
- package/dist/assets/{MetadataInspector-BWxLkr0O.js → MetadataInspector-EP0I3-Kq.js} +1 -1
- package/dist/assets/{ObjectDataPage-BIzp65Mo.js → ObjectDataPage-CykEm9MD.js} +1 -1
- package/dist/assets/PageView-C6u86tni.js +1 -0
- package/dist/assets/{ProfilePage-D2qGgxPK.js → ProfilePage-C3SjXMzi.js} +1 -1
- package/dist/assets/{PublicFormsPage-DlE6tck_.js → PublicFormsPage-D3uCTR-8.js} +1 -1
- package/dist/assets/RecordDetailView-DgR_zhP4.js +3 -0
- package/dist/assets/RecordFormPage-kiJI-ieF.js +1 -0
- package/dist/assets/ReportDefaultInspector-BIinF0EQ.js +1 -0
- package/dist/assets/{ReportView-GIdKJdOt.js → ReportView-BREO-ADE.js} +1 -1
- package/dist/assets/{RuntimeDraftBar-BbMdi3Kp.js → RuntimeDraftBar-BCWfd2yS.js} +1 -1
- package/dist/assets/SchemaForm-C4uMMZ13.js +3 -0
- package/dist/assets/SearchResultsPage-C6Hw_Lpn.js +1 -0
- package/dist/assets/{SettingsHub-BGKIj-Zq.js → SettingsHub-DP1mrzEN.js} +1 -1
- package/dist/assets/SettingsView-u7mc6pcc.js +1 -0
- package/dist/assets/{SkeletonDetail-C8fMI-Mu.js → SkeletonDetail-DIwlbHTr.js} +1 -1
- package/dist/assets/{af-BfSmLD34.js → af-DPUgkQl0.js} +1 -1
- package/dist/assets/ai-DPBykF2N.js +3 -0
- package/dist/assets/{app-shell-eager-leaves-CDVclng4.js → app-shell-eager-leaves-Cf2bM6uT.js} +1 -1
- package/dist/assets/{ar-B9ttrM75.js → ar-B-6GTIRU.js} +1 -1
- package/dist/assets/{ar-DZ-C1rn-cyl.js → ar-DZ-wEl298ti.js} +1 -1
- package/dist/assets/{ar-EG-BaDxKP_o.js → ar-EG-YBT90_S0.js} +1 -1
- package/dist/assets/{ar-MA-DbxNEcmd.js → ar-MA-3uT-EYh6.js} +1 -1
- package/dist/assets/{ar-SA-DeC5LXcX.js → ar-SA-SiQsjhhc.js} +1 -1
- package/dist/assets/{ar-TN-C9KpTFJz.js → ar-TN-CfzXjKzS.js} +1 -1
- package/dist/assets/{az-cMerDwRO.js → az-BqAfcNza.js} +1 -1
- package/dist/assets/{be-ZTSbszQh.js → be-CQgWXa9_.js} +1 -1
- package/dist/assets/{be-tarask-BXZEUrgX.js → be-tarask-BmNg0Sir.js} +1 -1
- package/dist/assets/{bg-BDogpmn5.js → bg-D3evgRuS.js} +1 -1
- package/dist/assets/{bn-Cz04uxmh.js → bn-uItkARwm.js} +1 -1
- package/dist/assets/{bs-CpFnCl-j.js → bs-DueReOpO.js} +1 -1
- package/dist/assets/{ca-CHC4M52Z.js → ca-Cr3AHktR.js} +1 -1
- package/dist/assets/{ckb-Dxw-RNm8.js → ckb-CTi5BET7.js} +1 -1
- package/dist/assets/contracts-DieHW666.js +1 -0
- package/dist/assets/{createDerive-DvA_JGNq.js → createDerive-CjN1i5vn.js} +1 -1
- package/dist/assets/{cs-DsFaJ5Z7.js → cs-43mFX9jr.js} +1 -1
- package/dist/assets/{cy-FH4JFDTs.js → cy-BBSkg3F8.js} +1 -1
- package/dist/assets/{da-D1pVjaAq.js → da-C5oA5qcs.js} +1 -1
- package/dist/assets/data-adapter-Cymvlczj.js +1 -0
- package/dist/assets/{de-AT-DUMQCisj.js → de-AT-CApxwJzu.js} +1 -1
- package/dist/assets/{de-DKrxSvnP.js → de-CPtbLlAf.js} +1 -1
- package/dist/assets/default-inspector-registry-Bs6GBn00.js +1 -0
- package/dist/assets/dist-BF-ssUpn.js +14 -0
- package/dist/assets/{el-l3-bHySV.js → el-Dto2xBQU.js} +1 -1
- package/dist/assets/en-AU-FVwCiDJO.js +1 -0
- package/dist/assets/{en-CA-DGH5NF0a.js → en-CA-DKuJPN1U.js} +1 -1
- package/dist/assets/en-GB-DQ_y5VbJ.js +1 -0
- package/dist/assets/en-IE-DaXOhsZW.js +1 -0
- package/dist/assets/en-IN-CnRZnAom.js +1 -0
- package/dist/assets/en-NZ-CBZLEToK.js +1 -0
- package/dist/assets/en-ZA-BE59v0wZ.js +1 -0
- package/dist/assets/{eo-CL6CXHZx.js → eo-BL8JXIWd.js} +1 -1
- package/dist/assets/{es-BIJ0rksI.js → es-BnoaNxsu.js} +1 -1
- package/dist/assets/{et-BGgMzjm1.js → et-tPYLNenO.js} +1 -1
- package/dist/assets/{eu-CqvAoRrX.js → eu-CUBG6bT0.js} +1 -1
- package/dist/assets/{fa-IR-DNz3oA1-.js → fa-IR-Rr2d9xSs.js} +1 -1
- package/dist/assets/{fi-DNSfKWuW.js → fi-B0NVIZsV.js} +1 -1
- package/dist/assets/{formatLong-CHb9WA3O.js → formatLong-1-gt9bpo.js} +1 -1
- package/dist/assets/{fr-DYRJCirJ.js → fr-BbhHek8e.js} +1 -1
- package/dist/assets/{fr-CA-CotiswPx.js → fr-CA-CBDvLXFg.js} +1 -1
- package/dist/assets/{fr-CH-CpiEYWpc.js → fr-CH-WPNmwPn7.js} +1 -1
- package/dist/assets/framework-DFR4HNtj.js +35 -0
- package/dist/assets/{fy-B69yM3FE.js → fy-DvOBbvEF.js} +1 -1
- package/dist/assets/{gd-BAy8AsX6.js → gd-BQPiTPX5.js} +1 -1
- package/dist/assets/getIcon-Cfwf-Egt.js +1 -0
- package/dist/assets/{gl-soLn_weL.js → gl-BJCXK8uO.js} +1 -1
- package/dist/assets/{gu-B19Yo9yC.js → gu-CctPRz3V.js} +1 -1
- package/dist/assets/{he-DYTPo33p.js → he-CVFMk6p2.js} +1 -1
- package/dist/assets/{hi-D2dIK7Oy.js → hi-Ba30-RwS.js} +1 -1
- package/dist/assets/{highlighted-body-OFNGDK62-CExufvVt.js → highlighted-body-OFNGDK62-BQ57IrBV.js} +1 -1
- package/dist/assets/{hr-BV-VOPMu.js → hr-BZUqTbZs.js} +1 -1
- package/dist/assets/{ht-C7MM4qkS.js → ht-BLe05tPx.js} +1 -1
- package/dist/assets/{hu-Rha1m2Ym.js → hu-2CQ_Mkww.js} +1 -1
- package/dist/assets/{hy-CiTNgbdV.js → hy-CclcPG4H.js} +1 -1
- package/dist/assets/i18n-BnUsCaSC.js +17 -0
- package/dist/assets/i18n-locale-ar-92O_xtDZ.js +4 -0
- package/dist/assets/i18n-locale-de-T5ic3yH9.js +4 -0
- package/dist/assets/i18n-locale-en-rxr7WJYl.js +4 -0
- package/dist/assets/i18n-locale-es-D_WOifJ_.js +4 -0
- package/dist/assets/i18n-locale-fr-3cvyjMkp.js +4 -0
- package/dist/assets/i18n-locale-ja-DXlIkB8I.js +4 -0
- package/dist/assets/i18n-locale-ko-DngRpS45.js +4 -0
- package/dist/assets/i18n-locale-pt-BkPaFCqZ.js +4 -0
- package/dist/assets/i18n-locale-ru-E5wLh-y6.js +4 -0
- package/dist/assets/i18n-locale-zh-BL4_Yand.js +4 -0
- package/dist/assets/{i18n-runtime-CTgAQF4N.js → i18n-runtime-97_bDVjP.js} +1 -1
- package/dist/assets/{id-Cijsfjt-.js → id-6JLB8s-f.js} +1 -1
- package/dist/assets/index-Cadlh4t_.css +2 -0
- package/dist/assets/index-D98sa5GF.js +20 -0
- package/dist/assets/{infrastructure-BHSync5f.js → infrastructure-Cc34lEqb.js} +2 -2
- package/dist/assets/integration-CeAF4JFT.js +1 -0
- package/dist/assets/{is-xS1WTyeC.js → is-to0CWzm1.js} +1 -1
- package/dist/assets/isSameWeek-DBXaA1Gd.js +1 -0
- package/dist/assets/{it-CH-l516ZNXj.js → it-CH-DhdfjP5Z.js} +1 -1
- package/dist/assets/{it-C2i_c9sd.js → it-ea0B8Ujp.js} +1 -1
- package/dist/assets/{ja-D9_ewLny.js → ja-B1bzkgDW.js} +1 -1
- package/dist/assets/{ja-Hira-D_6ExgHw.js → ja-Hira-CMrY5hXO.js} +1 -1
- package/dist/assets/{ka-BYHGyees.js → ka-DKSXLnXP.js} +1 -1
- package/dist/assets/{kk-CbTFtuqb.js → kk-DHwMv8Dn.js} +1 -1
- package/dist/assets/{km-Dr2gwhIn.js → km-tpLG1xNr.js} +1 -1
- package/dist/assets/{kn-CprH8JD7.js → kn-MLreVnHA.js} +1 -1
- package/dist/assets/{ko-CsFS2u5i.js → ko-CI0DBazn.js} +1 -1
- package/dist/assets/{lb-CbFKN7Ob.js → lb-CmL572Xe.js} +1 -1
- package/dist/assets/{lt-Bq0xkLp0.js → lt-DRtUOLdw.js} +1 -1
- package/dist/assets/{lv-Cj6vg6Qo.js → lv-COSHgkOP.js} +1 -1
- package/dist/assets/{match-C_jFGO9e.js → match-B-ergJQb.js} +1 -1
- package/dist/assets/{match-CiPp9BME.js → match-BQoOW8Cj.js} +1 -1
- package/dist/assets/{match-Co4ivumx.js → match-dfBS0YSQ.js} +1 -1
- package/dist/assets/mermaid-GHXKKRXX-Bb17TtNP.js +1 -0
- package/dist/assets/metadata-admin-CABUxbJl.js +9 -0
- package/dist/assets/{mk-MXFM99YL.js → mk-B0IH_YL_.js} +1 -1
- package/dist/assets/{mn-D5Q9B6Jt.js → mn-P-QdQ2n3.js} +1 -1
- package/dist/assets/{ms-CCzPRldx.js → ms-CtyEOINy.js} +1 -1
- package/dist/assets/{mt-mjJpN6xW.js → mt-DfuZ2HRm.js} +1 -1
- package/dist/assets/{nb-BIlNqdEb.js → nb-2Hp-5Tnt.js} +1 -1
- package/dist/assets/{nl-BE-FwXjQsmV.js → nl-BE-mmxbfNoR.js} +1 -1
- package/dist/assets/{nl-D2uBtIxG.js → nl-CZ_nLREz.js} +1 -1
- package/dist/assets/{nn-B0loJ7SV.js → nn-ccWhYsNa.js} +1 -1
- package/dist/assets/{oc-U7-yH1sO.js → oc-z504BFRV.js} +1 -1
- package/dist/assets/{pl-mTy0JYgi.js → pl-DeQ7ASt-.js} +1 -1
- package/dist/assets/plugin-calendar-Cn5HaZU8.js +1 -0
- package/dist/assets/plugin-charts-B6RcFWbo.js +7 -0
- package/dist/assets/plugin-chatbot-Ck47EhDX.js +122 -0
- package/dist/assets/plugin-dashboard-DjEx8e5Y.js +6 -0
- package/dist/assets/plugin-form-CLDvL0up.js +1 -0
- package/dist/assets/plugin-gantt-CrVrxVdi.js +63 -0
- package/dist/assets/plugin-grid-D2rmQEW_.js +11 -0
- package/dist/assets/plugin-kanban-BUNHFfIC.js +1 -0
- package/dist/assets/plugin-map-y-7RQQC5.js +1 -0
- package/dist/assets/{plugin-markdown-D1nTQc1T.js → plugin-markdown-BOkHcir_.js} +1 -1
- package/dist/assets/plugin-report-mT3jpna0.js +59 -0
- package/dist/assets/plugin-timeline-B1EF83D3.js +1 -0
- package/dist/assets/plugin-tree-MTHUt3_S.js +1 -0
- package/dist/assets/plugin-view-DHJI-ahf.js +1 -0
- package/dist/assets/plugins-views-CfkgqD30.js +3 -0
- package/dist/assets/{pt-BR-2KtO5Js1.js → pt-BR-D80_lPYF.js} +1 -1
- package/dist/assets/{pt-Bet5OOQf.js → pt-CJJ1RmXd.js} +1 -1
- package/dist/assets/{ro-37U6sgzi.js → ro-EuFb2TCj.js} +1 -1
- package/dist/assets/{ru-CyuAY-5E.js → ru-CMaVQScp.js} +1 -1
- package/dist/assets/{runtime-metadata-persistence-afAW-MeD.js → runtime-metadata-persistence-ClOTznqa.js} +1 -1
- package/dist/assets/{se-DeJabuC6.js → se-DsfdKLdF.js} +1 -1
- package/dist/assets/{sk-DWEpjfkR.js → sk-BNV9omI8.js} +1 -1
- package/dist/assets/{sl-4oSvNhIR.js → sl-DJS_nINU.js} +1 -1
- package/dist/assets/{sq-BjkBCaXW.js → sq-HEgjcbHe.js} +1 -1
- package/dist/assets/{sr-Dxm1DsRS.js → sr-CO0CFu4X.js} +1 -1
- package/dist/assets/{sr-Latn-Dawg6oP2.js → sr-Latn-eE1Idzey.js} +1 -1
- package/dist/assets/{src-C8NYjdVm.js → src-BU7L2v4J.js} +1 -1
- package/dist/assets/src-BUtIBFDA.js +1 -0
- package/dist/assets/src-C0eXlKtx.js +16 -0
- package/dist/assets/{studioEntry-nXQP3iL0.js → studioEntry-WeMfaSGn.js} +1 -1
- package/dist/assets/{submitRedirect-jK-cEIbP.js → submitRedirect-C2lfZSHt.js} +1 -1
- package/dist/assets/{sv-CROOGJGz.js → sv-5uTzgQT3.js} +1 -1
- package/dist/assets/{ta-BZnTmFI_.js → ta-BzgdkBZG.js} +1 -1
- package/dist/assets/{te-BN0v0x5t.js → te-Ct_pl7ZJ.js} +1 -1
- package/dist/assets/{th-CBjKhp_U.js → th-DouAlk0-.js} +1 -1
- package/dist/assets/{tr-x0Ne4N4H.js → tr-3XNBsI40.js} +1 -1
- package/dist/assets/types-zod-DXpXw10W.js +1 -0
- package/dist/assets/{ug-sgzNhsKo.js → ug-B9n24h9G.js} +1 -1
- package/dist/assets/ui-components-D6cEVg0T.js +37 -0
- package/dist/assets/ui-layout-DgVDuPEM.js +1 -0
- package/dist/assets/{uk-o_DQ5VHJ.js → uk-DCAenByf.js} +1 -1
- package/dist/assets/use-book-data-CwRldFxP.js +1 -0
- package/dist/assets/{useActionModal-CSvbHkQ7.js → useActionModal-Blp4rhOk.js} +1 -1
- package/dist/assets/useCanAuthorMetadata-BxCMgFRf.js +1 -0
- package/dist/assets/useNavSelDeepLink-67Y4qCNO.js +1 -0
- package/dist/assets/useNavTargetLabel-BOJncjIb.js +1 -0
- package/dist/assets/{useOpenRecordList-B5-qaFUx.js → useOpenRecordList-BrwJFojQ.js} +1 -1
- package/dist/assets/{usePackageL10n-CMx66am-.js → usePackageL10n-Ci9uVkRZ.js} +1 -1
- package/dist/assets/{useSettingsLabel-Kkr2q0Oo.js → useSettingsLabel-CeMnMWsh.js} +1 -1
- package/dist/assets/{uz-Cyrl-DbtkQtz_.js → uz-Cyrl-JSeHEqu-.js} +1 -1
- package/dist/assets/{uz-Be41d4jl.js → uz-DT3s9bZS.js} +1 -1
- package/dist/assets/vendor-objectstack-DFqu45yM.js +138 -0
- package/dist/assets/{vi-84mZmklk.js → vi-D2p-h6bY.js} +1 -1
- package/dist/assets/{zh-CN-DD1reegJ.js → zh-CN-DHOKqAit.js} +1 -1
- package/dist/assets/{zh-HK-B05u30WI.js → zh-HK-D4iIPY7I.js} +1 -1
- package/dist/assets/{zh-TW-Bb-WimPD.js → zh-TW-gORQ_tZh.js} +1 -1
- package/dist/chunk-membership.json +100 -90
- package/dist/eager-closure.json +110 -110
- package/dist/index.html +4 -4
- package/dist/sdui.manifest.json +520 -60
- package/package.json +1 -1
- package/dist/assets/AppDocsIndex-F4zDq2zz.js +0 -1
- package/dist/assets/ApprovalsInboxPage-DrEUmaDb.js +0 -1
- package/dist/assets/AuditLogPage-CoghqsZb.js +0 -1
- package/dist/assets/DashboardView-CGC-_Om8.js +0 -1
- package/dist/assets/DocPage-CIZE5kdj.js +0 -1
- package/dist/assets/DocsSlug-DXdFdwlS.js +0 -1
- package/dist/assets/ExpressionProvider-DZfMwyMs.js +0 -1
- package/dist/assets/MarketplacePackagePage-C7NOu2Ir.js +0 -4
- package/dist/assets/PageView-CVLgCRSF.js +0 -1
- package/dist/assets/RecordDetailView-DQKydU7X.js +0 -3
- package/dist/assets/RecordFormPage-BTjwxJIA.js +0 -1
- package/dist/assets/ReportDefaultInspector-DdsQAkd7.js +0 -1
- package/dist/assets/SchemaForm-C8X1ve4p.js +0 -3
- package/dist/assets/SearchResultsPage-Jwhqsdyo.js +0 -1
- package/dist/assets/SettingsView-D8SMKdrc.js +0 -1
- package/dist/assets/appRoute-DbnWDEa1.js +0 -1
- package/dist/assets/data-adapter-DMbe6Njk.js +0 -1
- package/dist/assets/default-inspector-registry-CpL3fFhl.js +0 -1
- package/dist/assets/dist-BXrEV1ag.js +0 -13
- package/dist/assets/en-AU-C6x7mDhH.js +0 -1
- package/dist/assets/en-GB-0-nho2eK.js +0 -1
- package/dist/assets/en-IE-2fC3BkfV.js +0 -1
- package/dist/assets/en-IN-C1QcFhxn.js +0 -1
- package/dist/assets/en-NZ-C80ptZT7.js +0 -1
- package/dist/assets/en-ZA-ByZDrjeb.js +0 -1
- package/dist/assets/framework-DcWkeiND.js +0 -35
- package/dist/assets/getIcon-BEVyC4y3.js +0 -1
- package/dist/assets/i18n-CEKxYdmD.js +0 -9
- package/dist/assets/i18n-locale-ar-DN7sl3GF.js +0 -4
- package/dist/assets/i18n-locale-de-C40JErvb.js +0 -4
- package/dist/assets/i18n-locale-en-CITPDIHy.js +0 -4
- package/dist/assets/i18n-locale-es-C8DdWN6c.js +0 -4
- package/dist/assets/i18n-locale-fr-COIdEZZl.js +0 -4
- package/dist/assets/i18n-locale-ja-DYF_rU_s.js +0 -4
- package/dist/assets/i18n-locale-ko-B-ODYAtX.js +0 -4
- package/dist/assets/i18n-locale-pt-CK1SyBIm.js +0 -4
- package/dist/assets/i18n-locale-ru-jLzvShMO.js +0 -4
- package/dist/assets/i18n-locale-zh-Bf9Gbbvl.js +0 -4
- package/dist/assets/index-CLyvpiGc.css +0 -2
- package/dist/assets/index-CfnfGw5W.js +0 -20
- package/dist/assets/isSameWeek-DWYeNyh8.js +0 -1
- package/dist/assets/mermaid-GHXKKRXX-DVLc_uym.js +0 -1
- package/dist/assets/metadata-admin-CybaOCdO.js +0 -9
- package/dist/assets/nav-selection-Dzm_mA3C.js +0 -1
- package/dist/assets/plugin-calendar-CKRBcML7.js +0 -1
- package/dist/assets/plugin-charts-DGTJxXCB.js +0 -7
- package/dist/assets/plugin-chatbot-DwtwNA-y.js +0 -122
- package/dist/assets/plugin-dashboard-C1AYKmGX.js +0 -6
- package/dist/assets/plugin-form-CV8ZY04-.js +0 -1
- package/dist/assets/plugin-gantt-BRIb2_8G.js +0 -63
- package/dist/assets/plugin-grid-C9h7mRVv.js +0 -11
- package/dist/assets/plugin-kanban-BcJ0Dhys.js +0 -1
- package/dist/assets/plugin-map-D24ZUOUj.js +0 -1
- package/dist/assets/plugin-report-BfGintAq.js +0 -59
- package/dist/assets/plugin-timeline-CbBRq_qt.js +0 -1
- package/dist/assets/plugin-tree-BNX2A5J5.js +0 -1
- package/dist/assets/plugin-view-DzWQWYyH.js +0 -1
- package/dist/assets/plugins-views-DraK4xz0.js +0 -3
- package/dist/assets/src-B8lv0plz.js +0 -18
- package/dist/assets/src-DoDvT77T.js +0 -1
- package/dist/assets/types-zod-Y2RwUUeJ.js +0 -1
- package/dist/assets/ui-components-BTB1NkUW.js +0 -37
- package/dist/assets/ui-layout-bZfafwJa.js +0 -1
- package/dist/assets/use-book-data-C3eyZJSG.js +0 -1
- package/dist/assets/vendor-objectstack-XuWC71M9.js +0 -266
- package/dist/assets/vendor-zod-CHLW1iCr.js +0 -64
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{An as e,En as t,In as n,Lt as r,St as i,at as a,hi as o,qn as s,rt as c,vn as l,wt as u}from"./vendor-objectstack-DFqu45yM.js";import{Kr as d,ea as f,er as p,gi as ee,qr as m,tn as te}from"./framework-DFR4HNtj.js";l(),u();var ne=a(),re=[`lookup`,`master_detail`],h=[`select`,`radio`];function ie(e){return typeof e==`string`&&e.trim()!==``}function ae(e){return e===void 0?"no `reference` key at all":e===null?"a `null` `reference`":typeof e==`string`?e===``?"an empty `reference`":"a whitespace-only `reference`":`a \`reference\` of type \`${typeof e}\``}function oe(e){return Array.isArray(e.options)&&e.options.length>0||typeof e.picklist==`string`}function se(e){return e===void 0?"no `options` key and no `picklist`":Array.isArray(e)?"an empty `options` list and no `picklist`":e===null?"a `null` `options` and no `picklist`":`an \`options\` value of type \`${typeof e}\` and no \`picklist\``}function ce(e){return Array.isArray(e)?e.flatMap((e,t)=>{if(!e||typeof e!=`object`)return[];let n=e;return[{name:typeof n.name==`string`&&n.name?n.name:`[${t}]`,def:n}]}):e&&typeof e==`object`?Object.entries(e).flatMap(([e,t])=>t&&typeof t==`object`?[{name:e,def:t}]:[]):[]}function g(e,t,n){if(String(e)!==`object`||!t||typeof t!=`object`)return;let r=t.fields;for(let{name:e,def:t}of ce(r)){if(h.includes(String(t.type))&&!oe(t))throw Error(`${n} refused this object metadata write: the field \`${e}\` is a \`${String(t.type)}\` with no options: it carries ${se(t.options)}, so it offers nothing to choose and nothing to check a stored value against. A choice field needs at least one option or a shared \`picklist\` (objectstack#20827), so this draft stays here until it has one. Add an option, or change the field to a non-choice type.`);if(re.includes(String(t.type))&&!ie(t.reference))throw Error(`${n} refused this object metadata write: the field \`${e}\` is a \`${String(t.type)}\` and carries ${ae(t.reference)}, so it names no object to link to. \`@objectstack/spec\` refuses the same document at the server with a 422 on \`fields.${e}.reference\`, and that refusal blocks every later save of this object for as long as the half-filled field rides along in the draft (objectui#7714). Pick the target object, or change the field to a non-relationship type.`)}}function _(e){if(!e||typeof e!=`object`)return[];let t=e.advisories;return Array.isArray(t)?t.filter(e=>{if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.rule==`string`&&typeof t.path==`string`&&typeof t.where==`string`&&typeof t.message==`string`&&typeof t.hint==`string`&&typeof t.severity==`string`}):[]}var le=[`overlayScope`,`lock`,`lockReason`,`lockSource`,`lockDocsUrl`,`provenance`,`packageId`,`packageVersion`,`editable`,`deletable`,`resettable`];function ue(e){let t=i.shape;return le.filter(n=>e[n]!==void 0&&!t[n].safeParse(e[n]).success)}var v=`/meta`,y=`/api/v1`;function de(e){let t=e.baseUrl.replace(/\/+$/,``),n=e.environmentId?`${y}/environments/${encodeURIComponent(e.environmentId)}${v}`:`${y}${v}`;return/\/api\/v\d+$/i.test(t)?`${t.replace(/\/api\/v\d+$/i,``)}${e.environmentId?`${y}/environments/${encodeURIComponent(e.environmentId)}${v}`:`${y}${v}`}`:`${t}${n}`}function fe(e){return`${e.replace(/\/api\/v\d+(?:\/environments\/[^/]+)?\/meta$/,``).replace(/\/+$/,``)}${y}/packages`}function pe(e){if(!e||typeof e!=`object`)return{};let t=e,n=t.data;return n&&typeof n==`object`&&!Array.isArray(n)?n:t}async function b(e){let t;try{t=await e.json()}catch{t=await e.text().catch(()=>void 0)}let n=t&&typeof t==`object`?t:void 0,r=n?.error,i=(r&&typeof r==`object`?r.message:r)??n?.message??`Metadata request failed: ${e.status} ${e.statusText}`,a=Error(String(i));a.status=e.status,a.body=t;let o=r&&typeof r==`object`?r.details:void 0,s=o?.issues??(r&&typeof r==`object`?r.issues:void 0)??n?.issues;Array.isArray(s)&&(a.issues=s);let c=o?.code??(r&&typeof r==`object`?r.code:void 0)??n?.code;return c!=null&&(a.code=String(c)),a}function me(e){if(!e||typeof e!=`object`||Array.isArray(e))return!1;let t=e;return typeof t.type==`string`&&typeof t.name==`string`&&`item`in t}var x=class e{base;fetchImpl;headers;previewDrafts;onSaveAdvisory;constructor(e){this.base=de(e),this.fetchImpl=e.fetch??globalThis.fetch.bind(globalThis),this.headers={Accept:`application/json`,...e.headers??{}},this.previewDrafts=e.previewDrafts===!0,this.onSaveAdvisory=e.onSaveAdvisory}withEnvironment(t){return new e({baseUrl:this.base.replace(/\/api\/v\d+(?:\/environments\/[^/]+)?\/meta$/,``).replace(/\/+$/,``),environmentId:t,fetch:this.fetchImpl,headers:this.headers,previewDrafts:this.previewDrafts,...this.onSaveAdvisory?{onSaveAdvisory:this.onSaveAdvisory}:{}})}withPreviewDrafts(t){if(t===this.previewDrafts)return this;let n=this.base.match(/\/api\/v\d+\/environments\/([^/]+)\/meta$/);return new e({baseUrl:this.base.replace(/\/api\/v\d+(?:\/environments\/[^/]+)?\/meta$/,``).replace(/\/+$/,``),...n?{environmentId:decodeURIComponent(n[1])}:{},fetch:this.fetchImpl,headers:this.headers,previewDrafts:t,...this.onSaveAdvisory?{onSaveAdvisory:this.onSaveAdvisory}:{}})}async listTypes(){let e=await this.fetchImpl(this.base,{method:`GET`,headers:this.headers,cache:`no-store`});if(!e.ok)throw await b(e);let t=await e.json();return Array.isArray(t)?t:t&&Array.isArray(t.entries)?t.entries:t&&Array.isArray(t.items)?t.items:t&&Array.isArray(t.types)?t.types.map(e=>({type:e})):[]}async list(e,t={}){let n=[];t.packageId&&n.push(`package=${encodeURIComponent(t.packageId)}`),this.previewDrafts&&n.push(`preview=draft`);let r=n.length?`?${n.join(`&`)}`:``,i=`${this.base}/${encodeURIComponent(e)}${r}`,a=await this.fetchImpl(i,{method:`GET`,headers:this.headers,cache:`no-store`});if(!a.ok)throw await b(a);let o=await a.json();return Array.isArray(o)?o:o&&Array.isArray(o.items)?o.items:[]}async listDrafts(e={}){let t=[];e.packageId&&t.push(`packageId=${encodeURIComponent(e.packageId)}`),e.type&&t.push(`type=${encodeURIComponent(e.type)}`);let n=t.length?`?${t.join(`&`)}`:``,r=`${this.base}/_drafts${n}`,i=await this.fetchImpl(r,{method:`GET`,headers:this.headers,cache:`no-store`});if(!i.ok)throw await b(i);let a=await i.json();return Array.isArray(a)?a:a?.drafts??a?.data?.drafts??[]}async readItemResponse(e,t,n={}){let r=[];n.state===`draft`?r.push(`state=draft`):this.previewDrafts&&r.push(`preview=draft`),n.packageId&&r.push(`package=${encodeURIComponent(n.packageId)}`);let i=r.length?`?${r.join(`&`)}`:``,a=`${this.base}/${encodeURIComponent(e)}/${encodeURIComponent(t)}${i}`,o=await this.fetchImpl(a,{method:`GET`,headers:this.headers,cache:`no-store`});if(o.status===404)return null;if(!o.ok)throw await b(o);return await o.json()}async get(e,t,n={}){let r=await this.readItemResponse(e,t,n);return me(r)?r.item??null:r}async getDraft(e,t,n={}){return this.readItemResponse(e,t,{state:`draft`,...n.packageId?{packageId:n.packageId}:{}})}emitAdvisories(e,t){if(this.onSaveAdvisory)try{let n=_(e);n.length>0&&this.onSaveAdvisory({...t,advisories:n})}catch{}}async save(e,t,n,r={}){if(!t||!String(t).trim())throw Error(`MetadataClient.save: name must be non-empty (type="${e}"). The PUT /meta/:type/:name route requires a name segment.`);g(e,n,`MetadataClient.save`);let i=[];r.force&&i.push(`force=true`),r.mode===`draft`&&i.push(`mode=draft`),r.packageId&&i.push(`package=${encodeURIComponent(r.packageId)}`);let a=i.length?`?${i.join(`&`)}`:``,o=`${this.base}/${encodeURIComponent(e)}/${encodeURIComponent(t)}${a}`,s={...this.headers,"Content-Type":`application/json`};r.ifMatch&&(s[`If-Match`]=r.ifMatch);let c=await this.fetchImpl(o,{method:`PUT`,headers:s,body:JSON.stringify(n)});if(!c.ok)throw await b(c);let l=await c.json();return this.emitAdvisories(l,{type:e,name:t,door:`save`,mode:r.mode===`draft`?`draft`:`publish`}),l}async publishDraft(e,t){let n=`${this.base}/${encodeURIComponent(e)}/${encodeURIComponent(t)}/publish`,r=await this.fetchImpl(n,{method:`POST`,headers:{...this.headers,"Content-Type":`application/json`,Accept:`application/json`},body:`{}`});if(!r.ok)throw await b(r);let i=await r.json().catch(()=>({}));return this.emitAdvisories(i,{type:e,name:t,door:`publish`,mode:`publish`}),i}async publishPackageDrafts(e){if(!e||!String(e).trim())throw Error(`MetadataClient.publishPackageDrafts: packageId must be non-empty. The POST /packages/:id/publish-drafts route requires an id segment.`);let t=`${fe(this.base)}/${encodeURIComponent(e)}/publish-drafts`,n=await this.fetchImpl(t,{method:`POST`,credentials:`include`,headers:{...this.headers,"Content-Type":`application/json`,Accept:`application/json`},body:`{}`});if(!n.ok)throw await b(n);let r=pe(await n.json().catch(()=>({})));for(let e of Array.isArray(r.published)?r.published:[]){if(!e||typeof e!=`object`)continue;let{type:t,name:n}=e;typeof t==`string`&&typeof n==`string`&&this.emitAdvisories(e,{type:t,name:n,door:`publish`,mode:`publish`})}return r}async layered(e,t,n={}){let r=n.packageId?`?package=${encodeURIComponent(n.packageId)}`:``,a=`${this.base}/${encodeURIComponent(e)}/${encodeURIComponent(t)}/layers${r}`,o=await this.fetchImpl(a,{method:`GET`,headers:this.headers,cache:`no-store`});if(o.status===404)return{code:null,overlay:null,overlayScope:null,effective:null};if(!o.ok)throw await b(o);let s=await o.json();if(!(typeof s==`object`&&s&&(`code`in s||`overlay`in s||`effective`in s)))return{code:null,overlay:null,overlayScope:null,effective:s};let c=i.safeParse(s);if(c.success){let e=c.data;return{code:e.code??null,overlay:e.overlay??null,overlayScope:e.overlayScope,effective:e.effective??null,...s._diagnostics?{_diagnostics:s._diagnostics}:{},lock:e.lock,...e.lockReason===void 0?{}:{lockReason:e.lockReason},...e.lockSource===void 0?{}:{lockSource:e.lockSource},...e.lockDocsUrl===void 0?{}:{lockDocsUrl:e.lockDocsUrl},...e.provenance===void 0?{}:{provenance:e.provenance},...e.packageId===void 0?{}:{packageId:e.packageId},...e.packageVersion===void 0?{}:{packageVersion:e.packageVersion},editable:e.editable,deletable:e.deletable,resettable:e.resettable}}let l=ue(s);return{code:s.code??null,overlay:s.overlay??null,overlayScope:s.overlayScope??null,effective:s.effective??null,...s._diagnostics?{_diagnostics:s._diagnostics}:{},...s.lock===void 0?{}:{lock:s.lock},...s.lockReason===void 0?{}:{lockReason:s.lockReason},...s.lockSource===void 0?{}:{lockSource:s.lockSource},...s.lockDocsUrl===void 0?{}:{lockDocsUrl:s.lockDocsUrl},...s.provenance===void 0?{}:{provenance:s.provenance},...s.packageId===void 0?{}:{packageId:s.packageId},...s.packageVersion===void 0?{}:{packageVersion:s.packageVersion},...s.editable===void 0?{}:{editable:s.editable},...s.deletable===void 0?{}:{deletable:s.deletable},...s.resettable===void 0?{}:{resettable:s.resettable},...l.length>0?{_unrecognized:l}:{}}}async diagnostics(e={}){let t=[];e.type&&t.push(`type=${encodeURIComponent(e.type)}`),e.severity&&t.push(`severity=${encodeURIComponent(e.severity)}`),e.packageId&&t.push(`package=${encodeURIComponent(e.packageId)}`);let n=t.length?`?${t.join(`&`)}`:``,r=`${this.base}/diagnostics${n}`,i=await this.fetchImpl(r,{method:`GET`,headers:this.headers,cache:`no-store`});if(i.status===404)return{entries:[],total:0,scannedTypes:0,scannedItems:0,stats:{}};if(!i.ok)throw await b(i);let a=await i.json();return{entries:Array.isArray(a.entries)?a.entries:[],total:typeof a.total==`number`?a.total:0,scannedTypes:typeof a.scannedTypes==`number`?a.scannedTypes:0,scannedItems:typeof a.scannedItems==`number`?a.scannedItems:0,stats:a.stats&&typeof a.stats==`object`?a.stats:{}}}async references(e,t){let n=`${this.base}/${encodeURIComponent(e)}/${encodeURIComponent(t)}/references`,r=await this.fetchImpl(n,{method:`GET`,headers:this.headers,cache:`no-store`});if(r.status===404)return[];if(!r.ok)throw await b(r);let i=await r.json();return Array.isArray(i)?i:i?.items??[]}async reset(e,t,n={}){let r=n.state===`draft`?`?state=draft`:``,i=`${this.base}/${encodeURIComponent(e)}/${encodeURIComponent(t)}${r}`,a={...this.headers};n.ifMatch&&(a[`If-Match`]=n.ifMatch);let o=await this.fetchImpl(i,{method:`DELETE`,headers:a});if(!o.ok)throw await b(o);return await o.json()}async publish(e,t,n={}){let r=n.packageId?`?package=${encodeURIComponent(n.packageId)}`:``,i=`${this.base}/${encodeURIComponent(e)}/${encodeURIComponent(t)}/publish${r}`,a={...this.headers,"Content-Type":`application/json`},o=await this.fetchImpl(i,{method:`POST`,headers:a,body:JSON.stringify(n.message?{message:n.message}:{})});if(!o.ok)throw await b(o);let s=await o.json();return this.emitAdvisories(s,{type:e,name:t,door:`publish`,mode:`publish`}),s}async rollback(e,t,n,r={}){let i=`${this.base}/${encodeURIComponent(e)}/${encodeURIComponent(t)}/rollback`,a={...this.headers,"Content-Type":`application/json`},o=await this.fetchImpl(i,{method:`POST`,headers:a,body:JSON.stringify({toVersion:n,...r.message?{message:r.message}:{}})});if(!o.ok)throw await b(o);return await o.json()}async diff(e,t,n,r){let i=new URLSearchParams;n!==void 0&&i.set(`from`,String(n)),r!==void 0&&i.set(`to`,String(r));let a=i.toString(),o=`${this.base}/${encodeURIComponent(e)}/${encodeURIComponent(t)}/diff${a?`?${a}`:``}`,s=await this.fetchImpl(o,{method:`GET`,headers:this.headers,cache:`no-store`});if(!s.ok)throw await b(s);return await s.json()}async history(e,t,n={}){let r=new URLSearchParams;n.sinceSeq!==void 0&&r.set(`sinceSeq`,String(n.sinceSeq)),n.limit!==void 0&&r.set(`limit`,String(n.limit));let i=r.toString(),a=`${this.base}/${encodeURIComponent(e)}/${encodeURIComponent(t)}/history${i?`?${i}`:``}`,o=await this.fetchImpl(a,{method:`GET`,headers:this.headers,cache:`no-store`});if(!o.ok)throw await b(o);return await o.json()}async audit(e,t,n={}){let r=new URLSearchParams;n.limit!==void 0&&r.set(`limit`,String(n.limit));let i=r.toString(),a=`${this.base}/${encodeURIComponent(e)}/${encodeURIComponent(t)}/audit${i?`?${i}`:``}`,o=await this.fetchImpl(a,{method:`GET`,headers:this.headers,cache:`no-store`});if(!o.ok)throw await b(o);return await o.json()}},he=class{cache;inflight;maxSize;ttl;stats;constructor(e={}){this.cache=new Map,this.inflight=new Map,this.maxSize=e.maxSize||100,this.ttl=e.ttl||3e5,this.stats={hits:0,misses:0,evictions:0,coalesced:0}}async get(e,t){let n=Date.now(),r=this.cache.get(e);if(r){if(n-r.timestamp<this.ttl)return r.accessCount++,r.lastAccessed=n,this.stats.hits++,this.cache.delete(e),this.cache.set(e,r),r.data;this.cache.delete(e)}let i=this.inflight.get(e);if(i)return this.stats.coalesced++,i;this.stats.misses++;let a=(async()=>{try{let n=await t();return this.set(e,n),n}finally{this.inflight.delete(e)}})();return this.inflight.set(e,a),a}prime(e,t){this.set(e,t)}set(e,t){let n=Date.now();this.cache.size>=this.maxSize&&!this.cache.has(e)&&this.evictLRU(),this.cache.set(e,{data:t,timestamp:n,accessCount:1,lastAccessed:n})}evictLRU(){let e=this.cache.keys().next().value;e!==void 0&&(this.cache.delete(e),this.stats.evictions++)}invalidate(e){e?this.cache.delete(e):this.cache.clear()}clear(){this.cache.clear(),this.inflight.clear(),this.stats={hits:0,misses:0,evictions:0,coalesced:0}}getStats(){let e=this.stats.hits+this.stats.misses,t=e>0?this.stats.hits/e:0;return{size:this.cache.size,maxSize:this.maxSize,hits:this.stats.hits,misses:this.stats.misses,evictions:this.stats.evictions,coalesced:this.stats.coalesced,hitRate:t}}getCachedSync(e){let t=this.cache.get(e);if(t){if(this.ttl>0&&Date.now()-t.timestamp>this.ttl){this.cache.delete(e);return}return this.cache.delete(e),this.cache.set(e,t),this.stats.hits++,t.data}}has(e){let t=this.cache.get(e);return t?Date.now()-t.timestamp>=this.ttl?(this.cache.delete(e),!1):!0:!1}},S=class extends Error{code;statusCode;details;constructor(e,t,n,r){super(e),this.code=t,this.statusCode=n,this.details=r,this.name=`ObjectStackError`,Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}toJSON(){return{name:this.name,message:this.message,code:this.code,statusCode:this.statusCode,details:this.details,stack:this.stack}}},C=class extends S{constructor(e,t){super(`Metadata not found for object: ${e}`,`METADATA_NOT_FOUND`,404,{objectName:e,...t}),this.name=`MetadataNotFoundError`}},w=class extends S{successCount;failureCount;errors;constructor(e,t,n,r,i){super(`Bulk ${e} operation failed: ${t} succeeded, ${n} failed`,`BULK_OPERATION_ERROR`,500,{operation:e,successCount:t,failureCount:n,errors:r,...i}),this.successCount=t,this.failureCount=n,this.errors=r,this.name=`BulkOperationError`}getSummary(){let e=this.successCount+this.failureCount,t=e>0?this.failureCount/e:0;return{operation:this.details?.operation,total:e,successful:this.successCount,failed:this.failureCount,failureRate:t,errors:this.errors}}},T=class extends S{url;constructor(e,t,n,r){super(`Connection error: ${e}`,`CONNECTION_ERROR`,r||503,{url:t,...n}),this.url=t,this.name=`ConnectionError`}},E=class extends S{constructor(e=`Authentication failed`,t,n){super(e,`AUTHENTICATION_ERROR`,n||401,t),this.name=`AuthenticationError`}},D=class extends S{field;validationErrors;constructor(e,t,n,r){super(e,`VALIDATION_ERROR`,400,{field:t,validationErrors:n,...r}),this.field=t,this.validationErrors=n,this.name=`ValidationError`}getValidationErrors(){return this.validationErrors||[]}};function ge(e,t){let n=e?.status||e?.statusCode||500,r=e?.message||e?.statusText||`Unknown error`,i={context:t,response:{status:n,data:e?.data,headers:e?.headers}};switch(n){case 401:return new E(r,i,401);case 403:return new E(r,i,403);case 404:return t?.includes(`metadata`)||t?.includes(`schema`)||t?.includes(`getObjectSchema`)?new C(_e(t),i):new S(r,`NOT_FOUND`,404,i);case 400:return new D(r,void 0,e?.data?.errors,i);case 503:return new T(r,e?.config?.url,i,503);case 504:return new T(r,e?.config?.url,i,504);default:return new S(r,`UNKNOWN_ERROR`,n,i)}}function _e(e){if(!e)return`unknown`;let t=e.match(/\(([^)]+)\)/);return t?t[1]:`unknown`}function O(e){if(!e||typeof e!=`object`)return{};let t=e,n=t.error&&typeof t.error==`object`?t.error:void 0,r={},i=k(n?.message)??k(t.message)??k(t.error);i!==void 0&&(r.message=i);let a=A(t.code)??A(n?.code);return a!==void 0&&(r.code=a),r}function k(e){return typeof e==`string`&&e.trim()!==``?e:void 0}function A(e){return typeof e==`string`?e:void 0}var ve=`sys_user_preference`;function ye(e){let{dataSource:t,userId:n,key:r,resource:i=ve,onError:a=()=>{}}=e,o=null,s=Promise.resolve(),c=async()=>{let e={$filter:{user_id:n,key:r},$top:1};return((await t.find(i,e))?.data??[]).find(e=>{if(!e)return!1;let t=e.user_id!==void 0&&e.user_id!==n,i=e.key!==void 0&&e.key!==r;return!t&&!i})??null},l=e=>{if(Array.isArray(e))return e;if(typeof e==`string`)try{let t=JSON.parse(e);return Array.isArray(t)?t:[]}catch{return[]}return[]},u=async e=>{if(o!==null)try{await t.update(i,o,{value:e});return}catch(e){o=null,a(`save`,e)}let s=await c();if(s&&s.id!==void 0&&s.id!==null){o=s.id,await t.update(i,s.id,{value:e});return}try{let a=(await t.create(i,{user_id:n,key:r,value:e}))?.id;a!=null&&(o=a)}catch(n){let r=await c();if(r&&r.id!==void 0&&r.id!==null){o=r.id,await t.update(i,r.id,{value:e});return}throw n}};return{async load(){try{let e=await c();return e?(e.id!==void 0&&e.id!==null&&(o=e.id),l(e.value)):(o=null,[])}catch(e){return a(`load`,e),[]}},async save(e){let t=s.then(()=>u(e)).catch(e=>{a(`save`,e)});return s=t,t}}}function be(e){if(!e||typeof e!=`object`)return null;let t=e;if(!(`item`in t))return null;let n=t.item;return!n||typeof n!=`object`||Object.keys(n).length===0?null:c(n)}var j={equals:`=`,eq:`=`,"==":`=`,not_equals:`!=`,notequals:`!=`,ne:`!=`,greater_than:`>`,greaterthan:`>`,gt:`>`,greater_than_or_equal:`>=`,greater_than_or_equals:`>=`,greaterthanorequal:`>=`,gte:`>=`,less_than:`<`,lessthan:`<`,lt:`<`,less_than_or_equal:`<=`,less_than_or_equals:`<=`,lessthanorequal:`<=`,lte:`<=`,in:`in`,not_in:`nin`,notin:`nin`,nin:`nin`,contains:`contains`,icontains:`icontains`,not_contains:`notcontains`,notcontains:`notcontains`,starts_with:`startswith`,startswith:`startswith`,ends_with:`endswith`,endswith:`endswith`,between:`between`,is_null:`isnull`,isnull:`isnull`,is_not_null:`isnotnull`,isnotnull:`isnotnull`,before:`<`,after:`>`};function xe(e){return typeof e==`string`?j[e.toLowerCase()]??j[e]??e:null}function Se(e){try{return JSON.stringify(e,(e,t)=>typeof t==`bigint`?`${t}n`:t)??String(e)}catch{return String(e)}}var M=class extends Error{code=`INVALID_FILTER`;httpStatus=400;entry;index;constructor(e,t){let n=Se(e);super(`Filter entry ${t} is not a usable filter rule (${n}). Expected { field, operator, value } with a non-empty field.`),this.name=`MalformedFilterError`,this.entry=e,this.index=t}},Ce=class extends Error{code=`INVALID_FILTER`;httpStatus=400;where;resource;constructor(e,t){let n=JSON.stringify(e)??String(e);super(`aggregate('${t}'): the spec-shape branch received a \`where\` array that is not a filter — ${n}. This branch posts \`where\` to POST /data/:object/query verbatim, so it must ALREADY be lowered: either a FilterCondition object (\`QuerySchema.where\`, @objectstack/spec data/query.zod.ts), or a FilterArray the ingress can lower — a comparison tuple (['stage','=','won']), a logical node (['and',[..],[..]]), or an array of nodes (data/filter.zod.ts, gate \`isFilterAST\`). A ViewFilterRule[] ([{ field, operator, value }, ...]) is authoring sugar, not a filter: lower it in the producer that built these aggregate params, not here. Nothing was sent to the server, so no unfiltered numbers came back.`),this.name=`UnloweredAggregateWhereError`,this.where=e,this.resource=t}};function we(e,n){if(Array.isArray(e)&&e.length!==0&&!t(e))throw new Ce(e,n)}var Te=[`filter`,`field`,`function`],Ee={filter:"`filter` is the ANALYTICS branch's filter and is lowered there through `parseFilterAST`; this branch's filter is `where` (`QuerySchema.where`, @objectstack/spec data/query.zod.ts) and is posted VERBATIM — rename it to `where` and lower it in the producer.",field:"`field` is half of the analytics branch's `${field}_${function}` measure; this branch's measure is `aggregations`, an AggregationNode[] such as [{ function: 'sum', field: 'amount', alias: 'amount_sum' }].",function:"`function` is the other half of that measure pair and belongs inside an `aggregations` node, not beside `groupBy`."};function De(e){let t=[];return Array.isArray(e?.groupBy)&&t.push("`groupBy` is an array"),Array.isArray(e?.aggregations)&&t.push("`aggregations` is an array"),e?.where!==void 0&&t.push("a `where` key is present"),t}var Oe=class extends Error{code=`INVALID_FILTER`;httpStatus=400;keys;received;resource;constructor(e,t,n){let r={};for(let n of e)r[n]=t?.[n];let i=e.map(e=>`\`${e}\``).join(`, `),a=e.map(e=>`${e}=${JSON.stringify(t?.[e])??String(t?.[e])}`).join(`, `),o=De(t).join(` and `),s=Array.isArray(t?.aggregations)?``:" Because no `aggregations` was supplied either, the query this would have built is a grouping with NO MEASURE — the chart renders and its numbers mean nothing.";super(`aggregate('${n}'): the spec-shape branch received the analytics branch's ${i} — ${a} — and reads none of them. This call took the spec-shape branch because ${o}; the branch posts only \`groupBy\`, \`aggregations\`, \`where\` and \`limit\` to POST /data/:object/query, so those keys would have been dropped in silence.${s} `+e.map(e=>Ee[e]).join(` `)+" The two shapes are alternatives, not a mixture: the analytics branch (`{ field, function, groupBy, filter }`, which lowers its filter for you) is reached only when NONE of an array `groupBy`, an array `aggregations` or a `where` key is present. Nothing was sent to the server, so no unfiltered numbers came back."),this.name=`AnalyticsKeysOnSpecShapeError`,this.keys=e,this.received=r,this.resource=n}};function ke(e,t){let n=Te.filter(t=>e?.[t]!=null);if(n.length!==0)throw new Oe(n,e,t)}var N=class extends Error{code=`INVALID_FILTER`;httpStatus=400;filter;resource;constructor(e,t,n){let r=JSON.stringify(e)??String(e);super(`aggregate('${t}'): the analytics branch received a \`filter\` array that \`parseFilterAST\` cannot lower into a FilterCondition — ${r}.`+(n?` (${n})`:``)+" `where` on the analytics wire is a FilterCondition (`AnalyticsQuerySchema`, @objectstack/spec data/analytics.zod.ts), and a FilterArray is input-only sugar lowered into one at the single sink `parseFilterAST` (data/filter.zod.ts, objectstack#5158 ruling C). Lowerable shapes are a comparison tuple (['stage','=','won']), a logical node (['and',[..],[..]]), an array of such nodes, and a ViewFilterRule[] this adapter translates first. An infix join ([condA, 'or', condB]) is none of them. Nothing was sent to the server, so no unfiltered numbers came back."),this.name=`UnlowerableAnalyticsFilterError`,this.filter=e,this.resource=t}};function Ae(e,t,n,r){let i=`This is a { field, operator, value } rule entry, so it is refused as the filter is translated rather than sent: the spelling @objectstack/spec's FILTER_TEXT_CASES uses for this operator is the \$-dialect '\$icontains', which this form spells '${r}'. Remove the entry, or give it a non-empty string value (objectui#9048; the same refusal convertFiltersToAST and ValueDataSource already share).`,a=new M(e,t);throw a.message=`Filter entry ${t} is refused. The ${s(n,r,e.value)}. ${i}`,a}function P(t,n){if(!t||typeof t!=`object`)return null;let r=t.field,i=t.operator??t.op??`=`,a=xe(i);return!r||!a?null:(a===`icontains`&&e(t.value)&&Ae(t,n,String(r),i),[String(r),a,t.value])}function je(e){let t=e[0];return e.length>0&&typeof t==`object`&&!!t&&!Array.isArray(t)&&t.field!==void 0}function Me(e){let t=e.map((e,t)=>{if(Array.isArray(e))return I(e,t);let n=P(e,t);if(!n)throw new M(e,t);return n});return t.length===1?t[0]:[`and`,...t]}var Ne=new Set([`and`,`or`]);function F(e){if(je(e))return Me(e);let t=e[0];return typeof t==`string`&&Ne.has(t.toLowerCase())?[t,...e.slice(1).map((e,t)=>I(e,t+1))]:e.every(e=>Array.isArray(e))?e.map((e,t)=>I(e,t)):e}function I(e,t){if(Array.isArray(e))return e.length>0?F(e):e;if(e&&typeof e==`object`&&e.field!==void 0){let n=P(e,t);if(n)return n}return e}function L(e){if(e!=null){if(Array.isArray(e))return e.length===0?void 0:F(e);if(typeof e==`object`)return Object.keys(e).length===0?void 0:f(e)}}function Pe(e,r){if(!Array.isArray(e))return e;if(e.length===0)return;let i=F(e);if(!t(i))throw new N(e,r);let a;try{a=n(i)}catch(t){throw new N(e,r,t instanceof Error?t.message:String(t))}if(a===void 0)throw new N(e,r,"`parseFilterAST` answered `undefined` for a non-empty filter");return a}function R(e){if(e==null)return;if(typeof e==`string`){let t=e.trim();return t.length>0?t:void 0}let t=(e,t)=>String(t).toLowerCase()===`desc`?`-${e}`:e;if(Array.isArray(e)){let n=e.map(e=>typeof e==`string`?e.trim():t(e.field,e.order)).filter(e=>e.length>0);return n.length>0?n.join(`,`):void 0}if(typeof e==`object`){let n=Object.entries(e).map(([e,n])=>t(e,n));return n.length>0?n.join(`,`):void 0}}var z=new Map;async function Fe(e,t){let n=e||`<default>`,r=z.get(n);if(r)return r;let i=t().catch(e=>{throw z.delete(n),e});return z.set(n,i),i}function Ie(e){let t=e?.capabilities;if(!t||typeof t!=`object`)return;let n=t.transactionalBatch;if(typeof n==`boolean`)return n;if(n&&typeof n==`object`&&typeof n.enabled==`boolean`)return n.enabled}function B(e){if(!e||typeof e!=`object`)return!1;let t=e;if(t.httpStatus===404||t.status===404||t.statusCode===404)return!0;let n=typeof t.code==`string`?t.code:``;return m({code:n},[`OBJECT_NOT_FOUND`,`RECORD_NOT_FOUND`])}var Le=[`OBJECT_API_DISABLED`,`OBJECT_API_METHOD_NOT_ALLOWED`];function V(e){return m(e,Le)}var Re=`PERMISSION_DENIED`;function ze(e){return d(e,Re)}var Be=`RESOURCE_NOT_FOUND`;function Ve(e){return d(e,Be)}function He(e){return typeof e!=`object`||!e?!1:e.item!=null}var H=`manage_metadata`,Ue=class extends Error{code=`VIEW_CONFIG_PERMISSION_DENIED`;capability=H;objectName;viewId;constructor(e,t){super(`View configuration is shared: changing "${t}" changes it for everyone who uses this view. That requires the "${H}" capability, which this session does not hold.`),this.name=`ViewConfigPermissionDeniedError`,this.objectName=e,this.viewId=t}};function We(e){if(!e||typeof e!=`object`)return!1;let t=e;return t.code===`VIEW_CONFIG_PERMISSION_DENIED`||t.name===`ViewConfigPermissionDeniedError`}var U=class extends Error{code=`ANALYTICS_NOT_INSTALLED`;surface;serverCode;constructor(e,t,n){super(`Analytics capability is not installed on this deployment — ${e} is unavailable. Install @objectstack/service-analytics and mount AnalyticsServicePlugin to enable it.`+(t?` (server said: ${t})`:``)),this.name=`AnalyticsNotInstalledError`,this.surface=e,this.serverCode=n}},Ge=class extends Error{code=`ANALYTICS_DATASET_NOT_FOUND`;datasetName;serverCode;serverMessage;constructor(e){let t=e.datasetName?`Dataset "${e.datasetName}"`:`The requested dataset`;super(`${t} is not defined in this environment — the app that defines it is missing or out of date. Analytics itself is installed and answering, so the fix is to upgrade the installed app, not to install a server plugin.`+(e.serverMessage?` (server said: ${e.serverMessage})`:``)),this.name=`AnalyticsDatasetNotFoundError`,this.datasetName=e.datasetName,this.serverCode=e.serverCode,this.serverMessage=e.serverMessage}},W=class extends Error{code=`ANALYTICS_UNAUTHENTICATED`;serverCode;serverMessage;constructor(e={}){super(`Analytics query refused: this session is not authenticated. Sign in again and retry — the request was refused before it ran, so it says nothing about whether the analytics capability is installed.`+(e.serverMessage?` (server said: ${e.serverMessage})`:``)),this.name=`AnalyticsUnauthenticatedError`,this.serverCode=e.serverCode,this.serverMessage=e.serverMessage}},Ke=class extends Error{code=`PERMISSION_DENIED`;httpStatus=403;serverCode;serverMessage;datasetName;constructor(e={}){super(`Analytics query refused: this user may not read the data behind ${e.datasetName?`dataset "${e.datasetName}"`:`this dataset`}.`+(e.serverMessage?` (server said: ${e.serverMessage})`:``)),this.name=`AnalyticsForbiddenError`,this.serverCode=e.serverCode,this.serverMessage=e.serverMessage,this.datasetName=e.datasetName}};function qe(e){if(!e||typeof e!=`object`)return{};let t=e,n=(t.error&&typeof t.error==`object`?t.error:void 0)??t;return{code:typeof n.code==`string`&&n.code.length>0?n.code:void 0,message:typeof n.message==`string`&&n.message.length>0?n.message:typeof t.error==`string`&&t.error.length>0?t.error:void 0}}var G=[404,501],Je=class extends Error{code=`ANALYTICS_QUERY_REJECTED`;serverCode;constructor(e,t){super(`Analytics rejected the query: ${e??`the request body does not match the AnalyticsQuery contract`}`),this.name=`AnalyticsQueryRejectedError`,this.serverCode=t}},K=class extends Error{code=`ANALYTICS_RESULT_SHAPE_INVALID`;resource;envelope;received;constructor(e,t){let n=t,r=Array.isArray(n?.data?.rows),i=t===null?`null`:Array.isArray(t)?`an array`:typeof t==`object`?`an object with keys [${Object.keys(t).join(`, `)}]`:typeof t;super(r?`aggregate('${e}'): client.analytics.query resolved to the \`{ data: { rows } }\` envelope, not to an AnalyticsResult. @objectstack/client resolves this method to the payload itself since 17.3.0 (objectstack#13079), and this adapter reads \`rows\` only: an older client is installed beside it, or something between the client and POST /analytics/query wraps the payload a second time. Install @objectstack/client 17.3.0 or later.`:`aggregate('${e}'): client.analytics.query resolved to ${i}, which has no \`rows\` array, so it is not an AnalyticsResult. This adapter reads \`rows\` only (objectui#7028).`),this.name=`AnalyticsResultShapeError`,this.resource=e,this.envelope=r,this.received=i}};function Ye(e){let t=e??{},n=typeof t.code==`string`&&t.code.length>0?t.code:void 0,r=typeof t.message==`string`?t.message:void 0,i=typeof t.httpStatus==`number`?t.httpStatus:typeof t.status==`number`?t.status:typeof t.statusCode==`number`?t.statusCode:void 0;if(m({code:n},[`NOT_IMPLEMENTED`,`ROUTE_NOT_FOUND`]))return{kind:`not-installed`,code:n,message:r};if(d({code:n},`VALIDATION_FAILED`))return{kind:`rejected`,code:n,message:r};if(d({code:n},`UNAUTHENTICATED`))return{kind:`unauthenticated`,code:n,message:r};if(d({code:n},`CUBE_NOT_FOUND`))return{kind:`cube-not-found`,code:n,message:r};if(i===400)return{kind:`rejected`,code:n,message:r};if(n===void 0){if(i!==void 0&&G.includes(i))return{kind:`not-installed`,code:n,message:r};if(i===401)return{kind:`unauthenticated`,code:n,message:r}}return{kind:`unknown`,code:n,message:r}}var Xe=class extends Error{code=`CONCURRENT_UPDATE`;httpStatus=409;currentVersion;currentRecord;userMessage;constructor(e){super(e.message??`Record was modified by another user`),this.name=`ConcurrentUpdateError`,this.currentVersion=e.currentVersion,this.currentRecord=e.currentRecord,this.userMessage=e.userMessage??null}};function Ze(e,t){return typeof e.userMessage==`string`&&e.userMessage.trim()?e.userMessage:typeof t.userMessage==`string`&&t.userMessage.trim()?t.userMessage:null}function q(e){if(!e||typeof e!=`object`)return e;let t=e,n=t.details??{},r=Ze(t,n);if(t.code===`VALIDATION_FAILED`||t.name===`ValidationError`){let e=Array.isArray(n.fields)?n.fields:Array.isArray(t.fields)?t.fields:[],i=e.map(e=>{let t=e??{},n=typeof t.field==`string`?t.field:void 0;return n?{field:n,message:typeof t.message==`string`&&t.message.trim()?t.message:typeof t.code==`string`?t.code:``}:null}).filter(e=>e!==null);return new D(typeof t.message==`string`?t.message:`Validation failed`,i[0]?.field,i,r===null?{fields:e}:{fields:e,userMessage:r})}return t.code===`CONCURRENT_UPDATE`?new Xe({currentVersion:typeof n.currentVersion==`string`?n.currentVersion:null,currentRecord:n.currentRecord??null,message:typeof t.message==`string`?t.message:void 0,userMessage:r}):e}function J(e,t){if(!t||typeof t!=`object`)return null;let n=typeof t.method==`string`&&t.method?t.method:void 0,r=typeof t.url==`string`&&t.url?t.url:void 0,i=typeof t.status==`number`?t.status:typeof t.statusCode==`number`?t.statusCode:void 0;if(!n&&!r&&i===void 0)return null;let a=t.error&&typeof t.error==`object`?t.error:void 0,o=typeof t.code==`string`&&t.code||(a&&typeof a.code==`string`?a.code:void 0),s=[n??`GET`,r??`<unknown url>`];return s.push(`-> ${i??`no status`}`),o&&s.push(`[${o}]`),`${e}: ${s.join(` `)}`}function Qe(){let e=e=>{if(!e||typeof e!=`object`)return!1;if(e.status===404||e.statusCode===404)return!0;let t=e.error;if(t&&typeof t==`object`){let e=t.code;if(m({code:e},[`OBJECT_NOT_FOUND`,`RECORD_NOT_FOUND`]))return!0}return!1},t={debug:(e,t)=>console.debug(e,t??``),info:(e,t)=>console.info(e,t??``),warn:(e,t)=>console.warn(e,t??``),error:(t,n,r)=>{if(e(r)){console.debug(`[ObjectStack] ${J(t,r)??t} (suppressed expected 404)`,r);return}console.error(J(t,r)??t,n??``,r??``)},fatal:(e,t,n)=>console.error(J(e,n)??e,t??``,n??``),log:(e,...t)=>console.log(e,...t),child:()=>t,withTrace:()=>t};return t}var $e=new Set(r.shape.reason.options),et=`objectui:unrecognized-drop-reason`;function tt(e){return $e.has(e)}function Y(e){return!!e&&typeof e==`object`&&Array.isArray(e.fields)&&e.fields.some(e=>typeof e==`string`)}function X(e,t){let n=e.fields.filter(e=>typeof e==`string`),r=typeof e.object==`string`?e.object:t;return tt(e.reason)?{...e,object:r,fields:n,reason:e.reason}:{...e,object:r,fields:n,reason:et,unrecognizedReason:e.reason}}var nt=``,rt=[`ROUTE_NOT_FOUND`,`NOT_IMPLEMENTED`],it=`INVALID_REQUEST`,at=400,ot=[404,501],Z=[`UNAUTHENTICATED`,`PERMISSION_DENIED`],st=[401,403,405];function ct(e){let t=e??{},n=typeof t.code==`string`&&t.code.length>0?t.code:void 0,r=typeof t.message==`string`?t.message:void 0,i=typeof t.httpStatus==`number`?t.httpStatus:typeof t.status==`number`?t.status:typeof t.statusCode==`number`?t.statusCode:void 0,a={code:n,status:i,message:r};return m({code:n},rt)||d({code:n},it)&&i===at?{kind:`not-served`,...a}:m({code:n},Z)||i!==void 0&&st.includes(i)?{kind:`refused`,...a}:n===void 0&&i!==void 0&&ot.includes(i)?{kind:`not-served`,...a}:{kind:`unreadable`,...a}}function lt(e){let t=e??{},n=typeof t.code==`string`&&t.code.length>0?t.code:void 0,r=typeof t.message==`string`?t.message:void 0,i=typeof t.httpStatus==`number`?t.httpStatus:typeof t.status==`number`?t.status:typeof t.statusCode==`number`?t.statusCode:void 0,a={code:n,status:i,message:r};return m({code:n},rt)?{kind:`not-served`,...a}:m({code:n},Z)||i!==void 0&&st.includes(i)?{kind:`refused`,...a}:n===void 0&&i!==void 0&&ot.includes(i)?{kind:`not-served`,...a}:{kind:`unreadable`,...a}}function Q(e){if(typeof e!=`object`||!e)return JSON.stringify(e);if(Array.isArray(e))return`[${e.map(Q).join(`,`)}]`;let t=e;return`{${Object.keys(t).sort().map(e=>`${JSON.stringify(e)}:${Q(t[e])}`).join(`,`)}}`}function ut(e,t){if(e===t)return!0;let n=e==null,r=t==null;return n||r?n&&r:Q(e)===Q(t)}function dt(e,t,n){if(!t||!n||typeof t!=`object`||typeof n!=`object`)return e;let r=[];for(let i of e){let e=i.fields.filter(e=>!Object.prototype.hasOwnProperty.call(t,e)||!Object.prototype.hasOwnProperty.call(n,e)||!ut(t[e],n[e]));e.length>0&&r.push({...i,fields:e})}return r}var ft=Object.keys(o).filter(e=>o[e].includes(`viewItem`));function pt(e){let t=e?.list??e;return t?.data?.object??t?.object}var $=`_isOverride`;function mt(e,t){return e?.[$]===!0||t?.[$]===!0}var ht=Object.freeze([`rowHeight`,`sort`,`hiddenFields`,`columnState`,`inlineEdit`]),gt=Object.freeze([`name`,`object`,`viewKind`,$]);function _t(e){if(!e||typeof e!=`object`||Array.isArray(e))return e;let t=e;if(!mt(t,t.list??t))return e;let n={};for(let e of gt)t[e]!==void 0&&(n[e]=t[e]);for(let e of ht)t[e]!==void 0&&(n[e]=t[e]);return n}function vt(e){if(!e||typeof e!=`object`)return null;let t=e,n=`item`in t?t.item:t;if(!n||typeof n!=`object`)return null;let r=c(n),i=r.list??r;return!i||typeof i!=`object`?null:Object.keys(i).length>0?i:null}function yt(e){let t=e??void 0;return{removed:!!(t?.deleted??t?.reset??!0),...typeof t?.reset==`boolean`?{reset:t.reset}:{},...typeof t?.message==`string`?{message:t.message}:{}}}function bt(e,t,n,r){return{...e,...t,name:n,object:e?.object||e?.data?.object||r}}var xt=class{client;connected=!1;connectPromise=null;metadataCache;connectionState=`disconnected`;connectionStateListeners=[];batchProgressListeners=[];autoReconnect;maxReconnectAttempts;reconnectDelay;reconnectAttempts=0;baseUrl;token;analyticsCapabilityWarned=!1;fetchImpl;inflightFinds=new Map;missingResources=new Set;batchUnsupported=!1;atomicBatchCapability;mutationListeners=new Set;writeWarningListeners=new Set;saveAdvisoryListeners=new Set;metadataReadWarningListeners=new Set;systemCapabilities;constructor(e){this.client=new ne.ObjectStackClient({...e,logger:Qe()}),this.installSaveAdvisoryInterceptor(),this.metadataCache=new he(e.cache),this.autoReconnect=e.autoReconnect??!0,this.maxReconnectAttempts=e.maxReconnectAttempts??3,this.reconnectDelay=e.reconnectDelay??1e3,this.baseUrl=e.baseUrl,this.token=e.token,this.systemCapabilities=e.systemCapabilities,this.fetchImpl=e.fetch||globalThis.fetch.bind(globalThis)}async connect(){if(!this.connected)return this.connectPromise?this.connectPromise:(this.setConnectionState(`connecting`),this.connectPromise=(async()=>{try{let e=this.baseUrl||``,t=e?`${e.replace(/\/$/,``)}/api/v1/discovery`:`/api/v1/discovery`,n=await Fe(e,async()=>{let e=await this.fetchImpl(t,{method:`GET`,headers:this.token?{Authorization:`Bearer ${this.token}`}:void 0});if(!e.ok)throw Error(`discovery ${e.status} ${e.statusText}`);let n=await e.json();return n&&typeof n.success==`boolean`&&`data`in n?n.data:n});this.client.discoveryInfo=n,this.atomicBatchCapability=Ie(n),this.connected=!0,this.reconnectAttempts=0,this.setConnectionState(`connected`)}catch(e){let t=new T(e instanceof Error?e.message:`Failed to connect to ObjectStack server`,void 0,{originalError:e});if(this.setConnectionState(`error`,t),this.autoReconnect&&this.reconnectAttempts<this.maxReconnectAttempts)await this.attemptReconnect();else throw t}finally{this.connectPromise=null}})(),this.connectPromise)}async attemptReconnect(){this.reconnectAttempts++,this.setConnectionState(`reconnecting`);let e=this.reconnectDelay*2**(this.reconnectAttempts-1);await new Promise(t=>setTimeout(t,e)),this.connected=!1,await this.connect()}getConnectionState(){return this.connectionState}isConnected(){return this.connected&&this.connectionState===`connected`}onConnectionStateChange(e){return this.connectionStateListeners.push(e),()=>{let t=this.connectionStateListeners.indexOf(e);t>-1&&this.connectionStateListeners.splice(t,1)}}onBatchProgress(e){return this.batchProgressListeners.push(e),()=>{let t=this.batchProgressListeners.indexOf(e);t>-1&&this.batchProgressListeners.splice(t,1)}}setConnectionState(e,t){this.connectionState=e;let n={state:e,timestamp:Date.now(),error:t};this.connectionStateListeners.forEach(e=>{try{e(n)}catch(e){console.error(`Error in connection state listener:`,e)}})}emitBatchProgress(e){this.batchProgressListeners.forEach(t=>{try{t(e)}catch(e){console.error(`Error in batch progress listener:`,e)}})}async find(e,t){if(this.missingResources.has(e))return{data:[],total:0};let n=`${e}::${Q(t)}`,r=this.inflightFinds.get(n);if(r)return r;let i=(async()=>{if(await this.connect(),t?.$expand&&t.$expand.length>0||t?.$search!=null&&String(t.$search).trim()!==``){let n=await this.rawFindWithPopulate(e,t);return this.normalizeQueryResult(n,t)}let n=this.convertQueryParams(t);try{let r=await this.client.data.find(e,n);return this.normalizeQueryResult(r,t)}catch(t){if(!V(t)&&B(t))return this.missingResources.add(e),{data:[],total:0};throw t}})();this.inflightFinds.set(n,i);let a=()=>{this.inflightFinds.get(n)===i&&this.inflightFinds.delete(n)};return i.then(a,a),i}async searchAll(e,t){let n=(e??``).trim();if(n===``)return{query:``,hits:[]};await this.connect();let r=new URLSearchParams;r.set(`q`,n),t?.limit!=null&&t.limit>0&&r.set(`limit`,String(t.limit)),t?.objects&&t.objects.length>0&&r.set(`objects`,t.objects.join(`,`));let i=(this.baseUrl||``).replace(/\/$/,``),a=`${i}${/\/api\/v\d+$/i.test(i)?`/search`:`/api/v1/search`}?${r.toString()}`,o={"Content-Type":`application/json`};this.token&&(o.Authorization=`Bearer ${this.token}`);let s=await this.fetchImpl(a,{method:`GET`,headers:o});if(!s.ok){if(s.status===404)return{query:n,hits:[]};let e=O(await s.json().catch(()=>({message:s.statusText}))),t=Error(e.message??s.statusText);throw t.status=s.status,t.code=e.code,t}let c=await s.json(),l=c&&typeof c==`object`&&typeof c.success==`boolean`&&`data`in c?c.data:c,u=Array.isArray(l?.hits)?l.hits:Array.isArray(l)?l:[],d=[];for(let e of u){if(!e||typeof e!=`object`)continue;let t=e,n=t.object??t.objectName??t.object_name,r=t.id??t.record?.id??t.record?._id;typeof n==`string`&&r!=null&&d.push({object:n,id:String(r),title:typeof t.title==`string`?t.title:void 0,snippet:typeof t.snippet==`string`?t.snippet:void 0,record:t.record&&typeof t.record==`object`?t.record:void 0})}return{query:typeof l?.query==`string`?l.query:n,hits:d}}async findOne(e,t,n){if(await this.connect(),n?.$expand&&n.$expand.length>0)try{let r={...n,$filter:{id:String(t)},$top:1},i=await this.rawFindWithPopulate(e,r);if(Array.isArray(i))return i[0]||null;let a=i;return(a.records||a.value||[])[0]||null}catch(e){if(B(e))return null}try{return(await this.client.data.get(e,String(t))).record}catch(e){if(B(e))return null;throw e}}emitMutation(e){for(let t of this.mutationListeners)try{t(e)}catch(e){console.warn(`ObjectStackAdapter: mutation listener error`,e)}}onMutation(e){return this.mutationListeners.add(e),()=>{this.mutationListeners.delete(e)}}emitWriteWarning(e){for(let t of this.writeWarningListeners)try{t(e)}catch(e){console.warn(`ObjectStackAdapter: write-warning listener error`,e)}}notifyDroppedFields(e,t,n,r,i){let a=n?.droppedFields;if(!Array.isArray(a)||a.length===0)return;let o=a.filter(Y).map(e=>X(e,t)),s=n?.record,c=dt(o,i,s);c.length!==0&&this.emitWriteWarning({operation:e,resource:t,...r===void 0?{}:{id:r},droppedFields:c})}notifyBatchDroppedFields(e,t){let n=t?.droppedFields;if(!Array.isArray(n)||n.length===0)return;let r=t?.results;for(let t of n){if(!Y(t))continue;let n=t,i=typeof n.index==`number`?e[n.index]:void 0,a=typeof n.object==`string`?n.object:typeof i?.object==`string`?i.object:nt,o=typeof n.index==`number`&&Array.isArray(r)?r[n.index]:void 0,[s]=dt([X({fields:n.fields,reason:n.reason},a)],i?.data,o);if(!s)continue;let c=(i?.action??`create`)===`create`?`create`:`update`;this.emitWriteWarning({operation:c,resource:a,...i?.id!==void 0&&i?.id!==null?{id:i.id}:{},droppedFields:[s]})}}onWriteWarning(e){return this.writeWarningListeners.add(e),()=>{this.writeWarningListeners.delete(e)}}onSaveAdvisory(e){return this.saveAdvisoryListeners.add(e),()=>{this.saveAdvisoryListeners.delete(e)}}emitSaveAdvisory(e){for(let t of this.saveAdvisoryListeners)try{t(e)}catch(e){console.warn(`ObjectStackAdapter: save-advisory listener error`,e)}}onMetadataReadWarning(e){return this.metadataReadWarningListeners.add(e),()=>{this.metadataReadWarningListeners.delete(e)}}emitMetadataReadWarning(e){for(let t of this.metadataReadWarningListeners)try{t(e)}catch(e){console.warn(`ObjectStackAdapter: metadata read-warning listener error`,e)}}installSaveAdvisoryInterceptor(){let e=this.client.meta,t=e.saveItem.bind(e);e.saveItem=async(e,n,r)=>{let i=await t(e,n,r);try{let t=_(i);t.length>0&&this.emitSaveAdvisory({type:e,name:n,door:`save`,mode:i?.state===`draft`?`draft`:`publish`,advisories:t})}catch(e){console.warn(`ObjectStackAdapter: save-advisory read error`,e)}return i}}async create(e,t){await this.connect();try{let n=await this.client.data.create(e,t);return this.emitMutation({type:`create`,resource:e,record:{...n.record}}),this.notifyDroppedFields(`create`,e,n,n.record?.id,t),n.record}catch(e){throw q(e)}}async update(e,t,n,r){await this.connect();try{let i=await this.client.data.update(e,String(t),n,r?.ifMatch?{ifMatch:r.ifMatch}:void 0);return this.emitMutation({type:`update`,resource:e,id:String(t),record:{...i.record}}),this.notifyDroppedFields(`update`,e,i,t,n),i.record}catch(e){throw q(e)}}async delete(e,t,n){await this.connect();try{let r=await this.client.data.delete(e,String(t),n?.ifMatch?{ifMatch:n.ifMatch}:void 0);return r.success&&this.emitMutation({type:`delete`,resource:e,id:String(t)}),r.success}catch(e){throw q(e)}}async bulkUpdate(e,t,n){if(await this.connect(),!t||t.length===0)return 0;let r=t.map(e=>({id:String(e),data:n})),i=t=>(t>0&&this.emitMutation({type:`update`,resource:e}),t),a=this.client.data.updateMany;if(typeof a==`function`)try{let n=await a(e,r,{continueOnError:!0});return n&&typeof n==`object`&&typeof n.succeeded==`number`?i(n.succeeded):i(Array.isArray(n)?n.length:t.length)}catch(e){throw q(e)}let o=0;for(let r of t)try{await this.client.data.update(e,String(r),n),o++}catch{}return i(o)}async bulkDelete(e,t){if(await this.connect(),!t||t.length===0)return 0;let n=t.map(e=>String(e)),r=t=>(t>0&&this.emitMutation({type:`delete`,resource:e}),t),i=this.client.data.deleteMany;if(typeof i==`function`)try{let t=await i(e,n,{continueOnError:!0});return t&&typeof t==`object`&&typeof t.succeeded==`number`?r(t.succeeded):r(Array.isArray(t)?t.length:n.length)}catch(e){throw q(e)}let a=0;for(let t of n)try{await this.client.data.delete(e,t),a++}catch{}return r(a)}async batchTransaction(e){await this.connect();let t=this.atomicBatchCapability===!0;if(!t&&this.batchUnsupported)return p(this,e);try{let t=await this.client.data.batchTransaction(e);return this.emitBatchMutations(e,t?.results),this.notifyBatchDroppedFields(e,t),t}catch(n){let r=this.errorStatusOf(n);if(!t&&this.batchStatusUnsupported(r))return this.fallbackToEmulation(e,r);throw n}}batchStatusUnsupported(e){return e===404||e===405||e===501}errorStatusOf(e){if(!e||typeof e!=`object`)return;let t=e,n=t.httpStatus??t.status??t.statusCode;return typeof n==`number`?n:void 0}fallbackToEmulation(e,t){return this.batchUnsupported||(this.batchUnsupported=!0,console.warn(`ObjectStackAdapter: POST /api/v1/batch unavailable (HTTP ${t??`?`}) — falling back to non-atomic client-side batch emulation. Cross-object saves on this backend are best-effort, not transactional.`)),p(this,e)}emitBatchMutations(e,t){let n=Array.isArray(t)?t:[];e.forEach((e,t)=>{let r=e.action??`create`,i=n[t];r===`create`?this.emitMutation({type:`create`,resource:e.object,record:i}):r===`update`?this.emitMutation({type:`update`,resource:e.object,id:e.id??i?.id??i?._id,record:i}):r===`delete`&&this.emitMutation({type:`delete`,resource:e.object,id:e.id})})}async bulk(e,t,n){if(await this.connect(),!n||n.length===0)return[];let r=n.length,i=0,a=0,o=()=>{this.emitBatchProgress({operation:t,total:r,completed:i,failed:a,percentage:r>0?(i+a)/r*100:0})};try{switch(t){case`create`:{o();let t=await this.client.data.createMany(e,n);return i=t.length,a=r-i,o(),i>0&&this.emitMutation({type:`create`,resource:e}),t}case`delete`:{let t=n.map(e=>e.id).filter(Boolean);if(t.length===0){let e=n.map((e,t)=>({index:t,error:`Missing ID for item at index ${t}`}));throw a=n.length,o(),new w(`delete`,0,n.length,e)}return o(),await this.client.data.deleteMany(e,t),i=t.length,a=r-i,o(),i>0&&this.emitMutation({type:`delete`,resource:e}),[]}case`update`:{if(typeof this.client.data.updateMany==`function`)try{o();let t=this.client.data.updateMany,s=await t(e,n);return i=s.length,a=r-i,o(),i>0&&this.emitMutation({type:`update`,resource:e}),s}catch{}let t=[],s=[];for(let r=0;r<n.length;r++){let c=n[r],l=c.id;if(!l){s.push({index:r,error:`Missing ID`}),a++,o();continue}try{let n=await this.client.data.update(e,String(l),c);t.push(n.record),i++,o()}catch(e){let t=e instanceof Error?e.message:String(e);s.push({index:r,error:t}),a++,o()}}if(i>0&&this.emitMutation({type:`update`,resource:e}),s.length>0)throw new w(`update`,t.length,s.length,s,{resource:e,totalRecords:n.length});return t}default:throw new S(`Unsupported bulk operation: ${t}`,`UNSUPPORTED_OPERATION`,400)}}catch(r){if(o(),r instanceof w||r instanceof S)throw r;let i=r instanceof Error?r.message:String(r),a=n.map((e,t)=>({index:t,error:i}));throw new w(t,0,n.length,a,{resource:e,originalError:r})}}async importRecords(e,t){await this.connect();let n=this.client.data.import;if(typeof n!=`function`)throw new S(`The connected @objectstack/client does not support data.import(). Upgrade the client, or import via a per-row create fallback.`,`UNSUPPORTED_OPERATION`,400);try{return await n.call(this.client.data,e,t)}catch(e){throw q(e)}}importJobApi(){let e=this.client.data;if(typeof e.createImportJob==`function`)return e}async createImportJob(e,t){await this.connect();let n=this.importJobApi();if(!n)throw new S(`The connected @objectstack/client does not support async import jobs (data.createImportJob). Upgrade the client, or use the synchronous importRecords() path.`,`UNSUPPORTED_OPERATION`,400);try{return await n.createImportJob.call(this.client.data,e,t)}catch(e){throw q(e)}}async getImportJobProgress(e){await this.connect();let t=this.importJobApi();if(!t)throw new S(`The connected @objectstack/client does not support async import jobs.`,`UNSUPPORTED_OPERATION`,400);try{return await t.getImportJobProgress.call(this.client.data,e)}catch(e){throw q(e)}}async getImportJobResults(e){await this.connect();let t=this.importJobApi();if(!t)throw new S(`The connected @objectstack/client does not support async import jobs.`,`UNSUPPORTED_OPERATION`,400);try{return await t.getImportJobResults.call(this.client.data,e)}catch(e){throw q(e)}}async listImportJobs(e={}){await this.connect();let t=this.importJobApi();if(!t)throw new S(`The connected @objectstack/client does not support async import jobs.`,`UNSUPPORTED_OPERATION`,400);try{return await t.listImportJobs.call(this.client.data,e)}catch(e){throw q(e)}}async cancelImportJob(e){await this.connect();let t=this.importJobApi();if(!t)throw new S(`The connected @objectstack/client does not support async import jobs.`,`UNSUPPORTED_OPERATION`,400);try{await t.cancelImportJob.call(this.client.data,e)}catch(e){throw q(e)}}async undoImportJob(e){await this.connect();let t=this.importJobApi();if(!t||typeof t.undoImportJob!=`function`)throw new S(`The connected @objectstack/client does not support undoing import jobs (data.undoImportJob).`,`UNSUPPORTED_OPERATION`,400);try{return await t.undoImportJob.call(this.client.data,e)}catch(e){throw q(e)}}normalizeQueryResult(e,t){if(Array.isArray(e))return{data:e,total:e.length,page:1,pageSize:e.length,hasMore:!1};let n=e,r=n.records||n.value||[],i=n.total??n.count??r.length,a=typeof n.hasMore==`boolean`?n.hasMore:t?.$top?r.length===t.$top:!1;return{data:r,total:i,page:t?.$skip&&t.$top?Math.floor(t.$skip/t.$top)+1:1,pageSize:t?.$top,hasMore:a}}async rawFindWithPopulate(e,t){let n=new URLSearchParams;if(t.$expand&&t.$expand.length>0&&n.set(`populate`,t.$expand.join(`,`)),t.$top!==void 0&&n.set(`top`,String(t.$top)),t.$skip!==void 0&&n.set(`skip`,String(t.$skip)),t.$search!=null&&String(t.$search).trim()!==``&&n.set(`search`,String(t.$search).trim()),t.$searchFields&&t.$searchFields.length>0&&n.set(`searchFields`,t.$searchFields.join(`,`)),t.$select&&t.$select.length>0){let e=t.$select.includes(`id`)?t.$select:[`id`,...t.$select];n.set(`select`,e.join(`,`))}let r=R(t.$orderby);if(r&&n.set(`sort`,r),t.$filter!==void 0&&t.$filter!==null){let e=L(t.$filter);e!==void 0&&n.set(`filter`,JSON.stringify(e))}let i=this.baseUrl.replace(/\/$/,``),a=n.toString(),o=`${i}${/\/api\/v\d+$/i.test(i)?`/data`:`/api/v1/data`}/${e}${a?`?${a}`:``}`,s={"Content-Type":`application/json`};this.token&&(s.Authorization=`Bearer ${this.token}`);let c=await this.fetchImpl(o,{method:`GET`,headers:s});if(!c.ok){let e=O(await c.json().catch(()=>({message:c.statusText}))),t=Error(e.message??c.statusText);throw t.status=c.status,t.code=e.code,t.httpStatus=c.status,t}let l=await c.json();return l&&typeof l.success==`boolean`&&`data`in l?l.data:l}async exportDownload(e,t={}){let n=new URLSearchParams,r=t.format===`xlsx`?`xlsx`:t.format===`json`?`json`:`csv`;if(n.set(`format`,r),t.fields&&t.fields.length>0&&n.set(`fields`,t.fields.join(`,`)),t.limit&&t.limit>0&&n.set(`limit`,String(t.limit)),t.includeHeaders===!1&&n.set(`header`,`false`),t.sort&&t.sort.length>0){let e=t.sort.filter(e=>e&&e.field).map(e=>`${e.field}:${e.direction===`desc`?`desc`:`asc`}`).join(`,`);e&&n.set(`orderby`,e)}if(t.filter!==void 0&&t.filter!==null){let e=L(t.filter);e!==void 0&&n.set(`filter`,JSON.stringify(e))}let i=typeof t.search==`string`?t.search.trim():``;i&&(n.set(`search`,i),t.searchFields&&t.searchFields.length>0&&n.set(`searchFields`,t.searchFields.join(`,`)));let a=this.baseUrl.replace(/\/$/,``),o=`${a}${/\/api\/v\d+$/i.test(a)?`/data`:`/api/v1/data`}/${encodeURIComponent(e)}/export?${n.toString()}`,s={...this.getAuthHeaders()},c=await this.fetchImpl(o,{method:`GET`,headers:s,credentials:`include`});if(!c.ok){let e=O(await c.json().catch(()=>({message:c.statusText}))),t=Error(e.message??c.statusText);throw t.status=c.status,t.code=e.code,t}return await c.blob()}convertQueryParams(e){if(!e)return{};let t={};if(e.$select&&(t.select=e.$select.includes(`id`)?e.$select:[`id`,...e.$select]),e.$filter!==void 0&&e.$filter!==null&&!(Array.isArray(e.$filter)?e.$filter.length===0:typeof e.$filter==`object`&&Object.keys(e.$filter).length===0)){if(Array.isArray(e.$filter))t.filters=F(e.$filter);else{let n=f(e.$filter);n!==void 0&&(t.filters=n)}}let n=R(e.$orderby);return n&&(t.sort=n),e.$skip!==void 0&&(t.skip=e.$skip),e.$top!==void 0&&(t.top=e.$top),e.$search!=null&&String(e.$search).trim()!==``&&(t.search=String(e.$search).trim()),e.$searchFields&&e.$searchFields.length>0&&(t.searchFields=e.$searchFields),t}async getObjectSchema(e){await this.connect();try{let t=await this.metadataCache.get(e,()=>this.fetchObjectSchemaFresh(e));return te(t),this.applyFieldWidgetOverrides(e,t),t}catch(t){let n=t;throw B(n)?new C(e,{originalError:t}):t instanceof S?t:ge(n,`getObjectSchema(${e})`)}}applyFieldWidgetOverrides(e,t){let n={sys_permission_set:{object_permissions:`permission-facet-link`,field_permissions:`permission-facet-link`,system_permissions:`permission-facet-link`,row_level_security:`permission-facet-link`,tab_permissions:`permission-facet-link`,admin_scope:`permission-facet-link`}}[e],r=t&&typeof t==`object`?t.fields:null;if(n&&r)for(let[e,t]of Object.entries(n))if(Array.isArray(r)){let n=r.find(t=>t?.name===e);n&&!n.widget&&(n.widget=t)}else{let n=r[e];n&&!n.widget&&(n.widget=t)}}async fetchObjectSchemaFresh(e){let t=(this.baseUrl||``).replace(/\/$/,``),n=`${t}${/\/api\/v\d+$/i.test(t)?`/meta`:`/api/v1/meta`}/object/${encodeURIComponent(e)}`,r={"Content-Type":`application/json`};this.token&&(r.Authorization=`Bearer ${this.token}`);let i=await this.fetchImpl(n,{method:`GET`,headers:r,cache:`no-cache`});if(!i.ok){let e=O(await i.json().catch(()=>({message:i.statusText}))),t=Error(e.message??i.statusText);throw t.status=i.status,t.code=e.code,t}let a=await i.json(),o=a&&typeof a==`object`&&`success`in a&&`data`in a?a.data:a,s=o&&typeof o==`object`&&`item`in o?o.item:o;return ee(s,o&&typeof o==`object`?o.sortability:void 0)}async getObjects(){try{await this.connect();let e=(this.baseUrl||``).replace(/\/$/,``),t=`${e}${/\/api\/v\d+$/i.test(e)?`/meta`:`/api/v1/meta`}/object`,n={"Content-Type":`application/json`};this.token&&(n.Authorization=`Bearer ${this.token}`);let r=await this.fetchImpl(t,{method:`GET`,headers:n});if(!r.ok)return[];let i=await r.json(),a=i&&typeof i==`object`&&`success`in i&&`data`in i?i.data:i;return(Array.isArray(a)?a:Array.isArray(a?.items)?a.items:[]).map(e=>({name:String(e?.name??``),label:e?.label==null?void 0:String(e.label)})).filter(e=>e.name)}catch{return[]}}getClient(){return this.client}async getDiscovery(){try{return await this.connect(),this.client.discoveryInfo||null}catch{return null}}invalidateViewKeys(e,t){this.metadataCache.invalidate?.(`view:${e}:${t}`),this.metadataCache.invalidate?.(`view-overrides:${e}`)}async listViewOverrides(e){await this.connect();let t=`view-overrides:${e}`;return await this.metadataCache.get(t,async()=>{let t=await this.client.meta.getItems(`view`),n=Array.isArray(t?.items)?t.items:Array.isArray(t)?t:[],r={};for(let t of n){if(!t||typeof t!=`object`||pt(t)!==e)continue;let n=t.name;typeof n==`string`&&n&&(r[n]=t)}return r})}async getView(e,t){await this.connect();try{let n=`view:${e}:${t}`;return await this.metadataCache.get(n,async()=>{let e=await this.client.meta.getItem(`view`,t);return e&&e.item?e.item:e??null})}catch{return null}}setSystemCapabilities(e){this.systemCapabilities=e?[...e]:void 0}maySetViewConfig(){return this.systemCapabilities===void 0||this.systemCapabilities.includes(H)}async updateViewConfig(e,t,n,r){if(!this.maySetViewConfig())throw new Ue(e,t);await this.connect();let i={...n||{},object:n?.object||e,name:t,...r?.isSavedView?{}:{[$]:!0}},a=await this.client.meta.saveItem(`view`,t,i);return this.invalidateViewKeys(e,t),a&&a.item?a.item:a??void 0}async listViews(e,t){await this.connect();try{let n;if(t?.previewDrafts){let e=await this.metadataClient().withPreviewDrafts(!0).list(`view`);n=Array.isArray(e)?e:[]}else{let e=await this.client.meta.getItems(`view`);n=Array.isArray(e?.items)?e.items:Array.isArray(e)?e:[]}let r=new Set([`form`,`detail`]);return n.filter(t=>{if(!t)return!1;let n=t.list??t;if(pt(t)!==e)return!1;let i=t.viewKind??n?.viewKind;return!(i&&r.has(i)||mt(t,n))}).map(e=>{let t=e.list??e,n=e._draft===!0||t?._draft===!0;if(t&&t.config&&typeof t.config==`object`){let e={...t.config,name:t.name??t.config.name,label:t.label??t.config.label};t.object!==void 0&&(e.object=t.object);for(let n of ft)t[n]!==void 0&&(e[n]=t[n]);return e.isDefault=!!t.isDefault,n&&(e._draft=!0),e}return n?{...t,_draft:!0}:t})}catch(t){console.warn(`[OBJECTSTACKDataSource] listViews failed:`,t);let n=lt(t);return n.kind!==`not-served`&&this.emitMetadataReadWarning({operation:`listViews`,kind:`view`,objectName:e,reason:n.kind,...n.code===void 0?{}:{code:n.code},...n.status===void 0?{}:{status:n.status},...n.message===void 0?{}:{message:n.message}}),[]}}metadataClient(){return new x({baseUrl:this.baseUrl,fetch:this.fetchImpl,...this.token?{headers:{Authorization:`Bearer ${this.token}`}}:{}})}async listImportMappings(e){await this.connect();try{let t=await this.client.meta.getItems(`mapping`);return(Array.isArray(t?.items)?t.items:Array.isArray(t)?t:[]).filter(t=>t&&t.targetObject===e)}catch(t){console.warn(`[OBJECTSTACKDataSource] listImportMappings failed:`,t);let n=ct(t);return n.kind!==`not-served`&&this.emitMetadataReadWarning({operation:`listImportMappings`,kind:`mapping`,objectName:e,reason:n.kind,...n.code===void 0?{}:{code:n.code},...n.status===void 0?{}:{status:n.status},...n.message===void 0?{}:{message:n.message}}),[]}}async createView(e,t){await this.connect();let n=String(t?.name||``).trim();if(!n){let r=String(t?.label||e||`view`).toLowerCase().replace(/[^a-z0-9_]+/g,`_`).replace(/^_+|_+$/g,``).slice(0,40);(!r||/^[0-9]/.test(r))&&(r=r?`view_${r}`:`view`);let i=Date.now().toString(36);n=`${r}_${i}`}let r={...t,name:n,object:t?.object||e,data:t?.data||{provider:`object`,object:e}},i=await this.client.meta.saveItem(`view`,n,r);return this.invalidateViewKeys(e,n),i&&i.item?i.item:r}async updateView(e,t,n){await this.connect();let r=this.metadataClient(),i=vt(await r.get(`view`,t,{state:`draft`}));if(i){let a=bt(i,n,t,e);return await r.save(`view`,t,a,{mode:`draft`}),this.invalidateViewKeys(e,t),a}let a;try{let e=await this.client.meta.getItem(`view`,t);a=e&&(e.item||e)||{},a?.list&&(a=a.list)}catch(n){throw B(n)?Object.assign(Error(`updateView: view "${t}" not found on object "${e}" — no pending draft and no published overlay. Use createView() to create one.`),{cause:n}):n}let o=bt(a,n,t,e),s=await this.client.meta.saveItem(`view`,t,o);return this.invalidateViewKeys(e,t),s&&s.item?s.item:o}async deleteView(e,t){await this.connect();let n=this.metadataClient();try{let r=yt(await n.reset(`view`,t,{state:`draft`})),i;try{i=yt(await n.reset(`view`,t))}catch(n){let i={deleted:!1,draft:r,published:{removed:!1}};throw Object.assign(Error(`deleteView: view "${t}" on object "${e}" is NOT fully removed — the draft home was ${r.removed?`discarded`:`already absent`}, but deleting the published overlay failed. The published row is still serving the view; retry the delete.`),{cause:n,outcome:i})}return{deleted:r.removed||i.removed,draft:r,published:i}}finally{this.invalidateViewKeys(e,t)}}async getApp(e){await this.connect();try{let t=`app:${e}`;return await this.metadataCache.get(t,async()=>{let t=await this.client.meta.getItem(`app`,e);return t&&t.item?t.item:t??null})}catch{return null}}async probeAppAccess(e){if(!e)return`unknown`;try{return He(await this.client.meta.getItem(`app`,e))?`granted`:`not_found`}catch(e){return ze(e)?`denied`:Ve(e)?`not_found`:`unreachable`}}async getPage(e){await this.connect();try{let t=`page:${e}`;return await this.metadataCache.get(t,async()=>{let t=await this.client.meta.getItem(`page`,e);return t&&t.item?t.item:t??null})}catch{return null}}async updateDashboard(e,t){await this.connect();let n=await this.client.meta.saveItem(`dashboard`,e,t);return this.metadataCache.invalidate?.(`dashboards`),this.metadataCache.invalidate?.(`dashboard:${e}`),n&&n.item?n.item:n??void 0}async aggregate(e,t){if(await this.connect(),t!=null&&(Array.isArray(t.groupBy)||Array.isArray(t.aggregations)||t.where!==void 0)){let n={};Array.isArray(t.groupBy)&&(n.groupBy=t.groupBy),Array.isArray(t.aggregations)&&(n.aggregations=t.aggregations),t.where!==void 0&&(we(t.where,e),n.where=t.where),ke(t,e),typeof t.limit==`number`&&(n.limit=t.limit);let r=await this.client.data.query(e,n);return Array.isArray(r)?r:Array.isArray(r?.records)?r.records:Array.isArray(r?.data)?r.data:[]}let n=t.filter?Pe(t.filter,e):void 0;try{let r=t.function===`count`?`count`:`${t.field}_${t.function}`,i=this.aggregateValueKey(t),a={cube:e,measures:[r],dimensions:t.groupBy&&t.groupBy!==`_all`?[t.groupBy]:[]};n!==void 0&&(a.where=n);let o=await this.client.analytics.query(a);if(!Array.isArray(o?.rows))throw new K(e,o);let s=o.rows;return s.length>0&&s.every(e=>e==null||!(r in e&&e[r]!=null||i in e&&e[i]!=null))?await this.aggregateViaFind(e,t):s.map(e=>{let t={...e};return r!==i&&r in t&&(t[i]=t[r],delete t[r]),t})}catch(n){if(n instanceof K)throw n;let r=Ye(n);if(r.kind===`rejected`)throw new Je(r.message,r.code);if(r.kind===`unauthenticated`)throw new W({serverCode:r.code,serverMessage:r.message});if(r.kind===`cube-not-found`)throw n;return r.kind===`not-installed`&&this.warnAnalyticsCapabilityOnce(r.message),await this.aggregateViaFind(e,t)}}async queryGroupHeaders(e,t){await this.connect();let n=(await this.client.data.query(e,t))?.records;if(!Array.isArray(n))throw Error(`queryGroupHeaders('${e}'): POST /data/${e}/query answered without a \`records\` array, so no group header can be read from it. The header query was sent verbatim; nothing was approximated from a page of rows.`);return n}async aggregateViaFind(e,t){let n=(await this.find(e,t.filter?{$filter:t.filter}:void 0)).data||[];return n.length===0?[]:this.aggregateClientSide(n,t)}warnAnalyticsCapabilityOnce(e){this.analyticsCapabilityWarned||(this.analyticsCapabilityWarned=!0,console.warn(`[OBJECTSTACKDataSource] analytics capability unavailable — aggregating client-side from a scoped find(). Numbers stay correct but the semantic layer (cubes, joins, server-side rollups) is off. Install @objectstack/service-analytics to enable it.`+(e?` Server said: ${e}`:``)))}async queryDataset(e,t){await this.connect();let n=`${(this.baseUrl||``).replace(/\/$/,``)}/api/v1/analytics/dataset/query`,r=typeof window<`u`&&new URLSearchParams(window.location.search).get(`preview`)===`draft`,i=typeof e==`string`?{datasetName:e,selection:t,...r?{previewDrafts:!0}:{}}:{dataset:e,selection:t,...r?{previewDrafts:!0}:{}},a=await this.fetchImpl(n,{method:`POST`,headers:{"Content-Type":`application/json`,...this.token?{Authorization:`Bearer ${this.token}`}:{}},body:JSON.stringify(i)});if(!a.ok){let t;try{t=await a.json()}catch{}let{code:n,message:r}=qe(t),i=r||(t===void 0?``:JSON.stringify(t)),o=`POST /analytics/dataset/query`,s=typeof e==`string`?e:typeof e?.name==`string`?String(e.name):void 0;if(m({code:n},[`NOT_IMPLEMENTED`,`ROUTE_NOT_FOUND`]))throw new U(o,r,n);if(d({code:n},`NOT_FOUND`))throw new Ge({datasetName:s,serverCode:n,serverMessage:r});if(d({code:n},`UNAUTHENTICATED`))throw new W({serverCode:n,serverMessage:r});if(d({code:n},`PERMISSION_DENIED`))throw new Ke({serverCode:n,serverMessage:r,datasetName:s});if(n===void 0){if(G.includes(a.status))throw new U(o,i||void 0);if(a.status===401)throw new W({serverMessage:r})}throw Error(`Dataset query failed: ${a.status} ${a.statusText}${i?` — ${i}`:``}`)}let o=await a.json(),s=o&&typeof o==`object`&&`success`in o&&`data`in o?o.data:o;return{rows:Array.isArray(s?.rows)?s.rows:Array.isArray(s)?s:[],fields:Array.isArray(s?.fields)?s.fields:[],object:typeof s?.object==`string`?s.object:void 0,dimensionFields:s?.dimensionFields&&typeof s.dimensionFields==`object`?s.dimensionFields:void 0,drillRawRows:Array.isArray(s?.drillRawRows)?s.drillRawRows:void 0,drillRanges:Array.isArray(s?.drillRanges)?s.drillRanges:void 0,totals:Array.isArray(s?.totals)?s.totals:void 0}}aggregateValueKey(e){return e.field||e.function||`count`}aggregateClientSide(e,t){let{field:n,function:r,groupBy:i}=t,a=this.aggregateValueKey(t),o={};for(let t of e){let e=String(t[i]??`Unknown`);o[e]||(o[e]=[]),o[e].push(t)}return Object.entries(o).map(([e,t])=>{let o=n?t.map(e=>Number(e[n])||0):[],s;switch(r){case`count`:s=t.length;break;case`avg`:s=o.length>0?o.reduce((e,t)=>e+t,0)/o.length:0;break;case`min`:s=o.length>0?Math.min(...o):0;break;case`max`:s=o.length>0?Math.max(...o):0;break;default:s=o.reduce((e,t)=>e+t,0)}return{[i]:e,[a]:s}})}async getItems(e,t){return await this.connect(),await Promise.all(t.map(async t=>{let n=`${e}:${t}`;return this.metadataCache.get(n,async()=>{let n=await this.client.meta.getItem(e,t);return n&&n.item?n.item:n})}))}getCached(e){return this.metadataCache.getCachedSync(e)}getCacheStats(){return this.metadataCache.getStats()}invalidateCache(e){this.metadataCache.invalidate(e)}clearCache(){this.metadataCache.clear()}async uploadFile(e,t,n){await this.connect();let r=new FormData;r.append(`file`,t),n?.recordId&&r.append(`recordId`,n.recordId),n?.fieldName&&r.append(`fieldName`,n.fieldName),n?.metadata&&r.append(`metadata`,JSON.stringify(n.metadata));let i=`${this.baseUrl}/api/data/${encodeURIComponent(e)}/upload`,a=await fetch(i,{method:`POST`,body:r,headers:{...this.getAuthHeaders()}});if(!a.ok)throw new S(O(await a.json().catch(()=>({message:a.statusText}))).message??`Upload failed with status ${a.status}`,`UPLOAD_ERROR`,a.status);return a.json()}async uploadFiles(e,t,n){await this.connect();let r=new FormData;t.forEach((e,t)=>{r.append(`files`,e,e.name||`file-${t}`)}),n?.recordId&&r.append(`recordId`,n.recordId),n?.fieldName&&r.append(`fieldName`,n.fieldName),n?.metadata&&r.append(`metadata`,JSON.stringify(n.metadata));let i=`${this.baseUrl}/api/data/${encodeURIComponent(e)}/upload`,a=await fetch(i,{method:`POST`,body:r,headers:{...this.getAuthHeaders()}});if(!a.ok)throw new S(O(await a.json().catch(()=>({message:a.statusText}))).message??`Upload failed with status ${a.status}`,`UPLOAD_ERROR`,a.status);return a.json()}async cancelPendingApproval(e,t){await this.connect();let n=`${this.baseUrl}/api/v1/approvals/requests?recordId=${encodeURIComponent(t)}&object=${encodeURIComponent(e)}`,r=await this.fetchImpl(n,{method:`GET`,headers:{"Content-Type":`application/json`,...this.getAuthHeaders()}});if(!r.ok)throw new S(`Failed to look up approval requests (status ${r.status})`,`APPROVAL_LOOKUP_FAILED`,r.status);let i=await r.json().catch(()=>({})),a=(Array.isArray(i)?i:i?.data??[]).find(e=>e?.status===`pending`||e?.status===`in_approval`);if(!a?.id)throw new S(`No pending approval request found for this record`,`NO_PENDING_REQUEST`,404);let o=`${this.baseUrl}/api/v1/approvals/requests/${encodeURIComponent(a.id)}/recall`,s=await this.fetchImpl(o,{method:`POST`,headers:{"Content-Type":`application/json`,...this.getAuthHeaders()},body:JSON.stringify({})});if(!s.ok){let e=await s.json().catch(()=>({}));throw new S(e?.error||e?.message||`Recall failed with status ${s.status}`,e?.code||`APPROVAL_RECALL_FAILED`,s.status)}let c=await s.json().catch(()=>({}));return{requestId:a.id,status:c?.data?.request?.status??`recalled`}}getAuthHeaders(){let e={};return this.token&&(e.Authorization=`Bearer ${this.token}`),e}};export{be as a,h as c,_t as i,g as l,V as n,ye as o,We as r,x as s,xt as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{Xr as e}from"./ui-components-D6cEVg0T.js";import{i as t,n,r,t as i}from"./match-dfBS0YSQ.js";var a={narrow:[`v.Chr.`,`n.Chr.`],abbreviated:[`v.Chr.`,`n.Chr.`],wide:[`vor Christus`,`nach Christus`]},o={narrow:[`1`,`2`,`3`,`4`],abbreviated:[`Q1`,`Q2`,`Q3`,`Q4`],wide:[`1. Quartal`,`2. Quartal`,`3. Quartal`,`4. Quartal`]},s={narrow:[`J`,`F`,`M`,`A`,`M`,`J`,`J`,`A`,`S`,`O`,`N`,`D`],abbreviated:[`Jän`,`Feb`,`Mär`,`Apr`,`Mai`,`Jun`,`Jul`,`Aug`,`Sep`,`Okt`,`Nov`,`Dez`],wide:[`Jänner`,`Februar`,`März`,`April`,`Mai`,`Juni`,`Juli`,`August`,`September`,`Oktober`,`November`,`Dezember`]},c={narrow:s.narrow,abbreviated:[`Jän.`,`Feb.`,`März`,`Apr.`,`Mai`,`Juni`,`Juli`,`Aug.`,`Sep.`,`Okt.`,`Nov.`,`Dez.`],wide:s.wide},l={ordinalNumber:e=>Number(e)+`.`,era:e({values:a,defaultWidth:`wide`}),quarter:e({values:o,defaultWidth:`wide`,argumentCallback:e=>e-1}),month:e({values:s,formattingValues:c,defaultWidth:`wide`}),day:e({values:{narrow:[`S`,`M`,`D`,`M`,`D`,`F`,`S`],short:[`So`,`Mo`,`Di`,`Mi`,`Do`,`Fr`,`Sa`],abbreviated:[`So.`,`Mo.`,`Di.`,`Mi.`,`Do.`,`Fr.`,`Sa.`],wide:[`Sonntag`,`Montag`,`Dienstag`,`Mittwoch`,`Donnerstag`,`Freitag`,`Samstag`]},defaultWidth:`wide`}),dayPeriod:e({values:{narrow:{am:`vm.`,pm:`nm.`,midnight:`Mitternacht`,noon:`Mittag`,morning:`Morgen`,afternoon:`Nachm.`,evening:`Abend`,night:`Nacht`},abbreviated:{am:`vorm.`,pm:`nachm.`,midnight:`Mitternacht`,noon:`Mittag`,morning:`Morgen`,afternoon:`Nachmittag`,evening:`Abend`,night:`Nacht`},wide:{am:`vormittags`,pm:`nachmittags`,midnight:`Mitternacht`,noon:`Mittag`,morning:`Morgen`,afternoon:`Nachmittag`,evening:`Abend`,night:`Nacht`}},defaultWidth:`wide`,formattingValues:{narrow:{am:`vm.`,pm:`nm.`,midnight:`Mitternacht`,noon:`Mittag`,morning:`morgens`,afternoon:`nachm.`,evening:`abends`,night:`nachts`},abbreviated:{am:`vorm.`,pm:`nachm.`,midnight:`Mitternacht`,noon:`Mittag`,morning:`morgens`,afternoon:`nachmittags`,evening:`abends`,night:`nachts`},wide:{am:`vormittags`,pm:`nachmittags`,midnight:`Mitternacht`,noon:`Mittag`,morning:`morgens`,afternoon:`nachmittags`,evening:`abends`,night:`nachts`}},defaultFormattingWidth:`wide`})},u={code:`de-AT`,formatDistance:t,formatLong:r,formatRelative:n,localize:l,match:i,options:{weekStartsOn:1,firstWeekContainsDate:4}};export{u as deAT,u as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{Xr as e}from"./ui-components-D6cEVg0T.js";import{i as t,n,r,t as i}from"./match-dfBS0YSQ.js";var a={narrow:[`v.Chr.`,`n.Chr.`],abbreviated:[`v.Chr.`,`n.Chr.`],wide:[`vor Christus`,`nach Christus`]},o={narrow:[`1`,`2`,`3`,`4`],abbreviated:[`Q1`,`Q2`,`Q3`,`Q4`],wide:[`1. Quartal`,`2. Quartal`,`3. Quartal`,`4. Quartal`]},s={narrow:[`J`,`F`,`M`,`A`,`M`,`J`,`J`,`A`,`S`,`O`,`N`,`D`],abbreviated:[`Jan`,`Feb`,`Mär`,`Apr`,`Mai`,`Jun`,`Jul`,`Aug`,`Sep`,`Okt`,`Nov`,`Dez`],wide:[`Januar`,`Februar`,`März`,`April`,`Mai`,`Juni`,`Juli`,`August`,`September`,`Oktober`,`November`,`Dezember`]},c={narrow:s.narrow,abbreviated:[`Jan.`,`Feb.`,`März`,`Apr.`,`Mai`,`Juni`,`Juli`,`Aug.`,`Sep.`,`Okt.`,`Nov.`,`Dez.`],wide:s.wide},l={ordinalNumber:e=>Number(e)+`.`,era:e({values:a,defaultWidth:`wide`}),quarter:e({values:o,defaultWidth:`wide`,argumentCallback:e=>e-1}),month:e({values:s,formattingValues:c,defaultWidth:`wide`}),day:e({values:{narrow:[`S`,`M`,`D`,`M`,`D`,`F`,`S`],short:[`So`,`Mo`,`Di`,`Mi`,`Do`,`Fr`,`Sa`],abbreviated:[`So.`,`Mo.`,`Di.`,`Mi.`,`Do.`,`Fr.`,`Sa.`],wide:[`Sonntag`,`Montag`,`Dienstag`,`Mittwoch`,`Donnerstag`,`Freitag`,`Samstag`]},defaultWidth:`wide`}),dayPeriod:e({values:{narrow:{am:`vm.`,pm:`nm.`,midnight:`Mitternacht`,noon:`Mittag`,morning:`Morgen`,afternoon:`Nachm.`,evening:`Abend`,night:`Nacht`},abbreviated:{am:`vorm.`,pm:`nachm.`,midnight:`Mitternacht`,noon:`Mittag`,morning:`Morgen`,afternoon:`Nachmittag`,evening:`Abend`,night:`Nacht`},wide:{am:`vormittags`,pm:`nachmittags`,midnight:`Mitternacht`,noon:`Mittag`,morning:`Morgen`,afternoon:`Nachmittag`,evening:`Abend`,night:`Nacht`}},defaultWidth:`wide`,formattingValues:{narrow:{am:`vm.`,pm:`nm.`,midnight:`Mitternacht`,noon:`Mittag`,morning:`morgens`,afternoon:`nachm.`,evening:`abends`,night:`nachts`},abbreviated:{am:`vorm.`,pm:`nachm.`,midnight:`Mitternacht`,noon:`Mittag`,morning:`morgens`,afternoon:`nachmittags`,evening:`abends`,night:`nachts`},wide:{am:`vormittags`,pm:`nachmittags`,midnight:`Mitternacht`,noon:`Mittag`,morning:`morgens`,afternoon:`nachmittags`,evening:`abends`,night:`nachts`}},defaultFormattingWidth:`wide`})},u={code:`de`,formatDistance:t,formatLong:r,formatRelative:n,localize:l,match:i,options:{weekStartsOn:1,firstWeekContainsDate:4}};export{u as de,u as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{d as t,p as n,r,t as i,u as a,v as o}from"./vendor-react-BggL7APJ.js";import{Ma as s,Z as c,it as l,ta as u,tt as d}from"./vendor-objectstack-DFqu45yM.js";import{An as f,Ar as p,Et as m,Fn as h,Fr as g,Jn as _,Mn as v,Mr as y,Nn as b,Nr as x,On as S,Pn as C,Pr as w,Qn as T,Tt as E,an as D,in as O,jn as k,jr as A,kt as j,nn as M,on as ee,ri as N,rn as P,sn as te,tn as ne,yi as F}from"./ui-components-D6cEVg0T.js";import{Kr as I}from"./framework-DFR4HNtj.js";import{t as L}from"./i18n-runtime-97_bDVjP.js";import{t as re}from"./vendor-icon-arrow-left-DmGEbpkA.js";import{t as R}from"./vendor-icon-chevron-right-DbnKwHYQ.js";import{t as z}from"./vendor-icon-copy-B5M-KdZo.js";import{t as ie}from"./vendor-icon-download-C3csYSaD.js";import{t as ae}from"./vendor-icon-external-link-SBKz5x6R.js";import{t as oe}from"./vendor-icon-eye-C3HaEGOo.js";import{t as B}from"./vendor-icon-file-up-CeHsRg2x.js";import{t as se}from"./vendor-icon-inbox-ByVQ4l4S.js";import{t as ce}from"./vendor-icon-loader-circle-D3PsuVaD.js";import{t as le}from"./vendor-icon-package-B6zAlWd3.js";import{t as ue}from"./vendor-icon-pencil-CMubUBjW.js";import{t as de}from"./vendor-icon-plus-BlfcDDsa.js";import{t as fe}from"./vendor-icon-power-off-4BJhC7rc.js";import{t as pe}from"./vendor-icon-power-CySrWbJV.js";import{t as me}from"./vendor-icon-refresh-cw-BGjSPEfJ.js";import{t as he}from"./vendor-icon-rotate-ccw-lr5YKsxC.js";import{t as ge}from"./vendor-icon-search-B2Uqtp_W.js";import{t as _e}from"./vendor-icon-trash-BLsWkwB9.js";import{t as ve}from"./vendor-icon-triangle-alert-D5n0T3q_.js";import{t as ye}from"./vendor-icon-undo-2-C9MbW2Vb.js";import{t as be}from"./vendor-icon-upload-BZ3rElxe.js";import{o as xe,s as Se}from"./createDerive-CjN1i5vn.js";import{r as Ce}from"./SchemaForm-C4uMMZ13.js";import{a as V,g as H,i as U,l as we,o as Te,r as W,u as Ee}from"./i18n-BnUsCaSC.js";import{r as De}from"./dist-Dc_9i5rZ.js";var G=e(o(),1),K=i();function q(e){let t=e?.error;if(!t||typeof t!=`object`)return null;let{code:n,message:r,userMessage:i}=t,a=(typeof i==`string`?i:``)||(typeof r==`string`?r:``);if(!a)return null;let o=typeof n==`string`?n:``;return o?`${a} (${o})`:a}function Oe(e){let t=(Array.isArray(e)?e:[e]).map(e=>e.split(`.`));return(e,n)=>{for(let r of t){let t=e;for(let e of r)if(t&&typeof t==`object`&&e in t)t=t[e];else{t=void 0;break}if(t===n)return!0}return!1}}var J=new Map;function ke(e){let t=J.get(e.type);if(!t){J.set(e.type,e);return}let n={...t};for(let[t,r]of Object.entries(e))r!==void 0&&(n[t]=r);J.set(e.type,n)}function Ae(e){return J.get(e)}function je(e){let t=[];for(let n of J.values())if(n.anchors?.length)for(let r of n.anchors)r.anchorType===e&&t.push({type:n.type,config:n,anchor:r});return t.sort((e,t)=>{let n=e.anchor.order??100,r=t.anchor.order??100;if(n!==r)return n-r;let i=e.anchor.groupLabel??e.config.label??e.type,a=t.anchor.groupLabel??t.config.label??t.type;return i.localeCompare(a)}),t}function Me(e,t){let n=J.get(e)??{type:e};return{...n,type:e,label:n.label??t?.label??e,description:n.description??t?.description,domain:n.domain??t?.domain??`other`,allowOrgOverride:t?.allowOrgOverride,defaultSchema:n.defaultSchema}}function Ne({entry:e,readOnly:t,locale:n,compact:r}){let i=r?`text-[10px] h-5 px-1.5`:`text-[10px]`;return t?(0,K.jsx)(N,{variant:`outline`,className:`${i} text-muted-foreground`,title:W(`engine.studio.pkg.readonlyHint`,n),children:W(`engine.badge.readOnly`,n)}):e?.allowOrgOverride?(0,K.jsx)(N,{className:`${i} `+(e.overrideSource===`env`?`bg-amber-100 text-amber-800 hover:bg-amber-100`:`bg-emerald-100 text-emerald-800 hover:bg-emerald-100`),title:e.overrideSource===`env`?`Writable via OBJECTSTACK_METADATA_WRITABLE env var`:`Writable per ADR-0005 overlay opt-in`,children:W(`engine.badge.writable`,n)}):e?.allowRuntimeCreate?(0,K.jsx)(N,{className:`${i} bg-sky-100 text-sky-800 hover:bg-sky-100`,title:`Code-shipped items are locked; new items can be created at runtime`,children:W(`engine.badge.createOnly`,n)}):(0,K.jsx)(N,{variant:`outline`,className:`${i} text-muted-foreground`,children:W(`engine.badge.readOnly`,n)})}function Pe({entry:e,itemName:t,subtitle:n,stats:i,actions:o,embedded:s=!1,readOnly:c=!1,children:l}){let u=e?.type??``,d=H(),f=Ee(u,d,e?.label),{pathname:p}=a(),m=G.useMemo(()=>{let e=p.indexOf(`/metadata`);return e>=0?p.slice(0,e+9):`/metadata`},[p]);return(0,K.jsxs)(`div`,{className:`flex flex-col h-full overflow-hidden`,children:[t?(0,K.jsxs)(`div`,{className:`px-6 py-2.5 border-b bg-background flex items-center gap-3 min-h-[44px]`,children:[(0,K.jsxs)(`nav`,{className:`flex items-center gap-1.5 text-xs text-muted-foreground min-w-0`,children:[s?(0,K.jsx)(`span`,{className:`shrink-0`,children:f}):(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(r,{to:m,className:`hover:text-foreground shrink-0`,children:W(`engine.breadcrumb.allTypes`,d)}),(0,K.jsx)(R,{className:`h-3 w-3 shrink-0`}),(0,K.jsx)(r,{to:`${m}/${encodeURIComponent(u)}`,className:`hover:text-foreground shrink-0`,children:f})]}),(0,K.jsx)(R,{className:`h-3 w-3 shrink-0`}),(0,K.jsx)(`span`,{className:`text-foreground font-medium font-mono truncate`,title:t,children:t})]}),(0,K.jsxs)(`div`,{className:`flex items-center gap-1.5 shrink-0`,children:[e?.domain&&(0,K.jsx)(N,{variant:`outline`,className:`text-[10px] uppercase tracking-wider h-5 px-1.5`,children:we(e.domain,d)}),(0,K.jsx)(Ne,{entry:e,readOnly:c,locale:d,compact:!0})]}),n&&(0,K.jsx)(`div`,{className:`text-xs text-muted-foreground truncate`,children:n}),(0,K.jsx)(`div`,{className:`flex-1`}),(0,K.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0`,children:[i?.map((e,t)=>(0,K.jsxs)(`div`,{className:`flex items-baseline gap-1 px-2 py-0.5 rounded border bg-muted/30`,children:[(0,K.jsx)(`span`,{className:`text-[10px] uppercase tracking-wider text-muted-foreground`,children:e.label}),(0,K.jsx)(`span`,{className:`text-xs font-semibold tabular-nums`,children:e.value})]},t)),o]})]}):(0,K.jsxs)(`div`,{className:`px-6 pt-5 pb-4 border-b bg-background`,children:[!s&&(0,K.jsxs)(`nav`,{className:`flex items-center gap-1.5 text-xs text-muted-foreground mb-2`,children:[(0,K.jsx)(r,{to:m,className:`hover:text-foreground`,children:W(`engine.breadcrumb.allTypes`,d)}),(0,K.jsx)(R,{className:`h-3 w-3`}),(0,K.jsx)(`span`,{className:`text-foreground font-medium`,children:f})]}),(0,K.jsxs)(`div`,{className:`flex items-start justify-between gap-3 flex-wrap`,children:[(0,K.jsxs)(`div`,{className:`min-w-0`,children:[(0,K.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[(0,K.jsx)(`h1`,{className:`text-xl font-semibold truncate`,children:f}),(0,K.jsx)(`code`,{className:`text-xs font-mono text-muted-foreground`,children:u}),e?.domain&&(0,K.jsx)(N,{variant:`outline`,className:`text-[10px] uppercase tracking-wider`,children:we(e.domain,d)}),(0,K.jsx)(Ne,{entry:e,readOnly:c,locale:d})]}),n&&(0,K.jsx)(`div`,{className:`text-sm text-muted-foreground mt-1`,children:n}),!n&&e?.description&&(0,K.jsx)(`div`,{className:`text-sm text-muted-foreground mt-1 max-w-3xl`,children:e.description})]}),(0,K.jsxs)(`div`,{className:`flex items-center gap-2`,children:[i?.map((e,t)=>(0,K.jsxs)(`div`,{className:`flex flex-col items-end px-3 py-1 rounded border bg-muted/30 min-w-[64px]`,children:[(0,K.jsx)(`span`,{className:`text-[10px] uppercase tracking-wider text-muted-foreground`,children:e.label}),(0,K.jsx)(`span`,{className:`text-sm font-semibold tabular-nums`,children:e.value})]},t)),o]})]})]}),(0,K.jsx)(`div`,{className:`flex-1 overflow-auto`,children:l})]})}function Fe({type:e,name:r}){let i=n(),a=e??i.type??``,o=r??i.name??``,s=t(),c=xe(),l=H(),{entries:u}=Se(c),d=u.find(e=>e.type===a),[f,p]=G.useState(0),[m,h]=G.useState(0);return(0,K.jsx)(Pe,{entry:d??{type:a,label:a},itemName:o,subtitle:W(`engine.edit.historySubtitle`,l),stats:[{label:W(`engine.edit.historyEvents`,l),value:m}],actions:(0,K.jsxs)(K.Fragment,{children:[(0,K.jsxs)(F,{variant:`ghost`,size:`sm`,onClick:()=>s(`../${encodeURIComponent(o)}`),children:[(0,K.jsx)(re,{className:`h-4 w-4 mr-1`}),`Back to item`]}),(0,K.jsx)(F,{variant:`ghost`,size:`sm`,onClick:()=>p(e=>e+1),children:(0,K.jsx)(me,{className:`h-4 w-4`})})]}),children:(0,K.jsx)(`div`,{className:`p-6 max-w-4xl`,children:(0,K.jsx)(Ie,{type:a,name:o,refreshKey:f,onCount:h,client:c,locale:l,onRollback:()=>p(e=>e+1)})})})}function Ie({type:e,name:t,refreshKey:n=0,onCount:r,client:i,onRollback:a,rollbackConfirm:o,rollbackLabel:s,locale:c}){let l=L(),[u,d]=G.useState([]),[f,p]=G.useState(!0),[h,g]=G.useState(null),[_,v]=G.useState(null),[y,b]=G.useState(null),[x,S]=G.useState(0);G.useEffect(()=>{let n=!1;return p(!0),g(null),(async()=>{try{let a=await i.history(e,t,{limit:100});if(n)return;let o=[...Array.isArray(a)?a:Array.isArray(a?.events)?a.events:[]].sort((e,t)=>(t.seq??0)-(e.seq??0));d(o),r?.(o.length),p(!1)}catch(e){n||(g(e?.message??String(e)),p(!1))}})(),()=>{n=!0}},[i,e,t,n,x]);async function C(n){let r=o?o(n):`Restore version ${n}? This writes the historical body back as the current overlay.`;if(confirm(r)){b(n),g(null);try{await i.rollback(e,t,n),a?.(n),S(e=>e+1)}catch(e){g(e?.message??String(e))}finally{b(null)}}}return(0,K.jsxs)(K.Fragment,{children:[f&&(0,K.jsxs)(`div`,{className:`text-sm text-muted-foreground flex items-center gap-2`,children:[(0,K.jsx)(ce,{className:`h-4 w-4 animate-spin`}),` Loading history…`]}),h&&(0,K.jsx)(`div`,{className:`text-sm text-destructive border border-destructive/30 rounded p-3 bg-destructive/5`,children:h}),!f&&!h&&u.length===0&&(0,K.jsxs)(E,{children:[(0,K.jsx)(j,{children:W(`engine.edit.historyEmptyTitle`,c)}),(0,K.jsx)(m,{children:W(`engine.edit.historyEmptyDesc`,c)})]}),!f&&u.length>0&&(0,K.jsx)(`ol`,{className:`space-y-2 relative pl-6 border-l`,children:u.map((e,t)=>{let n=_===t,r=e.op??e.kind,i=e.ts??e.at,o=!!a&&typeof e.version==`number`&&r!==`delete`&&r!==`tombstone`;return(0,K.jsxs)(`li`,{className:`relative`,children:[(0,K.jsx)(`span`,{className:`absolute -left-[27px] top-2 w-3 h-3 rounded-full bg-primary ring-4 ring-background`}),(0,K.jsxs)(`div`,{role:`button`,tabIndex:0,onClick:()=>v(n?null:t),onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&v(n?null:t)},className:`border rounded-lg p-3 hover:border-primary/50 cursor-pointer transition-colors`,children:[(0,K.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[(0,K.jsxs)(N,{variant:`outline`,className:`text-[10px] font-mono`,children:[`seq `,e.seq??`–`]}),typeof e.version==`number`&&(0,K.jsxs)(N,{variant:`outline`,className:`text-[10px] font-mono`,children:[`v`,e.version]}),r&&(0,K.jsx)(N,{className:`text-[10px] `+(r===`delete`||r===`tombstone`?`bg-red-100 text-red-800 hover:bg-red-100`:r===`create`?`bg-blue-100 text-blue-800 hover:bg-blue-100`:r===`publish`?`bg-emerald-100 text-emerald-800 hover:bg-emerald-100`:r===`revert`?`bg-amber-100 text-amber-900 hover:bg-amber-100`:`bg-emerald-100 text-emerald-800 hover:bg-emerald-100`),children:Te(`op`,String(r),c)}),e.actor&&(0,K.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[`by`,` `,(0,K.jsx)(`span`,{className:`font-mono`,children:String(e.actor)})]}),i&&(0,K.jsx)(`span`,{className:`text-xs text-muted-foreground ml-auto`,children:Le(i,l)}),o&&(0,K.jsx)(F,{size:`sm`,variant:`ghost`,className:`h-6 w-6 p-0`,title:s??`Rollback to this version`,disabled:y!==null,onClick:t=>{t.stopPropagation(),C(e.version)},children:y===e.version?(0,K.jsx)(ce,{className:`h-3.5 w-3.5 animate-spin`}):(0,K.jsx)(he,{className:`h-3.5 w-3.5`})})]}),n&&(0,K.jsx)(`pre`,{className:`mt-2 text-xs font-mono bg-muted/30 rounded p-2 overflow-auto max-h-[280px]`,children:Re(e)})]})]},`${e.seq??t}-${t}`)})})]})}function Le(e,t){try{let n=new Date(e);return Number.isNaN(n.getTime())?String(e):n.toLocaleString(t)}catch{return String(e)}}function Re(e){try{return JSON.stringify(e,null,2)}catch{return String(e)}}function ze(e){let t=e?.data??e,n=Array.isArray(t)?t:t?.packages??[],r=[];for(let e of n){if(!e||typeof e!=`object`)continue;let t=e.manifest??{},n=String(t.id??e.id??``);if(!n)continue;let i=typeof t.scope==`string`?t.scope:``;if(i===`system`||i===`cloud`)continue;let a=typeof t.namespace==`string`&&t.namespace?t.namespace:d(n),o=typeof e.writable==`boolean`?e.writable:i!==`project`,s=(typeof t.name==`string`&&t.name.trim()?t.name:void 0)??(typeof e.name==`string`&&e.name.trim()?e.name:void 0);r.push({id:n,name:s??n,writable:o,namespace:a})}return r}async function Be(){let e=await fetch(`/api/v1/packages`,{credentials:`include`,headers:{Accept:`application/json`},cache:`no-store`});if(!e.ok){let t=await e.json().catch(()=>null);throw Error(q(t)??`HTTP ${e.status}`)}return ze(await e.json())}var Ve=5;function He(e){let t=Array.isArray(e.failed)?e.failed:[],n=typeof e.failedCount==`number`?e.failedCount:t.length,r=typeof e.copiedCount==`number`?e.copiedCount:0;if(n>0){let e=t.slice(0,Ve).map(e=>`${e.type||`item`}/${e.name||`?`}: ${e.error||`copy failed`}`),i=t.length-e.length;return`Partial duplicate: ${r} item(s) copied, ${n} failed.${e.length?` ${e.join(`; `)}${i>0?`; +${i} more`:``}`:``}`}return`Nothing was copied: the duplicate is empty (0 items copied, 0 reported as failed). The source package may have no active items, or its rows may be outside this session's scope.`}async function Ue(e,t,n){let r=await fetch(`/api/v1/packages/${encodeURIComponent(e)}/duplicate`,{method:`POST`,credentials:`include`,headers:{"Content-Type":`application/json`,Accept:`application/json`},body:JSON.stringify({targetPackageId:t,...n?{targetName:n}:{}})}),i=await r.json().catch(()=>null);if(!r.ok)throw Error(q(i)??`HTTP ${r.status}`);let a=i?.data??i??void 0;if(a?.success===!1)throw Error(He(a))}var We=/^[a-z][a-z0-9_.-]*(\.[a-z0-9_-]+)+$/,Ge=/^[a-z][a-z0-9_]{1,19}$/;function Ke(e,t){return t&&l(e,t)?`${t}_${e}`:e}function qe(e){let t=e.toLowerCase().replace(/[^a-z0-9_.-]/g,``);return{value:t,stripped:t.length!==e.length}}u();var Je={io:`input`,unrepresentable:`any`},Y,Ye=!1;function Xe(){if(Y||Ye)return Y;try{Y=s(c,Je)}catch(e){Ye=!0,typeof console<`u`&&console.warn(`[package-schema] failed to derive manifest JSONSchema from spec`,e)}return Y}function Ze(e){return{type:`modal`,sections:[{label:W(`engine.packages.form.basics`,e),columns:1,fields:[{field:`name`,label:W(`engine.packages.create.name`,e),helpText:V(`engine.packages.form.help.name`,e),placeholder:`Acme CRM`},{field:`id`,label:W(`engine.packages.create.id`,e),helpText:V(`engine.packages.form.help.id`,e),placeholder:`com.acme.crm`,immutable:!0},{field:`namespace`,label:W(`engine.packages.create.namespace`,e),helpText:V(`engine.packages.form.help.namespace`,e),placeholder:`crm`,immutable:!0},{field:`version`,label:W(`engine.packages.create.version`,e),helpText:V(`engine.packages.form.help.version`,e),placeholder:`0.1.0`},{field:`type`,label:W(`engine.packages.detail.type`,e),helpText:V(`engine.packages.form.help.type`,e),immutable:!0},{field:`description`,label:W(`engine.packages.detail.description`,e),helpText:V(`engine.packages.form.help.description`,e)}]},{label:W(`engine.packages.form.advanced`,e),collapsible:!0,collapsed:!0,columns:1,fields:[{field:`defaultDatasource`,label:W(`engine.packages.form.defaultDatasource`,e),helpText:V(`engine.packages.form.help.defaultDatasource`,e),immutable:!0},{field:`scope`,label:W(`engine.packages.form.scope`,e),helpText:V(`engine.packages.form.help.scope`,e),immutable:!0},{field:`dependencies`,label:W(`engine.packages.form.dependencies`,e),helpText:V(`engine.packages.form.help.dependencies`,e),immutable:!0}]}]}}var Qe=`/api/v1/packages`;function $e(e){return c.shape.version.safeParse(e).success}function et(e){let t=e?.error;if(!t||typeof t!=`object`)return``;let{userMessage:n}=t;return typeof n==`string`?n:``}async function tt(e,t){let n=await fetch(e,{credentials:`include`,headers:{Accept:`application/json`,...t?.headers||{}},...t}),r=await n.text(),i=r?JSON.parse(r):null;if(!n.ok||i?.success===!1){let e=q(i)||i?.error||i?.message||`Request failed (${n.status})`,t=Error(typeof e==`string`?e:`Request failed (${n.status})`);throw t.status=n.status,t.userMessage=et(i),t}return i?.data??i}function nt(){try{window.dispatchEvent(new CustomEvent(`objectui:packages-changed`))}catch{}}function X({mode:e,open:t,onOpenChange:n,manifest:r,onSaved:i}){let a=H(),o=G.useMemo(()=>Xe(),[]),s=G.useMemo(()=>Ze(a),[a]),l=e===`create`,u=e===`view`,[f,m]=G.useState({}),[h,_]=G.useState(!1),[v,b]=G.useState(null),S=G.useRef(!1);G.useEffect(()=>{t&&(S.current=!1,m(l?{version:`0.1.0`,type:`app`}:{...r??{}}),b(null),_(!1))},[t,l,r]);let C=G.useCallback(e=>{if(!l){m(e);return}m(t=>{let n=e.namespace;return n!==t.namespace&&(S.current=!0,n=String(n??``).toLowerCase().replace(/[^a-z0-9_]/g,``)),!S.current&&e.id!==t.id&&(n=d(String(e.id??``))??``),{...e,namespace:n}})},[l]),T=G.useMemo(()=>{if(u)return[];let e=c.safeParse(f);return e.success?[]:e.error.issues.map(e=>({path:e.path.join(`.`),message:e.message}))},[f,u]),E=!!String(f.name??``).trim(),D=String(f.version??``).trim(),O=l?$e(D):!D||$e(D),k=!l||!!String(f.id??``).trim(),j=!l||Ge.test(String(f.namespace??``).trim()),M=!u&&E&&O&&k&&j&&!h;async function ee(){if(M){_(!0),b(null);try{let t;if(l){let n={...f,id:String(f.id??``).trim(),name:String(f.name??``).trim(),version:D,type:f.type??`app`},r=await tt(Qe,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({manifest:n})});t={id:String(r?.manifest?.id??n.id),mode:e,package:r}}else{let n=String(r?.id??f.id??``);t={id:n,mode:e,package:await tt(`${Qe}/${encodeURIComponent(n)}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({name:String(f.name??``).trim(),description:String(f.description??``).trim(),version:D})})}}nt(),i?.(t),n(!1)}catch(e){let t=e?.message??``,n=typeof e?.userMessage==`string`&&e.userMessage!==``;e?.status===409||/already exists/i.test(t)?b(n?t:W(`engine.packages.create.exists`,a)):e?.status===403||/manage_metadata/i.test(t)?b(n?t:W(`engine.packages.noCapability`,a)):b(t||W(l?`engine.packages.create.failed`:`engine.packages.edit.failed`,a))}finally{_(!1)}}}let N=W(e===`create`?`engine.packages.create.title`:e===`edit`?`engine.packages.edit.title`:`engine.packages.view.title`,a);return(0,K.jsx)(p,{open:t,onOpenChange:n,children:(0,K.jsxs)(A,{className:`max-h-[85vh] overflow-y-auto`,children:[(0,K.jsxs)(w,{children:[(0,K.jsx)(g,{children:N}),e===`create`?(0,K.jsx)(y,{children:U(`engine.packages.create.description`,a,{example:`com.acme.crm`})}):(0,K.jsx)(y,{className:`font-mono text-xs`,children:String(r?.id??f.id??``)})]}),(0,K.jsx)(`div`,{className:`py-1`,"data-testid":`package-form`,children:(0,K.jsx)(Ce,{schema:o,form:s,value:f,onChange:C,issues:T,readOnly:u,createMode:l})}),v&&(0,K.jsxs)(`div`,{"data-testid":`package-form-error`,className:`flex items-start gap-2 rounded-md border border-destructive/40 bg-destructive/10 p-2 text-sm text-destructive`,children:[(0,K.jsx)(ve,{className:`mt-0.5 h-4 w-4 shrink-0`}),(0,K.jsx)(`span`,{children:v})]}),(0,K.jsx)(x,{children:u?(0,K.jsx)(F,{variant:`outline`,onClick:()=>n(!1),children:W(`engine.close`,a)}):(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(F,{variant:`outline`,onClick:()=>n(!1),disabled:h,children:W(`engine.cancel`,a)}),(0,K.jsx)(F,{onClick:ee,disabled:!M,"data-testid":`package-form-submit`,children:W(h?l?`engine.packages.create.creating`:`engine.packages.edit.saving`:l?`engine.packages.create.submit`:`engine.packages.edit.save`,a)})]})})]})})}var Z=`/api/v1/packages`;async function Q(e,t){let n=await fetch(e,{credentials:`include`,headers:{Accept:`application/json`,...t?.headers||{}},...t}),r=await n.text(),i=r?JSON.parse(r):null;if(!n.ok||i?.success===!1){let e=q(i)||i?.error||i?.message||`Request failed (${n.status})`;throw Error(typeof e==`string`?e:`Request failed (${n.status})`)}return i?.data??i}function rt({scope:e}){let t=H();if(!e)return(0,K.jsx)(N,{className:`bg-emerald-400/15 text-emerald-600 hover:bg-emerald-400/15 dark:text-emerald-300`,children:W(`engine.packages.scope.writable`,t)});let n=e===`project`?`default`:e===`system`?`secondary`:`outline`,r=e===`project`?`engine.packages.scope.project`:e===`system`?`engine.packages.scope.system`:e===`cloud`?`engine.packages.scope.cloud`:``;return(0,K.jsx)(N,{variant:n,children:r?W(r,t):e})}function it({pkg:e}){let t=H(),n=e.enabled!==!1&&e.status!==`disabled`;return(0,K.jsx)(N,{variant:n?`default`:`outline`,children:W(n?`engine.packages.status.enabled`:`engine.packages.status.disabled`,t)})}function at({open:e,onOpenChange:t,onCreated:n}){return(0,K.jsx)(X,{mode:`create`,open:e,onOpenChange:t,onSaved:e=>n(e.id)})}function $({label:e,children:t}){return(0,K.jsxs)(`div`,{className:`flex items-baseline justify-between gap-4 py-1.5`,children:[(0,K.jsx)(`span`,{className:`text-sm text-muted-foreground`,children:e}),(0,K.jsx)(`span`,{className:`text-sm font-medium text-right break-all`,children:t})]})}function ot({pkg:e,open:t,onOpenChange:n,onSaved:r}){return(0,K.jsx)(X,{mode:`edit`,open:t,onOpenChange:n,manifest:e?.manifest??null,onSaved:t=>r(t.package??e)})}function st({pkg:e,appBase:t,open:n,onOpenChange:i,onChanged:a}){let o=H(),s=xe(),[c,l]=G.useState(null),[u,d]=G.useState(null),[p,m]=G.useState(null),[g,_]=G.useState(!1),[y,x]=G.useState(!1);if(G.useEffect(()=>{d(null),l(null)},[e?.manifest.id]),G.useEffect(()=>{let t=e?.manifest.id;if(!n||!t){m(null);return}let r=!1;return Q(`/api/v1/meta/_drafts?packageId=${encodeURIComponent(t)}`).then(e=>{r||m(e?.drafts??[])}).catch(()=>{r||m([])}),()=>{r=!0}},[n,e?.manifest.id]),!e)return null;let S=e.manifest.id,w=e.enabled!==!1&&e.status!==`disabled`,T=e.manifest.scope===`system`||e.manifest.scope===`cloud`;async function E(e,t,n){l(e),d(null);try{await t(),d({kind:`ok`,text:n}),a()}catch(e){d({kind:`err`,text:e?.message??W(`engine.packages.detail.actionFailed`,o)})}finally{l(null)}}return(0,K.jsx)(f,{open:n,onOpenChange:i,children:(0,K.jsxs)(k,{className:`w-full sm:max-w-md overflow-y-auto`,children:[(0,K.jsxs)(b,{children:[(0,K.jsxs)(C,{className:`flex items-center gap-2`,children:[(0,K.jsx)(le,{className:`h-4 w-4`}),e.manifest.name||S]}),(0,K.jsx)(v,{className:`font-mono text-xs`,children:S})]}),(0,K.jsxs)(`div`,{className:`mt-4`,children:[(0,K.jsx)($,{label:W(`engine.packages.col.version`,o),children:e.manifest.version||`—`}),(0,K.jsx)($,{label:W(`engine.packages.detail.type`,o),children:e.manifest.type||`—`}),(0,K.jsx)($,{label:W(`engine.packages.col.scope`,o),children:(0,K.jsx)(rt,{scope:e.manifest.scope})}),(0,K.jsx)($,{label:W(`engine.packages.col.status`,o),children:(0,K.jsx)(it,{pkg:e})}),e.manifest.description&&(0,K.jsx)($,{label:W(`engine.packages.detail.description`,o),children:e.manifest.description})]}),t&&(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(h,{className:`my-4`}),(0,K.jsxs)(r,{to:`${t}/metadata/object?package=${encodeURIComponent(S)}`,className:`inline-flex items-center gap-1.5 text-sm text-primary hover:underline`,onClick:()=>i(!1),children:[(0,K.jsx)(ae,{className:`h-3.5 w-3.5`}),W(`engine.packages.detail.browseMetadata`,o)]})]}),p&&p.length>0&&(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(h,{className:`my-4`}),(0,K.jsxs)(`div`,{className:`space-y-2`,children:[(0,K.jsxs)(`p`,{className:`flex items-center gap-2 text-xs font-medium uppercase tracking-wide text-muted-foreground`,children:[W(`engine.packages.detail.pendingChanges`,o),(0,K.jsx)(N,{variant:`secondary`,children:p.length})]}),(0,K.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:W(`engine.packages.detail.pendingHint`,o)}),!T&&(0,K.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,K.jsxs)(F,{size:`sm`,onClick:()=>E(`publish-drafts`,async()=>{let e=await s.publishPackageDrafts(S).catch(e=>{let t=q(e?.body);throw t?Error(t):e});if(e.success===!1)throw Error(q(e)||(typeof e.error==`string`?e.error:``)||(typeof e.message==`string`?e.message:``)||W(`engine.packages.detail.actionFailed`,o));try{let e=await Q(`/api/v1/meta/_drafts?packageId=${encodeURIComponent(S)}`);m(e?.drafts??[])}catch{m([])}if(e?.failedCount){let t=Array.isArray(e.failed)?e.failed:[],n=t.find(e=>!I(e,`BATCH_ABORTED`)&&e?.error);throw t.some(e=>I(e,`BATCH_ABORTED`))?Error(U(`engine.packages.detail.publishDraftsRolledBack`,o,{cause:n?`${n.type??`?`}/${n.name??`?`}: ${n.error}`:String(e.failedCount)})):Error(U(`engine.packages.detail.publishDraftsPartial`,o,{published:e.publishedCount??0,failed:e.failedCount}))}return e},W(`engine.packages.detail.publishDraftsOk`,o)),disabled:!!c,children:[(0,K.jsx)(be,{className:`mr-1.5 h-3.5 w-3.5`}),c===`publish-drafts`?W(`engine.packages.detail.publishing`,o):U(`engine.packages.detail.publishApp`,o,{count:p.length})]}),(0,K.jsxs)(F,{size:`sm`,variant:`outline`,onClick:()=>E(`discard-drafts`,()=>Q(`${Z}/${encodeURIComponent(S)}/discard-drafts`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({})}).then(async e=>{try{let e=await Q(`/api/v1/meta/_drafts?packageId=${encodeURIComponent(S)}`);m(e?.drafts??[])}catch{m([])}if(e?.failedCount)throw Error(U(`engine.packages.detail.discardDraftsPartial`,o,{discarded:e.discardedCount??0,failed:e.failedCount}));return e}),W(`engine.packages.detail.discardDraftsOk`,o)),disabled:!!c,children:[(0,K.jsx)(ye,{className:`mr-1.5 h-3.5 w-3.5`}),c===`discard-drafts`?W(`engine.packages.detail.discarding`,o):U(`engine.packages.detail.discardChanges`,o,{count:p.length})]})]}),(0,K.jsx)(`ul`,{className:`space-y-1`,children:p.map(e=>t?(0,K.jsx)(`li`,{children:(0,K.jsxs)(r,{to:`${t}/metadata/${encodeURIComponent(e.type)}/${encodeURIComponent(e.name)}?review=1`,className:`inline-flex items-center gap-1.5 text-sm text-primary hover:underline`,onClick:()=>i(!1),children:[(0,K.jsx)(B,{className:`h-3.5 w-3.5`}),(0,K.jsx)(`span`,{className:`font-mono text-xs`,children:e.type}),(0,K.jsx)(`span`,{className:`text-muted-foreground`,children:`·`}),e.name]})},`${e.type}/${e.name}`):(0,K.jsxs)(`li`,{className:`inline-flex items-center gap-1.5 text-sm`,children:[(0,K.jsx)(B,{className:`h-3.5 w-3.5 text-muted-foreground`}),(0,K.jsx)(`span`,{className:`font-mono text-xs`,children:e.type}),(0,K.jsx)(`span`,{className:`text-muted-foreground`,children:`·`}),e.name]},`${e.type}/${e.name}`))})]})]}),(0,K.jsx)(h,{className:`my-4`}),T?(0,K.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:W(`engine.packages.detail.kernelReadOnly`,o)}):(0,K.jsxs)(`div`,{className:`space-y-2`,children:[(0,K.jsx)(`p`,{className:`text-xs font-medium uppercase tracking-wide text-muted-foreground`,children:W(`engine.packages.detail.actions`,o)}),(0,K.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,K.jsxs)(F,{size:`sm`,variant:`outline`,onClick:()=>x(!0),disabled:!!c,children:[(0,K.jsx)(oe,{className:`mr-1.5 h-3.5 w-3.5`}),W(`engine.packages.detail.viewInfo`,o)]}),(0,K.jsxs)(F,{size:`sm`,variant:`outline`,onClick:()=>_(!0),disabled:!!c,children:[(0,K.jsx)(ue,{className:`mr-1.5 h-3.5 w-3.5`}),W(`engine.packages.detail.edit`,o)]}),(0,K.jsxs)(F,{size:`sm`,onClick:()=>E(`publish`,()=>Q(`${Z}/${encodeURIComponent(S)}/publish`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({})}).then(e=>{if(e&&e.success===!1){let t=e.validationErrors?.length??0;throw Error(t?U(`engine.packages.detail.publishBlocked`,o,{count:t}):e.validationErrors?.[0]?.message||W(`engine.packages.detail.nothingToPublish`,o))}return e}),W(`engine.packages.detail.published`,o)),disabled:!!c,children:[(0,K.jsx)(be,{className:`mr-1.5 h-3.5 w-3.5`}),W(c===`publish`?`engine.packages.detail.publishing`:`engine.packages.detail.publish`,o)]}),(0,K.jsxs)(F,{size:`sm`,variant:`outline`,onClick:()=>E(`revert`,()=>Q(`${Z}/${encodeURIComponent(S)}/revert`,{method:`POST`}),W(`engine.packages.detail.reverted`,o)),disabled:!!c,children:[(0,K.jsx)(ye,{className:`mr-1.5 h-3.5 w-3.5`}),W(`engine.packages.detail.revert`,o)]}),(0,K.jsxs)(F,{size:`sm`,variant:`outline`,onClick:()=>E(`toggle`,()=>Q(`${Z}/${encodeURIComponent(S)}/${w?`disable`:`enable`}`,{method:`PATCH`}),W(w?`engine.packages.detail.disabled`:`engine.packages.detail.enabled`,o)),disabled:!!c,children:[w?(0,K.jsx)(fe,{className:`mr-1.5 h-3.5 w-3.5`}):(0,K.jsx)(pe,{className:`mr-1.5 h-3.5 w-3.5`}),W(w?`engine.packages.detail.disable`:`engine.packages.detail.enable`,o)]}),(0,K.jsxs)(F,{size:`sm`,variant:`outline`,onClick:()=>E(`export`,async()=>{let e=await Q(`${Z}/${encodeURIComponent(S)}/export`),t=new Blob([JSON.stringify(e,null,2)],{type:`application/json`}),n=URL.createObjectURL(t),r=document.createElement(`a`);r.href=n,r.download=`${S}.package.json`,document.body.appendChild(r),r.click(),r.remove(),URL.revokeObjectURL(n)},W(`engine.packages.detail.exported`,o)),disabled:!!c,children:[(0,K.jsx)(ie,{className:`mr-1.5 h-3.5 w-3.5`}),W(c===`export`?`engine.packages.detail.exporting`:`engine.packages.detail.export`,o)]}),(0,K.jsxs)(F,{size:`sm`,variant:`outline`,onClick:async()=>{let t=window.prompt(W(`engine.packages.detail.duplicatePrompt`,o),`${S}-copy`);if(t&&t.trim()){l(`duplicate`),d(null);try{await Q(`${Z}/${encodeURIComponent(S)}/duplicate`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({targetPackageId:t.trim(),targetName:`${e?.manifest.name??S} (copy)`})}),d({kind:`ok`,text:W(`engine.packages.detail.duplicated`,o)}),a()}catch(e){d({kind:`err`,text:e?.message??`Duplicate failed`})}finally{l(null)}}},disabled:!!c,children:[(0,K.jsx)(z,{className:`mr-1.5 h-3.5 w-3.5`}),W(c===`duplicate`?`engine.packages.detail.duplicating`:`engine.packages.detail.duplicate`,o)]}),(0,K.jsxs)(F,{size:`sm`,variant:`outline`,onClick:async()=>{if(window.confirm(U(`engine.packages.detail.adoptConfirm`,o,{name:e?.manifest.name||S}))){l(`adopt`),d(null);try{await Q(`${Z}/${encodeURIComponent(S)}/adopt-orphans`,{method:`POST`}),d({kind:`ok`,text:W(`engine.packages.detail.adopted`,o)}),a()}catch(e){d({kind:`err`,text:e?.message??`Adopt failed`})}finally{l(null)}}},disabled:!!c,children:[(0,K.jsx)(se,{className:`mr-1.5 h-3.5 w-3.5`}),W(c===`adopt`?`engine.packages.detail.adopting`:`engine.packages.detail.adoptOrphans`,o)]}),(0,K.jsxs)(F,{size:`sm`,variant:`outline`,onClick:async()=>{if(!window.confirm(U(`engine.packages.detail.deleteConfirm`,o,{name:e?.manifest.name||S})))return;let t=window.confirm(W(`engine.packages.detail.deleteKeepData`,o))?``:`?keepData=true`;l(`delete`),d(null);try{await Q(`${Z}/${encodeURIComponent(S)}${t}`,{method:`DELETE`}),a(),i(!1)}catch(e){d({kind:`err`,text:e?.message??W(`engine.packages.detail.deleteFailed`,o)})}finally{l(null)}},disabled:!!c,className:`text-destructive hover:bg-destructive/10 hover:text-destructive`,children:[(0,K.jsx)(_e,{className:`mr-1.5 h-3.5 w-3.5`}),W(c===`delete`?`engine.packages.detail.deleting`:`engine.packages.detail.deleteApp`,o)]})]})]}),u&&(0,K.jsx)(`div`,{className:`mt-4 rounded-md border p-2 text-sm ${u.kind===`ok`?`border-emerald-500/40 bg-emerald-500/10 text-emerald-700 dark:text-emerald-400`:`border-destructive/40 bg-destructive/10 text-destructive`}`,children:u.text}),(0,K.jsx)(ot,{pkg:e,open:g,onOpenChange:_,onSaved:()=>{d({kind:`ok`,text:W(`engine.packages.edit.saved`,o)}),a()}}),(0,K.jsx)(X,{mode:`view`,open:y,onOpenChange:x,manifest:e?.manifest??null})]})})}function ct(){let e=H(),{pathname:t}=a(),n=G.useMemo(()=>{let e=t.indexOf(`/component`);return e>=0?t.slice(0,e):t},[t]),[r,i]=G.useState([]),[o,s]=G.useState(!0),[c,l]=G.useState(null),[u,d]=G.useState(``),[f,p]=G.useState(!1),[h,g]=G.useState(!1),[v,y]=G.useState(null),[b,x]=G.useState(!1),C=G.useRef(null),[w,k]=G.useState(!1),[A,N]=G.useState(null),I=G.useCallback(async()=>{s(!0),l(null);try{let e=await Q(Z),t=Array.isArray(e?.packages)?e.packages:[];t.sort((e,t)=>{let n=e.manifest.scope===`project`?0:1,r=t.manifest.scope===`project`?0:1;return n===r?(e.manifest.name||e.manifest.id).localeCompare(t.manifest.name||t.manifest.id):n-r}),i(t)}catch(t){l(t?.message??W(`engine.packages.loadFailed`,e))}finally{s(!1)}},[e]);G.useEffect(()=>{I()},[I]),G.useEffect(()=>{if(!v)return;let e=r.find(e=>e.manifest.id===v.manifest.id);e&&e!==v&&y(e)},[r,v]);let L=G.useMemo(()=>{let e=u.trim().toLowerCase();return r.filter(t=>(t.manifest.scope===`system`||t.manifest.scope===`cloud`)&&!f?!1:!e||t.manifest.id.toLowerCase().includes(e)||(t.manifest.name||``).toLowerCase().includes(e))},[r,u,f]),re=e=>{y(e),x(!0)},R=async t=>{let n=t.target.files?.[0];if(t.target.value=``,n){k(!0),N(null);try{let t=await n.text(),r;try{r=JSON.parse(t)}catch{throw Error(W(`engine.packages.import.invalidJson`,e))}if(!r||typeof r!=`object`||!r.id&&!r.name)throw Error(W(`engine.packages.import.invalidPackage`,e));let i=await Q(`/api/v1/marketplace/install-local`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({manifest:r})});N({kind:`ok`,text:U(`engine.packages.import.success`,e,{id:i?.manifestId??r.id})}),await I()}catch(t){N({kind:`err`,text:t?.message??W(`engine.packages.import.failed`,e)})}finally{k(!1)}}},z=r.filter(e=>e.manifest.scope===`system`||e.manifest.scope===`cloud`).length;return(0,K.jsxs)(`div`,{className:`mx-auto w-full max-w-5xl px-6 py-6`,children:[(0,K.jsxs)(`div`,{className:`flex items-start justify-between gap-4`,children:[(0,K.jsxs)(`div`,{className:`flex items-start gap-3`,children:[(0,K.jsx)(`div`,{className:`rounded-lg bg-primary/10 p-2 text-primary`,children:(0,K.jsx)(le,{className:`h-5 w-5`})}),(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`h1`,{className:`text-xl font-semibold tracking-tight`,children:W(`engine.packages.title`,e)}),(0,K.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:W(`engine.packages.description`,e)})]})]}),(0,K.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,K.jsxs)(F,{variant:`outline`,size:`sm`,onClick:()=>void I(),disabled:o,children:[(0,K.jsx)(me,{className:`mr-1.5 h-3.5 w-3.5 ${o?`animate-spin`:``}`}),W(`engine.packages.refresh`,e)]}),(0,K.jsx)(`input`,{ref:C,type:`file`,accept:`application/json,.json`,className:`hidden`,onChange:R}),(0,K.jsxs)(F,{variant:`outline`,size:`sm`,onClick:()=>C.current?.click(),disabled:w,children:[(0,K.jsx)(B,{className:`mr-1.5 h-3.5 w-3.5`}),W(w?`engine.packages.importing`:`engine.packages.import`,e)]}),(0,K.jsxs)(F,{size:`sm`,onClick:()=>g(!0),children:[(0,K.jsx)(de,{className:`mr-1.5 h-3.5 w-3.5`}),W(`engine.packages.new`,e)]})]})]}),A&&(0,K.jsx)(`div`,{className:`mt-4 rounded-md border p-2 text-sm ${A.kind===`ok`?`border-emerald-500/40 bg-emerald-500/10 text-emerald-700 dark:text-emerald-400`:`border-destructive/40 bg-destructive/10 text-destructive`}`,children:A.text}),(0,K.jsxs)(`div`,{className:`mt-5 flex flex-wrap items-center justify-between gap-3`,children:[(0,K.jsxs)(`div`,{className:`relative w-full max-w-xs`,children:[(0,K.jsx)(ge,{className:`absolute left-2.5 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground`}),(0,K.jsx)(_,{className:`pl-8`,placeholder:W(`engine.packages.search`,e),value:u,onChange:e=>d(e.target.value)})]}),z>0&&(0,K.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,K.jsx)(te,{id:`show-kernel`,checked:f,onCheckedChange:p}),(0,K.jsx)(T,{htmlFor:`show-kernel`,className:`text-sm text-muted-foreground`,children:U(`engine.packages.showPlatform`,e,{count:z})})]})]}),(0,K.jsx)(`div`,{className:`mt-4 rounded-lg border`,children:o?(0,K.jsx)(`div`,{className:`space-y-2 p-4`,children:[0,1,2].map(e=>(0,K.jsx)(S,{className:`h-10 w-full`},e))}):c?(0,K.jsxs)(`div`,{className:`flex items-start gap-2 p-4 text-sm text-destructive`,children:[(0,K.jsx)(ve,{className:`mt-0.5 h-4 w-4 shrink-0`}),(0,K.jsx)(`span`,{"data-testid":`packages-load-error`,children:c})]}):L.length===0?(0,K.jsx)(`div`,{className:`p-8`,children:(0,K.jsxs)(E,{children:[(0,K.jsx)(j,{children:W(`engine.packages.empty`,e)}),(0,K.jsx)(m,{children:r.length===0?W(`engine.packages.emptyCreate`,e):W(`engine.packages.emptyFiltered`,e)})]})}):(0,K.jsxs)(ne,{children:[(0,K.jsx)(D,{children:(0,K.jsxs)(ee,{children:[(0,K.jsx)(O,{children:W(`engine.packages.col.name`,e)}),(0,K.jsx)(O,{children:`ID`}),(0,K.jsx)(O,{className:`w-24`,children:W(`engine.packages.col.version`,e)}),(0,K.jsx)(O,{className:`w-24`,children:W(`engine.packages.col.scope`,e)}),(0,K.jsx)(O,{className:`w-24`,children:W(`engine.packages.col.status`,e)})]})}),(0,K.jsx)(M,{children:L.map(e=>(0,K.jsxs)(ee,{className:`cursor-pointer`,onClick:()=>re(e),children:[(0,K.jsx)(P,{className:`font-medium`,children:e.manifest.name||e.manifest.id}),(0,K.jsx)(P,{className:`font-mono text-xs text-muted-foreground`,children:e.manifest.id}),(0,K.jsx)(P,{children:e.manifest.version||`—`}),(0,K.jsx)(P,{children:(0,K.jsx)(rt,{scope:e.manifest.scope})}),(0,K.jsx)(P,{children:(0,K.jsx)(it,{pkg:e})})]},e.manifest.id))})]})}),(0,K.jsx)(at,{open:h,onOpenChange:g,onCreated:async()=>{await I()}}),(0,K.jsx)(st,{pkg:v,appBase:n,open:b,onOpenChange:x,onChanged:()=>void I()})]})}var lt=new Map;function ut(e,t){lt.set(e,t)}function dt(e){return lt.get(e)}function ft(){return Array.from(lt.keys()).sort()}function pt(e=4e3){let t=G.useRef(null),[n,r]=G.useState(!1);return G.useEffect(()=>{if(n)return;let e=!1,t=De?.init?.();return t&&typeof t.catch==`function`&&t.catch(()=>{e||r(!0)}),()=>{e=!0}},[n]),G.useEffect(()=>{if(n)return;let i=setTimeout(()=>{let e=t.current;(!e||!e.querySelector(`.view-line`))&&r(!0)},e);return()=>clearTimeout(i)},[n,e]),[n,t]}var mt=new Map;function ht(e,t){mt.set(e,t)}function gt(e){return mt.get(e)}function _t(){return Array.from(mt.keys()).sort()}var vt=new Map;function yt(e,t){vt.set(e,t)}function bt(e){return vt.get(e)}export{Ae as C,q as D,Me as E,Oe as S,ke as T,Ke as _,ht as a,Fe as b,ft as c,st as d,ct as f,Be as g,Ue as h,_t as i,ut as l,We as m,yt as n,pt as o,X as p,gt as r,dt as s,bt as t,at as u,qe as v,je as w,Pe as x,Ie as y};
|