@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,3 @@
|
|
|
1
|
+
import{Da as e,Ea as t,Na as n,Sa as r,Ta as i,_a as a,ca as o,da as s,ha as c,la as l,ma as u,na as d,ra as f,sa as p,ta as m,va as h,wa as g,ya as _}from"./vendor-objectstack-DFqu45yM.js";m();function v(e){return a({error:()=>e}).optional().describe(`[REMOVED] ${e}`)}var ee=f([`none`,`no-overlay`,`no-delete`,`full`]),te=f([`artifact`,`package`,`env-forced`]),ne=f([`package`,`org`,`env-forced`]),re={_lock:ee.optional().describe(`Item-level lock — controls overlay & delete (ADR-0010).`),_lockReason:g().max(500).optional().describe(`Human-readable reason shown when a write is refused by _lock.`),_lockSource:te.optional().describe(`Layer that set _lock (artifact | package | env-forced).`),_provenance:ne.optional().describe(`Origin of the item (package | org | env-forced).`),_packageId:g().optional().describe(`Owning package machine id.`),_packageVersion:g().optional().describe(`Owning package version.`),_lockDocsUrl:g().optional().describe(`Optional documentation link surfaced next to _lockReason.`)},ie=e=>e.toLowerCase().replace(/[_\-\s]/g,``),ae=[[`start`,`end`],[`min`,`max`],[`input`,`output`],[`read`,`write`]];function y(e){return e.replace(/([a-z0-9])([A-Z])/g,`$1 $2`).replace(/([A-Z]+)([A-Z][a-z])/g,`$1 $2`).toLowerCase().split(/[^a-z0-9]+/).filter(Boolean)}function oe(e,t){if(e.length===0)return t.length;if(t.length===0)return e.length;let n=Array(t.length+1),r=Array(t.length+1);for(let e=0;e<=t.length;e++)n[e]=e;for(let i=1;i<=e.length;i++){r[0]=i;for(let a=1;a<=t.length;a++){let o=e[i-1]===t[a-1]?0:1;r[a]=Math.min(n[a]+1,r[a-1]+1,n[a-1]+o)}[n,r]=[r,n]}return n[t.length]}function se(e,t,n){let r=y(t);if(r.length<2)return;let i=new Set(y(e)),a=y(e).join(``);for(let e=0;e<r.length;e++){let o=ae.find(t=>t[0]===r[e]||t[1]===r[e]);if(!o||i.has(o[0])||i.has(o[1]))continue;let s=r[e]===o[0]?o[1]:o[0],c=r.slice();c[e]=s;let l=c.join(``),u=n.find(e=>e!==t&&y(e).join(``)===l);if(u&&!(oe(a,r.filter((t,n)=>n!==e).join(``))>oe(a,r.join(``))))return{named:t,opposite:u,axis:o,poles:r[e]===o[0]?[t,u]:[u,t]}}}function ce(e,t){let[n,r]=t.poles;return`\`${e}\` does not say which end of the range it binds, and this surface declares both \`${n}\` and \`${r}\` \u2014 opposite ends of one axis. Write the one you mean: both parse, so guessing binds the wrong end silently.`}function le(e,t){let n=e.length,r=t.length;if(n===0)return r;if(r===0)return n;let i=Array(r+1),a=Array(r+1);for(let e=0;e<=r;e++)i[e]=e;for(let o=1;o<=n;o++){a[0]=o;for(let n=1;n<=r;n++){let r=e[o-1]===t[n-1]?0:1;a[n]=Math.min(i[n]+1,a[n-1]+1,i[n-1]+r)}[i,a]=[a,i]}return i[r]}var ue=e=>e.toLowerCase().replace(/[-\s]/g,`_`);function de(e,t,n=3,r=3){let i=ue(e);return t.map(t=>({value:t,distance:le(i,ue(t)),cased:le(e,t)})).filter(t=>t.distance<=n&&t.value!==e).sort((e,t)=>e.distance-t.distance||e.cased-t.cased).slice(0,r).map(e=>e.value)}function fe(e,t){return e.keys instanceof RegExp?t.search(e.keys)!==-1:e.keys.includes(t)}function pe(e){let{surface:t,knownKeys:n,guidance:r={},guidanceSets:i=[],history:a}=e,o={};for(let[t,n]of Object.entries(e.aliases??{}))o[ie(t)]=n;return e=>{if(e.code!==`unrecognized_keys`)return;let s=e.keys??[],c=[],l=[],u=new Set;for(let e of s){let t=r[e];if(t){l.push(t);continue}let a=i.find(t=>fe(t,e));if(a){u.has(a)||(u.add(a),l.push(a.prescription));continue}let s=Math.max(2,Math.floor(e.length/3)),d=o[ie(e)],f=d?void 0:de(e,n,s,1)[0],p=f?se(e,f,n):void 0;if(p){l.push(ce(e,p));continue}let m=d??f;m&&m!==e&&c.push(`\`${e}\` \u2192 \`${m}\``)}let d=`Unrecognized key(s) on ${t}: ${s.map(e=>`\`${e}\``).join(`, `)}.`;return c.length&&(d+=` Did you mean ${c.join(`, `)}?`),l.length&&(d+=`
|
|
2
|
+
${l.map(e=>` \u2022 ${e}`).join(`
|
|
3
|
+
`)}`),`${d} ${a}`}}function me(e,t=0){if(t>6)return!1;let n=e._zod?.def;if(!n?.type)return!1;if(n.type===`never`)return!0;switch(n.type){case`optional`:case`nullable`:case`default`:case`prefault`:case`readonly`:case`nonoptional`:case`catch`:return me(n.innerType,t+1);default:return!1}}function he(){let e=he;return e.list??=[]}function ge(e,t){let{surface:n,history:r,aliases:i,guidance:a,guidanceSets:o,extraKeys:s=[],retiredForms:c}=e,l,u=()=>l??=pe({surface:n,knownKeys:[...Object.keys(t).filter(e=>!me(t[e])),...s],history:r,aliases:i,guidance:a,guidanceSets:o}),d=e=>{if(c&&e.code===`invalid_type`){let t=typeof e.input==`string`?c[e.input]:void 0;if(t)return t}return u()(e)};return d.prime=()=>{u()},he().push({options:e,shape:t}),d}function _e(e,t){let n=!1;for(let e of t.issues)e.code===`unrecognized_keys`&&(e.continue=!1,n=!0);if(n){let t=e._zod.def.error?.prime;typeof t==`function`&&t()}return t}function ve(){let e=ve;return e.ctor??=n(`ZodClosedObject`,(e,t)=>{d.init(e,t);let n=e._zod.parse;e._zod.parse=(t,r)=>{let i=n(t,r);return i instanceof Promise?i.then(t=>_e(e,t)):_e(e,i)}})}function ye(e){return new(ve())(e._zod.def)}function b(e,t){return ye(_(t,{error:ge(e,t)}).strict())}var x=b({surface:"the `protection` block of this metadata item",history:"This block has refused unknown keys since it was introduced, but through zod's own bare message: a one-keystroke `lockk` was echoed back and nothing else — no surface, no declared-key list, no rename — while every neighbouring block on the same item named all three. It is mounted on very nearly every authorable metadata type in the platform (objects, views, dashboards, datasets, reports, apps, flows, webhooks, permissions, positions, email templates, agents, tools, skills), so that bare message was what an author saw wherever a protection key was misspelled. The declared keys are `lock`, `reason` and `docsUrl`.",aliases:{description:`reason`,message:`reason`,explanation:`reason`,lockReason:`reason`,lockDocsUrl:`docsUrl`,docs:`docsUrl`,link:`docsUrl`,url:`docsUrl`,href:`docsUrl`,helpUrl:`docsUrl`,documentationUrl:`docsUrl`},guidance:{readonly:"`readonly` is a field/component-level boolean; this block expresses the same intent as a policy — write `lock: 'no-overlay'` (save blocked, delete still allowed) or `lock: 'full'` (both blocked).",readOnly:"`readOnly` is a field/component-level boolean; this block expresses the same intent as a policy — write `lock: 'no-overlay'` (save blocked, delete still allowed) or `lock: 'full'` (both blocked)."},guidanceSets:[{name:`PRIVATE_LOCK_ENVELOPE_KEYS`,keys:/^_lock/,examples:[`_lock`,`_lockReason`,`_lockDocsUrl`,`_lockSource`],prescription:"The `_lock*` keys are the runtime's PRIVATE envelope, stamped by the loader from this block — never authored. Write the public keys instead: `_lock` → `lock`, `_lockReason` → `reason`, `_lockDocsUrl` → `docsUrl`; `_lockSource` is derived and has no author-facing counterpart."}]},{lock:ee.describe(`Lock policy — none | no-overlay | no-delete | full.`),reason:g().min(1).max(500).describe(`User-visible reason shown when the lock blocks an action.`),docsUrl:g().url().optional().describe(`Optional URL the Studio banner links to for more context.`)});function S(e){if(typeof process<`u`&&{}.OS_EAGER_SCHEMAS===`1`)return e();let t,n=()=>(t===void 0&&(t=e()),t),r=function(){},i,a=e=>{let t=e._zod;if(!t||typeof t.processJSONSchema!=`function`)return t;let n=t.processJSONSchema;return Object.create(t,{processJSONSchema:{enumerable:!0,value:(t,r,i)=>{let a=t?.seen;if(a&&typeof a.get==`function`){let t=a.get(s);t!==void 0&&!a.has(e)&&a.set(e,t)}let c=n(t,r,i);return o(t?.metadataRegistry,e),c}}})},o=(e,t)=>{if(!e||typeof e.get!=`function`||typeof e.has!=`function`||typeof e.add!=`function`||e.has(s))return;let n=e.get(t);if(!n)return;let r={...n};delete r.id,Object.keys(r).length>0&&e.add(s,r)},s=new Proxy(r,{get(e,t){let r=n();if(t===`_zod`)return i??=a(r),i;let o=r[t];return typeof o==`function`?o.bind(r):o},set(e,t,r){let i=n();return i[t]=r,!0},has(e,t){return t in n()},ownKeys(){return Reflect.ownKeys(n())},getOwnPropertyDescriptor(e,t){return Reflect.getOwnPropertyDescriptor(n(),t)},getPrototypeOf(){return Reflect.getPrototypeOf(n())}});return s}var be=S(()=>g().min(2,{message:`Identifier must be at least 2 characters`}).regex(/^[a-z][a-z0-9_]*$/,{message:`Identifier must be lowercase snake_case, starting with a letter, and may contain only letters, numbers, and underscores (e.g., "user_profile")`}).describe(`Snake case identifier (lowercase with underscores only)`)),xe=`[a-z][a-z0-9_]*`,Se=RegExp(`^${xe}(\\.${xe})+$`),C="Until this shape was closed, an undeclared key here was dropped silently — the machine still parsed, so a mistyped `on`/`entry`/`cond` produced a machine missing the very transition it was written to declare, reported as valid.",w=S(()=>t([g().describe(`Action Name`),b({surface:`this action reference`,history:C},{type:g(),params:r(g(),e()).optional()})])),Ce=S(()=>t([g().describe(`Guard Name (e.g., "isManager", "amountGT1000")`),b({surface:`this guard reference`,history:C},{type:g(),params:r(g(),e()).optional()})])),T=S(()=>b({surface:`this state transition`,history:C,aliases:{guard:`cond`}},{target:g().optional().describe(`Target State ID`),cond:Ce.optional().describe(`Condition (Guard) required to take this path`),actions:o(w).optional().describe(`Actions to execute during transition`),description:g().optional().describe(`Human readable description of this rule`)})),we=u(()=>b({surface:`this state node`,history:C,guidance:{transitions:"A state node declares its transitions as `on`, a record keyed by EVENT TYPE (`on: { APPROVE: \"approved\" }`). `transitions` is the key on the object-level `state_machine` VALIDATION RULE (`validations[].transitions`, a flat `{ from: [to] }` table) — a different declaration, for a record's lifecycle rather than an agent's."}},{type:f([`atomic`,`compound`,`parallel`,`final`,`history`]).default(`atomic`),entry:o(w).optional().describe(`Actions to run when entering this state`),exit:o(w).optional().describe(`Actions to run when leaving this state`),on:r(g(),t([g(),T,o(T)])).optional().describe(`Map of Event Type -> Transition Definition`),always:o(T).optional(),initial:g().optional().describe(`Initial child state (if compound)`),states:r(g(),we).optional(),meta:b({surface:`this state node meta block`,history:C},{label:g().optional(),description:g().optional(),color:g().optional(),aiInstructions:g().optional().describe(`Specific instructions for AI when in this state`)}).optional()})),Te=S(()=>b({surface:`this state machine`,history:C,guidance:{context:"`context` in XState holds the machine's INITIAL VALUES. This protocol declares only the context SHAPE, as `contextSchema` — there is no key here for seeding values, so the two are not a rename of each other."}},{id:be.describe(`Unique Machine ID`),description:g().optional(),contextSchema:r(g(),e()).optional().describe(`Zod Schema for the machine context/memory`),initial:g().describe(`Initial State ID`),states:r(g(),we).describe(`State Nodes`),on:r(g(),t([g(),T,o(T)])).optional()})),E=`Until this shape was closed these were dropped silently — the agent still registered and still answered, minus whatever the key was meant to configure or constrain.`,Ee=S(()=>b({surface:`this model configuration`,history:E,aliases:{modelName:`model`,llm:`model`,deployment:`model`,engine:`model`,temp:`temperature`,maxOutputTokens:`maxTokens`,max_tokens:`maxTokens`,tokenLimit:`maxTokens`,top_p:`topP`,nucleus:`topP`}},{provider:f([`openai`,`azure_openai`,`anthropic`,`local`]).default(`openai`),model:g().describe(`Model name (e.g. gpt-4, claude-3-opus)`),temperature:h().min(0).max(2).default(.7),maxTokens:h().optional(),topP:h().optional()})),De=S(()=>f([`json_object`,`json_schema`,`regex`,`grammar`,`xml`]).describe(`Output format for structured agent responses`)),Oe=S(()=>f([`trim`,`parse_json`,`validate`,`coerce_types`]).describe(`Post-processing step for structured output`)),ke=S(()=>b({surface:`this structured-output configuration`,history:E,aliases:{type:`format`,outputFormat:`format`,jsonSchema:`schema`,responseSchema:`schema`,retries:`maxRetries`,maxAttempts:`maxRetries`,retryOnFailure:`retryOnValidationFailure`,retry:`retryOnValidationFailure`,fallback:`fallbackFormat`,pipeline:`transformPipeline`,transforms:`transformPipeline`,postProcess:`transformPipeline`}},{format:De.describe(`Expected output format`),schema:r(g(),e()).optional().describe(`JSON Schema definition for output`),strict:l().default(!1).describe(`Enforce exact schema compliance`),retryOnValidationFailure:l().default(!0).describe(`Retry generation when output fails validation`),maxRetries:h().int().min(0).default(3).describe(`Maximum retries on validation failure`),fallbackFormat:De.optional().describe(`Fallback format if primary format fails`),transformPipeline:o(Oe).optional().describe(`Post-processing steps applied to output`)}).describe(`Structured output configuration for agent responses`)),Ae=S(()=>b({surface:`this agent`,history:E,aliases:{displayName:`label`,title:`label`,persona:`role`,systemRole:`role`,prompt:`instructions`,systemPrompt:`instructions`,primeDirectives:`instructions`,enabled:`active`,isActive:`active`,allowedUsers:`access`,users:`access`,audience:`access`,capabilities:`skills`,abilities:`skills`,icon:`avatar`,image:`avatar`,output:`structuredOutput`,responseFormat:`structuredOutput`,limits:`guardrails`,safety:`guardrails`},guidance:{visibility:"`visibility` was removed — it never hid anything. No runtime read it: the chat-access evaluator ignored it and the agent list route did not filter on it, so `private` listed the agent to everyone. Use `access` (who may chat) and/or `permissions` (required permission-set capabilities) — both ENFORCED at the chat route.",tenantId:"`tenantId` was removed — it never scoped anything. Tenancy comes from the request context (`resolveAuthzContext`), never from a field on the artifact, so this key did not restrict which tenant could reach the agent. Delete it; scope reachability with `access` / `permissions`.",temperature:"model settings live under `model` — write `model: { temperature: … }`",provider:"model settings live under `model` — write `model: { provider: … }`",maxTokens:"ambiguous at this level — per-request model output is `model.maxTokens`; a budget ceiling for the whole invocation is `guardrails.maxTokensPerInvocation`"}},{name:g().regex(/^[a-z_][a-z0-9_]*$/).describe(`Agent unique identifier`),label:g().describe(`Agent display name`),avatar:g().optional(),role:g().describe(`The persona/role (e.g. "Senior Support Engineer")`),instructions:g().describe(`System Prompt / Prime Directives`),model:Ee.optional(),lifecycle:Te.optional().describe(`[EXPERIMENTAL — not enforced] State machine defining the agent conversation flow and constraints. Parsed but no runtime consumer yet.`),surface:f([`ask`,`build`]).default(`ask`).describe(`Product surface this agent binds ('ask' | 'build') — ADR-0063 §1`),skills:o(g().regex(/^[a-z_][a-z0-9_]*$/)).optional().describe(`Skill names to attach (Agent→Skill→Tool architecture)`),tools:v("`agent.tools` was removed in @objectstack/spec 17 — use `skills`. An agent reaches exactly the tools its surface-compatible skills declare (ADR-0064), so move each reference into a skill: a platform tool by its registered name, or `action_<name>` for one of your own AI-exposed Actions. This is NOT a rename — there is no key the value moves to: the migration DELETES the key and emits a notice naming each tool that was listed, and you re-declare each one in a skill by hand. ADR-0064 itself still reads `Proposed` and is cloud-owned — that scopes its RUNTIME half (tool resolution, which lives in cloud `service-ai`), not this rejection: the authoring invariant binds you here, and ADR-0109 (Accepted — implemented) is the in-repo record that carries it. Run `os migrate meta --from 16` to list the mechanical edits for existing sources; apply them by hand."),knowledge:v("`agent.knowledge` was removed in @objectstack/spec 17.0.0 (audit close-out) — declaring knowledge sources/indexes on an agent never scoped retrieval: the `search_knowledge` tool takes `sourceIds` from the LLM's tool-call arguments, not from the agent record. Delete the block. Restrict retrieval at the knowledge-service / source level (per-source permissions), and describe intended grounding in `instructions` so the model asks for the right sources. Run `os migrate meta --from 16` to list the mechanical edits for existing sources; apply them by hand."),active:l().default(!0),access:o(g()).optional().describe(`Who can chat with this agent`),permissions:o(g()).optional().describe(`Required permission-set capabilities`),planning:b({surface:`this planning configuration`,history:E,aliases:{maxSteps:`maxIterations`,maxLoops:`maxIterations`,iterations:`maxIterations`,maxTurns:`maxIterations`}},{maxIterations:h().int().min(1).max(100).default(10).describe(`Maximum planning loop iterations`)}).optional().describe(`Autonomous reasoning and planning configuration`),memory:b({surface:`this memory configuration`,history:E,aliases:{persistent:`longTerm`,persistence:`longTerm`,reflection:`reflectionInterval`,reflectEvery:`reflectionInterval`},guidance:{shortTerm:"`shortTerm` was removed (ADR-0013 D3) — it declared a working-memory window nothing in the runtime consumed. Cross-turn grounding comes from tools reading live state, and the context budget is governed by the per-request token guardrail, not by this block. Delete it."}},{longTerm:b({surface:`this long-term memory configuration`,history:E,aliases:{backend:`store`,storage:`store`,provider:`store`,limit:`maxEntries`,maxItems:`maxEntries`,active:`enabled`}},{enabled:l().default(!1).describe(`Enable long-term memory persistence`),store:f([`vector`,`database`,`redis`]).default(`vector`).describe(`Long-term memory storage backend`),maxEntries:h().int().min(1).optional().describe(`Max entries in long-term memory`)}).optional().describe(`Long-term / persistent memory`),reflectionInterval:h().int().min(1).optional().describe(`Reflect every N interactions to improve behavior`)}).optional().describe(`[EXPERIMENTAL — not enforced] Agent memory management. Parsed but no runtime consumer yet.`),guardrails:b({surface:`these guardrails`,history:E,aliases:{maxTokens:`maxTokensPerInvocation`,tokenBudget:`maxTokensPerInvocation`,tokenLimit:`maxTokensPerInvocation`,timeout:`maxExecutionTimeSec`,maxExecutionTime:`maxExecutionTimeSec`,timeoutSec:`maxExecutionTimeSec`,blocked:`blockedTopics`,forbiddenTopics:`blockedTopics`,denyTopics:`blockedTopics`},guidance:{allowedTopics:"there is no allow-list — only `blockedTopics` (a deny-list). Steer permitted scope in `instructions`; restrict WHO can invoke the agent with `access` / `permissions`",maxCostUsd:"there is no cost ceiling here — budget by tokens with `maxTokensPerInvocation`",rateLimit:`per-caller rate limiting is not an agent field — it is enforced by the quota service`}},{maxTokensPerInvocation:h().int().min(1).optional().describe(`Token budget per single invocation`),maxExecutionTimeSec:h().int().min(1).optional().describe(`Max execution time in seconds`),blockedTopics:o(g()).optional().describe(`Forbidden topics or action names`)}).optional().describe(`[EXPERIMENTAL — not enforced] Safety guardrails for the agent. Parsed but not enforced — real limits come from the quota service.`),structuredOutput:ke.optional().describe(`[EXPERIMENTAL — not enforced] Structured output format and validation configuration. Parsed but no runtime consumer yet.`),protection:x.optional().describe(`Package author protection block — lock policy for this agent.`),...re})),je=`^\\$`,Me=new WeakMap;function D(e,t){return Me.set(e,Object.freeze(t)),e}function Ne(e){let t={pattern:`required-one-of`,keys:Object.freeze([...e])};return D(e=>t.keys.some(t=>e[t]!==void 0),t)}var O=D(e=>e.trim().length>0,{pattern:`non-blank-string`});function Pe(e){let t={pattern:`banned-key-pattern`,keyPattern:e},n=new RegExp(t.keyPattern);return D(e=>!Object.keys(e).some(e=>n.test(e)),t)}var Fe=f([`cel`,`cron`,`template`]),Ie=_({rationale:g().optional(),generatedBy:g().optional()}),k=_({dialect:Fe,source:g().min(1).optional(),ast:e().optional(),meta:Ie.optional()}).refine(Ne([`source`,`ast`]),{message:"Expression requires at least one of `source` or `ast`"}),A="An expression in an evaluated slot needs a non-blank `source`: the expression engine evaluates `source` (the canonical persisted form) and cannot evaluate `ast` alone, so an envelope carrying only `ast`, or a `source` that is blank after trimming, would validate and register and then fault at run time. Write `{ dialect: 'cel', source: '…' }`.",Le=k.safeExtend({source:g({error:()=>A}).refine(O,{message:A})});t([g().min(1).transform(e=>({dialect:`cel`,source:e})),k]);function Re(e){if(typeof e==`string`||e&&typeof e==`object`&&!Array.isArray(e)&&typeof e.source!=`string`)return A}t([g().refine(O,{message:A}).transform(e=>({dialect:`cel`,source:e})),Le],{error:e=>Re(e.input)});var ze={cron:"A cron-typed slot needs a non-blank cron expression: a bare string is shorthand for `{ dialect: 'cron', source }`, and a blank one would normalize to an envelope with nothing to schedule. Write `'0 9 * * 1-5'` or `{ dialect: 'cron', source: '0 9 * * 1-5' }`; no cron syntax is judged here — `croner` refuses an invalid pattern where a schedule is wired.",template:"A template-typed slot needs a non-blank template: a bare string is shorthand for `{ dialect: 'template', source }`, and a blank one would normalize to an envelope with nothing to interpolate. Write `'{{record.name}}'` or `{ dialect: 'template', source: '{{record.name}}' }`."},Be={cron:"A cron-typed slot accepts a bare cron string or an envelope declaring `dialect: 'cron'` only: an envelope naming another dialect would validate and then have nothing to schedule. Write `'0 9 * * 1-5'` or `{ dialect: 'cron', source: '0 9 * * 1-5' }`.",template:"A template-typed slot accepts a bare template string or an envelope declaring `dialect: 'template'` only: an envelope naming another dialect would validate and then have nothing to interpolate. Write `'{{record.name}}'` or `{ dialect: 'template', source: '{{record.name}}' }`."};function Ve(e){return g().refine(O,{message:ze[e]}).transform(t=>({dialect:e,source:t}))}function He(e){return{error:t=>typeof t.input==`string`?ze[e]:Be[e]}}t([Ve(`cron`),k.safeExtend({dialect:c(`cron`)})],He(`cron`)),t([Ve(`template`),k.safeExtend({dialect:c(`template`)})],He(`template`));var Ue={surface:`this view/page schema`,history:`Before ADR-0089 D3a these were dropped silently, shipping inert metadata; a mis-layered or stale key is now a loud parse error.`,guidanceSets:[{name:`VISIBILITY_KEY_PATTERN`,keys:/vis|conceal|hidden|show.?when/i,examples:[`visibleWhenn`,`visibleIf`,`hiddenWhen`,`conceal`,`showWhen`],prescription:"If this is the conditional-visibility predicate, the canonical key is `visibleWhen` (ADR-0089) — `visibleOn` (view form) and `visibility` (page component) are still accepted as deprecated aliases."}]};({...Ue}),[...Ue.guidanceSets??[]];var We=/^[a-z_][a-z0-9_]*$/;[...Object.freeze([`created_at`,`created_by`,`updated_at`,`updated_by`])],g().regex(We,{message:`Field group key must be lowercase snake_case (e.g., "contact_info", "billing", "system")`});var j=100;``+j+j+j;var M=[`in`],N=[`nin`,`not_in`,`notin`],Ge={op:`$contains`,spellings:[`contains`]};function P(e){let t;try{t=JSON.stringify(e)??String(e)}catch{t=String(e)}return t.length>60?`${t.slice(0,59)}\u2026`:t}var Ke=`For "one of these values" use {"$in": [\u2026]} (authoring: ${M.join(`, `)}); for "the stored list holds a value" on a multi-value field, {"${Ge.op}": "\u2026"} (authoring: ${Ge.spellings.join(`, `)}), an $or of those for any-of. The filter was NOT applied, and an unapplied filter would have returned the UNFILTERED result set.`;function F(e,t){return Ye(t.op?Je(t.op,t.field):`The implicit-equality comparand on field "${t.field}"`,e,t.path,Ke)}var qe=`For "none of these values" use {"$nin": [\u2026]} (authoring: ${N.join(`, `)}). The filter was NOT applied, and an unapplied filter would have returned the UNFILTERED result set.`;function I(e,t){return Ye(Je(`$ne`,t.field),e,t.path,qe)}function Je(e,t){return`Operator "${e}"${t===void 0?``:` on field "${t}"`}`}function Ye(e,t,n,r){let i=n===void 0?``:` at ${n}`;return`${e} requires a single comparable value, but received an array (${P(t)})${i}. ${r}`}var L=new Map([[`$in`,M],[`$nin`,N],[`$between`,[`between`]]]),Xe=new Map([[`$gt`,[`>`,`gt`,`greater_than`,`greaterthan`,`after`]],[`$gte`,[`>=`,`gte`,`greater_than_or_equal`,`greaterthanorequal`,`greaterorequal`]],[`$lt`,[`<`,`lt`,`less_than`,`lessthan`,`before`]],[`$lte`,[`<=`,`lte`,`less_than_or_equal`,`lessthanorequal`,`lessorequal`]]]),Ze=new Map([[`$in`,`"=" ($eq)`],[`$nin`,`"!=" ($ne)`]]);function Qe(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&!(e instanceof Date)}function $e(e){return!!e&&typeof e==`object`&&!Array.isArray(e)&&`$field`in e}function et(e){return e===null?`null`:e===void 0?`undefined`:Array.isArray(e)?`array`:e instanceof Date?`Date`:typeof e}function R(e,t){let n=Error(`${t}`);return n.code=`INVALID_FILTER`,n.status=400,n}function tt(e,t,n,r,i){let a=L.get(t)??[],o=Ze.get(t);return R(e,`Operator "${t}" on field "${n}" requires an ARRAY of values. Received ${et(r)} (${P(r)}) at ${i}. "${t}" tests membership of a list \u2014 write ${P([r])} for a single value`+(o?`, or use ${o} to compare against it`:``)+`. Authoring spellings: ${a.join(`, `)}. The filter was NOT applied, and an unapplied filter would have returned the UNFILTERED result set.`)}function nt(e,t,n,r){return R(e,`Operator "$between" on field "${t}" requires a [min, max] value array. Received ${et(n)} (${P(n)}) at ${r}. A range needs exactly two bounds, in order; the authoring spelling that lowers to "$between" is "between". The filter was NOT applied, and an unapplied filter would have returned the UNFILTERED result set.`)}function rt(e,t,n,r,i){return R(e,`Operator "${t}" on field "${n}" does not accept null as a list member (at ${i}[${r}]). No two backends agree on what it matches; state absence explicitly with the null predicate: {"$or": [{"${n}": {"$in": [\u2026]}}, {"${n}": {"$null": true}}]} is "one of [\u2026] OR has no value"; {"$null": false} is "has a value". Authoring spellings: ${(L.get(t)??[]).join(`, `)}. The filter was NOT applied, and an unapplied filter would have returned the UNFILTERED result set.`)}function it(e,t,n,r,i){return R(e,`Operator "$between" on field "${t}" requires two non-null bounds. Received null at ${i}[${r}] of ${P(n)}. A half-open range is "$gte"/"$lte"; "in range OR has no value" is {"$or": [{"${t}": {"$between": [min, max]}}, {"${t}": {"$null": true}}]}. The authoring spelling that lowers to "$between" is "between". The filter was NOT applied, and an unapplied filter would have returned the UNFILTERED result set.`)}function at(e,t,n,r,i){let a=L.get(`$between`)??[];return R(e,`Operator "$between" on field "${t}" requires two non-blank bounds. Received ${n===void 0?`undefined`:`an empty string`} at ${i}[${r}] (the ${r===0?`MIN`:`MAX`} bound). A blank endpoint is compared as a value, so the range stops bounding on that side. Write the bound you meant; for a genuinely one-sided range use {"$gte": min} / {"$lte": max}. Authoring spellings: ${a.join(`, `)}. The filter was NOT applied, and an unapplied filter would have returned the UNFILTERED result set.`)}function ot(e,t,n,r){let i=L.get(`$between`)??[];return R(e,`Operator "$between" on field "${t}" does not accept a { "$field": \u2026 } reference as an endpoint (at ${r}[${n}], the ${n===0?`MIN`:`MAX`} bound). No evaluation path resolves one inside a list. Write a literal bound, or range column-to-column as two bounds: {"$gte": {"$field": "a"}, "$lte": {"$field": "b"}}. Authoring spellings: ${i.join(`, `)}. The filter was NOT applied, and an unapplied filter would have returned the UNFILTERED result set.`)}function st(e,t,n,r){return R(e,`Operator "${t}" on field "${n}" does not accept a null comparand (at ${r}). null is not ordered; no two evaluation faces agree on what it matches. State absence with the null predicate: {"$eq": null} is "has no value", {"$ne": null} is "has a value". Authoring spellings: ${(Xe.get(t)??[]).join(`, `)}. The filter was NOT applied, and an unapplied filter would have returned the UNFILTERED result set.`)}function ct(e,t,n,r,i){return R(e,F(n,i?{op:i,field:t,path:r}:{field:t,path:r}))}function lt(e,t,n,r){return R(e,I(n,{field:t,path:r}))}function z(e,t,n=`where`){if(Qe(e))for(let[r,i]of Object.entries(e)){let e=`${n}.${r}`;if(r===`$and`||r===`$or`){Array.isArray(i)&&i.forEach((n,r)=>z(n,t,`${e}[${r}]`));continue}if(r===`$not`){z(i,t,e);continue}r.startsWith(`$`)||ut(t,r,i,e)}}function ut(e,t,n,r){if(Array.isArray(n))throw ct(e,t,n,r);if(!Qe(n))return;let i=Object.keys(n);if(i.some(e=>e.startsWith(`$`)))for(let a of i){if(a===`$eq`){if(Array.isArray(n[a]))throw ct(e,t,n[a],`${r}.${a}`,`$eq`);continue}if(a===`$ne`){if(Array.isArray(n[a]))throw lt(e,t,n[a],`${r}.${a}`);continue}if(Xe.has(a)){if(n[a]===null)throw st(e,a,t,`${r}.${a}`);continue}if(!L.has(a))continue;let i=n[a];if(a===`$between`){if(!Array.isArray(i)||i.length!==2)throw nt(e,t,i,`${r}.${a}`);let n=i.indexOf(null);if(n!==-1)throw it(e,t,i,n,`${r}.${a}`);let o=i.findIndex(e=>e===``||e===void 0);if(o!==-1)throw at(e,t,i[o],o,`${r}.${a}`);let s=i.findIndex($e);if(s!==-1)throw ot(e,t,s,`${r}.${a}`);continue}if(!Array.isArray(i))throw tt(e,a,t,i,`${r}.${a}`);let o=i.indexOf(null);if(o!==-1)throw rt(e,a,t,o,`${r}.${a}`)}}var B=`a string, number, bigint, boolean, null or Date`,dt=2n**53n;function ft(e){if(e===null)return!0;switch(typeof e){case`string`:case`number`:case`bigint`:case`boolean`:return!0;default:return e instanceof Date}}var pt=new Set([`$eq`,`$ne`,`$gt`,`$gte`,`$lt`,`$lte`,`$contains`,`$notContains`,`$startsWith`,`$endsWith`,`$icontains`,`$like`,`$ilike`,`$null`,`$exists`,`$empty`]),mt=new Set([`$in`,`$nin`,`$between`]);function V(e){if(typeof e!=`object`||!e||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function ht(e){return V(e)&&typeof e.$field==`string`}function gt(e){if(e===null)return`null`;if(e===void 0)return`undefined`;if(Array.isArray(e))return`an array`;let t=typeof e;if(t===`function`)return`a function`;if(t===`symbol`)return`a Symbol`;if(t!==`object`)return`a ${t}`;let n=e.constructor;return n?.name&&n.name!==`Object`?`a ${n.name} instance`:`a plain object`}function _t(e){let t;try{t=typeof e==`bigint`?`${e}n`:typeof e==`symbol`||typeof e==`function`?String(e):JSON.stringify(e)??String(e)}catch{t=String(e)}return t.length>40?`${t.slice(0,39)}\u2026`:t}function H(e,t){let n=Error(`${t}`);return n.code=`INVALID_FILTER`,n.status=400,n}var U=`The filter was NOT applied, and an unapplied filter would have returned the UNFILTERED result set.`;function vt(e,t){return H(e,`Filter comparand at ${t} is undefined. { key: undefined } cannot be told apart from an omitted key, yet the two mean OPPOSITE things (a predicate vs no constraint) \u2014 one backend even encoded it as MATCH EVERYTHING. Write the null predicate \u2014 {"$eq": null} / {"$ne": null} \u2014 or omit the key. A comparison value must be ${B}. ${U}`)}function yt(e,t,n){return H(e,`Filter comparand at ${t} is ${gt(n)} (${_t(n)}), which no driver can compare. A comparison value must be ${B}. Refusing rather than guessing: the backends disagreed on this input (crash / zero rows / silently edited query). ${U}`)}function bt(e,t,n){return H(e,`Filter comparand at ${t} is the bigint ${_t(n)}, whose magnitude exceeds 2^53 \u2014 it has no exact JS-number form, so a comparison built on it would silently answer the wrong rows on double-storing backends. Compare within \xB12^53, or store and compare the value as a string. A comparison value must be ${B}. ${U}`)}function W(e,t,n){return n===void 0?{kind:`refuse`,error:vt(e,t)}:typeof n==`bigint`?n<=dt&&n>=-dt?{kind:`narrow`,value:Number(n)}:{kind:`refuse`,error:bt(e,t,n)}:ft(n)||Array.isArray(n)||ht(n)?{kind:`keep`}:{kind:`refuse`,error:yt(e,t,n)}}function G(e,t,n=`where`){if(!V(e))return e;let r;for(let[i,a]of Object.entries(e)){let o=`${n}.${i}`,s=a;if(i===`$and`||i===`$or`){if(Array.isArray(a)){let e;a.forEach((n,r)=>{let i=G(n,t,`${o}[${r}]`);i!==n&&(e??=[...a],e[r]=i)}),e&&(s=e)}}else i===`$not`?s=G(a,t,o):i.startsWith(`$`)||(s=xt(t,o,a));s!==a&&(r??={...e},r[i]=s)}return r??e}function xt(e,t,n){if(V(n)){if(ht(n)||!Object.keys(n).some(e=>e.startsWith(`$`)))return n;let r;for(let[i,a]of Object.entries(n)){let o=a;if(pt.has(i))o=St(W(e,`${t}.${i}`,a),a);else if(mt.has(i)&&Array.isArray(a)){let n;a.forEach((r,o)=>{let s=W(e,`${t}.${i}[${o}]`,r);if(s.kind===`refuse`)throw s.error;s.kind===`narrow`&&(n??=[...a],n[o]=s.value)}),n&&(o=n)}o!==a&&(r??={...n},r[i]=o)}return r??n}return St(W(e,t,n),n)}function St(e,t){if(e.kind===`refuse`)throw e.error;return e.kind===`narrow`?e.value:t}function Ct(e){try{z(e)}catch(e){if(e.code===`INVALID_FILTER`)return e;throw e}}function wt(e){return!!e&&typeof e==`object`&&!Array.isArray(e)&&`$field`in e}function Tt(e){return e===null?`null`:e===void 0?`undefined`:Array.isArray(e)?`array`:e instanceof Date?`Date`:typeof e}function Et(e,t,n){let r=e===`$in`?M:N,i=e===`$in`?`"=" ($eq)`:`"!=" ($ne)`;return`Operator "${e}" on field "${t}" requires an ARRAY of values. Received ${Tt(n)} (${P(n)}). "${e}" tests membership of a list \u2014 write ${P([n])} for a single value, or use ${i} to compare against it. Authoring spellings: ${r.join(`, `)}. The filter was NOT applied, and an unapplied filter would have returned the UNFILTERED result set.`}function Dt(e,t){return`Operator "$between" on field "${e}" requires a [min, max] value array. Received ${Tt(t)} (${P(t)}). A range needs exactly two bounds, in order; the authoring spelling that lowers to "$between" is "between". The filter was NOT applied, and an unapplied filter would have returned the UNFILTERED result set.`}var Ot=new Set([`$gt`,`$gte`,`$lt`,`$lte`]);function kt(e,t,n,r){let i=e.shape[t]?.safeParse(n),a=r.join(`.`);return i?.error?.issues.find(e=>e.path.join(`.`)===a)?.message}function At(e,t,n,r,i){let a=t=>{let i=n===void 0?void 0:kt(e,n,r,t);return i===void 0?void 0:{at:t,message:i}},o;if(n===void 0)o={at:[],message:F(r,{field:t})};else if(n===`$eq`)o={at:[],message:F(r,{op:n,field:t})};else if(n===`$ne`)o={at:[],message:I(r,{field:t})};else if(r===null&&Ot.has(n))o=a([]);else if(n===`$in`||n===`$nin`)o=Array.isArray(r)?a([r.indexOf(null)]):{at:[],message:Et(n,t,r)};else if(n===`$between`){if(!Array.isArray(r)||r.length!==2)o={at:[],message:Dt(t,r)};else{let e=r.indexOf(null),t=r.findIndex(e=>e===``||e===void 0),n=r.findIndex(wt),i=e===-1?t===-1?n:t:e;i!==-1&&(o=a([i]))}}return o??{at:[],message:i.message}}var jt=new Set([`$null`,`$exists`,`$empty`]);function Mt(e){return e===null?`null`:e===void 0?`undefined`:typeof e==`bigint`?`a bigint (${e}n)`:Array.isArray(e)?`an array (${P(e)})`:e instanceof Date?`a Date (${P(e)})`:wt(e)?`a field reference (${P(e)})`:`a ${typeof e} (${P(e)})`}function Nt(e,t,n){if(e===`$empty`)return`Operator "${e}" on field "${t}" requires a boolean comparand (true or false). Received ${Mt(n)}. @objectstack/spec FieldOperatorsSchema declares ${e} as a boolean, and a non-boolean is refused rather than coerced, the rule $null and $exists follow on every query face. Write the boolean itself: "${e}": true matches rows whose "${t}" is empty, "${e}": false rows whose "${t}" is not empty. The filter was NOT applied.`;let[r,i]=e===`$null`?[`has no value`,`has a value`]:[`has a value`,`has no value`];return`Operator "${e}" on field "${t}" requires a boolean comparand (true or false). Received ${Mt(n)}. @objectstack/spec FieldOperatorsSchema declares ${e} as a boolean, and a non-boolean is refused rather than coerced because the backends read one in OPPOSITE directions \u2014 one as IS NULL, another as IS NOT NULL. Write the boolean itself: "${e}": true matches rows whose "${t}" ${r}, "${e}": false rows whose "${t}" ${i}. The filter was NOT applied.`}function K(e){try{G(e)}catch(e){if(e.code===`INVALID_FILTER`)return e;throw e}}function Pt(e,t,n,r){if(K({[e]:r})===void 0)return;let i=n=>t===void 0?{[e]:n}:{[e]:{[t]:n}},a=K(i(n));if(a===void 0)return;let o=[],s=t===void 0?`where.${e}`:`where.${e}.${t}`;if(t!==void 0&&Array.isArray(n)){let e=n.findIndex(e=>K(i([e]))!==void 0);e!==-1&&(o=[e],s=`${s}[${e}]`)}let c=` at ${s} `,l=a.message.includes(c)?a.message.replace(c,` `):a.message;return{at:o,message:l}}function Ft(e,t,n,r,i,a,o=r===void 0?i:{[r]:i}){let s,c=Ct(r===void 0?{[n]:i}:{[n]:{[r]:i}});return c&&(s=At(a,n,r,i,c)),s??=Pt(n,r,i,o),s===void 0&&r!==void 0&&jt.has(r)&&typeof i!=`boolean`&&(s={at:[],message:Nt(r,n,i)}),s!==void 0&&(e.addIssue({code:`custom`,path:[...t,...s.at],message:s.message}),!0)}var It=[`today`,`yesterday`,`this_week`,`last_week`,`this_month`,`last_month`,`this_quarter`,`last_quarter`,`this_year`,`last_year`,`last_7_days`,`last_30_days`,`last_90_days`];function Lt(e){return typeof e==`string`&&It.includes(e)}var Rt={today:[`{today}`,`{today}`],yesterday:[`{yesterday}`,`{yesterday}`],this_week:[`{week_start}`,`{week_end}`],last_week:[`{last_week_start}`,`{last_week_end}`],this_month:[`{month_start}`,`{month_end}`],last_month:[`{last_month_start}`,`{last_month_end}`],this_quarter:[`{quarter_start}`,`{quarter_end}`],last_quarter:[`{last_quarter_start}`,`{last_quarter_end}`],this_year:[`{year_start}`,`{year_end}`],last_year:[`{last_year_start}`,`{last_year_end}`],last_7_days:[`{7_days_ago}`,null],last_30_days:[`{30_days_ago}`,null],last_90_days:[`{90_days_ago}`,null]};function zt(e,t){let[n,r]=Rt[e];return`"${e}" is a dashboard date-range PRESET name, not a filter value. It is only understood by the dashboard date-filter positions (dateRange.defaultRange, a date global filter's defaultValue), where the console lowers it to {date-macro} bounds before querying. As a bare "${t}" comparand nothing resolves it: a declared datetime/date field refuses the query at the engine (INVALID_FILTER / 400), and any other column compares the literal string. Write the date-macro window instead \u2014 e.g. ${r===null?`{ $gte: '${n}' }`:`{ $between: ['${n}', '${r}'] }`} \u2014 or an ISO date such as "2026-01-15". Refused at authoring time so the error surfaces where the filter is written.`}function Bt(e){try{return JSON.stringify(e)??String(e)}catch{return String(e)}}function Vt(e){return typeof e!=`string`||e===``}function Ht(e,t,n){let r=`@objectstack/spec's FILTER_TEXT_CASES declares this shape refused (INVALID_FILTER); the declared comparand for '${t}' is a NON-EMPTY STRING`;return n===``?`filter comparand for field '${e}' on operator '${t}' is the EMPTY STRING. Every value contains the empty substring, so evaluating it is a predicate that constrains nothing. ${r}. Drop the condition instead of sending an empty comparand`:`filter comparand for field '${e}' on operator '${t}' is ${n===null?`null`:typeof n} (${Bt(n)}), not a string. Coercing it would answer a query nobody wrote. ${r}. Write the comparand as a string`}function Ut(e){let t=`addDays is an integer literal of any sign (a negative value subtracts; whole days only, no other unit) or a nested { "$field": "numeric_column" } reference. A NULL offset column contributes zero days; a NULL referenced column makes the comparison false.`;if(typeof e==`number`)return`addDays must be a whole number of days, and ${String(e)} is not an integer. ${t}`;if(typeof e==`string`)return`addDays must be an integer or a { "$field" } reference, not the string ${JSON.stringify(e)}. ${t}`;if(typeof e==`object`&&e&&!Array.isArray(e)){let n=e.$field;return`addDays as an object must be a { "$field": "numeric_column" } reference, and ${n===void 0?`this object has no $field`:`its $field is ${typeof n==`string`?`a string`:`not a string (${JSON.stringify(n)})`}`}. ${t}`}return`addDays must be an integer or a { "$field" } reference. ${t}`}var Wt=_({$field:g().describe(`Numeric column whose value is the number of days to add`)}).describe(`A { $field } reference to the numeric column holding the day offset`),Gt=S(()=>_({$field:g().describe(`Field Reference/Column Name`),addDays:t([h().int(),Wt],{error:e=>Ut(e.input)}).optional().describe(`Whole-day offset added to the referenced column before comparing: an integer literal of any sign (negative subtracts; whole days only), or a { $field } reference to a numeric column. A NULL offset column contributes zero days; a NULL referenced column makes the comparison false rather than NULL, so it stays false under $not. Compiles on SQL push-down between two temporal columns of the same class (date/date, datetime/datetime) and evaluates identically in memory.`)}));function Kt(e){if(!e||typeof e!=`object`||Array.isArray(e)||typeof e.$field!=`string`)return;let t=Gt.safeParse(e);return t.success?void 0:t.error.issues[0]?.message}var qt='Equal to — the DEFAULT operator: a bare value written against a field key is the same condition as this one. Lowered to `=` on the SQL family and to `$eq` on MongoDB. The comparand is a literal, or a { $field } reference to another column of the same table ($eq is one of the six scalar comparisons a reference may be the whole comparand of). `{ "$eq": null }` is the has-NO-value predicate — the same question `{ "$null": true }` asks, and it is about the VALUE, never about whether a key is present.',Jt='Not equal to. Lowered to `<>` / `!=` on the SQL family and to `$ne` on MongoDB. The comparand is a literal, or a { $field } reference to another column of the same table ($ne is one of the six scalar comparisons a reference may be the whole comparand of). `{ "$ne": null }` is the HAS-A-VALUE predicate — the same question `{ "$exists": true }` asks: it matches rows whose field holds a value, never rows that merely carry the key.',Yt=()=>p().superRefine((e,t)=>{Array.isArray(e)&&t.addIssue({code:`custom`,message:F(e,{op:`$eq`})})}).optional().describe(qt),Xt=()=>p().superRefine((e,t)=>{Array.isArray(e)&&t.addIssue({code:`custom`,message:I(e,{})})}).optional().describe(Jt),Zt=`Comparand is a number, a Date, a string, or a { $field } reference (optionally carrying a whole-day addDays offset). STRING is the form the platform itself produces: the date-macro resolver returns only strings ("{current_year_start}" -> "2026-01-01"), and the guaranteed spellings are an ISO calendar day (YYYY-MM-DD), a UTC ISO-8601 instant, or a wall-clock time of day (HH:MM[:SS[.fff]]) for a Field.time column. Those are ASCII and fixed-width, so lexicographic order IS chronological order and every backend agrees; the driver reconciles the comparand with the column (a bare calendar day used as an upper bound becomes the half-open next-day boundary). Ordering NON-temporal text is permitted but NOT promised: the order is the backend collation's (byte-wise on SQLite, the database locale on Postgres, UTF-16 code units in the JS matchers), and those coincide only for ASCII. null is NOT a comparand: null is not ordered — state absence with the null predicate instead ($eq: null is "has no value", $ne: null is "has a value").`;function Qt(e){return`null is not a valid ${e} comparand. null is not ordered, and no two evaluation faces agree on what an ordering against it matches (driver-memory's live path reads two absences as equal; its reference matcher compares through JS coercion). State absence with the null predicate instead: {"$eq": null} is "has no value", {"$ne": null} is "has a value". Ruled 2026-09-01: a null ordering comparand is refused at the validation entrance.`}var q=(e,n)=>t([h(),s(),g(),Gt],{error:t=>t.input===null?Qt(e):Kt(t.input)}).optional().describe(`${n}. ${Zt}`);function $t(e){return!!e&&typeof e==`object`&&!Array.isArray(e)&&`$field`in e}function en(e){return`A { "$field": \u2026 } reference is not a valid ${e}. No evaluation path resolves a field reference inside a list: the in-memory evaluator (matchesFilter) leaves the list unresolved and compares the raw reference OBJECT, so it silently matches nothing, and both SQL drivers refuse the position with INVALID_FILTER / 400. Write a literal value here, or move the reference to a scalar comparison operator ($eq/$ne/$gt/$gte/$lt/$lte), whose WHOLE comparand a { $field } reference may be. Ruled 2026-08-11: declared = enforced (ADR-0049).`}function tn(e){return`null is not a valid ${e}. No two backends agree on what a null in a list-comparand position matches (the SQL family answers a NULL under NOT IN unconditionally; the JS matchers split over the two readings of "no value"). State absence explicitly with the null predicate instead: {"$or": [{"$in": [\u2026]}, {"$null": true}]} is "one of [\u2026] OR has no value", and {"$null": false} is the has-a-value half. Ruled 2026-08-31: a null list member is refused at the validation entrance.`}var nn=e=>o(p()).superRefine((t,n)=>{t.forEach((t,r)=>{if(t===null){n.addIssue({code:`custom`,path:[r],message:tn(`${e} member at index ${r}`)});return}$t(t)&&n.addIssue({code:`custom`,path:[r],message:en(`${e} member at index ${r}`)})})}),rn=`Membership list. Members are literal values of any type the column stores. A { $field } reference is NOT a member shape: no backend resolves one inside a list — put it in a scalar comparison ($eq/$ne/$gt/$gte/$lt/$lte) instead. null is NOT a member shape either: state absence explicitly with the null predicate — "one of […] OR has no value" is { "$or": [{ "$in": […] }, { "$null": true }] }.`,an=`Closed interval [min, max]. Each endpoint is a number, a Date, or a string, and BOTH are required NON-BLANK: an empty string, null and undefined are refused, and the refusal names the blank side. A range bounded on ONE side only is not a $between at all — write the side you have as a scalar comparison ($gte for a lower bound, $lte for an upper one). A { $field } reference is NOT an endpoint shape: no backend resolves one inside a list — put it in a scalar comparison ($gt/$gte/$lt/$lte), which does compile to a column-to-column bound. STRING is the form the platform itself produces: the date-macro resolver walks INTO arrays, so { $between: ["{current_year_start}", "{current_year_end}"] } resolves to two strings. The guaranteed spellings are an ISO calendar day (YYYY-MM-DD), a UTC ISO-8601 instant, or a wall-clock time of day (HH:MM[:SS[.fff]]) for a Field.time column; those are ASCII and fixed-width, so lexicographic order IS chronological order and every backend agrees. The driver reconciles each endpoint with the column independently (a bare calendar day used as the MAX becomes the half-open next-day boundary). Ranging over NON-temporal text is permitted but NOT promised: the order is the backend collation's, and those coincide only for ASCII.`;function on(e){return`A blank value is not a valid $between endpoint at index ${e} (the ${e===0?`MIN`:`MAX`} bound). A closed interval [min, max] requires BOTH endpoints present and non-empty: an empty string is not an interval endpoint at any backend \u2014 it is compared as a value, so the range stops bounding on that side while still reading as a complete range. Write the bound you meant; and if only ONE side is genuinely bounded, that is not a range at all \u2014 drop $between and write the side you have as a scalar comparison ({"$gte": min} for a lower bound, {"$lte": max} for an upper one). Ruled 2026-09-17: a blank $between bound is refused at the validation entrance.`}var sn=e=>t([h(),s(),g()],{error:t=>t.input===null?tn(`$between endpoint at index ${e}`):t.input===void 0?on(e):$t(t.input)?en(`$between endpoint at index ${e}`):void 0}).superRefine((t,n)=>{t===``&&n.addIssue({code:`custom`,message:on(e)})}),cn=`Between (inclusive). ${an}`,J=`The comparand is matched LITERALLY: "%", "_" and regex metacharacters are ordinary characters, because this family escapes and anchors the comparand on the caller's behalf. To bind the wildcards yourself, write $like (case-exact) or $ilike (ASCII-folded).`,ln=`Contains substring, CASE-SENSITIVELY \u2014 "acme" does NOT match "ACME". Lowered to \`LIKE '%?%'\` (case-exact) on the SQL family, and answered case-exactly on every JS evaluation face the platform ships. ${J} Case-INSENSITIVE containment is $icontains, which folds ASCII case only.`,un=`Does not contain substring, CASE-SENSITIVELY \u2014 the negation of $contains, on the same comparand contract. Lowered to \`NOT LIKE '%?%'\` (case-exact) on the SQL family. ${J}`,dn=`Starts with prefix, CASE-SENSITIVELY. Lowered to \`LIKE '?%'\` (case-exact) on the SQL family. ${J}`,fn=`Ends with suffix, CASE-SENSITIVELY. Lowered to \`LIKE '%?'\` (case-exact) on the SQL family. ${J}`,pn=`Contains substring, ignoring case — but ONLY ASCII case (A-Z against a-z). Every other character compares literally, so "café" does NOT match "CAFÉ" and "москва" does not match "МОСКВА". The domain is ASCII because that is the one fold all five backends can deliver: SQLite (and therefore turso and sqlite-wasm) folds ASCII only, so a Unicode promise here would be a guarantee three of the five could not keep. The comparand is matched LITERALLY — "%", "_" and regex metacharacters are ordinary characters, not wildcards. Case-SENSITIVE containment is $contains. Lowered on the SQL family (driver-sql, driver-sqlite-wasm, driver-turso on both transports) and on every JS evaluation face, so it is portable across every backend the platform ships.`,mn='Whole-string pattern match with CALLER-bound wildcards: "%" matches any sequence (including empty), "_" matches exactly one character, and a character is one Unicode code point — an emoji or any other character outside the Basic Multilingual Plane is ONE "_", never two, as SQL LIKE counts it. A backslash escapes the character after it ("\\%", "\\_", "\\\\") so it matches literally. The pattern must cover the WHOLE value — a pattern with no wildcards is an exact comparison, NOT a substring search; write $contains for containment. A pattern ending in a lone unpaired backslash, or holding the NUL character U+0000, is refused (INVALID_FILTER). Comparison is case-SENSITIVE, same contract as $contains (Q2 = A); $ilike is the case-insensitive twin. Answered by the SQL family (driver-sql, driver-sqlite-wasm, driver-turso on both transports), by driver-memory and by @objectstack/formula. driver-mongodb, objectql `having` and service-analytics REFUSE it in the INVALID_FILTER envelope rather than approximating it — see FILTER_OPERATORS for why it is staged out of that allowlist.',hn=`Whole-string pattern match like $like — "%" / "_" wildcards bound by the caller, backslash escapes — but ignoring ASCII case (A-Z against a-z) and ONLY ASCII case: "café" does NOT match "CAFÉ", the same Q1 = A boundary $icontains declares, because SQLite's fold is ASCII-only and three of the five backends are SQLite underneath. Staged with $like — see FILTER_OPERATORS.`,gn="Is-null check. `true` matches rows where the field is null, `false` matches rows where it is not null. Lowered to `IS NULL` (true) / `IS NOT NULL` (false) on the SQL family and to `{ field: null }` (true) / `{ $ne: null }` (false) on MongoDB.",_n="Has-a-value check — the exact inverse of `$null`. `true` matches rows where the field holds a value (`!= null`), `false` matches rows where it holds none. Portable across every backend the platform ships: lowered to `IS NOT NULL` (true) / `IS NULL` (false) on the SQL family and to `{ $ne: null }` (true) / `{ $eq: null }` (false) on MongoDB.",vn="Is-empty check by the field's DECLARED type. `true` matches rows whose field is empty, `false` is its exact complement. What counts as empty: text-like types (text, textarea, email, url, phone, password, secret, markdown, html, richtext, code, color, signature, qrcode) = null or '' (the empty string); multi-value types (multiselect, checkboxes, tags, and select, radio, lookup, user, file or image with multiple: true) = null or [] (the empty list); every other type = null only. A face that holds no field declaration judges by the value: null, '' and [] are empty. A face that answers by the declared type refuses the operator on a column whose declaration it does not hold (the built-in id, for one) rather than guess a row; use $null there for \"has no value\". The view operators is_empty / is_not_empty lower to this operator.",Y=S(()=>_({$eq:Yt(),$ne:Xt(),$gt:q(`$gt`,`Greater than`),$gte:q(`$gte`,`Greater than or equal to`),$lt:q(`$lt`,`Less than`),$lte:q(`$lte`,`Less than or equal to`),$in:nn(`$in`).optional().describe(rn),$nin:nn(`$nin`).optional().describe(rn),$between:i([sn(0),sn(1)]).optional().describe(cn),$contains:g().optional().describe(ln),$notContains:g().optional().describe(un),$startsWith:g().optional().describe(dn),$endsWith:g().optional().describe(fn),$icontains:g().optional().describe(pn),$like:g().optional().describe(mn),$ilike:g().optional().describe(hn),$null:l().optional().describe(gn),$exists:l().optional().describe(_n),$empty:l().optional().describe(vn)})),yn=new Set([`$gt`,`$gte`,`$lt`,`$lte`]),bn=32,xn=`$icontains`;function Sn(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&!(e instanceof Date)}function Cn(e){let t=Object.getPrototypeOf(e);return t!==Object.prototype&&t!==null}function wn(e,t,n=[],r=0){if(!(r>bn)&&Sn(e)){for(let[i,a]of Object.entries(e))if(!i.startsWith(`$`)){if(!Sn(a)||Cn(a)){r===0&&Ft(t,[...n,i],i,void 0,a,Y);continue}if(!Object.keys(a).some(e=>e.startsWith(`$`))){wn(a,t,[...n,i],r+1);continue}for(let[e,o]of Object.entries(a))if(!(r===0&&Ft(t,[...n,i,e],i,e,o,Y,a))){if(e===xn&&Vt(o)){t.addIssue({code:`custom`,path:[...n,i,e],message:`The ${Ht(i,e,o)}.`});continue}if(yn.has(e)&&Lt(o)){t.addIssue({code:`custom`,path:[...n,i,e],message:zt(o,e)});continue}e===`$between`&&Array.isArray(o)&&o.forEach((r,a)=>{Lt(r)&&t.addIssue({code:`custom`,path:[...n,i,e,a],message:zt(r,`$between`)})})}}}}var X=u(()=>r(g(),e()).and(_({$and:o(X).optional(),$or:o(X).optional(),$not:X.optional()})).superRefine((e,t)=>wn(e,t))),Tn=[`$and`,`$or`,`$not`];function En(e,t){return`Not a valid ${e} \u2014 ${!t||typeof t!=`object`||Array.isArray(t)?`got ${Array.isArray(t)?`an array`:t===null?`null`:typeof t}`:`got an object with key(s) ${Object.keys(t).map(e=>JSON.stringify(e)).join(`, `)}`}. A ${e} is either a FIELD CONDITION ({ "field": { "$op": value } }, whose keys are field names and whose operator map must satisfy FieldOperatorsSchema \u2014 comparand shapes included), or a nested LOGICAL GROUP carrying only ${Tn.join(` / `)} and nothing else. Declared = enforced (ADR-0049).`}var Dn=()=>r(g(),Y).refine(Pe(je),{message:`A field condition's keys are field names, never $-prefixed operators.`,abort:!0}),Z=e=>t([Dn(),On],{error:t=>En(e,t.input)}),On=u(()=>ye(_({$and:o(Z(`$and member`)).optional(),$or:o(Z(`$or member`)).optional(),$not:Z(`$not operand`).optional()}).strict())),kn=new Set(Object.keys({"=":`$eq`,"==":`$eq`,equals:`$eq`,eq:`$eq`,"!=":`$ne`,"<>":`$ne`,ne:`$ne`,neq:`$ne`,not_equals:`$ne`,notequals:`$ne`,">":`$gt`,gt:`$gt`,greater_than:`$gt`,greaterthan:`$gt`,">=":`$gte`,gte:`$gte`,greater_than_or_equal:`$gte`,greaterthanorequal:`$gte`,greaterorequal:`$gte`,"<":`$lt`,lt:`$lt`,less_than:`$lt`,lessthan:`$lt`,"<=":`$lte`,lte:`$lte`,less_than_or_equal:`$lte`,lessthanorequal:`$lte`,lessorequal:`$lte`,before:`$lt`,after:`$gt`,in:`$in`,nin:`$nin`,not_in:`$nin`,notin:`$nin`,contains:`$contains`,notcontains:`$notContains`,not_contains:`$notContains`,like:`$like`,ilike:`$ilike`,icontains:`$icontains`,startswith:`$startsWith`,starts_with:`$startsWith`,endswith:`$endsWith`,ends_with:`$endsWith`,between:`$between`,is_null:`$null`,is_not_null:`$null`,isnull:`$null`,isnotnull:`$null`,is_empty:`$empty`,is_not_empty:`$empty`,isempty:`$empty`,isnotempty:`$empty`})),An=[`and`,`or`],jn=g().min(1).refine(e=>!An.includes(e.toLowerCase()),{message:`'and' / 'or' in the first position open a logical group, so they cannot name a field. Write the comparison inside the group: ["and", ["field", "=", value]].`}),Mn=g().refine(e=>kn.has(e.toLowerCase()),{error:e=>`Unknown filter operator '${String(e.input)}'. Recognised operators: ${[...kn].sort().join(`, `)}.`}),Nn=g().refine(e=>An.includes(e.toLowerCase()),{message:`A logical group opens with 'and' or 'or'.`}),Pn=u(()=>t([i([jn,Mn,e()]),i([jn,Mn]),i([Nn,Pn],Pn),o(Pn).min(1)]).describe(`Input-only authoring sugar for a filter: [field, operator, value], ["and"|"or", ...conditions], or a bare list of those. Lowered to a FilterCondition at the single sink parseFilterAST (@objectstack/spec/data) the moment it arrives; it is never stored and never travels the wire as an array. A query "where" is a FilterCondition and does not accept this shape.`)),Fn=f(`text.textarea.email.url.phone.password.secret.markdown.html.richtext.number.currency.percent.date.datetime.time.boolean.toggle.select.multiselect.radio.checkboxes.lookup.master_detail.tree.user.image.file.avatar.video.audio.formula.summary.autonumber.composite.repeater.record.location.address.code.json.color.rating.slider.signature.qrcode.progress.tags.vector`.split(`.`));f([`GET`,`POST`,`PUT`,`DELETE`,`PATCH`,`HEAD`,`OPTIONS`]).describe("HTTP method — the full routing vocabulary (`api/*` endpoints, router and REST-server routes). The narrower `HttpMethodSubset` is what view data sources may request.");var In="'pdf' was removed from `view.exportOptions` formats in @objectstack/spec 17.0.0 (PDF export itself was declined as NOT PLANNED) — no renderer has ever produced a PDF export: ObjectGrid dropped the declared format from the export menu with only a runtime console.warn, so authoring it was a parse-clean no-op. Delete the value; the surviving formats are 'csv', 'xlsx' and 'json'. Run `os migrate meta --from 16` to list the mechanical edits for existing sources; apply them by hand.",Ln=f([`csv`,`xlsx`,`json`],{error:e=>e.input===`pdf`?In:void 0});o(Ln).optional().describe(`Formats offered in the export menu (default: ['csv', 'json']). XLSX is delivered by the server stream only.`),h().int().nonnegative().optional().describe(`Maximum number of records to export; 0 or absent = unlimited`),l().optional().describe(`Include column headers in the exported file (default true)`),g().optional().describe(`Download file name prefix — replaces the object label and suppresses the view label in the generated file name`),l().optional().describe(`Set false to force the client-side export path (csv/json only) instead of the server stream`),g().regex(Se,`View item name must be a dotted snake_case qualified name, e.g. "crm_lead.pipeline".`).describe("Globally-unique view id, `<object>.<viewKey>`."),f([`package`,`shared`,`personal`]).describe(`View identity layer: package | shared | personal.`),f([`list`,`form`]).describe("Whether `config` is a ListView (list family) or a FormView."),_({order:o(g()).optional().describe(`Column order as field names, leftmost first (runtime-only state — written by the console grid, never authored).`),widths:r(g(),h()).optional().describe(`Column widths in pixels, keyed by field name (runtime-only state — written by the console grid, never authored).`)}).describe("Runtime-only personalization overlay key: the column layout (order/widths) the console grid persists through the `view` metadata API. NOT authorable — authoring doors reject it by name; do not write it in metadata source.");var Rn={permissions:'`tool.permissions` was removed in @objectstack/spec 17.0.0 (audit close-out) — it promised a capability gate on tool invocation that nothing ever enforced: the key is not part of AIToolDefinition and no execution path read it, so a tool "requiring" capabilities ran for everyone. Delete the key. To gate what a tool can DO, gate the underlying action (`action.requiredPermissions`, ADR-0066) or the object it touches (permission sets) — those are the checks the middleware actually runs.',active:'`tool.active` was removed in @objectstack/spec 17.0.0 (audit close-out) — `active: false` read as "withdrawn" but withdrew nothing: AIToolDefinition has no such field, ToolRegistry.getAll() returns everything, and the tool kept reaching the LLM tool set and `POST /ai/tools/:name/execute` kept running it (unlike agent.active / skill.active, which ARE enforced). Delete the key. To withdraw a tool, remove it from the skills/agents that reference it.',category:"`tool.category` was removed in @objectstack/spec 17.0.0 (audit close-out) — nothing groups, filters or routes tools by it; the only reader was a serializer pass-through. Delete the key. Organizational grouping belongs in the skill that carries the tool.",builtIn:"`tool.builtIn` was removed in @objectstack/spec 17.0.0 (audit close-out) — no runtime branches on it; it never affected registration, selection or execution. Delete the key.",requiresConfirmation:"`tool.requiresConfirmation` was removed from @objectstack/spec in the 16.x line (ADR-0033 §2) — it never had a consumer, and a SAFETY flag that is merely accepted is false compliance: authors set it on destructive tools believing the call would pause, and nothing ever did. No execution path read it — not the LLM tool set (a tool reaches the model as name/description/parameters only), not `ToolRegistry.execute`, not `POST /ai/tools/:name/execute`, and not the MCP bridge (which derives `destructiveHint` from a hardcoded name list). Delete the key. For a REAL gate on a destructive operation, put it behind an action and set `action.ai.requiresConfirmation: true` — the flag the platform's confirmation CONTRACT is written against (`AIActionConfirmation`, `@objectstack/spec/contracts`), and that contract is ENFORCED. An AI-facing call on an action declaring the flag must carry the confirmation member `confirm: true` on the request; without it the call is REFUSED with `ACTION_CONFIRMATION_REQUIRED` (428), the refusal naming the action and the exact member to set so the caller confirms and retries. A GATE, not a queue: nothing is parked, nothing is held for an operator to find later, and a refused call did not run — no record was read and none was written. Two BOUNDS to read before you rely on it. (1) The enforced set is the doors that enforce the author's `ai.exposed` opt-in — today the action door reached from the MCP `run_action` tool. REST `/actions` is NOT `ai.exposed`-gated and sits OUTSIDE this gate, so a human in front of that route is still yours to arrange. (2) Only the author's declared `ai.requiresConfirmation: true` refuses, and only the boolean `true` confirms: the wider listing heuristic that reports `requiresConfirmation` for a destructive-looking action ADVISES a client to ask and never refuses, and an explicit `false` never refuses. `confirm: true` is an unverifiable caller claim — the gate makes FORGETTING loud, it does not prove a human. For AI metadata mutations the ADR-0033 draft/publish workspace is the gate: nothing is live until a human publishes."},zn=`Until this shape was closed an undeclared key was dropped without a word — the tool still registered and still reached the LLM tool set, minus whatever the key was meant to do (the silent-strip class).`,Bn=S(()=>b({surface:`the tool definition`,history:zn,guidance:Rn},{name:g().regex(/^[a-z_][a-z0-9_]*$/).describe(`Tool unique identifier (snake_case)`),label:g().describe(`Tool display name`),description:g().describe(`Tool description for LLM function calling`),parameters:r(g(),e()).describe(`JSON Schema for tool parameters`),outputSchema:r(g(),e()).optional().describe(`[EXPERIMENTAL — not enforced] JSON Schema for tool output. Keys are folded into the tool description only; outputs are not validated.`),objectName:g().regex(/^[a-z_][a-z0-9_]*$/).optional().describe(`Target object name (snake_case)`),protection:x.optional().describe(`Package author protection block — lock policy for this tool.`),...re}).describe("AI tool definition. [READ-ONLY PROJECTION — not an execution entry point] Authoring a tool as metadata does NOT make it runnable: this schema has no `implementation`/`handler` field and no framework executor loads a metadata-authored tool. The runtime executes a separately-registered `AIToolDefinition` (cloud `@objectstack/service-ai`); tool metadata is a one-way projection for Studio/discovery. Do not expect a hand-authored tool to run in the open edition.")),Vn=[`in`,`not_in`],Hn=[`eq`,`neq`];function Un(e){return e===null?`null`:e===void 0?`no value`:Array.isArray(e)?`an array of ${e.length}`:`a ${typeof e}`}function Wn(e){if(e===void 0)return`(omitted)`;let t;try{t=JSON.stringify(e)??String(e)}catch{t=String(e)}return t.length>40?`${t.slice(0,39)}\u2026`:t}function Gn(e,t){let n=e.operator,r=e.value,i=typeof e.field==`string`?e.field:`<field>`,a=Vn.includes(n),o=Hn.includes(n);if(a){if(Array.isArray(r))return;t.addIssue({code:`custom`,path:[`value`],message:`Operator "${n}" on field "${i}" requires an ARRAY of values. Received ${Un(r)} (${Wn(r)}). "${n}" tests membership of a list \u2014 write ${r===void 0?`["…"]`:Wn([r])} for a single value, or use "${n===`in`?`eq`:`neq`}" to compare against it. An empty list [] is allowed and is a real predicate. The cloud agent runtime coerces the scalar today; the contract never declared that spelling.`});return}o&&Array.isArray(r)&&t.addIssue({code:`custom`,path:[`value`],message:`Operator "${n}" on field "${i}" requires a single STRING value. Received ${Un(r)} (${Wn(r)}). "${n}" is an identity comparison, so an array can never match a context field and the condition would ${n===`eq`?`never`:`always`} fire \u2014 use "${n===`eq`?`in`:`not_in`}" to test membership of that list.`})}var Kn=S(()=>_({field:g().describe(`Context field to evaluate`).meta({title:`Context Field`}),operator:f([`eq`,`neq`,`in`,`not_in`,`contains`]).describe(`Comparison operator`).meta({title:`Operator`}),value:t([g(),o(g())]).describe(`Expected value or values`).meta({title:`Value`})}).superRefine(Gn)),qn=S(()=>b({surface:`this skill`,history:`Until this shape was closed these were dropped silently — the item still registered, minus whatever the key was meant to configure.`,aliases:{prompt:`instructions`,content:`instructions`,body:`instructions`,tool:`tools`},guidance:{trigger:"`trigger` is not a skill key, and skills have never been activated by a phrase. Activation is `triggerConditions` (an AND of context field/operator/value) intersected with the agent's `skills[]` allowlist, plus explicit /skill-name pinning. If you meant a programmatic condition, write `triggerConditions: [{ field: …, operator: …, value: … }]`; if you meant natural-language intent for the LLM to route on, that belongs in `description` / `instructions`, which are the strings actually put in front of the model.",permissions:"`permissions` is not a skill key — skill invocation was never permission-gated, so this was stripped in silence and the author believed they had a gate. Gate at the AGENT instead, or on the underlying tools' actions."}},{name:g().regex(/^[a-z_][a-z0-9_]*$/).describe(`Skill unique identifier (snake_case)`),label:g().describe(`Skill display name`),description:g().optional().describe(`Skill description`),surface:f([`ask`,`build`,`both`]).default(`ask`).describe(`Agent surface this skill binds to ('ask' | 'build' | 'both') — ADR-0063 §3; read by the cloud agent runtime only`),instructions:g().optional().describe(`LLM instructions when skill is active — also served as an MCP prompt`),tools:o(g().regex(/^[a-z_][a-z0-9_]*\*?$/)).describe("Tool names belonging to this skill (supports trailing wildcard, e.g. `action_*`) — bound by the cloud agent runtime only"),triggerPhrases:v("`skill.triggerPhrases` was removed in @objectstack/spec 17.0.0 (audit close-out) — phrases were never matched against the user's message; skill activation is `triggerConditions` (AND of context field/operator/value) intersected with the agent's `skills[]`, plus explicit /skill-name pinning. Delete the key. Put routing intent in `triggerConditions`; describe intent in `description`/`instructions` for the LLM. Run `os migrate meta --from 16` to list the mechanical edits for existing sources; apply them by hand."),triggerConditions:o(Kn).optional().describe(`Programmatic activation conditions — evaluated by the cloud agent runtime only`),active:l().default(!0).describe(`Whether the skill is enabled`),protection:x.optional().describe(`Package author protection block — lock policy for this skill.`),...re})),Jn=/^[a-z_][a-z0-9_]*$/,Q=e=>g().regex(Jn).describe(e),$=e=>g().regex(Jn).nullable().describe(e),Yn=_({object:Q(`The CHILD object whose records are aggregated (snake_case). It MUST have a lookup/master_detail field pointing back at this parent.`),function:f([`count`,`sum`,`avg`,`min`,`max`]).describe(`Aggregation: "数量/个数/计数" → count; "合计/总额/累计" → sum; "平均" → avg`),field:$(`Numeric field on the CHILD to aggregate; null (or "id") for count`),relationshipField:$(`Child FK field back to this parent, or null to auto-detect`),conditions:o(_({field:Q(`Field on the CHILD object`),op:f([`lt`,`lte`,`gt`,`gte`,`eq`,`ne`]).describe(`Comparison operator`),value:t([h(),g(),l()]).describe(`Comparison value — a select field's option VALUE, never its label`)})).nullable().describe(`CONDITIONAL roll-up: aggregate only child rows matching these (ANDed), or null to aggregate every child. REQUIRED whenever the field name carries a qualifier ("已完成任务数 / 已收货金额 / 待处理工单数", any 已X / 未X / <某状态>的 count-or-sum) — e.g. [{field:"status",op:"eq",value:"completed"}]. Without it the roll-up counts EVERYTHING and reports a plausible WRONG number.`)}),Xn=_({name:Q(`Field machine name (snake_case)`),label:g().nullable().describe(`Human-readable field label, or null`),type:Fn.describe(`Field data type`),required:l().nullable().describe(`Whether the field is required, or null`),reference:$(`Target object for lookup/master_detail, or null`),options:o(_({label:g().describe(`What the user reads on the dropdown — free text in the user's own language (「1-49人」, 「已完成」).`),value:Q(`The STORED machine value: snake_case, and it may NEVER start with a digit — give it a word prefix instead (「1-49人」 → "size_1_49", 「2024年」 → "year_2024"). The label carries the human wording; this key only has to be a legal identifier.`)})).nullable().describe(`Choices for select-family fields, or null`),summaryOperations:Yn.nullable().describe(`REQUIRED when type is "summary" (a roll-up of child records onto this parent: 任务总数 / 报名人数 / 合计金额 / 已完成任务数); null for every other field type. A "summary" field without it is runtime-dead — it reads 0/empty everywhere.`),expression:g().nullable().describe(`REQUIRED when type is "formula" — the CEL body the field computes, e.g. "record.quantity * record.unit_price", or "record.order_no + ' · ' + record.customer" for a composed record title; null for every other field type. A "formula" field without it is runtime-dead — it reads null everywhere, forever. This is the formula analogue of summaryOperations: name the type and you must supply the body.`)}),Zn=_({name:Q(`Object machine name (snake_case)`),label:g().nullable().describe(`Human-readable singular label, or null`),description:g().nullable().describe(`What this object represents, or null`),fields:o(Xn).describe(`Fields to create on the object`),sharingModel:f([`private`,`public_read`,`public_read_write`,`controlled_by_parent`]).nullable().describe(`Org-Wide Default record visibility (OWD) for INTERNAL users (ADR-0090), or null to accept the platform default (business object → public_read_write; master-detail child → controlled_by_parent). SET it when the user's description implies a visibility intent: personal/private data (HR, 绩效, salary, 个人隐私) → "private" (owner-only); "public_read" = everyone reads, owner writes; "public_read_write" = everyone reads+writes; "controlled_by_parent" ONLY for an object with a master_detail reference field. Null on privacy-sensitive data silently over-shares it.`),nameField:$(`The record title field — which field holds the human-readable name shown on cards, lookup chips, breadcrumbs and search (ADR-0079), or null to let the platform auto-pick a text field. Set it to the object's text label field (e.g. "product_name") — snake_case. For a numbered entity (invoice/ticket), set it to a formula field that composes number + name (e.g. "{order_no} · {customer}"). Declaring it is strongly preferred over null.`)}),Qn=_({object:Q(`Object this view displays (snake_case)`),name:Q(`View machine name (snake_case)`),label:g().nullable().describe(`Human-readable view label, or null`),type:f([`list`,`form`,`kanban`,`calendar`,`gallery`,`gantt`]).nullable().describe(`View kind, or null for list. "gallery" = visual card/cover browse (画廊/相册/卡片墙/封面/海报, or an object with an image/avatar/file field); "gantt" = timeline/schedule (甘特图/时间线/排期, object with BOTH a start and an end date field); "kanban" = board grouped by a status/select field; "calendar" = single-date schedule; "form" = record editor.`),columns:o(g().regex(Jn)).nullable().describe(`Field names shown as columns, or null. For a gallery, INCLUDE the image/avatar/file field (becomes the card cover); for a gantt, INCLUDE the start date column before the end date column.`),groupBy:$(`REQUIRED for kanban: the select/status field whose options become the board columns (e.g. "stage"). Optional for gantt (groups leaf tasks). Null for list/form/calendar/gallery.`)}),$n=_({name:Q(`Dashboard machine name (snake_case)`),label:g().nullable().describe(`Human-readable dashboard label, or null`),widgets:o(_({id:Q(`Widget id (snake_case)`),title:g().nullable().describe(`Widget title, or null`),object:$(`Source object, or null`),chart:f([`metric`,`bar`,`line`,`pie`,`table`]).nullable().describe(`Visualization, or null`),measure:$(`The field this widget aggregates (e.g. "amount", "probability"), or "count" to count records, or null to infer from the title. The aggregation (sum vs average) is chosen automatically from the field type — name the FIELD, not "total_amount". "total revenue" → "amount"; "average win rate" → "win_rate"; "number of deals" → "count".`),groupBy:$(`The field to break the widget down by — the category or time axis (e.g. "stage", "created_at"), or null for a single-number metric. A "by status" chart MUST set this to the status field; the title and this field MUST name the SAME field.`),condition:_({field:Q(`Field on the widget object to filter by (e.g. "stock_quantity", "status")`),op:f([`lt`,`lte`,`gt`,`gte`,`eq`,`ne`]).describe(`Comparison operator`),value:t([h(),g(),l()]).describe(`Comparison value (e.g. 10, "open")`)}).nullable().describe(`Restrict WHICH records the widget counts/aggregates when its title implies a threshold or status (e.g. "stock below 10" → {field:"stock_quantity",op:"lt",value:10}; "open tickets" → {field:"status",op:"eq",value:"open"}), or null when the widget covers every record. Without it a "低于10的预警" / "overdue" card wrongly counts ALL rows.`)})).nullable().describe(`Widgets to place on the dashboard, or null`)}),er=_({type:f([`object`,`dashboard`]).describe(`What this nav entry opens`),target:Q(`Object or dashboard machine name to surface (snake_case)`),label:g().nullable().describe(`Nav entry label, or null`),icon:g().nullable().describe(`Lucide icon name, or null`),viewName:g().nullable().describe('For type:"object" only — the `views[].name` this entry opens (e.g. "ticket_status_board"), or null for the object\'s default list. SET it whenever this blueprint authors a kanban/calendar/gallery/gantt view the menu should reach: give the object ONE entry per view (a 「工单列表」 entry with viewName null plus a 「工单看板」 entry with viewName "ticket_status_board"). Null on every entry means they all open the SAME default list, and a label/icon saying otherwise is decoration.')}),tr=_({name:Q(`App machine name (snake_case)`),label:g().nullable().describe(`App display label, or null`),icon:g().nullable().describe(`Lucide icon for the App Launcher, or null`),nav:o(er).nullable().describe(`Navigation entries; null to auto-surface every created object and dashboard`)});_({summary:g().describe(`One-line description of the proposed solution`),assumptions:o(g()).describe(`Design assumptions made from the underspecified goal`),questions:o(g()).nullable().describe(`At most 1-2 structure-deciding questions to confirm before building, or null`),objects:o(Zn).describe(`Objects (tables) to create`),views:o(Qn).nullable().describe(`Views to create, or null`),dashboards:o($n).nullable().describe(`Dashboards to create, or null`),app:tr.nullable().describe(`The navigation shell (app) that surfaces the created objects/dashboards, or null`)});export{Ae as AgentSchema,qn as SkillSchema,Bn as ToolSchema};
|
package/dist/assets/{app-shell-eager-leaves-CDVclng4.js → app-shell-eager-leaves-Cf2bM6uT.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{d as t,p as n,t as r,v as i}from"./vendor-react-BggL7APJ.js";import{f as a,v as o}from"./infrastructure-BHSync5f.js";import{Br as s,Dn as c,Hr as l,Ur as u,bi as d,ni as ee,vi as f,zr as p}from"./ui-components-BTB1NkUW.js";import{Rr as m,Ui as h}from"./framework-DcWkeiND.js";import{t as g,w as _}from"./i18n-runtime-CTgAQF4N.js";import{r as v}from"./vendor-ui-utils-DIUdEYii.js";import{t as te}from"./vendor-icon-circle-alert-D1XTr_X9.js";import{t as ne}from"./vendor-icon-external-link-SBKz5x6R.js";import{t as y}from"./vendor-icon-lock-B_psRnly.js";import{t as re}from"./vendor-icon-refresh-ccw-QRCaXN-I.js";import{t as b}from"./vendor-icon-shield-question-mark-CmNmL1kO.js";import{t as ie}from"./vendor-icon-trash-BLsWkwB9.js";var x=e(i(),1),S=r();function C(e){if(typeof e!=`object`||!e)return null;let t=e.telemetry;if(typeof t!=`object`||!t)return null;let n=t.errorReporting;if(typeof n!=`object`||!n)return null;let r=n;if(typeof r.dsn!=`string`)return null;let i=r.dsn.trim();return i===``||w(i)?null:{dsn:i,sendDefaultPii:r.sendDefaultPii===!0,...typeof r.environment==`string`&&r.environment.trim()?{environment:r.environment.trim()}:{},tracesSampleRate:T(r.tracesSampleRate,E),replaysOnErrorSampleRate:T(r.replaysOnErrorSampleRate,D)}}function w(e){try{return new URL(e).password!==``}catch{return!1}}function T(e,t){return typeof e==`number`&&Number.isFinite(e)&&e>=0&&e<=1?e:t}var E=.1,D=0,O={cloudUrl:``,singleEnvironment:!1,defaultOrgId:null,defaultEnvironmentId:null,features:{installLocal:!1,marketplace:!0,aiStudio:!0,autoPublishAiBuilds:!0,customDomain:!1,sso:!1,scim:!1},branding:{productName:`ObjectOS`,productShortName:`ObjectOS`,stage:`preview`,brandColor:`#4F46E5`,pwaThemeColor:`#4f46e5`},telemetry:{}},k=[`preview`,`beta`,`ga`];function A(e){return typeof e==`string`&&k.includes(e)}var j={...O};function M(e){j={...j,...e,features:{...j.features,...e.features??{}},branding:{...j.branding,...e.branding??{}},telemetry:e.telemetry?{...e.telemetry}:j.telemetry}}async function N(e=``){let t=(e||``).replace(/\/+$/,``);try{let e=await m(`${t}/api/v1/runtime/config`,{credentials:`include`,headers:{Accept:`application/json`}});if(!e||typeof e!=`object`)return;M({cloudUrl:typeof e.cloudUrl==`string`?e.cloudUrl.replace(/\/+$/,``):j.cloudUrl,singleEnvironment:!!e.singleEnvironment,defaultOrgId:e.defaultOrgId??j.defaultOrgId??null,defaultEnvironmentId:e.defaultEnvironmentId??j.defaultEnvironmentId??null,features:e.features?{installLocal:!!e.features.installLocal,marketplace:e.features.marketplace!==!1,aiStudio:e.features.aiStudio!==!1,autoPublishAiBuilds:e.features.autoPublishAiBuilds!==!1,customDomain:e.features.customDomain===!0,sso:e.features.sso===!0,scim:e.features.scim===!0}:j.features,telemetry:(()=>{let t=C(e);return t?{errorReporting:t}:{}})(),branding:e.branding?{productName:typeof e.branding.productName==`string`&&e.branding.productName.trim()?e.branding.productName.trim():j.branding.productName,productShortName:typeof e.branding.productShortName==`string`&&e.branding.productShortName.trim()?e.branding.productShortName.trim():j.branding.productShortName,stage:A(e.branding.stage)?e.branding.stage:j.branding.stage,logoUrl:typeof e.branding.logoUrl==`string`&&e.branding.logoUrl.trim()?e.branding.logoUrl.trim():j.branding.logoUrl,faviconUrl:typeof e.branding.faviconUrl==`string`&&e.branding.faviconUrl.trim()?e.branding.faviconUrl.trim():j.branding.faviconUrl,brandColor:typeof e.branding.brandColor==`string`&&e.branding.brandColor.trim()?e.branding.brandColor.trim():j.branding.brandColor,pwaDescription:typeof e.branding.pwaDescription==`string`&&e.branding.pwaDescription.trim()?e.branding.pwaDescription.trim():j.branding.pwaDescription,pwaThemeColor:typeof e.branding.pwaThemeColor==`string`&&e.branding.pwaThemeColor.trim()?e.branding.pwaThemeColor.trim():j.branding.pwaThemeColor}:j.branding})}catch{}}function ae(){return j}function P(){return j.branding?.productName||`ObjectOS`}function oe(){return j.branding?.productShortName||P()}function se(){return j.branding?.stage??`preview`}function ce(){return j.branding?.brandColor||`#4F46E5`}function le(){return j.branding?.logoUrl}function ue(){return j.branding?.faviconUrl}function de(){return j.branding?.pwaDescription||`${P()} — runtime console`}function fe(){return j.branding?.pwaThemeColor||ce()}function F(){return j.cloudUrl??``}function I(){return j.features?.marketplace!==!1}function L(){return j.features?.aiStudio!==!1}function R(){return j.telemetry?.errorReporting??null}var z=``.replace(/\/$/,``),B=`${z}/api/v1/marketplace`;function V(e){let t=o.get();return t?{...e,Authorization:`Bearer ${t}`}:e}function H(e,t){let n=e?.error?.code??e?.code??`HTTP_${t.status}`,r=e?.error?.message??e?.error??e?.message??t.statusText;return{code:String(n),message:typeof r==`string`?r:String(n)}}async function U(e,t){let n=await fetch(`${B}${e}`,{credentials:`omit`,headers:{Accept:`application/json`,...t?.headers||{}},...t}),r=null;try{r=await n.json()}catch{}if(!n.ok){let{code:e,message:t}=H(r,n),i=Error(typeof t==`string`?t:`${e}`);throw i.code=e,i.status=n.status,i}return r?.data??r}async function pe(e={}){let t=new URLSearchParams;e.q&&t.set(`q`,e.q),e.category&&t.set(`category`,e.category),e.limit!=null&&t.set(`limit`,String(e.limit)),e.offset!=null&&t.set(`offset`,String(e.offset));let n=t.toString();return U(`/packages${n?`?${n}`:``}`)}async function me(e){return U(`/packages/${encodeURIComponent(e)}`)}async function he(e){if(F()){let t=await fetch(`/api/v1/cloud-connection/install`,{method:`POST`,credentials:`include`,headers:V({Accept:`application/json`,"Content-Type":`application/json`}),body:JSON.stringify({package_id:e.packageId,seed_sample_data:!!e.seedSampleData})}),n=null;try{n=await t.json()}catch{}if(!t.ok||n?.success===!1){let{code:e,message:r}=H(n,t),i=Error(typeof r==`string`?r:`${e}`);throw i.code=e,i.status=t.status,i}return n?.data??n}let t=await fetch(`${z}/api/v1/actions/sys_package/install_package`,{method:`POST`,credentials:`include`,headers:{Accept:`application/json`,"Content-Type":`application/json`},body:JSON.stringify({recordId:e.packageId,params:{environment_id:e.environmentId,seed_sample_data:!!e.seedSampleData}})}),n=null;try{n=await t.json()}catch{}let r=n?.data,i=!!r&&typeof r==`object`&&r.success===!1;if(!t.ok||i){let e=H(n,t),a=n?.code??e.code,o=i?r.error??t.statusText:e.message,s=Error(typeof o==`string`?o:`${a}`);throw s.code=a,s.status=t.status,s}return n?.data??n}async function ge(){let e=F()||z,t=await fetch(`${e}/api/v1/data/sys_environment?limit=200`,{credentials:`include`,headers:{Accept:`application/json`}});if(!t.ok){let e=Error(`HTTP_${t.status}`);throw e.status=t.status,e}let n=await t.json().catch(()=>({})),r=n?.records??n?.data??n?.items??n??[];return Array.isArray(r)?r:[]}async function _e(){let e=F()||z,t=null;try{let n=await fetch(`${e}/api/v1/auth/get-session`,{credentials:`include`,headers:{Accept:`application/json`}});n.ok&&(t=(await n.json().catch(()=>({})))?.user?.id??null)}catch{}if(!t)return new Set;let n=`${e}/api/v1/data/sys_member?limit=200`,r;try{let e=await fetch(n,{credentials:`include`,headers:{Accept:`application/json`}});if(!e.ok)return new Set;r=await e.json().catch(()=>({}))}catch{return new Set}let i=r?.records??r?.data??r?.items??r??[];if(!Array.isArray(i))return new Set;let a=new Set;for(let e of i){if(String(e?.user_id??e?.userId??``)!==t)continue;let n=String(e?.role??``).toLowerCase(),r=e?.organization_id??e?.organizationId;r&&(n===`owner`||n===`admin`)&&a.add(String(r))}return a}function W(){return F()}async function ve(e,t){if(!e)return null;if(F())try{let t=await fetch(`/api/v1/cloud-connection/installation?package_id=${encodeURIComponent(e)}`,{credentials:`include`,headers:V({Accept:`application/json`})});if(!t.ok)return null;let n=await t.json().catch(()=>({})),r=n?.data??n??{};return r.installed?{installationId:String(r.installationId??``),version:String(r.version??`installed`),withSampleData:r.withSampleData===!0}:null}catch{return null}if(!t)return null;let n=z;try{let r=await fetch(`${n}/api/v1/cloud/environments/${encodeURIComponent(t)}/installations/${encodeURIComponent(e)}`,{credentials:`include`,headers:{Accept:`application/json`}});if(!r.ok)return null;let i=await r.json().catch(()=>({})),a=i?.data??i??{};return a.installed?{installationId:String(a.installationId??``),version:String(a.version??`installed`),withSampleData:a.withSampleData===!0}:null}catch{return null}}async function ye(e){if(!e)return{ok:!1,error:`installation id required`};let t=F()||z;try{let n=await fetch(`${t}/api/v1/cloud/installations/${encodeURIComponent(e)}/reseed-sample-data`,{method:`POST`,credentials:`include`,headers:{Accept:`application/json`,"Content-Type":`application/json`},body:`{}`}),r=await n.json().catch(()=>({}));if(!n.ok||r?.success===!1){let{code:e,message:t}=H(r,n);return{ok:!1,error:t,code:e}}return{ok:!0}}catch(e){return{ok:!1,error:e?.message||`Network error`}}}async function be(e){if(!e)return{ok:!1,error:`installation id required`};let t=F()||z;try{let n=await fetch(`${t}/api/v1/cloud/installations/${encodeURIComponent(e)}/purge-sample-data`,{method:`POST`,credentials:`include`,headers:{Accept:`application/json`,"Content-Type":`application/json`},body:`{}`}),r=await n.json().catch(()=>({}));if(!n.ok||r?.success===!1){let{code:e,message:t}=H(r,n);return{ok:!1,error:t,code:e}}return{ok:!0,deleted:Number(r?.data?.deleted??0)}}catch(e){return{ok:!1,error:e?.message||`Network error`}}}async function xe(){try{let e=await fetch(`${z}/api/v1/cloud-connection/org-packages`,{credentials:`include`,headers:{Accept:`application/json`}});if(!e.ok)return{connected:!1,items:[]};let t=(await e.json().catch(()=>({})))?.data??{},n=Array.isArray(t.items)?t.items:[];return{connected:t.connected===!0,items:n}}catch{return{connected:!1,items:[]}}}async function Se(e){let t=await fetch(`${B}/install-local`,{method:`POST`,credentials:`include`,headers:{Accept:`application/json`,"Content-Type":`application/json`},body:JSON.stringify({packageId:e.packageId,...e.versionId?{versionId:e.versionId}:{}})}),n=null;try{n=await t.json()}catch{}if(!t.ok){let{code:e,message:r}=H(n,t),i=Error(typeof r==`string`?r:`${e}`);throw i.code=e,i.status=t.status,i}return n?.data??n}async function G(){try{let e=await fetch(`${B}/install-local`,{credentials:`include`,headers:{Accept:`application/json`}});if(!e.ok)return[];let t=await e.json().catch(()=>({})),n=t?.data?.items??t?.items??[];return Array.isArray(n)?n:[]}catch{return[]}}async function K(){try{let e=await fetch(`${z}/api/v1/cloud-connection/installed`,{credentials:`include`,headers:{Accept:`application/json`}});if(!e.ok)return{connected:!1,items:[]};let t=(await e.json().catch(()=>({})))?.data??{},n=(Array.isArray(t.packages)?t.packages:[]).map(e=>{let t=String(e.packageId??e.package_id??``);return{packageId:t,versionId:String(e.package_version_id??``),manifestId:t,version:String(e.version??`installed`),installedAt:String(e.installed_at??e.installedAt??``),installedBy:e.installed_by??e.installedBy??null,withSampleData:e.with_sample_data===!0||e.withSampleData===!0}});return{connected:t.connected===!0,items:n}}catch{return{connected:!1,items:[]}}}async function q(e){let t=await fetch(`${B}/install-local/${encodeURIComponent(e)}`,{method:`DELETE`,credentials:`include`,headers:{Accept:`application/json`}});if(!t.ok){let e=await t.json().catch(()=>({}));throw Error(H(e,t).message)}}async function J(e,t){let n=await fetch(`${B}/install-local/${encodeURIComponent(e)}/${t===`reseed`?`reseed-sample-data`:`purge-sample-data`}`,{method:`POST`,credentials:`include`,headers:{Accept:`application/json`}}),r=await n.json().catch(()=>({}));if(!n.ok){let e=r?.error?.message??n.statusText,t=Error(typeof e==`string`?e:`HTTP_${n.status}`);throw t.code=r?.error?.code??`HTTP_${n.status}`,t}return r?.data??r}function Ce(e){return J(e,`reseed`)}function we(e){return J(e,`purge`)}function Y(){let e=t(),{appName:r}=n(),{t:i}=_(),a=r?`/apps/${r}`:`/`;return(0,S.jsx)(`div`,{className:`container mx-auto max-w-2xl px-6 py-16`,children:(0,S.jsx)(p,{children:(0,S.jsxs)(s,{className:`flex flex-col items-center gap-4 py-12 text-center`,children:[(0,S.jsx)(`div`,{className:`rounded-full bg-muted p-3`,children:(0,S.jsx)(y,{className:`h-6 w-6 text-muted-foreground`})}),(0,S.jsxs)(`div`,{children:[(0,S.jsx)(`h2`,{className:`text-lg font-semibold`,children:i(`marketplace.accessDenied.title`)}),(0,S.jsx)(`p`,{className:`mt-1 text-sm text-muted-foreground`,children:i(`marketplace.accessDenied.description`)})]}),(0,S.jsx)(f,{variant:`outline`,onClick:()=>e(a),children:i(`marketplace.action.backHome`)})]})})})}var X=`${``.replace(/\/$/,``)}/api/v1/security/suggested-bindings`;function Z(e={}){let t={Accept:`application/json`,...e},n=o.get();return n?{...t,Authorization:`Bearer ${n}`}:t}async function Q(e){let t=null;try{t=await e.json()}catch{}if(!e.ok){let n=t?.error?.code??`HTTP_${e.status}`,r=t?.error?.message??t?.error??e.statusText,i=Error(typeof r==`string`?r:String(n));throw i.code=n,i.status=e.status,i}return t?.data??t}async function Te(e={}){let t=new URLSearchParams;e.status&&t.set(`status`,e.status),e.packageId&&t.set(`packageId`,e.packageId);let n=t.toString(),r=await Q(await fetch(`${X}${n?`?${n}`:``}`,{credentials:`include`,headers:Z()}));return Array.isArray(r?.suggestions)?r.suggestions:[]}async function Ee(e){return(await Q(await fetch(`${X}/${encodeURIComponent(e)}/confirm`,{method:`POST`,credentials:`include`,headers:Z({"Content-Type":`application/json`})})))?.suggestion}async function De(e){return(await Q(await fetch(`${X}/${encodeURIComponent(e)}/dismiss`,{method:`POST`,credentials:`include`,headers:Z({"Content-Type":`application/json`})})))?.suggestion}function Oe({packageId:e,strings:t,className:n,onResolved:r}){let[i,a]=(0,x.useState)([]),[o,s]=(0,x.useState)(null),c=(0,x.useCallback)(()=>{let t=!1;return Te({status:`pending`,...e?{packageId:e}:{}}).then(e=>{t||a(e)}).catch(()=>{}),()=>{t=!0}},[e]);(0,x.useEffect)(()=>c(),[c]);let l=async(e,n)=>{s(e.id);try{let i=n===`confirm`?await Ee(e.id):await De(e.id);a(t=>t.filter(t=>t.id!==e.id)),v.success(n===`confirm`?t.confirmedToast(e):t.dismissedToast(e)),r?.(i??e)}catch(e){v.error(e?.message??String(e))}finally{s(null)}};return i.length===0?null:(0,S.jsx)(`div`,{"data-testid":`suggested-bindings-panel`,className:d(`rounded-lg border border-amber-300/60 dark:border-amber-700/50 bg-amber-50 dark:bg-amber-950/30 px-3 py-2 space-y-2`,n),children:i.map(e=>(0,S.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,S.jsx)(b,{className:`h-4 w-4 shrink-0 text-amber-600 dark:text-amber-400`}),(0,S.jsx)(`p`,{className:`flex-1 min-w-0 text-sm text-amber-900 dark:text-amber-200`,children:t.describe(e)}),(0,S.jsx)(f,{size:`sm`,disabled:o===e.id,onClick:()=>l(e,`confirm`),"data-testid":`suggested-binding-confirm-${e.permission_set_name}`,children:o===e.id?t.confirming:t.confirm}),(0,S.jsx)(f,{size:`sm`,variant:`ghost`,disabled:o===e.id,onClick:()=>l(e,`dismiss`),"data-testid":`suggested-binding-dismiss-${e.permission_set_name}`,children:t.dismiss})]},e.id))})}function $(){let e=t(),{appName:r}=n(),{isAdmin:i}=a(),{t:o}=_(),d=g(),m=r?`/apps/${r}`:``,[h,v]=(0,x.useState)([]),[y,b]=(0,x.useState)(`local`),[C,w]=(0,x.useState)(!0),[T,E]=(0,x.useState)(null),[D,O]=(0,x.useState)(null),k=async()=>{w(!0);try{let e=await K();e.connected?(b(`cloud`),v(e.items)):(b(`local`),v(await G()))}finally{w(!1)}};(0,x.useEffect)(()=>{k()},[]);let A=async e=>{if(confirm(o(`marketplace.uninstall.confirm`,{manifestId:e.manifestId,version:e.version}))){E(e.manifestId),O(null);try{await q(e.manifestId),O({ok:!0,message:o(`marketplace.uninstall.successInList`,{manifestId:e.manifestId})}),await k()}catch(e){O({ok:!1,message:e?.message??String(e)})}finally{E(null)}}};return i?(0,S.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,S.jsx)(`div`,{className:`flex justify-end`,children:(0,S.jsxs)(f,{variant:`outline`,size:`sm`,onClick:()=>void k(),disabled:C,children:[(0,S.jsx)(re,{className:`h-4 w-4 mr-1.5`,"aria-hidden":`true`}),o(`marketplace.refresh`)]})}),D&&(0,S.jsx)(`div`,{className:`rounded-md border p-3 text-sm ${D.ok?`border-green-500/30 bg-green-500/5 text-green-700 dark:text-green-400`:`border-destructive/30 bg-destructive/5 text-destructive`}`,children:(0,S.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,S.jsx)(te,{className:`h-4 w-4 mt-0.5 shrink-0`,"aria-hidden":`true`}),(0,S.jsx)(`div`,{children:D.message})]})}),C&&h.length===0?(0,S.jsx)(`div`,{className:`grid gap-3`,children:Array.from({length:3}).map((e,t)=>(0,S.jsx)(c,{className:`h-20 w-full`},t))}):h.length===0?(0,S.jsxs)(`div`,{className:`text-center py-12 text-sm text-muted-foreground border rounded-md`,children:[(0,S.jsx)(`p`,{children:o(`marketplace.installedEmpty`)}),(0,S.jsx)(f,{variant:`link`,className:`mt-2`,onClick:()=>e(`${m}/system/marketplace`),children:o(`marketplace.browseLink`)})]}):(0,S.jsx)(`div`,{className:`grid gap-3`,children:h.map(t=>(0,S.jsxs)(p,{children:[(0,S.jsxs)(l,{className:`flex flex-row items-start justify-between gap-3 pb-2`,children:[(0,S.jsxs)(`div`,{className:`min-w-0`,children:[(0,S.jsxs)(u,{className:`text-base truncate flex items-center gap-2`,children:[t.manifestId,(0,S.jsx)(ee,{variant:`outline`,children:o(`marketplace.versionBadge`,{version:t.version})})]}),(0,S.jsxs)(`div`,{className:`text-xs text-muted-foreground mt-1 flex flex-wrap gap-x-3 gap-y-1`,children:[(0,S.jsx)(`span`,{children:o(`marketplace.installedAt`,{when:new Date(t.installedAt).toLocaleString(d)})}),t.installedBy&&(0,S.jsx)(`span`,{children:o(`marketplace.installedBy`,{user:t.installedBy})}),(0,S.jsxs)(`span`,{children:[o(`marketplace.installedPackageId`),` `,(0,S.jsx)(`code`,{className:`font-mono`,children:t.packageId})]})]})]}),(0,S.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0`,children:[(0,S.jsxs)(f,{variant:`ghost`,size:`sm`,onClick:()=>e(`${m}/system/marketplace/${t.packageId}`),children:[(0,S.jsx)(ne,{className:`h-4 w-4 mr-1.5`,"aria-hidden":`true`}),o(`marketplace.action.details`)]}),y===`local`&&(0,S.jsxs)(f,{variant:`outline`,size:`sm`,onClick:()=>void A(t),disabled:T===t.manifestId,children:[(0,S.jsx)(ie,{className:`h-4 w-4 mr-1.5`,"aria-hidden":`true`}),T===t.manifestId?o(`marketplace.action.uninstalling`):o(`marketplace.action.uninstall`)]})]})]}),y===`local`&&(0,S.jsx)(s,{className:`pt-0 text-xs text-muted-foreground`,dangerouslySetInnerHTML:{__html:o(`marketplace.cachedAs`,{path:`.objectstack/installed-packages/${t.manifestId.replace(/[^a-zA-Z0-9._-]/g,`_`)}.json`})}})]},t.manifestId))}),(0,S.jsx)(`p`,{className:`text-xs text-muted-foreground border-t pt-4`,dangerouslySetInnerHTML:{__html:o(`marketplace.installedAdditiveNote`)}})]}):(0,S.jsx)(Y,{})}h.register(`marketplace:installed-list`,()=>(0,S.jsx)($,{}),{namespace:`app-shell`,label:`Installed Marketplace Packages`,category:`plugin`,inputs:[]});export{N as A,le as C,de as D,oe as E,I as M,fe as O,ue as S,P as T,Ce as _,ve as a,R as b,he as c,K as d,G as f,be as g,we as h,W as i,L as j,ae as k,ge as l,xe as m,Oe as n,me as o,pe as p,Y as r,Se as s,$ as t,_e as u,ye as v,se as w,F as x,q as y};
|
|
1
|
+
import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{d as t,p as n,t as r,v as i}from"./vendor-react-BggL7APJ.js";import{f as a,v as o}from"./infrastructure-Cc34lEqb.js";import{Br as s,On as c,Ur as l,Vr as u,Wr as d,ri as ee,xi as f,yi as p}from"./ui-components-D6cEVg0T.js";import{Br as m,Yi as h}from"./framework-DFR4HNtj.js";import{t as g,w as _}from"./i18n-runtime-97_bDVjP.js";import{r as v}from"./vendor-ui-utils-DIUdEYii.js";import{t as te}from"./vendor-icon-circle-alert-D1XTr_X9.js";import{t as ne}from"./vendor-icon-external-link-SBKz5x6R.js";import{t as y}from"./vendor-icon-lock-B_psRnly.js";import{t as re}from"./vendor-icon-refresh-ccw-QRCaXN-I.js";import{t as b}from"./vendor-icon-shield-question-mark-CmNmL1kO.js";import{t as ie}from"./vendor-icon-trash-BLsWkwB9.js";var x=e(i(),1),S=r();function C(e){if(typeof e!=`object`||!e)return null;let t=e.telemetry;if(typeof t!=`object`||!t)return null;let n=t.errorReporting;if(typeof n!=`object`||!n)return null;let r=n;if(typeof r.dsn!=`string`)return null;let i=r.dsn.trim();return i===``||w(i)?null:{dsn:i,sendDefaultPii:r.sendDefaultPii===!0,...typeof r.environment==`string`&&r.environment.trim()?{environment:r.environment.trim()}:{},tracesSampleRate:T(r.tracesSampleRate,E),replaysOnErrorSampleRate:T(r.replaysOnErrorSampleRate,D)}}function w(e){try{return new URL(e).password!==``}catch{return!1}}function T(e,t){return typeof e==`number`&&Number.isFinite(e)&&e>=0&&e<=1?e:t}var E=.1,D=0,O={cloudUrl:``,singleEnvironment:!1,defaultOrgId:null,defaultEnvironmentId:null,features:{installLocal:!1,marketplace:!0,aiStudio:!0,autoPublishAiBuilds:!0,customDomain:!1,sso:!1,scim:!1},branding:{productName:`ObjectOS`,productShortName:`ObjectOS`,stage:`preview`,brandColor:`#4F46E5`,pwaThemeColor:`#4f46e5`},telemetry:{}},k=[`preview`,`beta`,`ga`];function A(e){return typeof e==`string`&&k.includes(e)}var j={...O};function M(e){j={...j,...e,features:{...j.features,...e.features??{}},branding:{...j.branding,...e.branding??{}},telemetry:e.telemetry?{...e.telemetry}:j.telemetry}}async function N(e=``){let t=(e||``).replace(/\/+$/,``);try{let e=await m(`${t}/api/v1/runtime/config`,{credentials:`include`,headers:{Accept:`application/json`}});if(!e||typeof e!=`object`)return;M({cloudUrl:typeof e.cloudUrl==`string`?e.cloudUrl.replace(/\/+$/,``):j.cloudUrl,singleEnvironment:!!e.singleEnvironment,defaultOrgId:e.defaultOrgId??j.defaultOrgId??null,defaultEnvironmentId:e.defaultEnvironmentId??j.defaultEnvironmentId??null,features:e.features?{installLocal:!!e.features.installLocal,marketplace:e.features.marketplace!==!1,aiStudio:e.features.aiStudio!==!1,autoPublishAiBuilds:e.features.autoPublishAiBuilds!==!1,customDomain:e.features.customDomain===!0,sso:e.features.sso===!0,scim:e.features.scim===!0}:j.features,telemetry:(()=>{let t=C(e);return t?{errorReporting:t}:{}})(),branding:e.branding?{productName:typeof e.branding.productName==`string`&&e.branding.productName.trim()?e.branding.productName.trim():j.branding.productName,productShortName:typeof e.branding.productShortName==`string`&&e.branding.productShortName.trim()?e.branding.productShortName.trim():j.branding.productShortName,stage:A(e.branding.stage)?e.branding.stage:j.branding.stage,logoUrl:typeof e.branding.logoUrl==`string`&&e.branding.logoUrl.trim()?e.branding.logoUrl.trim():j.branding.logoUrl,faviconUrl:typeof e.branding.faviconUrl==`string`&&e.branding.faviconUrl.trim()?e.branding.faviconUrl.trim():j.branding.faviconUrl,brandColor:typeof e.branding.brandColor==`string`&&e.branding.brandColor.trim()?e.branding.brandColor.trim():j.branding.brandColor,pwaDescription:typeof e.branding.pwaDescription==`string`&&e.branding.pwaDescription.trim()?e.branding.pwaDescription.trim():j.branding.pwaDescription,pwaThemeColor:typeof e.branding.pwaThemeColor==`string`&&e.branding.pwaThemeColor.trim()?e.branding.pwaThemeColor.trim():j.branding.pwaThemeColor}:j.branding})}catch{}}function P(){return j}function F(){return j.branding?.productName||`ObjectOS`}function ae(){return j.branding?.productShortName||F()}function oe(){return j.branding?.stage??`preview`}function se(){return j.branding?.brandColor||`#4F46E5`}function ce(){return j.branding?.logoUrl}function le(){return j.branding?.faviconUrl}function ue(){return j.branding?.pwaDescription||`${F()} — runtime console`}function de(){return j.branding?.pwaThemeColor||se()}function I(){return j.cloudUrl??``}function L(){return j.features?.marketplace!==!1}function R(){return j.features?.aiStudio!==!1}function z(){return j.telemetry?.errorReporting??null}var B=``.replace(/\/$/,``),V=`${B}/api/v1/marketplace`;function H(e){let t=o.get();return t?{...e,Authorization:`Bearer ${t}`}:e}function U(e,t){let n=e?.error?.code??e?.code??`HTTP_${t.status}`,r=e?.error?.message??e?.error??e?.message??t.statusText;return{code:String(n),message:typeof r==`string`?r:String(n)}}async function W(e,t){let n=await fetch(`${V}${e}`,{credentials:`omit`,headers:{Accept:`application/json`,...t?.headers||{}},...t}),r=null;try{r=await n.json()}catch{}if(!n.ok){let{code:e,message:t}=U(r,n),i=Error(typeof t==`string`?t:`${e}`);throw i.code=e,i.status=n.status,i}return r?.data??r}async function fe(e={}){let t=new URLSearchParams;e.q&&t.set(`q`,e.q),e.category&&t.set(`category`,e.category),e.limit!=null&&t.set(`limit`,String(e.limit)),e.offset!=null&&t.set(`offset`,String(e.offset));let n=t.toString();return W(`/packages${n?`?${n}`:``}`)}async function pe(e){return W(`/packages/${encodeURIComponent(e)}`)}async function me(e){if(I()){let t=await fetch(`/api/v1/cloud-connection/install`,{method:`POST`,credentials:`include`,headers:H({Accept:`application/json`,"Content-Type":`application/json`}),body:JSON.stringify({package_id:e.packageId,seed_sample_data:!!e.seedSampleData})}),n=null;try{n=await t.json()}catch{}if(!t.ok||n?.success===!1){let{code:e,message:r}=U(n,t),i=Error(typeof r==`string`?r:`${e}`);throw i.code=e,i.status=t.status,i}return n?.data??n}let t=await fetch(`${B}/api/v1/actions/sys_package/install_package`,{method:`POST`,credentials:`include`,headers:{Accept:`application/json`,"Content-Type":`application/json`},body:JSON.stringify({recordId:e.packageId,params:{environment_id:e.environmentId,seed_sample_data:!!e.seedSampleData}})}),n=null;try{n=await t.json()}catch{}let r=n?.data,i=!!r&&typeof r==`object`&&r.success===!1;if(!t.ok||i){let e=U(n,t),a=n?.code??e.code,o=i?r.error??t.statusText:e.message,s=Error(typeof o==`string`?o:`${a}`);throw s.code=a,s.status=t.status,s}return n?.data??n}async function he(){let e=I()||B,t=await fetch(`${e}/api/v1/data/sys_environment?limit=200`,{credentials:`include`,headers:{Accept:`application/json`}});if(!t.ok){let e=Error(`HTTP_${t.status}`);throw e.status=t.status,e}let n=await t.json().catch(()=>({})),r=n?.records??n?.data??n?.items??n??[];return Array.isArray(r)?r:[]}async function ge(){let e=I()||B,t=null;try{let n=await fetch(`${e}/api/v1/auth/get-session`,{credentials:`include`,headers:{Accept:`application/json`}});n.ok&&(t=(await n.json().catch(()=>({})))?.user?.id??null)}catch{}if(!t)return new Set;let n=`${e}/api/v1/data/sys_member?limit=200`,r;try{let e=await fetch(n,{credentials:`include`,headers:{Accept:`application/json`}});if(!e.ok)return new Set;r=await e.json().catch(()=>({}))}catch{return new Set}let i=r?.records??r?.data??r?.items??r??[];if(!Array.isArray(i))return new Set;let a=new Set;for(let e of i){if(String(e?.user_id??e?.userId??``)!==t)continue;let n=String(e?.role??``).toLowerCase(),r=e?.organization_id??e?.organizationId;r&&(n===`owner`||n===`admin`)&&a.add(String(r))}return a}function _e(){return I()}async function ve(e,t){if(!e)return null;if(I())try{let t=await fetch(`/api/v1/cloud-connection/installation?package_id=${encodeURIComponent(e)}`,{credentials:`include`,headers:H({Accept:`application/json`})});if(!t.ok)return null;let n=await t.json().catch(()=>({})),r=n?.data??n??{};return r.installed?{installationId:String(r.installationId??``),version:String(r.version??`installed`),withSampleData:r.withSampleData===!0}:null}catch{return null}if(!t)return null;let n=B;try{let r=await fetch(`${n}/api/v1/cloud/environments/${encodeURIComponent(t)}/installations/${encodeURIComponent(e)}`,{credentials:`include`,headers:{Accept:`application/json`}});if(!r.ok)return null;let i=await r.json().catch(()=>({})),a=i?.data??i??{};return a.installed?{installationId:String(a.installationId??``),version:String(a.version??`installed`),withSampleData:a.withSampleData===!0}:null}catch{return null}}async function ye(e){if(!e)return{ok:!1,error:`installation id required`};let t=I()||B;try{let n=await fetch(`${t}/api/v1/cloud/installations/${encodeURIComponent(e)}/reseed-sample-data`,{method:`POST`,credentials:`include`,headers:{Accept:`application/json`,"Content-Type":`application/json`},body:`{}`}),r=await n.json().catch(()=>({}));if(!n.ok||r?.success===!1){let{code:e,message:t}=U(r,n);return{ok:!1,error:t,code:e}}return{ok:!0}}catch(e){return{ok:!1,error:e?.message||`Network error`}}}async function be(e){if(!e)return{ok:!1,error:`installation id required`};let t=I()||B;try{let n=await fetch(`${t}/api/v1/cloud/installations/${encodeURIComponent(e)}/purge-sample-data`,{method:`POST`,credentials:`include`,headers:{Accept:`application/json`,"Content-Type":`application/json`},body:`{}`}),r=await n.json().catch(()=>({}));if(!n.ok||r?.success===!1){let{code:e,message:t}=U(r,n);return{ok:!1,error:t,code:e}}return{ok:!0,deleted:Number(r?.data?.deleted??0)}}catch(e){return{ok:!1,error:e?.message||`Network error`}}}async function xe(){try{let e=await fetch(`${B}/api/v1/cloud-connection/org-packages`,{credentials:`include`,headers:{Accept:`application/json`}});if(!e.ok)return{connected:!1,items:[]};let t=(await e.json().catch(()=>({})))?.data??{},n=Array.isArray(t.items)?t.items:[];return{connected:t.connected===!0,items:n}}catch{return{connected:!1,items:[]}}}async function Se(e){let t=await fetch(`${V}/install-local`,{method:`POST`,credentials:`include`,headers:{Accept:`application/json`,"Content-Type":`application/json`},body:JSON.stringify({packageId:e.packageId,...e.versionId?{versionId:e.versionId}:{}})}),n=null;try{n=await t.json()}catch{}if(!t.ok){let{code:e,message:r}=U(n,t),i=Error(typeof r==`string`?r:`${e}`);throw i.code=e,i.status=t.status,i}return n?.data??n}async function G(){try{let e=await fetch(`${V}/install-local`,{credentials:`include`,headers:{Accept:`application/json`}});if(!e.ok)return[];let t=await e.json().catch(()=>({})),n=t?.data?.items??t?.items??[];return Array.isArray(n)?n:[]}catch{return[]}}async function K(){try{let e=await fetch(`${B}/api/v1/cloud-connection/installed`,{credentials:`include`,headers:{Accept:`application/json`}});if(!e.ok)return{connected:!1,items:[]};let t=(await e.json().catch(()=>({})))?.data??{},n=(Array.isArray(t.packages)?t.packages:[]).map(e=>{let t=String(e.packageId??e.package_id??``);return{packageId:t,versionId:String(e.package_version_id??``),manifestId:t,version:String(e.version??`installed`),installedAt:String(e.installed_at??e.installedAt??``),installedBy:e.installed_by??e.installedBy??null,withSampleData:e.with_sample_data===!0||e.withSampleData===!0}});return{connected:t.connected===!0,items:n}}catch{return{connected:!1,items:[]}}}async function q(e){let t=await fetch(`${V}/install-local/${encodeURIComponent(e)}`,{method:`DELETE`,credentials:`include`,headers:{Accept:`application/json`}});if(!t.ok){let e=await t.json().catch(()=>({}));throw Error(U(e,t).message)}}async function J(e,t){let n=await fetch(`${V}/install-local/${encodeURIComponent(e)}/${t===`reseed`?`reseed-sample-data`:`purge-sample-data`}`,{method:`POST`,credentials:`include`,headers:{Accept:`application/json`}}),r=await n.json().catch(()=>({}));if(!n.ok){let e=r?.error?.message??n.statusText,t=Error(typeof e==`string`?e:`HTTP_${n.status}`);throw t.code=r?.error?.code??`HTTP_${n.status}`,t}return r?.data??r}function Ce(e){return J(e,`reseed`)}function we(e){return J(e,`purge`)}function Y(){let e=t(),{appName:r}=n(),{t:i}=_(),a=r?`/apps/${r}`:`/`;return(0,S.jsx)(`div`,{className:`container mx-auto max-w-2xl px-6 py-16`,children:(0,S.jsx)(s,{children:(0,S.jsxs)(u,{className:`flex flex-col items-center gap-4 py-12 text-center`,children:[(0,S.jsx)(`div`,{className:`rounded-full bg-muted p-3`,children:(0,S.jsx)(y,{className:`h-6 w-6 text-muted-foreground`})}),(0,S.jsxs)(`div`,{children:[(0,S.jsx)(`h2`,{className:`text-lg font-semibold`,children:i(`marketplace.accessDenied.title`)}),(0,S.jsx)(`p`,{className:`mt-1 text-sm text-muted-foreground`,children:i(`marketplace.accessDenied.description`)})]}),(0,S.jsx)(p,{variant:`outline`,onClick:()=>e(a),children:i(`marketplace.action.backHome`)})]})})})}var X=`${``.replace(/\/$/,``)}/api/v1/security/suggested-bindings`;function Z(e={}){let t={Accept:`application/json`,...e},n=o.get();return n?{...t,Authorization:`Bearer ${n}`}:t}async function Q(e){let t=null;try{t=await e.json()}catch{}if(!e.ok){let n=t?.error?.code??`HTTP_${e.status}`,r=t?.error?.message??t?.error??e.statusText,i=Error(typeof r==`string`?r:String(n));throw i.code=n,i.status=e.status,i}return t?.data??t}async function Te(e={}){let t=new URLSearchParams;e.status&&t.set(`status`,e.status),e.packageId&&t.set(`packageId`,e.packageId);let n=t.toString(),r=await Q(await fetch(`${X}${n?`?${n}`:``}`,{credentials:`include`,headers:Z()}));return Array.isArray(r?.suggestions)?r.suggestions:[]}async function Ee(e){return(await Q(await fetch(`${X}/${encodeURIComponent(e)}/confirm`,{method:`POST`,credentials:`include`,headers:Z({"Content-Type":`application/json`})})))?.suggestion}async function De(e){return(await Q(await fetch(`${X}/${encodeURIComponent(e)}/dismiss`,{method:`POST`,credentials:`include`,headers:Z({"Content-Type":`application/json`})})))?.suggestion}function Oe({packageId:e,strings:t,className:n,onResolved:r}){let[i,a]=(0,x.useState)([]),[o,s]=(0,x.useState)(null),c=(0,x.useCallback)(()=>{let t=!1;return Te({status:`pending`,...e?{packageId:e}:{}}).then(e=>{t||a(e)}).catch(()=>{}),()=>{t=!0}},[e]);(0,x.useEffect)(()=>c(),[c]);let l=async(e,n)=>{s(e.id);try{let i=n===`confirm`?await Ee(e.id):await De(e.id);a(t=>t.filter(t=>t.id!==e.id)),v.success(n===`confirm`?t.confirmedToast(e):t.dismissedToast(e)),r?.(i??e)}catch(e){v.error(e?.message??String(e))}finally{s(null)}};return i.length===0?null:(0,S.jsx)(`div`,{"data-testid":`suggested-bindings-panel`,className:f(`rounded-lg border border-amber-300/60 dark:border-amber-700/50 bg-amber-50 dark:bg-amber-950/30 px-3 py-2 space-y-2`,n),children:i.map(e=>(0,S.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,S.jsx)(b,{className:`h-4 w-4 shrink-0 text-amber-600 dark:text-amber-400`}),(0,S.jsx)(`p`,{className:`flex-1 min-w-0 text-sm text-amber-900 dark:text-amber-200`,children:t.describe(e)}),(0,S.jsx)(p,{size:`sm`,disabled:o===e.id,onClick:()=>l(e,`confirm`),"data-testid":`suggested-binding-confirm-${e.permission_set_name}`,children:o===e.id?t.confirming:t.confirm}),(0,S.jsx)(p,{size:`sm`,variant:`ghost`,disabled:o===e.id,onClick:()=>l(e,`dismiss`),"data-testid":`suggested-binding-dismiss-${e.permission_set_name}`,children:t.dismiss})]},e.id))})}function $(){let e=t(),{appName:r}=n(),{isAdmin:i}=a(),{t:o}=_(),f=g(),m=r?`/apps/${r}`:``,[h,v]=(0,x.useState)([]),[y,b]=(0,x.useState)(`local`),[C,w]=(0,x.useState)(!0),[T,E]=(0,x.useState)(null),[D,O]=(0,x.useState)(null),k=async()=>{w(!0);try{let e=await K();e.connected?(b(`cloud`),v(e.items)):(b(`local`),v(await G()))}finally{w(!1)}};(0,x.useEffect)(()=>{k()},[]);let A=async e=>{if(confirm(o(`marketplace.uninstall.confirm`,{manifestId:e.manifestId,version:e.version}))){E(e.manifestId),O(null);try{await q(e.manifestId),O({ok:!0,message:o(`marketplace.uninstall.successInList`,{manifestId:e.manifestId})}),await k()}catch(e){O({ok:!1,message:e?.message??String(e)})}finally{E(null)}}};return i?(0,S.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,S.jsx)(`div`,{className:`flex justify-end`,children:(0,S.jsxs)(p,{variant:`outline`,size:`sm`,onClick:()=>void k(),disabled:C,children:[(0,S.jsx)(re,{className:`h-4 w-4 mr-1.5`,"aria-hidden":`true`}),o(`marketplace.refresh`)]})}),D&&(0,S.jsx)(`div`,{className:`rounded-md border p-3 text-sm ${D.ok?`border-green-500/30 bg-green-500/5 text-green-700 dark:text-green-400`:`border-destructive/30 bg-destructive/5 text-destructive`}`,children:(0,S.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,S.jsx)(te,{className:`h-4 w-4 mt-0.5 shrink-0`,"aria-hidden":`true`}),(0,S.jsx)(`div`,{children:D.message})]})}),C&&h.length===0?(0,S.jsx)(`div`,{className:`grid gap-3`,children:Array.from({length:3}).map((e,t)=>(0,S.jsx)(c,{className:`h-20 w-full`},t))}):h.length===0?(0,S.jsxs)(`div`,{className:`text-center py-12 text-sm text-muted-foreground border rounded-md`,children:[(0,S.jsx)(`p`,{children:o(`marketplace.installedEmpty`)}),(0,S.jsx)(p,{variant:`link`,className:`mt-2`,onClick:()=>e(`${m}/system/marketplace`),children:o(`marketplace.browseLink`)})]}):(0,S.jsx)(`div`,{className:`grid gap-3`,children:h.map(t=>(0,S.jsxs)(s,{children:[(0,S.jsxs)(l,{className:`flex flex-row items-start justify-between gap-3 pb-2`,children:[(0,S.jsxs)(`div`,{className:`min-w-0`,children:[(0,S.jsxs)(d,{className:`text-base truncate flex items-center gap-2`,children:[t.manifestId,(0,S.jsx)(ee,{variant:`outline`,children:o(`marketplace.versionBadge`,{version:t.version})})]}),(0,S.jsxs)(`div`,{className:`text-xs text-muted-foreground mt-1 flex flex-wrap gap-x-3 gap-y-1`,children:[(0,S.jsx)(`span`,{children:o(`marketplace.installedAt`,{when:new Date(t.installedAt).toLocaleString(f)})}),t.installedBy&&(0,S.jsx)(`span`,{children:o(`marketplace.installedBy`,{user:t.installedBy})}),(0,S.jsxs)(`span`,{children:[o(`marketplace.installedPackageId`),` `,(0,S.jsx)(`code`,{className:`font-mono`,children:t.packageId})]})]})]}),(0,S.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0`,children:[(0,S.jsxs)(p,{variant:`ghost`,size:`sm`,onClick:()=>e(`${m}/system/marketplace/${t.packageId}`),children:[(0,S.jsx)(ne,{className:`h-4 w-4 mr-1.5`,"aria-hidden":`true`}),o(`marketplace.action.details`)]}),y===`local`&&(0,S.jsxs)(p,{variant:`outline`,size:`sm`,onClick:()=>void A(t),disabled:T===t.manifestId,children:[(0,S.jsx)(ie,{className:`h-4 w-4 mr-1.5`,"aria-hidden":`true`}),T===t.manifestId?o(`marketplace.action.uninstalling`):o(`marketplace.action.uninstall`)]})]})]}),y===`local`&&(0,S.jsx)(u,{className:`pt-0 text-xs text-muted-foreground`,dangerouslySetInnerHTML:{__html:o(`marketplace.cachedAs`,{path:`.objectstack/installed-packages/${t.manifestId.replace(/[^a-zA-Z0-9._-]/g,`_`)}.json`})}})]},t.manifestId))}),(0,S.jsx)(`p`,{className:`text-xs text-muted-foreground border-t pt-4`,dangerouslySetInnerHTML:{__html:o(`marketplace.installedAdditiveNote`)}})]}):(0,S.jsx)(Y,{})}h.register(`marketplace:installed-list`,()=>(0,S.jsx)($,{}),{namespace:`app-shell`,label:`Installed Marketplace Packages`,category:`plugin`,inputs:[]});export{N as A,ce as C,ue as D,ae as E,L as M,de as O,le as S,F as T,Ce as _,ve as a,z as b,me as c,K as d,G as f,be as g,we as h,_e as i,R as j,P as k,he as l,xe as m,Oe as n,pe as o,fe as p,Y as r,Se as s,$ as t,ge as u,ye as v,oe as w,I as x,q as y};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{Jr as e,Qr as t,Xr as n,qr as r}from"./ui-components-D6cEVg0T.js";var i={lessThanXSeconds:{one:`أقل من ثانية`,two:`أقل من ثانيتين`,threeToTen:`أقل من {{count}} ثواني`,other:`أقل من {{count}} ثانية`},xSeconds:{one:`ثانية واحدة`,two:`ثانيتان`,threeToTen:`{{count}} ثواني`,other:`{{count}} ثانية`},halfAMinute:`نصف دقيقة`,lessThanXMinutes:{one:`أقل من دقيقة`,two:`أقل من دقيقتين`,threeToTen:`أقل من {{count}} دقائق`,other:`أقل من {{count}} دقيقة`},xMinutes:{one:`دقيقة واحدة`,two:`دقيقتان`,threeToTen:`{{count}} دقائق`,other:`{{count}} دقيقة`},aboutXHours:{one:`ساعة واحدة تقريباً`,two:`ساعتين تقريبا`,threeToTen:`{{count}} ساعات تقريباً`,other:`{{count}} ساعة تقريباً`},xHours:{one:`ساعة واحدة`,two:`ساعتان`,threeToTen:`{{count}} ساعات`,other:`{{count}} ساعة`},xDays:{one:`يوم واحد`,two:`يومان`,threeToTen:`{{count}} أيام`,other:`{{count}} يوم`},aboutXWeeks:{one:`أسبوع واحد تقريبا`,two:`أسبوعين تقريبا`,threeToTen:`{{count}} أسابيع تقريبا`,other:`{{count}} أسبوعا تقريبا`},xWeeks:{one:`أسبوع واحد`,two:`أسبوعان`,threeToTen:`{{count}} أسابيع`,other:`{{count}} أسبوعا`},aboutXMonths:{one:`شهر واحد تقريباً`,two:`شهرين تقريبا`,threeToTen:`{{count}} أشهر تقريبا`,other:`{{count}} شهرا تقريباً`},xMonths:{one:`شهر واحد`,two:`شهران`,threeToTen:`{{count}} أشهر`,other:`{{count}} شهرا`},aboutXYears:{one:`سنة واحدة تقريباً`,two:`سنتين تقريبا`,threeToTen:`{{count}} سنوات تقريباً`,other:`{{count}} سنة تقريباً`},xYears:{one:`سنة واحد`,two:`سنتان`,threeToTen:`{{count}} سنوات`,other:`{{count}} سنة`},overXYears:{one:`أكثر من سنة`,two:`أكثر من سنتين`,threeToTen:`أكثر من {{count}} سنوات`,other:`أكثر من {{count}} سنة`},almostXYears:{one:`ما يقارب سنة واحدة`,two:`ما يقارب سنتين`,threeToTen:`ما يقارب {{count}} سنوات`,other:`ما يقارب {{count}} سنة`}},a=(e,t,n)=>{let r=i[e],a;return a=typeof r==`string`?r:t===1?r.one:t===2?r.two:t<=10?r.threeToTen.replace(`{{count}}`,String(t)):r.other.replace(`{{count}}`,String(t)),n?.addSuffix?n.comparison&&n.comparison>0?`خلال `+a:`منذ `+a:a},o={date:t({formats:{full:`EEEE، do MMMM y`,long:`do MMMM y`,medium:`d MMM y`,short:`dd/MM/yyyy`},defaultWidth:`full`}),time:t({formats:{full:`HH:mm:ss`,long:`HH:mm:ss`,medium:`HH:mm:ss`,short:`HH:mm`},defaultWidth:`full`}),dateTime:t({formats:{full:`{{date}} 'عند الساعة' {{time}}`,long:`{{date}} 'عند الساعة' {{time}}`,medium:`{{date}}, {{time}}`,short:`{{date}}, {{time}}`},defaultWidth:`full`})},s={lastWeek:`eeee 'الماضي عند الساعة' p`,yesterday:`'الأمس عند الساعة' p`,today:`'اليوم عند الساعة' p`,tomorrow:`'غدا عند الساعة' p`,nextWeek:`eeee 'القادم عند الساعة' p`,other:`P`},c={code:`ar`,formatDistance:a,formatLong:o,formatRelative:e=>s[e],localize:{ordinalNumber:e=>String(e),era:n({values:{narrow:[`ق`,`ب`],abbreviated:[`ق.م.`,`ب.م.`],wide:[`قبل الميلاد`,`بعد الميلاد`]},defaultWidth:`wide`}),quarter:n({values:{narrow:[`1`,`2`,`3`,`4`],abbreviated:[`ر1`,`ر2`,`ر3`,`ر4`],wide:[`الربع الأول`,`الربع الثاني`,`الربع الثالث`,`الربع الرابع`]},defaultWidth:`wide`,argumentCallback:e=>e-1}),month:n({values:{narrow:[`ي`,`ف`,`م`,`أ`,`م`,`ي`,`ي`,`أ`,`س`,`أ`,`ن`,`د`],abbreviated:[`يناير`,`فبراير`,`مارس`,`أبريل`,`مايو`,`يونيو`,`يوليو`,`أغسطس`,`سبتمبر`,`أكتوبر`,`نوفمبر`,`ديسمبر`],wide:[`يناير`,`فبراير`,`مارس`,`أبريل`,`مايو`,`يونيو`,`يوليو`,`أغسطس`,`سبتمبر`,`أكتوبر`,`نوفمبر`,`ديسمبر`]},defaultWidth:`wide`}),day:n({values:{narrow:[`ح`,`ن`,`ث`,`ر`,`خ`,`ج`,`س`],short:[`أحد`,`اثنين`,`ثلاثاء`,`أربعاء`,`خميس`,`جمعة`,`سبت`],abbreviated:[`أحد`,`اثنين`,`ثلاثاء`,`أربعاء`,`خميس`,`جمعة`,`سبت`],wide:[`الأحد`,`الاثنين`,`الثلاثاء`,`الأربعاء`,`الخميس`,`الجمعة`,`السبت`]},defaultWidth:`wide`}),dayPeriod:n({values:{narrow:{am:`ص`,pm:`م`,morning:`الصباح`,noon:`الظهر`,afternoon:`بعد الظهر`,evening:`المساء`,night:`الليل`,midnight:`منتصف الليل`},abbreviated:{am:`ص`,pm:`م`,morning:`الصباح`,noon:`الظهر`,afternoon:`بعد الظهر`,evening:`المساء`,night:`الليل`,midnight:`منتصف الليل`},wide:{am:`ص`,pm:`م`,morning:`الصباح`,noon:`الظهر`,afternoon:`بعد الظهر`,evening:`المساء`,night:`الليل`,midnight:`منتصف الليل`}},defaultWidth:`wide`,formattingValues:{narrow:{am:`ص`,pm:`م`,morning:`في الصباح`,noon:`الظهر`,afternoon:`بعد الظهر`,evening:`في المساء`,night:`في الليل`,midnight:`منتصف الليل`},abbreviated:{am:`ص`,pm:`م`,morning:`في الصباح`,noon:`الظهر`,afternoon:`بعد الظهر`,evening:`في المساء`,night:`في الليل`,midnight:`منتصف الليل`},wide:{am:`ص`,pm:`م`,morning:`في الصباح`,noon:`الظهر`,afternoon:`بعد الظهر`,evening:`في المساء`,night:`في الليل`,midnight:`منتصف الليل`}},defaultFormattingWidth:`wide`})},match:{ordinalNumber:r({matchPattern:/^(\d+)(th|st|nd|rd)?/i,parsePattern:/\d+/i,valueCallback:e=>parseInt(e,10)}),era:e({matchPatterns:{narrow:/[قب]/,abbreviated:/[قب]\.م\./,wide:/(قبل|بعد) الميلاد/},defaultMatchWidth:`wide`,parsePatterns:{any:[/قبل/,/بعد/]},defaultParseWidth:`any`}),quarter:e({matchPatterns:{narrow:/^[1234]/i,abbreviated:/ر[1234]/,wide:/الربع (الأول|الثاني|الثالث|الرابع)/},defaultMatchWidth:`wide`,parsePatterns:{any:[/1/i,/2/i,/3/i,/4/i]},defaultParseWidth:`any`,valueCallback:e=>e+1}),month:e({matchPatterns:{narrow:/^[أيفمسند]/,abbreviated:/^(يناير|فبراير|مارس|أبريل|مايو|يونيو|يوليو|أغسطس|سبتمبر|أكتوبر|نوفمبر|ديسمبر)/,wide:/^(يناير|فبراير|مارس|أبريل|مايو|يونيو|يوليو|أغسطس|سبتمبر|أكتوبر|نوفمبر|ديسمبر)/},defaultMatchWidth:`wide`,parsePatterns:{narrow:[/^ي/i,/^ف/i,/^م/i,/^أ/i,/^م/i,/^ي/i,/^ي/i,/^أ/i,/^س/i,/^أ/i,/^ن/i,/^د/i],any:[/^يناير/i,/^فبراير/i,/^مارس/i,/^أبريل/i,/^مايو/i,/^يونيو/i,/^يوليو/i,/^أغسطس/i,/^سبتمبر/i,/^أكتوبر/i,/^نوفمبر/i,/^ديسمبر/i]},defaultParseWidth:`any`}),day:e({matchPatterns:{narrow:/^[حنثرخجس]/i,short:/^(أحد|اثنين|ثلاثاء|أربعاء|خميس|جمعة|سبت)/i,abbreviated:/^(أحد|اثنين|ثلاثاء|أربعاء|خميس|جمعة|سبت)/i,wide:/^(الأحد|الاثنين|الثلاثاء|الأربعاء|الخميس|الجمعة|السبت)/i},defaultMatchWidth:`wide`,parsePatterns:{narrow:[/^ح/i,/^ن/i,/^ث/i,/^ر/i,/^خ/i,/^ج/i,/^س/i],wide:[/^الأحد/i,/^الاثنين/i,/^الثلاثاء/i,/^الأربعاء/i,/^الخميس/i,/^الجمعة/i,/^السبت/i],any:[/^أح/i,/^اث/i,/^ث/i,/^أر/i,/^خ/i,/^ج/i,/^س/i]},defaultParseWidth:`any`}),dayPeriod:e({matchPatterns:{narrow:/^(ص|م|منتصف الليل|الظهر|بعد الظهر|في الصباح|في المساء|في الليل)/,any:/^(ص|م|منتصف الليل|الظهر|بعد الظهر|في الصباح|في المساء|في الليل)/},defaultMatchWidth:`any`,parsePatterns:{any:{am:/^ص/,pm:/^م/,midnight:/منتصف الليل/,noon:/الظهر/,afternoon:/بعد الظهر/,morning:/في الصباح/,evening:/في المساء/,night:/في الليل/}},defaultParseWidth:`any`})},options:{weekStartsOn:6,firstWeekContainsDate:1}};export{c as ar,c as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{Jr as e,Qr as t,Xr as n,qr as r}from"./ui-components-D6cEVg0T.js";var i={lessThanXSeconds:{one:`أقل من ثانية واحدة`,two:`أقل من ثانتين`,threeToTen:`أقل من {{count}} ثواني`,other:`أقل من {{count}} ثانية`},xSeconds:{one:`ثانية واحدة`,two:`ثانتين`,threeToTen:`{{count}} ثواني`,other:`{{count}} ثانية`},halfAMinute:`نصف دقيقة`,lessThanXMinutes:{one:`أقل من دقيقة`,two:`أقل من دقيقتين`,threeToTen:`أقل من {{count}} دقائق`,other:`أقل من {{count}} دقيقة`},xMinutes:{one:`دقيقة واحدة`,two:`دقيقتين`,threeToTen:`{{count}} دقائق`,other:`{{count}} دقيقة`},aboutXHours:{one:`ساعة واحدة تقريباً`,two:`ساعتين تقريباً`,threeToTen:`{{count}} ساعات تقريباً`,other:`{{count}} ساعة تقريباً`},xHours:{one:`ساعة واحدة`,two:`ساعتين`,threeToTen:`{{count}} ساعات`,other:`{{count}} ساعة`},xDays:{one:`يوم واحد`,two:`يومين`,threeToTen:`{{count}} أيام`,other:`{{count}} يوم`},aboutXWeeks:{one:`أسبوع واحد تقريباً`,two:`أسبوعين تقريباً`,threeToTen:`{{count}} أسابيع تقريباً`,other:`{{count}} أسبوع تقريباً`},xWeeks:{one:`أسبوع واحد`,two:`أسبوعين`,threeToTen:`{{count}} أسابيع`,other:`{{count}} أسبوع`},aboutXMonths:{one:`شهر واحد تقريباً`,two:`شهرين تقريباً`,threeToTen:`{{count}} أشهر تقريباً`,other:`{{count}} شهر تقريباً`},xMonths:{one:`شهر واحد`,two:`شهرين`,threeToTen:`{{count}} أشهر`,other:`{{count}} شهر`},aboutXYears:{one:`عام واحد تقريباً`,two:`عامين تقريباً`,threeToTen:`{{count}} أعوام تقريباً`,other:`{{count}} عام تقريباً`},xYears:{one:`عام واحد`,two:`عامين`,threeToTen:`{{count}} أعوام`,other:`{{count}} عام`},overXYears:{one:`أكثر من عام`,two:`أكثر من عامين`,threeToTen:`أكثر من {{count}} أعوام`,other:`أكثر من {{count}} عام`},almostXYears:{one:`عام واحد تقريباً`,two:`عامين تقريباً`,threeToTen:`{{count}} أعوام تقريباً`,other:`{{count}} عام تقريباً`}},a=(e,t,n)=>{n||={};let r=i[e],a;return a=typeof r==`string`?r:t===1?r.one:t===2?r.two:t<=10?r.threeToTen.replace(`{{count}}`,String(t)):r.other.replace(`{{count}}`,String(t)),n.addSuffix?n.comparison&&n.comparison>0?`في خلال `+a:`منذ `+a:a},o={date:t({formats:{full:`EEEE, MMMM do, y`,long:`MMMM do, y`,medium:`MMM d, y`,short:`MM/dd/yyyy`},defaultWidth:`full`}),time:t({formats:{full:`h:mm:ss a zzzz`,long:`h:mm:ss a z`,medium:`h:mm:ss a`,short:`h:mm a`},defaultWidth:`full`}),dateTime:t({formats:{full:`{{date}} 'عند' {{time}}`,long:`{{date}} 'عند' {{time}}`,medium:`{{date}}, {{time}}`,short:`{{date}}, {{time}}`},defaultWidth:`full`})},s={lastWeek:`'أخر' eeee 'عند' p`,yesterday:`'أمس عند' p`,today:`'اليوم عند' p`,tomorrow:`'غداً عند' p`,nextWeek:`eeee 'عند' p`,other:`P`},c={code:`ar-DZ`,formatDistance:a,formatLong:o,formatRelative:(e,t,n,r)=>s[e],localize:{ordinalNumber:e=>String(e),era:n({values:{narrow:[`ق`,`ب`],abbreviated:[`ق.م.`,`ب.م.`],wide:[`قبل الميلاد`,`بعد الميلاد`]},defaultWidth:`wide`}),quarter:n({values:{narrow:[`1`,`2`,`3`,`4`],abbreviated:[`ر1`,`ر2`,`ر3`,`ر4`],wide:[`الربع الأول`,`الربع الثاني`,`الربع الثالث`,`الربع الرابع`]},defaultWidth:`wide`,argumentCallback:e=>Number(e)-1}),month:n({values:{narrow:[`ج`,`ف`,`م`,`أ`,`م`,`ج`,`ج`,`أ`,`س`,`أ`,`ن`,`د`],abbreviated:[`جانـ`,`فيفـ`,`مارس`,`أفريل`,`مايـ`,`جوانـ`,`جويـ`,`أوت`,`سبتـ`,`أكتـ`,`نوفـ`,`ديسـ`],wide:[`جانفي`,`فيفري`,`مارس`,`أفريل`,`ماي`,`جوان`,`جويلية`,`أوت`,`سبتمبر`,`أكتوبر`,`نوفمبر`,`ديسمبر`]},defaultWidth:`wide`}),day:n({values:{narrow:[`ح`,`ن`,`ث`,`ر`,`خ`,`ج`,`س`],short:[`أحد`,`اثنين`,`ثلاثاء`,`أربعاء`,`خميس`,`جمعة`,`سبت`],abbreviated:[`أحد`,`اثنـ`,`ثلا`,`أربـ`,`خميـ`,`جمعة`,`سبت`],wide:[`الأحد`,`الاثنين`,`الثلاثاء`,`الأربعاء`,`الخميس`,`الجمعة`,`السبت`]},defaultWidth:`wide`}),dayPeriod:n({values:{narrow:{am:`ص`,pm:`م`,midnight:`ن`,noon:`ظ`,morning:`صباحاً`,afternoon:`بعد الظهر`,evening:`مساءاً`,night:`ليلاً`},abbreviated:{am:`ص`,pm:`م`,midnight:`نصف الليل`,noon:`ظهر`,morning:`صباحاً`,afternoon:`بعد الظهر`,evening:`مساءاً`,night:`ليلاً`},wide:{am:`ص`,pm:`م`,midnight:`نصف الليل`,noon:`ظهر`,morning:`صباحاً`,afternoon:`بعد الظهر`,evening:`مساءاً`,night:`ليلاً`}},defaultWidth:`wide`,formattingValues:{narrow:{am:`ص`,pm:`م`,midnight:`ن`,noon:`ظ`,morning:`في الصباح`,afternoon:`بعد الظـهر`,evening:`في المساء`,night:`في الليل`},abbreviated:{am:`ص`,pm:`م`,midnight:`نصف الليل`,noon:`ظهر`,morning:`في الصباح`,afternoon:`بعد الظهر`,evening:`في المساء`,night:`في الليل`},wide:{am:`ص`,pm:`م`,midnight:`نصف الليل`,noon:`ظهر`,morning:`صباحاً`,afternoon:`بعد الظـهر`,evening:`في المساء`,night:`في الليل`}},defaultFormattingWidth:`wide`})},match:{ordinalNumber:r({matchPattern:/^(\d+)(th|st|nd|rd)?/i,parsePattern:/\d+/i,valueCallback:e=>parseInt(e,10)}),era:e({matchPatterns:{narrow:/^(ق|ب)/i,abbreviated:/^(ق\.?\s?م\.?|ق\.?\s?م\.?\s?|a\.?\s?d\.?|c\.?\s?)/i,wide:/^(قبل الميلاد|قبل الميلاد|بعد الميلاد|بعد الميلاد)/i},defaultMatchWidth:`wide`,parsePatterns:{any:[/^قبل/i,/^بعد/i]},defaultParseWidth:`any`}),quarter:e({matchPatterns:{narrow:/^[1234]/i,abbreviated:/^ر[1234]/i,wide:/^الربع [1234]/i},defaultMatchWidth:`wide`,parsePatterns:{any:[/1/i,/2/i,/3/i,/4/i]},defaultParseWidth:`any`,valueCallback:e=>Number(e)+1}),month:e({matchPatterns:{narrow:/^[جفمأسند]/i,abbreviated:/^(جان|فيف|مار|أفر|ماي|جوا|جوي|أوت|سبت|أكت|نوف|ديس)/i,wide:/^(جانفي|فيفري|مارس|أفريل|ماي|جوان|جويلية|أوت|سبتمبر|أكتوبر|نوفمبر|ديسمبر)/i},defaultMatchWidth:`wide`,parsePatterns:{narrow:[/^ج/i,/^ف/i,/^م/i,/^أ/i,/^م/i,/^ج/i,/^ج/i,/^أ/i,/^س/i,/^أ/i,/^ن/i,/^د/i],any:[/^جان/i,/^فيف/i,/^مار/i,/^أفر/i,/^ماي/i,/^جوا/i,/^جوي/i,/^أوت/i,/^سبت/i,/^أكت/i,/^نوف/i,/^ديس/i]},defaultParseWidth:`any`}),day:e({matchPatterns:{narrow:/^[حنثرخجس]/i,short:/^(أحد|اثنين|ثلاثاء|أربعاء|خميس|جمعة|سبت)/i,abbreviated:/^(أحد|اثن|ثلا|أرب|خمي|جمعة|سبت)/i,wide:/^(الأحد|الاثنين|الثلاثاء|الأربعاء|الخميس|الجمعة|السبت)/i},defaultMatchWidth:`wide`,parsePatterns:{narrow:[/^ح/i,/^ن/i,/^ث/i,/^ر/i,/^خ/i,/^ج/i,/^س/i],wide:[/^الأحد/i,/^الاثنين/i,/^الثلاثاء/i,/^الأربعاء/i,/^الخميس/i,/^الجمعة/i,/^السبت/i],any:[/^أح/i,/^اث/i,/^ث/i,/^أر/i,/^خ/i,/^ج/i,/^س/i]},defaultParseWidth:`any`}),dayPeriod:e({matchPatterns:{narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},defaultMatchWidth:`any`,parsePatterns:{any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},defaultParseWidth:`any`})},options:{weekStartsOn:0,firstWeekContainsDate:1}};export{c as arDZ,c as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{Jr as e,Qr as t,Xr as n,qr as r}from"./ui-components-D6cEVg0T.js";var i={lessThanXSeconds:{one:`أقل من ثانية`,two:`أقل من ثانيتين`,threeToTen:`أقل من {{count}} ثواني`,other:`أقل من {{count}} ثانية`},xSeconds:{one:`ثانية`,two:`ثانيتين`,threeToTen:`{{count}} ثواني`,other:`{{count}} ثانية`},halfAMinute:`نص دقيقة`,lessThanXMinutes:{one:`أقل من دقيقة`,two:`أقل من دقيقتين`,threeToTen:`أقل من {{count}} دقايق`,other:`أقل من {{count}} دقيقة`},xMinutes:{one:`دقيقة`,two:`دقيقتين`,threeToTen:`{{count}} دقايق`,other:`{{count}} دقيقة`},aboutXHours:{one:`حوالي ساعة`,two:`حوالي ساعتين`,threeToTen:`حوالي {{count}} ساعات`,other:`حوالي {{count}} ساعة`},xHours:{one:`ساعة`,two:`ساعتين`,threeToTen:`{{count}} ساعات`,other:`{{count}} ساعة`},xDays:{one:`يوم`,two:`يومين`,threeToTen:`{{count}} أيام`,other:`{{count}} يوم`},aboutXWeeks:{one:`حوالي أسبوع`,two:`حوالي أسبوعين`,threeToTen:`حوالي {{count}} أسابيع`,other:`حوالي {{count}} أسبوع`},xWeeks:{one:`أسبوع`,two:`أسبوعين`,threeToTen:`{{count}} أسابيع`,other:`{{count}} أسبوع`},aboutXMonths:{one:`حوالي شهر`,two:`حوالي شهرين`,threeToTen:`حوالي {{count}} أشهر`,other:`حوالي {{count}} شهر`},xMonths:{one:`شهر`,two:`شهرين`,threeToTen:`{{count}} أشهر`,other:`{{count}} شهر`},aboutXYears:{one:`حوالي سنة`,two:`حوالي سنتين`,threeToTen:`حوالي {{count}} سنين`,other:`حوالي {{count}} سنة`},xYears:{one:`عام`,two:`عامين`,threeToTen:`{{count}} أعوام`,other:`{{count}} عام`},overXYears:{one:`أكثر من سنة`,two:`أكثر من سنتين`,threeToTen:`أكثر من {{count}} سنين`,other:`أكثر من {{count}} سنة`},almostXYears:{one:`عام تقريبًا`,two:`عامين تقريبًا`,threeToTen:`{{count}} أعوام تقريبًا`,other:`{{count}} عام تقريبًا`}},a=(e,t,n)=>{let r,a=i[e];return r=typeof a==`string`?a:t===1?a.one:t===2?a.two:t<=10?a.threeToTen.replace(`{{count}}`,String(t)):a.other.replace(`{{count}}`,String(t)),n?.addSuffix?n.comparison&&n.comparison>0?`في خلال ${r}`:`منذ ${r}`:r},o={date:t({formats:{full:`EEEE، do MMMM y`,long:`do MMMM y`,medium:`dd/MMM/y`,short:`d/MM/y`},defaultWidth:`full`}),time:t({formats:{full:`h:mm:ss a zzzz`,long:`h:mm:ss a z`,medium:`h:mm:ss a`,short:`h:mm a`},defaultWidth:`full`}),dateTime:t({formats:{full:`{{date}} 'الساعة' {{time}}`,long:`{{date}} 'الساعة' {{time}}`,medium:`{{date}}, {{time}}`,short:`{{date}}, {{time}}`},defaultWidth:`full`})},s={lastWeek:`eeee 'اللي جاي الساعة' p`,yesterday:`'إمبارح الساعة' p`,today:`'النهاردة الساعة' p`,tomorrow:`'بكرة الساعة' p`,nextWeek:`eeee 'الساعة' p`,other:`P`},c={code:`ar-EG`,formatDistance:a,formatLong:o,formatRelative:(e,t,n,r)=>s[e],localize:{ordinalNumber:(e,t)=>String(e),era:n({values:{narrow:[`ق`,`ب`],abbreviated:[`ق.م`,`ب.م`],wide:[`قبل الميلاد`,`بعد الميلاد`]},defaultWidth:`wide`}),quarter:n({values:{narrow:[`1`,`2`,`3`,`4`],abbreviated:[`ر1`,`ر2`,`ر3`,`ر4`],wide:[`الربع الأول`,`الربع الثاني`,`الربع الثالث`,`الربع الرابع`]},defaultWidth:`wide`,argumentCallback:e=>e-1}),month:n({values:{narrow:[`ي`,`ف`,`م`,`أ`,`م`,`ي`,`ي`,`أ`,`س`,`أ`,`ن`,`د`],abbreviated:[`ينا`,`فبر`,`مارس`,`أبريل`,`مايو`,`يونـ`,`يولـ`,`أغسـ`,`سبتـ`,`أكتـ`,`نوفـ`,`ديسـ`],wide:[`يناير`,`فبراير`,`مارس`,`أبريل`,`مايو`,`يونيو`,`يوليو`,`أغسطس`,`سبتمبر`,`أكتوبر`,`نوفمبر`,`ديسمبر`]},defaultWidth:`wide`}),day:n({values:{narrow:[`ح`,`ن`,`ث`,`ر`,`خ`,`ج`,`س`],short:[`أحد`,`اثنين`,`ثلاثاء`,`أربعاء`,`خميس`,`جمعة`,`سبت`],abbreviated:[`أحد`,`اثنين`,`ثلاثاء`,`أربعاء`,`خميس`,`جمعة`,`سبت`],wide:[`الأحد`,`الاثنين`,`الثلاثاء`,`الأربعاء`,`الخميس`,`الجمعة`,`السبت`]},defaultWidth:`wide`}),dayPeriod:n({values:{narrow:{am:`ص`,pm:`م`,midnight:`ن`,noon:`ظ`,morning:`صباحاً`,afternoon:`بعد الظهر`,evening:`مساءً`,night:`ليلاً`},abbreviated:{am:`ص`,pm:`م`,midnight:`نصف الليل`,noon:`ظهراً`,morning:`صباحاً`,afternoon:`بعد الظهر`,evening:`مساءً`,night:`ليلاً`},wide:{am:`ص`,pm:`م`,midnight:`نصف الليل`,noon:`ظهراً`,morning:`صباحاً`,afternoon:`بعد الظهر`,evening:`مساءً`,night:`ليلاً`}},defaultWidth:`wide`,formattingValues:{narrow:{am:`ص`,pm:`م`,midnight:`ن`,noon:`ظ`,morning:`في الصباح`,afternoon:`بعد الظهر`,evening:`في المساء`,night:`في الليل`},abbreviated:{am:`ص`,pm:`م`,midnight:`نصف الليل`,noon:`ظهراً`,morning:`في الصباح`,afternoon:`بعد الظهر`,evening:`في المساء`,night:`في الليل`},wide:{am:`ص`,pm:`م`,midnight:`نصف الليل`,morning:`في الصباح`,noon:`ظهراً`,afternoon:`بعد الظهر`,evening:`في المساء`,night:`في الليل`}},defaultFormattingWidth:`wide`})},match:{ordinalNumber:r({matchPattern:/^(\d+)/,parsePattern:/\d+/i,valueCallback:function(e){return parseInt(e,10)}}),era:e({matchPatterns:{narrow:/^(ق|ب)/g,abbreviated:/^(ق.م|ب.م)/g,wide:/^(قبل الميلاد|بعد الميلاد)/g},defaultMatchWidth:`wide`,parsePatterns:{any:[/^ق/g,/^ب/g]},defaultParseWidth:`any`}),quarter:e({matchPatterns:{narrow:/^[1234]/,abbreviated:/^ر[1234]/,wide:/^الربع (الأول|الثاني|الثالث|الرابع)/},defaultMatchWidth:`wide`,parsePatterns:{wide:[/الربع الأول/,/الربع الثاني/,/الربع الثالث/,/الربع الرابع/],any:[/1/,/2/,/3/,/4/]},defaultParseWidth:`any`,valueCallback:e=>e+1}),month:e({matchPatterns:{narrow:/^(ي|ف|م|أ|س|ن|د)/,abbreviated:/^(ينا|فبر|مارس|أبريل|مايو|يونـ|يولـ|أغسـ|سبتـ|أكتـ|نوفـ|ديسـ)/,wide:/^(يناير|فبراير|مارس|أبريل|مايو|يونيو|يوليو|أغسطس|سبتمبر|أكتوبر|نوفمبر|ديسمبر)/},defaultMatchWidth:`wide`,parsePatterns:{narrow:[/^ي/,/^ف/,/^م/,/^أ/,/^م/,/^ي/,/^ي/,/^أ/,/^س/,/^أ/,/^ن/,/^د/],any:[/^ينا/,/^فبر/,/^مارس/,/^أبريل/,/^مايو/,/^يون/,/^يول/,/^أغس/,/^سبت/,/^أكت/,/^نوف/,/^ديس/]},defaultParseWidth:`any`}),day:e({matchPatterns:{narrow:/^(ح|ن|ث|ر|خ|ج|س)/,short:/^(أحد|اثنين|ثلاثاء|أربعاء|خميس|جمعة|سبت)/,abbreviated:/^(أحد|اثنين|ثلاثاء|أربعاء|خميس|جمعة|سبت)/,wide:/^(الأحد|الاثنين|الثلاثاء|الأربعاء|الخميس|الجمعة|السبت)/},defaultMatchWidth:`wide`,parsePatterns:{narrow:[/^ح/,/^ن/,/^ث/,/^ر/,/^خ/,/^ج/,/^س/],any:[/أحد/,/اثنين/,/ثلاثاء/,/أربعاء/,/خميس/,/جمعة/,/سبت/]},defaultParseWidth:`any`}),dayPeriod:e({matchPatterns:{narrow:/^(ص|م|ن|ظ|في الصباح|بعد الظهر|في المساء|في الليل)/,abbreviated:/^(ص|م|نصف الليل|ظهراً|في الصباح|بعد الظهر|في المساء|في الليل)/,wide:/^(ص|م|نصف الليل|في الصباح|ظهراً|بعد الظهر|في المساء|في الليل)/,any:/^(ص|م|صباح|ظهر|مساء|ليل)/},defaultMatchWidth:`any`,parsePatterns:{any:{am:/^ص/,pm:/^م/,midnight:/^ن/,noon:/^ظ/,morning:/^ص/,afternoon:/^بعد/,evening:/^م/,night:/^ل/}},defaultParseWidth:`any`})},options:{weekStartsOn:0,firstWeekContainsDate:1}};export{c as arEG,c as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{Jr as e,Qr as t,Xr as n,qr as r}from"./ui-components-D6cEVg0T.js";var i={lessThanXSeconds:{one:`أقل من ثانية واحدة`,two:`أقل من ثانتين`,threeToTen:`أقل من {{count}} ثواني`,other:`أقل من {{count}} ثانية`},xSeconds:{one:`ثانية واحدة`,two:`ثانتين`,threeToTen:`{{count}} ثواني`,other:`{{count}} ثانية`},halfAMinute:`نصف دقيقة`,lessThanXMinutes:{one:`أقل من دقيقة`,two:`أقل من دقيقتين`,threeToTen:`أقل من {{count}} دقائق`,other:`أقل من {{count}} دقيقة`},xMinutes:{one:`دقيقة واحدة`,two:`دقيقتين`,threeToTen:`{{count}} دقائق`,other:`{{count}} دقيقة`},aboutXHours:{one:`ساعة واحدة تقريباً`,two:`ساعتين تقريباً`,threeToTen:`{{count}} ساعات تقريباً`,other:`{{count}} ساعة تقريباً`},xHours:{one:`ساعة واحدة`,two:`ساعتين`,threeToTen:`{{count}} ساعات`,other:`{{count}} ساعة`},xDays:{one:`يوم واحد`,two:`يومين`,threeToTen:`{{count}} أيام`,other:`{{count}} يوم`},aboutXWeeks:{one:`أسبوع واحد تقريباً`,two:`أسبوعين تقريباً`,threeToTen:`{{count}} أسابيع تقريباً`,other:`{{count}} أسبوع تقريباً`},xWeeks:{one:`أسبوع واحد`,two:`أسبوعين`,threeToTen:`{{count}} أسابيع`,other:`{{count}} أسبوع`},aboutXMonths:{one:`شهر واحد تقريباً`,two:`شهرين تقريباً`,threeToTen:`{{count}} أشهر تقريباً`,other:`{{count}} شهر تقريباً`},xMonths:{one:`شهر واحد`,two:`شهرين`,threeToTen:`{{count}} أشهر`,other:`{{count}} شهر`},aboutXYears:{one:`عام واحد تقريباً`,two:`عامين تقريباً`,threeToTen:`{{count}} أعوام تقريباً`,other:`{{count}} عام تقريباً`},xYears:{one:`عام واحد`,two:`عامين`,threeToTen:`{{count}} أعوام`,other:`{{count}} عام`},overXYears:{one:`أكثر من عام`,two:`أكثر من عامين`,threeToTen:`أكثر من {{count}} أعوام`,other:`أكثر من {{count}} عام`},almostXYears:{one:`عام واحد تقريباً`,two:`عامين تقريباً`,threeToTen:`{{count}} أعوام تقريباً`,other:`{{count}} عام تقريباً`}},a=(e,t,n)=>{n||={};let r=i[e],a;return a=typeof r==`string`?r:t===1?r.one:t===2?r.two:t<=10?r.threeToTen.replace(`{{count}}`,String(t)):r.other.replace(`{{count}}`,String(t)),n.addSuffix?n.comparison&&n.comparison>0?`في خلال `+a:`منذ `+a:a},o={date:t({formats:{full:`EEEE, MMMM do, y`,long:`MMMM do, y`,medium:`MMM d, y`,short:`MM/dd/yyyy`},defaultWidth:`full`}),time:t({formats:{full:`h:mm:ss a zzzz`,long:`h:mm:ss a z`,medium:`h:mm:ss a`,short:`h:mm a`},defaultWidth:`full`}),dateTime:t({formats:{full:`{{date}} 'عند' {{time}}`,long:`{{date}} 'عند' {{time}}`,medium:`{{date}}, {{time}}`,short:`{{date}}, {{time}}`},defaultWidth:`full`})},s={lastWeek:`'أخر' eeee 'عند' p`,yesterday:`'أمس عند' p`,today:`'اليوم عند' p`,tomorrow:`'غداً عند' p`,nextWeek:`eeee 'عند' p`,other:`P`},c={code:`ar-MA`,formatDistance:a,formatLong:o,formatRelative:(e,t,n,r)=>s[e],localize:{ordinalNumber:e=>String(e),era:n({values:{narrow:[`ق`,`ب`],abbreviated:[`ق.م.`,`ب.م.`],wide:[`قبل الميلاد`,`بعد الميلاد`]},defaultWidth:`wide`}),quarter:n({values:{narrow:[`1`,`2`,`3`,`4`],abbreviated:[`ر1`,`ر2`,`ر3`,`ر4`],wide:[`الربع الأول`,`الربع الثاني`,`الربع الثالث`,`الربع الرابع`]},defaultWidth:`wide`,argumentCallback:e=>Number(e)-1}),month:n({values:{narrow:[`ي`,`ف`,`م`,`أ`,`م`,`ي`,`ي`,`غ`,`ش`,`أ`,`ن`,`د`],abbreviated:[`ينا`,`فبر`,`مارس`,`أبريل`,`ماي`,`يونـ`,`يولـ`,`غشت`,`شتنـ`,`أكتـ`,`نونـ`,`دجنـ`],wide:[`يناير`,`فبراير`,`مارس`,`أبريل`,`ماي`,`يونيو`,`يوليوز`,`غشت`,`شتنبر`,`أكتوبر`,`نونبر`,`دجنبر`]},defaultWidth:`wide`}),day:n({values:{narrow:[`ح`,`ن`,`ث`,`ر`,`خ`,`ج`,`س`],short:[`أحد`,`اثنين`,`ثلاثاء`,`أربعاء`,`خميس`,`جمعة`,`سبت`],abbreviated:[`أحد`,`اثنـ`,`ثلا`,`أربـ`,`خميـ`,`جمعة`,`سبت`],wide:[`الأحد`,`الإثنين`,`الثلاثاء`,`الأربعاء`,`الخميس`,`الجمعة`,`السبت`]},defaultWidth:`wide`}),dayPeriod:n({values:{narrow:{am:`ص`,pm:`م`,midnight:`ن`,noon:`ظ`,morning:`صباحاً`,afternoon:`بعد الظهر`,evening:`مساءاً`,night:`ليلاً`},abbreviated:{am:`ص`,pm:`م`,midnight:`نصف الليل`,noon:`ظهر`,morning:`صباحاً`,afternoon:`بعد الظهر`,evening:`مساءاً`,night:`ليلاً`},wide:{am:`ص`,pm:`م`,midnight:`نصف الليل`,noon:`ظهر`,morning:`صباحاً`,afternoon:`بعد الظهر`,evening:`مساءاً`,night:`ليلاً`}},defaultWidth:`wide`,formattingValues:{narrow:{am:`ص`,pm:`م`,midnight:`ن`,noon:`ظ`,morning:`في الصباح`,afternoon:`بعد الظـهر`,evening:`في المساء`,night:`في الليل`},abbreviated:{am:`ص`,pm:`م`,midnight:`نصف الليل`,noon:`ظهر`,morning:`في الصباح`,afternoon:`بعد الظهر`,evening:`في المساء`,night:`في الليل`},wide:{am:`ص`,pm:`م`,midnight:`نصف الليل`,noon:`ظهر`,morning:`صباحاً`,afternoon:`بعد الظـهر`,evening:`في المساء`,night:`في الليل`}},defaultFormattingWidth:`wide`})},match:{ordinalNumber:r({matchPattern:/^(\d+)(th|st|nd|rd)?/i,parsePattern:/\d+/i,valueCallback:e=>parseInt(e,10)}),era:e({matchPatterns:{narrow:/^(ق|ب)/i,abbreviated:/^(ق\.?\s?م\.?|ق\.?\s?م\.?\s?|a\.?\s?d\.?|c\.?\s?)/i,wide:/^(قبل الميلاد|قبل الميلاد|بعد الميلاد|بعد الميلاد)/i},defaultMatchWidth:`wide`,parsePatterns:{any:[/^قبل/i,/^بعد/i]},defaultParseWidth:`any`}),quarter:e({matchPatterns:{narrow:/^[1234]/i,abbreviated:/^ر[1234]/i,wide:/^الربع [1234]/i},defaultMatchWidth:`wide`,parsePatterns:{any:[/1/i,/2/i,/3/i,/4/i]},defaultParseWidth:`any`,valueCallback:e=>Number(e)+1}),month:e({matchPatterns:{narrow:/^[يفمأمسند]/i,abbreviated:/^(ين|ف|مار|أب|ماي|يون|يول|غش|شت|أك|ن|د)/i,wide:/^(ين|ف|مار|أب|ماي|يون|يول|غش|شت|أك|ن|د)/i},defaultMatchWidth:`wide`,parsePatterns:{narrow:[/^ي/i,/^ف/i,/^م/i,/^أ/i,/^م/i,/^ي/i,/^ي/i,/^غ/i,/^ش/i,/^أ/i,/^ن/i,/^د/i],any:[/^ين/i,/^فب/i,/^مار/i,/^أب/i,/^ماي/i,/^يون/i,/^يول/i,/^غشت/i,/^ش/i,/^أك/i,/^ن/i,/^د/i]},defaultParseWidth:`any`}),day:e({matchPatterns:{narrow:/^[حنثرخجس]/i,short:/^(أحد|إثنين|ثلاثاء|أربعاء|خميس|جمعة|سبت)/i,abbreviated:/^(أحد|إثن|ثلا|أرب|خمي|جمعة|سبت)/i,wide:/^(الأحد|الإثنين|الثلاثاء|الأربعاء|الخميس|الجمعة|السبت)/i},defaultMatchWidth:`wide`,parsePatterns:{narrow:[/^ح/i,/^ن/i,/^ث/i,/^ر/i,/^خ/i,/^ج/i,/^س/i],wide:[/^الأحد/i,/^الإثنين/i,/^الثلاثاء/i,/^الأربعاء/i,/^الخميس/i,/^الجمعة/i,/^السبت/i],any:[/^أح/i,/^إث/i,/^ث/i,/^أر/i,/^خ/i,/^ج/i,/^س/i]},defaultParseWidth:`any`}),dayPeriod:e({matchPatterns:{narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},defaultMatchWidth:`any`,parsePatterns:{any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},defaultParseWidth:`any`})},options:{weekStartsOn:1,firstWeekContainsDate:1}};export{c as arMA,c as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{Jr as e,Qr as t,Xr as n,qr as r}from"./ui-components-D6cEVg0T.js";var i={lessThanXSeconds:{one:`أقل من ثانية واحدة`,two:`أقل من ثانتين`,threeToTen:`أقل من {{count}} ثواني`,other:`أقل من {{count}} ثانية`},xSeconds:{one:`ثانية واحدة`,two:`ثانتين`,threeToTen:`{{count}} ثواني`,other:`{{count}} ثانية`},halfAMinute:`نصف دقيقة`,lessThanXMinutes:{one:`أقل من دقيقة`,two:`أقل من دقيقتين`,threeToTen:`أقل من {{count}} دقائق`,other:`أقل من {{count}} دقيقة`},xMinutes:{one:`دقيقة واحدة`,two:`دقيقتين`,threeToTen:`{{count}} دقائق`,other:`{{count}} دقيقة`},aboutXHours:{one:`ساعة واحدة تقريباً`,two:`ساعتين تقريباً`,threeToTen:`{{count}} ساعات تقريباً`,other:`{{count}} ساعة تقريباً`},xHours:{one:`ساعة واحدة`,two:`ساعتين`,threeToTen:`{{count}} ساعات`,other:`{{count}} ساعة`},xDays:{one:`يوم واحد`,two:`يومين`,threeToTen:`{{count}} أيام`,other:`{{count}} يوم`},aboutXWeeks:{one:`أسبوع واحد تقريباً`,two:`أسبوعين تقريباً`,threeToTen:`{{count}} أسابيع تقريباً`,other:`{{count}} أسبوع تقريباً`},xWeeks:{one:`أسبوع واحد`,two:`أسبوعين`,threeToTen:`{{count}} أسابيع`,other:`{{count}} أسبوع`},aboutXMonths:{one:`شهر واحد تقريباً`,two:`شهرين تقريباً`,threeToTen:`{{count}} أشهر تقريباً`,other:`{{count}} شهر تقريباً`},xMonths:{one:`شهر واحد`,two:`شهرين`,threeToTen:`{{count}} أشهر`,other:`{{count}} شهر`},aboutXYears:{one:`عام واحد تقريباً`,two:`عامين تقريباً`,threeToTen:`{{count}} أعوام تقريباً`,other:`{{count}} عام تقريباً`},xYears:{one:`عام واحد`,two:`عامين`,threeToTen:`{{count}} أعوام`,other:`{{count}} عام`},overXYears:{one:`أكثر من عام`,two:`أكثر من عامين`,threeToTen:`أكثر من {{count}} أعوام`,other:`أكثر من {{count}} عام`},almostXYears:{one:`عام واحد تقريباً`,two:`عامين تقريباً`,threeToTen:`{{count}} أعوام تقريباً`,other:`{{count}} عام تقريباً`}},a=(e,t,n)=>{let r,a=i[e];return r=typeof a==`string`?a:t===1?a.one:t===2?a.two:t<=10?a.threeToTen.replace(`{{count}}`,String(t)):a.other.replace(`{{count}}`,String(t)),n?.addSuffix?n.comparison&&n.comparison>0?`في خلال `+r:`منذ `+r:r},o={date:t({formats:{full:`EEEE, MMMM do, y`,long:`MMMM do, y`,medium:`MMM d, y`,short:`MM/dd/yyyy`},defaultWidth:`full`}),time:t({formats:{full:`h:mm:ss a zzzz`,long:`h:mm:ss a z`,medium:`h:mm:ss a`,short:`h:mm a`},defaultWidth:`full`}),dateTime:t({formats:{full:`{{date}} 'عند' {{time}}`,long:`{{date}} 'عند' {{time}}`,medium:`{{date}}, {{time}}`,short:`{{date}}, {{time}}`},defaultWidth:`full`})},s={lastWeek:`'أخر' eeee 'عند' p`,yesterday:`'أمس عند' p`,today:`'اليوم عند' p`,tomorrow:`'غداً عند' p`,nextWeek:`eeee 'عند' p`,other:`P`},c={code:`ar-SA`,formatDistance:a,formatLong:o,formatRelative:(e,t,n,r)=>s[e],localize:{ordinalNumber:e=>String(e),era:n({values:{narrow:[`ق`,`ب`],abbreviated:[`ق.م.`,`ب.م.`],wide:[`قبل الميلاد`,`بعد الميلاد`]},defaultWidth:`wide`}),quarter:n({values:{narrow:[`1`,`2`,`3`,`4`],abbreviated:[`ر1`,`ر2`,`ر3`,`ر4`],wide:[`الربع الأول`,`الربع الثاني`,`الربع الثالث`,`الربع الرابع`]},defaultWidth:`wide`,argumentCallback:e=>e-1}),month:n({values:{narrow:[`ي`,`ف`,`م`,`أ`,`م`,`ي`,`ي`,`أ`,`س`,`أ`,`ن`,`د`],abbreviated:[`ينا`,`فبر`,`مارس`,`أبريل`,`مايو`,`يونـ`,`يولـ`,`أغسـ`,`سبتـ`,`أكتـ`,`نوفـ`,`ديسـ`],wide:[`يناير`,`فبراير`,`مارس`,`أبريل`,`مايو`,`يونيو`,`يوليو`,`أغسطس`,`سبتمبر`,`أكتوبر`,`نوفمبر`,`ديسمبر`]},defaultWidth:`wide`}),day:n({values:{narrow:[`ح`,`ن`,`ث`,`ر`,`خ`,`ج`,`س`],short:[`أحد`,`اثنين`,`ثلاثاء`,`أربعاء`,`خميس`,`جمعة`,`سبت`],abbreviated:[`أحد`,`اثنـ`,`ثلا`,`أربـ`,`خميـ`,`جمعة`,`سبت`],wide:[`الأحد`,`الاثنين`,`الثلاثاء`,`الأربعاء`,`الخميس`,`الجمعة`,`السبت`]},defaultWidth:`wide`}),dayPeriod:n({values:{narrow:{am:`ص`,pm:`م`,midnight:`ن`,noon:`ظ`,morning:`صباحاً`,afternoon:`بعد الظهر`,evening:`مساءاً`,night:`ليلاً`},abbreviated:{am:`ص`,pm:`م`,midnight:`نصف الليل`,noon:`ظهر`,morning:`صباحاً`,afternoon:`بعد الظهر`,evening:`مساءاً`,night:`ليلاً`},wide:{am:`ص`,pm:`م`,midnight:`نصف الليل`,noon:`ظهر`,morning:`صباحاً`,afternoon:`بعد الظهر`,evening:`مساءاً`,night:`ليلاً`}},defaultWidth:`wide`,formattingValues:{narrow:{am:`ص`,pm:`م`,midnight:`ن`,noon:`ظ`,morning:`في الصباح`,afternoon:`بعد الظـهر`,evening:`في المساء`,night:`في الليل`},abbreviated:{am:`ص`,pm:`م`,midnight:`نصف الليل`,noon:`ظهر`,morning:`في الصباح`,afternoon:`بعد الظهر`,evening:`في المساء`,night:`في الليل`},wide:{am:`ص`,pm:`م`,midnight:`نصف الليل`,noon:`ظهر`,morning:`صباحاً`,afternoon:`بعد الظـهر`,evening:`في المساء`,night:`في الليل`}},defaultFormattingWidth:`wide`})},match:{ordinalNumber:r({matchPattern:/^(\d+)(th|st|nd|rd)?/i,parsePattern:/\d+/i,valueCallback:e=>parseInt(e,10)}),era:e({matchPatterns:{narrow:/^(ق|ب)/i,abbreviated:/^(ق\.?\s?م\.?|ق\.?\s?م\.?\s?|a\.?\s?d\.?|c\.?\s?)/i,wide:/^(قبل الميلاد|قبل الميلاد|بعد الميلاد|بعد الميلاد)/i},defaultMatchWidth:`wide`,parsePatterns:{any:[/^قبل/i,/^بعد/i]},defaultParseWidth:`any`}),quarter:e({matchPatterns:{narrow:/^[1234]/i,abbreviated:/^ر[1234]/i,wide:/^الربع [1234]/i},defaultMatchWidth:`wide`,parsePatterns:{any:[/1/i,/2/i,/3/i,/4/i]},defaultParseWidth:`any`,valueCallback:e=>e+1}),month:e({matchPatterns:{narrow:/^[يفمأمسند]/i,abbreviated:/^(ين|ف|مار|أب|ماي|يون|يول|أغ|س|أك|ن|د)/i,wide:/^(ين|ف|مار|أب|ماي|يون|يول|أغ|س|أك|ن|د)/i},defaultMatchWidth:`wide`,parsePatterns:{narrow:[/^ي/i,/^ف/i,/^م/i,/^أ/i,/^م/i,/^ي/i,/^ي/i,/^أ/i,/^س/i,/^أ/i,/^ن/i,/^د/i],any:[/^ين/i,/^ف/i,/^مار/i,/^أب/i,/^ماي/i,/^يون/i,/^يول/i,/^أغ/i,/^س/i,/^أك/i,/^ن/i,/^د/i]},defaultParseWidth:`any`}),day:e({matchPatterns:{narrow:/^[حنثرخجس]/i,short:/^(أحد|اثنين|ثلاثاء|أربعاء|خميس|جمعة|سبت)/i,abbreviated:/^(أحد|اثن|ثلا|أرب|خمي|جمعة|سبت)/i,wide:/^(الأحد|الاثنين|الثلاثاء|الأربعاء|الخميس|الجمعة|السبت)/i},defaultMatchWidth:`wide`,parsePatterns:{narrow:[/^ح/i,/^ن/i,/^ث/i,/^ر/i,/^خ/i,/^ج/i,/^س/i],wide:[/^الأحد/i,/^الاثنين/i,/^الثلاثاء/i,/^الأربعاء/i,/^الخميس/i,/^الجمعة/i,/^السبت/i],any:[/^أح/i,/^اث/i,/^ث/i,/^أر/i,/^خ/i,/^ج/i,/^س/i]},defaultParseWidth:`any`}),dayPeriod:e({matchPatterns:{narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},defaultMatchWidth:`any`,parsePatterns:{any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},defaultParseWidth:`any`})},options:{weekStartsOn:0,firstWeekContainsDate:1}};export{c as arSA,c as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{Jr as e,Qr as t,Xr as n,qr as r}from"./ui-components-D6cEVg0T.js";var i={lessThanXSeconds:{one:`أقل من ثانية`,two:`أقل من زوز ثواني`,threeToTen:`أقل من {{count}} ثواني`,other:`أقل من {{count}} ثانية`},xSeconds:{one:`ثانية`,two:`زوز ثواني`,threeToTen:`{{count}} ثواني`,other:`{{count}} ثانية`},halfAMinute:`نص دقيقة`,lessThanXMinutes:{one:`أقل من دقيقة`,two:`أقل من دقيقتين`,threeToTen:`أقل من {{count}} دقايق`,other:`أقل من {{count}} دقيقة`},xMinutes:{one:`دقيقة`,two:`دقيقتين`,threeToTen:`{{count}} دقايق`,other:`{{count}} دقيقة`},aboutXHours:{one:`ساعة تقريب`,two:`ساعتين تقريب`,threeToTen:`{{count}} سوايع تقريب`,other:`{{count}} ساعة تقريب`},xHours:{one:`ساعة`,two:`ساعتين`,threeToTen:`{{count}} سوايع`,other:`{{count}} ساعة`},xDays:{one:`نهار`,two:`نهارين`,threeToTen:`{{count}} أيام`,other:`{{count}} يوم`},aboutXWeeks:{one:`جمعة تقريب`,two:`جمعتين تقريب`,threeToTen:`{{count}} جماع تقريب`,other:`{{count}} جمعة تقريب`},xWeeks:{one:`جمعة`,two:`جمعتين`,threeToTen:`{{count}} جماع`,other:`{{count}} جمعة`},aboutXMonths:{one:`شهر تقريب`,two:`شهرين تقريب`,threeToTen:`{{count}} أشهرة تقريب`,other:`{{count}} شهر تقريب`},xMonths:{one:`شهر`,two:`شهرين`,threeToTen:`{{count}} أشهرة`,other:`{{count}} شهر`},aboutXYears:{one:`عام تقريب`,two:`عامين تقريب`,threeToTen:`{{count}} أعوام تقريب`,other:`{{count}} عام تقريب`},xYears:{one:`عام`,two:`عامين`,threeToTen:`{{count}} أعوام`,other:`{{count}} عام`},overXYears:{one:`أكثر من عام`,two:`أكثر من عامين`,threeToTen:`أكثر من {{count}} أعوام`,other:`أكثر من {{count}} عام`},almostXYears:{one:`عام تقريب`,two:`عامين تقريب`,threeToTen:`{{count}} أعوام تقريب`,other:`{{count}} عام تقريب`}},a=(e,t,n)=>{let r=i[e],a;return a=typeof r==`string`?r:t===1?r.one:t===2?r.two:t<=10?r.threeToTen.replace(`{{count}}`,String(t)):r.other.replace(`{{count}}`,String(t)),n?.addSuffix?n.comparison&&n.comparison>0?`في `+a:`عندو `+a:a},o={date:t({formats:{full:`EEEE، do MMMM y`,long:`do MMMM y`,medium:`d MMM y`,short:`dd/MM/yyyy`},defaultWidth:`full`}),time:t({formats:{full:`HH:mm:ss`,long:`HH:mm:ss`,medium:`HH:mm:ss`,short:`HH:mm`},defaultWidth:`full`}),dateTime:t({formats:{full:`{{date}} 'مع' {{time}}`,long:`{{date}} 'مع' {{time}}`,medium:`{{date}}, {{time}}`,short:`{{date}}, {{time}}`},defaultWidth:`full`})},s={lastWeek:`eeee 'إلي فات مع' p`,yesterday:`'البارح مع' p`,today:`'اليوم مع' p`,tomorrow:`'غدوة مع' p`,nextWeek:`eeee 'الجمعة الجاية مع' p 'نهار'`,other:`P`},c={code:`ar-TN`,formatDistance:a,formatLong:o,formatRelative:e=>s[e],localize:{ordinalNumber:e=>String(e),era:n({values:{narrow:[`ق`,`ب`],abbreviated:[`ق.م.`,`ب.م.`],wide:[`قبل الميلاد`,`بعد الميلاد`]},defaultWidth:`wide`}),quarter:n({values:{narrow:[`1`,`2`,`3`,`4`],abbreviated:[`ر1`,`ر2`,`ر3`,`ر4`],wide:[`الربع الأول`,`الربع الثاني`,`الربع الثالث`,`الربع الرابع`]},defaultWidth:`wide`,argumentCallback:e=>e-1}),month:n({values:{narrow:[`د`,`ن`,`أ`,`س`,`أ`,`ج`,`ج`,`م`,`أ`,`م`,`ف`,`ج`],abbreviated:[`جانفي`,`فيفري`,`مارس`,`أفريل`,`ماي`,`جوان`,`جويلية`,`أوت`,`سبتمبر`,`أكتوبر`,`نوفمبر`,`ديسمبر`],wide:[`جانفي`,`فيفري`,`مارس`,`أفريل`,`ماي`,`جوان`,`جويلية`,`أوت`,`سبتمبر`,`أكتوبر`,`نوفمبر`,`ديسمبر`]},defaultWidth:`wide`}),day:n({values:{narrow:[`ح`,`ن`,`ث`,`ر`,`خ`,`ج`,`س`],short:[`أحد`,`اثنين`,`ثلاثاء`,`أربعاء`,`خميس`,`جمعة`,`سبت`],abbreviated:[`أحد`,`اثنين`,`ثلاثاء`,`أربعاء`,`خميس`,`جمعة`,`سبت`],wide:[`الأحد`,`الاثنين`,`الثلاثاء`,`الأربعاء`,`الخميس`,`الجمعة`,`السبت`]},defaultWidth:`wide`}),dayPeriod:n({values:{narrow:{am:`ص`,pm:`ع`,morning:`الصباح`,noon:`القايلة`,afternoon:`بعد القايلة`,evening:`العشية`,night:`الليل`,midnight:`نص الليل`},abbreviated:{am:`ص`,pm:`ع`,morning:`الصباح`,noon:`القايلة`,afternoon:`بعد القايلة`,evening:`العشية`,night:`الليل`,midnight:`نص الليل`},wide:{am:`ص`,pm:`ع`,morning:`الصباح`,noon:`القايلة`,afternoon:`بعد القايلة`,evening:`العشية`,night:`الليل`,midnight:`نص الليل`}},defaultWidth:`wide`,formattingValues:{narrow:{am:`ص`,pm:`ع`,morning:`في الصباح`,noon:`في القايلة`,afternoon:`بعد القايلة`,evening:`في العشية`,night:`في الليل`,midnight:`نص الليل`},abbreviated:{am:`ص`,pm:`ع`,morning:`في الصباح`,noon:`في القايلة`,afternoon:`بعد القايلة`,evening:`في العشية`,night:`في الليل`,midnight:`نص الليل`},wide:{am:`ص`,pm:`ع`,morning:`في الصباح`,noon:`في القايلة`,afternoon:`بعد القايلة`,evening:`في العشية`,night:`في الليل`,midnight:`نص الليل`}},defaultFormattingWidth:`wide`})},match:{ordinalNumber:r({matchPattern:/^(\d+)(th|st|nd|rd)?/i,parsePattern:/\d+/i,valueCallback:e=>parseInt(e,10)}),era:e({matchPatterns:{narrow:/[قب]/,abbreviated:/[قب]\.م\./,wide:/(قبل|بعد) الميلاد/},defaultMatchWidth:`wide`,parsePatterns:{any:[/قبل/,/بعد/]},defaultParseWidth:`any`}),quarter:e({matchPatterns:{narrow:/^[1234]/i,abbreviated:/ر[1234]/,wide:/الربع (الأول|الثاني|الثالث|الرابع)/},defaultMatchWidth:`wide`,parsePatterns:{any:[/1/i,/2/i,/3/i,/4/i]},defaultParseWidth:`any`,valueCallback:e=>e+1}),month:e({matchPatterns:{narrow:/^[جفمأسند]/,abbreviated:/^(جانفي|فيفري|مارس|أفريل|ماي|جوان|جويلية|أوت|سبتمبر|أكتوبر|نوفمبر|ديسمبر)/,wide:/^(جانفي|فيفري|مارس|أفريل|ماي|جوان|جويلية|أوت|سبتمبر|أكتوبر|نوفمبر|ديسمبر)/},defaultMatchWidth:`wide`,parsePatterns:{narrow:[/^ج/i,/^ف/i,/^م/i,/^أ/i,/^م/i,/^ج/i,/^ج/i,/^أ/i,/^س/i,/^أ/i,/^ن/i,/^د/i],any:[/^جانفي/i,/^فيفري/i,/^مارس/i,/^أفريل/i,/^ماي/i,/^جوان/i,/^جويلية/i,/^أوت/i,/^سبتمبر/i,/^أكتوبر/i,/^نوفمبر/i,/^ديسمبر/i]},defaultParseWidth:`any`}),day:e({matchPatterns:{narrow:/^[حنثرخجس]/i,short:/^(أحد|اثنين|ثلاثاء|أربعاء|خميس|جمعة|سبت)/i,abbreviated:/^(أحد|اثنين|ثلاثاء|أربعاء|خميس|جمعة|سبت)/i,wide:/^(الأحد|الاثنين|الثلاثاء|الأربعاء|الخميس|الجمعة|السبت)/i},defaultMatchWidth:`wide`,parsePatterns:{narrow:[/^ح/i,/^ن/i,/^ث/i,/^ر/i,/^خ/i,/^ج/i,/^س/i],wide:[/^الأحد/i,/^الاثنين/i,/^الثلاثاء/i,/^الأربعاء/i,/^الخميس/i,/^الجمعة/i,/^السبت/i],any:[/^أح/i,/^اث/i,/^ث/i,/^أر/i,/^خ/i,/^ج/i,/^س/i]},defaultParseWidth:`any`}),dayPeriod:e({matchPatterns:{narrow:/^(ص|ع|ن ل|ل|(في|مع) (صباح|قايلة|عشية|ليل))/,any:/^([صع]|نص الليل|قايلة|(في|مع) (صباح|قايلة|عشية|ليل))/},defaultMatchWidth:`any`,parsePatterns:{any:{am:/^ص/,pm:/^ع/,midnight:/نص الليل/,noon:/قايلة/,afternoon:/بعد القايلة/,morning:/صباح/,evening:/عشية/,night:/ليل/}},defaultParseWidth:`any`})},options:{weekStartsOn:1,firstWeekContainsDate:1}};export{c as arTN,c as default};
|