@objectstack/console 17.6.0 → 17.7.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 +428 -0
- package/dist/.objectstack-injection.json +2 -2
- package/dist/.objectui-sha +1 -1
- package/dist/assets/{ActionResultDialog-4kHDGnT3.js → ActionResultDialog-ChYnuROr.js} +3 -3
- package/dist/assets/{AiPendingActionsPage-JjOddm0h.js → AiPendingActionsPage-Dh3-i4BB.js} +1 -1
- package/dist/assets/{ApiConsolePage-BgS26lbp.js → ApiConsolePage-CKYEqlMs.js} +1 -1
- package/dist/assets/{AppDocsIndex-BDoH5ECM.js → AppDocsIndex-B5Tky2xg.js} +1 -1
- package/dist/assets/{AppManagementPage-CCgKmNTj.js → AppManagementPage-ZwyvnHpM.js} +1 -1
- package/dist/assets/ApprovalsInboxPage-DD4fe0Em.js +1 -0
- package/dist/assets/AuditLogPage-Sed6iMqP.js +1 -0
- package/dist/assets/BookPage-DYjUsQIc.js +1 -0
- package/dist/assets/{ComponentNavView-B5g9c6fx.js → ComponentNavView-DrlxM4SY.js} +1 -1
- package/dist/assets/CreateViewDialog-Cp72x_O7.js +1 -0
- package/dist/assets/{DashboardView-BOcovpPd.js → DashboardView-juicRxcP.js} +1 -1
- package/dist/assets/DocPage-CxJaQ-pC.js +1 -0
- package/dist/assets/{DocsIndex-DwW2QsYY.js → DocsIndex-LALVtIVR.js} +1 -1
- package/dist/assets/{DocsLayout-D63StSgd.js → DocsLayout-BAwlJQQf.js} +1 -1
- package/dist/assets/{DocsSlug-CP9fcabi.js → DocsSlug-CkF1E-Zs.js} +1 -1
- package/dist/assets/ExpressionProvider-Dr0e99r1.js +1 -0
- package/dist/assets/FlowRunsPage-R3W3t2s4.js +1 -0
- package/dist/assets/{IntegrationsPage-DvG0x0Nb.js → IntegrationsPage-DIuFLEbF.js} +2 -2
- package/dist/assets/InterfaceListPage-BfoCldGu.js +1 -0
- package/dist/assets/{MarketplaceInstalledPage-B7KETQG2.js → MarketplaceInstalledPage-DyjhcUNB.js} +1 -1
- package/dist/assets/MarketplacePackagePage-BbO27Pgs.js +4 -0
- package/dist/assets/MarketplacePage-DO2_b64U.js +1 -0
- package/dist/assets/{MetadataInspector-EP0I3-Kq.js → MetadataInspector-BQyu9pOE.js} +1 -1
- package/dist/assets/ObjectDataPage-DIY-yefK.js +1 -0
- package/dist/assets/PageView-C-qWu3Jw.js +1 -0
- package/dist/assets/ProfilePage-Qp8DL8CF.js +1 -0
- package/dist/assets/{PublicFormsPage-D3uCTR-8.js → PublicFormsPage-D3AT2EH9.js} +1 -1
- package/dist/assets/RecordDetailView-B3XBEgk2.js +3 -0
- package/dist/assets/{RecordFormPage-kiJI-ieF.js → RecordFormPage-CcoZfUJ3.js} +1 -1
- package/dist/assets/ReportDefaultInspector-DVcWM6sh.js +1 -0
- package/dist/assets/ReportView-pJCFptzp.js +2 -0
- package/dist/assets/RuntimeDraftBar-DObTyFu2.js +1 -0
- package/dist/assets/SchemaForm-BWSWYMLE.js +3 -0
- package/dist/assets/SearchResultsPage-ChVIzFob.js +1 -0
- package/dist/assets/{SettingsHub-DP1mrzEN.js → SettingsHub-CPP9FDe8.js} +1 -1
- package/dist/assets/{SettingsView-u7mc6pcc.js → SettingsView-CrHAROu9.js} +1 -1
- package/dist/assets/{SkeletonDetail-DIwlbHTr.js → SkeletonDetail-CP-35B8x.js} +1 -1
- package/dist/assets/{af-DPUgkQl0.js → af-Bhbso4Pg.js} +1 -1
- package/dist/assets/ai-BAPiCsNk.js +3 -0
- package/dist/assets/app-shell-eager-leaves-D9tgfJOe.js +1 -0
- package/dist/assets/{ar-B-6GTIRU.js → ar-DG8TAFtm.js} +1 -1
- package/dist/assets/{ar-DZ-wEl298ti.js → ar-DZ-BtSien-d.js} +1 -1
- package/dist/assets/{ar-EG-YBT90_S0.js → ar-EG-DpXC0zoY.js} +1 -1
- package/dist/assets/{ar-MA-3uT-EYh6.js → ar-MA-D1qVJLyE.js} +1 -1
- package/dist/assets/{ar-SA-SiQsjhhc.js → ar-SA-BIYKNgv8.js} +1 -1
- package/dist/assets/{ar-TN-CfzXjKzS.js → ar-TN-mUR5Mq3s.js} +1 -1
- package/dist/assets/{az-BqAfcNza.js → az-B7IqwHGK.js} +1 -1
- package/dist/assets/{be-CQgWXa9_.js → be-CnZyPaSX.js} +1 -1
- package/dist/assets/{be-tarask-BmNg0Sir.js → be-tarask--uMMCC7l.js} +1 -1
- package/dist/assets/{bg-D3evgRuS.js → bg-CZwuirtY.js} +1 -1
- package/dist/assets/{bn-uItkARwm.js → bn-BbOX0r-z.js} +1 -1
- package/dist/assets/{bs-DueReOpO.js → bs-B5W75cYR.js} +1 -1
- package/dist/assets/{ca-Cr3AHktR.js → ca-Be69LdIM.js} +1 -1
- package/dist/assets/{ckb-CTi5BET7.js → ckb-B-nKM1Vn.js} +1 -1
- package/dist/assets/{createDerive-CjN1i5vn.js → createDerive-CynsXU-B.js} +1 -1
- package/dist/assets/{cs-43mFX9jr.js → cs-qHngxH7l.js} +1 -1
- package/dist/assets/{cy-BBSkg3F8.js → cy-DscO2Pgf.js} +1 -1
- package/dist/assets/{da-C5oA5qcs.js → da-vibkaLMF.js} +1 -1
- package/dist/assets/data-adapter-BDsrq0TX.js +2 -0
- package/dist/assets/{de-AT-CApxwJzu.js → de-AT--JneEuBw.js} +1 -1
- package/dist/assets/{de-CPtbLlAf.js → de-BCT78XYW.js} +1 -1
- package/dist/assets/default-inspector-registry-Dktr6x_q.js +1 -0
- package/dist/assets/dist-yh3dYtHt.js +14 -0
- package/dist/assets/drillUrlFilters-N0RngQg6.js +1 -0
- package/dist/assets/{el-Dto2xBQU.js → el-Cl0y9T2b.js} +1 -1
- package/dist/assets/en-AU-By42tTB7.js +1 -0
- package/dist/assets/{en-CA-DKuJPN1U.js → en-CA-BqEEoj-Y.js} +1 -1
- package/dist/assets/en-GB-Cx8B9nkB.js +1 -0
- package/dist/assets/en-IE-CX9nv6uO.js +1 -0
- package/dist/assets/en-IN-ByGSBHa4.js +1 -0
- package/dist/assets/en-NZ-BPMwa2ZN.js +1 -0
- package/dist/assets/en-ZA-lj_N4R6c.js +1 -0
- package/dist/assets/{eo-BL8JXIWd.js → eo-oOXROuhF.js} +1 -1
- package/dist/assets/{es-BnoaNxsu.js → es-EudscwjH.js} +1 -1
- package/dist/assets/{et-tPYLNenO.js → et-CB-5LLh6.js} +1 -1
- package/dist/assets/{eu-CUBG6bT0.js → eu-B4-hcseX.js} +1 -1
- package/dist/assets/{fa-IR-Rr2d9xSs.js → fa-IR-CogavcMJ.js} +1 -1
- package/dist/assets/{fi-B0NVIZsV.js → fi-CIBE0mYa.js} +1 -1
- package/dist/assets/{formatLong-1-gt9bpo.js → formatLong-qqgm7lV1.js} +1 -1
- package/dist/assets/{fr-CA-CBDvLXFg.js → fr-CA-BugXMutW.js} +1 -1
- package/dist/assets/{fr-BbhHek8e.js → fr-CDReXYWW.js} +1 -1
- package/dist/assets/{fr-CH-WPNmwPn7.js → fr-CH-fiTiB6X1.js} +1 -1
- package/dist/assets/framework-CAuH4h0L.js +35 -0
- package/dist/assets/{fy-DvOBbvEF.js → fy-t_GzIAg_.js} +1 -1
- package/dist/assets/{gd-BQPiTPX5.js → gd-CSncIxtN.js} +1 -1
- package/dist/assets/getIcon-BDkBRQFw.js +1 -0
- package/dist/assets/{gl-BJCXK8uO.js → gl-_138Mj2S.js} +1 -1
- package/dist/assets/{gu-CctPRz3V.js → gu-COfH-YUT.js} +1 -1
- package/dist/assets/{he-CVFMk6p2.js → he-BXL4lOKY.js} +1 -1
- package/dist/assets/{hi-Ba30-RwS.js → hi-kXuYI0TJ.js} +1 -1
- package/dist/assets/{highlighted-body-OFNGDK62-BQ57IrBV.js → highlighted-body-OFNGDK62-CK7x7Gzm.js} +1 -1
- package/dist/assets/{hr-BZUqTbZs.js → hr-DAOsQWzI.js} +1 -1
- package/dist/assets/{ht-BLe05tPx.js → ht-Ch8SKz8p.js} +1 -1
- package/dist/assets/{hu-2CQ_Mkww.js → hu-q6W_rWPT.js} +1 -1
- package/dist/assets/{hy-CclcPG4H.js → hy-0M8OmwnM.js} +1 -1
- package/dist/assets/{i18n-BnUsCaSC.js → i18n-DTfZonAM.js} +3 -3
- package/dist/assets/i18n-locale-ar-O6rs-Cir.js +4 -0
- package/dist/assets/i18n-locale-de-CMc1jk4a.js +4 -0
- package/dist/assets/i18n-locale-en-CbRQO81h.js +4 -0
- package/dist/assets/i18n-locale-es-t47nyoCX.js +4 -0
- package/dist/assets/i18n-locale-fr-E425EqJM.js +4 -0
- package/dist/assets/i18n-locale-ja-y_fk77fz.js +4 -0
- package/dist/assets/i18n-locale-ko-CdnY2uCg.js +4 -0
- package/dist/assets/i18n-locale-pt-BaUOXS6y.js +4 -0
- package/dist/assets/i18n-locale-ru-pFlhX9wg.js +4 -0
- package/dist/assets/i18n-locale-zh-Dkj4ROTN.js +4 -0
- package/dist/assets/i18n-runtime-CdWyaiOD.js +1 -0
- package/dist/assets/{id-6JLB8s-f.js → id-BM_H1_jv.js} +1 -1
- package/dist/assets/index-ocmkyCt6.js +19 -0
- package/dist/assets/index-v2Ijn9Gr.css +2 -0
- package/dist/assets/{infrastructure-Cc34lEqb.js → infrastructure-CSnL6ntj.js} +2 -2
- package/dist/assets/integration-7NqwVHuJ.js +1 -0
- package/dist/assets/{is-to0CWzm1.js → is-B_7jXZfS.js} +1 -1
- package/dist/assets/isSameWeek-D90tBsli.js +1 -0
- package/dist/assets/{it-ea0B8Ujp.js → it-CBM0J9cD.js} +1 -1
- package/dist/assets/{it-CH-DhdfjP5Z.js → it-CH-BQltCNsR.js} +1 -1
- package/dist/assets/{ja-B1bzkgDW.js → ja-DBjnsx21.js} +1 -1
- package/dist/assets/{ja-Hira-CMrY5hXO.js → ja-Hira-BZfSmj1i.js} +1 -1
- package/dist/assets/{ka-DKSXLnXP.js → ka-HwpuKgUY.js} +1 -1
- package/dist/assets/{kk-DHwMv8Dn.js → kk-DLKA9paj.js} +1 -1
- package/dist/assets/{km-tpLG1xNr.js → km-BU5kermq.js} +1 -1
- package/dist/assets/{kn-MLreVnHA.js → kn-BNFqbCoi.js} +1 -1
- package/dist/assets/{ko-CI0DBazn.js → ko-D8n4uMqQ.js} +1 -1
- package/dist/assets/{lb-CmL572Xe.js → lb-B1empQ7m.js} +1 -1
- package/dist/assets/{lt-DRtUOLdw.js → lt-gMukpK3G.js} +1 -1
- package/dist/assets/{lv-COSHgkOP.js → lv-D2O5AnsZ.js} +1 -1
- package/dist/assets/{match-BQoOW8Cj.js → match-BTF6WqJh.js} +1 -1
- package/dist/assets/{match-B-ergJQb.js → match-Cyum2eeW.js} +1 -1
- package/dist/assets/{match-dfBS0YSQ.js → match-ScHH8kYk.js} +1 -1
- package/dist/assets/mermaid-GHXKKRXX-D4H6EVJQ.js +1 -0
- package/dist/assets/metadata-admin-CEhVmXFv.js +9 -0
- package/dist/assets/{mk-B0IH_YL_.js → mk-D-Zl0xVN.js} +1 -1
- package/dist/assets/{mn-P-QdQ2n3.js → mn-jJbTslgD.js} +1 -1
- package/dist/assets/{ms-CtyEOINy.js → ms-CUuJHLA4.js} +1 -1
- package/dist/assets/{mt-DfuZ2HRm.js → mt-yIcbfxKY.js} +1 -1
- package/dist/assets/{nb-2Hp-5Tnt.js → nb-D9WNypoj.js} +1 -1
- package/dist/assets/{nl-BE-mmxbfNoR.js → nl-BE-B1vKiw2h.js} +1 -1
- package/dist/assets/{nl-CZ_nLREz.js → nl-DC7b5e90.js} +1 -1
- package/dist/assets/{nn-ccWhYsNa.js → nn-uP4yJ9s0.js} +1 -1
- package/dist/assets/{oc-z504BFRV.js → oc-DHTqadJI.js} +1 -1
- package/dist/assets/{pl-DeQ7ASt-.js → pl-Bxnnizf5.js} +1 -1
- package/dist/assets/plugin-calendar-b7C35ANT.js +1 -0
- package/dist/assets/plugin-charts-b-yVtmdI.js +7 -0
- package/dist/assets/{plugin-chatbot-Ck47EhDX.js → plugin-chatbot-D1KW_oIO.js} +8 -8
- package/dist/assets/plugin-dashboard-DTkPoPEb.js +6 -0
- package/dist/assets/plugin-form-UIRm-FpQ.js +1 -0
- package/dist/assets/plugin-gantt-9dtc8zzX.js +63 -0
- package/dist/assets/plugin-grid-Cp4RKtMJ.js +10 -0
- package/dist/assets/plugin-kanban-B2JOPZIJ.js +1 -0
- package/dist/assets/plugin-map-CBJcVJYk.js +1 -0
- package/dist/assets/{plugin-markdown-BOkHcir_.js → plugin-markdown-CNlDzqP-.js} +1 -1
- package/dist/assets/plugin-report-IZzgQb-Q.js +59 -0
- package/dist/assets/plugin-timeline-DsmtjcJ3.js +1 -0
- package/dist/assets/plugin-tree-DTRPBdhe.js +1 -0
- package/dist/assets/plugin-view-D9ixsNDG.js +1 -0
- package/dist/assets/plugins-views-CnvkdSJK.js +3 -0
- package/dist/assets/{pt-BR-D80_lPYF.js → pt-BR-D416seHT.js} +1 -1
- package/dist/assets/{pt-CJJ1RmXd.js → pt-DwHBy9_c.js} +1 -1
- package/dist/assets/{ro-EuFb2TCj.js → ro-DDf1X3Np.js} +1 -1
- package/dist/assets/{ru-CMaVQScp.js → ru-8eM3mcgK.js} +1 -1
- package/dist/assets/{runtime-metadata-persistence-ClOTznqa.js → runtime-metadata-persistence-DX29lQ62.js} +1 -1
- package/dist/assets/{se-DsfdKLdF.js → se-D4JvQeRX.js} +1 -1
- package/dist/assets/{sk-BNV9omI8.js → sk-DvpgttGI.js} +1 -1
- package/dist/assets/{sl-DJS_nINU.js → sl-B3gCZ-_a.js} +1 -1
- package/dist/assets/{sq-HEgjcbHe.js → sq-CVaTmL0V.js} +1 -1
- package/dist/assets/{sr-CO0CFu4X.js → sr-CnH5Ffyz.js} +1 -1
- package/dist/assets/{sr-Latn-eE1Idzey.js → sr-Latn-Dw9w61q6.js} +1 -1
- package/dist/assets/src-BUry7633.js +2 -0
- package/dist/assets/{src-BU7L2v4J.js → src-DMDT5a27.js} +1 -1
- package/dist/assets/src-ZxH3AOCu.js +16 -0
- package/dist/assets/{studioEntry-WeMfaSGn.js → studioEntry-DAqcBFtr.js} +1 -1
- package/dist/assets/{submitRedirect-C2lfZSHt.js → submitRedirect-iy0oOi7I.js} +1 -1
- package/dist/assets/{sv-5uTzgQT3.js → sv-CU7wdxyK.js} +1 -1
- package/dist/assets/{ta-BzgdkBZG.js → ta-DPH6q0HR.js} +1 -1
- package/dist/assets/{te-Ct_pl7ZJ.js → te-BSaThkGV.js} +1 -1
- package/dist/assets/{th-DouAlk0-.js → th-NXP8_Qb8.js} +1 -1
- package/dist/assets/{tr-3XNBsI40.js → tr-DDXoH663.js} +1 -1
- package/dist/assets/types-zod-ChJ30y25.js +1 -0
- package/dist/assets/{ug-B9n24h9G.js → ug-Guus6pPe.js} +1 -1
- package/dist/assets/ui-components-D8wcRNrt.js +37 -0
- package/dist/assets/ui-layout-BYO3rRIl.js +1 -0
- package/dist/assets/{uk-DCAenByf.js → uk-uiy4vsp8.js} +1 -1
- package/dist/assets/use-book-data-DFTswcKm.js +1 -0
- package/dist/assets/{useActionModal-Blp4rhOk.js → useActionModal-h52Z5Pkl.js} +1 -1
- package/dist/assets/useCanAuthorMetadata-TDrVrYGB.js +1 -0
- package/dist/assets/useDatasetCatalog-BOd0Ybr1.js +1 -0
- package/dist/assets/{useNavTargetLabel-BOJncjIb.js → useNavTargetLabel-D8lRdb6O.js} +1 -1
- package/dist/assets/useOpenRecordList-C7oqUD3F.js +1 -0
- package/dist/assets/{usePackageL10n-Ci9uVkRZ.js → usePackageL10n-Jl2XiF2F.js} +1 -1
- package/dist/assets/{useSettingsLabel-CeMnMWsh.js → useSettingsLabel-CSpBDTdy.js} +1 -1
- package/dist/assets/{uz-Cyrl-JSeHEqu-.js → uz-Cyrl-Cmb5bvbf.js} +1 -1
- package/dist/assets/{uz-DT3s9bZS.js → uz-DJWxoTz4.js} +1 -1
- package/dist/assets/vendor-objectstack-C4eD5dbT.js +139 -0
- package/dist/assets/{vi-D2p-h6bY.js → vi-Bb3QoIJC.js} +1 -1
- package/dist/assets/{zh-CN-DHOKqAit.js → zh-CN-C-Hts1ZR.js} +1 -1
- package/dist/assets/{zh-HK-D4iIPY7I.js → zh-HK-CtBAZ_ZS.js} +1 -1
- package/dist/assets/{zh-TW-gORQ_tZh.js → zh-TW-B7DDahD-.js} +1 -1
- package/dist/chunk-membership.json +28 -26
- package/dist/eager-closure.json +107 -101
- package/dist/index.html +4 -4
- package/dist/sdui.manifest.json +486 -63
- package/package.json +1 -1
- package/dist/assets/ApprovalsInboxPage-C6S1vk0X.js +0 -1
- package/dist/assets/AuditLogPage-v2dKXMuk.js +0 -1
- package/dist/assets/BookPage-DwFMcTSN.js +0 -1
- package/dist/assets/CreateViewDialog-D3l-tYHM.js +0 -1
- package/dist/assets/DocPage-B6AkH5WI.js +0 -1
- package/dist/assets/ExpressionProvider-CrL6jhVq.js +0 -1
- package/dist/assets/FlowRunsPage-CxdaiUyk.js +0 -1
- package/dist/assets/InterfaceListPage-C4wPYohR.js +0 -1
- package/dist/assets/MarketplacePackagePage-CfgKDpNH.js +0 -4
- package/dist/assets/MarketplacePage-DNEyU5AE.js +0 -1
- package/dist/assets/ObjectDataPage-CykEm9MD.js +0 -1
- package/dist/assets/PageView-C6u86tni.js +0 -1
- package/dist/assets/ProfilePage-C3SjXMzi.js +0 -1
- package/dist/assets/RecordDetailView-DgR_zhP4.js +0 -3
- package/dist/assets/ReportDefaultInspector-BIinF0EQ.js +0 -1
- package/dist/assets/ReportView-BREO-ADE.js +0 -2
- package/dist/assets/RuntimeDraftBar-BCWfd2yS.js +0 -1
- package/dist/assets/SchemaForm-C4uMMZ13.js +0 -3
- package/dist/assets/SearchResultsPage-C6Hw_Lpn.js +0 -1
- package/dist/assets/ai-DPBykF2N.js +0 -3
- package/dist/assets/app-shell-eager-leaves-Cf2bM6uT.js +0 -1
- package/dist/assets/data-adapter-Cymvlczj.js +0 -1
- package/dist/assets/default-inspector-registry-Bs6GBn00.js +0 -1
- package/dist/assets/dist-BF-ssUpn.js +0 -14
- package/dist/assets/drillUrlFilters-hi-2d3DW.js +0 -1
- package/dist/assets/en-AU-FVwCiDJO.js +0 -1
- package/dist/assets/en-GB-DQ_y5VbJ.js +0 -1
- package/dist/assets/en-IE-DaXOhsZW.js +0 -1
- package/dist/assets/en-IN-CnRZnAom.js +0 -1
- package/dist/assets/en-NZ-CBZLEToK.js +0 -1
- package/dist/assets/en-ZA-BE59v0wZ.js +0 -1
- package/dist/assets/framework-DFR4HNtj.js +0 -35
- package/dist/assets/getIcon-Cfwf-Egt.js +0 -1
- package/dist/assets/i18n-locale-ar-92O_xtDZ.js +0 -4
- package/dist/assets/i18n-locale-de-T5ic3yH9.js +0 -4
- package/dist/assets/i18n-locale-en-rxr7WJYl.js +0 -4
- package/dist/assets/i18n-locale-es-D_WOifJ_.js +0 -4
- package/dist/assets/i18n-locale-fr-3cvyjMkp.js +0 -4
- package/dist/assets/i18n-locale-ja-DXlIkB8I.js +0 -4
- package/dist/assets/i18n-locale-ko-DngRpS45.js +0 -4
- package/dist/assets/i18n-locale-pt-BkPaFCqZ.js +0 -4
- package/dist/assets/i18n-locale-ru-E5wLh-y6.js +0 -4
- package/dist/assets/i18n-locale-zh-BL4_Yand.js +0 -4
- package/dist/assets/i18n-runtime-97_bDVjP.js +0 -1
- package/dist/assets/index-Cadlh4t_.css +0 -2
- package/dist/assets/index-D98sa5GF.js +0 -20
- package/dist/assets/integration-CeAF4JFT.js +0 -1
- package/dist/assets/isSameWeek-DBXaA1Gd.js +0 -1
- package/dist/assets/mermaid-GHXKKRXX-Bb17TtNP.js +0 -1
- package/dist/assets/metadata-admin-CABUxbJl.js +0 -9
- package/dist/assets/plugin-calendar-Cn5HaZU8.js +0 -1
- package/dist/assets/plugin-charts-B6RcFWbo.js +0 -7
- package/dist/assets/plugin-dashboard-DjEx8e5Y.js +0 -6
- package/dist/assets/plugin-form-CLDvL0up.js +0 -1
- package/dist/assets/plugin-gantt-CrVrxVdi.js +0 -63
- package/dist/assets/plugin-grid-D2rmQEW_.js +0 -11
- package/dist/assets/plugin-kanban-BUNHFfIC.js +0 -1
- package/dist/assets/plugin-map-y-7RQQC5.js +0 -1
- package/dist/assets/plugin-report-mT3jpna0.js +0 -59
- package/dist/assets/plugin-timeline-B1EF83D3.js +0 -1
- package/dist/assets/plugin-tree-MTHUt3_S.js +0 -1
- package/dist/assets/plugin-view-DHJI-ahf.js +0 -1
- package/dist/assets/plugins-views-CfkgqD30.js +0 -3
- package/dist/assets/src-BUtIBFDA.js +0 -1
- package/dist/assets/src-C0eXlKtx.js +0 -16
- package/dist/assets/types-zod-DXpXw10W.js +0 -1
- package/dist/assets/ui-components-D6cEVg0T.js +0 -37
- package/dist/assets/ui-layout-DgVDuPEM.js +0 -1
- package/dist/assets/use-book-data-CwRldFxP.js +0 -1
- package/dist/assets/useCanAuthorMetadata-BxCMgFRf.js +0 -1
- package/dist/assets/useOpenRecordList-BrwJFojQ.js +0 -1
- package/dist/assets/vendor-objectstack-DFqu45yM.js +0 -138
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{$r as e,Aa as t,Ar as n,Ba as r,Bi as i,Br as a,Ca as o,Ci as ee,Cr as s,Di as te,Dr as ne,Ea as c,Ei as re,Er as ie,Fi as ae,Fr as oe,Gr as se,Gt as ce,Hr as le,Ia as l,Ir as u,Jr as ue,Kr as de,La as d,Ma as f,Mr as fe,N as pe,Na as p,Ni as me,Nr as he,Oa as m,Or as ge,P as _e,Pa as ve,Pi as ye,Pr as be,Qr as h,Ra as g,Rr as xe,Sa as _,Si as Se,Sr as Ce,Ta as v,Ti as we,Tr as Te,Ur as Ee,Va as y,Vi as De,Vr as b,Wr as Oe,Xr as ke,Yr as Ae,_a as x,_i as je,_r as Me,ar as Ne,ba as Pe,bi as Fe,br as Ie,ci as Le,di as Re,dr as ze,fi as Be,fr as Ve,ga as He,gi as Ue,gr as We,ha as S,hi as Ge,hr as Ke,ir as qe,ja as Je,jr as C,ka as w,li as Ye,lr as Xe,mi as Ze,mr as Qe,ni as $e,or as et,pi as tt,pr as nt,qa as rt,qr as it,rr as at,ti as ot,tn as st,ui as ct,ur as lt,vi as ut,wa as dt,wi as ft,wr as pt,xa as T,xi as mt,xn as ht,xr as gt,ya as _t,yi as vt,za as yt,zi as bt,zr as xt}from"./vendor-objectstack-C4eD5dbT.js";import{Ai as St,Li as Ct,Ri as wt,ki as Tt,zi as Et}from"./framework-CAuH4h0L.js";ht(),S();function E(e){return Je({error:e}).optional().describe(e)}function D(e,t,n){let r=t===`runtime-slot`?`\`${e}\` is a RUNTIME SLOT for a host-supplied function, not authorable metadata (objectui#6124): JSON has no function value, and no handler key consumes a declarative action object. A React host supplies it through the TypeScript interface / props, never through this validator, which refuses it by name.`:`\`${e}\` is RETIRED (objectui#6124, ADR-0049): JSON has no function value, and no renderer reads this key, so nothing could ever run it.`,i=`${n?`${n} — `:``}${r} Author behaviour as a NODE TYPE instead — e.g. { "type": "toast", ... } or an action:button node with a declared action, the spelling PR #6498 established.`;return dt(()=>!1,{error:i}).optional().describe(i)}function O(e,t,n,r){let i=`Unrecognized key(s) on ${n}: \`${e}\`. Did you mean \`${e}\` → \`${t}\`? ${r}`;return Je({error:i}).optional().describe(i)}function Dt(e,t){let n=`\`${e}\` is a RETIRED node type (ADR-0049). ${t}`;return p({type:w(e)}).catchall(y()).check(e=>{e.issues.push({code:`custom`,message:n,input:e.value,path:[`type`]})}).describe(n)}function k(e,t,n){return"REFUSED (objectui#9256, ADR-0049) — `"+e+"` reads NEITHER content channel: measured with the TypeScript type checker over one program per workspace package on a BUILT tree, no renderer read consumes `body` or `children` for this node — "+t+" — and `SchemaRenderer` strips both out of the props bag it spreads. An authored value therefore rendered NOTHING — no render-time error or warning and no element; only the parser tier's `not-a-container` warning (objectui#9910) noticed it. What it renders instead: "+n+`.`}S();var Ot=r([g(),p({dialect:g().optional(),source:g()})]);S();var A=e=>e,kt=e=>e!==null&&(typeof e==`object`||typeof e==`function`)&&`_zod`in e,At=Object.freeze([`description`,`title`,`default`,`externalVocabulary`,`format`,`xRef`,`xExpression`,`xEnumDeprecated`]);Object.freeze([`id`]);var jt=(e,t)=>{let n=e.meta();if(n===void 0)return t;let r={};for(let e of At)Object.prototype.hasOwnProperty.call(n,e)&&n[e]!==void 0&&(r[e]=n[e]);return Object.keys(r).length===0?t:t.meta(r)},j=(e,t)=>{let n=A(e).constructor;return jt(e,new n({...A(e)._zod.def,...t}))},Mt=e=>{for(let t of e.issues)t.code===`unrecognized_keys`&&(t.continue=!1);return e},Nt,Pt=()=>Nt??=rt(`ZodClosedObject`,(e,t)=>{He.init(e,t);let n=e._zod,r=n.parse;n.parse=(e,t)=>{let n=r(e,t);return n instanceof Promise?n.then(e=>Mt(e)):Mt(n)}}),Ft=e=>{if(!kt(e))return!1;let t=A(e)._zod.def;return t.type!==`object`||A(t.catchall)?._zod?.def?.type!==`never`?!1:!(e instanceof Pt())},It=e=>Ft(e)?jt(e,new(Pt())({...A(e)._zod.def})):e,Lt=e=>e.map(e=>It(e));S();var Rt=e=>A(e)._zod.optin===`optional`,zt=new Map,M=e=>{if(!kt(e))return e;let t=zt.get(e);if(t)return t;let n=A(e)._zod.def;if(n.type===`lazy`){let t=j(e,{getter:()=>M(n.getter())});return zt.set(e,t),t}let r=e=>e.every(([e,t])=>e===t),i;switch(n.type){case`default`:{let t=M(e.removeDefault());i=jt(e,Rt(t)?t:ve(t));break}case`object`:{let t={},r=!0;for(let[e,i]of Object.entries(n.shape??{}))t[e]=M(i),t[e]!==i&&(r=!1);i=r?e:j(e,{shape:t});break}case`union`:{let t=(n.options??[]).map(M);i=r((n.options??[]).map((e,n)=>[e,t[n]]))?e:j(e,{options:t});break}case`array`:{let t=M(n.element);i=t===n.element?e:j(e,{element:t});break}case`tuple`:{let t=(n.items??[]).map(M),a=n.rest?M(n.rest):n.rest;i=r([...(n.items??[]).map((e,n)=>[e,t[n]]),[n.rest,a]])?e:j(e,{items:t,...n.rest?{rest:a}:{}});break}case`record`:{let t=M(n.valueType);i=t===n.valueType?e:j(e,{valueType:t});break}case`intersection`:{let t=M(n.left),a=M(n.right);i=r([[n.left,t],[n.right,a]])?e:j(e,{left:t,right:a});break}case`pipe`:{let t=M(n.in),a=n.out?M(n.out):void 0;i=r([[n.in,t],[n.out,a]])?e:j(e,{in:t,...n.out?{out:a}:{}});break}case`optional`:case`nullable`:case`nonoptional`:case`readonly`:case`catch`:{let t=M(n.innerType);i=t===n.innerType?e:j(e,{innerType:t});break}case`custom`:case`transform`:case`function`:i=e;break;default:i=e}return zt.set(e,i),i};function N(e){return M(e)}S();var Bt=p({key:g().describe("Translation-bundle key, e.g. `dialog.close`"),defaultValue:g().optional().describe(`Rendered when the key is missing from the bundle`),params:l(g(),T()).optional().describe(`Interpolation values for the key's placeholders`)}),P=m(()=>Gt),Vt=r([P,_(P)]).optional().describe(`Child components (React-style)`),Ht=r([g(),N(_e)]).superRefine((e,t)=>{let n=N(pe).safeParse(e);if(!n.success)for(let e of n.error.issues)t.addIssue({code:`custom`,message:e.message})}),Ut=p({type:g().describe(`Component type identifier`),id:g().optional().describe(`Unique component identifier`),name:g().optional().describe(`Component name`),label:N(u).optional().describe(`Display label (plain string or inline locale map)`),description:N(u).optional().describe(`Description text (plain string or inline locale map)`),placeholder:g().optional().describe(`Placeholder text`),className:g().optional().describe(`Tailwind CSS classes`),style:l(g(),r([g(),f()])).optional().describe(`Inline CSS styles`),data:T().optional().describe(`Custom data payload`),bind:g().optional().describe(`Data-scope binding path (resolved by useDataScope)`),body:O(`body`,`children`,`this node`,"The `body` child-list spelling was retired by objectui#6771 — one concept, one spelling. Every registration that read it now reads `children`."),children:Vt,visible:r([o(),Ot]).optional().describe(`Visibility control (boolean, predicate expression string, or CEL envelope object)`),visibleWhen:Ht.optional().describe(`Canonical conditional-visibility predicate (ADR-0089)`),visibleOn:g().optional().describe(`[DEPRECATED → visibleWhen] Expression for conditional visibility`),hidden:r([o(),Ot]).optional().describe(`Hidden control (boolean, predicate expression string, or CEL envelope object)`),hiddenOn:g().optional().describe(`Expression for conditional hiding`),disabled:r([o(),Ot]).optional().describe(`Disabled state (boolean, predicate expression string, or CEL envelope object)`),disabledOn:g().optional().describe(`Expression for conditional disabling`),testId:g().optional().describe(`Test identifier`),ariaLabel:r([g(),Bt]).optional().describe(`Accessibility label (plain string or keyed i18n reference)`)}).passthrough(),F=Ut,Wt=[Ut,g(),f(),o(),_t(),Pe()],Gt=r(Wt);function Kt(e,t){let n=Object.fromEntries(Object.entries(e).filter(([e])=>!t.includes(e)));return p(n).partial()}var qt=x([`string`,`number`,`boolean`,`enum`,`array`,`object`,`color`,`date`,`code`,`file`,`slot`]),Jt=p({name:g().describe(`Property name`),type:r([qt,_(qt).min(1).refine(e=>new Set(e).size===e.length,{message:`Input control type arms must be distinct`})]).describe(`Input control type, or the arms of a union type`),of:r([qt,_(qt).min(1).refine(e=>new Set(e).size===e.length,{message:`Input member kind arms must be distinct`})]).optional().describe(`Coarse kind of the input's members, or the arms of a union`),label:E("RETIRED (objectui#7493) — `ComponentInput.label` was never read, and never published: the manifest serializer forwards `name`/`type`/`of`/`required`/`enum`/`binding`/`description` and this is not one of them, so an authored value was silently dropped. Delete the key; an input is identified by its `name` on every path that reaches it, and nothing ever rendered a label for it."),defaultValue:E("RETIRED (objectui#7493) — `ComponentInput.defaultValue` was never read, and never published: the manifest serializer forwards `name`/`type`/`of`/`required`/`enum`/`binding`/`description` and this is not one of them, so an authored value was silently dropped. Delete the key; the renderer's own fallback read is the default, and `description`, which IS published, is where to state it."),required:o().optional().describe(`Required flag`),enum:r([_(g()),_(p({label:g(),value:T()}))]).optional().describe(`Enum options`),description:g().optional().describe(`Help text`),advanced:E('RETIRED (objectui#7493) — `ComponentInput.advanced` was never read, and never published: the manifest serializer forwards `name`/`type`/`of`/`required`/`enum`/`binding`/`description` and this is not one of them, so an authored value was silently dropped. Delete the key; no designer surface ever hid an "advanced" input, so there is nothing to write instead.'),inputType:E("RETIRED (objectui#5905) — `ComponentInput.inputType` was never read, and never published: the manifest serializer forwards `name`/`type`/`of`/`required`/`enum`/`binding`/`description` and this is not one of them, so an authored value was silently dropped. Delete the key; put the control hint in `description`, which IS published."),min:E("RETIRED (objectui#5905) — `ComponentInput.min` was never read, and never published: the manifest serializer forwards `name`/`type`/`of`/`required`/`enum`/`binding`/`description` and this is not one of them, so an authored value was silently dropped. Delete the key; spell the numeric domain out in `description`, which IS published."),max:E("RETIRED (objectui#5905) — `ComponentInput.max` was never read, and never published: the manifest serializer forwards `name`/`type`/`of`/`required`/`enum`/`binding`/`description` and this is not one of them, so an authored value was silently dropped. Delete the key; spell the numeric domain out in `description`, which IS published."),step:E("RETIRED (objectui#5905) — `ComponentInput.step` was never read, and never published: the manifest serializer forwards `name`/`type`/`of`/`required`/`enum`/`binding`/`description` and this is not one of them, so an authored value was silently dropped. Delete the key; spell the numeric domain out in `description`, which IS published."),placeholder:E("RETIRED (objectui#5905) — `ComponentInput.placeholder` was never read, and never published: the manifest serializer forwards `name`/`type`/`of`/`required`/`enum`/`binding`/`description` and this is not one of them, so an authored value was silently dropped. Delete the key; put the hint in `description`, which IS published. `BaseSchema.placeholder`, the node-level prop, is a DIFFERENT key and is unaffected.")});p({label:g().optional().describe(`Display name`),icon:g().optional().describe(`Icon name or SVG`),category:g().optional().describe(`Component category`),inputs:_(Jt).optional().describe(`Configurable properties`),defaultProps:l(g(),T()).optional().describe(`Default property values`),examples:l(g(),T()).optional().describe(`Example configurations`),isContainer:o().optional().describe('Layout container (skipped by the react-page JSX scope, listed in the public layout ledger); not "can have children" — a renderer that puts `children` on the page declares a `children` slot input (objectui#9910)'),resizable:o().optional().describe(`Can be resized`),resizeConstraints:p({width:o().optional(),height:o().optional(),minWidth:f().optional(),maxWidth:f().optional(),minHeight:f().optional(),maxHeight:f().optional()}).optional().describe(`Resize constraints`),tags:_(g()).optional().describe(`Search tags`),description:g().optional().describe(`Component description`)}).extend({type:g().describe(`Component type identifier`),component:T().describe(`Component renderer`)}),l(g(),T()).describe(`HTML attributes`),p({className:g().optional(),style:l(g(),r([g(),f()])).optional()}).describe(`className and inline style`),S();function I(e,t,n){return t.optional().describe(n??`The \`${e}\` props bag — \`@objectstack/spec\` \`ComponentPropsMap['${e}']\`, by reference. Judged only when present, as the spec's props gate judges it.`)}var L={responsiveStyles:N(Fe).optional().describe("Per-breakpoint scoped style maps (ADR-0065) — `@objectstack/spec` `ResponsiveStylesSchema`, the schema `PageComponentSchema.responsiveStyles` declares, by reference. `SchemaRenderer` compiles it to CSS scoped to this node: `large` is the unconditional base, `medium` / `small` / `xsmall` are max-width overrides.")},Yt=[`type`,`id`,`label`,`properties`,`events`,`style`,`className`,`responsiveStyles`,`visibleWhen`,`visibility`,`dataSource`,`responsive`,`aria`];function Xt(e,t){return"A `"+e+"` node takes its props in its `properties` bag, where `@objectstack/spec`'s `ComponentPropsMap['"+e+'\']` row declares them: write `{ "type": "'+e+`", "properties": { "`+t+"\": … } }` (objectui#10872). The spec's own page component refuses a prop written on the node as mis-layered (ADR-0089 D3a), so this face and `os validate` agree. In the bag the prop reaches the block on every read path: `SchemaRenderer` hoists each `properties` key onto the node before the renderer runs (`type` and `id` excepted), and the `element:*` renderers read the bag alone."}function Zt(e){let t=e._zod.def;return(t.type===`optional`?t.innerType._zod.def:t).type===`never`}function R(e,t,n){return Object.fromEntries(Object.entries(t.shape).filter(([e])=>!Yt.includes(e)).map(([t,r])=>[t,Zt(r)?r:O(t,`properties.${t}`,`this \`${e}\` node`,n??Xt(e,t))]))}function z(e,t){return"REFUSED (objectui#10872) — a `"+e+"` node takes its child list in `properties.children`, the member `@objectstack/spec`'s `ComponentPropsMap['"+e+"']` row (`"+t+'`) declares: write `{ "type": "'+e+'", "properties": { "children": [ … ] } }`. A child list written on the node itself — `children`, or `body`, the spelling objectui#6771 retired — is refused, as `@objectstack/spec`\'s `PageComponentSchema` refuses a node-level `children` on a page component (an unrecognized key, ADR-0089 D3a), so this face and `os validate` agree. Moving it changes nothing at render time: `SchemaRenderer` hoists every `properties` key onto the node before the renderer runs (`type` and `id` excepted), so the container reads the same child list.'}var Qt=k(`page:header`,"its registration (`page:header`, `@object-ui/components`) hands the node to `PageHeaderRenderer`, an `any`-typed renderer whose reads, attributed in its own file, are the header keys and the `properties` bag","the page title bar — `title`, `subtitle`, `breadcrumb` and the `actions` toolbar"),$t=F.extend({type:w(`page:header`),...L,...R(`page:header`,N(e)),properties:I(`page:header`,N(e)),body:E(Qt),children:E(Qt)}),en=k(`page:tabs`,"its registration (`page:tabs`, `@object-ui/components`) hands the node to `PageTabsRenderer`, an `any`-typed renderer that reads `items` and renders the `children` of each ITEM, never the node's own","one tab per `items` entry, whose content is that item's own `children` (`properties.items[].children`, which stays live)"),tn=F.extend({type:w(`page:tabs`),...L,...R(`page:tabs`,N(ot)),properties:I(`page:tabs`,N(ot)),onTabChange:D(`onTabChange`,`runtime-slot`,`Tab switch callback`),body:E(en),children:E(en)}),nn=z(`page:card`,`PageCardProps`),rn=F.extend({type:w(`page:card`),...L,...R(`page:card`,N(ke)),properties:I(`page:card`,N(ke)),body:E(nn),children:E(nn)}),an=k(`page:accordion`,"its registration (`page:accordion`, `@object-ui/components`) hands the node to `PageAccordionRenderer`, an `any`-typed renderer that reads `items` and renders the `children` of each ITEM, never the node's own","one collapsible panel per `items` entry, whose content is that item's own `children` (`properties.items[].children`, which stays live)"),on=F.extend({type:w(`page:accordion`),...L,...R(`page:accordion`,N(Ae)),properties:I(`page:accordion`,N(Ae)),body:E(an),children:E(an)}),sn=z(`page:section`,`PageContainerProps`),cn=F.extend({type:w(`page:section`),...L,...R(`page:section`,N(h)),properties:I(`page:section`,N(h)),body:E(sn),children:E(sn)}),ln=z(`page:footer`,`PageContainerProps`),un=F.extend({type:w(`page:footer`),...L,...R(`page:footer`,N(h)),properties:I(`page:footer`,N(h)),body:E(ln),children:E(ln)}),dn=z(`page:sidebar`,`PageContainerProps`),fn=F.extend({type:w(`page:sidebar`),...L,...R(`page:sidebar`,N(h)),properties:I(`page:sidebar`,N(h)),body:E(dn),children:E(dn)}),pn=k(`record:details`,"its registration (`record:details`, `@object-ui/plugin-detail`) hands the node to `RecordDetailsRenderer`, which reads the record-layout keys (`sections`, `fields`, `columns`, `hideFields`, `inlineEdit`, `showHeader`)","the current record's fields, laid out by `sections`, `fields` and `columns`"),mn=F.extend({type:w(`record:details`),...L,...R(`record:details`,N(Re)),properties:I(`record:details`,N(Re)),body:E(pn),children:E(pn)}),hn=k(`record:highlights`,"its registration (`record:highlights`, `@object-ui/plugin-detail`) hands the node to `RecordHighlightsRenderer`, which reads `fields`","a strip of the current record's key `fields`"),gn=F.extend({type:w(`record:highlights`),...L,...R(`record:highlights`,N(Be)),properties:I(`record:highlights`,N(Be)),body:E(hn),children:E(hn)}),_n=k(`record:related_list`,"its registration (`record:related_list`, `@object-ui/plugin-detail`) hands the node to `RecordRelatedListRenderer`, which resolves its `dataSource` binding and reads the list keys (`objectName`, `relationshipField`, `columns`, `filter`, `sort`, `limit`)","the records of `objectName` that point back at the current record through `relationshipField`, in `columns`"),vn=F.extend({type:w(`record:related_list`),...L,...R(`record:related_list`,N(ut)),properties:I(`record:related_list`,N(ut)),body:E(_n),children:E(_n)}),yn=k(`record:path`,"its registration (`record:path`, `@object-ui/plugin-detail`) hands the node to `RecordPathRenderer`, which reads `statusField` and `stages`","a stage path over the current record's `statusField`, drawn from `stages`"),bn=F.extend({type:w(`record:path`),...L,...R(`record:path`,N(Ge)),properties:I(`record:path`,N(Ge)),body:E(yn),children:E(yn)});function xn(e,t,n,r){return"`"+t+"` is a HOST FEED SLOT on `"+e+"`, not authorable metadata (objectui#11321): "+n+" A host supplies it in code, on the node it composes and renders through `SchemaRenderer` (TSX composition), and that node never passes through this validator. Neither `@objectstack/spec`'s page component (on the node) nor its `ComponentPropsMap['"+e+"']` row (in `properties`) declares it. Omit it: "+r}var Sn=xn(`record:activity`,`items`,`it is the feed a host that already owns one passes in, and the renderer presents it in place of its own sources. Written into a JSON document it is a snapshot that never updates.`,"with no host `items` the block presents a mounted discussion context's feed, or fetches the record's own `sys_activity` rows."),Cn=xn(`record:activity`,`loading`,"it is the host's fetch state, paired with the `items` feed slot, and it wins over the block's own state, so an authored `true` pins the loading state on forever.","with `items` omitted the block manages its own loading state."),wn=k(`record:activity`,"its registration (`record:activity`, `@object-ui/plugin-detail`) hands the node to `RecordActivityRenderer`, which reads the feed keys by name (`types`, `filterMode`, `limit`, `showCompleted`, `unifiedTimeline` and the comment and reaction switches)","the current record's activity feed, filtered by `types` and `filterMode` and paged by `limit`"),Tn=F.extend({type:w(`record:activity`),...L,...R(`record:activity`,N(Le)),properties:I(`record:activity`,N(Le)),items:E(Sn),loading:E(Cn),body:E(wn),children:E(wn)}),En=k(`record:discussion`,"its registration (`record:discussion`, `@object-ui/plugin-detail`) hands the node to `RecordChatterRenderer` (shared with `record:chatter`), which copies the node into its panel config; the config is read for `position`, `width`, `collapsible`, `defaultCollapsed` and `feed` only","the current record's discussion feed, placed by `position` and configured by `feed`"),Dn=F.extend({type:w(`record:discussion`),...L,...R(`record:discussion`,N(ct)),properties:I(`record:discussion`,N(ct)),body:E(En),children:E(En)}),On=k(`record:history`,"its registration (`record:history`, `@object-ui/plugin-detail`) hands the node to `RecordHistoryRenderer`, which reads `limit`, `emptyText` and `unknownUserText`","the current record's field-change history, with `emptyText` when it has none"),kn=xn(`record:history`,`entries`,"it is the rows a host that already fetched them passes in, as the record page's synthesizer does (`buildDefaultPageSchema({ history })`). Written into a JSON document it is a static audit trail that never updates.","with no host `entries` the block fetches the record's own `sys_activity` history."),An=xn(`record:history`,`loading`,"it is the host's fetch state, paired with the `entries` feed slot, and it wins over the block's own state, so an authored `true` pins the loading state on forever.","with `entries` omitted the block manages its own loading state."),jn=F.extend({type:w(`record:history`),...L,...R(`record:history`,N(tt)),properties:I(`record:history`,N(tt)),entries:E(kn),loading:E(An),body:E(On),children:E(On)}),Mn=k(`record:quick_actions`,"its registration (`record:quick_actions`, `@object-ui/plugin-detail`) hands the node to `RecordQuickActionsRenderer`, which reads the toolbar keys (`actionNames`, `location`, `align`, `inline`, `variant`, `size`)","a toolbar of the current record's actions, chosen by `actionNames` or by `location`"),Nn=F.extend({type:w(`record:quick_actions`),...L,...R(`record:quick_actions`,N(Ue)),properties:I(`record:quick_actions`,N(Ue)),body:E(Mn),children:E(Mn)}),Pn=k(`record:reference_rail`,"its registration (`record:reference_rail`, `@object-ui/plugin-detail`) hands the node to `RecordReferenceRailRenderer`, which reads `entries` and `hideEmpty`","a rail of related-record lists, one per `entries` item"),Fn=F.extend({type:w(`record:reference_rail`),...L,...R(`record:reference_rail`,N(je)),properties:I(`record:reference_rail`,N(je)),body:E(Pn),children:E(Pn)}),In="REFUSED (objectui#9256, ADR-0049) — `record:alert` renders no child list: measured with the TypeScript type checker over one program per workspace package on a BUILT tree, its registration (`record:alert`, `@object-ui/plugin-detail`) hands the node to `RecordAlertRenderer`, which merges the node's own keys with `properties` (`readProps`) and reads `severity`, `title`, `body`, `icon`, `action`, `dismissible`, `dismissKey` and `visible` from the result — never `children` — and `SchemaRenderer` strips `children` out of the props bag it spreads. An authored child list therefore rendered NOTHING — no render-time error or warning and no element; only the parser tier's `not-a-container` warning (objectui#9910) noticed it. What it renders instead: one callout of `severity`, with its `title` and its `body` message TEXT, both set in `properties`.",Ln=F.extend({type:w(`record:alert`),...L,...R(`record:alert`,N(Ye)),properties:I(`record:alert`,N(Ye)),body:O(`body`,`properties.body`,"this `record:alert` node",'A `record:alert` banner\'s message text is the `body` member of its `properties` bag, where `@objectstack/spec`\'s `ComponentPropsMap[\'record:alert\']` row declares it: write `{ "type": "record:alert", "properties": { "body": "…" } }` (objectui#10872). Not `children`: this block renders no child list and refuses that key (objectui#9256), so the node-level `body` → `children` rename of objectui#6771 does not apply here.'),children:E(In)}),Rn=k(`record:line_items`,"its registration (`record:line_items`, `@object-ui/plugin-form`) hands the node to `LineItemsPanelRenderer`, which passes it through `ElementDataSourceGate` (the node's `dataSource` binding) to `LineItemsPanel`, which reads the line-items keys (`childObject`, `relationshipField`, `columns`, `parentObject`, `parentId`, `recordId`, `amountField`, `totalField`, `title`, `readonly`, `minRows`, `maxRows`, `filter`, `sort`, `limit`)","an editable grid of the `childObject` records that point at the parent record through `relationshipField`, drawn in `columns`"),zn=F.extend({type:w(`record:line_items`),...L,...R(`record:line_items`,N(Ze)),properties:I(`record:line_items`,N(Ze)),dataSource:N(s).optional().describe("Per-element data binding — `@objectstack/spec` `ElementDataSourceSchema`, the schema `PageComponentSchema.dataSource` declares, by reference. `ElementDataSourceGate` lands its `object` on `childObject`, which is why the row leaves `childObject` optional."),body:E(Rn),children:E(Rn)}),Bn=k(`element:text`,"its registration (`element:text`, `@object-ui/components`) hands the node to `ElementTextRenderer`, an `any`-typed renderer that reads the props bag (`readProps`) and `className` and nothing else off the node","`properties.content` as the heading level (`h1`-`h6`) or the paragraph style (`body`, `caption`, `overline`) chosen by `variant`, aligned by `align`"),Vn=F.extend({type:w(`element:text`),...L,...R(`element:text`,N(ne)),properties:I(`element:text`,N(ne)),body:E(Bn),children:E(Bn)}),Hn=N(Te).partial({object:!0});function Un(e){if(!e||typeof e!=`object`||Array.isArray(e))return!1;let t=e.dataSource;if(!t||typeof t!=`object`||Array.isArray(t))return!1;let n=t.object;return typeof n==`string`&&n.length>0}function Wn(e,t){let n=e.properties;n&&typeof n==`object`&&!Array.isArray(n)&&n.object===void 0&&(Un(e)||t.addIssue({code:`custom`,path:[`properties`,`object`],params:{code:`ELEMENT_NUMBER_OBJECT_REQUIRED`},message:"`element:number` names no object to aggregate: set `properties.object`, or bind the node through `dataSource.object` (a non-empty object name). `ComponentPropsMap['element:number']` requires `object`, and the spec waives it only beside `dataSource.object`."}))}var Gn=k(`element:number`,"its registration (`element:number`, `@object-ui/components`) hands the node to `ElementNumberRenderer`, an `any`-typed renderer that reads the props bag (`readProps`), the node's `dataSource` binding and `className`","one aggregate — `aggregate` of `field` over `object` (or `dataSource.object`), formatted by `format` with `prefix` and `suffix`"),Kn=F.extend({type:w(`element:number`),...L,...R(`element:number`,Hn),properties:Hn.optional().describe("The `element:number` props bag — `@objectstack/spec` `ComponentPropsMap['element:number']`, by reference, with `object` optional only because the spec waives it beside `dataSource.object`; without that binding a bag must name `object`. Judged only when present, as the spec's props gate judges it."),dataSource:N(s).optional().describe("Per-element data binding — `@objectstack/spec` `ElementDataSourceSchema`, the schema `PageComponentSchema.dataSource` declares, by reference."),body:E(Gn),children:E(Gn)}).superRefine(Wn,{when:()=>!0}),qn=k(`element:button`,"its registration (`element:button`, `@object-ui/components`) hands the node to `ElementButtonRenderer`, an `any`-typed renderer that reads the props bag (`readProps`) and `className` and nothing else off the node","a button labelled `properties.label` that runs `properties.action`"),Jn=F.extend({type:w(`element:button`),...L,...R(`element:button`,N(Ce)),properties:I(`element:button`,N(Ce)),body:E(qn),children:E(qn)}),Yn=k(`element:divider`,"its registration (`element:divider`, `@object-ui/components`) hands the node to `ElementDividerRenderer`, an `any`-typed renderer that reads `className` and nothing else","a horizontal separator, styled by `className`"),Xn=F.extend({type:w(`element:divider`),...L,properties:d({}).optional().describe("The `element:divider` props bag — `@objectstack/spec` `ComponentPropsMap['element:divider']` declares no prop, so the only bag it accepts is `{}`. The divider takes its styling from `className`."),body:E(Yn),children:E(Yn)}),Zn=k(`element:definition-list`,"its registration (`element:definition-list`, `@object-ui/components`) hands the node to `DefinitionListRenderer`, an `any`-typed renderer that reads the props bag (`readProps`) and `className` and nothing else off the node","one term / description pair per `properties.items` entry (`{ term, description }`), in one or two `columns`"),Qn=F.extend({type:w(`element:definition-list`),...L,...R(`element:definition-list`,N(pt)),properties:I(`element:definition-list`,N(pt)),body:E(Zn),children:E(Zn)}),$n=k(`element:repeater`,"its registration (`element:repeater`, `@object-ui/components`) hands the node to `RepeaterRenderer`, an `any`-typed renderer that reads the props bag (`readProps`) and `className` and nothing else off the node","one line per record of `properties.object` that its query returns, printing that record's `titleField` and `fields` values. It has NO content channel: no per-row template and no child slot"),er=F.extend({type:w(`element:repeater`),...L,...R(`element:repeater`,N(ie)),properties:I(`element:repeater`,N(ie)),body:E($n),children:E($n)}),tr='An `action:button`\'s post-success block (`{ navigate, openIn }`) is the `onSuccess` member of its `properties` bag, where `@objectstack/spec`\'s `ComponentPropsMap[\'action:button\']` row declares it: write `{ "type": "action:button", "properties": { "onSuccess": { "navigate": "…" } } }` (objectui#10872). The spec\'s own page component refuses the key on the node as mis-layered.',nr='An `action:icon`\'s post-success block (`{ navigate, openIn }`) is the `onSuccess` member of its `properties` bag, where `@objectstack/spec`\'s `ComponentPropsMap[\'action:icon\']` row declares it: write `{ "type": "action:icon", "properties": { "onSuccess": { "navigate": "…" } } }` (objectui#10872). The spec\'s own page component refuses the key on the node as mis-layered.',rr=k(`action:button`,"its registration (`action:button`, `@object-ui/components`) hands the node to `ActionButtonRenderer`, which reads the action keys `SchemaRenderer` hoists onto the node from the `properties` bag (`label`, `icon`, `actionType`, `target`, …)","one button labelled `properties.label`, with `properties.icon`, that runs the action `properties.actionType` names. It has no child slot: its label and icon are its whole content"),ir=F.extend({type:w(`action:button`),...L,...R(`action:button`,N(at)),properties:I(`action:button`,N(at)),onClick:D(`onClick`,`runtime-slot`,`Click handler`),onSuccess:O(`onSuccess`,`properties.onSuccess`,"this `action:button` node",tr),body:E(rr),children:E(rr)}),ar=k(`action:icon`,"its registration (`action:icon`, `@object-ui/components`) hands the node to `ActionIconRenderer`, which reads the action keys `SchemaRenderer` hoists onto the node from the `properties` bag (`icon`, `label`, `actionType`, `target`, …)","one icon button showing `properties.icon`, named and tooltipped by `properties.label`, that runs the action `properties.actionType` names. It has no child slot: its icon and label are its whole content"),or=F.extend({type:w(`action:icon`),...L,...R(`action:icon`,N(Ne)),properties:I(`action:icon`,N(Ne)),onClick:D(`onClick`,`runtime-slot`,`Click handler`),onSuccess:O(`onSuccess`,`properties.onSuccess`,"this `action:icon` node",nr),body:E(ar),children:E(ar)}),sr=k(`action:group`,"its registration (`action:group`, `@object-ui/components`) hands the node to `ActionGroupRenderer`, which reads the group keys `SchemaRenderer` hoists onto the node from the `properties` bag and draws each member of `actions` itself",'the members of `properties.actions`, in order: a row of buttons, or with `display: "dropdown"` one trigger labelled `properties.label` whose menu lists them. A member goes in `properties.actions`'),cr=F.extend({type:w(`action:group`),...L,...R(`action:group`,N(qe)),properties:I(`action:group`,N(qe)),body:E(sr),children:E(sr)}),lr=k(`action:menu`,"its registration (`action:menu`, `@object-ui/components`) hands the node to `ActionMenuRenderer`, which reads the menu keys `SchemaRenderer` hoists onto the node from the `properties` bag and draws each member of `actions` itself","one trigger button (`properties.label`, `properties.icon`) whose dropdown lists the members of `properties.actions`, in order. A menu item goes in `properties.actions`"),ur=F.extend({type:w(`action:menu`),...L,...R(`action:menu`,N(et)),properties:I(`action:menu`,N(et)),body:E(lr),children:E(lr)});c(`type`,[$t,tn,rn,on,cn,un,fn,mn,gn,vn,bn,Tn,Dn,jn,Nn,Fn,Ln,zn,Vn,Kn,Jn,Xn,Qn,er,ir,or,cr,ur]),S();var dr=F.extend({type:w(`alert`),title:g().optional().describe(`Alert title`),description:g().optional().describe(`Alert description`),variant:x([`default`,`destructive`]).optional().describe(`Alert variant`),icon:g().optional().describe(`Alert icon`),dismissible:o().optional().describe(`Whether alert can be dismissed`),onDismiss:D(`onDismiss`,`retired`,`Dismiss handler`),body:O(`body`,`children`,`this alert node`,"`alert` reads `children`, never `body` (READ SITE, measured with the TypeScript type checker: `packages/components/src/renderers/data-display/alert.tsx`). `body` was this node's only child-list key until objectui#6771 retired the spelling — one concept, one spelling — so it is refused here by name; write the content under `children`, the one child-list key. objectui#8284.")}),fr=F.extend({type:w(`statistic`),label:g().optional().describe(`Statistic label`),value:r([g(),f()]).describe(`Statistic value`),trend:x([`up`,`down`,`neutral`]).optional().describe(`Trend indicator`),description:g().optional().describe(`Description text`),icon:g().optional().describe(`Statistic icon`),body:E("REFUSED (objectui#9256, ADR-0049) — `statistic` reads NEITHER content channel: measured with the TypeScript type checker across all 24 registering packages, no renderer read consumes `body` or `children` for this node, and `SchemaRenderer` strips both out of the props bag it spreads. An authored value therefore rendered NOTHING — no render-time error or warning and no element; only the parser tier's `not-a-container` warning (objectui#9910) noticed it. What it renders instead: `className`, `description`, `icon`, `label`, `trend`, `value`."),children:E("REFUSED (objectui#9256, ADR-0049) — `statistic` reads NEITHER content channel: measured with the TypeScript type checker across all 24 registering packages, no renderer read consumes `body` or `children` for this node, and `SchemaRenderer` strips both out of the props bag it spreads. An authored value therefore rendered NOTHING — no render-time error or warning and no element; only the parser tier's `not-a-container` warning (objectui#9910) noticed it. What it renders instead: `className`, `description`, `icon`, `label`, `trend`, `value`.")}),pr=F.extend({type:w(`badge`),label:g().optional().describe(`Badge label`),variant:x([`default`,`secondary`,`destructive`,`outline`]).optional().describe(`Badge variant`),icon:g().optional().describe(`Badge icon`),body:O(`body`,`children`,`this badge node`,"`badge` reads `children`, never `body` (READ SITE, measured with the TypeScript type checker: `packages/components/src/renderers/data-display/badge.tsx`). `body` was this node's only child-list key until objectui#6771 retired the spelling — one concept, one spelling — so it is refused here by name; write the content under `children`, the one child-list key. objectui#8284.")}),mr=F.extend({type:w(`avatar`),src:g().optional().describe(`Image source URL`),alt:g().optional().describe(`Alt text`),fallback:g().optional().describe(`Fallback text/initials`),size:x([`sm`,`default`,`lg`,`xl`]).optional().describe(`Avatar size`),shape:x([`circle`,`square`]).optional().describe(`Avatar shape`),body:E("REFUSED (objectui#9256, ADR-0049) — `avatar` reads NEITHER content channel: measured with the TypeScript type checker across all 24 registering packages, no renderer read consumes `body` or `children` for this node, and `SchemaRenderer` strips both out of the props bag it spreads. An authored value therefore rendered NOTHING — no render-time error or warning and no element; only the parser tier's `not-a-container` warning (objectui#9910) noticed it. What it renders instead: `alt`, `fallback`, `src`."),children:E("REFUSED (objectui#9256, ADR-0049) — `avatar` reads NEITHER content channel: measured with the TypeScript type checker across all 24 registering packages, no renderer read consumes `body` or `children` for this node, and `SchemaRenderer` strips both out of the props bag it spreads. An authored value therefore rendered NOTHING — no render-time error or warning and no element; only the parser tier's `not-a-container` warning (objectui#9910) noticed it. What it renders instead: `alt`, `fallback`, `src`.")}),hr=p({id:g().optional().describe(`Item ID`),label:g().optional().describe(`Item label`),description:g().optional().describe(`Item description`),icon:g().optional().describe(`Item icon`),avatar:g().optional().describe(`Item avatar URL`),disabled:o().optional().describe(`Whether item is disabled`),onClick:D(`onClick`,`retired`,`Click handler`),content:r([P,_(P)]).optional().describe(`Custom content`),body:O(`body`,`content`,`this list item`,"`list` draws each item from `content` — a string as-is, a node or node array through `SchemaRenderer` (`packages/components/src/renderers/data-display/list.tsx`). The item-level `body` fallback was retired by objectui#9590.")});function gr(e,t){if(!e||typeof e!=`object`||Array.isArray(e))return;let n=e;n.bind===void 0&&n.items===void 0&&t.addIssue({code:`custom`,path:[],params:{code:`LIST_ENTRIES_REQUIRED`},message:"`list` has no entries to draw: declare `items`, or `bind` a path to an array in the host scope"})}var _r=F.extend({type:w(`list`),title:g().optional().describe(`Heading drawn above the list (objectui#11347)`),items:_(hr).optional().describe(`List items`),ordered:o().optional().describe(`Whether list is ordered`),dividers:o().optional().describe(`Show dividers between items`),dense:o().optional().describe(`Dense spacing`),wrapperClass:g().optional().describe("Classes on the wrapper div around the title and the list — merged with the base `space-y-2` (objectui#7722)"),body:E("REFUSED (objectui#9256, ADR-0049) — `list` reads NEITHER content channel: measured with the TypeScript type checker over one program built from the repo-root tsconfig on a BUILT tree, no renderer read consumes `body` or `children` for this node, and `SchemaRenderer` strips both out of the props bag it spreads. An authored value therefore rendered NOTHING — no render-time error or warning and no element; only the parser tier's `not-a-container` warning (objectui#9910) noticed it. What it renders instead: `bind`, `items`, `ordered`, `title`, `wrapperClass`. The ITEM channel is a different key and stays live: each entry is drawn from its `content` (`renderChildren(item.content)`), a read filed under ListItem and not under this node. `ui:list` is the measured SOLE owner of the bare `list` key (`view:list` passes `skipFallback: true`); re-derive with `pnpm check:registry-bare-names --table` (objectui#9264)."),children:E("REFUSED (objectui#9256, ADR-0049) — `list` reads NEITHER content channel: measured with the TypeScript type checker over one program built from the repo-root tsconfig on a BUILT tree, no renderer read consumes `body` or `children` for this node, and `SchemaRenderer` strips both out of the props bag it spreads. An authored value therefore rendered NOTHING — no render-time error or warning and no element; only the parser tier's `not-a-container` warning (objectui#9910) noticed it. What it renders instead: `bind`, `items`, `ordered`, `title`, `wrapperClass`. The ITEM channel is a different key and stays live: each entry is drawn from its `content` (`renderChildren(item.content)`), a read filed under ListItem and not under this node. `ui:list` is the measured SOLE owner of the bare `list` key (`view:list` passes `skipFallback: true`); re-derive with `pnpm check:registry-bare-names --table` (objectui#9264).")}).superRefine(gr,{when:()=>!0}),vr=p({header:g().describe(`Column header text`),accessorKey:g().describe(`Data accessor key`),className:g().optional().describe(`Column class name`),cellClassName:g().optional().describe(`Cell class name`),width:r([g(),f()]).optional().describe(`Column width`),minWidth:r([g(),f()]).optional().describe(`Minimum width`),align:x([`left`,`center`,`right`]).optional().describe(`Column alignment`),fixed:x([`left`,`right`]).optional().describe(`Fixed column position`),type:x(Et).optional().describe(`Column type`),sortable:o().optional().describe(`Whether column is sortable`),filterable:o().optional().describe(`Whether column is filterable`),resizable:o().optional().describe(`Whether column is resizable`),editable:o().optional().describe(`Whether column is editable (for inline editing)`),cell:D(`cell`,`runtime-slot`,`Custom cell renderer`),headerIcon:T().optional().describe(`Icon node rendered into the header cell, before the header text`),fitContent:o().optional().describe(`Size the column to its own content (width:1% + nowrap) instead of a measured width`),format:g().optional().describe(`Field-meta override: display format pattern (e.g. "$0,0", "0%", "YYYY-MM-DD")`),options:_(p({value:T().describe(`Stored value the cell value is matched against`),label:g().describe(`Label rendered for the matched value`),color:g().optional().describe(`Badge/dot color for the matched value`)})).optional().describe(`Field-meta override: option list for select-flavoured columns`),currency:g().optional().describe(`Field-meta override: ISO 4217 currency code for currency-formatted cells`),wrap:o().optional().describe(`Allow text wrapping`),masked:o().optional().describe(`Masked column: the table withholds the raw value from Ctrl+C / Cmd+C copy, the cell title tooltip, its CSV export, inline edit, the client search and the sort, and sizes the column from its header instead of its values. It withholds only: the producer's cell renderer draws the mask, and the table draws a column with no cell as its value`)}),yr=p({header:g().describe(`Column header text`),accessorKey:g().describe(`Data accessor key`),className:g().optional().describe(`Column class name`),cellClassName:g().optional().describe(`Cell class name`),width:r([g(),f()]).optional().describe(`Column width`),minWidth:E(`RETIRED (objectui#5474) — never read by the static table; use data-table`),align:E(`RETIRED (objectui#5474) — never read by the static table; use data-table, or a cellClassName like text-right`),fixed:E(`RETIRED (objectui#5474) — never read by the static table; use data-table`),type:E(`RETIRED (objectui#5474) — never read by the static table; use data-table`),sortable:E(`RETIRED (objectui#5474) — never read by the static table; use data-table`),filterable:E(`RETIRED (objectui#5474) — never read by the static table; use data-table`),resizable:E(`RETIRED (objectui#5474) — never read by the static table; use data-table`),editable:E(`RETIRED (objectui#5474) — never read by the static table; use data-table`),cell:E(`RETIRED (objectui#5474) — never read by the static table; use data-table`),headerIcon:E(`NOT on the static table surface (objectui#6424) — declared on the rich TableColumn only; use data-table`),fitContent:E(`NOT on the static table surface (objectui#6424) — declared on the rich TableColumn only; use data-table`),format:E(`NOT on the static table surface (objectui#6425) — declared on the rich TableColumn only; use data-table`),options:E(`NOT on the static table surface (objectui#6425) — declared on the rich TableColumn only; use data-table`),currency:E(`NOT on the static table surface (objectui#6425) — declared on the rich TableColumn only; use data-table`),wrap:E(`NOT on the static table surface (objectui#6650) — declared on the rich TableColumn only; use data-table`),masked:E(`NOT on the static table surface (objectui#10583) — declared on the rich TableColumn only; use data-table`)}),br=F.extend({type:w(`table`),caption:g().optional().describe(`Table caption`),columns:_(yr).describe(`Table columns (static subset — objectui#5474)`),data:_(T()).describe(`Table data`),footer:r([P,_(P)]).optional().describe(`Table footer`),hoverable:E(`RETIRED (objectui#5474) — the static table never implemented row hover; use data-table`),striped:E(`RETIRED (objectui#5474) — the static table never implemented striping; style rows via className, or use data-table`),body:E("REFUSED (objectui#9256, ADR-0049) — `table` reads NEITHER content channel: measured with the TypeScript type checker across all 24 registering packages, no renderer read consumes `body` or `children` for this node, and `SchemaRenderer` strips both out of the props bag it spreads. An authored value therefore rendered NOTHING — no render-time error or warning and no element; only the parser tier's `not-a-container` warning (objectui#9910) noticed it. What it renders instead: `caption`, `columns`, `data`, `footer`."),children:E("REFUSED (objectui#9256, ADR-0049) — `table` reads NEITHER content channel: measured with the TypeScript type checker across all 24 registering packages, no renderer read consumes `body` or `children` for this node, and `SchemaRenderer` strips both out of the props bag it spreads. An authored value therefore rendered NOTHING — no render-time error or warning and no element; only the parser tier's `not-a-container` warning (objectui#9910) noticed it. What it renders instead: `caption`, `columns`, `data`, `footer`.")}),xr=F.extend({type:w(`data-table`),caption:g().optional().describe(`Table caption`),borderless:o().optional().describe(`Render the table without its outer rounded border (for embedding inside grouped rows or other containers).`),toolbar:E(`RETIRED (objectui#6881) — never mounted by the data-table renderer; use the built-in toolbar chrome (searchable / exportable), or compose nodes beside the table`),columns:_(vr).describe(`Table columns`),data:_(T()).describe(`Table data`),pagination:o().optional().describe(`Enable pagination`),pageSize:f().optional().describe(`Default page size`),pageSizeOptions:_(f()).optional().describe(`Options for the rows-per-page selector (defaults to 5/10/20/50/100).`),searchable:o().optional().describe(`Enable search`),selectable:r([o(),x([`single`,`multiple`])]).optional().describe("Enable row selection — `true`/`multiple` = multi-select, `single` = replace-on-select with no select-all"),selectionStyle:E("RETIRED (objectui#6152, ADR-0049) — a selectable table always shows its row checkboxes, and there is no hover-only style: nothing authored or produced this key, so the hover branch was dropped. Delete the key; `selectable` alone turns selection on."),sortable:o().optional().describe(`Enable sorting`),exportable:o().optional().describe(`Enable data export`),rowActions:o().optional().describe(`Show the row actions column (edit/delete) — mirrors the boolean the renderer truthiness-tests`),resizableColumns:o().optional().describe(`Allow column resizing`),reorderableColumns:o().optional().describe(`Allow column reordering`),onRowEdit:D(`onRowEdit`,`runtime-slot`,`Row edit handler`),onRowDelete:D(`onRowDelete`,`runtime-slot`,`Row delete handler`),rowEditPredicates:p({visibleWhen:y().optional(),disabledWhen:y().optional()}).optional().describe(`Per-record CEL predicates for the built-in row Edit item (objectui#2614)`),rowDeletePredicates:p({visibleWhen:y().optional(),disabledWhen:y().optional()}).optional().describe(`Per-record CEL predicates for the built-in row Delete item (objectui#2614)`),onSelectionChange:D(`onSelectionChange`,`runtime-slot`,`Selection change handler`),onColumnsReorder:D(`onColumnsReorder`,`runtime-slot`,`Column reorder handler`),onAddRecord:D(`onAddRecord`,`runtime-slot`,`Add record handler`),onBatchSave:D(`onBatchSave`,`runtime-slot`,`Batch save handler`),onCellChange:D(`onCellChange`,`runtime-slot`,`Cell value change handler`),onColumnResize:D(`onColumnResize`,`runtime-slot`,`Column resize handler`),onRowActionDef:D(`onRowActionDef`,`runtime-slot`,`Row action handler`),onRowClick:D(`onRowClick`,`runtime-slot`,`Row click handler`),onRowSave:D(`onRowSave`,`runtime-slot`,`Row save handler`),cellClassName:g().optional().describe("Extra classes folded into the utility body cells only — the selection, row-number and row-actions cells; data cells fold the per-column `cellClassName` instead, so row density has to be set on both"),renderCellEditor:D(`renderCellEditor`,`runtime-slot`,`Host-supplied inline cell editor`),frozenColumns:f().optional().describe(`Number of frozen columns`),showRowNumbers:o().optional().describe(`Show row numbers`),emptyAction:P.optional().describe(`Optional schema node rendered inside the empty-state, e.g. an "Add record" button. Lets the empty state become an actionable invitation rather than a dead end.`),body:E("REFUSED (objectui#9256, ADR-0049) — `data-table` reads NEITHER content channel: measured with the TypeScript type checker across all 24 registering packages, no renderer read consumes `body` or `children` for this node, and `SchemaRenderer` strips both out of the props bag it spreads. An authored value therefore rendered NOTHING — no render-time error or warning and no element; only the parser tier's `not-a-container` warning (objectui#9910) noticed it. What it renders instead: `emptyAction`, `onAddRecord`, `onBatchSave`, `onCellChange`, `onColumnResize`, `onColumnsReorder`, `onRowActionDef`, `onRowClick`, `onRowDelete`, `onRowEdit`, `onRowSave`, `onSelectionChange`, `renderCellEditor`, `rowActionDefs`, `rowDeletePredicates`, `rowEditPredicates`."),children:E("REFUSED (objectui#9256, ADR-0049) — `data-table` reads NEITHER content channel: measured with the TypeScript type checker across all 24 registering packages, no renderer read consumes `body` or `children` for this node, and `SchemaRenderer` strips both out of the props bag it spreads. An authored value therefore rendered NOTHING — no render-time error or warning and no element; only the parser tier's `not-a-container` warning (objectui#9910) noticed it. What it renders instead: `emptyAction`, `onAddRecord`, `onBatchSave`, `onCellChange`, `onColumnResize`, `onColumnsReorder`, `onRowActionDef`, `onRowClick`, `onRowDelete`, `onRowEdit`, `onRowSave`, `onSelectionChange`, `renderCellEditor`, `rowActionDefs`, `rowDeletePredicates`, `rowEditPredicates`.")}),Sr=k(`markdown`,"its registration (`plugin-markdown:markdown`) reads the node through an inline props type and forwards only `content` and `className` to the Markdown implementation","`content`, rendered as sanitized Markdown"),Cr=F.extend({type:w(`markdown`),content:g().describe(`Markdown content`),sanitize:E(`RETIRED (objectui#6972) — sanitization is unconditional: rehype-sanitize is a fixed last link of the markdown renderer's rehype chain, and no value of this key ever switched it. There is no authored spelling that disables XSS sanitization; delete the key.`),components:E("RETIRED (objectui#6972) — never read: the markdown renderer forwards only `content` and `className`, and a map of React component overrides is not a JSON-authorable value. Delete the key; the fenced mermaid / metadata block overrides are the renderer's own fixed map, not an authoring surface."),body:E(Sr),children:E(Sr)}),wr=m(()=>p({id:g().describe(`Node ID`),label:g().describe(`Node label`),icon:g().optional().describe(`Node icon`),defaultExpanded:o().optional().describe(`Default expanded state`),selectable:o().optional().describe(`Whether node is selectable`),children:_(wr).optional().describe(`Child nodes`),data:T().optional().describe(`Custom node data`)})),Tr=F.extend({type:w(`tree-view`),data:E("RETIRED (ADR-0049) — `data` is no longer part of TreeViewSchema; write `nodes` (or bind the tree with `bind`). It was the second spelling of the one inline-nodes slot, read only as the last limb of `boundData || schema.nodes || schema.data || []`, and was retired under ADR-0049 enforce-or-remove with no deprecation window (maintainer ruling B1, 2026-09-04). The renderer reads `bind` then `nodes` now, so an authored `data` would render an empty tree. Rename the key; the array is unchanged."),nodes:_(wr).optional().describe("Inline tree nodes — the one inline spelling, read as the second limb of `boundData || schema.nodes || []` (a `bind`-resolved value wins, so this stays optional and no presence rule exists). Declared by objectui#6150; a `nodes`-only document became LEGAL; the `data` fallback spelling was retired (the registration's own `inputs` and `defaultProps` spell it `nodes`, and the four catalog entries ARE those `defaultProps`)"),title:g().optional().describe(`Heading above the tree — renders only when set (objectui#6150)`),defaultExpandedIds:_(g()).optional().describe(`Default expanded node IDs`),defaultSelectedIds:_(g()).optional().describe(`Default selected node IDs`),expandedIds:_(g()).optional().describe(`Controlled expanded node IDs`),selectedIds:_(g()).optional().describe(`Controlled selected node IDs`),multiSelect:o().optional().describe(`Allow multiple selection`),showLines:o().optional().describe(`Show connecting lines`),onNodeClick:D(`onNodeClick`,`runtime-slot`,`Node click handler`),onSelectChange:D(`onSelectChange`,`retired`,`Selection change handler`),onExpandChange:D(`onExpandChange`,`retired`,`Expand change handler`),body:E("REFUSED (objectui#9256, ADR-0049) — `tree-view` reads NEITHER content channel: measured with the TypeScript type checker across all 24 registering packages, no renderer read consumes `body` or `children` for this node, and `SchemaRenderer` strips both out of the props bag it spreads. An authored value therefore rendered NOTHING — no render-time error or warning and no element; only the parser tier's `not-a-container` warning (objectui#9910) noticed it. What it renders instead: `bind`, `nodes`, `onNodeClick`, `title`."),children:E("REFUSED (objectui#9256, ADR-0049) — `tree-view` reads NEITHER content channel: measured with the TypeScript type checker across all 24 registering packages, no renderer read consumes `body` or `children` for this node, and `SchemaRenderer` strips both out of the props bag it spreads. An authored value therefore rendered NOTHING — no render-time error or warning and no element; only the parser tier's `not-a-container` warning (objectui#9910) noticed it. What it renders instead: `bind`, `nodes`, `onNodeClick`, `title`.")}),Er=N(Me),Dr=p({name:g().optional().describe("Series name — also selects this series' column within each chart-level `data` row when `dataKey` is absent"),dataKey:g().optional().describe("Column this series plots within each chart-level `data` row — the internal spelling of `name`, and the one the renderer takes when both are written"),data:E("RETIRED (ADR-0049) — `ChartDataSeries.data` was never read: `normalizeChartSchema` takes rows from the chart node's chart-level `data` and picks a column with the series' `name`/`dataKey`, so an authored array was dropped in silence. Delete the key; put the rows on the chart-level `data` and the category axis on `xAxisKey`."),type:x([`bar`,`line`,`area`]).optional().describe(`Per-series chart family override (combo charts)`),chartType:O(`chartType`,`type`,`this chart series`,"`chartType` is the renderer's INTERNAL spelling of the declared `type` (objectui#7694): `@objectstack/spec`'s `ChartSeriesSchema` lists it as an alias of `type` and refuses it the same way, and nothing on this authoring face writes it. Write `type` (`bar` | `line` | `area`) for a per-series family override. Until this refusal an authored `chartType` was STRIPPED in silence by this non-strict object, so the series drew in the chart's own family — precisely what the author was overriding."),color:g().optional().describe(`Series color`),label:N(u).optional().describe(`Legend / tooltip name for this series — a plain string or an inline locale map; defaults to the column key`),variant:x([`primary`,`comparison`]).optional().describe("Visual role — `comparison` draws the muted period-over-period overlay; `primary` (the default) is the normal treatment. The spec pair: the renderer-internal `current` spelling is not a member"),opacity:f().optional().describe(`Stroke and fill opacity override — any finite number, the read's own domain; the spec bounds it to 0–1`),dashArray:g().optional().describe(`SVG stroke-dasharray override, e.g. "4 4" for a dashed line`),stack:g().optional().describe(`Stack group id — series sharing one id stack together`),yAxis:x([`left`,`right`]).optional().describe(`Which y-axis this series binds to on a dual-axis chart`)}).superRefine((e,t)=>{e.name===void 0&&e.dataKey===void 0&&t.addIssue({code:`custom`,path:[`name`],message:"A chart series must name the column it plots, with `name` or `dataKey` — `normalizeChartSchema` drops a series that resolves to neither."})});function Or(e){let t=e.xAxis;if(typeof t!=`string`)return e;let{xAxis:n,...r}=e;return r.xAxisKey===void 0?{...r,xAxisKey:t}:r}function kr(e){if(e.code!==`invalid_union`)return;let t=e.input;return!t||typeof t!=`object`||Array.isArray(t)?"`xAxis` is either a bare column name (the sibling spelling of `xAxisKey`, folded onto it at parse) or `@objectstack/spec`'s axis object `{ field, title, format, … }` — this value is neither.":`\`xAxis\` is not a valid \`@objectstack/spec\` axis object — ${(e.errors[1]??[]).map(e=>`${[`xAxis`,...e.path.map(String)].join(`.`)}: ${e.message}`).join(`; `)||`Invalid input`}`}var Ar="`yAxis` on a chart is `@objectstack/spec`'s ARRAY of axis objects — write `yAxis: [{ field: 'total' }]`, one entry per value axis (a second entry declares the right-hand axis). A single axis object or a bare column name is not a member of the protocol.",jr="`drillDown.report` as a named reference, `{ name }`, is RETIRED (objectui#11517): no renderer resolves a report name, so such a drill listed the records and drew no report. Write the report inline, dataset-bound: `@objectstack/spec`'s `ReportSchema`, `{ name, label, dataset, values, … }` (`values` are measure names; `rows`, and `columns` on a matrix, are dimension names), or a `joined` report whose `blocks` bind a dataset.";function Mr(e,t){if(!e||typeof e!=`object`||Array.isArray(e))return;let n=Object.keys(e);n.length===1&&n[0]===`name`&&t.addIssue({code:`custom`,path:[],params:{code:`DRILL_REPORT_REFERENCE_RETIRED`},message:jr})}var Nr=N(vt).extend({objectName:O(`objectName`,`dataset`,`this drill report`,"The pre-9.0 object-bound drill report, `objectName` plus column objects, is RETIRED (objectui#11506): it had no producer, and the drawer drew no report for it. Write the dataset-bound form: `dataset`, `values` (measure names), and `rows`, and `columns` on a matrix, as dimension names.")}).superRefine(Mr,{when:()=>!0}),Pr=p({enabled:o().optional().describe(`Master switch — true, or any other key present, turns the drill on`),mode:x([`filter`,`record`]).optional().describe(`'filter' (the aggregate default) drills through to a filtered list; 'record' (the table / list default) opens the clicked record itself`),target:x([`drawer`,`dialog`,`navigate`]).optional().describe(`Where the drill lands: 'drawer' (default), 'dialog', or 'navigate' to the object's full list page (falls back to 'drawer' without host drill navigation)`),filter:l(g(),y()).optional().describe("Filter applied to the drilled list; values support ${event.*} interpolation"),title:g().optional().describe("Drawer / dialog title; supports ${event.*} interpolation"),report:Nr.optional().describe("Drill into an analytical report instead of the record list: an inline dataset-bound report (`@objectstack/spec` `ReportSchema`, by reference; the drawer writes the drill filter into its `runtimeFilter`). The pre-9.0 `objectName` form (objectui#11506) and the `{ name }` reference (objectui#11517) are retired"),columns:_(g()).optional().describe(`Column whitelist for the inline drill list`),maxRows:f().optional().describe(`Hard cap on rows fetched`)}),Fr=k(`chart`,"its registration (`plugin-charts:chart`, and the `chart:bar` alias) reads the node through `ChartRenderer`'s inline props type","a chart of the `data` rows, drawn by `chartType` and `series`"),Ir=F.extend({type:w(`chart`),chartType:Er.describe(`Chart type`),title:g().optional().describe(`Chart title`),description:g().optional().describe(`Chart description`),categories:_(g()).optional().describe("Alternative series list — column names to plot, used only when `series` is absent. NOT axis labels: the category axis comes from `xAxisKey`/`xAxis`."),series:_(Dr).describe(`Chart data series`),data:_(l(g(),T())).optional().describe("Rows to plot — one object per row, keyed by column name. `series[].name`/`dataKey` picks the column to plot within each row; `xAxisKey` names the category column."),xAxisKey:g().optional().describe("Row key holding the category (x) axis. The bare-string sibling spelling `xAxis: 'month'` folds onto this key at parse and does not survive it."),xAxis:r([g(),N(Qe)],{error:kr}).optional().describe("Category (x) axis: `@objectstack/spec`'s axis object `{ field, title, format, min, max, stepSize, showGridLines, position, logarithmic }`, or a bare column name — the sibling spelling of `xAxisKey`, which it folds onto at parse."),yAxis:_(N(Qe),{error:e=>e.code===`invalid_type`?Ar:void 0}).optional().describe("Value (y) axes: an ARRAY of `@objectstack/spec` axis objects `{ field, title, format, min, max, stepSize, showGridLines, position, logarithmic }`. The first entry is the primary axis; a second entry declares the right-hand axis."),height:r([g(),f()]).optional().describe(`Chart height`),width:r([g(),f()]).optional().describe(`Chart width`),showLegend:o().optional().describe(`Show legend`),showGrid:o().optional().describe(`Show grid lines`),animate:o().optional().describe(`Enable animations`),config:l(g(),T()).optional().describe(`Additional chart configuration`),drillDown:Pr.optional().describe(`Drill-down: clicking a chart segment opens a filtered list view (drawer / dialog)`),body:E(Fr),children:E(Fr)}).overwrite(Or),Lr=k(`pivot`,"its registration hands the node to `PivotTable`, which reads it as `PivotTableSchema` and destructures only the members below","a cross-tab of `data` — `rowField` down, `columnField` across, `valueField` aggregated by `aggregation` — with `title`, `showRowTotals`, `showColumnTotals`, `format` and `columnColors`"),B=F.extend({type:w(`pivot`),title:g().optional().describe(`Pivot table title`),rowField:g().describe(`Field used for row headers`),columnField:g().describe(`Field used for column headers`),valueField:g().describe(`Field whose values are aggregated in cells`),aggregation:x([`sum`,`count`,`avg`,`min`,`max`]).optional().describe(`Aggregation function applied to valueField — one of sum, count, avg, min, max (the renderer treats an absent value as sum)`),data:_(l(g(),y())).describe(`Source data rows — one object per row, keyed by field name`),showRowTotals:o().optional().describe(`Show a totals column on the right`),showColumnTotals:o().optional().describe(`Show a totals row at the bottom`),format:g().optional().describe(`Numeric format string (e.g. "$,.2f") — applied via simple prefix/suffix/decimals`),columnColors:l(g(),g()).optional().describe(`Mapping of column header values to Tailwind text-color classes`),drillDown:E("RETIRED (objectui#10932, ADR-0049) — nothing drills a `pivot` node: `PivotTable` fires a drill only when its host passes an `onDrillDown` handler, and the `pivot` registration passes none, so an authored `drillDown` validated and did nothing. A pivot over inline `data` has no object to list records from. For a pivot whose cells open the records behind a value, author an `object-pivot` (`objectName` + the same `rowField` / `columnField` / `valueField`) and put `drillDown` there."),body:E(Lr),children:E(Lr)});p({id:g().optional().describe(`Event ID`),title:g().describe(`Event title`),description:g().optional().describe(`Event description`),date:r([g(),v()]).describe(`Event date`),icon:g().optional().describe(`Event icon`),color:g().optional().describe(`Event color`),content:r([P,_(P)]).optional().describe(`Custom content`)});var Rr=x([`hour`,`day`,`week`,`month`,`quarter`,`year`]),zr=x([`default`,`success`,`warning`,`danger`,`info`]),Br=r([g(),f(),v()]),Vr=p({title:g().optional().describe(`Bar label`),startDate:Br.optional().describe(`Bar start — a string, a finite number (epoch ms) or a Date`),endDate:Br.optional().describe(`Bar end — a string, a finite number (epoch ms) or a Date; inclusive for a date-only value: a YYYY-MM-DD end is drawn through the end of that day`),variant:zr.optional().describe(`Bar colour`)}).passthrough(),Hr=p({time:g().optional().describe(`When it happened (ISO 8601 date string)`),title:g().describe(`Entry heading — required on a feed item`),description:g().optional().describe(`Secondary line under the title`),variant:zr.optional().describe(`Marker colour`),icon:g().optional().describe(`Emoji or short text drawn inside the marker`),content:r([P,_(P)]).optional().describe(`Extra content below the description`),className:g().optional().describe(`Tailwind classes for the entry`)}).passthrough(),Ur=p({label:g().describe(`Row label — required on a gantt row`),items:_(Vr).optional().describe(`A gantt row's bars — an array of objects when present`)}).passthrough(),Wr=p({...Hr.shape,...Ur.shape}).partial().passthrough(),Gr={feed:{name:`feed item`,plural:`feed items`,variants:"`variant: 'vertical'` or `'horizontal'`",required:`title`,keys:Object.keys(Hr.shape)},gantt:{name:`gantt row`,plural:`gantt rows`,variants:"`variant: 'gantt'`",required:`label`,keys:Object.keys(Ur.shape)}},Kr=F.extend({type:w(`timeline`),variant:x([`vertical`,`horizontal`,`gantt`]).optional().describe(`Layout variant`),items:_(Wr).optional().describe(`Rows to draw — feed items { time, title, … } for vertical / horizontal, gantt rows { label, items } for gantt; each element is judged against the arm variant selects`),dateFormat:x([`short`,`long`,`iso`]).optional().describe(`How item dates are rendered`),scale:Rr.optional().describe(`Gantt axis bucket size (canonical spelling — the spec key)`),timeScale:E(`RETIRED (objectui#6355) — author scale instead`),rowLabel:g().optional().describe(`Header label above the gantt row-label gutter`),minDate:g().optional().describe(`Override the auto-calculated gantt axis start (YYYY-MM-DD)`),maxDate:g().optional().describe(`Override the auto-calculated gantt axis end (YYYY-MM-DD)`),events:E(`RETIRED (objectui#6170) — nothing ever read it; author items instead, each entry { time, title, … }`),orientation:E(`RETIRED (objectui#6170) — nothing ever read it; author variant instead`),position:E(`RETIRED (objectui#6170) — nothing ever read it and nothing replaces it: the vertical rail is always drawn on the left`),body:E("REFUSED (objectui#9256, ADR-0049) — `timeline` reads NEITHER content channel, on EITHER of its two readers: measured with the TypeScript type checker over one program built from the repo-root tsconfig on a BUILT tree, and `packages/plugin-timeline` contains no `body` / `children` read of any kind, on any receiver. `SchemaRenderer` strips both out of the props bag it spreads, so an authored value rendered NOTHING — no render-time error or warning and no element; only the parser tier's `not-a-container` warning (objectui#9910) noticed it. What it renders instead: `variant`, `items`, `dateFormat`, `scale`, `rowLabel`, `minDate`, `maxDate`. `view:timeline` is the measured owner of the bare `timeline` key (`plugin-timeline:timeline` passes `skipFallback: true`); re-derive with `pnpm check:registry-bare-names --table` (objectui#9264)."),children:E("REFUSED (objectui#9256, ADR-0049) — `timeline` reads NEITHER content channel, on EITHER of its two readers: measured with the TypeScript type checker over one program built from the repo-root tsconfig on a BUILT tree, and `packages/plugin-timeline` contains no `body` / `children` read of any kind, on any receiver. `SchemaRenderer` strips both out of the props bag it spreads, so an authored value rendered NOTHING — no render-time error or warning and no element; only the parser tier's `not-a-container` warning (objectui#9910) noticed it. What it renders instead: `variant`, `items`, `dateFormat`, `scale`, `rowLabel`, `minDate`, `maxDate`. `view:timeline` is the measured owner of the bare `timeline` key (`plugin-timeline:timeline` passes `skipFallback: true`); re-derive with `pnpm check:registry-bare-names --table` (objectui#9264).")}).superRefine((e,t)=>{if(!Array.isArray(e.items))return;let n=e.variant??`vertical`,[r,i]=n===`gantt`?[Gr.gantt,Gr.feed]:[Gr.feed,Gr.gantt],a=`\`variant: '${n}'\`${e.variant===void 0?` (the default)`:``} draws ${r.plural} \`{ ${r.keys.join(`, `)} }\``;e.items.forEach((e,n)=>{if(typeof e!=`object`||!e||Array.isArray(e))return;let o=e;o[r.required]===void 0&&t.addIssue({code:`custom`,path:[`items`,n,r.required],message:`\`${r.required}\` is required on a ${r.name}: ${a} (objectui#6356)`});for(let e of i.keys)r.keys.includes(e)||o[e]===void 0||t.addIssue({code:`custom`,path:[`items`,n,e],message:`\`${e}\` is a ${i.name} key, and ${a}; author ${i.plural} under ${i.variants} (objectui#6356)`})})}),qr=F.extend({type:w(`kbd`),label:g().optional().describe(`Key label`),keys:r([g(),_(g())]).optional().describe(`Key(s) to display`),body:E("REFUSED (objectui#9256, ADR-0049) — `kbd` reads NEITHER content channel: measured with the TypeScript type checker across all 24 registering packages, no renderer read consumes `body` or `children` for this node, and `SchemaRenderer` strips both out of the props bag it spreads. An authored value therefore rendered NOTHING — no render-time error or warning and no element; only the parser tier's `not-a-container` warning (objectui#9910) noticed it. What it renders instead: `className`, `keys`, `label`."),children:E("REFUSED (objectui#9256, ADR-0049) — `kbd` reads NEITHER content channel: measured with the TypeScript type checker across all 24 registering packages, no renderer read consumes `body` or `children` for this node, and `SchemaRenderer` strips both out of the props bag it spreads. An authored value therefore rendered NOTHING — no render-time error or warning and no element; only the parser tier's `not-a-container` warning (objectui#9910) noticed it. What it renders instead: `className`, `keys`, `label`.")}),Jr=F.extend({type:w(`html`),html:g().describe(`HTML content`),body:E("REFUSED (objectui#9256, ADR-0049) — `html` reads NEITHER content channel: measured with the TypeScript type checker across all 24 registering packages, no renderer read consumes `body` or `children` for this node, and `SchemaRenderer` strips both out of the props bag it spreads. An authored value therefore rendered NOTHING — no render-time error or warning and no element; only the parser tier's `not-a-container` warning (objectui#9910) noticed it. What it renders instead: `html`."),children:E("REFUSED (objectui#9256, ADR-0049) — `html` reads NEITHER content channel: measured with the TypeScript type checker across all 24 registering packages, no renderer read consumes `body` or `children` for this node, and `SchemaRenderer` strips both out of the props bag it spreads. An authored value therefore rendered NOTHING — no render-time error or warning and no element; only the parser tier's `not-a-container` warning (objectui#9910) noticed it. What it renders instead: `html`.")}),Yr=k(`bar-chart`,"its registration (`plugin-charts:bar-chart`) reads the node through `ChartBarRenderer`'s inline props type, which forwards `data`, `dataKey`, `xAxisKey`, `height`, `className` and `color`","one bar per `data` row, its value from `dataKey` and its category from `xAxisKey`"),Xr=F.extend({type:w(`bar-chart`),data:_(l(g(),T())).optional().describe(`Rows to plot; one bar per row`),dataKey:g().optional().describe(`Row key holding the bar value (y axis)`),xAxisKey:g().optional().describe(`Row key holding the bar category (x axis)`),height:f().optional().describe(`Chart height in pixels`),color:g().optional().describe(`Bar fill colour`),body:E(Yr),children:E(Yr)});c(`type`,[dr,fr,pr,mr,_r,br,xr,Cr,Tr,Ir,B,Kr,qr,Jr,Xr]),S();var Zr=(e,t,n)=>E(`\`${e}\` is RETIRED (objectui#7664, ADR-0049) — it belonged to the retired \`DeclarativeKanbanSchema\` dialect (a ${t} key of the old \`@object-ui/types\` kanban face), which no registered kanban renderer ever read. The \`kanban\` type key now validates the shape \`@object-ui/plugin-kanban\` renders: \`objectName\` + \`groupBy\` for an object-bound board, or \`columns[].cards[]\` for a static one. ${n}`),Qr=p({id:g().describe(`Card ID`),title:g().describe(`Card title`),description:g().optional().describe(`Card description`),badges:_(p({label:g().describe(`Badge label`),variant:x([`default`,`secondary`,`destructive`,`outline`]).optional().describe(`Badge variant`),colorClass:g().optional().describe("Tailwind class string applied to the badge; overrides `variant`"),colorStyle:T().optional().describe("Inline style accompanying `colorClass` — the `getBadgeHexAppearance` style object, passed through verbatim")})).optional().describe(`Card badges`),cardSubtitle:g().optional().describe("Synthesized card subtitle, rendered in preference to `description`"),cardFieldCells:_(p({field:g().describe(`Field name the cell renders`),label:g().optional().describe(`Cell label`),node:T().describe("Rendered cell node — written by `ObjectKanban` from `cardFields`, passed through verbatim")})).optional().describe("Structured per-field cells rendered through the `@object-ui/fields` cell pipeline"),coverImage:g().optional().describe("Resolved cover-image URL, derived from the board's `coverImageField`")}).passthrough();p({id:g().describe(`Column ID`),title:g().describe(`Column title`),cards:_(Qr).describe(`Column cards`),limit:f().optional().describe(`WIP limit — the card count at which the lane warns`),className:g().optional().describe(`Column class name`),collapsed:o().optional().describe(`Whether the lane renders collapsed — narrowed to a title spine with its cards withheld, and reopenable by the viewer; the authored value is the initial state`),color:Zr(`color`,`column`,"Style a lane through its `className`.")}),p({id:g().describe(`Unique template identifier`),name:g().describe(`Human-readable template name`),icon:g().optional().describe(`Optional Lucide icon name`),values:l(g(),T()).describe(`Pre-filled field values`)});var $r=Dt(`kanban`,'Author `object-kanban` instead — the same board, the same renderer, and the spelling every stored kanban view already renders through (`ObjectView` maps a stored `kanban` view type onto the `object-kanban` node type). ⚠️ The STORED `NamedListView.type` value `"kanban"` is a DIFFERENT layer and is unaffected — do not rewrite it.'),ei=x([`month`,`week`,`day`]);p({id:g().describe(`Event ID`),title:g().describe(`Event title`),description:g().optional().describe(`Event description`),start:r([g(),v()]).describe(`Event start time`),end:r([g(),v()]).describe(`Event end time`),allDay:o().optional().describe(`Whether event is all-day`),color:g().optional().describe(`Event color`),data:T().optional().describe(`Custom event data`)});var ti=F.extend({type:w(`calendar-view`),data:T().optional().describe(`Records to display as events (computed with the field-name keys; binding expressions resolve before the renderer reads it)`),titleField:g().optional().describe(`Record field for the event title (default 'title')`),startDateField:g().optional().describe(`Record field for the event start date/time (default 'start')`),endDateField:g().optional().describe(`Record field for the event end date/time (default 'end')`),allDayField:g().optional().describe(`Record field for the all-day flag (default 'allDay')`),colorField:g().optional().describe(`Record field for the event color (default 'color')`),view:ei.optional().describe(`View mode — 'month' | 'week' | 'day', the renderer's rendered set ('agenda' was retired)`),currentDate:r([g(),v()]).optional().describe(`Initial calendar date (ISO string authored; Date instance from a React host)`),allowCreate:o().optional().describe(`Show the "New event" affordance (default false)`),className:g().optional().describe(`Tailwind classes for the calendar container`),onEventClick:D(`onEventClick`,`runtime-slot`,`Host-only event click handler`),onViewChange:D(`onViewChange`,`runtime-slot`,`Host-only view change handler`),body:E("REFUSED (objectui#9256, ADR-0049) — `calendar-view` reads NEITHER content channel: measured with the TypeScript type checker across all 24 registering packages, no renderer read consumes `body` or `children` for this node, and `SchemaRenderer` strips both out of the props bag it spreads. An authored value therefore rendered NOTHING — no render-time error or warning and no element; only the parser tier's `not-a-container` warning (objectui#9910) noticed it. What it renders instead: `allDayField`, `colorField`, `data`, `endDateField`, `startDateField`, `titleField`."),children:E("REFUSED (objectui#9256, ADR-0049) — `calendar-view` reads NEITHER content channel: measured with the TypeScript type checker across all 24 registering packages, no renderer read consumes `body` or `children` for this node, and `SchemaRenderer` strips both out of the props bag it spreads. An authored value therefore rendered NOTHING — no render-time error or warning and no element; only the parser tier's `not-a-container` warning (objectui#9910) noticed it. What it renders instead: `allDayField`, `colorField`, `data`, `endDateField`, `startDateField`, `titleField`.")}),ni=N(ye).shape.operator;function ri(e,t){let n={field:e.field,operator:e.operator};`value`in e&&(n.value=e.value);let r=N(ye).safeParse(n);if(!r.success)for(let e of r.error.issues)t.addIssue({...e})}var ii=p({id:g().describe("Row identity — matched by `removeCondition` / `updateCondition` / `changeOperator` / `changeField`, and the React key"),field:g().describe(`Field name`),operator:ni.describe(`Filter operator`),value:T().optional().describe(`Filter value`)}).superRefine(ri),ai=m(()=>ii),oi="A nested sub-group is RETIRED (objectui#9306, ADR-0049): every entry of a filter group's `conditions` is one flat `{ id, field, operator, value }` row, and an entry carrying its own `conditions` is refused by name. `filter-builder` draws no nested group: it drew a sub-group as a row with blank field and operator triggers and showed its conditions nowhere. Write the rows into the one group instead; its `logic` (`and` / `or`) combines all of them.",si=T().superRefine((e,t)=>{typeof e==`object`&&e&&!Array.isArray(e)&&Object.prototype.hasOwnProperty.call(e,`conditions`)&&t.addIssue({code:`custom`,message:oi})}).pipe(ai),ci=p({id:g().optional().describe("Group id — round-tripped through `onChange`; no read site"),logic:x([`and`,`or`]).describe("How the conditions combine — read by `isValidGroup`"),conditions:_(si).describe(`Flat condition rows. ${oi}`)}),li=m(()=>ci),ui=p({value:g().describe(`Field key — the identity every read site matches on`),label:g().describe(`Field label`),type:x([`text`,`number`,`currency`,`percent`,`rating`,`date`,`datetime`,`time`,`boolean`,`select`,`status`,`lookup`,`master_detail`,`user`]).optional().describe("Field type — the published doc's fourteen; `text` when absent"),operators:_(x([`equals`,`not_equals`,`contains`,`not_contains`,`icontains`,`starts_with`,`ends_with`,`greater_than`,`less_than`,`greater_than_or_equal`,`less_than_or_equal`,`in`,`not_in`,`is_empty`,`is_not_empty`,`is_null`,`is_not_null`,`before`,`after`,`between`])).optional().describe(`Available operators`),options:_(p({label:g(),value:T()})).optional().describe(`Options for select type`)}),di="A bare condition is REFUSED as a `filter-builder` `value` (objectui#10825): the value is a filter group, the only shape `FilterBuilder` reads, and it drew a bare `{ id, field, operator, value }` condition as an EMPTY builder, with no error. Wrap it in `{ logic, conditions: [ … ] }`: `logic` is `and` or `or`, and the condition becomes the one row of `conditions`.",fi=T().superRefine((e,t)=>{typeof e==`object`&&e&&!Array.isArray(e)&&!Object.prototype.hasOwnProperty.call(e,`conditions`)&&(Object.prototype.hasOwnProperty.call(e,`field`)||Object.prototype.hasOwnProperty.call(e,`operator`))&&t.addIssue({code:`custom`,message:di})}).pipe(li),pi=F.extend({type:w(`filter-builder`),fields:_(ui).describe(`Available filter fields`),defaultValue:E("RETIRED (objectui#10825, ADR-0049) — never read: the `filter-builder` renderer hands `FilterBuilder` only `value`, and `FilterBuilder` has no `defaultValue` prop, so an authored default drew the same empty builder as no key at all. Author the filter group as `value` instead, the key the renderer reads. Delete the key."),value:fi.optional().describe(`Controlled filter value — a filter group. ${di}`),onChange:D(`onChange`,`runtime-slot`,`Change handler`),allowGroups:E("REFUSED (objectui#9306, ADR-0049) — `filter-builder` has no nested groups, so `allowGroups` has nothing to allow: no renderer read it, every entry of a filter group's `conditions` is one flat row, and a nested sub-group is refused by name. Remove the key."),maxDepth:E("REFUSED (objectui#9306, ADR-0049) — `filter-builder` has no nested groups, so `maxDepth` has no depth to limit: no renderer read it, every entry of a filter group's `conditions` is one flat row, and a nested sub-group is refused by name. Remove the key."),wrapperClass:g().optional().describe(`Outer wrapper classes for the filter builder (objectui#6150)`),body:E("REFUSED (objectui#9256, ADR-0049) — `filter-builder` reads NEITHER content channel: measured with the TypeScript type checker across all 24 registering packages, no renderer read consumes `body` or `children` for this node, and `SchemaRenderer` strips both out of the props bag it spreads. An authored value therefore rendered NOTHING — no render-time error or warning and no element; only the parser tier's `not-a-container` warning (objectui#9910) noticed it. What it renders instead: `fields`, `label`, `name`, `value`, `wrapperClass`."),children:E("REFUSED (objectui#9256, ADR-0049) — `filter-builder` reads NEITHER content channel: measured with the TypeScript type checker across all 24 registering packages, no renderer read consumes `body` or `children` for this node, and `SchemaRenderer` strips both out of the props bag it spreads. An authored value therefore rendered NOTHING — no render-time error or warning and no element; only the parser tier's `not-a-container` warning (objectui#9910) noticed it. What it renders instead: `fields`, `label`, `name`, `value`, `wrapperClass`.")}),mi=p({id:g().optional().describe(`Item ID`),content:r([P,_(P)]).describe(`Item content`)}),hi=F.extend({type:w(`carousel`),items:_(mi).describe(`Carousel items`),opts:l(g(),y()).optional().describe("Embla option bag forwarded verbatim (`opts={schema.opts}`). Left OPEN on purpose: the renderer passes the whole bag through, so narrowing it to the docs' `{loop, align}` pair would refuse authored documents that work today (objectui#6150)"),orientation:x([`horizontal`,`vertical`]).optional().describe("Scroll axis — `orientation={schema.orientation || 'horizontal'}` (objectui#6150)"),itemClassName:g().optional().describe(`Per-slide Tailwind classes, applied to every carousel item (objectui#6150)`),autoPlay:f().optional().describe(`Auto-play interval (ms)`),showArrows:o().optional().describe(`Show navigation arrows`),showDots:o().optional().describe(`Show navigation dots`),loop:o().optional().describe(`Enable infinite loop`),itemsPerView:f().optional().describe(`Items per view`),gap:f().optional().describe(`Gap between items`),onSlideChange:D(`onSlideChange`,`retired`,`Slide change handler`),body:E("REFUSED (objectui#9256, ADR-0049) — `carousel` reads NEITHER content channel: measured with the TypeScript type checker across all 24 registering packages, no renderer read consumes `body` or `children` for this node, and `SchemaRenderer` strips both out of the props bag it spreads. An authored value therefore rendered NOTHING — no render-time error or warning and no element; only the parser tier's `not-a-container` warning (objectui#9910) noticed it. What it renders instead: `itemClassName`, `items`, `opts`, `orientation`, `showArrows`."),children:E("REFUSED (objectui#9256, ADR-0049) — `carousel` reads NEITHER content channel: measured with the TypeScript type checker across all 24 registering packages, no renderer read consumes `body` or `children` for this node, and `SchemaRenderer` strips both out of the props bag it spreads. An authored value therefore rendered NOTHING — no render-time error or warning and no element; only the parser tier's `not-a-container` warning (objectui#9910) noticed it. What it renders instead: `itemClassName`, `items`, `opts`, `orientation`, `showArrows`.")}),gi=p({toolCallId:g().describe(`Unique tool call identifier`),toolName:g().describe(`Name of the tool`),args:y().optional().describe(`Tool arguments`),result:y().optional().describe(`Tool result`),errorText:g().optional().describe(`Tool error text`),state:x([`partial-call`,`call`,`result`,`input-streaming`,`input-available`,`output-available`,`output-error`]).optional().describe(`Tool invocation state`),approval:p({id:g().describe(`Approval request id — the key a decision is replied on`),approved:o().optional().describe(`The decision, once made`),reason:g().optional().describe(`Free-text reason supplied with the decision`),isAutomatic:o().optional().describe(`True when policy decided without a human`),signature:g().optional().describe(`Signature over the approval, when signed`)}).optional().describe(`AI SDK approval envelope for a tool call awaiting or carrying a human decision`)}),_i=p({id:g().optional(),title:g().optional(),url:g().describe(`Source URL`)}),vi=p({id:g().describe(`Message ID`),role:x([`user`,`assistant`,`system`,`tool`]).describe(`Message role`),content:g().describe(`Message content`),timestamp:r([g(),v()]).optional().describe(`Message timestamp`),metadata:l(g(),T()).optional().describe(`Custom metadata`),streaming:o().optional().describe(`Whether message is being streamed`),toolInvocations:_(gi).optional().describe(`Tool invocations`),reasoning:g().optional().describe(`Chain-of-thought reasoning text`),sources:_(_i).optional().describe(`Citation sources`),traceId:g().optional().describe(`Backend trace id (ai_traces.id)`),avatar:g().optional().describe(`Per-message avatar image URL overriding the chatbot-level userAvatarUrl / assistantAvatarUrl (objectui#7295)`),avatarFallback:g().optional().describe(`Per-message avatar fallback text overriding the chatbot-level userAvatarFallback / assistantAvatarFallback (objectui#7295)`)}),V=F.extend({type:w(`chatbot`),messages:_(vi).describe(`Chat messages`),placeholder:g().optional().describe(`Input placeholder`),loading:E("RETIRED (ADR-0049) — never read: chat progress is runtime state the chat runtime owns (the registration derives it from `useObjectChat` as `isLoading`), and `<Chatbot>` declares no `loading` prop for an authored value to land on. There is no authored spelling that sets it; delete the key."),onSendMessage:D(`onSendMessage`,`retired`,`Send message handler`),showAvatars:E("RETIRED (ADR-0049) — no registration reads or forwards this key by name, and a `chatbot` node renders `<Chatbot>`, which has no `showAvatars` prop; the one channel that did deliver it — the `chatbot-floating` registration's unfiltered props spread — was fenced. Delete the key: a `chatbot` node already renders an avatar beside every message, and the images are `userAvatarUrl` / `assistantAvatarUrl` with their `userAvatarFallback` / `assistantAvatarFallback` siblings."),userAvatar:E("RETIRED (ADR-0049) — never read: this spelling has zero hits anywhere in `packages/plugin-chatbot`. Write `userAvatarUrl` instead (with `userAvatarFallback` for the text shown while the image loads or fails), the key all three chatbot registrations read."),assistantAvatar:E("RETIRED (ADR-0049) — never read: this spelling has zero hits anywhere in `packages/plugin-chatbot`. Write `assistantAvatarUrl` instead (with `assistantAvatarFallback` for the text shown while the image loads or fails), the key all three chatbot registrations read."),markdown:E('RETIRED (ADR-0049) — never read: a `chatbot` node renders `<Chatbot>`, which prints message content as text and has no markdown path for this switch to reach. Author `type: "chatbot-enhanced"` (or `"chatbot-floating"`) with `enableMarkdown` instead — markdown is those nodes\' capability, and `enableMarkdown` is the key their registrations read.'),processVisibility:x([`hidden`,`summary`,`debug`]).optional().describe(`How much agent reasoning/tool detail to show`),height:E('RETIRED (ADR-0049) — never read: `<Chatbot>` has no `height` prop. Write `maxHeight` instead (a CSS length string, default "500px"), the key the `chatbot` and `chatbot-enhanced` registrations forward; size a `chatbot-floating` panel with `floatingConfig.panelHeight`, a number of pixels, which is what that panel reads.'),api:g().optional().describe(`Backend API endpoint for streaming chat`),conversationId:g().optional().describe(`Conversation ID for multi-turn context`),systemPrompt:g().optional().describe(`System prompt for assistant behavior`),model:g().optional().describe(`AI model identifier`),streamingEnabled:o().optional().describe(`Enable streaming responses`),headers:l(g(),g()).optional().describe(`Additional API headers`),requestBody:l(g(),y()).optional().describe("Additional body parameters sent with each API request (forwarded to the chat runtime as its `body` option)"),body:E("REFUSED (objectui#8572, ADR-0049) — `body` is the CONTENT slot on every other component, and `chatbot` reads NEITHER content channel; this arm restated it as the chat API body params, the one place in this vocabulary where the key carried two meanings. Author the chat API params as `requestBody` instead — the key the registration forwards to the chat runtime as its `body` option, and the key the `chatbot-enhanced` and `chatbot-floating` twins already declare. Delete `body` here: nothing renders it, and nothing sends it."),maxToolRoundtrips:E("RETIRED (objectui#5605, ADR-0049) — never honoured: a chat node cannot cap tool-calling round-trips. The tool loop runs on the server agent inside one streamed response, the chat runtime (`useChat`) has no numeric round-trip cap, and the chat request carries no cap field, so the value was dropped before any request was sent. Cap tool loops on the agent instead — `planning.maxIterations` (default 10). Delete the key."),floatingConfig:E('RETIRED (objectui#6152, ADR-0049) — never read on a `chatbot` node: the trigger and the panel this key configures belong to the floating presentation, which a `chatbot` node does not render. Author `type: "chatbot-floating"` with `floatingConfig` instead — that is the registration that reads it — or delete the key.'),onError:D(`onError`,`runtime-slot`,`Error callback`),showTimestamp:o().optional().describe(`Display a timestamp on each message`),userAvatarUrl:g().optional().describe(`URL of the user's avatar image`),userAvatarFallback:g().optional().describe(`Fallback text for the user avatar`),assistantAvatarUrl:g().optional().describe(`URL of the assistant's avatar image`),assistantAvatarFallback:g().optional().describe(`Fallback text for the assistant avatar`),maxHeight:g().optional().describe(`Maximum height of the chat message container (CSS value)`),autoResponse:o().optional().describe(`Enable local auto-response (demo/playground) mode`),autoResponseText:g().optional().describe(`Text of the local auto-response`),autoResponseDelay:f().optional().describe(`Delay in milliseconds before the local auto-response is sent`),onSend:D(`onSend`,`runtime-slot`,`Called after a message is sent, in both API and local auto-response mode`),children:E("REFUSED (objectui#9256, ADR-0049) — `chatbot` reads NEITHER content channel: measured with the TypeScript type checker across all 24 registering packages, no renderer read consumes `body` or `children` for this node, and `SchemaRenderer` strips both out of the props bag it spreads. An authored value therefore rendered NOTHING — no render-time error or warning and no element; only the parser tier's `not-a-container` warning (objectui#9910) noticed it. What it renders instead: `api`, `assistantAvatarFallback`, `assistantAvatarUrl`, `autoResponse`, `autoResponseDelay`, `autoResponseText`, `conversationId`, `headers`, `maxHeight`, `messages`, `model`, `onError`, `onSend`, `placeholder`, `requestBody`, `showTimestamp`, `streamingEnabled`, `systemPrompt`, `userAvatarFallback`, `userAvatarUrl`.")}),yi=V.pick({messages:!0,placeholder:!0,api:!0,conversationId:!0,systemPrompt:!0,model:!0,streamingEnabled:!0,headers:!0,requestBody:!0,onError:!0,showTimestamp:!0,userAvatarUrl:!0,userAvatarFallback:!0,assistantAvatarUrl:!0,assistantAvatarFallback:!0,autoResponse:!0,autoResponseText:!0,autoResponseDelay:!0,onSend:!0}).shape,bi=()=>o().optional().describe(`Render assistant messages as markdown (default true)`),xi=()=>o().optional().describe(`Show the file-attachment control in the composer (default false)`),Si=()=>D(`onClear`,`runtime-slot`,`Called after the conversation is cleared`),Ci=F.extend({type:w(`chatbot-enhanced`),...yi,maxToolRoundtrips:V.shape.maxToolRoundtrips,maxHeight:V.shape.maxHeight,processVisibility:V.shape.processVisibility,enableMarkdown:bi(),enableFileUpload:xi(),surface:x([`card`,`plain`]).optional().describe(`Visual chrome for the chat surface: 'card' bordered panel (default) or 'plain' frameless full-page workspace (objectui#6687)`),onClear:Si(),body:E("REFUSED (objectui#9256, ADR-0049) — `chatbot-enhanced` reads NEITHER content channel: measured with the TypeScript type checker across all 24 registering packages, no renderer read consumes `body` or `children` for this node, and `SchemaRenderer` strips both out of the props bag it spreads. An authored value therefore rendered NOTHING — no render-time error or warning and no element; only the parser tier's `not-a-container` warning (objectui#9910) noticed it. The chat API body params go on `requestBody`, which the registration forwards to the chat runtime. What it renders instead: `api`, `assistantAvatarFallback`, `assistantAvatarUrl`, `autoResponse`, `autoResponseDelay`, `autoResponseText`, `conversationId`, `enableFileUpload`, `enableMarkdown`, `headers`, `maxHeight`, `messages`, `model`, `onClear`, `onError`, `onSend`, `placeholder`, `processVisibility`, `requestBody`, `showTimestamp`, `streamingEnabled`, `surface`, `systemPrompt`, `userAvatarFallback`, `userAvatarUrl`."),children:E("REFUSED (objectui#9256, ADR-0049) — `chatbot-enhanced` reads NEITHER content channel: measured with the TypeScript type checker across all 24 registering packages, no renderer read consumes `body` or `children` for this node, and `SchemaRenderer` strips both out of the props bag it spreads. An authored value therefore rendered NOTHING — no render-time error or warning and no element; only the parser tier's `not-a-container` warning (objectui#9910) noticed it. What it renders instead: `api`, `assistantAvatarFallback`, `assistantAvatarUrl`, `autoResponse`, `autoResponseDelay`, `autoResponseText`, `conversationId`, `enableFileUpload`, `enableMarkdown`, `headers`, `maxHeight`, `messages`, `model`, `onClear`, `onError`, `onSend`, `placeholder`, `processVisibility`, `requestBody`, `showTimestamp`, `streamingEnabled`, `surface`, `systemPrompt`, `userAvatarFallback`, `userAvatarUrl`.")}),wi=p({position:x([`bottom-right`,`bottom-left`]).optional().describe(`Corner the trigger button sits in (default bottom-right)`),defaultOpen:o().optional().describe(`Open the panel on mount (default false)`),panelWidth:f().optional().describe(`Panel width in pixels (default 400)`),panelHeight:f().optional().describe(`Panel height in pixels (default 520)`),title:g().optional().describe(`Panel header title (default "Chat")`),triggerIcon:E(`RETIRED (objectui#7654, ADR-0049) — never read: the floating trigger renders a fixed icon and takes no icon prop, so no authored value changes it. Delete the key.`),triggerSize:f().optional().describe(`Trigger button size in pixels (default 56)`)}),Ti=F.extend({type:w(`chatbot-floating`),...yi,maxToolRoundtrips:V.shape.maxToolRoundtrips,enableMarkdown:bi(),enableFileUpload:xi(),onClear:Si(),floatingConfig:wi.optional().describe(`Trigger button and panel geometry for the floating chat`),body:E("REFUSED (objectui#9256, ADR-0049) — `chatbot-floating` reads NEITHER content channel: measured with the TypeScript type checker across all 24 registering packages, no renderer read consumes `body` or `children` for this node, and `SchemaRenderer` strips both out of the props bag it spreads. An authored value therefore rendered NOTHING — no render-time error or warning and no element; only the parser tier's `not-a-container` warning (objectui#9910) noticed it. The chat API body params go on `requestBody`, which the registration forwards to the chat runtime. What it renders instead: `api`, `assistantAvatarFallback`, `assistantAvatarUrl`, `autoResponse`, `autoResponseDelay`, `autoResponseText`, `conversationId`, `enableFileUpload`, `enableMarkdown`, `floatingConfig`, `headers`, `messages`, `model`, `onClear`, `onError`, `onSend`, `placeholder`, `requestBody`, `showTimestamp`, `streamingEnabled`, `systemPrompt`, `userAvatarFallback`, `userAvatarUrl`."),children:E("REFUSED (objectui#9256, ADR-0049) — `chatbot-floating` reads NEITHER content channel: measured with the TypeScript type checker across all 24 registering packages, no renderer read consumes `body` or `children` for this node, and `SchemaRenderer` strips both out of the props bag it spreads. An authored value therefore rendered NOTHING — no render-time error or warning and no element; only the parser tier's `not-a-container` warning (objectui#9910) noticed it. What it renders instead: `api`, `assistantAvatarFallback`, `assistantAvatarUrl`, `autoResponse`, `autoResponseDelay`, `autoResponseText`, `conversationId`, `enableFileUpload`, `enableMarkdown`, `floatingConfig`, `headers`, `messages`, `model`, `onClear`, `onError`, `onSend`, `placeholder`, `requestBody`, `showTimestamp`, `streamingEnabled`, `systemPrompt`, `userAvatarFallback`, `userAvatarUrl`.")}),Ei=p({x:f().describe(`Grid x position`),y:f().describe(`Grid y position`),w:f().describe(`Grid width`),h:f().describe(`Grid height`)}),Di=x([...N(Me).options,...wt]),Oi="REFUSED (objectui#9256, ADR-0049) — `metric-card` reads NEITHER content channel: measured with the TypeScript type checker over one program per workspace package on a BUILT tree, no renderer read consumes `body` or `children` for this node — `DashboardRenderer` hands a `metric-card` widget to `SchemaRenderer` as the widget's own keys, and the registration (`plugin-dashboard:metric-card`) renders `MetricCard`, which reads named props and forwards the rest to its `Card` as DOM attributes — and `SchemaRenderer` strips both out of the props bag it spreads. An authored value therefore rendered NOTHING — no render-time error or warning and no element — and in a widget slot nothing else noticed it: the parser tier's `not-a-container` warning (objectui#9910) walks `children`, never `widgets`. What it renders instead: one KPI card — `title`, `value`, `icon`, `trend` / `trendValue` and `description`.",ki=F.extend({type:x(Ct).describe(`objectui component type legal in a widget slot (closed set)`),layout:N(gt).shape.layout,title:N(u).optional().describe(`Card heading (plain string or inline locale map)`),value:r([g(),f()]).describe(`The figure the card shows`),icon:g().optional().describe(`Lucide icon name`),trend:x([`up`,`down`,`neutral`]).optional().describe(`Trend direction, drawn with trendValue`),trendValue:g().optional().describe(`Trend text, drawn with trend`),body:E(Oi),children:E(Oi)}),Ai=Kt(N(gt).shape,[`id`,`type`]).extend({id:g().optional().describe(`Widget ID`),type:Di.optional().describe("Widget visualization type — the spec families plus objectui's closed `list`/`custom` extension"),component:r([ki,F]).optional().describe(`Widget Component (legacy format)`)}).strict().superRefine(i).superRefine(bt),ji=N(fe),Mi=Kt(N(Ie).shape,[`name`,`label`,`description`,`widgets`,`globalFilters`]),Ni=F.extend(Mi.shape).extend({type:w(`dashboard`),columns:f().optional().describe(`Number of columns`),gap:f().optional().describe(`Grid gap`),widgets:_(r(Lt([ki,Ai]))).describe(`Dashboard widgets`),globalFilters:_(ji).optional().describe(`Dashboard-level filters`),body:E("REFUSED (objectui#9256, ADR-0049) — `dashboard` reads NEITHER content channel: measured with the TypeScript type checker across all 24 registering packages, no renderer read consumes `body` or `children` for this node, and `SchemaRenderer` strips both out of the props bag it spreads. An authored value therefore rendered NOTHING — no render-time error or warning and no element; only the parser tier's `not-a-container` warning (objectui#9910) noticed it. What it renders instead: `columns`, `dateRange`, `description`, `gap`, `globalFilters`, `header`, `label`, `name`, `refreshIntervalSeconds`, `type`, `widgets`."),children:E("REFUSED (objectui#9256, ADR-0049) — `dashboard` reads NEITHER content channel: measured with the TypeScript type checker across all 24 registering packages, no renderer read consumes `body` or `children` for this node, and `SchemaRenderer` strips both out of the props bag it spreads. An authored value therefore rendered NOTHING — no render-time error or warning and no element; only the parser tier's `not-a-container` warning (objectui#9910) noticed it. What it renders instead: `columns`, `dateRange`, `description`, `gap`, `globalFilters`, `header`, `label`, `name`, `refreshIntervalSeconds`, `type`, `widgets`.")}),Pi=p({id:g().describe(`Widget ID`),title:g().optional().describe(`Widget title`),description:g().optional().describe(`Widget description`),type:x(St).optional().describe(`Widget visualization type`),object:g().optional().describe(`Data source object name`),filter:_(T()).optional().describe(`Widget filter conditions`),categoryField:g().optional().describe(`Category/x-axis field`),valueField:g().optional().describe(`Value/y-axis field`),aggregate:g().optional().describe(`Aggregation function`),chartConfig:T().optional().describe(`Chart configuration`),colorVariant:x(Tt).optional().describe(`Color variant`),layout:Ei.optional().describe(`Widget grid layout`),actionUrl:g().optional().describe(`Clickable action URL`)});p({id:g().optional().describe(`Dashboard identifier`),title:g().optional().describe(`Dashboard title`),description:g().optional().describe(`Dashboard description`),columns:f().min(1).max(24).optional().describe(`Grid columns (1-24)`),gap:f().min(0).optional().describe(`Grid gap in pixels`),refreshIntervalSeconds:f().min(0).optional().describe(`Auto-refresh interval in seconds`),widgets:_(Pi).optional().describe(`Dashboard widgets`),globalFilters:_(T()).optional().describe(`Global filter conditions`),dateRange:p({enabled:o().optional(),field:g().optional(),presets:_(g()).optional()}).optional().describe(`Date range filter`),userFilters:_(p({field:g(),label:g().optional(),type:g().optional()})).optional().describe(`User-selectable filters`),showHeader:o().optional().describe(`Show dashboard header`),showFilters:o().optional().describe(`Show global filter bar`),showDateRange:o().optional().describe(`Show date range picker`),headerActions:_(p({label:g(),action:g().optional(),icon:g().optional(),variant:g().optional()})).optional().describe(`Header action buttons`),aria:Je({error:"RETIRED (ADR-0049) — `aria` is no longer part of DashboardConfig; delete the key. The `{ label, description }` spellings matched no renderer vocabulary and nothing ever read them."}).optional().describe("RETIRED (ADR-0049) — the `{ label, description }` spellings matched no renderer vocabulary and no read point ever consumed them; delete the key. For real ARIA use the spec vocabulary (`ariaLabel` / `ariaDescribedBy` / `role`) on a surface that reads it.")}),c(`type`,[$r,ti,pi,hi,V,Ci,Ti,Ni]),S();var Fi=a.shape.type.removeDefault(),Ii=x([...Fi.options,`list`,`detail`]).describe(`View type`),Li=p({name:g().describe(`Field name/path`),label:g().optional().describe(`Display label`),type:x([`text`,`number`,`currency`,`percent`,`boolean`,`select`,`lookup`,`master_detail`,`email`,`url`,`phone`,`user`,`image`,`link`,`badge`,`date`,`datetime`,`json`,`html`,`markdown`,`custom`]).optional().describe(`Field type for rendering`),format:g().optional().describe(`Format string (e.g., date format)`),render:P.optional().describe(`Custom renderer`),value:T().optional().describe(`Field value`),readonly:o().optional().describe(`Whether field is read-only`),visible:r([o(),g()]).optional().describe(`Field visibility condition`),span:f().optional().describe(`Span across columns (for grid layout)`),options:_(N(st)).optional().describe(`Options for select/lookup fields`),reference:g().optional().describe(`Referenced object name for lookup/master_detail fields`),reference_field:g().optional().describe(`Display field on the referenced object`),currency:g().optional().describe(`Currency code for currency fields (e.g. USD, EUR)`),dueLike:o().optional().describe(`Marks a date/datetime field as due/deadline-semantic, gating the relative "Overdue Nd" wording (vs. neutral "Nd ago" for start/end/created dates)`)}),Ri=p({name:g().optional().describe(`Stable identifier for i18n key resolution`),title:g().optional().describe(`Section title`),description:g().optional().describe(`Section description`),icon:g().optional().describe(`Section icon`),fields:_(Li).describe(`Fields in this section`),collapsible:o().optional().describe(`Collapsible section`),defaultCollapsed:o().optional().describe(`Default collapsed state`),columns:f().optional().describe(`Grid columns for field layout`),visible:r([o(),g()]).optional().describe(`Section visibility condition`),showBorder:o().optional().describe(`Show border around section`),hideEmpty:o().optional().describe("Hide an all-empty section entirely; `false` keeps its heading and label skeleton"),headerColor:x([`muted`,`muted/50`,`accent`,`primary/10`,`secondary/10`,`destructive/10`]).optional().describe(`Header background tint (one of six design-system tokens)`)}),zi=p({key:g().describe(`Tab key/identifier`),label:g().describe(`Tab label`),icon:g().optional().describe(`Tab icon`),content:r([P,_(P)]).describe(`Tab content`),visible:r([o(),g()]).optional().describe(`Tab visibility condition`),badge:r([g(),f()]).optional().describe(`Badge count`)}),Bi=`A record id is a string on every boundary (objectui#9511): write it quoted — 42 becomes '42'. A backend whose primary keys are numeric converts at its OWN adapter boundary, in one typed place, so every author, every caller and every adapter sees one shape.`,Vi=k(`detail-view`,"its `any`-typed registration hands the node to `DetailView`, which reads it as `DetailViewSchema`","one record of `objectName` through `fields` / `sections` / `tabs`; its own node slots are `header`, `footer` and each tab’s `content`"),Hi=p({title:g().describe(`Group title`),description:g().optional().describe(`Group description`),icon:g().optional().describe(`Group icon`),collapsible:o().optional().describe(`Whether the group is collapsible (default true)`),defaultCollapsed:o().optional().describe(`Whether the group starts collapsed`),sections:_(T()).describe(`Sections in this group (not judged on this key; see the docblock)`)}),Ui=p({name:g().describe(`Field name from the record data`),label:g().describe(`Display label`),type:Li.shape.type,icon:g().optional().describe(`Optional icon`),readonly:o().optional().describe(`Read-only chip: never offers inline edit`)}),Wi=F.extend({type:w(`detail-view`),title:g().optional().describe(`Detail title`),api:g().optional().describe(`API endpoint to fetch detail data`),resourceId:g({error:e=>e.code===`invalid_type`?Bi:void 0}).optional().describe(`Resource ID to display — a string, never a number (objectui#9511)`),objectName:g().optional().describe(`Object name (for ObjectQL integration)`),data:T().optional().describe(`Data to display (if not fetching from API)`),layout:x([`vertical`,`horizontal`,`grid`]).optional().describe(`Layout mode`),columns:f().optional().describe(`Grid columns (for grid layout)`),sections:_(Ri).optional().describe(`Field sections for organized display`),fields:_(Li).optional().describe(`Direct fields (without sections)`),actions:_(T()).optional().describe(`Actions available in detail view`),tabs:_(zi).optional().describe(`Tabs for additional content`),showHeader:o().optional().describe(`Draw the view's own heading (title, follow-star, copy-id chip); drawn unless false. record:details sets it from its own showHeader`),showBack:o().optional().describe(`Show back button`),backUrl:g().optional().describe(`Back button URL`),onBack:D(`onBack`,`runtime-slot`,`Custom back action`),onNavigate:D(`onNavigate`,`runtime-slot`,`SPA navigation callback`),onAddComment:D(`onAddComment`,`runtime-slot`,`New comment callback`),showEdit:o().optional().describe(`Show edit button`),editUrl:g().optional().describe(`Edit button URL`),showDelete:o().optional().describe(`Show delete button`),deleteConfirmation:g().optional().describe(`Delete confirmation message`),loading:o().optional().describe(`Whether to show loading state`),header:P.optional().describe(`Custom header content`),footer:P.optional().describe(`Custom footer content`),primaryField:g().optional().describe(`Field whose value is the record title in the header; falls back to title`),summaryFields:_(g()).optional().describe(`Field names rendered as summary badges next to the header title`),autoTabs:o().optional().describe(`Generate Details / Related / Activity tabs when no explicit tabs are configured`),defaultTab:g().optional().describe(`Initially active autoTabs tab (details, related, activity, discussion, history); ignored when that tab does not render`),sectionGroups:_(Hi).optional().describe(`Groups of sections, each rendered under a collapsible header`),highlightFields:_(Ui).optional().describe(`Key fields shown prominently in a highlight banner below the header`),autoDiscoverRelated:E("RETIRED (objectui#6152, ADR-0049) — nothing ever read `autoDiscoverRelated`: `detail-view` does not discover related lists from reference fields. Delete the key, and author a `record:related_list` block for each related list the record page should show."),related:E("`related` is RETIRED on `detail-view` (objectui#7997, ADR-0049 enforce-or-remove). It was a second, unmirrored entry to a capability the protocol already governs: @objectstack/spec declares no DetailView schema, so this array mirrored nothing and drifted — it declared `columns` as TableColumn objects while the renderer it fed also took bare field names. Author a `record:related_list` block instead: it is the protocol-governed entry (RecordRelatedListProps), its `columns` is an array of field-name strings, and it renders through the same component, so nothing about the result is lost — only the second door."),body:E(Vi),children:E(Vi)}),Gi=F.extend({type:w(`view-switcher`),views:_(p({type:Ii.describe(`View type`),label:g().optional().describe(`View label`),icon:g().optional().describe(`View icon`),schema:P.optional().describe(`View schema`)})).describe(`Available view types`),defaultView:Ii.optional().describe(`Default/active view`),activeView:Ii.optional().describe(`Current active view`),variant:x([`tabs`,`buttons`,`dropdown`]).optional().describe(`Switcher variant`),position:x([`top`,`bottom`,`left`,`right`]).optional().describe(`Switcher position`),onViewChange:g().optional().describe(`Event name dispatched on window when the view changes (detail: { view }) — an event NAME, not a callback or a handler expression`),persistPreference:o().optional().describe(`Persist view preference`),storageKey:g().optional().describe(`Storage key for persisting view`),allowCreateView:o().optional().describe(`Show "+" button to add/create a new view`),viewActions:_(p({type:x([`share`,`settings`,`duplicate`,`delete`]).describe(`Action type`),icon:g().optional().describe(`Action icon`)})).optional().describe(`Per-view action icons`),body:E("REFUSED (objectui#9256, ADR-0049) — `view-switcher` reads NEITHER content channel: measured with the TypeScript type checker across all 24 registering packages, no renderer read consumes `body` or `children` for this node, and `SchemaRenderer` strips both out of the props bag it spreads. An authored value therefore rendered NOTHING — no render-time error or warning and no element; only the parser tier's `not-a-container` warning (objectui#9910) noticed it. What it renders instead: `activeView`, `allowCreateView`, `defaultView`, `id`, `onViewChange`, `persistPreference`, `position`, `storageKey`, `variant`, `viewActions`, `views`."),children:E("REFUSED (objectui#9256, ADR-0049) — `view-switcher` reads NEITHER content channel: measured with the TypeScript type checker across all 24 registering packages, no renderer read consumes `body` or `children` for this node, and `SchemaRenderer` strips both out of the props bag it spreads. An authored value therefore rendered NOTHING — no render-time error or warning and no element; only the parser tier's `not-a-container` warning (objectui#9910) noticed it. What it renders instead: `activeView`, `allowCreateView`, `defaultView`, `id`, `onViewChange`, `persistPreference`, `position`, `storageKey`, `variant`, `viewActions`, `views`.")}),Ki=F.extend({type:w(`filter-ui`),filters:_(p({field:g().describe(`Filter field`),label:g().optional().describe(`Filter label`),type:x([`text`,`number`,`select`,`multi-select`,`date`,`date-range`,`boolean`]).describe(`Filter type`),operator:E("RETIRED (objectui#10611, ADR-0049) — `filter-ui` never reads a per-filter `operator`: the renderer picks the control from `type` and emits `{ values }` only, a field → value record with no operator in it, and does no matching of its own. An authored value changed nothing the component rendered or emitted. Nothing in this component implements operators, so remove the key; how each value is matched is up to the host that consumes the change."),options:_(p({label:g(),value:T()})).optional().describe(`Options for select filter`),placeholder:g().optional().describe(`Placeholder`)})).describe(`Available filters`),values:l(g(),T()).optional().describe(`Current filter values`),onChange:g().optional().describe(`Event name dispatched on window when the filters change (detail: { values }) — an event NAME, not a callback or a handler expression`),showClear:o().optional().describe(`Show clear button`),showApply:o().optional().describe(`Show apply button`),layout:x([`inline`,`popover`,`drawer`]).optional().describe(`Filter layout`),body:E("REFUSED (objectui#9256, ADR-0049) — `filter-ui` reads NEITHER content channel: measured with the TypeScript type checker across all 24 registering packages, no renderer read consumes `body` or `children` for this node, and `SchemaRenderer` strips both out of the props bag it spreads. An authored value therefore rendered NOTHING — no render-time error or warning and no element; only the parser tier's `not-a-container` warning (objectui#9910) noticed it. What it renders instead: `filters`, `layout`, `onChange`, `showApply`, `showClear`, `values`."),children:E("REFUSED (objectui#9256, ADR-0049) — `filter-ui` reads NEITHER content channel: measured with the TypeScript type checker across all 24 registering packages, no renderer read consumes `body` or `children` for this node, and `SchemaRenderer` strips both out of the props bag it spreads. An authored value therefore rendered NOTHING — no render-time error or warning and no element; only the parser tier's `not-a-container` warning (objectui#9910) noticed it. What it renders instead: `filters`, `layout`, `onChange`, `showApply`, `showClear`, `values`.")}),qi=F.extend({type:w(`sort-ui`),fields:_(p({field:g().describe(`Field name`),label:g().optional().describe(`Field label`)})).describe(`Sortable fields`),sort:_(p({field:g().describe(`Field to sort by`),direction:x([`asc`,`desc`]).describe(`Sort direction`)})).optional().describe(`Current sort configuration`),onChange:g().optional().describe(`Event name dispatched on window when the sort changes (detail: { sort }) — an event NAME, not a callback or a handler expression`),multiple:o().optional().describe(`Allow multiple sort fields`),variant:x([`dropdown`,`buttons`]).optional().describe(`UI variant`),body:E("REFUSED (objectui#9256, ADR-0049) — `sort-ui` reads NEITHER content channel: measured with the TypeScript type checker across all 24 registering packages, no renderer read consumes `body` or `children` for this node, and `SchemaRenderer` strips both out of the props bag it spreads. An authored value therefore rendered NOTHING — no render-time error or warning and no element; only the parser tier's `not-a-container` warning (objectui#9910) noticed it. What it renders instead: `fields`, `multiple`, `onChange`, `sort`, `variant`."),children:E("REFUSED (objectui#9256, ADR-0049) — `sort-ui` reads NEITHER content channel: measured with the TypeScript type checker across all 24 registering packages, no renderer read consumes `body` or `children` for this node, and `SchemaRenderer` strips both out of the props bag it spreads. An authored value therefore rendered NOTHING — no render-time error or warning and no element; only the parser tier's `not-a-container` warning (objectui#9910) noticed it. What it renders instead: `fields`, `multiple`, `onChange`, `sort`, `variant`.")}),Ji="REFUSED (objectui#9256, ADR-0049) — `detail-section` reads NEITHER content channel: its registration hands the node to `DetailSectionNode`, which folds the declared inputs into the one `section` object `DetailSection` draws, and neither reads `children` or `body`; `SchemaRenderer` strips both out of the props bag it spreads. An authored value would render NOTHING — no render-time error or warning and no element; only the parser tier's `not-a-container` warning (objectui#9910) noticed it (the registration declares no `children` input). What it renders instead: a titled section of `fields`, laid out in `columns`.",Yi=F.extend({type:w(`detail-section`),...Ri.pick({title:!0,description:!0,icon:!0,fields:!0,collapsible:!0,defaultCollapsed:!0,columns:!0,showBorder:!0,headerColor:!0,hideEmpty:!0}).shape,body:E(Ji),children:E(Ji)});c(`type`,[Wi,Gi,Ki,qi,Yi]),S(),ht(),N(be),N(oe);var Xi=N(me),Zi=N(xt),Qi=N(ee),$i=N($e),ea=p({field:g().describe(`Field to sort by`),order:x([`asc`,`desc`]).describe(`Sort order`)}),ta=(()=>{let e=N(a).shape.exportOptions;for(let t=0;t<5&&e&&!e.options&&typeof e.unwrap==`function`;t++)e=e.unwrap();let t=e.options?.find(e=>e.shape);if(!t?.shape)throw Error("@object-ui/types: no object arm on `ListViewSchema.shape.exportOptions`; `ObjectGridSchema.exportOptions` binds it by reference (objectui#7762).");return t.shape})(),na='Export configuration for the grid toolbar menu — the OBJECT form only: `{ formats, maxRecords, includeHeaders, fileNamePrefix, streaming }`. A bare format array is the `list-view` spelling and is NOT read here: `object-grid` reads `exportOptions.formats`, so an array is silently dropped for the csv/json default. Write `{ "formats": ["csv", "xlsx"] }` instead.',ra=k(`object-grid`,"its `any`-typed registration hands the node to `ObjectGrid`, which reads it as `ObjectGridSchema`","the records of `objectName` as a data grid, shaped by `columns`, `filter`, `sort`, `grouping` and `selection`"),ia="RETIRED (objectui#11068, ADR-0049) — `rowSpecActions` was a second spelling of `rowActions`, and nothing ever read it, so an authored list drew no row-menu entry. Rename the key to `rowActions`.",aa="RETIRED (objectui#11068, ADR-0049) — `bulkSpecActions` was a second spelling of `bulkActions`, and nothing ever read it, so an authored list offered no bulk action. Rename the key to `bulkActions`.",oa="RETIRED on `object-grid` (objectui#11068, ADR-0049) — a grid has no `name`: it is not a form field, and nothing read the key. Write `id` for the node's identity (it also scopes the saved column layout) and `label` for the grid's caption.",sa="RETIRED on `object-grid` (objectui#11068, ADR-0049) — a grid is not an input, and nothing read `placeholder`. The text the grid shows when it has no rows is `emptyState: { message }`.",ca="RETIRED on `object-grid` (objectui#11068, ADR-0049) — the grid has no filter UI, and nothing read `showFilters`, so an authored value drew nothing. The filter builder is the `list-view` toolbar's: author a `list-view` and switch the builder with its `userActions.filter`. To narrow the rows this grid fetches, write `filter`.",H="Per-element data binding — `@objectstack/spec` `ElementDataSourceSchema`, the schema `PageComponentSchema.dataSource` declares, by reference: { object, view?, filter?, sort?, limit? } describing WHAT this block queries. Metadata, never the data-source adapter (the host injects that; `SchemaRenderer` strips this key from the props it spreads so it cannot shadow the adapter).",la="ObjectQL object name — required unless the node's `dataSource.object` names the object, which `ElementDataSourceGate` lands here before the renderer reads the node. A node with neither is refused here, keyed `RECORD_SOURCE_REQUIRED`.",ua=N(a).shape.conditionalFormatting.unwrap().element,da=r([g(),ua.shape.condition]);function U(e,t){let n=t===`native`?`\`${e}\` belongs to the native rule dialect \`{ field, operator, value }\`, `:t===`expression`?"`expression` is the template predicate of the native rule dialect, ":`\`${e}\` is a colour written at the top level of the rule, `,r=e===`textColor`?"`style: { color }`":`\`style: { ${e} }\``,i=t===`native`?"Respell `{ field: 'priority', operator: 'equals', value: 'high', backgroundColor: '#fee2e2' }` as `{ condition: \"record.priority == 'high'\", style: { backgroundColor: '#fee2e2' } }` (`not_equals` is `!=`, `greater_than` is `>`, `less_than` is `<`, `contains` is `.contains(…)`, `in` is `record.f in [ … ]`).":t===`expression`?"Write the predicate as the rule's `condition`, in CEL over `record.*` with no `${…}` wrapper: `{ expression: '${record.amount > 1000}', backgroundColor: '#fee2e2' }` is `{ condition: 'record.amount > 1000', style: { backgroundColor: '#fee2e2' } }`.":`Move the colour into the rule's CSS map: ${r}.`;return n+"which `conditionalFormatting` on `object-grid` and `list-view` no longer accepts: RETIRED (objectui#11533), with no alias window. A rule is `{ condition, style }` — a CEL `condition` over `record.*` and a CSS `style` map, the rule `@objectstack/spec`'s `ListViewSchema.conditionalFormatting` declares. "+i}var fa=ua.extend({condition:da,field:E(U(`field`,`native`)),operator:E(U(`operator`,`native`)),value:E(U(`value`,`native`)),expression:E(U(`expression`,`expression`)),backgroundColor:E(U(`backgroundColor`,`colour`)),borderColor:E(U(`borderColor`,`colour`)),textColor:E(U(`textColor`,`colour`))}),pa=d({field:g().describe(`Field the group header aggregates`),type:x([`sum`,`count`,`avg`,`min`,`max`,`count_distinct`]).describe(`Aggregate function`)}),ma=d({create:o().optional().describe(`Offer the add-record row (it also needs the create permission)`),read:o().optional(),update:o().optional().describe("Ceiling over `rowActions`: `false` withholds the generic Edit entry"),delete:o().optional().describe("Ceiling over `rowActions`: `false` withholds the generic Delete entry"),export:o().optional().describe("`false` withholds the export button even when `exportOptions` is set"),import:o().optional()}),ha=t({name:g(),label:g().optional(),help:g().optional(),type:g(),required:o().optional(),default:y().optional(),options:_(t({label:g(),value:r([g(),f(),o()])})).optional(),object:g().optional(),multiple:o().optional(),labelField:g().optional(),placeholder:g().optional()}),ga=d({name:g(),label:g().optional(),icon:g().optional(),variant:x([`primary`,`secondary`,`danger`,`ghost`,`outline`]).optional(),operation:N(ze),patch:l(g(),y()).optional(),params:_(ha).optional(),confirmText:g().optional(),confirmLabel:g().optional(),visible:r([Ot,N(lt).shape.visible]).optional(),requiredPermissions:_(g()).optional(),maxRecords:f().optional(),batchSize:f().optional(),execution:x([`perRecord`,`aggregate`]).optional(),actionDef:l(g(),y()).optional()}),W=F.extend({type:w(`object-grid`),...L,objectName:g().optional().describe(la),dataSource:N(s).optional().describe(H),data:Xi.optional().describe(`Data source configuration`),columns:r([_(g()),_(Zi)]).optional().describe(`Columns configuration`),filter:_(T()).optional().describe(`Filter criteria`),sort:_(ea).optional().describe(`Sort configuration (array only; the legacy string clause is retired — objectui#8221)`),searchableFields:_(g()).optional().describe(`Searchable fields`),resizable:o().optional().describe(`Enable column resizing`),showColumnTypeIcons:o().optional().describe(`Show column type icons (T/Tag/Calendar) in headers. Off by default — type is usually obvious from cell content; the icons add visual noise.`),selection:Qi.optional().describe(`Selection configuration`),pagination:$i.optional().describe(`Pagination configuration`),bulkActions:_(g()).optional().describe(`Bulk action identifiers (spec-canonical key; batchActions is the legacy alias)`),exportOptions:d(ta,{error:e=>e.code===`invalid_type`?na:void 0}).optional().describe(na),fields:_(g()).optional(),staticData:_(T()).optional(),selectable:r([o(),x([`single`,`multiple`])]).optional(),pageSize:f().optional(),showSearch:o().optional(),showPagination:o().optional(),defaultSort:E("RETIRED (objectui#5861, ADR-0049) — `defaultSort` was the legacy single-entry spelling of `sort`, and nothing reads it any more; the upstream protocol refuses it by name on `object-grid`. Rename the key to `sort` and wrap the value in an array: `sort: [{ field, order }]`."),defaultFilters:l(g(),T()).optional(),title:N(u).optional().describe(`DEPRECATED, write label instead: legacy caption/export-file-title fallback, read only when label resolves to nothing. @objectstack/spec I18nLabel, a plain string or an inline locale map`),operators:E("RETIRED (objectui#9739, ADR-0049) — `operators` is not a key of this component; you meant `operations`. The upstream protocol refuses `operators` by name on `object-grid` and prescribes that rename itself; nothing in this renderer ever read the key, so an authored value parsed green and drew nothing. `operations` is the CRUD-affordance toggle object ({ create, read, update, delete })."),rowActions:_(g()).optional().describe("Names of actions offered on each row's menu. `edit` and `delete` are canonical: they select the grid's generic Edit / Delete entries; any other name is a custom action resolved against the object's declared actions. `operations` is the CEILING: `operations.update: false` (or `delete: false`), or a member a declared `operations` block does not name, withholds that generic entry whatever this list says. Inside that ceiling a declared list NARROWS: the generic Edit / Delete are offered only for the canonical names it carries, so `[]` or a list naming only custom actions offers neither. Omit `rowActions` to keep the default generic entries."),batchActions:_(g()).optional(),rowSpecActions:E(ia),bulkSpecActions:E(aa),name:E(oa),placeholder:E(sa),showFilters:E(ca),emptyState:N(ge).optional().describe("What the grid draws instead of an empty table: `{ title, message, icon }`, the spec EmptyState by reference"),editable:o().optional(),keyboardNavigation:o().optional(),frozenColumns:f().optional(),aggregations:_(pa).optional().describe(`Per-group aggregations drawn in each group header, e.g. [{ field: "amount", type: "sum" }]`),bulkActionDefs:_(ga).optional().describe(`Rich bulk action definitions; each opens the bulk action dialog (params, confirm, progress) for the selected rows`),conditionalFormatting:_(fa).optional().describe("Conditional formatting rules for row styling — `[{ condition, style }]`, the rules a list view declares: the first rule whose CEL `condition` holds applies its CSS `style` map to the row"),grouping:N(he).optional().describe(`Row grouping: the spec GroupingConfig, by reference`),navigation:N(b).optional().describe(`Row-click navigation: the spec NavigationConfig, by reference`),operations:ma.optional().describe(`Built-in operation toggles { create, read, update, delete, export, import }; a declared block replaces the default`),reorderableColumns:N(Oe).shape.reorderableColumns,rowColor:N(mt).optional().describe(`Row colour rules: the spec RowColorConfig, by reference`),rowHeight:N(Se).optional().describe(`Row height preset: the spec RowHeight, by reference`),singleClickEdit:N(Oe).shape.singleClickEdit,onNavigate:D(`onNavigate`,`runtime-slot`,`Record navigation handler`),body:E(ra),children:E(ra)}).superRefine(...X(`object-grid`,[`objectName`])),_a=`A record id is a string on every boundary (objectui#9511): write it quoted — 42 becomes '42'. A backend whose primary keys are numeric converts at its OWN adapter boundary, in one typed place, so every author, every caller and every adapter sees one shape.`,va=k(`object-form`,"its `any`-typed registration hands the node to `ObjectForm`, which reads it as `ObjectFormSchema` and assembles every `form` node it renders key by key, never copying either channel","a form over `objectName` built from `fields` / `sections` / `customFields`, in the declared `mode` and `formType`"),ya=p({name:g().optional().describe(`Section identifier`),label:g().optional().describe(`Section label`),description:g().optional().describe(`Section description`),collapsible:o().optional().describe(`Whether the section can be collapsed (dropped on a wizard step)`),collapsed:o().optional().describe(`Whether the section starts collapsed (dropped on a wizard step)`),columns:r([w(1),w(2),w(3),w(4)]).optional().describe(`Field columns in this section`),pane:x([`primary`,`secondary`]).optional().describe(`Split-form panel this section renders in (split forms only)`),fields:_(T()).optional().describe("Field names or inline field configurations; the other way to declare members is `group`"),group:g().optional().describe(`Key of a declared object field group whose members and presentation this section inherits`),visibleWhen:r([g(),p({dialect:g().optional(),source:g()})]).optional().describe(`Predicate gating the whole section: a bare string or the { dialect?, source } envelope`)}),ba=p({show:o().optional().describe(`Show this button`),label:g().optional().describe(`Button label`)}),xa=F.extend({type:w(`object-form`),dataSource:N(s).optional().describe(H),objectName:g().describe(`ObjectQL object name`),mode:x([`create`,`edit`,`view`]).describe(`Form mode`),recordId:g({error:e=>e.code===`invalid_type`?_a:void 0}).optional().describe(`Record ID — a string, never a number (objectui#9511)`),title:N(u).optional().describe(`Form title: the drawer and modal heading. @objectstack/spec I18nLabel, a plain string or an inline locale map`),description:N(u).optional().describe(`Form description: the drawer and modal subtitle. @objectstack/spec I18nLabel, a plain string or an inline locale map`),fields:_(g()).optional().describe(`Included fields`),customFields:_(T()).optional().describe(`Custom field configs`),initialData:l(g(),T()).optional().describe(`Initial data`),groups:_(p({title:g().optional(),description:g().optional(),fields:_(g()),collapsible:o().optional(),defaultCollapsed:o().optional()})).optional().describe(`Field groups`),layout:N(le).shape.layout.describe(`Label placement: vertical (the default) or horizontal — the spec row's enum, by reference`),columns:f().optional().describe(`Number of columns the fields are laid out in (1-4)`),showSubmit:o().optional().describe(`Show submit button`),submitText:N(u).optional().describe(`Submit button text. @objectstack/spec I18nLabel, a plain string or an inline locale map`),successMessage:N(u).optional().describe(`Success toast text after create/update when no onSuccess handler is given. @objectstack/spec I18nLabel, a plain string or an inline locale map`),navigateOnSuccess:g().optional().describe(`DEPRECATED, write submitBehavior instead: navigate here after success (relative path only; {id}/{recordId} interpolated and URL-escaped); precedes the toast`),resetOnSuccess:o().optional().describe(`Reset the form after a successful create for another entry`),submitBehavior:r([p({kind:w(`thank-you`),title:g().optional(),message:g().optional()}),p({kind:w(`redirect`),url:g(),delayMs:f().optional()}),p({kind:w(`continue`)}),p({kind:w(`next-record`)})]).optional().describe(`Declarative post-submit behavior; takes precedence over successMessage/navigateOnSuccess/resetOnSuccess`),showCancel:o().optional().describe(`Show cancel button`),cancelText:N(u).optional().describe(`Cancel button text. @objectstack/spec I18nLabel, a plain string or an inline locale map`),showReset:o().optional().describe(`Show reset button`),initialValues:l(g(),T()).optional().describe(`Initial values`),readOnly:o().optional().describe(`Read-only mode`),formType:x([`simple`,`tabbed`,`wizard`,`split`,`drawer`,`modal`]).optional().describe(`Form variant: simple (default), tabbed, wizard, split, drawer or modal`),sections:_(ya).optional().describe(`Form sections: tabs of a tabbed form, steps of a wizard (array order is step order), groups of a simple form`),defaultTab:g().optional().describe(`Initially active tab (section name); tabbed forms only`),tabPosition:x([`top`,`bottom`,`left`,`right`]).optional().describe(`Tab strip position; tabbed forms only`),allowSkip:o().optional().describe(`Let the user enter any wizard step (navigation freedom, not a validation exemption); wizard forms only`),showStepIndicator:o().optional().describe(`Show the wizard step indicator; wizard forms only`),nextText:N(u).optional().describe(`Next-step button label; wizard forms only. @objectstack/spec I18nLabel, a plain string or an inline locale map`),prevText:N(u).optional().describe(`Previous-step button label; wizard forms only. @objectstack/spec I18nLabel, a plain string or an inline locale map`),splitDirection:x([`horizontal`,`vertical`]).optional().describe(`Split panel direction; split forms only`),splitSize:f().optional().describe(`Size of the first panel as a percentage; split forms only`),splitResizable:o().optional().describe(`Whether the split panels can be resized; split forms only`),drawerSide:x([`top`,`bottom`,`left`,`right`]).optional().describe(`Drawer slide-in side; drawer forms only`),drawerWidth:g().optional().describe(`Drawer width as a CSS value; drawer forms only`),modalSize:x([`sm`,`default`,`lg`,`xl`,`full`]).optional().describe(`Modal dialog size; modal forms only`),modalCloseButton:o().optional().describe(`Show the modal header close button; modal forms only`),mobile:p({stickyActions:o().optional().describe(`Pin Submit/Cancel to the bottom of the viewport on mobile`),stepper:r([o(),w(`auto`)]).optional().describe(`One-field-at-a-time stepper on small screens: true, false or auto`),stepperMinFields:f().optional().describe(`Field-count threshold for stepper auto`),stepperFieldsPerStep:f().optional().describe(`Fields shown per stepper step`),fullscreenLongText:o().optional().describe(`Offer a fullscreen editor for textarea and rich-text fields`)}).optional().describe(`Mobile-only form behaviour; every option is opt-in`),buttons:p({submit:ba.optional(),cancel:ba.optional(),reset:ba.optional()}).optional().describe(`Structured submit/cancel/reset visibility and labels; folded onto the flat keys, which win when set`),defaults:l(g(),T()).optional().describe(`Create-mode initial values keyed by field name; folded into initialValues, which wins when set`),subforms:_(p({childObject:g().describe(`Child object name`),relationshipField:g().optional().describe(`Foreign-key field on the child (derived from metadata when omitted)`),columns:_(N(ce)).optional().describe(`Grid columns for the child rows (derived from metadata when omitted). @objectstack/spec InlineGridColumn, by reference`),amountField:g().optional(),totalField:g().optional(),title:g().optional(),addLabel:g().optional(),minRows:f().optional(),maxRows:f().optional()})).optional().describe(`Inline child collections: renders a master-detail form persisted in one transaction`),onCancel:D(`onCancel`,`runtime-slot`,`Cancel handler`),onError:D(`onError`,`runtime-slot`,`Submit error handler`),onOpenChange:D(`onOpenChange`,`runtime-slot`,`Modal/drawer open-state handler`),onStepChange:D(`onStepChange`,`runtime-slot`,`Wizard step change handler`),onSuccess:D(`onSuccess`,`runtime-slot`,`Submit success handler`),body:E(va),children:E(va)}),G=(e,t)=>E(`NOT A TABLE KEY (objectui#10976) — \`table.${e}\` is not one of the grid keys an object-view hands the grid it draws, so it reached nothing: ${t}`),K="`ObjectGrid` has no read of it.",Sa="`ObjectGrid` honours it on an `object-grid` node, but the view does not hand it to the grid it draws.",Ca="the view's grid lists the records of the view's own `objectName`, and `table` does not re-point that record source.",wa="the view hands its grid its own row-click handler, which the grid obeys first. Write `navigation` / `onNavigate` on the object-view node itself.",q=`the view draws its grid as a component, not as a schema node, so no renderer applies a node-level key to it. A node-level key belongs on the object-view node itself.`,Ta={ariaLabel:G(`ariaLabel`,q),batchActions:G(`batchActions`,"it is the legacy alias of `bulkActions`. Write `bulkActions`."),bind:G(`bind`,Ca),bulkSpecActions:G(`bulkSpecActions`,`${K} Write \`bulkActions\`.`),data:G(`data`,Ca),dataSource:G(`dataSource`,Ca),description:G(`description`,`${Sa} Write \`description\` on the object-view node itself.`),disabled:G(`disabled`,q),disabledOn:G(`disabledOn`,q),emptyState:G(`emptyState`,Sa),hidden:G(`hidden`,q),hiddenOn:G(`hiddenOn`,q),id:G(`id`,"the view fixes its grid's identity, as it fixes `type` and `objectName`."),keyboardNavigation:G(`keyboardNavigation`,Sa),name:G(`name`,K),navigation:G(`navigation`,wa),onNavigate:G(`onNavigate`,wa),placeholder:G(`placeholder`,K),resizableColumns:G(`resizableColumns`,"it is the legacy alias of `resizable`. Write `resizable`."),responsiveStyles:G(`responsiveStyles`,"the view draws its grid as a component, not as a schema node, so nothing compiles a `responsiveStyles` map written here. Delete it."),rowSpecActions:G(`rowSpecActions`,`${K} Write \`rowActions\`.`),showFilters:G(`showFilters`,K),staticData:G(`staticData`,Ca),style:G(`style`,q),testId:G(`testId`,q),visible:G(`visible`,q),visibleOn:G(`visibleOn`,q),visibleWhen:G(`visibleWhen`,q)},Ea=k(`object-view`,"its `any`-typed registration hands the node to `ObjectView`, which reads it as `ObjectViewSchema` and delegates each sub-view to an `object-*` node it assembles key by key, every one of which reads neither channel","the object’s views — `listViews`, `defaultViewType`, `table`, `form` — under its own toolbar"),Da=F.extend({type:w(`object-view`),objectName:g().describe(`ObjectQL object name`),title:g().optional().describe(`View title`),description:g().optional().describe(`View description`),layout:x([`drawer`,`modal`,`page`]).optional().describe(`Layout mode`),defaultViewType:x([`grid`,`kanban`,`gallery`,`calendar`,`timeline`,`gantt`,`map`]).optional().describe(`Default list view type (grid unless a named view sets its own type)`),defaultListView:g().optional().describe(`Key of the listViews entry shown first`),listViews:N(ae).shape.listViews,navigation:N(a).shape.navigation,table:m(()=>F.extend(W.shape).omit({type:!0,objectName:!0}).extend(Ta).partial()).optional().describe(`Table config`),form:m(()=>xa.omit({type:!0,objectName:!0,mode:!0}).partial()).optional().describe(`Form config`),searchableFields:N(a).shape.searchableFields,filterableFields:N(a).shape.filterableFields,showSearch:o().optional().describe(`Show search`),showFilters:o().optional().describe(`Show filters`),showSort:o().optional().describe(`Show sort controls`),showCreate:o().optional().describe(`Show create button`),showRefresh:o().optional().describe(`Show refresh button`),showViewSwitcher:o().optional().describe(`Show the view-type switcher toggle (hidden unless true)`),operations:p({create:o().optional(),read:o().optional(),update:o().optional(),delete:o().optional()}).optional().describe(`Enabled operations`),viewTabBar:E("RETIRED (objectui#7779) — `viewTabBar` was never read off the object-view node: the tab-bar UX config (`ViewTabBarConfig`) is the `config` PROP of the `ViewTabBar` component, composed by the host (`@object-ui/app-shell`), not authored metadata (ADR-0053: the host owns the switcher). Remove the key."),allowCreateView:Gi.shape.allowCreateView,viewActions:Gi.shape.viewActions,onNavigate:D(`onNavigate`,`runtime-slot`,`Record navigation handler`),body:E(Ea),children:E(Ea)}),Oa=p({label:g().describe(`Option display label`),value:r([g(),f(),o()]).describe(`Option value`),color:g().optional().describe(`Option badge color`)}),ka=N(te).extend({label:g().optional().describe(`Display label`),options:_(Oa).optional().describe(`Static options`)}).strip(),Aa=p({field:g().describe(`Field name to filter on`),operator:g().describe(`Filter operator (equals, not_equals, contains, in, greater_than, less_than, …)`),value:T().optional().describe(`Filter value`)}),ja=p({name:g().optional().describe(`Unique tab identifier (snake_case)`),label:g().describe(`Tab display label`),filter:_(Aa).optional().describe(`Filter rules applied when this tab is active`),icon:g().optional().describe(`Lucide icon name`),isDefault:o().optional().describe(`Whether this tab is active by default`),id:g().optional().describe(`@deprecated use name`),filters:_(r([_(T()),g()])).optional().describe(`@deprecated use filter`),default:o().optional().describe(`@deprecated use isDefault`)}).refine(e=>!!(e.name||e.id),{message:`tab requires a name`}),Ma=p({element:x([`dropdown`,`tabs`]).describe(`UI element type`),fields:_(ka).optional().describe(`Field-level filters`),tabs:_(ja).optional().describe(`Named filter presets`),allowAddTab:o().optional().describe(`Allow adding new tabs`),showAllRecords:o().optional().describe(`Show All records tab`)}),Na=[`type`,`columns`,`name`,`label`,`description`,`userFilters`,`userActions`,`aria`,`conditionalFormatting`,`exportOptions`,`kanban`,`calendar`,`gallery`,`timeline`],Pa=O(`groupBy`,`groupByField`,`this kanban configuration`,"`groupBy` is the lane key of the generated `object-kanban` NODE, not of the view-level kanban configuration (objectui#8365). `@objectstack/spec`'s `KanbanConfigSchema` is a strict object of `columns` / `groupByField` / `summarizeField` and refuses `groupBy` by name. Write `groupByField` (or the deprecated `groupField`, which folds onto it). This package, by contrast, accepted the key green until this refusal: it passed `safeValidateSchema` in either nesting, kept by this object's `.passthrough()` or by the untyped legacy `options` bag, and reached `ListView`'s kanban branch, where it OVERRODE the lane that branch had already resolved from `groupByField` — the board grouped by the stray key, and nothing said so. That branch now drops the key, so it is refused here instead of being kept and then ignored."),Fa=N(xe).partial().extend({groupField:g().optional().describe(`Deprecated alias for groupByField`),cardFields:_(g()).optional().describe(`Deprecated alias for columns`),groupBy:Pa}).passthrough(),Ia="`dateField` and `endField` are the pre-#2231 objectui spellings of the calendar date axis, retired at both faces by objectui#8355. `@objectstack/spec` spells the axis `startDateField` and `endDateField` only. ⚠️ This package accepted BOTH legacy spellings green until that retirement — they rode a `.passthrough()` straight through `safeValidateSchema` into `ListView`'s calendar branch, which flattened them onto the generated `object-calendar` node where the renderer's alias ladder read them. That ladder is gone, so the key is refused here instead of being kept and then ignored. ",La={dateField:{binding:'Write `startDateField` for the event start. Kept rather than refused, an authored `dateField` binds nothing: the calendar falls through to "Calendar configuration required", a screen that names the canonical keys and never the key you wrote.',container:'Write `startDateField` for the event start. Kept rather than refused, an authored `dateField` fails without even reaching that refusal screen: this container is read WHOLE, so the calendar still mounts and simply places nothing — every record ends up under "Unscheduled" with no date to draw it on.'},endField:{binding:"Write `endDateField` for the event end. Kept rather than refused, an authored `endField` fails even more quietly than its sibling: a calendar that also carries a start binding still DRAWS, and only the end of every event is silently dropped.",container:"Write `endDateField` for the event end. Kept rather than refused, an authored `endField` fails even more quietly than its sibling: a calendar that also carries a start binding still DRAWS, and only the end of every event is silently dropped."}},J=(e,t)=>Ia+La[e][t],Ra={dateField:O(`dateField`,`startDateField`,`this calendar configuration`,J(`dateField`,`binding`)),endField:O(`endField`,`endDateField`,`this calendar configuration`,J(`endField`,`binding`))},za={dateField:O(`dateField`,`startDateField`,`this calendar configuration`,J(`dateField`,`container`)),endField:O(`endField`,`endDateField`,`this calendar configuration`,J(`endField`,`container`))},Ba={dateField:O(`dateField`,`startDateField`,`this object-calendar node`,J(`dateField`,`binding`)),endField:O(`endField`,`endDateField`,`this object-calendar node`,J(`endField`,`binding`))},Va=N(Ve).partial().extend({defaultView:x([`month`,`week`,`day`]).optional().describe(`Initial calendar view mode — 'month' | 'week' | 'day' ('agenda' was retired)`),dateField:Ra.dateField,endField:Ra.endField}).passthrough(),Ha=N(Ve).partial().extend({allDayField:g().optional().describe(`Field carrying the all-day flag. Declared by the spec's CalendarConfigSchema since 17.5.0, with the same accept set as this member. LOAD-BEARING since objectui#8026`),dateField:za.dateField,endField:za.endField}).passthrough(),Ua=N(n).partial().extend({imageField:g().optional().describe(`Deprecated alias for coverField`)}).passthrough(),Wa=N(ft).partial().extend({dateField:g().optional().describe(`Deprecated alias for startDateField`)}).passthrough(),Ga=a.shape.type.removeDefault(),Ka=N(re),qa=e=>`\`${e}\` is refused on a \`chart\` view bound to a semantic \`dataset\`: the chart queries the dataset, not the list object, so a view filter here is never applied and the chart would draw unfiltered totals. Remove it — a dataset chart's scope is written in the dataset.`;function Ja(e,t){if(e.viewType!==`chart`)return;let n=e.options&&typeof e.options==`object`?e.options.chart:void 0,r=e.chart||n;if(r&&typeof r==`object`&&r.dataset)for(let n of[`filter`,`filters`]){let r=e[n];Array.isArray(r)&&r.length!==0&&t.addIssue({code:`custom`,path:[n],message:qa(n),input:r})}}var Ya=k(`list-view`,"its registration (`plugin-list:list-view`) reads the node as `ListViewSchema` itself","the records of `objectName` in the visualization `viewType` names, shaped by `columns`, `filter`, `sort` and `options`"),Xa=F.extend(Kt(N(a).shape,Na).shape).extend({type:w(`list-view`),dataSource:N(s).optional().describe(H),objectName:g().optional().describe(la),viewType:Ga.optional().describe(`View Type`),columns:r([_(g()),_(Zi)]).optional().describe(`Columns definition`),fields:_(g()).optional().describe(`Legacy alias for string[] columns`),filters:_(r([_(T()),g()])).optional().describe(`Filter conditions (legacy)`),showSearch:o().optional().describe(`Show search in toolbar`),showSort:o().optional().describe(`Show sort controls in toolbar`),showFilters:o().optional().describe(`Show filter controls in toolbar`),showHideFields:o().optional().describe(`Show hide-fields button in toolbar`),showGroup:o().optional().describe(`Show group button in toolbar`),showColor:o().optional().describe(`Show color button in toolbar`),showDensity:o().optional().describe(`Show density/row-height button in toolbar`),showDescription:o().optional().describe(`Show field descriptions`),allowExport:o().optional().describe(`Allow data export`),densityMode:x([`compact`,`comfortable`,`spacious`]).optional().describe(`Density mode`),color:g().optional().describe(`Color field for row/card coloring`),fieldTextColor:g().optional().describe(`Field for custom text color`),prefixField:g().optional().describe(`Prefix field before title`),wrapHeaders:o().optional().describe(`Wrap column headers`),clickIntoRecordDetails:o().optional().describe(`Navigate to detail on row click`),addRecordViaForm:o().optional().describe(`Add records via form dialog`),addDeleteRecordsInline:o().optional().describe(`Enable inline add/delete`),collapseAllByDefault:o().optional().describe(`Collapse all groups by default`),options:l(g(),T()).check(e=>{let t=e.value,n=t?.kanban;n&&typeof n==`object`&&!Array.isArray(n)&&n.groupBy!==void 0&&e.issues.push({code:`custom`,message:Pa.description,input:n.groupBy,path:[`kanban`,`groupBy`]});let r=t?.calendar;if(r&&typeof r==`object`&&!Array.isArray(r))for(let t of[`dateField`,`endField`]){let n=r[t];n!==void 0&&e.issues.push({code:`custom`,message:Ra[t].description,input:n,path:[`calendar`,t]})}}).optional().describe(`Component overrides (legacy)`),operations:p({create:o().optional(),read:o().optional(),update:o().optional(),delete:o().optional(),export:o().optional(),import:o().optional()}).optional().describe(`Enabled operations`),userFilters:Ma.optional().describe(`User filters configuration (accepts legacy tab shapes)`),userActions:Ka.optional().describe(`User action toggles for the view toolbar`),aria:N(Xe).extend({live:x([`polite`,`assertive`,`off`]).optional().describe(`aria-live politeness for the list region (objectui-only — promote rather than grow this extension)`)}).optional().describe(`ARIA attributes`),conditionalFormatting:_(fa).optional().describe(`Conditional formatting rules`),exportOptions:N(a).shape.exportOptions,kanban:Fa.optional().describe(`Kanban-specific configuration`),calendar:Va.optional().describe(`Calendar-specific configuration`),gallery:Ua.optional().describe(`Gallery-specific configuration`),timeline:Wa.optional().describe(`Timeline-specific configuration`),onAddRecord:D(`onAddRecord`,`runtime-slot`,`Add-record handler`),onBulkAction:D(`onBulkAction`,`runtime-slot`,`Bulk action handler`),onDensityChange:D(`onDensityChange`,`runtime-slot`,`Row density change handler`),onNavigate:D(`onNavigate`,`runtime-slot`,`Record navigation handler`),onPageSizeChange:D(`onPageSizeChange`,`runtime-slot`,`Page size change handler`),body:E(Ya),children:E(Ya)}).superRefine(De).superRefine(Ja).superRefine(...X(`list-view`,[`objectName`])),Za=p({latitudeField:g().optional().describe(`Field containing latitude`),longitudeField:g().optional().describe(`Field containing longitude`),locationField:g().optional().describe(`Field with a combined location value`),titleField:g().optional().describe(`Field used as the marker title`),descriptionField:g().optional().describe(`Field used as the marker description`),zoom:f().optional().describe(`Zoom level (1-20); declaring it opts out of the auto-fit`),center:yt([f(),f()]).optional().describe(`Center [lat, lng]; declaring it opts out of the auto-fit`),style:g().optional().describe(`MapLibre style URL/spec (overrides the public demo default)`)}).strict(),Y=[`data`,`staticData`,`objectName`];function X(e,t,n=`node`,r=`counts`){let i=e=>n===`properties`?`properties.${e}`:e,a=t.map(e=>`\`${i(e)}\``),o=a.length===1?a[0]:`one of ${a.slice(0,-1).join(`, `)} or ${a[a.length-1]}`,ee=r===`counts`?`\`${e}\` has no record source: declare ${o}, or ${n===`properties`?"name the object in the node's `dataSource` binding (`dataSource.object`)":"name the object in `dataSource.object`"}`:`\`${e}\` has no record source: declare ${o}`,s=t.length===1?n===`properties`?[`properties`,t[0]]:[t[0]]:[];return[(e,i)=>{if(!e||typeof e!=`object`||Array.isArray(e))return;let a=e.properties,o=n===`node`?e:a&&typeof a==`object`&&!Array.isArray(a)?a:{};t.some(e=>o[e]!==void 0)||r===`counts`&&Un(e)||i.addIssue({code:`custom`,path:s,params:{code:`RECORD_SOURCE_REQUIRED`},message:ee})},{when:()=>!0}]}var Qa=k(`object-map`,"its `any`-typed registration hands the node to `ObjectMap`, which reads it as `ObjectMapSchema`","the records of `objectName` as markers placed by `latitudeField` / `longitudeField` or `locationField`");F.extend({type:w(`object-map`),dataSource:N(s).optional().describe(H),objectName:g().optional().describe(`ObjectQL object name — the THIRD record source getDataConfig resolves, after data and staticData; one of the three must be present, unless the node's dataSource.object names the object, which ElementDataSourceGate lands here (objectui#11117)`),data:Xi.optional().describe(`Data source configuration — read FIRST by getDataConfig`),staticData:_(T()).optional().describe(`Inline records — read SECOND by getDataConfig, wrapped into a { provider: value } config`),filter:_(T()).optional().describe(`Query filter, forwarded as $filter`),sort:_(ea).optional().describe(`Sort configuration, forwarded as $orderby (array only; the legacy string clause is retired — objectui#8221)`),map:Za.optional().describe(`Map configuration (the author face)`),enableClustering:o().optional().describe(`Group nearby markers into clusters`),navigation:N(b).optional().describe(`Record navigation behaviour (drawer/dialog/page)`),locationField:g().optional().describe(`Location field (internal flat form; prefer map.locationField)`),titleField:g().optional().describe(`Title field (internal flat form; prefer map.titleField)`),mapStyle:g().optional().describe(`MapLibre style URL/spec (overrides the public demo default)`),body:E(Qa),children:E(Qa)}).superRefine(...X(`object-map`,Y));var $a=k(`object-tree`,"its `any`-typed registration hands the node to `ObjectTree`, which reads it as `ObjectTreeSchema`; the `children` it reads belong to the record hierarchy it builds, not to this node","the records of `objectName` as a hierarchy linked by `parentField` and labelled by `labelField`"),eo=F.extend({type:w(`object-tree`),objectName:g().optional().describe(`ObjectQL object name — the THIRD record source resolveRecordSourceConfig resolves, after data and staticData; one of the three must be present`),data:Xi.optional().describe(`Data source configuration — read FIRST by resolveRecordSourceConfig; the value and object providers draw rows, the api and schema providers draw none on the tree`),staticData:_(T()).optional().describe(`Inline records — read SECOND by resolveRecordSourceConfig, wrapped into a { provider: value } config`),tree:N(we).optional().describe(`Tree field configuration (parentField, labelField, fields, defaultExpandedDepth) — the spec TreeConfig, by reference`),navigation:N(b).optional().describe(`Row-click navigation — the spec NavigationConfig, by reference; an absent key opens nothing on a standalone tree`),filter:r([_(T()),l(g(),T())]).optional().describe(`Query filter, forwarded as $filter with its context tokens ({current_user_id}, {current_org_id}, date macros) resolved first. FilterArray (the spec array sugar) OR the ObjectQL $filter object — the two arms of QueryParams[$filter]`),parentField:g().optional().describe(`Single-parent pointer field (auto-detected when omitted)`),labelField:g().optional().describe(`Field rendered indented in the first column`),fields:_(g()).optional().describe(`Additional flat columns`),defaultExpandedDepth:f().optional().describe(`Default expansion depth (0 = roots only)`),body:E($a),children:E($a)}).superRefine(...X(`object-tree`,Y,`node`,`not-read`)),to=k(`object-gantt`,"its `any`-typed registration hands the node to `ObjectGantt`, which reads it as `ObjectGanttSchema`","the records of `objectName` as bars from `startDateField` to `endDateField`");F.extend({type:w(`object-gantt`),dataSource:N(s).optional().describe(H),objectName:g().optional().describe(`ObjectQL object name — the THIRD record source resolveRecordSourceConfig resolves, after data and staticData; one of the three must be present, unless the node's dataSource.object names the object, which ElementDataSourceGate lands here (objectui#11117)`),data:Xi.optional().describe(`Data source configuration — read FIRST by resolveRecordSourceConfig`),startDateField:g().optional().describe(`Start date field`),endDateField:g().optional().describe(`End date field`),titleField:g().optional().describe(`Title field`),dependencyField:g().optional().describe(`Deprecated alias for dependenciesField`),progressField:g().optional().describe(`Progress field`),viewMode:N(C).shape.viewMode.describe(`Initial timeline granularity, honoured by both renderer branches; when omitted, a persisted layout may seed it`),skipWeekends:o().optional().describe(`Skip weekends in duration / auto-schedule math (working calendar)`),holidays:_(g()).optional().describe(`Non-working dates for the working calendar, ISO 'yyyy-mm-dd' calendar days read on the chart's own calendar`),persistLayout:o().optional().describe(`Opt OUT of layout persistence — only an explicit false disables it`),viewName:g().optional().describe("Layout-persistence scope; storage key is `objectName:viewName` (default 'default')"),navigation:N(b).optional().describe(`Record navigation behaviour on task click (drawer/dialog/page)`),markers:_(p({date:g().describe(`Marker position, ISO date or datetime string`),label:g().optional().describe(`Text drawn against the line`),color:g().optional().describe(`Line colour — any CSS colour`)})).optional().describe(`Extra vertical reference lines drawn like the Today marker`),criticalPath:o().optional().describe(`Seed the critical-path highlight ON (toolbar toggle stays available)`),showBaselines:o().optional().describe(`Render planned-vs-actual baseline bars — defaults ON, only an explicit false disables`),readOnly:o().optional().describe(`Disable every write path and lock the record drawer`),mobileReadOnly:o().optional().describe(`Auto read-only on narrow viewports — defaults ON, only an explicit false disables`),colorField:N(C).shape.colorField,dependenciesField:N(C).shape.dependenciesField,parentField:N(C).shape.parentField,typeField:N(C).shape.typeField,tooltipFields:N(C).shape.tooltipFields,baselineStartField:N(C).shape.baselineStartField,baselineEndField:N(C).shape.baselineEndField,groupByField:N(C).shape.groupByField,resourceView:N(C).shape.resourceView,assigneeField:N(C).shape.assigneeField,effortField:N(C).shape.effortField,capacity:N(C).shape.capacity,quickFilters:N(C).shape.quickFilters,autoZoomToFilter:N(C).shape.autoZoomToFilter,borderColorField:N(C).shape.borderColorField,lockField:N(C).shape.lockField,objectField:N(C).shape.objectField,summaryExtent:N(C).shape.summaryExtent,defaultCollapsedDepth:N(C).shape.defaultCollapsedDepth,dependencyTypes:N(C).shape.dependencyTypes,timeZone:N(C).shape.timeZone,exportFileName:N(C).shape.exportFileName,interactions:N(C).shape.interactions,timeSegments:N(C).shape.timeSegments,gantt:N(C).optional().describe(`Nested gantt config block — the authoring face, and the winner over the flattened top-level keys whenever present`),staticData:_(T()).optional().describe(`Inline records, wrapped into a { provider: value } data config — read SECOND by resolveRecordSourceConfig`),filter:_(T()).optional().describe(`Query filter, forwarded as $filter with its context tokens ({current_user_id}, {current_org_id}, date macros) resolved first`),sort:_(ea).optional().describe(`Sort configuration, forwarded as $orderby (array only; the legacy string clause is retired — objectui#8221)`),search:g().optional().describe(`Full-text search term, forwarded as $search (the server resolves the matched fields, ADR-0061)`),searchableFields:_(g()).optional().describe("Narrows the fields `search` matches, forwarded as $searchFields alongside a term"),body:E(to),children:E(to)}).superRefine(...X(`object-gantt`,Y));var no=k(`object-calendar`,"its `any`-typed registration hands the node to `ObjectCalendar`, which reads it as `ObjectCalendarSchema`","the records of `objectName` as events from `startDateField` to `endDateField`");function Z(e,t){return`${e} — FLAT spelling, read but not authored: the runtime handoff ObjectView/ListView emit, read by getCalendarConfig only when the node has no calendar block. Author calendar.${t} instead; the spec refuses the flat key on object-calendar (Prime Directive #12)`}var ro=F.extend({type:w(`object-calendar`),dataSource:N(s).optional().describe(H),objectName:g().optional().describe(`ObjectQL object name — the THIRD record source resolveRecordSourceConfig resolves, after data and staticData; one of the three must be present (objectui#7313), unless the node's dataSource.object names the object, which ElementDataSourceGate lands here (objectui#11117)`),data:_(y()).optional().describe(`Pre-fetched records — an ARRAY, drawn in place of the calendar's own query; read FIRST by the record-source ladder. Mirrors ComponentPropsMap['object-calendar'].data — the { provider, items } config object is refused by kind on this block (objectui#9239, ruling objectui#8348)`),staticData:_(T()).optional().describe(`Inline records, wrapped into a { provider: value } data config — read SECOND by resolveRecordSourceConfig`),calendar:Ha.optional().describe(`Calendar configuration container, and the AUTHORED spelling of the five field-name keys: startDateField, endDateField, titleField, colorField, allDayField. Read FIRST by getCalendarConfig, ahead of the flat members, which are the runtime handoff and not a second authorable spelling`),startDateField:g().optional().describe(Z(`Start date field`,`startDateField`)),endDateField:g().optional().describe(Z(`End date field`,`endDateField`)),dateField:Ba.dateField,endField:Ba.endField,titleField:g().optional().describe(Z(`Title field`,`titleField`)),colorField:g().optional().describe(Z(`Field carrying the per-record event colour — a CSS colour or a semantic palette name`,`colorField`)),allDayField:g().optional().describe(Z(`Field carrying the all-day flag, LOAD-BEARING since objectui#8026`,`allDayField`)),defaultView:x([`month`,`week`,`day`]).optional().describe(`Default view — 'month' | 'week' | 'day', the renderer's rendered set ('agenda' was retired)`),filter:_(T()).optional().describe(`Query filter, forwarded as $filter with its context tokens ({current_user_id}, {current_org_id}, date macros) resolved first`),sort:_(ea).optional().describe(`Sort configuration, forwarded as $orderby (array only; the legacy string clause is retired — objectui#8221)`),navigation:N(b).optional().describe(`Event-click navigation behaviour (drawer/modal/split/popover/page/new_window/none), the same block ListViewSchema.navigation declares; the renderer defaults an absent key to a drawer`),body:E(no),children:E(no)}).superRefine(...X(`object-calendar`,Y));function Q(e,t){let n=t===`native`?`\`${e}\` belongs to the native kanban rule dialect \`{ field, operator, value, backgroundColor, borderColor }\`, `:`\`${e}\` is a colour written at the top level of the rule, `,r=e===`textColor`?"`style: { color }`":`\`style: { ${e} }\``;return n+"which `object-kanban`'s `conditionalFormatting` no longer accepts: RETIRED (objectui#11522), with no alias window. A rule is `{ condition, style }` — a CEL `condition` over `record.*` and a CSS `style` map, the rule `@objectstack/spec`'s `ListViewSchema.conditionalFormatting` declares. "+(t===`native`?"Respell `{ field: 'priority', operator: 'equals', value: 'high', backgroundColor: '#fee2e2' }` as `{ condition: \"record.priority == 'high'\", style: { backgroundColor: '#fee2e2' } }` (`not_equals` is `!=`, `contains` is `.contains(…)`, `in` is `record.f in [ … ]`).":`Move the colour into the rule's CSS map: ${r}.`)}var io=ua.extend({condition:da.describe(`CEL predicate evaluated against the card record`),field:E(Q(`field`,`native`)),operator:E(Q(`operator`,`native`)),value:E(Q(`value`,`native`)),backgroundColor:E(Q(`backgroundColor`,`colour`)),borderColor:E(Q(`borderColor`,`colour`)),textColor:E(Q(`textColor`,`colour`))}),ao=p({id:g().describe(`Lane id — matched against the groupBy value. STRING only, and the narrowing stands on its own: until objectui#8993 the bucketer built knownIds from the raw col.id and compared it with Object.keys(groups), which are strings, so a numeric id bucketed every card TWICE; the sweep now keys membership the way the injection always did`),title:g().describe(`Lane heading, localized against the groupBy picklist option labels`),cards:_(Qr).optional().describe(`Cards this lane carries — a STATIC board only; an object-bound board buckets records into the lane by groupBy`),limit:f().optional().describe(`WIP limit — the card count at which the lane warns; never reaches the query`),className:g().optional().describe(`Lane class name`),collapsed:o().optional().describe(`Whether the lane renders collapsed — narrowed to a title spine with its cards withheld, and reopenable by the viewer; the authored value is the initial state`)}),oo=[`bind`,`data`,`objectName`],so=k(`object-kanban`,"its `any`-typed registration hands the node to `ObjectKanban`, which reads it as `ObjectKanbanSchema`","the records of `objectName` as lanes grouped by `groupBy`, with `cardFields` on each card"),co=F.extend({type:w(`object-kanban`),dataSource:N(s).optional().describe(H),objectName:g().optional().describe(`ObjectQL object name — the LAST rung of the board ladder, after the pre-fetched data prop, bind and the inline row array on data; one of bind, data, objectName must be present (objectui#7780), unless the node's dataSource.object names the object, which ElementDataSourceGate lands here (objectui#11117)`),groupBy:g().optional().describe(`Field whose value places a record in a lane — the lane key the object-kanban renderer reads (ObjectKanban.tsx, thirteen sites). Optional, as @objectstack/spec declares it: a board with no lane key renders its declared lanes and holds no cards, since the bucketer needs a key to distribute records`),groupField:E("RETIRED (objectui#7322) — `groupField` is not read by the object-kanban renderer; author `groupBy`. (The view-level `kanban.groupField` alias is unaffected.)"),columns:r([_(g()),_(ao)]).optional().describe(`Swimlane definitions — EITHER an array of { id, title } lanes per groupBy value OR an array of bare value strings; NOT a field projection (the fields drawn on a card are cardFields), and not a mix of the two, which the renderer cannot dispatch`),limit:f().int().positive().optional().describe(`Row cap — the most records the board fetches, sent as a real $top on the query; default 100 (DEFAULT_KANBAN_FETCH_BATCH_SIZE)`),filter:_(T()).optional().describe(`Query filter, forwarded as $filter with its context tokens ({current_user_id}, {current_org_id}, date macros) resolved first`),cardTitle:g().optional().describe("Field rendered as each card title — the canonical spelling; `titleField` beside it is the legacy fallback, and the board reads `cardTitle || titleField`"),titleField:g().optional().describe(`Title field`),cardFields:_(g()).optional().describe(`Card fields`),swimlaneField:g().optional().describe(`Record field that splits the board into horizontal swimlanes, across the groupBy columns; when absent the board falls back to grouping.fields[0].field`),grouping:N(he).optional().describe(`Swimlane fallback: the spec GroupingConfig, by reference. The board reads grouping.fields[0].field as the swimlane field when swimlaneField is absent; every other position is inert on this board`),quickAdd:E("`quickAdd` is RETIRED on `object-kanban` (objectui#8285) — this board offers no inline record creation. The Quick Add control is gated on BOTH `quickAdd` and an `onQuickAdd` handler, which is a host-supplied function no JSON document can carry, and the board supplies none of its own, so the key never drew anything here; `@objectstack/spec` retired it from `object-kanban` too. Delete the key. The Quick Add pair still works on the `KanbanRenderer` component of `@object-ui/plugin-kanban`, which a React host mounts directly and hands `onQuickAdd` to."),coverImageField:g().optional().describe(`Field name for cover image on cards`),allowCollapse:E("`allowCollapse` is RETIRED (objectui#8801, ADR-0049) — it was declared on both faces of the `object-kanban` arm and read by NO registered board, so an authored `true` validated green and collapsed nothing. `@objectstack/spec`'s `ComponentPropsMap['object-kanban']` never declared the key and refuses it by name at publish, so a document carrying it was already being rejected whole. Lane collapse is `KanbanColumn.collapsed`’s — a PER-LANE member — not a board-level authored toggle: write it on the lane you want collapsed, inside `columns`, and the board honours it (objectui#9628). SWIMLANE collapse stays the VIEWER’s: `KanbanImpl` collapses a swimlane row when its header is clicked and persists that per `swimlaneField`. Delete the key; there is no board-level replacement to rename it to."),conditionalFormatting:_(io).optional().describe(`Card conditional formatting rules`),navigation:N(b).optional().describe(`Card-click navigation behaviour (drawer/modal/split/popover/page/new_window/none), the same block ListViewSchema.navigation declares; the renderer defaults an absent key to a drawer`),onCardClick:D(`onCardClick`,`runtime-slot`,`Card click handler`),onCardMove:D(`onCardMove`,`retired`,`Card move handler`),onQuickAdd:D(`onQuickAdd`,`retired`,`Quick Add handler`),body:E(so),children:E(so)}).superRefine(...X(`object-kanban`,oo)),lo="`yAxis` on an `object-chart` is `@objectstack/spec`'s ARRAY of axis objects — write `yAxis: [{ field: 'task_count', stepSize: 1 }]`, one entry per value axis (a second entry declares the right-hand axis). A single axis object or a bare column name is not a member of the protocol.",uo="`xAxis` on an `object-chart` is `@objectstack/spec`'s axis OBJECT — write `xAxis: { field: 'status' }` (plus `title`, `format`, … as the spec declares them). A bare column name or a list is not a member of the protocol on this node: the bare-string spelling is an alias of `xAxisKey` on the `chart` node only.";function fo(e){if(e.code!==`invalid_union`)return;let t=e.input;return!t||typeof t!=`object`||Array.isArray(t)?uo:`\`xAxis\` is not a valid \`@objectstack/spec\` axis object — ${(e.errors[0]??[]).map(e=>`${[`xAxis`,...e.path.map(String)].join(`.`)}: ${e.message}`).join(`; `)||`Invalid input`}`}function po(e,t){e.chartType===void 0&&e.specType===void 0&&t.addIssue({code:`custom`,path:[`chartType`],message:'`object-chart` names no chart family: write `chartType` on a metadata node. On the react tier, `<ObjectChart type="bar">` arrives here as `specType`.'})}var mo=k(`object-chart`,"its `any`-typed registration hands the node to `ObjectChart`, which reads it as `ObjectChartSchema`","a chart of `objectName` (or inline `data`) drawn by `chartType` from `aggregate` / `series`"),ho=[`bar`,`horizontal-bar`,`column`,`line`,`area`,`pie`,`donut`,`funnel`,`scatter`,`treemap`,`sankey`,`combo`,`radar`],go=`\`chartType\` on an \`object-chart\` is one of ${ho.join(`, `)} (objectui#11513): the \`@objectstack/spec\` chart families this chart block draws. The spec's single-value and tabular families draw no chart here: write a single number as an \`object-metric\`, rows as an \`object-data-table\`, a cross-tab as an \`object-pivot\`.`,$=F.extend({type:w(`object-chart`),...L,dataSource:N(s).optional().describe(H),objectName:g().optional().describe(`ObjectQL object name (legacy inline path)`),chartType:N(Me).extract(ho,{error:go}).optional().describe(`Chart type — the metadata tier's spelling of the chart family: one of ${ho.join(`, `)}, the @objectstack/spec ChartType families plugin-charts draws. One of chartType or specType is required`),specType:N(Me).optional().describe("The react tier's chart family: the author's `type` on <ObjectChart>, parked here by the react-page wrapper because `type` is this node's discriminator. @objectstack/spec ChartType, by reference. chartType wins when a node writes both"),xAxisField:E("RETIRED (objectui#10608, ADR-0049) — `xAxisField` is the list-view chart block's spelling and no `object-chart` reader consumes it: a node written with it draws no category axis. Write the spec's `xAxis: { field: 'status' }` instead; on the inline `objectName` path the category is `aggregate.groupBy`."),yAxisFields:E("RETIRED (objectui#10608, ADR-0049) — `yAxisFields` is the list-view chart block's spelling and no `object-chart` reader consumes it: a node written with it plots no series. Write the spec's `yAxis: [{ field: 'amount' }]` instead, one entry per value axis; on the inline `objectName` path the measure is `aggregate.field`, and a dataset-bound chart selects `values` by name."),aggregation:E("RETIRED (objectui#10608, ADR-0049) — `aggregation` is the list-view chart block's spelling and no `object-chart` reader consumes it: a node written with it aggregates nothing. Write the spec's `aggregate: { field, function, groupBy }` instead, `function` one of `count`, `sum`, `avg`, `min`, `max`; a dataset-bound chart takes its aggregation from the dataset's measures."),dataset:g().optional().describe(`Semantic-layer dataset name (ADR-0021)`),dimensions:_(g()).optional().describe(`Dataset dimension names`),values:_(g()).optional().describe(`Dataset measure names`),filter:r([_(T()),l(g(),T())]).optional().describe(`AUTHORABLE — query filter, forwarded as $filter on both query legs with its context tokens ({current_user_id}, {current_org_id}, date macros) resolved first, then spread into the drill-down filter. FilterArray (the spec/react-blocks and registry-inputs spelling) OR the ObjectQL $filter object`),aggregate:N(nt).optional().describe(`AUTHORABLE — inline aggregation for the legacy objectName path. @objectstack/spec ChartAggregateSchema ({ field?, function, groupBy }), the same schema the react-page publish gate parses: function and groupBy are REQUIRED, field is optional because only count counts rows rather than a column, and unknown keys are refused rather than dropped`),xAxisKey:g().optional().describe(`INTERNAL (relay-composed) — the category column the renderer binds the x axis to. Authors write the spec xAxis: { field }; all five producers compute this key`),series:_(r([N(We),p({dataKey:g().describe(`Result column this series plots`),label:g().optional().describe(`Series display label`),variant:x([`current`,`comparison`]).optional().describe(`Comparison overlays render muted`),opacity:f().optional().describe(`Series opacity override (0-1)`),dashArray:g().optional().describe(`SVG stroke-dasharray override`),chartType:x([`bar`,`line`,`area`]).optional().describe(`Per-series family override (combo charts)`),stack:g().optional().describe(`Stack identifier to group series`),yAxis:x([`left`,`right`]).optional().describe(`Bind to a specific Y axis`),color:g().optional().describe(`Series color (hex/rgb/token)`)})])).optional().describe(`Plotted series, each entry ONE of two arms. AUTHORABLE: @objectstack/spec ChartSeriesSchema, by reference (the { name } arm the react tier's <ObjectChart series> publishes; strict, refuses dataKey by name; per-series family override is type). INTERNAL (relay-composed): the renderer's { dataKey } arm, as ChartRendererProps declares it minus that arm's per-series type, which this copy does not declare; its per-series family override is chartType (bar | line | area). An entry with neither name nor dataKey is refused. normalizeChartSchema is the one translation`),colors:r([_(g()),l(g(),g())]).optional().describe(`Positional palette (string[]) OR a value→color map ({ value: color }, kanban-style). Select/lookup option colors and explicit maps win over the palette per category.`),drillDown:N(Ke).optional().describe("Segment drill config — @objectstack/spec ChartDrillDownSchema ({ enabled?, filter?, title?, target?: drawer | dialog | navigate, columns?, maxRows? }). Present = on; {} is enough. NOT the wider DrillDownConfig: a chart reads neither `mode` nor `report`."),title:N(u).optional().describe("Chart heading, and the drill drawer heading fallback. @objectstack/spec I18nLabel — a plain string or an inline locale map, the union `normalizeChartSchema`’s `label()` resolves. Not a BaseSchema member."),compareTo:N(gt).shape.compareTo.describe("Period-over-period comparison directive, forwarded verbatim from the dashboard widget key of the same name — bound BY REFERENCE to `DashboardWidgetSchema.shape.compareTo` so the producer and this consumer cannot drift into two dialects."),xAxis:r([N(Qe),Je()],{error:fo}).optional().describe(`AUTHORABLE — category (x) axis: ONE @objectstack/spec ChartAxis object, by reference (field required, strict). Its field names the category column when neither aggregate.groupBy nor xAxisKey does. A bare column name or a list is refused.`),yAxis:_(N(Qe),{error:e=>e.code===`invalid_type`?lo:void 0}).optional().describe(`AUTHORABLE — value (y) axes: an ARRAY of @objectstack/spec ChartAxis objects, by reference (field required, strict). The first entry is the primary axis; a second entry declares the right-hand axis.`),body:E(mo),children:E(mo)}).superRefine(po),_o=Object.fromEntries([...Object.keys(F.shape),...Object.keys(L),`dataSource`].map(e=>[e,!0])),vo=t($.shape).omit(_o);function yo(e,t){let n=e.properties,r=typeof n==`object`&&n&&!Array.isArray(n)?n:{};r.chartType===void 0&&r.specType===void 0&&t.addIssue({code:`custom`,path:[`properties`,`chartType`],message:'`object-chart` names no chart family: write `properties.chartType` — `{ "type": "object-chart", "properties": { "chartType": "bar", … } }` (objectui#11276).'})}var bo='An `object-chart` node takes its props in its `properties` bag: write `{ "type": "object-chart", "properties": { "chartType": "bar", "dataset": "…", "dimensions": ["…"], "values": ["…"] } }` (objectui#11276). `@objectstack/spec`\'s own page component refuses a prop written on the node as mis-layered (ADR-0089 D3a), so this face and `os validate` agree. The spec has no `ComponentPropsMap[\'object-chart\']` row, so the bag\'s members are `ObjectChartSchema`\'s own. Moving it changes nothing at render time: `SchemaRenderer` hoists every `properties` key onto the node before `ObjectChart` reads it.',xo=Object.fromEntries(Object.keys(vo.shape).map(e=>[e,O(e,`properties.${e}`,"this `object-chart` node",bo)])),So=F.extend({type:w(`object-chart`),...L,properties:I(`object-chart`,vo,"The `object-chart` props bag — the members `ObjectChartSchema` declares beyond the node-level keys, by reference. `@objectstack/spec` has no `ComponentPropsMap['object-chart']` row, so these are objectui's own members (objectui#11276). The chart family is required here: `chartType` (or `specType`)."),dataSource:$.shape.dataSource,...xo,xAxisField:$.shape.xAxisField,yAxisFields:$.shape.yAxisFields,aggregation:$.shape.aggregation,body:$.shape.body,children:$.shape.children}).superRefine(yo),Co=F.extend({type:w(`object-gallery`),objectName:g().optional().describe(`ObjectQL object name`),filter:r([_(T()),l(g(),T())]).optional().describe(`Query filter, forwarded as $filter with its context tokens ({current_user_id}, {current_org_id}, date macros) resolved first. FilterArray (the spec array sugar) OR the ObjectQL $filter object — the two arms of QueryParams[$filter]`),data:_(l(g(),y())).optional().describe(`Inline records`),gallery:N(n).optional().describe(`Gallery configuration (@objectstack/spec GalleryConfig)`),navigation:N(b).optional().describe(`Record navigation behaviour (drawer/dialog/page)`),grouping:N(he).optional().describe(`Grouping configuration for sectioned display`),imageField:g().optional().describe(`DEPRECATED — use gallery.coverField`),titleField:g().optional().describe(`DEPRECATED — use gallery.titleField`),onCardClick:D(`onCardClick`,`runtime-slot`,`Card click handler`),onRowClick:D(`onRowClick`,`runtime-slot`,`Row/item click handler`),body:E("REFUSED (objectui#9256, ADR-0049) — `object-gallery` reads NEITHER content channel: measured with the TypeScript type checker across all 24 registering packages, no renderer read consumes `body` or `children` for this node, and `SchemaRenderer` strips both out of the props bag it spreads. An authored value therefore rendered NOTHING — no render-time error or warning and no element; only the parser tier's `not-a-container` warning (objectui#9910) noticed it. What it renders instead: `bind`, `className`, `data`, `filter`, `gallery`, `grouping`, `imageField`, `navigation`, `objectName`, `titleField`."),children:E("REFUSED (objectui#9256, ADR-0049) — `object-gallery` reads NEITHER content channel: measured with the TypeScript type checker across all 24 registering packages, no renderer read consumes `body` or `children` for this node, and `SchemaRenderer` strips both out of the props bag it spreads. An authored value therefore rendered NOTHING — no render-time error or warning and no element; only the parser tier's `not-a-container` warning (objectui#9910) noticed it. What it renders instead: `bind`, `className`, `data`, `filter`, `gallery`, `grouping`, `imageField`, `navigation`, `objectName`, `titleField`.")}),wo=F.extend({type:w(`object-data-table`),objectName:g().optional().describe(`ObjectQL object name`),dataProvider:E("REFUSED (objectui#7353, ADR-0049) — `object-data-table` does not read `dataProvider`. The dashboard producers used to copy the widget provider config onto the node here, beside `objectName`, and nothing read it. Write `objectName` — the key the widget fetches through."),filter:T().optional().describe(`Query filter, resolved through the filter scope and forwarded as $filter`),data:_(T()).optional().describe(`Inline rows`),columns:_(T()).optional().describe(`Column definitions (names or column objects)`),searchable:o().optional().describe(`Forwarded to the rendered data-table`),pagination:o().optional().describe(`Forwarded to the rendered data-table`),pageSize:xr.shape.pageSize.describe(`Forwarded to the rendered data-table`),drillDown:Pr.extend({filter:E("REFUSED on `object-data-table` (objectui#10685) — `drillDown.filter` scopes a drilled record list, and this block drills to the one record its row already is, so there is no list to filter. A drill `filter` applies on `object-chart` and `object-pivot`. Delete the key."),maxRows:E("REFUSED on `object-data-table` (objectui#10685) — `drillDown.maxRows` caps a drilled record list, and this block drills to the one record its row already is. It applies on `object-chart`, `object-pivot` and `object-metric`, whose drill lists page by it. Delete the key."),report:E("REFUSED on `object-data-table` (objectui#10685) — `drillDown.report` replaces a drilled record list with a report, and this block drills to the one record its row already is. It applies on `object-pivot` and `object-metric`, whose drill drawer renders it. Delete the key."),target:x([`drawer`,`dialog`],{error:"`drillDown.target` on `object-data-table` is `'drawer'` or `'dialog'` (objectui#10685). `'navigate'` is refused here: it opens the object's full list page, and this block's row opens one record. `'navigate'` applies on `object-chart`, `object-pivot` and `object-metric`."}).optional().describe(`Where the record drill lands: 'drawer' (default) or 'dialog'. 'navigate' is refused on this block (objectui#10685)`)}).optional().describe(`Drill-to-record: clicking a row opens that record in a detail drawer (DashboardRenderer defaults object-backed table widgets to { enabled: true, mode: record }). This block's own drill shape: filter, maxRows and report are refused by name, and target is drawer or dialog (objectui#10685)`),onRowClick:D(`onRowClick`,`runtime-slot`,`Row click handler (overrides drill-to-record)`),body:E("REFUSED (objectui#9256, ADR-0049) — `object-data-table` reads NEITHER content channel: measured with the TypeScript type checker across all 24 registering packages, no renderer read consumes `body` or `children` for this node, and `SchemaRenderer` strips both out of the props bag it spreads. An authored value therefore rendered NOTHING — no render-time error or warning and no element; only the parser tier's `not-a-container` warning (objectui#9910) noticed it. What it renders instead: `bind`, `columns`, `data`, `drillDown`, `filter`, `objectName`, `onRowClick`."),children:E("REFUSED (objectui#9256, ADR-0049) — `object-data-table` reads NEITHER content channel: measured with the TypeScript type checker across all 24 registering packages, no renderer read consumes `body` or `children` for this node, and `SchemaRenderer` strips both out of the props bag it spreads. An authored value therefore rendered NOTHING — no render-time error or warning and no element; only the parser tier's `not-a-container` warning (objectui#9910) noticed it. What it renders instead: `bind`, `columns`, `data`, `drillDown`, `filter`, `objectName`, `onRowClick`.")});c(`type`,[Da,eo,ro,co,Co,wo,Xa]);var To=k(`object-metric`,"its registration (`plugin-dashboard:object-metric`) hands the node to `ObjectMetricBlock`, which resolves its `dataSource` binding and renders `ObjectMetricWidget`, whose props are named keys and never a child list","one aggregated number over `objectName`, computed by `aggregate` and scoped by `filter`"),Eo=F.extend({type:w(`object-metric`),...L,...R(`object-metric`,N(it)),properties:I(`object-metric`,N(it)),dataSource:N(s).optional().describe(H),body:E(To),children:E(To)}),Do=k(`object-master-detail-form`,"its registration (`plugin-form:object-master-detail-form`) hands the node to `MasterDetailFormRenderer`, which resolves its `dataSource` binding and renders `MasterDetailForm`; that form builds its parent `object-form` node key by key and reads no child list","a parent form over `objectName` with an editable grid for each `details` entry"),Oo=F.extend({type:w(`object-master-detail-form`),...L,...R(`object-master-detail-form`,N(de)),properties:I(`object-master-detail-form`,N(de)),dataSource:N(s).optional().describe(H),onSuccess:D(`onSuccess`,`runtime-slot`,`Called with the saved parent record after a successful save`),onError:D(`onError`,`runtime-slot`,`Called after a refused save, for bookkeeping only`),onCancel:D(`onCancel`,`runtime-slot`,`Cancel button callback`),body:E(Do),children:E(Do)}),ko=k(`object-timeline`,"its registration (`plugin-timeline:object-timeline`) hands the node through `ElementDataSourceGate` to `ObjectTimeline`, which fetches or takes its rows and draws them with `TimelineRenderer`; neither reads a child list","one rail of records from `objectName` (or the node's `dataSource`), laid out by `variant` from the fields the nested `timeline` config names"),Ao=F.extend({type:w(`object-timeline`),...L,...R(`object-timeline`,N(ue)),properties:I(`object-timeline`,N(ue)),dataSource:N(s).optional().describe(H),body:E(ko),children:E(ko)}),jo='An `object-form` node takes its props in its `properties` bag, where `@objectstack/spec`\'s `ComponentPropsMap[\'object-form\']` row declares them: write `{ "type": "object-form", "properties": { "objectName": "…", "mode": "create" } }` (objectui#10859). The spec\'s own page component refuses a prop written on the node as mis-layered (ADR-0089 D3a), so this face and `os validate` agree. Moving it changes nothing at render time: `SchemaRenderer` hoists every `properties` key onto the node before `ObjectForm` reads it.',Mo=Object.fromEntries(Object.keys(N(le).shape).map(e=>[e,O(e,`properties.${e}`,"this `object-form` node",jo)])),No=F.extend({type:w(`object-form`),...L,properties:I(`object-form`,N(le)),dataSource:N(s).optional().describe(H),...Mo,onCancel:D(`onCancel`,`runtime-slot`,`Cancel handler`),onError:D(`onError`,`runtime-slot`,`Submit error handler`),onOpenChange:D(`onOpenChange`,`runtime-slot`,`Modal/drawer open-state handler`),onStepChange:D(`onStepChange`,`runtime-slot`,`Wizard step change handler`),onSuccess:D(`onSuccess`,`runtime-slot`,`Submit success handler`),body:E(va),children:E(va)}),Po='An `object-map` node takes its props in its `properties` bag, where `@objectstack/spec`\'s `ComponentPropsMap[\'object-map\']` row declares them: write `{ "type": "object-map", "properties": { "objectName": "…", "map": { "latitudeField": "…", "longitudeField": "…" } } }` (objectui#10859). The spec\'s own page component refuses a prop written on the node as mis-layered (ADR-0089 D3a), so this face and `os validate` agree. Moving it changes nothing at render time: `SchemaRenderer` hoists every `properties` key onto the node before `ObjectMap` reads it.',Fo=Object.fromEntries(Object.keys(N(se).shape).map(e=>[e,O(e,`properties.${e}`,"this `object-map` node",Po)])),Io=F.extend({type:w(`object-map`),...L,properties:I(`object-map`,N(se)),dataSource:N(s).optional().describe(H),...Fo,locationField:O(`locationField`,`properties.map.locationField`,"this `object-map` node",Po),titleField:O(`titleField`,`properties.map.titleField`,"this `object-map` node",Po),body:E(Qa),children:E(Qa)}).superRefine(...X(`object-map`,Y,`properties`)),Lo='An `object-gantt` node takes its props in its `properties` bag, where `@objectstack/spec`\'s `ComponentPropsMap[\'object-gantt\']` row declares them, and its field mapping in the bag\'s `gantt` block: write `{ "type": "object-gantt", "properties": { "objectName": "…", "gantt": { "startDateField": "…", "endDateField": "…", "titleField": "…" } } }` (objectui#10859). The spec\'s own page component refuses a prop written on the node as mis-layered (ADR-0089 D3a), so this face and `os validate` agree. Moving it changes nothing at render time: `SchemaRenderer` hoists every `properties` key onto the node before `ObjectGantt` reads it.',Ro=[`label`],zo=Object.fromEntries(Object.keys(N(Ee).shape).filter(e=>!Ro.includes(e)).map(e=>[e,O(e,`properties.${e}`,"this `object-gantt` node",Lo)])),Bo={...Object.fromEntries(Object.keys(N(Ee).shape.gantt.unwrap().shape).map(e=>[e,O(e,`properties.gantt.${e}`,"this `object-gantt` node",Lo)])),dependencyField:O(`dependencyField`,`properties.gantt.dependenciesField`,"this `object-gantt` node",Lo)},Vo=F.extend({type:w(`object-gantt`),...L,properties:I(`object-gantt`,N(Ee)),dataSource:N(s).optional().describe(H),...zo,...Bo,body:E(to),children:E(to)}).superRefine(...X(`object-gantt`,Y,`properties`)),Ho=F.extend({type:w(`object-grid`),...L,...R(`object-grid`,N(Oe)),properties:I(`object-grid`,N(Oe)),dataSource:N(s).optional().describe(H),operators:W.shape.operators,rowSpecActions:W.shape.rowSpecActions,bulkSpecActions:W.shape.bulkSpecActions,name:W.shape.name,placeholder:W.shape.placeholder,showFilters:W.shape.showFilters,onNavigate:D(`onNavigate`,`runtime-slot`,`Record navigation handler`),body:W.shape.body,children:W.shape.children}).superRefine(...X(`object-grid`,[`objectName`],`properties`)),Uo=Pr.extend({mode:E("REFUSED on `object-pivot` (objectui#10685) — `drillDown.mode` chooses drill-to-record for a clicked ROW, and every click point on a pivot is an aggregated bucket (a cell, a header or a total), so a pivot always drills through to the records behind the clicked value. `mode` applies on `object-data-table`, whose row click reads it. Delete the key.")}),Wo=t({objectName:g().optional().describe(la),title:B.shape.title,rowField:B.shape.rowField,columnField:B.shape.columnField,valueField:B.shape.valueField,aggregation:B.shape.aggregation,showRowTotals:B.shape.showRowTotals,showColumnTotals:B.shape.showColumnTotals,format:B.shape.format,filter:_(y()).optional().describe("Query filter, forwarded as $filter with its context tokens ({current_user_id}, {current_org_id}) resolved first; a drill composes it with the clicked cell. A FilterArray — the registration publishes `filter` as an array."),drillDown:Uo.optional().describe("Click-through config that opens the records behind a cell, header or total (drawer / dialog / navigate, or an analytical report). `mode` is refused: a pivot always drills through (objectui#10685)"),dataProvider:E("REFUSED (objectui#7353, ADR-0049) — `object-pivot` does not read `dataProvider`. The dashboard producers used to copy the widget provider config onto the node beside `objectName`, and nothing read it. Write `objectName` — the key the block fetches through.")}),Go='An `object-pivot` node takes its props in its `properties` bag: write `{ "type": "object-pivot", "properties": { "objectName": "…", "rowField": "…", "columnField": "…", "valueField": "…" } }` (objectui#11440). `@objectstack/spec`\'s own page component refuses a prop written on the node as mis-layered (ADR-0089 D3a), so this face and `os validate` agree. The spec has no `ComponentPropsMap[\'object-pivot\']` row, so the bag\'s members are the registration\'s own inputs. Moving it changes nothing at render time: `SchemaRenderer` hoists every `properties` key onto the node before `ObjectPivotTable` reads it.',Ko="REFUSED (objectui#9256, ADR-0049) — `object-pivot` reads NEITHER content channel: its registration hands the node through `ElementDataSourceGate` to `ObjectPivotTable`, which reads no `children` or `body` (nor does the `PivotTable` it renders), and `SchemaRenderer` strips both out of the props bag it spreads. An authored value would render NOTHING — no render-time error or warning and no element; only the parser tier's `not-a-container` warning (objectui#9910) noticed it (the registration declares no `children` input). What it renders instead: a cross-tab of the records of `properties.objectName` — `rowField` down, `columnField` across, `valueField` aggregated by `aggregation`.",qo=F.extend({type:w(`object-pivot`),...L,...R(`object-pivot`,Wo,Go),properties:Wo.describe("The `object-pivot` props bag — the block's registration inputs (`objectName`, `title`, `rowField`, `columnField`, `valueField`, `aggregation`, `showRowTotals`, `showColumnTotals`, `filter`, `format`, `drillDown`). `@objectstack/spec` has no `ComponentPropsMap['object-pivot']` row, so these are objectui's own members (objectui#11440)."),dataSource:N(s).optional().describe(H),body:E(Ko),children:E(Ko)}).superRefine(...X(`object-pivot`,[`objectName`],`properties`)),Jo=t({formId:g().describe(`The form's identifier — submissions are recorded against it`),objectName:g().optional().describe(la),title:g().optional().describe(`Form title, drawn above the fields`),description:g().optional().describe(`Instructions drawn under the title`),fields:_(g()).optional().describe(`Bare field names to show, in order, each looked up in the object schema`),allowMultiple:o().optional().describe(`Let one visitor submit more than once`)}),Yo='An `embeddable-form` node takes its props in its `properties` bag: write `{ "type": "embeddable-form", "properties": { "formId": "…", "objectName": "…" } }` (objectui#11440). `@objectstack/spec`\'s own page component refuses a prop written on the node as mis-layered (ADR-0089 D3a), so this face and `os validate` agree. The spec has no `ComponentPropsMap[\'embeddable-form\']` row, so the bag\'s members are the registration\'s own inputs. Moving it changes nothing at render time: `SchemaRenderer` hoists every `properties` key onto the node before `EmbeddableForm` reads it.',Xo="REFUSED (objectui#9256, ADR-0049) — `embeddable-form` reads NEITHER content channel: its registration hands the node through `ElementDataSourceGate` to `EmbeddableForm` as its `config`, which reads no `children` or `body`, and `SchemaRenderer` strips both out of the props bag it spreads. An authored value would render NOTHING — no render-time error or warning and no element; only the parser tier's `not-a-container` warning (objectui#9910) noticed it (the registration declares no `children` input). What it renders instead: a standalone public form over `properties.objectName`, its fields from the object schema (or `properties.fields`).",Zo=F.extend({type:w(`embeddable-form`),...L,...R(`embeddable-form`,Jo,Yo),properties:Jo.describe("The `embeddable-form` props bag — the block's registration inputs (`formId`, `objectName`, `title`, `description`, `fields`, `allowMultiple`). `@objectstack/spec` has no `ComponentPropsMap['embeddable-form']` row, so these are objectui's own members (objectui#11440)."),dataSource:N(s).optional().describe(H),body:E(Xo),children:E(Xo)}).superRefine(...X(`embeddable-form`,[`objectName`],`properties`));c(`type`,[Eo,Oo,Ao,No,Io,So,Vo,Ho,qo,Zo]);export{Ai as n,Za as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{$r as e,Jr as t,Yr as n,Zr as r}from"./ui-components-D8wcRNrt.js";var i={lessThanXSeconds:{one:`بىر سىكۇنت ئىچىدە`,other:`سىكۇنت ئىچىدە {{count}}`},xSeconds:{one:`بىر سىكۇنت`,other:`سىكۇنت {{count}}`},halfAMinute:`يىرىم مىنۇت`,lessThanXMinutes:{one:`بىر مىنۇت ئىچىدە`,other:`مىنۇت ئىچىدە {{count}}`},xMinutes:{one:`بىر مىنۇت`,other:`مىنۇت {{count}}`},aboutXHours:{one:`تەخمىنەن بىر سائەت`,other:`سائەت {{count}} تەخمىنەن`},xHours:{one:`بىر سائەت`,other:`سائەت {{count}}`},xDays:{one:`بىر كۈن`,other:`كۈن {{count}}`},aboutXWeeks:{one:`تەخمىنەن بىرھەپتە`,other:`ھەپتە {{count}} تەخمىنەن`},xWeeks:{one:`بىرھەپتە`,other:`ھەپتە {{count}}`},aboutXMonths:{one:`تەخمىنەن بىر ئاي`,other:`ئاي {{count}} تەخمىنەن`},xMonths:{one:`بىر ئاي`,other:`ئاي {{count}}`},aboutXYears:{one:`تەخمىنەن بىر يىل`,other:`يىل {{count}} تەخمىنەن`},xYears:{one:`بىر يىل`,other:`يىل {{count}}`},overXYears:{one:`بىر يىلدىن ئارتۇق`,other:`يىلدىن ئارتۇق {{count}}`},almostXYears:{one:`ئاساسەن بىر يىل`,other:`يىل {{count}} ئاساسەن`}},a=(e,t,n)=>{let r,a=i[e];return r=typeof a==`string`?a:t===1?a.one:a.other.replace(`{{count}}`,String(t)),n?.addSuffix?n.comparison&&n.comparison>0?r:r+` بولدى`:r},o={date:e({formats:{full:`EEEE, MMMM do, y`,long:`MMMM do, y`,medium:`MMM d, y`,short:`MM/dd/yyyy`},defaultWidth:`full`}),time:e({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:e({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:`ug`,formatDistance:a,formatLong:o,formatRelative:(e,t,n,r)=>s[e],localize:{ordinalNumber:(e,t)=>String(e),era:r({values:{narrow:[`ب`,`ك`],abbreviated:[`ب`,`ك`],wide:[`مىيلادىدىن بۇرۇن`,`مىيلادىدىن كىيىن`]},defaultWidth:`wide`}),quarter:r({values:{narrow:[`1`,`2`,`3`,`4`],abbreviated:[`1`,`2`,`3`,`4`],wide:[`بىرىنجى چارەك`,`ئىككىنجى چارەك`,`ئۈچىنجى چارەك`,`تۆتىنجى چارەك`]},defaultWidth:`wide`,argumentCallback:e=>e-1}),month:r({values:{narrow:[`ي`,`ف`,`م`,`ا`,`م`,`ى`,`ى`,`ا`,`س`,`ۆ`,`ن`,`د`],abbreviated:[`يانۋار`,`فېۋىرال`,`مارت`,`ئاپرىل`,`ماي`,`ئىيۇن`,`ئىيول`,`ئاۋغۇست`,`سىنتەبىر`,`ئۆكتەبىر`,`نويابىر`,`دىكابىر`],wide:[`يانۋار`,`فېۋىرال`,`مارت`,`ئاپرىل`,`ماي`,`ئىيۇن`,`ئىيول`,`ئاۋغۇست`,`سىنتەبىر`,`ئۆكتەبىر`,`نويابىر`,`دىكابىر`]},defaultWidth:`wide`}),day:r({values:{narrow:[`ي`,`د`,`س`,`چ`,`پ`,`ج`,`ش`],short:[`ي`,`د`,`س`,`چ`,`پ`,`ج`,`ش`],abbreviated:[`يەكشەنبە`,`دۈشەنبە`,`سەيشەنبە`,`چارشەنبە`,`پەيشەنبە`,`جۈمە`,`شەنبە`],wide:[`يەكشەنبە`,`دۈشەنبە`,`سەيشەنبە`,`چارشەنبە`,`پەيشەنبە`,`جۈمە`,`شەنبە`]},defaultWidth:`wide`}),dayPeriod:r({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:t({matchPattern:/^(\d+)(th|st|nd|rd)?/i,parsePattern:/\d+/i,valueCallback:e=>parseInt(e,10)}),era:n({matchPatterns:{narrow:/^(ب|ك)/i,wide:/^(مىيلادىدىن بۇرۇن|مىيلادىدىن كىيىن)/i},defaultMatchWidth:`wide`,parsePatterns:{any:[/^بۇرۇن/i,/^كىيىن/i]},defaultParseWidth:`any`}),quarter:n({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:n({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:n({matchPatterns:{narrow:/^[دسچپجشي]/i,short:/^(يە|دۈ|سە|چا|پە|جۈ|شە)/i,abbreviated:/^(يە|دۈ|سە|چا|پە|جۈ|شە)/i,wide:/^(يەكشەنبە|دۈشەنبە|سەيشەنبە|چارشەنبە|پەيشەنبە|جۈمە|شەنبە)/i},defaultMatchWidth:`wide`,parsePatterns:{narrow:[/^ي/i,/^د/i,/^س/i,/^چ/i,/^پ/i,/^ج/i,/^ش/i],any:[/^ي/i,/^د/i,/^س/i,/^چ/i,/^پ/i,/^ج/i,/^ش/i]},defaultParseWidth:`any`}),dayPeriod:n({matchPatterns:{narrow:/^(ئە|چ|ك|چ|(دە|ئەتىگەن) ( ئە|چۈشتىن كىيىن|ئاخشىم|كىچە))/i,any:/^(ئە|چ|ك|چ|(دە|ئەتىگەن) ( ئە|چۈشتىن كىيىن|ئاخشىم|كىچە))/i},defaultMatchWidth:`any`,parsePatterns:{any:{am:/^ئە/i,pm:/^چ/i,midnight:/^ك/i,noon:/^چ/i,morning:/ئەتىگەن/i,afternoon:/چۈشتىن كىيىن/i,evening:/ئاخشىم/i,night:/كىچە/i}},defaultParseWidth:`any`})},options:{weekStartsOn:0,firstWeekContainsDate:1}};export{c as default,c as ug};
|