@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
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{t,v as n}from"./vendor-react-BggL7APJ.js";import{Cn as r,pn as i,vn as a,xr as o}from"./vendor-objectstack-DFqu45yM.js";import{$ as s,An as c,Ar as l,Br as u,Ct as d,E as f,Fr as p,Hr as m,K as h,Mn as g,Mr as _,Nn as v,On as y,Pn as b,Pr as x,S,T as C,Ur as w,Vr as T,Wr as E,_i as D,a as O,bi as k,c as A,di as j,fi as M,gi as N,hi as P,jn as F,kn as I,mi as ee,pi as te,q as L,ui as ne,xi as R,yi as re}from"./ui-components-D6cEVg0T.js";import{Et as ie,Fi as ae,Ft as z,Hi as B,Ji as V,Ki as H,L as U,Ot as W,Ui as oe,Vi as se,Xi as G,Yi as K,_ as q,ct as ce,dt as J,f as le,g as Y,gt as ue,i as de,ia as X,jt as fe,kr as pe,m as me,mn as he,na as ge,p as _e,pt as ve,qi as ye,ta as be,tr as xe,u as Se}from"./framework-DFR4HNtj.js";import{h as Ce,i as we,n as Te,o as Ee,p as De,t as Oe,w as ke}from"./i18n-runtime-97_bDVjP.js";import{r as Z}from"./vendor-ui-utils-DIUdEYii.js";import{t as Ae}from"./vendor-icon-check-vpu9Zukp.js";import{t as je}from"./vendor-icon-chevron-down-BEf_jTEE.js";import{t as Me}from"./vendor-icon-chevron-left-KnDcuFH1.js";import{t as Ne}from"./vendor-icon-chevron-right-DbnKwHYQ.js";import{t as Pe}from"./vendor-icon-circle-alert-D1XTr_X9.js";import{t as Fe}from"./vendor-icon-circle-check-Bq3OcFQN.js";import{t as Ie}from"./vendor-icon-loader-circle-D3PsuVaD.js";import{t as Le}from"./vendor-icon-lock-B_psRnly.js";import{t as Re}from"./vendor-icon-shield-check-CdDzbial.js";import{t as ze}from"./vendor-icon-triangle-alert-D5n0T3q_.js";var Q=e(n(),1);function Be(e,t,n){let r=q(n&&e||void 0,n&&t!==void 0?String(t):void 0),[i,a]=(0,Q.useState)(0),o=(0,Q.useRef)(!1),s=(0,Q.useRef)(!1),c=(0,Q.useRef)(r);(0,Q.useEffect)(()=>{if(r!==c.current){if(c.current=r,o.current){s.current=!0;return}a(e=>e+1)}},[r]);let[l]=(0,Q.useState)(()=>{let e=()=>{s.current&&(s.current=!1,a(e=>e+1))};return{onDirtyChange:t=>{o.current=t,t||e()},saved:()=>{o.current=!1,e()}}});return{refetch:i,...l}}var Ve=`https://a.invalid/`,He=`https://b.invalid/`;function Ue(e){try{return new URL(e,Ve).origin===`https://a.invalid`&&new URL(e,He).origin===`https://b.invalid`}catch{return!1}}function We(e,t){if(!e)return null;let n=t?.id??t?.recordId??t?._id;if(n==null||n===``)return null;let r=e.replace(/\{(?:id|recordId)\}/g,()=>encodeURIComponent(String(n)));return Ue(r)?r:null}var Ge=/\{\{record\.([a-z_][a-z0-9_]*)\}\}/g;function Ke(e){return e==null?``:typeof e==`string`?e:typeof e==`boolean`||typeof e==`number`&&Number.isFinite(e)?String(e):``}function qe(e,t){let n=e=>e&&typeof e==`object`&&!Array.isArray(e)?e:{};return{...n(e),...n(t)}}function Je(e,t){let n=o.safeParse({submitBehavior:{kind:`redirect`,url:e}});if(!n.success)return{ok:!1,refusal:n.error.issues.find(e=>e.path[0]===`submitBehavior`&&e.path[1]===`url`)?.message??n.error.issues[0]?.message??`\`submitBehavior.url\` is not a value this contract accepts: ${JSON.stringify(e)}.`};let r=n.data.submitBehavior,i=(r?.kind===`redirect`?r.url:e).replace(Ge,(e,n)=>encodeURIComponent(Ke(t[n])));return i.includes(`{`)||i.includes(`}`)?{ok:!1,refusal:`\`submitBehavior.url\` carries an interpolation this renderer could not resolve (${JSON.stringify(e)}). A token names one declared record field, spelled \`{{record.field_name}}\`, and the redirect is refused rather than followed with the token left in it.`}:{ok:!0,url:i}}function Ye(e){let{navigate:t}=U(),n=(0,Q.useRef)(t);(0,Q.useEffect)(()=>{n.current=t},[t]),(0,Q.useEffect)(()=>{if(!e)return;let t=setTimeout(()=>{let t=n.current;if(t){t(e.url);return}window.location.assign(e.url)},e.delayMs);return()=>clearTimeout(t)},[e])}function Xe(e,t){return`[ObjectForm] Section \`visibleWhen\` is not yet supported on this layout: the \`${e}\` layout's steps drop the predicate, so section(s) ${t} render unconditionally. A wizard STEP predicate is a separate contract still being designed (objectui#6237) — it is not the tab predicate with a different name. Today, use \`formType: 'tabbed' | 'modal' | 'drawer' | 'split'\` or the flat layout — each honours a section \`visibleWhen\` — or move the predicate onto the individual fields, whose own \`visibleWhen\` is evaluated on every layout.`}a();function Ze(e){return e!=null&&!H(e)}function Qe(e){return e?.mode===`create`||!e?.recordId}function $e(e,t){return!(!e?.required||t&&H(e.defaultValue))}function et(e,t){let n=e?.fields;if(!n||typeof n!=`object`)return{};let r={};for(let e of Object.keys(n)){let i=n[e],a=i?.defaultValue;Ze(a)?r[e]=a:tt(i)&&t?.currentUserId&&(r[e]=t.currentUserId)}return r}function tt(e){return!e||!r(e.defaultValue)?!1:e.type===`user`||e.type===`lookup`&&e.reference===`sys_user`}function nt(e,t,n){return{...et(e,n),...t??{}}}function rt(e,t){if(!e||typeof e!=`object`)return e;let n=t?.fields;if(!n||typeof n!=`object`)return e;let r={};for(let[t,i]of Object.entries(e))H(n[t]?.defaultValue)&&V(i)||(r[t]=i);return r}function it(e,t){if(e?.length)return e.find(e=>e?.name===t)}function at(e,t,n,r=e=>e){let i=t?.length?t:void 0,a=[];if(e.forEach((e,t)=>{let o=it(i,e);if(o){a.push(r(o));return}let s=n(e,t);s&&a.push(s)}),i){let e=new Set(a.map(e=>e.name));i.forEach(t=>{let n=t?.name;n&&!e.has(n)&&(e.add(n),a.push(r(t)))})}return a}function ot(e,t){return typeof t==`string`||typeof t==`object`&&t&&typeof t.source==`string`?se(t)?(e.visibleOn!==t&&B(t,{},!0,void 0,void 0,{context:`view-level visibility of field '${e.name}', read as no gate`}),e):{...e,visibleOn:t}:e}var st=new Set;function ct(e,t){if(typeof e.name!=`string`||e.name===e.field)return;let n=`${t}:${e.field}:${e.name}`;st.has(n)||(st.add(n),console.warn(`[object-ui] section field { field: '${e.field}' } also carries name: '${e.name}' — mixed form-field vocabularies. The spec key wins (the runtime name becomes '${e.field}'); drop \`name\` from authored form views.`))}var lt=new Set;function ut(e,t){let n=typeof e==`object`&&e&&typeof e.field==`string`?`{ field: '${e.field}' }`:JSON.stringify(e),r=`${t}:${n}`;lt.has(r)||(lt.add(r),console.warn(`[object-ui] top-level \`fields\` entry ${n} resolved to no field name and was skipped. Top-level \`fields\` takes bare field-name strings (\`{ name }\` is tolerated) — it is NOT the same vocabulary as \`sections[].fields\`, which also accepts the spec \`FormFieldSchema\` object (identity key \`field\`, e.g. \`{ field: 'note', colSpan: 2 }\`). That shape has no \`name\` here and is silently dropped; use a bare field-name string, or move the entry into a \`sections[].fields\` entry instead.`))}var dt=new Set;function ft(e,t,n){let r=n?`section '${n}'`:`an untitled section`,i=`${t}:${r}:${e}`;dt.has(i)||(dt.add(i),console.warn(`[object-ui] ${r} names '${e}', which object '${t}' declares, but the form's top-level \`fields\` does not list it — so it was dropped from the rendered form. Top-level \`fields\` and \`sections\` INTERSECT (the parent field pool is built from \`fields\` first, and every section resolves its members against that pool); they are alternatives, not layers. Author one or the other, or list every section member in \`fields\` too. A section that loses EVERY member this way disappears with its heading.`))}function pt(e,t){let n=t.objectSchema?.fields?.[e];return n?{name:e,label:t.fieldLabel(t.objectName,e,n.label||e),type:h(n.type,{multiple:n.multiple}),required:$e(n,Qe(t)),disabled:t.readOnly||t.mode===`view`||n.readonly,placeholder:n.placeholder,description:n.help||n.description,validation:O(n),field:n,options:n.options,multiple:n.multiple,visibleWhen:n.visibleWhen,readonlyWhen:n.readonlyWhen,requiredWhen:n.requiredWhen}:{name:e,label:e,type:`input`}}function mt(e){if(typeof e==`string`)return e;if(typeof e!=`object`||!e)return;let t=e;return typeof t.field==`string`?t.field:typeof t.name==`string`?t.name:void 0}function ht(e,t){return gt(e,t,void 0)}function gt(e,t,n){if(typeof e==`string`){if(n)return n;let r=it(t.customFields,e);if(r)return ht(r,t);let i=t.objectSchema?.fields?.[e];return ot(pt(e,t),i?.visible_on??i?.visibleOn)}let r=e;if(typeof r.field!=`string`)return ot(r,r.visibleOn);ct(r,t.objectName);let i=r.field,a=it(t.customFields,i),o=n?{...n}:a?{...a}:pt(i,t);r.widget!=null&&(o.widget=r.widget),r.label!=null&&(o.label=r.label),r.placeholder!=null&&(o.placeholder=r.placeholder),r.helpText!=null&&(o.description=r.helpText),r.required!=null&&(o.required=$e({required:r.required,defaultValue:t.objectSchema?.fields?.[i]?.defaultValue},Qe(t))),r.readonly!=null&&(o.disabled=r.readonly||o.disabled),r.immutable!=null&&(o.immutable=r.immutable),r.hidden!=null&&(o.hidden=r.hidden),r.colSpan!=null&&(o.colSpan=r.colSpan),r.span!=null&&(o.span=r.span),r.options!=null&&(o.options=r.options),r.multiple!=null&&(o.multiple=r.multiple);let s=r.type??(a?void 0:t.objectSchema?.fields?.[i]?.type);return s!=null&&(o.type=h(s,{multiple:o.multiple})),r.reference!=null&&(o.reference=r.reference),r.maxLength!=null&&(o.maxLength=r.maxLength),r.minLength!=null&&(o.minLength=r.minLength),r.min!=null&&(o.min=r.min),r.max!=null&&(o.max=r.max),r.precision!=null&&(o.precision=r.precision),r.scale!=null&&(o.scale=r.scale),r.language!=null&&(o.language=r.language),Array.isArray(r.fields)&&(o.fields=r.fields),r.dependsOn!=null&&(o.dependsOn=r.dependsOn),r.keyField!=null&&(o.keyField=r.keyField),r.disclosure!=null&&(o.disclosure=r.disclosure),ot(o,r.visibleWhen??r.visibleOn)}function _t(e,t){let n=e.fields??[],r=t.pool;if(!r)return n.map(e=>ht(e,t));let i=new Map;for(let e of r)e?.name&&!i.has(e.name)&&i.set(e.name,e);let a=[];for(let e of n){let n=mt(e),r=n===void 0?void 0:i.get(n);r&&a.push(gt(e,t,r))}return a}function vt(e){return{...e?.initialValues??{},...e?.initialData??{}}}function yt(e,t){if(e?.isLoaded)return n=>e.checkField(t,n,`write`)}function bt(e,t,n,r,i){if(!Array.isArray(e)||!t?.isLoaded)return e;let a=[];for(let o of e){if(!o?.name){a.push(o);continue}if(t.checkField(n,o.name,`read`)){if(r!==`view`&&!t.checkField(n,o.name,`write`)){a.push(i(o));continue}a.push(o)}}return a}function xt(e,{perms:t,objectName:n,mode:r,deniedDescription:i}){return bt(e,t,n,r,e=>i?{...e,readOnly:!0,disabled:!0,description:e.description??i}:{...e,readOnly:!0,disabled:!0})}function St(e,t,n,r){if(r!==`edit`&&r!==`create`)return!1;let i=ae(e,t?.getObjectApiOperations?.(n));return r===`edit`?!i.edit:!i.create}function Ct({perms:e,objectName:t,mode:n,objectSchema:r}){if(St(r,e,t,n))return n===`edit`?`edit`:`create`}function wt(e,{objectSchema:t,...n}){let r=xt(e,n);return!Array.isArray(r)||!St(t,n.perms,n.objectName,n.mode)?r:r.map(e=>e?.name?{...e,disabled:!0}:e)}var Tt=`true`;function Et(e,{perms:t,objectName:n}){return bt(e,t,n,void 0,e=>({...e,readonlyWhen:Tt}))}var $=t(),Dt=Ce({"form.noPermissionToCreate":`You don't have permission to create {{object}} records. The fields are read-only.`,"form.noPermissionToEdit":`You don't have permission to edit {{object}} records. The fields are read-only.`},`form.noPermissionToCreate`);function Ot({affordance:e,objectName:t,objectSchema:n}){let r=De(),{t:i}=Dt();if(!e)return null;let a=typeof n?.label==`string`&&n.label?n.label:t,o=`objectLabel`in r?r.objectLabel({name:t,label:a}):a,s=i(e===`edit`?`form.noPermissionToEdit`:`form.noPermissionToCreate`,{object:o});return(0,$.jsxs)(`p`,{role:`status`,className:`mb-4 flex items-start gap-2 rounded-md border bg-muted/50 px-3 py-2 text-sm text-muted-foreground`,"data-testid":`closed-affordance-notice`,"data-affordance":e,children:[(0,$.jsx)(Le,{className:`mt-0.5 h-4 w-4 shrink-0`,"aria-hidden":!0}),(0,$.jsx)(`span`,{children:s})]})}var kt=new Set(`id._id.__v._version._rev.created.created_at.createdAt.created_by.createdBy.modified.modified_by.updated_at.updatedAt.updated_by.updatedBy.last_modified_at.lastModifiedAt.last_modified_by.lastModifiedBy.deleted_at.deletedAt.owner.owner_id.ownerId.owning_business_unit_id.owningBusinessUnitId.organization_id.organizationId.org_id.orgId.tenant_id.tenantId.company_id.companyId.space`.split(`.`)),At=new Set([`formula`,`summary`,`rollup`,`lookup_value`,`auto_number`,`autonumber`,`computed`]);function jt(e,t,n){if(!e||typeof e!=`object`)return e;let r={},i=t?.fields,a=n?.canEdit;for(let[t,n]of Object.entries(e))if(!kt.has(t)&&(!a||a(t))){if(i){let e=i[t];if(!e||e.system===!0)continue;let n=String(e.type||``).toLowerCase();if(At.has(n)||e.computed===!0||e.readOnly===!0||e.readonly===!0)continue}r[t]=n}return r}function Mt(e,t){if(e===t||e==null&&t==null)return!0;if(e==null||t==null)return!1;if(e instanceof Date||t instanceof Date){let n=e instanceof Date?e.getTime():NaN,r=t instanceof Date?t.getTime():NaN;return Number.isFinite(n)&&n===r}if(typeof e==`object`&&typeof t==`object`)try{return JSON.stringify(e)===JSON.stringify(t)}catch{return!1}return!1}function Nt(e,t){let n={};for(let[r,i]of Object.entries(e))Mt(i,t[r])||(n[r]=i);return n}function Pt(e,t){return e.recordId==null||e.recordId===``||!t||typeof t!=`object`||Array.isArray(t)?null:{objectName:e.objectName,recordId:String(e.recordId),record:{...t}}}function Ft(e,t){return!e||t.mode!==`edit`||t.recordId==null||t.recordId===``||e.objectName!==t.objectName||e.recordId!==String(t.recordId)?null:e.record}function It(e,t,n){if(!e||typeof e!=`object`)return e;let r=Ft(t,n);if(!r)return e;let i=Nt(e,r);return Object.keys(i).length>0?i:e}function Lt(e,t,n){let r=Ft(e,t);return!e||!r?e??null:!n||typeof n!=`object`?e:{...e,record:{...r,...n}}}function Rt(e,t,{objectSchema:n,canEdit:r,snapshot:i}){let a=Array.isArray(t.customFields)&&t.customFields.length>0?null:n,o=jt(e,a,{canEdit:r});return Qe(t)&&(o=rt(o,a)),{payload:o,writePayload:It(o,i,t)}}var zt=new Set([`field:formula`,`field:summary`,`field:auto_number`,`field:autonumber`]),Bt=new Set([`field:textarea`,`field:markdown`,`field:html`,`field:grid`,`field:richtext`,`textarea`,`markdown`,`html`,`grid`,`richtext`]),Vt=new Set([`formula`,`summary`,`auto_number`,`autonumber`]);function Ht(e){return Bt.has(e)}function Ut(e){return Vt.has(e)}function Wt(e){return e<=3?1:e<=8?2:e<=15?3:4}function Gt(e){return e&&e>0?Math.min(Math.floor(e),4):1}function Kt(e,t,n){let r=Gt(t);return r<=1?1:e.span===`full`?r:e.colSpan==null?e.type&&Ht(e.type)?r:Math.min(r,Math.max(1,Math.round(r/Math.min(Math.max(1,Math.floor(n||r)),r)))):Math.min(Math.max(1,Math.floor(e.colSpan)),r)}function qt(e,t,n){let r=Gt(t);return r<=1?e:e.map(e=>{if(e.type===`section-divider`)return e;let t=Kt(e,r,n);return t>1?{...e,colSpan:t}:e.colSpan!=null&&e.colSpan!==1?{...e,colSpan:1}:e})}var Jt=kt;function Yt(e,t){return e.filter(e=>{if(Jt.has(e.name))return!1;let n=t?.fields?.[e.name];return n?.hidden!==!0&&n?.readonly!==!0})}function Xt(e,t){return e.filter(e=>{if(e.type&&zt.has(e.type))return!1;let n=t?.fields?.[e.name];return!n||!Ut(n.type)})}var Zt={1:void 0,2:`grid gap-4 grid-cols-1 @md:grid-cols-2`,3:`grid gap-4 grid-cols-1 @md:grid-cols-2 @2xl:grid-cols-3`,4:`grid gap-4 grid-cols-1 @md:grid-cols-2 @2xl:grid-cols-3 @4xl:grid-cols-4`};function Qt(e){return Zt[e&&e>0?Math.min(Math.floor(e),4):1]}function $t(e){return e<=1?`default`:e===2?`xl`:`full`}function en(e,t,n,r){let i=[...e];if(i=Yt(i,t),r===`create`&&(i=Xt(i,t)),n!==void 0)return i=qt(i,n),{fields:i,columns:n};let a=Wt(i.length);return i=qt(i,a),{fields:i,columns:a}}var tn=Ce({"form.conflictTitle":`Save conflict`,"form.conflictMessage":`This record was changed by someone else while you were editing. Overwriting will replace their changes with yours.`,"form.conflictLatestVersion":`Their save: {{time}}`,"form.conflictOverwrite":`Overwrite`,"form.keepEditing":`Keep editing`},`form.conflictTitle`);function nn(e){let t=e?.updated_at;return typeof t==`string`&&t.length>0?t:void 0}function rn(e){if(!e||typeof e!=`object`)return!1;let t=e;return t.code===`CONCURRENT_UPDATE`||t.name===`ConcurrentUpdateError`}function an(e,t){return JSON.stringify([e,String(t)])}function on(e,t){if(t)return e&&e.readVersion===t?e.version:t}function sn(e,t){if(!e)return null;let n=/\d{4}-\d{2}-\d{2}[ T]/.test(e)?e.replace(` `,`T`):e,r=new Date(n);return Number.isNaN(r.getTime())?null:r.toLocaleString(t)}function cn(){let{t:e}=tn(),t=Oe(),[n,r]=Q.useState(null),i=Q.useRef(null),a=Q.useRef(new Map),o=Q.useCallback(e=>{i.current?.(e),i.current=null,r(null)},[]);Q.useEffect(()=>()=>i.current?.(!1),[]);let s=Q.useCallback(async({dataSource:e,objectName:t,recordId:n,payload:o,baseRecord:s})=>{let c=an(t,n),l=nn(s),u=on(a.current.get(c),l),d=e=>{let t=nn(e);l&&t?a.current.set(c,{readVersion:l,version:t}):a.current.delete(c)};try{let r=await e.update(t,n,o,u?{ifMatch:u}:void 0);return d(r),{status:`saved`,result:r}}catch(a){if(!rn(a))throw a;let s=a.currentVersion,c=de(a);if(!await new Promise(e=>{i.current=e,r({currentVersion:typeof s==`string`?s:void 0,userMessage:c??void 0})}))return{status:`cancelled`};let l=typeof s==`string`&&s.length>0?s:void 0,u=await e.update(t,n,o,l?{ifMatch:l}:void 0);return d(u),{status:`saved`,result:u}}},[]),c=sn(n?.currentVersion,t);return{saveWithOcc:s,conflictDialog:(0,$.jsx)(ne,{open:!!n,onOpenChange:e=>{e||o(!1)},children:(0,$.jsxs)(te,{children:[(0,$.jsxs)(N,{children:[(0,$.jsxs)(D,{className:`flex items-center gap-2`,children:[(0,$.jsx)(ze,{className:`h-5 w-5 text-amber-500`,"aria-hidden":!0}),e(`form.conflictTitle`)]}),(0,$.jsxs)(ee,{children:[n?.userMessage&&(0,$.jsx)(`span`,{className:`mb-2 block font-medium text-foreground`,children:n.userMessage}),e(`form.conflictMessage`),c&&(0,$.jsx)(`span`,{className:`mt-2 block text-xs text-muted-foreground`,children:e(`form.conflictLatestVersion`,{time:c})})]})]}),(0,$.jsxs)(P,{children:[(0,$.jsx)(`button`,{type:`button`,className:R(k({variant:`outline`})),onClick:()=>o(!1),children:e(`form.keepEditing`)}),(0,$.jsx)(`button`,{type:`button`,className:R(k({variant:`destructive`})),onClick:()=>o(!0),children:e(`form.conflictOverwrite`)})]})]})})}}var ln={schema:null,record:null};function un(e,t,n){let r=++e.current[n],i=()=>e.current[n]===r;return{fail(e){i()&&t(t=>({...t,[n]:e}))},commit(){i()&&t(e=>e[n]===null?e:{...e,[n]:null})}}}function dn(e){return e.schema||e.record}function fn(e){if(typeof e!=`object`||!e||Array.isArray(e))return!1;let t=e;return typeof t.field!=`string`&&typeof t.name==`string`}function pn(e){if(!Array.isArray(e)||e.length===0)return!1;let t=0;for(let n of e){if(typeof n!=`object`||!n)return!1;let e=n.fields;if(!Array.isArray(e))return!1;for(let n of e){if(!fn(n))return!1;t+=1}}return t>0}function mn(e){let t=e;return Array.isArray(t?.customFields)&&t.customFields.length>0?!0:pn(t?.sections)}var hn=`DataSource is required for form submission (inline mode not configured)`;function gn(){return Error(hn)}var _n=Ce({"form.uploadInFlight":`Wait for the upload to finish before saving.`,"fields.file.uploading":`Uploading…`},`form.uploadInFlight`);function vn(){let e=f(),{t}=_n();return{uploading:e.anyUploading,scope:e,busyLabel:t(`fields.file.uploading`),reason:t(`form.uploadInFlight`)}}function yn({gate:e,children:t}){return(0,$.jsx)(C,{scope:e.scope,children:t})}function bn({gate:e}){return e.uploading?(0,$.jsx)(`p`,{role:`status`,className:`text-sm text-muted-foreground`,"data-testid":`upload-in-flight-notice`,children:e.reason}):null}var xn={"form.create":`Create`,"form.update":`Update`,"common.save":`Save`,"common.cancel":`Cancel`,"form.created":`Created`,"form.saved":`Saved`,"form.savedNamed":`{{title}} saved`,"form.errorLoading":`Error loading form`,"form.navigateRefused":"The `navigateOnSuccess` destination declared for this form was refused, so the navigation did not happen.","publicForm.thankYouTitle":`Thank you!`,"publicForm.loading":`Loading form…`,"form.deniedDescription":`You do not have edit access to this field.`,"form.masterDetail.loadingColumns":`Loading columns…`,"form.masterDetail.subtotal":`Subtotal`,"form.masterDetail.tax":`Tax ({{rate}}%)`,"form.masterDetail.total":`Total`,"form.masterDetail.lineItem":`Line item`,"form.masterDetail.rowTitle":`{{title}} — row {{row}}`,"form.masterDetail.applyRow":`Apply`,"detail.add":`Add`,"common.close":`Close`,"detail.saving":`Saving…`,"form.masterDetail.noChildObject":`This collection has no child object configured: set {{property}} to the object whose rows it lists.`,"form.masterDetail.schemaUnavailable":`Could not load the schema of {{object}}, so this collection has no columns to show. Check that the object exists and is readable, then reload.`,"form.masterDetail.noRelationshipField":`Could not work out how {{object}} links to {{parent}}: no lookup or master_detail field on it references the parent. Set {{property}} on this collection to the field that holds the parent record.`,"form.lineItems.title":`Line Items`};xn[`form.navigateRefused`];var Sn=Ce(xn,`form.errorLoading`),Cn=({schema:e,dataSource:t,className:n})=>{let{fieldLabel:r}=De(),{t:i}=Sn(),a=s(),{userId:o}=a,[c,l]=(0,Q.useState)(null),u=vn(),[d,f]=(0,Q.useState)({}),{saveWithOcc:p,conflictDialog:m}=cn(),[h,g]=(0,Q.useState)(!0),[_,v]=(0,Q.useState)(ln),y=(0,Q.useRef)({schema:0,record:0}),b=dn(_),x=e.defaultTab||e.sections[0]?.name||e.sections[0]?.label||`tab-0`;Q.useEffect(()=>{let n=!1,r=un(y,v,`schema`);return(async()=>{if(!t){g(!1);return}try{let i=await t.getObjectSchema(e.objectName);if(n)return;l(i),r.commit()}catch(e){if(n)return;r.fail(e)}})(),()=>{n=!0}},[e.objectName,t]);let S=(0,Q.useRef)(void 0),C=(0,Q.useRef)(null),{refetch:w,onDirtyChange:T,saved:E}=Be(e.objectName,e.recordId,!!e.recordId&&e.mode!==`create`);Q.useEffect(()=>{let n=!1,r=un(y,v,`record`);return(c||!t)&&(async()=>{if(e.mode===`create`||!e.recordId||!t){C.current=null,f(nt(c,vt(e),{currentUserId:o})),r.commit(),g(!1);return}S.current!==e.recordId&&g(!0);try{let i=await t.findOne(e.objectName,e.recordId);if(n)return;S.current=e.recordId,C.current=Pt(e,i),f(i||{}),r.commit()}catch(e){if(n)return;r.fail(e)}finally{n||g(!1)}})(),()=>{n=!0}},[c,e.mode,e.recordId,e.initialData,e.initialValues,t,e.objectName,w]);let D=(0,Q.useCallback)(t=>{let n=_t(t,{objectSchema:c,objectName:e.objectName,readOnly:e.readOnly,mode:e.mode,recordId:e.recordId,fieldLabel:r,customFields:e.customFields});return wt(n,{perms:a,objectName:e.objectName,mode:e.mode,objectSchema:c})??n},[c,e.readOnly,e.mode,e.recordId,e.objectName,e.customFields,r,a]),O=(0,Q.useCallback)(async n=>{if(u.uploading){Z.error(u.reason);return}if(!t&&!e.submitHandler&&mn(e))return e.onSuccess&&await e.onSuccess(n),n;try{let r,{writePayload:i}=Rt(n,e,{objectSchema:c,canEdit:yt(a,e.objectName),snapshot:C.current});if(e.submitHandler)r=await e.submitHandler(i);else if(!t)throw gn();else if(e.mode===`create`)r=await t.create(e.objectName,i);else if(e.mode===`edit`&&e.recordId){let n=await p({dataSource:t,objectName:e.objectName,recordId:e.recordId,payload:i,baseRecord:d});if(n.status===`cancelled`)return;r=n.result}return C.current=Lt(C.current,e,i),E(),e.onSuccess&&await e.onSuccess(r),r}catch(t){throw e.onError&&e.onError(t),t}},[e,t,c,a,p,d,u.uploading,u.reason,E]),k=(0,Q.useCallback)(()=>{e.onCancel&&e.onCancel()},[e]),A=(e,t)=>e.name||e.label||`tab-${t}`;if(b)return(0,$.jsxs)(`div`,{className:`p-4 border border-red-300 bg-red-50 rounded-md`,children:[(0,$.jsx)(`h3`,{className:`text-red-800 font-semibold`,children:i(`form.errorLoading`)}),(0,$.jsx)(`p`,{className:`text-red-600 text-sm mt-1`,children:b.message})]});if(h)return(0,$.jsxs)(`div`,{className:`p-8 text-center`,children:[(0,$.jsx)(`div`,{className:`inline-block animate-spin rounded-full h-8 w-8 border-b-2 border-gray-900`}),(0,$.jsx)(`p`,{className:`mt-2 text-sm text-gray-600`,children:i(`publicForm.loading`)})]});let j=e=>typeof e==`number`&&e>0?Math.min(Math.floor(e),4):void 0,M=e.sections.map(e=>j(e.columns)).filter(e=>e!=null),N=j(e.columns)??(M.length?Math.max(...M):1),P=Qt(N),F=e.sections.map((e,t)=>{let n=D(e);return{key:A(e,t),label:e.label||`Tab ${t+1}`,description:e.description,containerClass:e.gridClassName,visibleWhen:e.visibleWhen,fields:N>1?qt(n,N,j(e.columns)):n}}),I=[...F.length>1?[]:F.filter(e=>e.visibleWhen!=null).map(e=>({name:`__section_gate_${e.key}`,type:`section-divider`,visibleWhen:e.visibleWhen,fields:e.fields.map(e=>e.name),colSpan:4})),...F.flatMap(e=>e.fields)];return(0,$.jsx)(yn,{gate:u,children:(0,$.jsxs)(`div`,{className:R(`w-full @container`,n,e.className),children:[(0,$.jsx)(Ot,{affordance:Ct({perms:a,objectName:e.objectName,mode:e.mode,objectSchema:c}),objectName:e.objectName,objectSchema:c}),(0,$.jsx)(ue,{schema:{type:`form`,objectName:e.objectName,fields:I,columns:N,...P?{fieldContainerClass:P}:{},layout:`vertical`,defaultValues:d,previousValues:e.mode===`edit`&&e.recordId?d:void 0,submitLabel:u.uploading?u.busyLabel:e.submitText||(e.mode===`create`?i(`form.create`):i(`form.update`)),cancelLabel:e.cancelText,showSubmit:e.showSubmit!==!1&&e.mode!==`view`,showCancel:e.showCancel!==!1,onSubmit:O,onCancel:k,onDirtyChange:T,fieldTabs:F.map(e=>({key:e.key,label:e.label,description:e.description,fields:e.fields.map(e=>e.name),containerClass:e.containerClass,visibleWhen:e.visibleWhen})),defaultFieldTab:x,fieldTabsPosition:e.tabPosition||`top`}}),(0,$.jsx)(bn,{gate:u}),m]})})},wn=({label:e,description:t,collapsible:n=!1,collapsed:r=!1,columns:i=1,children:a,className:o,gridClassName:s,showBorder:c})=>{let[l,d]=(0,Q.useState)(r),f={1:`grid-cols-1`,2:`grid-cols-1 md:grid-cols-2`,3:`grid-cols-1 md:grid-cols-2 lg:grid-cols-3`,4:`grid-cols-1 md:grid-cols-2 lg:grid-cols-4`},p=()=>{n&&d(!l)},m=c??!!e,h=e||t?(0,$.jsxs)(`div`,{className:R(`flex items-start gap-2`,!m&&`mb-4`,n&&`cursor-pointer select-none`),onClick:p,role:n?`button`:void 0,"aria-expanded":n?!l:void 0,children:[n&&(0,$.jsx)(`span`,{className:`mt-0.5 text-muted-foreground`,children:l?(0,$.jsx)(Ne,{className:`h-4 w-4`}):(0,$.jsx)(je,{className:`h-4 w-4`})}),(0,$.jsxs)(`div`,{className:`flex-1`,children:[e&&(0,$.jsx)(`h3`,{className:`text-sm font-semibold text-foreground`,children:e}),t&&(0,$.jsx)(`p`,{className:`text-sm text-muted-foreground mt-0.5`,children:t})]})]}):null,g=l?null:(0,$.jsx)(`div`,{className:R(`grid gap-4`,s||f[i]),children:a});return m?(0,$.jsxs)(u,{className:R(`form-section bg-muted/40 shadow-none`,o),children:[h&&(0,$.jsx)(w,{className:`border-b border-border pb-3`,children:h}),g&&(0,$.jsx)(T,{className:`pt-4`,children:g})]}):(0,$.jsxs)(`div`,{className:R(`form-section`,o),children:[h,g]})},Tn=e=>e==null||e===``||Array.isArray(e)&&e.length===0,En=(e,t)=>Object.keys(e).some(n=>{let r=e[n],i=t[n];if(Tn(r)&&Tn(i))return!1;try{return JSON.stringify(r)!==JSON.stringify(i)}catch{return r!==i}}),Dn=Ce({"wizard.missingRequired":`Please complete the required fields: {{fields}}`,"common.cancel":`Cancel`,"wizard.back":`Back`,"common.next":`Next`,"wizard.submitting":`Submitting…`,"form.create":`Create`,"form.update":`Update`,"form.stepOf":`Step {{current}} of {{total}}`,"wizard.stepFallback":`Step {{n}}`,"wizard.progressLabel":`Progress`,"wizard.emptyStep":`No fields configured for this step`,"form.created":`Created`,"form.saved":`Saved`,"form.navigateRefused":"The `navigateOnSuccess` destination declared for this form was refused, so the navigation did not happen.","publicForm.thankYouTitle":`Thank you!`,"publicForm.loading":`Loading form…`,"form.errorLoading":`Error loading form`,"form.visibleWhenFaulted":`Can't submit: the visibleWhen rule of {{fields}} could not be evaluated. The rule must be fixed before this form can be submitted.`,"validation.formInvalidJoiner":`, `},`wizard.missingRequired`),On=V,kn=({schema:e,dataSource:t,className:n})=>{let{fieldLabel:r}=De(),i=s(),{userId:a}=i,{t:o}=Dn(),c=vn(),[l,u]=(0,Q.useState)(null),[d,f]=(0,Q.useState)({}),[p,m]=(0,Q.useState)(void 0),h=Q.useRef(null),{saveWithOcc:g,conflictDialog:_}=cn(),[v,y]=(0,Q.useState)(!0),[b,x]=(0,Q.useState)(ln),S=Q.useRef({schema:0,record:0}),C=dn(b),[w,T]=(0,Q.useState)(0),[E,D]=(0,Q.useState)(new Set),[O,k]=(0,Q.useState)(!1),[A,j]=(0,Q.useState)(new Set),[M,N]=(0,Q.useState)(null),[P,F]=(0,Q.useState)(null);Ye(P);let I=Q.useId(),[ee,te]=(0,Q.useState)(0),L=Q.useRef(!1),ne=Q.useRef(void 0),{refetch:ie,onDirtyChange:ae,saved:V}=Be(e.objectName,e.recordId,!!e.recordId&&e.mode!==`create`),H=Q.useRef(!1),U=Q.useRef(!1),W=(0,Q.useCallback)(()=>{ae(H.current||U.current)},[ae]),se=(0,Q.useCallback)(e=>{H.current=e,W()},[W]),G=e.sections.length,K=w===0,q=w===G-1;Q.useEffect(()=>{let n=!1,r=un(S,x,`schema`);return(async()=>{if(!t){y(!1);return}try{let i=await t.getObjectSchema(e.objectName);if(n)return;u(i),r.commit()}catch(e){if(n)return;r.fail(e)}})(),()=>{n=!0}},[e.objectName,t]),Q.useEffect(()=>{let n=!1,r=un(S,x,`record`);return(l||!t)&&(async()=>{if(e.mode===`create`||!e.recordId||!t){h.current=null,L.current||=(f(nt(l,vt(e),{currentUserId:a})),!0),r.commit(),y(!1);return}ne.current!==e.recordId&&y(!0);try{let i=await t.findOne(e.objectName,e.recordId);if(n)return;ne.current=e.recordId,h.current=Pt(e,i),f(i||{}),m(i||{}),U.current=!1,r.commit()}catch(e){if(n)return;r.fail(e)}finally{n||y(!1)}})(),()=>{n=!0}},[l,e.mode,e.recordId,e.initialData,e.initialValues,t,e.objectName,ie]);let ce=(0,Q.useCallback)(t=>{let n=_t(t,{objectSchema:l,objectName:e.objectName,readOnly:e.readOnly,mode:e.mode,recordId:e.recordId,fieldLabel:r,customFields:e.customFields});return wt(n,{perms:i,objectName:e.objectName,mode:e.mode,objectSchema:l})??n},[l,e.readOnly,e.mode,e.recordId,e.objectName,e.customFields,r,i]),J=Ct({perms:i,objectName:e.objectName,mode:e.mode,objectSchema:l}),le=Qe(e),Y=z(),de=(0,Q.useMemo)(()=>w>=0&&w<G?ce(e.sections[w]):[],[w,G,e.sections,ce]),X=(0,Q.useCallback)(t=>{let n=new Map,r=new Map;return e.sections.forEach((e,i)=>{for(let a of ce(e)){let e=a?.name;if(!e||a.hidden===!0)continue;let o=oe({visibleWhen:a.visibleWhen,readonlyWhen:a.readonlyWhen,requiredWhen:a.requiredWhen},t,{required:!!a.required,readonly:a.readonly===!0,serverOwnedValue:ye(a,le)},void 0,Y,`field '${e}'`);o.faults.visibleWhen!==void 0&&a.type!==`section-divider`&&r.set(i,[...r.get(i)??[],a.label||e]),(a.visibleOn==null||B(a.visibleOn,t,!0,void 0,Y,{context:`visibleOn of field '${e}'`}))&&o.visible&&!o.readonly&&o.required&&On(t[e])&&n.set(i,[...n.get(i)??[],a.label||e])}}),{missing:n,faultedVisibleWhen:r}},[e.sections,ce,le,Y]),fe=(0,Q.useCallback)(async n=>{if(J)return;let r={...d,...n};if(f(r),En(n,d)&&(U.current=!0,W()),D(e=>new Set(e).add(w)),j(e=>{if(!e.has(w))return e;let t=new Set(e);return t.delete(w),t}),q){if(c.uploading){Z.error(c.reason);return}let{missing:n,faultedVisibleWhen:s}=X(r);if(s.size>0){j(new Set(s.keys())),Z.error(o(`form.visibleWhenFaulted`,{fields:[...s.values()].flat().join(o(`validation.formInvalidJoiner`))})),pe(Math.min(...s.keys()));return}if(n.size>0){j(new Set(n.keys()));let e=[...n.values()].flat();Z.error(o(`wizard.missingRequired`,{fields:e.slice(0,3).join(`, `)+(e.length>3?`…`:``)})),pe(Math.min(...n.keys()));return}j(new Set),k(!0);try{if(!t&&!e.submitHandler&&mn(e))return e.onSuccess&&await e.onSuccess(r),r;let n,{writePayload:s}=Rt(r,e,{objectSchema:l,canEdit:yt(i,e.objectName),snapshot:h.current});if(e.submitHandler)n=await e.submitHandler(s);else if(!t)throw gn();else if(e.mode===`create`)n=await t.create(e.objectName,s);else if(e.mode===`edit`&&e.recordId){let r=await g({dataSource:t,objectName:e.objectName,recordId:e.recordId,payload:s,baseRecord:d});if(r.status===`cancelled`)return;n=r.result}if(h.current=Lt(h.current,e,s),U.current=!1,V(),e.onSuccess)await e.onSuccess(n);else if(!e.submitHandler&&e.submitBehavior){let t=e.submitBehavior;switch(t.kind){case`redirect`:{let i=Je(t.url,qe(r,n));if(!i.ok){Z.error(i.refusal),N({message:e.successMessage||(e.mode===`create`?o(`form.created`):o(`form.saved`)),refusal:i.refusal});break}F({url:i.url,delayMs:t.delayMs??0});break}case`continue`:f(nt(l,vt(e),{currentUserId:a})),D(new Set),T(0),te(e=>e+1);break;default:{let n=t.kind===`thank-you`&&t.message?t.message:e.successMessage||(e.mode===`create`?o(`form.created`):o(`form.saved`));Z.success(n),N({title:t.kind===`thank-you`?t.title:void 0,message:n});break}}}else if(!e.submitHandler){let t=We(e.navigateOnSuccess,n);if(t)return F({url:t,delayMs:0}),n;e.navigateOnSuccess?(console.warn("[WizardForm] `navigateOnSuccess` was declared but produced no destination:",e.navigateOnSuccess),Z.success(e.successMessage||(e.mode===`create`?o(`form.created`):o(`form.saved`)),{description:o(`form.navigateRefused`)})):Z.success(e.successMessage||(e.mode===`create`?o(`form.created`):o(`form.saved`))),e.resetOnSuccess&&e.mode===`create`&&(f(nt(l,vt(e),{currentUserId:a})),D(new Set),T(0),te(e=>e+1))}return n}catch(t){throw e.onError&&e.onError(t),t}finally{k(!1)}}pe(w+1)},[J,d,w,q,e,l,t,i,X,o,g,c.uploading,c.reason,W,V]),pe=(0,Q.useCallback)(t=>{t>=0&&t<G&&(T(t),e.onStepChange&&e.onStepChange(t))},[G,e]),me=(0,Q.useCallback)(()=>{pe(w-1)},[w,pe]),he=(0,Q.useCallback)(()=>{e.onCancel&&e.onCancel()},[e]),ge=(0,Q.useCallback)(t=>t<=w||!J&&(!!e.allowSkip||E.has(t)),[w,J,e.allowSkip,E]),_e=(0,Q.useCallback)(e=>{ge(e)&&pe(e)},[ge,pe]);if(C)return(0,$.jsxs)(`div`,{className:`p-4 border border-red-300 bg-red-50 rounded-md`,children:[(0,$.jsx)(`h3`,{className:`text-red-800 font-semibold`,children:o(`form.errorLoading`)}),(0,$.jsx)(`p`,{className:`text-red-600 text-sm mt-1`,children:C.message})]});if(v)return(0,$.jsxs)(`div`,{className:`p-8 text-center`,children:[(0,$.jsx)(`div`,{className:`inline-block animate-spin rounded-full h-8 w-8 border-b-2 border-gray-900`}),(0,$.jsx)(`p`,{className:`mt-2 text-sm text-gray-600`,children:o(`publicForm.loading`)})]});if(M)return(0,$.jsxs)(`div`,{className:R(`w-full space-y-4`,n,e.className),children:[(0,$.jsxs)(`div`,{className:`rounded-md border bg-card p-8 text-center`,children:[(0,$.jsx)(`h3`,{className:`text-lg font-semibold`,children:M.title??o(`publicForm.thankYouTitle`)}),M.message&&(0,$.jsx)(`p`,{className:`mt-2 text-sm text-muted-foreground`,children:M.message})]}),M.refusal&&(0,$.jsx)(`div`,{role:`alert`,className:`rounded-md border border-destructive/40 bg-destructive/10 p-4 text-sm text-destructive`,children:M.refusal})]});let ve=e.sections[w],be=e=>typeof e==`number`&&e>0?Math.min(Math.floor(e),4):void 0,xe=be(e.columns)??be(ve?.columns)??1,Se=Qt(xe);return(0,$.jsx)(yn,{gate:c,children:(0,$.jsxs)(`div`,{className:R(`w-full @container`,n,e.className),children:[e.showStepIndicator!==!1&&(0,$.jsx)(`nav`,{"aria-label":o(`wizard.progressLabel`),className:`mb-8`,children:(0,$.jsx)(`ol`,{className:`flex items-center`,children:e.sections.map((e,t)=>{let n=t===w,r=E.has(t),i=ge(t),a=A.has(t);return(0,$.jsxs)(`li`,{className:R(`relative flex-1`,t!==G-1&&`pr-8 sm:pr-12`),children:[t!==G-1&&(0,$.jsx)(`div`,{className:`absolute top-3 sm:top-4 left-6 -right-4 sm:left-10 sm:-right-2 h-0.5`,"aria-hidden":`true`,children:(0,$.jsx)(`div`,{className:R(`h-full`,r?`bg-primary`:`bg-muted`)})}),(0,$.jsxs)(`button`,{type:`button`,className:R(`group relative flex items-center`,i?`cursor-pointer`:`cursor-not-allowed`),onClick:()=>_e(t),disabled:!i,"data-testid":`wizard-step:${e.name||t}`,"data-error":a||void 0,children:[(0,$.jsx)(`span`,{className:R(`flex h-6 w-6 sm:h-8 sm:w-8 items-center justify-center rounded-full text-xs sm:text-sm font-medium transition-colors`,a&&`border-2 border-destructive bg-background text-destructive`,!a&&r&&`bg-primary text-primary-foreground`,!a&&n&&!r&&`border-2 border-primary bg-background text-primary`,!a&&!n&&!r&&`border-2 border-muted bg-background text-muted-foreground`),children:a?(0,$.jsx)(Pe,{className:`h-3 w-3 sm:h-4 sm:w-4`,"aria-hidden":!0}):r?(0,$.jsx)(Ae,{className:`h-3 w-3 sm:h-4 sm:w-4`}):t+1}),(0,$.jsx)(`span`,{className:`ml-2 sm:ml-3 text-xs sm:text-sm font-medium hidden sm:block`,children:(0,$.jsx)(`span`,{className:R(a?`text-destructive`:n?`text-foreground`:`text-muted-foreground`),children:e.label||o(`wizard.stepFallback`,{n:t+1})})})]})]},t)})})}),(0,$.jsx)(Ot,{affordance:J,objectName:e.objectName,objectSchema:l}),(0,$.jsx)(`div`,{className:`min-h-[200px]`,children:ve&&(0,$.jsx)(wn,{label:ve.label,description:ve.description,columns:1,className:ve.className,gridClassName:ve.gridClassName,children:de.length>0?(0,$.jsx)(ue,{schema:{type:`form`,objectName:e.objectName,id:I,fields:xe>1?qt(de,xe,be(ve.columns)):de,columns:xe,...Se?{fieldContainerClass:Se}:{},layout:`vertical`,defaultValues:d,previousValues:e.mode===`edit`?p:void 0,showSubmit:!1,showCancel:!1,onSubmit:fe,onDirtyChange:se}},ee):(0,$.jsx)(`form`,{id:I,onSubmit:e=>{e.preventDefault(),fe({})},children:(0,$.jsx)(`div`,{className:`text-center py-8 text-muted-foreground`,children:o(`wizard.emptyStep`)})})})}),(0,$.jsxs)(`div`,{className:`flex items-center justify-between mt-6 pt-4 border-t`,children:[(0,$.jsx)(`div`,{children:e.showCancel!==!1&&(0,$.jsx)(re,{variant:`ghost`,onClick:he,children:e.cancelText||o(`common.cancel`)})}),(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsx)(`span`,{className:`text-sm text-muted-foreground mr-2`,children:o(`form.stepOf`,{current:w+1,total:G})}),!K&&(0,$.jsxs)(re,{variant:`outline`,onClick:me,children:[(0,$.jsx)(Me,{className:`h-4 w-4 mr-1`}),e.prevText||o(`wizard.back`)]}),q?(0,$.jsxs)(re,{type:`submit`,form:I,disabled:O||e.mode===`view`||c.uploading||!!J,children:[O&&(0,$.jsx)(Ie,{className:`mr-2 h-4 w-4 animate-spin`,"aria-hidden":!0}),c.uploading?c.busyLabel:O?o(`wizard.submitting`):e.submitText||(e.mode===`create`?o(`form.create`):o(`form.update`))]}):(0,$.jsxs)(re,{type:`submit`,form:I,disabled:!!J,children:[e.nextText||o(`common.next`),(0,$.jsx)(Ne,{className:`h-4 w-4 ml-1`})]})]})]}),(0,$.jsx)(bn,{gate:c}),_]})})},An=({schema:e,dataSource:t,className:n})=>{let{fieldLabel:r}=De(),{t:i}=Sn(),a=s(),{userId:o}=a,c=vn(),[l,u]=(0,Q.useState)(null),[d,f]=(0,Q.useState)({}),{saveWithOcc:p,conflictDialog:m}=cn(),[h,g]=(0,Q.useState)(!0),[_,v]=(0,Q.useState)(ln),y=(0,Q.useRef)({schema:0,record:0}),b=dn(_);(0,Q.useEffect)(()=>{let n=!1,r=un(y,v,`schema`);return(async()=>{if(!t){g(!1);return}try{let i=await t.getObjectSchema(e.objectName);if(n)return;u(i),r.commit()}catch(e){if(n)return;r.fail(e),g(!1)}})(),()=>{n=!0}},[e.objectName,t]);let x=(0,Q.useRef)(void 0),S=(0,Q.useRef)(null),{refetch:C,onDirtyChange:w,saved:T}=Be(e.objectName,e.recordId,!!e.recordId&&e.mode!==`create`);(0,Q.useEffect)(()=>{let n=!1,r=un(y,v,`record`);return(l||!t)&&(async()=>{if(e.mode===`create`||!e.recordId){S.current=null,f(nt(l,vt(e),{currentUserId:o})),r.commit(),g(!1);return}if(!t){S.current=null,f(vt(e)),r.commit(),g(!1);return}x.current!==e.recordId&&g(!0);try{let i=await t.findOne(e.objectName,e.recordId);if(n)return;x.current=e.recordId,S.current=Pt(e,i),f(i||{}),r.commit()}catch(e){if(n)return;r.fail(e)}finally{n||g(!1)}})(),()=>{n=!0}},[l,e.mode,e.recordId,e.initialData,e.initialValues,t,e.objectName,C]);let E=(0,Q.useCallback)(t=>{let n=_t(t,{objectSchema:l,objectName:e.objectName,readOnly:e.readOnly,mode:e.mode,recordId:e.recordId,fieldLabel:r,customFields:e.customFields});return wt(n,{perms:a,objectName:e.objectName,mode:e.mode,objectSchema:l})??n},[l,e.readOnly,e.mode,e.recordId,e.objectName,e.customFields,r,a]),D=(0,Q.useCallback)(async n=>{if(c.uploading){Z.error(c.reason);return}if(!t&&!e.submitHandler&&mn(e))return e.onSuccess&&await e.onSuccess(n),n;try{let r,{writePayload:i}=Rt(n,e,{objectSchema:l,canEdit:yt(a,e.objectName),snapshot:S.current});if(e.submitHandler)r=await e.submitHandler(i);else if(!t)throw gn();else if(e.mode===`create`)r=await t.create(e.objectName,i);else if(e.mode===`edit`&&e.recordId){let n=await p({dataSource:t,objectName:e.objectName,recordId:e.recordId,payload:i,baseRecord:d});if(n.status===`cancelled`)return;r=n.result}return S.current=Lt(S.current,e,i),T(),e.onSuccess&&await e.onSuccess(r),r}catch(t){throw e.onError&&e.onError(t),t}},[e,t,l,a,p,d,c.uploading,c.reason,T]),O=(0,Q.useCallback)(()=>{e.onCancel&&e.onCancel()},[e]),k=(e,t)=>e.pane===`primary`||e.pane===`secondary`?e.pane:t===0?`primary`:`secondary`,A=(0,Q.useMemo)(()=>e.sections.filter((e,t)=>k(e,t)===`primary`),[e.sections]),j=(0,Q.useMemo)(()=>e.sections.filter((e,t)=>k(e,t)===`secondary`),[e.sections]),M=e.splitDirection||`horizontal`,N=e.splitSize||50;if(b)return(0,$.jsxs)(`div`,{className:`p-4 border border-red-300 bg-red-50 rounded-md`,children:[(0,$.jsx)(`h3`,{className:`text-red-800 font-semibold`,children:i(`form.errorLoading`)}),(0,$.jsx)(`p`,{className:`text-red-600 text-sm mt-1`,children:b.message})]});if(h)return(0,$.jsxs)(`div`,{className:`p-8 text-center`,children:[(0,$.jsx)(`div`,{className:`inline-block animate-spin rounded-full h-8 w-8 border-b-2 border-gray-900`}),(0,$.jsx)(`p`,{className:`mt-2 text-sm text-gray-600`,children:i(`publicForm.loading`)})]});let P=e=>typeof e==`number`&&e>0?Math.min(Math.floor(e),4):void 0,F=e.sections.map(e=>P(e.columns)).filter(e=>e!=null),I=P(e.columns)??(F.length?Math.max(...F):1),ee=Qt(I),te=(e,t)=>{let n=[];return e.forEach((e,r)=>{let i=E(e);i.length&&((e.label||e.description)&&n.push({name:`__section_${e.name||`${t}_${r}`}`,label:e.label,description:e.description,type:`section-divider`,visibleWhen:e.visibleWhen,fields:i.map(e=>e.name),colSpan:4,className:e.className}),n.push(...I>1?qt(i,I,P(e.columns)):i))}),n},L=[{key:`primary`,sections:A,defaultSize:N},{key:`secondary`,sections:j,defaultSize:100-N}].map(e=>({...e,fields:te(e.sections,e.key),containerClass:e.sections.length===1?e.sections[0].gridClassName:void 0})).filter(e=>e.fields.length>0);return(0,$.jsx)(yn,{gate:c,children:(0,$.jsxs)(`div`,{className:R(`w-full @container`,n,e.className),children:[(0,$.jsx)(Ot,{affordance:Ct({perms:a,objectName:e.objectName,mode:e.mode,objectSchema:l}),objectName:e.objectName,objectSchema:l}),(0,$.jsx)(ue,{schema:{type:`form`,objectName:e.objectName,fields:L.flatMap(e=>e.fields),columns:I,...ee?{fieldContainerClass:ee}:{},layout:`vertical`,defaultValues:d,previousValues:e.mode===`edit`&&e.recordId?d:void 0,submitLabel:c.uploading?c.busyLabel:e.submitText||(e.mode===`create`?i(`form.create`):i(`form.update`)),cancelLabel:e.cancelText,showSubmit:e.showSubmit!==!1&&e.mode!==`view`,showCancel:e.showCancel!==!1,onSubmit:D,onCancel:O,onDirtyChange:w,fieldPanes:L.map(e=>({key:e.key,fields:e.fields.map(e=>e.name),defaultSize:e.defaultSize,...e.containerClass?{containerClass:e.containerClass}:{}})),fieldPanesOrientation:M,fieldPanesResizable:e.splitResizable!==!1}}),(0,$.jsx)(bn,{gate:c}),m]})})},jn=e=>e==null?void 0:e.id??e._id??e.recordId,Mn=(e,t)=>t?jt(e,t):e,Nn=e=>jt(e,null),Pn=new Set([`id`,`_id`,`recordId`]);function Fn(e,t){return!e||Object.entries(e).every(([e,n])=>e===t||Pn.has(e)?!0:n==null||n===``)}function In(e,t,n){let r=[{object:e,action:`create`,data:Nn(t)}];for(let e of n)for(let t of e.rows)Fn(t,e.relationshipField)||r.push({object:e.childObject,action:`create`,data:{...Mn(t,e.childSchema),[e.relationshipField]:{$ref:0}}});return r}function Ln(e,t,n,r){let i=[{object:e,action:`update`,id:t,data:Nn(n)}];for(let e of r){let n=(e.rows||[]).map(n=>({...n,[e.relationshipField]:t})),{toCreate:r,toUpdate:a,toDelete:o}=Rn(e.original||[],n);for(let t of r){if(Fn(t,e.relationshipField))continue;let{id:n,_id:r,recordId:a,...o}=t;i.push({object:e.childObject,action:`create`,data:Mn(o,e.childSchema)})}let s=new Map;for(let t of e.original||[]){let e=jn(t);e&&s.set(e,t)}for(let t of a){let n=jn(t),r=s.get(n),a=Mn(t,e.childSchema),o=r?Nt(a,r):a;r&&Object.keys(o).length===0||i.push({object:e.childObject,action:`update`,id:n,data:o})}for(let t of o)i.push({object:e.childObject,action:`delete`,id:t})}return i}function Rn(e,t){let n=new Set(t.map(jn).filter(Boolean));return{toCreate:t.filter(e=>!jn(e)),toUpdate:t.filter(e=>jn(e)),toDelete:(e||[]).map(jn).filter(e=>!!e&&!n.has(e))}}function zn(e,t){return Array.isArray(e)?e.reduce((e,n)=>{let r=Number(n?.[t]);return e+(Number.isFinite(r)?r:0)},0):0}var Bn=new Set([`id`,`_id`,`recordId`,`created_at`,`updated_at`,`created_by`,`updated_by`,`createdAt`,`updatedAt`,`createdBy`,`updatedBy`,`organization_id`,`tenant_id`,`space`,`owner`]),Vn=new Set([`position`,`sort_order`,`sequence`,`line_no`,`line_number`,`sort`]),Hn=new Set([`formula`,`summary`,`rollup`,`autonumber`,`auto_number`,`json`,`object`,`grid`,`table`,`location`,`vector`,`html`,`markdown`,`richtext`]);function Un(e){switch(e){case`number`:case`percent`:case`rating`:case`slider`:return`number`;case`currency`:return`currency`;case`date`:return`date`;case`datetime`:return`datetime`;case`time`:return`time`;case`select`:case`picklist`:case`radio`:case`boolean`:case`toggle`:return`select`;case`lookup`:case`master_detail`:return`lookup`;case`file`:case`image`:case`avatar`:return`file`;default:return`text`}}var Wn=new Set([`image`,`avatar`]);function Gn(e,t){e.multiple==null&&t?.multiple&&(e.multiple=!0),e.accept??(Array.isArray(t?.accept)&&t.accept.length>0?e.accept=t.accept:Wn.has(t?.type)&&(e.accept=[`image/*`]))}function Kn(e){if(e?.type===`boolean`||e?.type===`toggle`)return[{label:`Yes`,value:`true`},{label:`No`,value:`false`}];let t=e?.options;if(Array.isArray(t))return t.map(e=>typeof e==`object`&&e?{label:String(e.label??e.value),value:String(e.value)}:{label:String(e),value:String(e)})}function qn(e,t){let n=e?.fields;if(!n||typeof n!=`object`)return;let r;for(let[e,i]of Object.entries(n)){let n=i;if(n?.reference===t){if(n?.type===`master_detail`)return e;n?.type===`lookup`&&!r&&(r=e)}}return r}var Jn=[`name`,`title`,`subject`,`label`,`full_name`,`display_name`,`code`],Yn={select:0,currency:1,number:1,lookup:2,date:3,datetime:3,time:3,text:4};function Xn(e){return(e.type?Yn[e.type]:void 0)??5}function Zn(e,t){if(t<=0||e.length<=t)return e;let n=new Set,r=e.find(e=>Jn.includes(e.name))??e[0];r&&n.add(r.name);for(let t of e)t.required&&n.add(t.name);let i=e.map((e,t)=>({c:e,i:t})).filter(({c:e})=>!n.has(e.name)).sort((e,t)=>Xn(e.c)-Xn(t.c)||e.i-t.i);for(let{c:e}of i){if(n.size>=t)break;n.add(e.name)}return e.map(e=>n.has(e.name)?e:{...e,defaultHidden:!0})}function Qn(e,t={}){let n=e?.fields;if(!n||typeof n!=`object`)return[];let r=new Set([...t.exclude??[],...t.relationshipField?[t.relationshipField]:[]]),i=[];for(let[e,t]of Object.entries(n)){let n=t;if(Bn.has(e)||r.has(e)||Vn.has(e)||n?.system||n?.readonly||n?.hidden||Hn.has(n?.type))continue;let a={name:e,label:n?.label||e,type:Un(n?.type),required:!!n?.required},o=Kn(n);a.type===`select`&&o&&(a.options=o),a.type===`lookup`&&(a.reference=n?.reference,a.displayField=n?.displayField||n?.reference_field),a.type===`file`&&Gn(a,n),n?.readonlyWhen&&(a.readonlyWhen=n.readonlyWhen),n?.requiredWhen&&(a.requiredWhen=n.requiredWhen);let s=typeof n?.expression==`string`?n.expression:n?.expression?.source;s&&typeof s==`string`&&(a.computed=!0,a.expr=s,a.required=!1,typeof n?.scale==`number`&&(a.scale=n.scale)),i.push(a)}return Zn(i,t.maxColumns??6)}var $n=new Set;function er(e,t,n){if(e.scale===void 0)return;let r=t?` of '${t}'`:``,i=`${t??``}:${e.name}:${n?`hydrated`:`declared`}:${String(e.scale)}`;if($n.has(i))return;$n.add(i);let a=n?`takes type 'currency' from child field '${e.name}'${r}`:`declares type 'currency'${r}`;console.warn(`[object-ui] \`scale\` is not valid on a \`currency\` inline grid column — delete the key. Inline grid column '${e.name}' ${a}, so its \`scale: ${String(e.scale)}\` is not read: the currency's ISO 4217 minor unit (2 for USD, 0 for JPY, 3 for KWD) decides how the cell displays the amount and the width a computed amount is rounded to.`)}function tr(e,t){let n=e??[],r=t?.fields;return!n.length||!r||typeof r!=`object`?n:n.map(e=>{if(e.type)return e.type===`currency`&&er(e,t?.name,!1),e;let n=r[e.name];if(!n)return e;let i=Un(n?.type);i===`currency`&&er(e,t?.name,!0);let a={...e,type:i};a.label??=n?.label||e.name,a.required??=!!n?.required;let o=Kn(n);i===`select`&&o&&!a.options&&(a.options=o),i===`lookup`&&(a.reference??=n?.reference,a.displayField??=n?.displayField||n?.reference_field),i===`file`&&Gn(a,n),a.readonlyWhen==null&&n?.readonlyWhen&&(a.readonlyWhen=n.readonlyWhen),a.requiredWhen==null&&n?.requiredWhen&&(a.requiredWhen=n.requiredWhen);let s=typeof n?.expression==`string`?n.expression:n?.expression?.source;return!a.computed&&s&&typeof s==`string`&&(a.computed=!0,a.expr=s,a.required=!1,typeof n?.scale==`number`&&(a.scale=n.scale)),a})}var nr=new Set([`formula`,`summary`,`rollup`,`autonumber`,`auto_number`]);function rr(e,t={}){let n=e?.fields;if(!n||typeof n!=`object`)return[];let r=new Set([...t.exclude??[],...t.relationshipField?[t.relationshipField]:[]]),i=[];for(let[e,t]of Object.entries(n)){let n=t;Bn.has(e)||r.has(e)||Vn.has(e)||n?.system||n?.hidden||nr.has(n?.type)||i.push(e)}return i}var ir=new Set([`textarea`,`richtext`,`html`,`markdown`,`rich-text`,`json`,`location`,`address`]),ar=new Set([`file`,`image`,`avatar`]);function or(e,t,n={}){if(t===`grid`||t===`form`)return t;let r=e?.fields??{},i=rr(e,{relationshipField:n.relationshipField});return i.some(e=>ir.has(r[e]?.type))||i.filter(e=>ar.has(r[e]?.type)).length>=2||i.length>8?`form`:`grid`}var sr=[`amount`,`total`,`subtotal`,`line_total`,`line_amount`,`net_amount`];function cr(e){let t=e.filter(e=>e.type===`number`||e.type===`currency`);if(t.length===0)return;let n=t.find(e=>e.computed);if(n)return n.name;let r=t.find(e=>sr.includes(e.name));if(r)return r.name;let i=[...t].reverse().find(e=>e.type===`currency`);return i?i.name:t[t.length-1].name}function lr(e,t,n,r={}){let i=r.relationshipField||qn(t,n);if(!i)throw Error(`MasterDetailForm: could not find a lookup/master_detail field on "${e}" referencing "${n}". Set relationshipField explicitly.`);let a=r.columns?.length?tr(r.columns,t):Qn(t,{relationshipField:i}),o=r.amountField||cr(a);return{childObject:e,relationshipField:i,columns:a,formFields:rr(t,{relationshipField:i}),mode:or(t,r.inlineEdit??(t?.fields)?.[i]?.inlineEdit,{relationshipField:i}),amountField:o,sortField:Object.keys(t?.fields??{}).find(e=>Vn.has(e))}}function ur(e,t,n){return Object.entries(e??{}).every(([e,r])=>e===n||Mt(r,t[e]))}function dr(e,t,n){let r=Array.isArray(t)?t:[],i=[];e.forEach((e,t)=>{t>0&&e.action===`create`&&i.push({op:e,echo:r[t]})});let a=0,o=!1,s=n.map(({entryId:t,input:n})=>{let{childObject:r,relationshipField:s}=n,c=n.rows||[],l=n.original||[],u=new Map,d=new Map;for(let e of c){if(o)break;if(jn(e)!=null||Fn(e,s))continue;let t=i[a];if(!t||t.op.object!==r||!ur(t.op.data,e,s)){o=!0;break}a+=1;let n=jn(t.echo);n!=null&&(u.set(e,n),d.set(n,t.op.data??{}))}for(let t=1;t<e.length;t++){let n=e[t];n.action===`update`&&n.object===r&&n.id!=null&&d.set(n.id,n.data??{})}let f=new Map;for(let e of l){let t=jn(e);t!=null&&f.set(t,e)}let p=[];for(let e of c){let t=jn(e)??u.get(e);if(t==null)continue;let n=f.get(t),r=d.get(t);if(!n&&!r)continue;let i={...n??{},...r??{}};jn(i)??(i.id=t),p.push(i)}return{entryId:t,diffedAgainst:n.original,createdIds:u,original:p}});return(o||a!==i.length)&&console.warn(`[MasterDetailForm] could not pair every row created by this save with its create operation; an unpaired row keeps no id, and the next save creates it again.`),s}function fr(e,t){if(!t)return;let n=e?.fields?.[t];return n&&typeof n==`object`?n:void 0}function pr(e,t){let n=new Set(e.filter(e=>!!e.config.amountField).map(e=>Te(e.amountFieldDef,t)));return n.size===1?n.values().next().value:void 0}var mr=2;function hr(e,t,n){let r=()=>he(e,{locale:n,minimumFractionDigits:mr,maximumFractionDigits:mr});if(!t)return r();try{return he(e,{locale:n,currency:t})}catch{return`${t} ${r()}`}}function gr(e){let t=new Map;return e.map((e,n)=>{let r=e.childObject?`obj:${e.childObject}`:`pos:${n}`,i=t.get(r)??0;return t.set(r,i+1),i===0?r:`${r}~${i}`})}function _r(e){let t=JSON.stringify(Array.from(new Set(e)).sort()),[n,r]=(0,Q.useState)({});return(0,Q.useEffect)(()=>{let e=JSON.parse(t);if(e.length===0)return;let n=Y(t=>{let n=e.filter(e=>me(t,e));n.length!==0&&r(e=>{let t={...e};for(let e of n)t[e]=(t[e]??0)+1;return t})});return()=>{n()}},[t]),n}function vr(e,t,n,r){if(!e||!t.relationshipField)return!1;let i=t.relationshipField;return Ln(``,n,{},[{childObject:t.childObject,relationshipField:i,rows:e.rows,original:e.original.map(e=>({...e,[i]:n})),childSchema:r}]).length>1}function yr(e){if(!e)return{};let t={};return e.querySelectorAll(`[name]`).forEach(e=>{let n=e.getAttribute(`name`);if(n){if(e.tagName===`INPUT`){let r=e;if(r.type===`checkbox`){t[n]=r.checked;return}if(r.type===`radio`){r.checked&&(t[n]=r.value);return}if(r.type===`number`||r.type===`range`){if(r.value===``){t[n]=null;return}let e=Number(r.value);t[n]=Number.isFinite(e)?e:r.value;return}t[n]=r.value;return}t[n]=e.value}}),t}function br(e,t){let n=Object.keys(t),r=RegExp(`(${n.map(e=>`\\{\\{${e}\\}\\}`).join(`|`)})`);return e.split(r).map((e,r)=>{let i=n.find(t=>e===`{{${t}}}`);return i===void 0?e:(0,$.jsx)(`code`,{className:`font-mono`,children:t[i]},r)})}var xr=({entries:e,rowState:t,setRows:n,saving:r,formHostRef:i,taxRateField:a,formKey:o,onRowExpand:c,onAddViaForm:l,parentObjectName:u})=>{let d=Oe(),{currency:f}=we(),{t:p}=Sn(),m=s(),[h,g]=(0,Q.useState)({}),_=(0,Q.useRef)(``);(0,Q.useEffect)(()=>{let e=i.current;if(!e)return;let t=()=>{let t=yr(e),n;try{n=JSON.stringify(t)}catch{n=String(Math.random())}n!==_.current&&(_.current=n,g(t))};t();let n=()=>t();e.addEventListener(`input`,n),e.addEventListener(`change`,n);let r=[120,360,800].map(e=>setTimeout(t,e));return()=>{e.removeEventListener(`input`,n),e.removeEventListener(`change`,n),r.forEach(clearTimeout)}},[i,o,e.length]);let v=h[a],y=v===void 0?null:Number.isFinite(Number(v))?Number(v):0,b=e.reduce((e,n)=>e+zn(t[n.id]?.rows??[],n.config.amountField||`amount`),0),x=y!==null&&e.some(e=>!!e.config.amountField),C=y??0,w=C/100*b,T=b+w,E=pr(e,f),D=e=>hr(e,E,d);return(0,$.jsxs)($.Fragment,{children:[e.map(e=>{let i=e.config;return(0,$.jsxs)(`section`,{className:`space-y-2`,children:[(0,$.jsx)(`h3`,{className:`text-sm font-medium text-foreground`,children:i.title||p(`form.lineItems.title`)}),i.childObject?e.status===`failed`?(0,$.jsx)(`p`,{className:`py-4 text-sm text-muted-foreground`,role:`status`,"data-testid":`md-detail-schema-unavailable`,children:br(p(`form.masterDetail.schemaUnavailable`,{object:`{{object}}`}),{object:i.childObject})}):e.status===`underivable`?(0,$.jsx)(`p`,{className:`py-4 text-sm text-muted-foreground`,"data-testid":`md-detail-no-relationship-field`,children:br(p(`form.masterDetail.noRelationshipField`,{object:`{{object}}`,parent:`{{parent}}`,property:`{{property}}`}),{object:i.childObject,parent:u,property:`relationshipField`})}):i.columns?.length?(0,$.jsx)(S,{value:t[e.id]?.rows??[],onChange:t=>n(e.id,t),disabled:r,contextRecord:h,...i.inlineMode===`form`||(i.formFields?.length??0)>(i.columns?.length??0)?{onRowExpand:t=>c(e.id,t)}:{},displayMode:i.inlineMode===`form`?`list`:`grid`,...i.inlineMode===`form`?{onAdd:()=>l(e.id)}:{},field:{columns:Et(i.columns,{perms:m,objectName:i.childObject}),total_field:x?void 0:i.amountField||(i.totalField?`amount`:void 0),sort_field:i.sortField,min_rows:i.minRows,max_rows:i.maxRows,add_label:i.inlineMode===`form`?i.addLabel||p(`detail.add`):i.addLabel}}):(0,$.jsx)(`p`,{className:`py-4 text-sm text-muted-foreground`,children:p(`form.masterDetail.loadingColumns`)}):(0,$.jsx)(`p`,{className:`py-4 text-sm text-muted-foreground`,"data-testid":`md-detail-no-child-object`,children:br(p(`form.masterDetail.noChildObject`,{property:`{{property}}`}),{property:`childObject`})})]},e.id)}),x&&(0,$.jsx)(`div`,{className:`flex justify-end`,children:(0,$.jsxs)(`dl`,{className:`w-64 space-y-1.5 text-sm`,"data-testid":`md-totals`,children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,$.jsx)(`dt`,{className:`text-muted-foreground`,children:p(`form.masterDetail.subtotal`)}),(0,$.jsx)(`dd`,{className:`tabular-nums`,"data-testid":`md-subtotal`,children:D(b)})]}),(0,$.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,$.jsx)(`dt`,{className:`text-muted-foreground`,children:p(`form.masterDetail.tax`,{rate:C})}),(0,$.jsx)(`dd`,{className:`tabular-nums`,"data-testid":`md-tax`,children:D(w)})]}),(0,$.jsxs)(`div`,{className:`flex items-center justify-between border-t border-border pt-1.5 text-base font-semibold`,children:[(0,$.jsx)(`dt`,{children:p(`form.masterDetail.total`)}),(0,$.jsx)(`dd`,{className:`tabular-nums`,"data-testid":`md-grand-total`,children:D(T)})]})]})})]})},Sr=({schema:e,dataSource:t,className:n})=>{let r=e.details||[],i=e.mode===`edit`&&!!e.recordId,{language:a}=ke(),o=Ee(e.title,a),{t:s}=Sn(),c=r.some(e=>!e.relationshipField||!e.columns?.length||e.columns.some(e=>!e.type)),l=(0,Q.useMemo)(()=>gr(r),[e.details]),d=(0,Q.useMemo)(()=>r.map((e,t)=>({id:l[t],config:e,status:c?`pending`:`ready`})),[e.details,l,c]),[f,p]=(0,Q.useState)(null),m=f??d;(0,Q.useEffect)(()=>{if(!c){p(d);return}if(!t||typeof t.getObjectSchema!=`function`)return;let n=!1;return(async()=>{let r=await Promise.all(d.map(async n=>{let r=n.config,i=r.columns?.length?r.columns.every(e=>!!e.type):!1;if(r.relationshipField&&i)return{...n,status:`ready`};if(!r.childObject)return console.warn(`[MasterDetailForm] a detail collection has no childObject — refusing to fetch its schema. Set childObject to the child object the collection lists.`),{...n,status:`declined`};let a;try{a=await t.getObjectSchema(r.childObject)}catch(e){return console.warn(`[MasterDetailForm] could not load the schema of child object "${r.childObject}" — its columns cannot be derived, so the collection renders a refusal placeholder instead of a permanent "Loading columns…".`,e),{...n,status:`failed`}}try{let t=lr(r.childObject,a,e.objectName,{relationshipField:r.relationshipField,columns:r.columns,amountField:r.amountField}),i=r.amountField??t.amountField,o=r.sortField??t.sortField;return r.relationshipField&&r.columns?.length?{...n,config:{...r,columns:t.columns,amountField:i,sortField:o},status:`ready`,amountFieldDef:fr(a,i)}:{...n,status:`ready`,config:{...r,relationshipField:t.relationshipField,columns:t.columns,formFields:r.formFields??t.formFields,inlineMode:r.inlineMode??t.mode,amountField:i,sortField:o},amountFieldDef:fr(a,i)}}catch(e){return console.warn(`[MasterDetailForm] loaded the schema of child object "${r.childObject}" but could not derive its detail configuration; the collection cannot render its columns. Set relationshipField (and columns) explicitly on the detail entry.`,e),{...n,status:`underivable`}}}));n||p(r)})(),()=>{n=!0}},[t,e.objectName,e.details]);let[h,g]=(0,Q.useState)({}),_=(0,Q.useRef)(h);_.current=h;let v=(0,Q.useRef)({});(0,Q.useEffect)(()=>{let e=t;if(!e||typeof e.getObjectSchema!=`function`)return;let n=!1,i=Array.from(new Set(r.map(e=>e.childObject).filter(Boolean)));return(async()=>{let t=await Promise.all(i.map(async t=>{try{return[t,await e.getObjectSchema(t)]}catch{return[t,null]}}));if(n)return;let r={};for(let[e,n]of t)n&&(r[e]=n);v.current=r})(),()=>{n=!0}},[t,e.objectName,e.details]);let[y,b]=(0,Q.useState)(0),[x,S]=(0,Q.useState)(!1),C=(0,Q.useRef)(!1),D=(0,Q.useRef)(null),O=(0,Q.useRef)(!1),k=`form-outcome:${Q.useId()}`,A=(0,Q.useCallback)(()=>{D.current&&=(clearTimeout(D.current),null)},[]),j=(0,Q.useCallback)(()=>{C.current=!1,S(!1),A()},[A]),M=(0,Q.useCallback)(()=>{C.current=!0,S(!0),A()},[A]),[N,P]=(0,Q.useState)(null),F=(0,Q.useRef)(null);F.current=N?.entryId??null;let I=_r(i&&t?m.flatMap(e=>e.config.childObject&&e.config.relationshipField?[e.config.childObject]:[]):[]),ee=(0,Q.useRef)(0),te=(0,Q.useRef)({}),L=(0,Q.useRef)(new Set),ne=(0,Q.useRef)(new Set),ie=(0,Q.useRef)({}),ae=String(e.recordId),z=(0,Q.useCallback)(e=>F.current===e.id||vr(_.current[e.id],e.config,ae,v.current[e.config.childObject]),[ae]),B=(0,Q.useCallback)(async function n(r,i){if(i===`bus`){if(z(r)){L.current.add(r.id);return}L.current.delete(r.id)}let a=ee.current,o=(te.current[r.id]??0)+1;te.current[r.id]=o;let s=()=>ee.current===a&&te.current[r.id]===o,c=r.config;if(!t||!c.relationshipField){g(e=>({...e,[r.id]:{rows:[],original:[]}}));return}let l=i!==`load`,u=_.current[r.id]?.rows,d;try{d=(await t.find(c.childObject,{$filter:{[c.relationshipField]:e.recordId},$top:500}))?.data??[]}catch(e){if(!s())return;if(l){console.warn(`[MasterDetailForm] could not re-read the lines of "${c.childObject}" after a data change; ${u===void 0?`no lines have been read for it yet`:`the lines on screen are kept`}.`,e);return}d=[]}if(s()){if(l&&F.current===r.id){L.current.add(r.id);return}if(l&&_.current[r.id]?.rows!==u){n(r,`bus`);return}g(e=>l&&(e[r.id]?.rows!==u||F.current===r.id)?(L.current.add(r.id),e):{...e,[r.id]:{rows:d.map(e=>({...e})),original:d.map(e=>({...e}))}})}},[t,e.recordId,z]);(0,Q.useEffect)(()=>{if(L.current.clear(),ne.current.clear(),i&&t)for(let e of m)B(e,`load`);return()=>{ee.current+=1}},[i,t,e.recordId,f]),(0,Q.useEffect)(()=>{for(let e of m){let t=e.config.childObject;if(!t||!e.config.relationshipField)continue;let n=I[t]??0,r=ie.current[e.id];ie.current[e.id]=n,r!==void 0&&r!==n&&B(e,`bus`)}},[I,m,B]),(0,Q.useEffect)(()=>{if(x)return;let e=L.current;for(let t of m)e.has(t.id)&&F.current!==t.id&&(ne.current.has(t.id)||!z(t))&&(e.delete(t.id),B(t,`replay`));ne.current.clear()},[h,x,N,m,B,z]);let V=(0,Q.useCallback)((e,t)=>{g(n=>({...n,[e]:{rows:t,original:n[e]?.original??[]}}))},[]),H=e.taxRateField||`tax_rate`,U=N?h[N.entryId]?.rows?.[N.rowIdx]:void 0,W=N?m.find(e=>e.id===N.entryId)?.config:void 0,oe=(0,Q.useCallback)((e,t,n)=>{g(r=>{let i=r[e]??{rows:[],original:[]};return{...r,[e]:{...i,rows:i.rows.map((e,r)=>r===t?{...e,...n}:e)}}})},[]),se=(0,Q.useCallback)(e=>{g(t=>{let n=t[e]??{rows:[],original:[]},r=[...n.rows,{}];return P({entryId:e,rowIdx:r.length-1,isNew:!0}),{...t,[e]:{...n,rows:r}}})},[]),G=(0,Q.useCallback)(()=>{P(e=>(e?.isNew&&g(t=>{let n=t[e.entryId];return n?{...t,[e.entryId]:{...n,rows:n.rows.filter((t,n)=>n!==e.rowIdx)}}:t}),null))},[]),K=(0,Q.useCallback)(async t=>{j(),e.onSuccess||Z.success(i?o?s(`form.savedNamed`,{title:o}):s(`form.saved`):s(`form.created`),{id:k}),i||(g({}),b(e=>e+1)),await e.onSuccess?.(t)},[i,e.onSuccess,o,m.length,j,k,s]),q=(0,Q.useCallback)(t=>{O.current||j(),e.onError?.(t)},[e,j]),ce=(0,Q.useCallback)(async n=>{if(!t)throw Error(`MasterDetailForm: dataSource is required`);let r={...n};m.forEach(e=>{let t=e.config;t.totalField&&(r[t.totalField]=zn(_.current[e.id]?.rows??[],t.amountField||`amount`))});let a=i?m.filter(e=>e.config.relationshipField).map(e=>({entryId:e.id,input:{childObject:e.config.childObject,relationshipField:e.config.relationshipField,rows:_.current[e.id]?.rows??[],original:_.current[e.id]?.original??[],childSchema:v.current[e.config.childObject]}})):null,o=a?Ln(e.objectName,String(e.recordId),r,a.map(e=>e.input)):In(e.objectName,r,m.filter(e=>e.config.relationshipField).map(e=>({childObject:e.config.childObject,relationshipField:e.config.relationshipField,rows:_.current[e.id]?.rows??[],childSchema:v.current[e.config.childObject]}))),s=await xe(t,o);if(a){let e=dr(o,s?.results,a);for(let t of e)ne.current.add(t.entryId);g(t=>{let n=t;for(let r of e){let e=t[r.entryId];if(!e||e.original!==r.diffedAgainst)continue;let i=r.createdIds.size===0?e.rows:e.rows.map(e=>{let t=r.createdIds.get(e);return t===void 0?e:{...e,id:t}});n={...n,[r.entryId]:{rows:i,original:r.original}}}return n})}return s?.results?.[0]??{...r,id:e.recordId}},[t,m,e.objectName,e.recordId,i]),J=(0,Q.useCallback)(async e=>{if(O.current)throw Error(`This save was not sent: another save of this form was still in progress.`);O.current=!0,M();try{return await ce(e)}finally{O.current=!1}},[ce,M]),le=(0,Q.useMemo)(()=>({type:`object-form`,objectName:e.objectName,mode:e.mode??`create`,recordId:e.recordId,initialValues:e.initialValues,initialData:e.initialData,formType:e.formType,sections:e.sections,fields:e.fields,title:o||void 0,showSubmit:!1,showCancel:!1,submitHandler:J,onSuccess:K,onError:q}),[e,o,J,K,q]),Y=(0,Q.useRef)(null),ue=Ee(e.submitText,a)||s(i?`common.save`:`form.create`),de=Ee(e.cancelText,a)||s(`common.cancel`),X=vn(),fe=(0,Q.useCallback)(()=>{if(X.uploading){Z.error(X.reason);return}C.current||Y.current?.querySelector(`form`)&&(C.current=!0,S(!0),Z.dismiss(k),setTimeout(()=>{(Y.current?.querySelector(`form`))?.requestSubmit()},0),D.current=setTimeout(()=>j(),1500))},[j,k,X.uploading,X.reason]);return(0,Q.useEffect)(()=>()=>{D.current&&clearTimeout(D.current)},[]),(0,$.jsx)(yn,{gate:X,children:(0,$.jsxs)(`div`,{className:R(`space-y-6`,n,e.className),children:[(0,$.jsx)(`div`,{ref:Y,children:(0,$.jsx)(Zr,{schema:le,dataSource:t},y)}),(0,$.jsx)(xr,{entries:m,rowState:h,setRows:V,saving:x,formHostRef:Y,taxRateField:H,formKey:y,onRowExpand:(e,t)=>P({entryId:e,rowIdx:t}),onAddViaForm:se,parentObjectName:e.objectName}),N&&W&&(0,$.jsxs)(u,{className:`border-primary/40 shadow-none ring-1 ring-primary/10`,"data-testid":`md-row-form`,children:[(0,$.jsxs)(w,{className:`pb-2 flex flex-row items-center justify-between gap-2 space-y-0`,children:[(0,$.jsx)(E,{className:`text-sm font-medium`,children:s(`form.masterDetail.rowTitle`,{title:W.title||s(`form.masterDetail.lineItem`),row:N.rowIdx+1})}),(0,$.jsx)(re,{type:`button`,variant:`ghost`,size:`sm`,className:`h-7 text-xs text-muted-foreground`,onClick:G,children:s(`common.close`)})]}),(0,$.jsx)(T,{children:(0,$.jsx)(`fieldset`,{disabled:x,className:`min-w-0`,children:(0,$.jsx)(Zr,{schema:{type:`object-form`,objectName:W.childObject,mode:`edit`,initialData:U??{},...W.formFields?.length?{fields:W.formFields}:{},submitText:s(`form.masterDetail.applyRow`),submitHandler:async e=>e,onSuccess:e=>{oe(N.entryId,N.rowIdx,e),P(null)},onCancel:G},dataSource:t},`row-${N.entryId}-${N.rowIdx}`)})})]}),e.showSubmit!==!1&&(0,$.jsxs)(`div`,{className:`border-t border-border pt-4`,children:[(0,$.jsx)(bn,{gate:X}),(0,$.jsxs)(`div`,{className:`flex items-center justify-end gap-2`,children:[e.onCancel&&(0,$.jsx)(re,{type:`button`,variant:`outline`,onClick:e.onCancel,disabled:x,"data-testid":`md-form-cancel`,children:de}),(0,$.jsx)(re,{type:`button`,onClick:fe,disabled:x||c&&!f||X.uploading,"data-testid":`md-form-submit`,children:X.uploading?X.busyLabel:x?s(`detail.saving`):ue})]})]})]})})};function Cr(e){let t=e.fields||Object.keys(e.objectSchema?.fields||{}),n=[];for(let r of t){let t=typeof r==`string`?r:r?.name;if(!t){ut(r,e.objectName);continue}n.push(t)}return at(n,e.customFields,t=>{let n=e.objectSchema?.fields?.[t];if(n)return{...pt(t,e),group:n.group}})}function wr(e){return e.mode!==`create`&&!!e.recordId&&!!e.dataSource&&e.loadedRecordId!==e.recordId}a();function Tr(e,t){let n=i({fieldGroups:t,fields:Object.fromEntries(e.map(e=>[e.name,{group:e.group}]))});if(!n)return null;let r=new Set(n.flatMap(e=>e.fields)),a=e.map(e=>e.name).filter(e=>!r.has(e)),o=n.map(e=>({...e.key===void 0?{}:{name:e.key},...e.key===void 0?{}:{label:e.label??e.key},...e.description===void 0?{}:{description:e.description},...e.visibleWhen===void 0?{}:{visibleWhen:e.visibleWhen},fields:[...e.fields],...e.collapse===`none`?{}:{collapsible:!0},...e.collapse===`collapsed`?{collapsed:!0}:{}}));if(a.length>0){let e=o[o.length-1];e&&e.name===void 0?e.fields=[...e.fields??[],...a]:o.push({fields:a})}return o}function Er(e,t){return!!e||!!t}function Dr(e){return`collapsible section has no heading or description to carry its control: ${e} declares \`collapsible\` / \`collapsed\` but yields neither a \`label\` nor a \`description\`, so no divider row is drawn for it and there is nowhere to put the disclosure control. The section is rendered OPEN and the declaration is ignored. Give it a \`label\` (or a \`description\`), or drop \`collapsible\` / \`collapsed\`.`}var Or=new Set;function kr(e,t){Or.has(t)||(Or.add(t),console.warn(`[object-ui] ${Dr(e)}`))}function Ar(e,t){let n=!!e.collapsible||!!e.collapsed,r=Er(t.title,t.description);n&&!r&&kr(t.where,t.where);let i=r&&n,a=i&&(t.live??!!e.collapsed);return{collapsible:i,collapsed:a,onToggle:i?()=>t.setCollapsed(!a):void 0}}var jr=4;function Mr(e){let{key:t,title:n,description:r,visibleWhen:i,members:a,className:o,collapse:s}=e;if(!Er(n,r))return i==null?[]:[{name:`__section_gate_${t}`,type:`section-divider`,visibleWhen:i,fields:a,colSpan:jr}];let c={name:`__section_${t}`,label:n,type:`section-divider`,description:r,visibleWhen:i,fields:a,colSpan:jr};return o!==void 0&&(c.className=o),s&&(c.collapsible=s.collapsible,c.collapsed=s.collapsed,c.onToggle=s.onToggle),[c]}var Nr=Ce({"form.discardTitle":`Discard changes?`,"form.discardMessage":`You have unsaved changes. If you close this form now, your edits will be lost.`,"form.dialogDescriptionFallback":`Complete the form fields, then submit or cancel.`,"form.keepEditing":`Keep editing`,"form.discard":`Discard`,"form.create":`Create`,"form.update":`Update`,"common.cancel":`Cancel`,"form.errorLoading":`Error loading form`,"publicForm.loading":`Loading form…`},`form.discardTitle`),Pr=({schema:e,dataSource:t,className:n})=>{let{fieldLabel:r,sectionLabel:i}=De(),a=s(),{userId:o}=a,{t:l}=Nr(),u=vn(),d=ce(),[f,p]=(0,Q.useState)(null),m=(0,Q.useCallback)(t=>wt(t,{perms:a,objectName:e.objectName,mode:e.mode,objectSchema:f}),[a,e.objectName,e.mode,f]),[h,_]=(0,Q.useState)([]),[y,x]=(0,Q.useState)({}),[S,C]=(0,Q.useState)(!0),[w,T]=(0,Q.useState)(ln),E=(0,Q.useRef)({schema:0,record:0}),O=dn(w),[k,A]=(0,Q.useState)(!1),[I,L]=(0,Q.useState)(!1),{saveWithOcc:ie,conflictDialog:ae}=cn(),[z,B]=(0,Q.useState)(!1),V=(0,Q.useRef)(!1),H=e.confirmOnDiscard!==!1,U=e.open!==!1,W=e.drawerSide||`right`,oe=(0,Q.useId)(),[se,G]=(0,Q.useState)({});(0,Q.useEffect)(()=>{let n=!1,r=un(E,T,`schema`);return(async()=>{if(!t){C(!1);return}try{let i=await t.getObjectSchema(e.objectName);if(n)return;p(i),r.commit()}catch(e){if(n)return;r.fail(e),C(!1)}})(),()=>{n=!0}},[e.objectName,t]);let K=(0,Q.useRef)(void 0),q=(0,Q.useRef)(null),{refetch:J,onDirtyChange:le,saved:Y}=Be(e.objectName,e.recordId,!!e.recordId&&e.mode!==`create`),de=(0,Q.useCallback)(e=>{A(e),le(e)},[le]);(0,Q.useEffect)(()=>{let n=!1,r=un(E,T,`record`);return(f||!t)&&(async()=>{if(e.mode===`create`||!e.recordId){q.current=null,x(nt(f,vt(e),{currentUserId:o})),r.commit(),C(!1);return}if(!t){q.current=null,x(vt(e)),r.commit(),C(!1);return}K.current!==e.recordId&&(C(!0),A(!1));try{let i=await t.findOne(e.objectName,e.recordId);if(n)return;K.current=e.recordId,q.current=Pt(e,i),x(i||{}),r.commit()}catch(e){if(n)return;r.fail(e)}finally{n||C(!1)}})(),()=>{n=!0}},[f,e.mode,e.recordId,e.initialData,e.initialValues,t,e.objectName,J]);let X=(0,Q.useCallback)(t=>_t(t,{objectSchema:f,objectName:e.objectName,readOnly:e.readOnly,mode:e.mode,recordId:e.recordId,fieldLabel:r,customFields:e.customFields}),[f,e.readOnly,e.mode,e.recordId,e.objectName,e.customFields,r]);(0,Q.useEffect)(()=>{if(!f&&t)return;let n=wr({mode:e.mode,recordId:e.recordId,dataSource:t,loadedRecordId:K.current}),i=()=>{n||C(!1)};if(e.sections?.length){i();return}(f||e.customFields?.length)&&(_(Cr({fields:e.fields,objectSchema:f,objectName:e.objectName,readOnly:e.readOnly,mode:e.mode,recordId:e.recordId,fieldLabel:r,customFields:e.customFields})),i())},[f,e.fields,e.customFields,e.sections,e.readOnly,e.mode,t]);let fe=(0,Q.useMemo)(()=>{if(e.sections?.length)return null;let t=Yt(h,f);e.mode===`create`&&(t=Xt(t,f));let n=Tr(t,f?.fieldGroups);if(!n)return null;let r=e.columns&&e.columns>0?Math.min(Math.floor(e.columns),4):Wt(t.length);return n.map(e=>({...e,columns:r}))},[e.sections,e.columns,e.mode,h,f]),pe=(0,Q.useCallback)(async n=>{if(u.uploading){Z.error(u.reason);return}B(!0);try{if(!t&&!e.submitHandler&&mn(e))return e.onSuccess&&await e.onSuccess(n),e.onOpenChange?.(!1),n;let r,i=jt(n,f,{canEdit:yt(a,e.objectName)}),o=e.mode===`create`?rt(i,f):It(i,q.current,e);if(e.submitHandler)r=await e.submitHandler(o);else if(!t)throw gn();else if(e.mode===`create`)r=await t.create(e.objectName,o);else if(e.mode===`edit`&&e.recordId){let n=await ie({dataSource:t,objectName:e.objectName,recordId:e.recordId,payload:o,baseRecord:y});if(n.status===`cancelled`)return;r=n.result}return q.current=Lt(q.current,e,o),Y(),e.onSuccess&&await e.onSuccess(r),e.onOpenChange?.(!1),r}catch(t){throw e.onError&&e.onError(t),t}finally{B(!1)}},[e,t,f,ie,y,a,u.uploading,u.reason,Y]),me=(0,Q.useCallback)(()=>{L(!1),V.current&&(V.current=!1,e.onCancel?.()),e.onOpenChange?.(!1)},[e]),he=(0,Q.useCallback)(e=>{V.current=e,H&&k?L(!0):me()},[H,k,me]);(0,Q.useEffect)(()=>{if(!U||!k||!H)return;let e=e=>{e.preventDefault(),e.returnValue=``};return window.addEventListener(`beforeunload`,e),()=>window.removeEventListener(`beforeunload`,e)},[U,k,H]);let ge=(0,Q.useCallback)(()=>{V.current=!0,me()},[me]),_e=(0,Q.useMemo)(()=>{if(e.drawerWidth)return W===`left`||W===`right`?{width:e.drawerWidth,maxWidth:e.drawerWidth}:{height:e.drawerWidth,maxHeight:e.drawerWidth}},[e.drawerWidth,W]),ve=e.layout??`vertical`,ye=e.showSubmit!==!1&&e.mode!==`view`,be=e.showCancel!==!1,xe=e.submitText||(e.mode===`create`?l(`form.create`):l(`form.update`)),Se=e.cancelText||l(`common.cancel`),Ce={type:`form`,objectName:e.objectName,layout:ve,defaultValues:y,previousValues:e.mode===`edit`&&e.recordId?y:void 0,submitLabel:xe,cancelLabel:Se,showSubmit:ye,showCancel:be,onSubmit:pe,onCancel:ge,onDirtyChange:de,showActions:!1,id:oe},we=()=>{if(O)return(0,$.jsxs)(`div`,{className:`p-4 border border-red-300 bg-red-50 rounded-md`,children:[(0,$.jsx)(`h3`,{className:`text-red-800 font-semibold`,children:l(`form.errorLoading`)}),(0,$.jsx)(`p`,{className:`text-red-600 text-sm mt-1`,children:O.message})]});if(S)return(0,$.jsxs)(`div`,{className:`p-8 text-center`,children:[(0,$.jsx)(`div`,{className:`inline-block animate-spin rounded-full h-8 w-8 border-b-2 border-gray-900`}),(0,$.jsx)(`p`,{className:`mt-2 text-sm text-gray-600`,children:l(`publicForm.loading`)})]});if(e.sections?.length){let t=[];return e.sections.forEach((n,r)=>{let i=n.name||String(r),a=m(X(n)),o=Ar(n,{live:se[i],title:n.label,description:n.description,where:`DrawerForm section '${i}' of object '${e.objectName}'`,setCollapsed:e=>G(t=>({...t,[i]:e}))});t.push(...Mr({key:i,title:n.label,description:n.description,visibleWhen:n.visibleWhen,members:a.map(e=>e.name),collapse:o})),o.collapsed?t.push(...a.map(e=>({...e,hidden:!0}))):t.push(...a)}),(0,$.jsx)(ue,{schema:{...Ce,fields:t}})}if(fe?.length){let t=Number(fe[0]?.columns)||1,n=[];fe.forEach((r,a)=>{let o=m(X(r));if(!o.length)return;let s=r.name||String(a),c=r.name?i(e.objectName,r.name,r.label||r.name):r.label,l=Ar(r,{live:se[s],title:c,description:r.description,where:`DrawerForm field group '${s}' of object '${e.objectName}'`,setCollapsed:e=>G(t=>({...t,[s]:e}))});n.push(...Mr({key:s,title:c,description:r.description,visibleWhen:r.visibleWhen,members:o.map(e=>e.name),collapse:l}));let u=t>1?qt(o,t):o;n.push(...l.collapsed?u.map(e=>({...e,hidden:!0})):u)});let r=Zt[t];return(0,$.jsx)(ue,{schema:{...Ce,fields:n,columns:t,...r?{fieldContainerClass:r}:{}}})}let t=en(m(h),f,e.columns,e.mode),n=Zt[t.columns||1];return(0,$.jsx)(ue,{schema:{...Ce,fields:t.fields,columns:t.columns,...n?{fieldContainerClass:n}:{}}})},Te=!O&&!S?(0,$.jsx)(Ot,{affordance:Ct({perms:a,objectName:e.objectName,mode:e.mode,objectSchema:f}),objectName:e.objectName,objectSchema:f}):null,Ee=e.subforms,Oe=Ee?.length&&e.mode!==`view`?(0,$.jsx)(Sr,{schema:{type:`object-master-detail-form`,objectName:e.objectName,mode:e.mode===`edit`?`edit`:`create`,recordId:e.recordId,fields:e.fields,sections:e.sections,submitText:e.submitText,cancelText:Se,details:Ee,onSuccess:async t=>{await e.onSuccess?.(t),e.onOpenChange?.(!1)},onError:e.onError,onCancel:()=>e.onOpenChange?.(!1)},dataSource:t}):(0,$.jsxs)($.Fragment,{children:[Te,we()]});return d?(0,$.jsxs)(`div`,{className:`@container rounded-md border bg-card p-4`,children:[(e.title||e.description)&&(0,$.jsxs)(`div`,{className:`mb-3 space-y-0.5`,children:[e.title&&(0,$.jsx)(`div`,{className:`text-sm font-semibold`,children:e.title}),e.description&&(0,$.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:e.description})]}),Oe]}):(0,$.jsx)(c,{open:U,onOpenChange:t=>{if(t){e.onOpenChange?.(!0);return}he(!1)},children:(0,$.jsxs)(F,{side:W,className:R(`overflow-y-auto`,n,e.className),style:_e,children:[(e.title||e.description)&&(0,$.jsxs)(v,{children:[e.title&&(0,$.jsx)(b,{children:e.title}),e.description?(0,$.jsx)(g,{children:e.description}):(0,$.jsx)(g,{className:`sr-only`,children:l(`form.dialogDescriptionFallback`)})]}),(0,$.jsx)(`div`,{className:`@container py-4`,children:(0,$.jsx)(yn,{gate:u,children:Oe})}),!O&&!S&&!(Ee?.length&&e.mode!==`view`)&&(ye||be)&&(0,$.jsxs)(`div`,{className:`shrink-0 border-t px-4 py-3 bg-background`,"data-testid":`drawer-form-footer`,children:[(0,$.jsx)(bn,{gate:u}),(0,$.jsxs)(`div`,{className:`flex flex-col sm:flex-row gap-2 sm:justify-end`,children:[be&&(0,$.jsx)(re,{type:`button`,variant:`outline`,onClick:ge,disabled:z,className:`w-full sm:w-auto`,children:Se}),ye&&(0,$.jsxs)(re,{type:`submit`,form:oe,disabled:z||u.uploading,className:`w-full sm:w-auto`,children:[z&&(0,$.jsx)(Ie,{className:`mr-2 h-4 w-4 animate-spin`}),u.uploading?u.busyLabel:xe]})]})]}),(0,$.jsx)(ne,{open:I,onOpenChange:L,children:(0,$.jsxs)(te,{children:[(0,$.jsxs)(N,{children:[(0,$.jsx)(D,{children:l(`form.discardTitle`)}),(0,$.jsx)(ee,{children:l(`form.discardMessage`)})]}),(0,$.jsxs)(P,{children:[(0,$.jsx)(M,{onClick:()=>{V.current=!1},children:l(`form.keepEditing`)}),(0,$.jsx)(j,{onClick:me,children:l(`form.discard`)})]})]})}),ae]})})},Fr=Ce({"form.discardTitle":`Discard changes?`,"form.discardMessage":`You have unsaved changes. If you close this form now, your edits will be lost.`,"form.dialogDescriptionFallback":`Complete the form fields, then submit or cancel.`,"form.masterDetail.editorDescription":`Enter the record and its line items, then save.`,"form.keepEditing":`Keep editing`,"form.discard":`Discard`,"form.create":`Create`,"form.update":`Update`,"common.cancel":`Cancel`,"form.errorLoading":`Error loading form`},`form.discardTitle`),Ir={sm:`sm:max-w-sm`,default:`sm:max-w-lg`,lg:`sm:max-w-2xl`,xl:`sm:max-w-5xl`,full:`sm:max-w-[95vw] sm:w-full`},Lr=({schema:e,dataSource:t,className:n})=>{let{fieldLabel:r,sectionLabel:i}=De(),{t:a}=Fr(),o=vn(),c=ce(),u=s(),[f,m]=(0,Q.useState)(null),h=(0,Q.useCallback)(t=>wt(t,{perms:u,objectName:e.objectName,mode:e.mode,objectSchema:f}),[u,e.objectName,e.mode,f]),[g,v]=(0,Q.useState)([]),[b,S]=(0,Q.useState)({}),[C,w]=(0,Q.useState)(!0),[T,E]=(0,Q.useState)(ln),O=(0,Q.useRef)({schema:0,record:0}),k=dn(T),[A,F]=(0,Q.useState)(!1),[I,L]=(0,Q.useState)(!1),[ie,ae]=(0,Q.useState)(!1),[z,B]=(0,Q.useState)({}),{saveWithOcc:V,conflictDialog:H}=cn(),U=(0,Q.useRef)(!1),W=e.confirmOnDiscard!==!1,oe=e.open!==!1,se=e.modalCloseButton!==!1,G=(0,Q.useId)(),K=(0,Q.useMemo)(()=>{if(e.sections?.length)return null;let t=Yt(g,f);e.mode===`create`&&(t=Xt(t,f));let n=Tr(t,f?.fieldGroups);if(!n)return null;let r=e.columns&&e.columns>0?Math.min(Math.floor(e.columns),4):Wt(t.length);return n.map(e=>({...e,columns:r}))},[e.sections,e.columns,e.mode,g,f]),q=e.sections?.length?e.sections:K??void 0,J=(0,Q.useMemo)(()=>q?.length?null:en(g,f,e.columns,e.mode),[g,f,e.columns,e.mode,q]),le=Ir[(0,Q.useMemo)(()=>{if(e.modalSize)return e.modalSize;if(J?.columns&&J.columns>1)return $t(J.columns);if(q?.length){let e=Math.max(...q.map(e=>Number(e.columns)||1));if(e>1)return $t(e)}return`default`},[e.modalSize,J,q])]||Ir.default;(0,Q.useEffect)(()=>{let n=!1,r=un(O,E,`schema`);return(async()=>{if(!t){w(!1);return}try{let i=await t.getObjectSchema(e.objectName);if(n)return;m(i),r.commit()}catch(e){if(n)return;r.fail(e),w(!1)}})(),()=>{n=!0}},[e.objectName,t]);let Y=(0,Q.useRef)(void 0),de=(0,Q.useRef)(null),{refetch:X,onDirtyChange:fe,saved:pe}=Be(e.objectName,e.recordId,!!e.recordId&&e.mode!==`create`),me=(0,Q.useCallback)(e=>{L(e),fe(e)},[fe]);(0,Q.useEffect)(()=>{let n=!1,r=un(O,E,`record`);return(f||!t)&&(async()=>{if(e.mode===`create`||!e.recordId){de.current=null,S(nt(f,vt(e),{currentUserId:u.userId})),r.commit(),w(!1);return}if(!t){de.current=null,S(vt(e)),r.commit(),w(!1);return}Y.current!==e.recordId&&(w(!0),L(!1));try{let i=await t.findOne(e.objectName,e.recordId);if(n)return;Y.current=e.recordId,de.current=Pt(e,i),S(i||{}),r.commit()}catch(e){if(n)return;r.fail(e)}finally{n||w(!1)}})(),()=>{n=!0}},[f,e.mode,e.recordId,e.initialData,e.initialValues,t,e.objectName,X]);let he=(0,Q.useCallback)(t=>_t(t,{objectSchema:f,objectName:e.objectName,readOnly:e.readOnly,mode:e.mode,recordId:e.recordId,fieldLabel:r,customFields:e.customFields}),[f,e.readOnly,e.mode,e.recordId,e.objectName,e.customFields,r]);(0,Q.useEffect)(()=>{if(!f&&t)return;let n=wr({mode:e.mode,recordId:e.recordId,dataSource:t,loadedRecordId:Y.current}),i=()=>{n||w(!1)};if(e.sections?.length){i();return}(f||e.customFields?.length)&&(v(Cr({fields:e.fields,objectSchema:f,objectName:e.objectName,readOnly:e.readOnly,mode:e.mode,recordId:e.recordId,fieldLabel:r,customFields:e.customFields})),i())},[f,e.fields,e.customFields,e.sections,e.readOnly,e.mode,t]);let ge=(0,Q.useCallback)(async n=>{if(o.uploading){Z.error(o.reason);return}F(!0);try{if(!t&&!e.submitHandler&&mn(e))return e.onSuccess&&await e.onSuccess(n),e.onOpenChange?.(!1),n;let r,i=jt(n,f,{canEdit:yt(u,e.objectName)}),a=e.mode===`create`?rt(i,f):It(i,de.current,e);if(e.submitHandler)r=await e.submitHandler(a);else if(!t)throw gn();else if(e.mode===`create`)r=await t.create(e.objectName,a);else if(e.mode===`edit`&&e.recordId){let n=await V({dataSource:t,objectName:e.objectName,recordId:e.recordId,payload:a,baseRecord:b});if(n.status===`cancelled`)return;r=n.result}return de.current=Lt(de.current,e,a),pe(),e.onSuccess&&await e.onSuccess(r),e.onOpenChange?.(!1),r}catch(t){throw e.onError&&e.onError(t),t}finally{F(!1)}},[e,t,f,u,V,b,o.uploading,o.reason,pe]),_e=(0,Q.useCallback)(()=>{ae(!1),U.current&&(U.current=!1,e.onCancel?.()),e.onOpenChange?.(!1)},[e]),ve=(0,Q.useCallback)(e=>{U.current=e,W&&I?ae(!0):_e()},[W,I,_e]);(0,Q.useEffect)(()=>{if(!oe||!I||!W)return;let e=e=>{e.preventDefault(),e.returnValue=``};return window.addEventListener(`beforeunload`,e),()=>window.removeEventListener(`beforeunload`,e)},[oe,I,W]);let ye=(0,Q.useCallback)(()=>{U.current=!0,_e()},[_e]),be=e.layout??`vertical`,xe=e.showSubmit!==!1&&e.mode!==`view`,Se=e.showCancel!==!1,Ce=e.submitText||(e.mode===`create`?a(`form.create`):a(`form.update`)),we=e.cancelText||a(`common.cancel`),Te={type:`form`,objectName:e.objectName,layout:be,defaultValues:b,previousValues:e.mode===`edit`&&e.recordId?b:void 0,submitLabel:Ce,cancelLabel:we,showSubmit:xe,showCancel:Se,onSubmit:ge,onCancel:ye,onDirtyChange:me,showActions:!1,id:G},Ee=()=>{if(k)return(0,$.jsxs)(`div`,{className:`p-4 border border-red-300 bg-red-50 rounded-md`,children:[(0,$.jsx)(`h3`,{className:`text-red-800 font-semibold`,children:a(`form.errorLoading`)}),(0,$.jsx)(`p`,{className:`text-red-600 text-sm mt-1`,children:k.message})]});if(C)return(0,$.jsx)(`div`,{className:`space-y-4`,"data-testid":`modal-form-skeleton`,children:[1,2,3].map(e=>(0,$.jsxs)(`div`,{className:`space-y-2`,children:[(0,$.jsx)(y,{className:`h-4 w-24`}),(0,$.jsx)(y,{className:`h-10 w-full`})]},e))});if(e.sections?.length){let t=e.sections,n=(e,t)=>e.name||e.label||String(t),r=t=>t.name?i(e.objectName,t.name,t.label||t.name):t.label,a=e=>typeof e==`number`&&e>0?Math.min(Math.floor(e),4):void 0,o=t.map(e=>a(e.columns)).filter(e=>e!=null),s=a(e.columns)??(o.length?Math.max(...o):1),c=Zt[s],l=t.map((t,i)=>{let o=h(he(t)),c=n(t,i),l=r(t);return{key:c,title:l,description:t.description,resolveCollapse:()=>Ar(t,{live:z[c],title:l,description:t.description,where:`ModalForm section '${c}' of object '${e.objectName}'`,setCollapsed:e=>B(t=>({...t,[c]:e}))}),visibleWhen:t.visibleWhen,className:t.className,gridClassName:t.gridClassName,fields:s>1?qt(o,s,a(t.columns)):o}}).filter(e=>e.fields.length>0),u={...Te,columns:s,...c?{fieldContainerClass:c}:{}};if(e.contentLayout===`tabbed`&&l.length>1)return(0,$.jsx)(ue,{schema:{...u,fields:l.flatMap(e=>e.fields),fieldTabs:l.map((e,t)=>({key:e.key,label:e.title||`Section ${t+1}`,description:e.description,fields:e.fields.map(e=>e.name),containerClass:e.gridClassName,visibleWhen:e.visibleWhen}))}});let d=[];return l.forEach(e=>{let t=e.resolveCollapse();d.push(...Mr({key:e.key,title:e.title,description:e.description,visibleWhen:e.visibleWhen,members:e.fields.map(e=>e.name),className:e.className,collapse:t})),d.push(...t.collapsed?e.fields.map(e=>({...e,hidden:!0})):e.fields)}),(0,$.jsx)(ue,{schema:{...u,fields:d}})}if(K?.length){let t=Number(K[0]?.columns)||1,n=[];K.forEach((r,a)=>{let o=h(he(r));if(!o.length)return;let s=r.name?i(e.objectName,r.name,r.label||r.name):r.label,c=r.name||String(a),l=Ar(r,{live:z[c],title:s,description:r.description,where:`ModalForm field group '${c}' of object '${e.objectName}'`,setCollapsed:e=>B(t=>({...t,[c]:e}))});n.push(...Mr({key:c,title:s,description:r.description,visibleWhen:r.visibleWhen,members:o.map(e=>e.name),collapse:l}));let u=t>1?qt(o,t):o;n.push(...l.collapsed?u.map(e=>({...e,hidden:!0})):u)});let r=Zt[t];return(0,$.jsx)(ue,{schema:{...Te,fields:n,columns:t,...r?{fieldContainerClass:r}:{}}})}let t=J??en(g,f,e.columns,e.mode),n=Zt[t.columns||1];return(0,$.jsx)(ue,{schema:{...Te,fields:h(t.fields),columns:t.columns,...n?{fieldContainerClass:n}:{}}})},Oe=e.subforms,ke=!k&&!C?(0,$.jsx)(Ot,{affordance:Ct({perms:u,objectName:e.objectName,mode:e.mode,objectSchema:f}),objectName:e.objectName,objectSchema:f}):null;if(c)return(0,$.jsxs)(`div`,{className:`@container rounded-md border bg-card p-4`,children:[(e.title||e.description)&&(0,$.jsxs)(`div`,{className:`mb-3 space-y-0.5`,children:[e.title&&(0,$.jsx)(`div`,{className:`text-sm font-semibold`,children:e.title}),e.description&&(0,$.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:e.description})]}),ke,Ee()]});if(Oe?.length&&e.mode!==`view`)return(0,$.jsx)(l,{open:oe,onOpenChange:e.onOpenChange,children:(0,$.jsxs)(d,{showCloseButton:se,className:R(le,`flex flex-col h-[100dvh] sm:h-auto sm:max-h-[90vh] overflow-hidden p-0`,n,e.className),children:[(e.title||e.description)&&(0,$.jsxs)(x,{className:`shrink-0 px-4 pt-4 sm:px-6 sm:pt-6 pb-2 border-b`,children:[e.title&&(0,$.jsx)(p,{children:e.title}),e.description?(0,$.jsx)(_,{children:e.description}):(0,$.jsx)(_,{className:`sr-only`,children:a(`form.masterDetail.editorDescription`)})]}),(0,$.jsx)(`div`,{className:`@container flex-1 overflow-y-auto px-4 sm:px-6 py-4`,children:(0,$.jsx)(Sr,{schema:{type:`object-master-detail-form`,objectName:e.objectName,mode:e.mode===`edit`?`edit`:`create`,recordId:e.recordId,fields:e.fields,sections:e.sections,initialValues:e.initialValues,initialData:e.initialData,submitText:Ce,cancelText:we,details:Oe,onSuccess:async t=>{await e.onSuccess?.(t),e.onOpenChange?.(!1)},onError:e.onError,onCancel:()=>e.onOpenChange?.(!1)},dataSource:t})})]})});let Ae=!C&&!k&&(xe||Se);return(0,$.jsx)(l,{open:oe,onOpenChange:t=>{if(t){e.onOpenChange?.(!0);return}ve(!1)},children:(0,$.jsxs)(d,{showCloseButton:se,className:R(le,`flex flex-col h-[100dvh] sm:h-auto sm:max-h-[90vh] overflow-hidden p-0`,n,e.className),children:[(e.title||e.description)&&(0,$.jsxs)(x,{className:`shrink-0 px-4 pt-4 sm:px-6 sm:pt-6 pb-2 border-b`,children:[e.title&&(0,$.jsx)(p,{children:e.title}),e.description?(0,$.jsx)(_,{children:e.description}):(0,$.jsx)(_,{className:`sr-only`,children:a(`form.dialogDescriptionFallback`)})]}),(0,$.jsx)(`div`,{className:`@container flex-1 overflow-y-auto px-4 sm:px-6 py-4`,children:(0,$.jsxs)(yn,{gate:o,children:[ke,Ee()]})}),Ae&&(0,$.jsxs)(`div`,{className:`shrink-0 border-t px-4 sm:px-6 py-3 bg-background`,"data-testid":`modal-form-footer`,children:[(0,$.jsx)(bn,{gate:o}),(0,$.jsxs)(`div`,{className:`flex flex-col sm:flex-row gap-2 sm:justify-end`,children:[Se&&(0,$.jsx)(re,{type:`button`,variant:`outline`,onClick:ye,disabled:A,className:`w-full sm:w-auto`,children:we}),xe&&(0,$.jsxs)(re,{type:`submit`,form:G,disabled:A||o.uploading,className:`w-full sm:w-auto`,children:[A&&(0,$.jsx)(Ie,{className:`mr-2 h-4 w-4 animate-spin`}),o.uploading?o.busyLabel:Ce]})]})]}),(0,$.jsx)(ne,{open:ie,onOpenChange:ae,children:(0,$.jsxs)(te,{children:[(0,$.jsxs)(N,{children:[(0,$.jsx)(D,{children:a(`form.discardTitle`)}),(0,$.jsx)(ee,{children:a(`form.discardMessage`)})]}),(0,$.jsxs)(P,{children:[(0,$.jsx)(M,{onClick:()=>{U.current=!1},children:a(`form.keepEditing`)}),(0,$.jsx)(j,{onClick:_e,children:a(`form.discard`)})]})]})}),H]})})},Rr=[`name`,`label`,`description`,`collapsible`,`collapsed`,`visibleWhen`],zr=[`columns`,`pane`],Br=new Set;function Vr(e,t){Br.has(e)||(Br.add(e),t())}function Hr(e){return Array.isArray(e)&&e.some(e=>typeof e==`object`&&!!e&&typeof e.group==`string`)}function Ur(e){let t=e?.fields;return!t||typeof t!=`object`?null:Tr(Object.entries(t).map(([e,t])=>({name:e,group:t?.group})),e?.fieldGroups)}function Wr(e,t){if(!Hr(e))return e;let n=e,{objectName:r,formType:i,objectDef:a,resolvable:o=!0}=t;if(i===`wizard`){for(let e of n){let t=e?.group;typeof t==`string`&&Vr(`wizard:${r}.${t}`,()=>console.warn(`[object-ui] form section { group: '${t}' } is not supported on a wizard step and renders nothing. \`@objectstack/spec\` refuses \`group\` on a \`formType: 'wizard'\` section at parse: a field group carries \`visibleWhen\` and \`collapse\`, and a wizard step has no slot for either. Enumerate \`fields\` on the step instead.`))}return n.map(e=>typeof e?.group==`string`?Gr(e,[]):e)}let s=a?Ur(a):null,c=new Map;for(let e of s??[])typeof e.name==`string`&&c.set(e.name,e);return n.map(e=>{let t=e?.group;if(typeof t!=`string`)return e;let n=Kr(e);qr(e,t,r);let i=c.get(t);return i?{...i,...n}:((a||!o)&&Vr(`unknown:${r}.${t}`,()=>console.error(`[object-ui] form section group "${t}" is not declared in fieldGroups on object "${r}" — the section renders nothing. Declare the group on the object, or enumerate \`fields\` on the section. (\`@objectstack/lint\` reports this as \`form-section-group-unknown\`.)`)),Gr(e,[]))})}function Gr(e,t){return{...Kr(e),fields:t}}function Kr(e){let t={};for(let n of zr){let r=e[n];r!==void 0&&(t[n]=r)}return t}function qr(e,t,n){let r=Rr.filter(t=>e[t]!==void 0);r.length!==0&&Vr(`owned:${n}.${t}:${r.join(`,`)}`,()=>console.warn(`[object-ui] form section { group: '${t}' } also declares ${r.map(e=>`\`${e}\``).join(`, `)} — the group owns ${r.length>1?`those keys`:`that key`} and the authored value is ignored. \`@objectstack/spec\` refuses this combination at parse (there are no override semantics); set it on the object's \`fieldGroups\` entry for "${t}" instead.`))}function Jr(e){let t=e.buttons,n=e.defaults;if(!t&&!n)return e;let r=e,i={...r};return t?.submit?.show!==void 0&&r.showSubmit===void 0&&(i.showSubmit=t.submit.show),t?.submit?.label!=null&&r.submitText===void 0&&(i.submitText=t.submit.label),t?.cancel?.show!==void 0&&r.showCancel===void 0&&(i.showCancel=t.cancel.show),t?.cancel?.label!=null&&r.cancelText===void 0&&(i.cancelText=t.cancel.label),t?.reset?.show!==void 0&&r.showReset===void 0&&(i.showReset=t.reset.show),n&&r.initialValues===void 0&&(i.initialValues=n),i}var Yr=[`title`,`description`,`submitText`,`cancelText`,`nextText`,`prevText`,`successMessage`];function Xr(e,t){let n=null;for(let r of Yr){let i=e[r];typeof i==`object`&&i&&(n??={...e},n[r]=Ee(i,t)||void 0)}return n??e}var Zr=({schema:e,dataSource:t})=>{let n=s(),r=Hr(e?.sections),i=typeof t?.getObjectSchema==`function`,[a,o]=(0,Q.useState)(null);(0,Q.useEffect)(()=>{if(!r||!i)return;let n=!0;return Promise.resolve(t.getObjectSchema(e.objectName)).then(e=>{n&&o(e??null)}).catch(()=>{n&&o(null)}),()=>{n=!1}},[r,i,t,e.objectName]);let{language:c}=ke(),l=(0,Q.useMemo)(()=>{let t=Xr(Jr(e),c),r=t.groups,o=!t.sections?.length&&Array.isArray(r)&&r.length?{...t,sections:r.map(e=>({label:e.title??e.label,description:e.description,collapsible:e.collapsible,collapsed:e.defaultCollapsed??e.collapsed,fields:e.fields??[]}))}:t,s=e=>{let t=Wr(e.sections,{objectName:e.objectName,formType:e.formType,objectDef:a,resolvable:i});return t===e.sections?e:{...e,sections:t}};if(!n?.isLoaded)return s(o);let l=e=>xt(e,{perms:n,objectName:o.objectName,mode:o.mode});return s({...o,fields:l(o.fields),sections:o.sections?.map(e=>({...e,fields:l(e.fields)}))})},[e,n,a,i,c]),{sectionLabel:u}=De(),d=e=>e?.name?u(l.objectName,e.name,e.label||e.name):e?.label,f=!!l.subforms?.length&&l.mode!==`view`&&l.formType!==`drawer`&&l.formType!==`modal`,p=!f&&l.formType===`wizard`?l.formType:null,m=(l.sections??[]).filter(e=>e?.visibleWhen!=null).map(e=>e?.name||e?.label||`(unnamed)`).join(`, `);return(0,Q.useEffect)(()=>{p&&m&&console.warn(Xe(p,m))},[p,m]),f?(0,$.jsx)(Sr,{schema:{type:`object-master-detail-form`,objectName:l.objectName,mode:l.mode===`edit`?`edit`:`create`,recordId:l.recordId,initialValues:l.initialValues,initialData:l.initialData,formType:l.formType===`tabbed`?`tabbed`:`simple`,sections:l.sections,fields:l.fields,title:l.title,submitText:l.submitText,cancelText:l.cancelText,showSubmit:l.showSubmit,details:l.subforms,onSuccess:l.onSuccess,onError:l.onError,onCancel:l.onCancel,className:l.className},dataSource:t}):l.formType===`tabbed`&&l.sections?.length?(0,$.jsx)(Cn,{schema:{...l,formType:`tabbed`,sections:l.sections.map(e=>({name:e.name,label:d(e),description:e.description,columns:e.columns,fields:e.fields??[],visibleWhen:e.visibleWhen})),defaultTab:l.defaultTab,tabPosition:l.tabPosition},dataSource:t,className:l.className}):l.formType===`wizard`&&l.sections?.length?(0,$.jsx)(kn,{schema:{...l,formType:`wizard`,sections:l.sections.map(e=>({name:e.name,label:d(e),description:e.description,columns:e.columns,fields:e.fields??[]})),allowSkip:l.allowSkip,showStepIndicator:l.showStepIndicator,nextText:l.nextText,prevText:l.prevText,onStepChange:l.onStepChange},dataSource:t,className:l.className}):l.formType===`split`&&l.sections?.length?(0,$.jsx)(An,{schema:{...l,formType:`split`,sections:l.sections.map(e=>({name:e.name,label:d(e),description:e.description,columns:e.columns,fields:e.fields??[],pane:e.pane,visibleWhen:e.visibleWhen})),splitDirection:l.splitDirection,splitSize:l.splitSize,splitResizable:l.splitResizable},dataSource:t,className:l.className}):l.formType===`drawer`?(0,$.jsx)(Pr,{schema:{...l,formType:`drawer`,sections:l.sections?.map(e=>({name:e.name,label:d(e),description:e.description,columns:e.columns,fields:e.fields??[],collapsible:e.collapsible,collapsed:e.collapsed,visibleWhen:e.visibleWhen})),open:l.open,onOpenChange:l.onOpenChange,drawerSide:l.drawerSide,drawerWidth:l.drawerWidth},dataSource:t,className:l.className}):l.formType===`modal`?(0,$.jsx)(Lr,{schema:{...l,formType:`modal`,sections:l.sections?.map(e=>({name:e.name,label:d(e),description:e.description,columns:e.columns,fields:e.fields??[],collapsible:e.collapsible,collapsed:e.collapsed,visibleWhen:e.visibleWhen})),open:l.open,onOpenChange:l.onOpenChange,modalSize:l.modalSize,modalCloseButton:l.modalCloseButton},dataSource:t,className:l.className}):(0,$.jsx)(Qr,{schema:l,dataSource:t})},Qr=({schema:e,dataSource:t})=>{let{fieldLabel:n,sectionLabel:r}=De(),{t:i}=Sn(),a=I(),o=vn(),c=s(),[l,u]=(0,Q.useState)(null),d=i(`form.deniedDescription`),f=(0,Q.useCallback)(t=>wt(t,{perms:c,objectName:e.objectName,mode:e.mode,objectSchema:l,deniedDescription:d}),[c,e.objectName,e.mode,l,d]),p=Ct({perms:c,objectName:e.objectName,mode:e.mode,objectSchema:l}),m=(0,$.jsx)(Ot,{affordance:p,objectName:e.objectName,objectSchema:l}),[g,_]=(0,Q.useState)([]),[v,y]=(0,Q.useState)(null),[b,x]=(0,Q.useState)(!0),[S,C]=(0,Q.useState)(ln),w=Q.useRef({schema:0,record:0}),T=dn(S),[E,D]=(0,Q.useState)(null),[k,j]=(0,Q.useState)(null);Ye(k);let{saveWithOcc:M,conflictDialog:N}=cn(),P=Q.useRef(null),F=e.customFields&&e.customFields.length>0;(0,Q.useEffect)(()=>{F&&(y(vt(e)),e.objectName&&t||x(!1))},[F,e.initialData,e.initialValues,e.objectName,t]),(0,Q.useEffect)(()=>{let n=!1,r=un(w,C,`schema`),i={name:e.objectName,fields:{}};return e.objectName&&t?(async()=>{try{if(!t)throw Error(`DataSource is required when using ObjectQL schema fetching (inline fields not provided)`);let i=await t.getObjectSchema(e.objectName);if(n)return;if(!i)throw Error(`No schema found for object "${e.objectName}"`);u(i),r.commit()}catch(e){if(n)return;if(F){u(i),r.commit(),x(!1);return}r.fail(e),x(!1)}})():F?(u(i),r.commit()):x(!1),()=>{n=!0}},[e.objectName,t,F]);let ee=!!e.recordId&&e.mode!==`create`&&!F,{refetch:te,onDirtyChange:L,saved:ne}=Be(e.objectName,e.recordId,ee),R=Q.useRef(0);(0,Q.useEffect)(()=>{let n=te!==R.current;R.current=te;let r=!1,i=un(w,C,`record`);return l&&!F&&(async()=>{if(!e.recordId||e.mode===`create`){P.current=null,y(vt(e)),i.commit(),x(!1);return}if(!F){if(!t){i.fail(Error(`DataSource is required for fetching record data (inline data not provided)`)),x(!1);return}n||x(!0);try{let n=await t.findOne(e.objectName,e.recordId);if(r)return;P.current=Pt(e,n),y(n),i.commit()}catch(e){if(r)return;console.error(`Failed to fetch record:`,e),i.fail(e)}finally{r||x(!1)}}})(),()=>{r=!0}},[e.objectName,e.recordId,e.mode,e.initialValues,e.initialData,t,l,F,te]);let re=(0,Q.useCallback)(e=>e,[]);(0,Q.useEffect)(()=>{if(!l)return;let r=e.fields||Object.keys(l.fields||{}),i=Array.isArray(r)?r:Object.keys(r),a=[];i.forEach(t=>{let n=typeof t==`string`?t:t.name;if(!n){ut(t,e.objectName);return}a.push({name:n,entry:t})}),_(at(a.map(e=>e.name),e.customFields,(t,r)=>{let i=a[r].entry,o=l.fields?.[t];if(o){let r={name:t,label:n(e.objectName,t,o.label||i),type:h(o.type,{multiple:o.multiple}),required:$e(o,Qe(e)),disabled:e.readOnly||e.mode===`view`||o.readonly,placeholder:o.placeholder,description:o.help||o.description,validation:O(o),visibleWhen:o.visibleWhen,readonlyWhen:o.readonlyWhen,requiredWhen:o.requiredWhen,group:o.group,field:o,widget:o.widget};if((o.type===`select`||o.type===`lookup`||o.type===`master_detail`)&&(r.options=o.options||[],r.multiple=o.multiple),(o.type===`number`||o.type===`currency`||o.type===`percent`)&&(r.inputType=`number`,r.min=o.min,r.max=o.max,r.step=typeof o.scale==`number`?10**-o.scale:`any`),o.type===`date`&&(r.inputType=`date`),o.type===`datetime`&&(r.inputType=`datetime-local`),(o.type===`text`||o.type===`textarea`||o.type===`markdown`||o.type===`html`)&&(r.maxLength=o.maxLength,r.minLength=o.minLength),(o.type===`file`||o.type===`image`)&&(r.inputType=`file`,r.multiple=o.multiple,r.accept=o.accept?o.accept.join(`,`):void 0,o.max_size)){let e=`Max size: ${A(o.max_size)}`;r.description=r.description?`${r.description} (${e})`:e}return o.type===`email`&&(r.inputType=`email`),o.type===`phone`&&(r.inputType=`tel`),o.type===`url`&&(r.inputType=`url`),o.type===`password`&&(r.inputType=`password`),o.type===`time`&&(r.inputType=`time`),(o.type===`formula`||o.type===`summary`||o.type===`auto_number`)&&(r.disabled=!0),o.visible_on&&(r.visibleOn=o.visible_on),r}},re)),!F&&e.recordId&&e.mode!==`create`&&t||x(!1)},[l,e.fields,e.customFields,e.readOnly,e.mode,e.objectName,F,e.recordId,t]);let ie=(0,Q.useCallback)(async(n,r)=>{if(o.uploading){Z.error(o.reason);return}if(n&&(n.nativeEvent||n._reactName===`onSubmit`)&&(console.warn(`ObjectForm: Received Event instead of data in handleSubmit! This suggests a Form renderer issue.`),r===void 0&&(n={})),!t&&!e.submitHandler&&F)return e.onSuccess&&await e.onSuccess(n),n;let{payload:a,writePayload:s}=Rt(n,e,{objectSchema:l,canEdit:yt(c,e.objectName),snapshot:P.current});try{let n;if(e.submitHandler)n=await e.submitHandler(s);else if(!t)throw gn();else if(e.mode===`create`)n=await t.create(e.objectName,a);else if(e.mode===`edit`&&e.recordId){let r=await M({dataSource:t,objectName:e.objectName,recordId:e.recordId,payload:s,baseRecord:v});if(r.status===`cancelled`)return;n=r.result}else throw Error(`Invalid form mode or missing record ID`);if(P.current=Lt(P.current,e,s),ne(),e.onSuccess)await e.onSuccess(n);else if(!e.submitHandler&&e.submitBehavior){let t=e.submitBehavior;switch(t.kind){case`redirect`:{let r=Je(t.url,qe(a,n));if(!r.ok){Z.error(r.refusal),D({message:e.successMessage||(e.mode===`create`?i(`form.created`):i(`form.saved`)),refusal:r.refusal});break}j({url:r.url,delayMs:t.delayMs??0});break}case`continue`:break;default:{let n=t.kind===`thank-you`&&t.message?t.message:e.successMessage||(e.mode===`create`?i(`form.created`):i(`form.saved`));Z.success(n),D({title:t.kind===`thank-you`?t.title:void 0,message:n});break}}}else if(!e.submitHandler){let t=We(e.navigateOnSuccess,n);if(t)return j({url:t,delayMs:0}),n;e.navigateOnSuccess?(console.warn("[ObjectForm] `navigateOnSuccess` was declared but produced no destination:",e.navigateOnSuccess),Z.success(e.successMessage||(e.mode===`create`?i(`form.created`):i(`form.saved`)),{description:i(`form.navigateRefused`)})):Z.success(e.successMessage||(e.mode===`create`?i(`form.created`):i(`form.saved`)))}return n}catch(t){throw console.error(`Failed to submit form:`,t),e.onError&&e.onError(t),t}},[e,t,F,c,l,M,v,o.uploading,o.reason,ne,i]),ae=(0,Q.useCallback)(()=>{e.onCancel&&e.onCancel()},[e]),z=Qe(e),B={...Q.useMemo(()=>z?et(l,{currentUserId:c.userId}):{},[l,z,c.userId]),...v},V=e.mode===`edit`&&e.recordId&&v&&typeof v==`object`?v:void 0,H=Q.useMemo(()=>{let t=Yt(g,l);return e.mode===`create`&&(t=Xt(t,l)),t},[g,l,e.mode]),U=Q.useMemo(()=>e.sections?.length?null:Tr(H,l?.fieldGroups),[e.sections,H,l]),W=e.sections?.length?e.sections:U,[oe,se]=(0,Q.useState)({});if(T)return(0,$.jsxs)(`div`,{className:`p-3 sm:p-4 border border-red-300 bg-red-50 rounded-md`,children:[(0,$.jsx)(`h3`,{className:`text-red-800 font-semibold`,children:i(`form.errorLoading`)}),(0,$.jsx)(`p`,{className:`text-red-600 text-sm mt-1`,children:T.message})]});if(b)return(0,$.jsxs)(`div`,{className:`p-4 sm:p-8 text-center`,children:[(0,$.jsx)(`div`,{className:`inline-block animate-spin rounded-full h-8 w-8 border-b-2 border-gray-900`}),(0,$.jsx)(`p`,{className:`mt-2 text-sm text-gray-600`,children:i(`publicForm.loading`)})]});if(E){let e=(0,$.jsxs)(`div`,{className:`rounded-md border bg-card p-6 sm:p-8 text-center`,children:[(0,$.jsx)(`h3`,{className:`text-lg font-semibold`,children:E.title??i(`publicForm.thankYouTitle`)}),E.message&&(0,$.jsx)(`p`,{className:`mt-2 text-sm text-muted-foreground`,children:E.message})]});return E.refusal?(0,$.jsxs)(`div`,{className:`space-y-4`,children:[e,(0,$.jsx)(`div`,{role:`alert`,className:`rounded-md border border-destructive/40 bg-destructive/10 p-4 text-sm text-destructive`,children:E.refusal})]}):e}let G=e.layout??`vertical`;if(W?.length&&(!e.formType||e.formType===`simple`)){let t=U?H:g,a=e=>typeof e==`number`&&e>0?Math.min(Math.floor(e),4):void 0,s=W.map(e=>a(e.columns)).filter(e=>e!=null),c=W.reduce((e,t)=>e+(Array.isArray(t.fields)?t.fields.length:0),0),u=a(e.columns)??(s.length?Math.max(...s):Wt(c)),d=[],p={objectSchema:l,objectName:e.objectName,readOnly:e.readOnly,mode:e.mode,recordId:e.recordId,fieldLabel:n,customFields:e.customFields,pool:t};W.forEach((n,i)=>{let o=(n.fields??[]).map(mt);if(e.fields!=null&&e.sections?.length){let r=new Set(t.map(e=>e.name));o.forEach(t=>{typeof t!=`string`||r.has(t)||(l?.fields?.[t]!=null||(e.customFields??[]).some(e=>e?.name===t))&&ft(t,e.objectName,n.name||n.label)})}let s=f(_t(n,p));if(s.length===0)return;let c=n.name||n.label||String(i),m=n.name?r(e.objectName,n.name,n.label||n.name):n.label,h=Ar(n,{live:oe[c],title:m,description:n.description,where:`ObjectForm section '${c}' of object '${e.objectName}'`,setCollapsed:e=>se(t=>({...t,[c]:e}))});d.push(...Mr({key:c,title:m,description:n.description,visibleWhen:n.visibleWhen,members:s.map(e=>e.name),collapse:h}));let g=a(n.columns),_=u>1?qt(s,u,g):s;h.collapsed?d.push(..._.map(e=>({...e,hidden:!0}))):d.push(..._)});let h=d,_=Qt(u);return(0,$.jsx)(yn,{gate:o,children:(0,$.jsxs)(`div`,{className:`w-full @container`,children:[m,(0,$.jsx)(ue,{schema:{type:`form`,objectName:e.objectName,fields:h,layout:G,columns:u,..._?{fieldContainerClass:_}:{},defaultValues:B,previousValues:V,showSubmit:e.showSubmit!==!1&&e.mode!==`view`,showCancel:e.showCancel!==!1,submitLabel:o.uploading?o.busyLabel:e.submitText||(e.mode===`create`?i(`form.create`):i(`form.update`)),cancelLabel:e.cancelText,onSubmit:ie,onCancel:ae,onDirtyChange:L}}),(0,$.jsx)(bn,{gate:o}),N]})})}let K=e.sections?.length,q=f(g),ce=K?{fields:q,columns:e.columns}:en(q,l,e.columns,e.mode),J=e.mobile,le=J?.fullscreenLongText?ce.fields.map(e=>{let t=e.type;return t!==`textarea`&&t!==`field:textarea`&&t!==`field:markdown`&&t!==`field:html`&&t!==`field:richtext`?e:e.field?{...e,field:{...e.field,mobile_fullscreen:!0}}:{...e,mobile_fullscreen:!0}}):ce.fields,Y=J?.stepper,de=J?.stepperMinFields??8,X=Math.max(1,J?.stepperFieldsPerStep??1);if(!e.formType&&!K&&le.length>=2&&(Y===!0||Y===`auto`&&a&&le.length>=de)){let n=le,r=[];for(let e=0;e<n.length;e+=X){let t=n.slice(e,e+X);r.push({name:`step-${Math.floor(e/X)+1}`,label:t[0]?.label||t[0]?.name||`Step ${Math.floor(e/X)+1}`,fields:t})}return(0,$.jsx)(kn,{schema:{...e,formType:`wizard`,sections:r,showStepIndicator:!0},dataSource:t,className:e.className})}let fe={type:`form`,objectName:e.objectName,fields:le,layout:G,columns:ce.columns,submitLabel:o.uploading?o.busyLabel:e.submitText||(e.mode===`create`?i(`form.create`):i(`form.update`)),cancelLabel:e.cancelText,showSubmit:e.showSubmit!==!1&&e.mode!==`view`,showCancel:e.showCancel!==!1,resetOnSubmit:e.showReset||e.submitBehavior?.kind===`continue`||!e.submitBehavior&&e.resetOnSuccess&&e.mode===`create`,defaultValues:B,previousValues:V,onSubmit:ie,onCancel:ae,onDirtyChange:L,className:e.className,mobileStickyActions:!!J?.stickyActions};return(0,$.jsx)(yn,{gate:o,children:(0,$.jsxs)(`div`,{className:J?.stickyActions?`w-full pb-20 md:pb-0`:`w-full`,"data-mobile-form":J?`true`:void 0,children:[m,(0,$.jsx)(ue,{schema:fe}),(0,$.jsx)(bn,{gate:o}),N]})})},$r=`https://a.invalid/`,ei=`https://b.invalid/`;function ti(e){try{return new URL(e,$r).origin===`https://a.invalid`&&new URL(e,ei).origin===`https://b.invalid`}catch{return!1}}function ni(e){let{navigate:t}=U(),n=(0,Q.useRef)(t);(0,Q.useEffect)(()=>{n.current=t},[t]),(0,Q.useEffect)(()=>{if(!e)return;let t=setTimeout(()=>{let t=ti(e.url)?n.current:void 0;if(t){t(e.url);return}window.location.href=e.url},e.delayMs);return()=>clearTimeout(t)},[e])}var ri=1e3;function ii(e){return e?Math.max(0,Math.ceil(e.delayMs/1e3)):null}function ai(e){let[t,n]=(0,Q.useState)(e),[r,i]=(0,Q.useState)(()=>ii(e));return e!==t&&(n(e),i(ii(e))),(0,Q.useEffect)(()=>{if(!e)return;let t=setInterval(()=>{i(e=>e===null||e<=1?(clearInterval(t),0):e-1)},ri);return()=>clearInterval(t)},[e]),r}var oi=5e3,si={text:200,email:254,url:2048,phone:32,textarea:oi,...Object.fromEntries(L.map(e=>[e,oi]))},ci=`_company_website_2`,li=1500;function ui(e,t=[]){try{let n=new URL(e,typeof window<`u`?window.location.href:`http://localhost`);return typeof window<`u`&&n.origin===window.location.origin?!0:n.protocol!==`https:`&&n.protocol!==`http:`?!1:t.some(e=>{if(e===n.host)return!0;if(e.startsWith(`*.`)){let t=e.slice(1);return n.host.endsWith(t)&&n.host.length>t.length}return!1})}catch{return!1}}function di(e){return e&&e.map(e=>{let t=si[String(e.type||``).toLowerCase()];return!t||e.maxLength?e:{...e,maxLength:t}})}var fi=({config:e,dataSource:t,prefillParams:n,className:r})=>{let[i,a]=(0,Q.useState)(!1),[o,s]=(0,Q.useState)(!1),[c,l]=(0,Q.useState)(null),[u,d]=(0,Q.useState)(!(e.consent?.required??!!e.consent)),[f,p]=(0,Q.useState)(null),[m,h]=(0,Q.useState)(null),[g,_]=(0,Q.useState)(!1),v=(0,Q.useRef)(null),y=(0,Q.useRef)(0);(0,Q.useEffect)(()=>{i||(y.current=Date.now())},[i]),ni(m);let b=ai(m),x=e.honeypot===!1?null:e.honeypot||ci,S=e.minFillTime??li,C=(0,Q.useMemo)(()=>di(e.customFields),[e.customFields]),w=(0,Q.useMemo)(()=>{if(!t||C&&C.length>0||!e.fields||e.fields.length===0)return;let n=async(e,t)=>t;return{...t,create:n,update:(e,t,n)=>Promise.resolve(n),delete:()=>Promise.reject(Error(`Not permitted on public form`))}},[t,C,e.fields]),T=(0,Q.useMemo)(()=>{let t={};if(n)for(let[e,r]of Object.entries(n))t[e]=r;if(typeof window<`u`&&e.allowedPrefillFields?.length){let n=new Set(e.allowedPrefillFields);new URLSearchParams(window.location.search).forEach((e,r)=>{n.has(r)&&!(r in t)&&(t[r]=e)})}return Object.keys(t).length>0?t:void 0},[n,e.allowedPrefillFields]),E=(0,Q.useCallback)(async n=>{if(e.consent?.required&&!u){p(e.texts?.consentRequired??`Please accept the privacy policy to continue.`);return}if(p(null),x&&v.current?.value){a(!0);return}if(S>0&&Date.now()-y.current<S){l(e.texts?.rateLimited??`Please take a moment to review your answers before submitting.`);return}let r={...n};x&&delete r[x],e.captchaToken&&(r._captcha=e.captchaToken),s(!0),l(null);try{t&&await t.create(e.objectName,r),a(!0);let n=e.thankYouPage?.redirectUrl;if(n){if(ui(n,e.allowedRedirectHosts)){let t=e.thankYouPage?.redirectDelay??3e3;h({url:n,delayMs:t})}else console.warn(`[EmbeddableForm] Blocked unsafe redirect target:`,n),_(!0)}}catch(e){l(e instanceof Error?e.message:`Failed to submit form. Please try again.`)}finally{s(!1)}},[t,e,u,x,S]),D=(0,Q.useCallback)(()=>{a(!1),l(null),h(null),_(!1)},[]),O=(0,Q.useMemo)(()=>{let t={};return e.branding?.backgroundColor&&(t.backgroundColor=e.branding.backgroundColor),t},[e.branding]);if(i){let t=e.thankYouPage,n=e.texts??{},i=m&&b!==null?(n.redirecting??`Redirecting in {{seconds}} seconds…`).replace(`{{seconds}}`,String(b)):null;return(0,$.jsx)(`div`,{className:`min-h-screen flex items-center justify-center p-4 bg-gradient-to-b from-muted/40 via-background to-background ${r||``}`,style:O,children:(0,$.jsxs)(`div`,{className:`max-w-md w-full bg-card border rounded-xl shadow-sm p-8 text-center space-y-4`,children:[(0,$.jsx)(`div`,{className:`mx-auto inline-flex h-14 w-14 items-center justify-center rounded-full bg-emerald-50 text-emerald-600 dark:bg-emerald-500/10 dark:text-emerald-400`,children:(0,$.jsx)(Fe,{className:`h-8 w-8`,"aria-hidden":`true`})}),(0,$.jsx)(`h2`,{className:`text-xl font-semibold text-foreground`,children:t?.title||n.thankYouTitle||`Thank You!`}),(0,$.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:t?.message||n.thankYouMessage||`Your submission has been received successfully.`}),e.allowMultiple&&(0,$.jsx)(re,{variant:`outline`,size:`sm`,onClick:D,className:`mt-2`,children:n.submitAnother??`Submit Another Response`}),i&&(0,$.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:i}),g&&n.redirectBlocked&&(0,$.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:n.redirectBlocked})]})})}let k=e.texts??{},A=!!e.consent?.required,j=`${e.formId}-consent`;return(0,$.jsx)(`div`,{className:`min-h-screen flex items-center justify-center p-4 sm:p-6 bg-gradient-to-b from-muted/40 via-background to-background ${r||``}`,style:O,children:(0,$.jsxs)(`div`,{className:`max-w-2xl w-full bg-card border rounded-xl shadow-sm overflow-hidden`,children:[e.branding?.coverImage&&(0,$.jsx)(`div`,{className:`h-28 sm:h-32 w-full bg-cover bg-center`,style:{backgroundImage:`url(${JSON.stringify(e.branding.coverImage)})`},role:`presentation`}),(0,$.jsxs)(`div`,{className:`px-6 sm:px-8 pt-7 pb-5 border-b bg-muted/20`,style:e.branding?.primaryColor?{borderBottomColor:e.branding.primaryColor}:void 0,children:[e.branding?.logo&&(0,$.jsx)(`img`,{src:e.branding.logo,alt:``,className:`h-8 mb-4`}),e.title&&(0,$.jsx)(`h1`,{className:`text-2xl font-semibold tracking-tight text-foreground`,children:e.title}),e.description&&(0,$.jsx)(`p`,{className:`text-sm text-muted-foreground mt-2 leading-relaxed`,children:e.description}),(0,$.jsx)(`p`,{className:`text-[11px] text-muted-foreground/70 mt-3`,"aria-hidden":`true`,children:k.requiredHint??`* Required field`})]}),(0,$.jsxs)(`div`,{className:`relative px-6 sm:px-8 py-6`,children:[c&&(0,$.jsx)(`div`,{role:`alert`,"aria-live":`assertive`,className:`mb-4 p-3 bg-destructive/10 border border-destructive/30 rounded-md text-sm text-destructive`,children:c}),(0,$.jsx)(Zr,{schema:{type:`object-form`,objectName:e.objectName,mode:`create`,fields:e.fields,customFields:C,initialData:T,onSuccess:E,submitText:o?k.submitting??`Submitting...`:k.submit??`Submit`},dataSource:w}),x&&(0,$.jsxs)(`div`,{"aria-hidden":`true`,className:`absolute left-[-10000px] top-auto h-px w-px overflow-hidden`,children:[(0,$.jsx)(`label`,{htmlFor:`${e.formId}-${x}`,children:`Do not fill this field`}),(0,$.jsx)(`input`,{ref:v,id:`${e.formId}-${x}`,type:`text`,name:x,tabIndex:-1,autoComplete:`off`,defaultValue:``})]}),e.consent&&(0,$.jsxs)(`div`,{className:`mt-4`,children:[(0,$.jsxs)(`label`,{className:`flex items-start gap-2 text-sm text-foreground cursor-pointer select-none`,children:[(0,$.jsx)(`input`,{type:`checkbox`,id:j,checked:u,onChange:e=>{d(e.target.checked),e.target.checked&&p(null)},"aria-required":A||void 0,"aria-invalid":f?`true`:void 0,"aria-describedby":f?`${j}-error`:void 0,className:`mt-0.5 h-4 w-4 rounded border-input accent-primary`}),(0,$.jsxs)(`span`,{className:`leading-relaxed`,children:[e.consent.label??k.consentLabelDefault??`I agree to the privacy policy.`,A&&(0,$.jsx)(`span`,{"aria-hidden":`true`,className:`text-destructive ml-0.5`,children:`*`}),e.consent.privacyUrl&&(0,$.jsxs)($.Fragment,{children:[` `,(0,$.jsx)(`a`,{href:e.consent.privacyUrl,target:`_blank`,rel:`noopener noreferrer`,className:`underline text-primary hover:opacity-80`,children:k.consentLink??`Privacy policy`})]})]})]}),f&&(0,$.jsx)(`p`,{id:`${j}-error`,role:`alert`,className:`mt-1.5 text-xs text-destructive`,children:f})]}),o&&(0,$.jsxs)(`div`,{className:`mt-3 flex items-center gap-2 text-xs text-muted-foreground`,children:[(0,$.jsx)(Ie,{className:`h-3.5 w-3.5 animate-spin`,"aria-hidden":`true`}),(0,$.jsx)(`span`,{children:k.submitting??`Submitting…`})]})]}),(0,$.jsxs)(`div`,{className:`px-6 sm:px-8 py-4 border-t bg-muted/20 flex flex-col sm:flex-row items-center justify-between gap-2`,children:[(0,$.jsxs)(`p`,{className:`inline-flex items-center gap-1.5 text-xs text-muted-foreground`,children:[(0,$.jsx)(Le,{className:`h-3 w-3`,"aria-hidden":`true`}),(0,$.jsx)(`span`,{children:k.secureNotice??`Your information is transmitted securely and only used to respond to your request.`})]}),(0,$.jsxs)(`div`,{className:`flex items-center gap-3 text-xs text-muted-foreground/80`,children:[e.privacyPolicyUrl&&(0,$.jsxs)(`a`,{href:e.privacyPolicyUrl,target:`_blank`,rel:`noopener noreferrer`,className:`inline-flex items-center gap-1 underline hover:text-foreground`,children:[(0,$.jsx)(Re,{className:`h-3 w-3`,"aria-hidden":`true`}),k.consentLink??`Privacy policy`]}),(0,$.jsx)(`span`,{children:k.poweredBy??`Powered by ObjectStack`})]})]})]})})};function pi(e){return e<60?`${Math.round(e)}s`:e<3600?`${Math.floor(e/60)}m ${Math.round(e%60)}s`:`${Math.floor(e/3600)}h ${Math.floor(e%3600/60)}m`}var mi=({formId:e,formTitle:t,metrics:n,className:r})=>{let i=Oe(),a=(0,Q.useMemo)(()=>{if(!n.abandonedSubmissions)return 100;let e=n.totalSubmissions+n.abandonedSubmissions;return e===0?0:Math.round(n.totalSubmissions/e*100)},[n.totalSubmissions,n.abandonedSubmissions]),o=(0,Q.useMemo)(()=>n.dailySubmissions?.length?Math.max(...n.dailySubmissions.map(e=>e.count),1):1,[n.dailySubmissions]);return(0,$.jsxs)(`div`,{className:`space-y-4 ${r||``}`,children:[(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`h2`,{className:`text-lg font-semibold text-foreground`,children:t||`Form Analytics`}),(0,$.jsxs)(`p`,{className:`text-sm text-muted-foreground`,children:[`Form ID: `,e]})]}),(0,$.jsxs)(`div`,{className:`grid grid-cols-1 sm:grid-cols-3 gap-4`,children:[(0,$.jsx)(u,{children:(0,$.jsxs)(w,{className:`pb-2`,children:[(0,$.jsx)(m,{children:`Total Submissions`}),(0,$.jsx)(E,{className:`text-2xl`,children:n.totalSubmissions.toLocaleString(i)})]})}),(0,$.jsxs)(u,{children:[(0,$.jsxs)(w,{className:`pb-2`,children:[(0,$.jsx)(m,{children:`Fill Rate`}),(0,$.jsxs)(E,{className:`text-2xl`,children:[a,`%`]})]}),(0,$.jsx)(T,{children:(0,$.jsx)(`div`,{className:`w-full bg-muted rounded-full h-2`,children:(0,$.jsx)(`div`,{className:`bg-primary rounded-full h-2 transition-all`,style:{width:`${a}%`}})})})]}),(0,$.jsx)(u,{children:(0,$.jsxs)(w,{className:`pb-2`,children:[(0,$.jsx)(m,{children:`Avg. Completion Time`}),(0,$.jsx)(E,{className:`text-2xl`,children:n.avgCompletionTime?pi(n.avgCompletionTime):`—`})]})})]}),n.dailySubmissions&&n.dailySubmissions.length>0&&(0,$.jsxs)(u,{children:[(0,$.jsx)(w,{children:(0,$.jsx)(E,{className:`text-sm font-medium`,children:`Daily Submissions`})}),(0,$.jsx)(T,{children:(0,$.jsx)(`div`,{className:`flex items-end gap-1 h-32`,children:n.dailySubmissions.map((e,t)=>(0,$.jsxs)(`div`,{className:`flex-1 flex flex-col items-center gap-1`,children:[(0,$.jsx)(`div`,{className:`w-full bg-primary/80 rounded-t transition-all hover:bg-primary`,style:{height:`${e.count/o*100}%`,minHeight:e.count>0?`4px`:`0`},title:`${e.date}: ${e.count} submissions`}),(0,$.jsx)(`span`,{className:`text-[10px] text-muted-foreground truncate w-full text-center`,children:e.date.slice(-5)})]},t))})})]}),n.fieldDropOff&&n.fieldDropOff.length>0&&(0,$.jsxs)(u,{children:[(0,$.jsxs)(w,{children:[(0,$.jsx)(E,{className:`text-sm font-medium`,children:`Field Completion Rates`}),(0,$.jsx)(m,{children:`Percentage of users who completed each field`})]}),(0,$.jsx)(T,{children:(0,$.jsx)(`div`,{className:`space-y-3`,children:n.fieldDropOff.map((e,t)=>(0,$.jsxs)(`div`,{className:`space-y-1`,children:[(0,$.jsxs)(`div`,{className:`flex justify-between text-sm`,children:[(0,$.jsx)(`span`,{className:`text-foreground`,children:e.label}),(0,$.jsxs)(`span`,{className:`text-muted-foreground`,children:[e.completionRate,`%`]})]}),(0,$.jsx)(`div`,{className:`w-full bg-muted rounded-full h-1.5`,children:(0,$.jsx)(`div`,{className:`rounded-full h-1.5 transition-all ${e.completionRate>=80?`bg-green-500`:e.completionRate>=50?`bg-yellow-500`:`bg-destructive`}`,style:{width:`${e.completionRate}%`}})})]},t))})})]})]})},hi=Ce({"view.malformedFilter":`This view’s filter is malformed, so no records are shown: the {{subject}} condition cannot be applied.`,"form.lineItems.title":`Line Items`,"common.save":`Save`,"detail.saving":`Saving…`,"common.loading":`Loading…`,"form.lineItems.saveRecordFirst":`Save the record first to add line items.`,"form.lineItems.notLoaded":`This record’s line items have not been loaded.`,"form.lineItems.loadFailed":`Failed to load line items`,"form.lineItems.saveFailed":`Failed to save line items`,"form.lineItems.noChildObject":`This panel has no child object configured: set {{property}} to the object whose rows it lists.`},`view.malformedFilter`);function gi(e,t){let n=e?.message;return n?{message:n}:{op:t}}function _i(e){return typeof e==`number`&&Number.isInteger(e)&&e>0}function vi(e,t){return _i(e)?e:t}function yi(e,t){return e==null||_i(e)?null:`[ObjectUI] LineItemsPanel row cap: ${typeof t==`string`&&t?`record:line_items on ${t}`:`record:line_items`} declared limit: ${String(e)}, which is not a positive integer. A row cap must be a positive integer (the spec refuses zero and negative values), so it was ignored and this panel fell back to its default row cap (500).`}var bi=({schema:e})=>{let t=fe(),{t:n}=hi(),r=t?.dataSource,i=ie(),a=s(),o=e.parentObject||i?.objectName,c=e.parentId||e.recordId||i?.recordId,[l,d]=(0,Q.useState)([]),[f,p]=(0,Q.useState)([]),[m,h]=(0,Q.useState)(!0),[g,_]=(0,Q.useState)(!1),[v,y]=(0,Q.useState)(!1),[b,x]=(0,Q.useState)(null),C=(0,Q.useRef)(0),[D,O]=(0,Q.useState)(void 0),k=D!==void 0&&D!==c,A=(0,Q.useRef)({dirty:!1,rowsHeldFor:void 0});(0,Q.useEffect)(()=>{A.current={dirty:v,rowsHeldFor:D}},[v,D]);let j=(0,Q.useRef)(null),M=(0,Q.useRef)(!1),[N,P]=(0,Q.useState)(0),[F,I]=(0,Q.useState)(!1),[ee,te]=(0,Q.useState)(null);(0,Q.useEffect)(()=>{let t=r;if(!t||typeof t.getObjectSchema!=`function`)return;if(!e.childObject){te(null),console.warn(`[LineItemsPanel] a line-items panel has no childObject — refusing to fetch its child schema. Set childObject to the child object the panel lists.`);return}let n=!1;return t.getObjectSchema(e.childObject).then(e=>{n||te(e??null)}).catch(()=>{n||te(null)}),()=>{n=!0}},[r,e.childObject]),(0,Q.useEffect)(()=>{let t=yi(e.limit,e.childObject);t&&console.warn(t)},[e.limit,e.childObject]);let L=ve(),ne=J(e.filter,L),ae=JSON.stringify(ne??null),z=JSON.stringify(e.sort??null),B=(0,Q.useMemo)(()=>X(ne),[ae]),V=B.ok?void 0:B.refusal,H=B.ok?B.node:void 0,U=(0,Q.useMemo)(()=>pe(e.sort),[z]),W=q(r&&c?e.childObject:void 0),oe=(0,Q.useCallback)(async(t=`save`)=>{if(t===`inputs`){let t=A.current,n=j.current,i=t.dirty&&t.rowsHeldFor!==void 0&&t.rowsHeldFor===c,a=n!==null&&n.parentId===c&&n.dataSource===r&&n.childObject===e.childObject&&n.relationshipField===e.relationshipField;if(i&&a){M.current=!0;return}}let n=vi(e.limit,500),i=j.current,a=t===`inputs`&&i!==null&&i.parentId===c&&i.dataSource===r&&i.childObject===e.childObject&&i.relationshipField===e.relationshipField&&i.top===n&&i.filterKey===ae&&i.sortKey===z&&A.current.rowsHeldFor===c;M.current=!1;let o=++C.current,s=()=>C.current===o;if(j.current={parentId:c,dataSource:r,childObject:e.childObject,relationshipField:e.relationshipField,top:n,filterKey:ae,sortKey:z},I(!1),!r||!c){h(!1);return}if(V){h(!1);return}if(!e.childObject){h(!1),console.warn(`[LineItemsPanel] a line-items panel has no childObject — refusing to fetch its rows. Set childObject to the child object the panel lists.`);return}a?I(!0):h(!0);try{let t={[e.relationshipField]:c},i=await r.find(e.childObject,{$filter:H===void 0?t:ge(t,H),...U?{$orderby:U}:{},$top:n});if(!s())return;let a=i?.data??[];d(a.map(e=>({...e}))),p(a.map(e=>({...e}))),y(!1),O(c),x(null),M.current&&(M.current=!1,P(e=>e+1))}catch(e){s()&&(x(gi(e,`load`)),O(e=>e??c))}finally{s()&&(h(!1),I(!1))}},[r,c,e.childObject,e.relationshipField,e.limit,V,H,U,ae,z]),se=(0,Q.useRef)({load:oe,parentId:c});(0,Q.useEffect)(()=>{se.current={load:oe,parentId:c}},[oe,c]),(0,Q.useEffect)(()=>{oe(`inputs`)},[oe,N,W]);let G=(0,Q.useCallback)(e=>{if(d(e),y(!0),c){let e=c;O(t=>t??e)}},[c]),K=(0,Q.useCallback)(async()=>{if(!r||!c||!e.childObject||k)return;let t=c,n=()=>se.current.parentId===t;_(!0),x(null);try{let t=!!(o&&e.totalField),i=t?{[e.totalField]:zn(l,e.amountField||`amount`)}:{},a=Ln(o??``,c,i,[{childObject:e.childObject,relationshipField:e.relationshipField,rows:l,original:f,childSchema:ee}]);t||(a=a.slice(1)),a.length&&await xe(r,a),n()&&await se.current.load(`save`)}catch(e){n()&&x(gi(e,`save`))}finally{_(!1)}},[r,c,k,l,f,e,o,ee]),ce=(0,Q.useMemo)(()=>({columns:Et(e.columns,{perms:a,objectName:e.childObject}),total_field:e.totalField?e.amountField||`amount`:void 0,min_rows:e.minRows,max_rows:e.maxRows,allow_add:!e.readonly,allow_delete:!e.readonly}),[e,a]),[le,Y]=n(`form.lineItems.noChildObject`,{property:`{{property}}`}).split(`{{property}}`);return(0,$.jsxs)(u,{className:R(`shadow-none`),children:[(0,$.jsxs)(w,{className:`flex-row items-center justify-between gap-2 pb-2`,children:[(0,$.jsx)(E,{className:`text-sm font-medium`,children:e.title||n(`form.lineItems.title`)}),!e.readonly&&(0,$.jsx)(re,{type:`button`,size:`sm`,onClick:K,disabled:g||m||!v||!c||k,children:n(g?`detail.saving`:`common.save`)})]}),(0,$.jsxs)(T,{children:[b&&(0,$.jsx)(`p`,{className:`mb-2 text-sm text-destructive`,children:`message`in b?b.message:n(b.op===`load`?`form.lineItems.loadFailed`:`form.lineItems.saveFailed`)}),V?(0,$.jsxs)(`div`,{role:`alert`,className:`rounded-md border border-amber-300 bg-amber-50 p-3 text-sm text-amber-800`,"data-testid":`line-items-malformed-filter`,children:[(0,$.jsx)(`p`,{className:`font-medium`,"data-testid":`line-items-malformed-filter-subject`,children:n(`view.malformedFilter`,{subject:be(V)??``})}),(0,$.jsx)(`p`,{className:`mt-1 text-xs opacity-80`,children:V.message})]}):e.childObject?m?(0,$.jsx)(`p`,{className:`py-6 text-center text-sm text-muted-foreground`,children:n(`common.loading`)}):c?k?(0,$.jsx)(`p`,{className:`py-6 text-center text-sm text-muted-foreground`,"data-testid":`line-items-held-for-another-parent`,children:n(`form.lineItems.notLoaded`)}):(0,$.jsx)(S,{value:l,onChange:G,field:ce,readonly:e.readonly,disabled:g||F}):(0,$.jsx)(`p`,{className:`py-6 text-center text-sm text-muted-foreground`,children:n(`form.lineItems.saveRecordFirst`)}):(0,$.jsxs)(`p`,{className:`py-6 text-center text-sm text-muted-foreground`,"data-testid":`line-items-no-child-object`,children:[le,(0,$.jsx)(`code`,{className:`font-mono`,children:`childObject`}),Y]})]})]})},xi=G(({schema:e,dataSource:t})=>{let n=_e(t);return(0,$.jsx)(Se,{schema:e,dataSource:n,testId:`object-form`,errorTitle:`This form’s data source could not be resolved`,requiresDataSource:!(e?.customFields?.length>0)&&typeof e?.objectName==`string`&&e.objectName.length>0,noDataSourceMessage:le(`object-form`,e?.objectName),children:e=>(0,$.jsx)(Zr,{schema:e,dataSource:n})})});K.register(`object-form`,xi,{namespace:`plugin-form`,label:`Object Form`,category:`plugin`,inputs:[{name:`objectName`,type:`string`,required:!0},{name:`fields`,type:`array`,description:'Bare field names to show, in order (each looked up in the object schema; `{ name }` is tolerated). NOT the same vocabulary as `sections[].fields`, which also accepts the spec `FormFieldSchema` object (identity key `field`, e.g. `{ field: "note", colSpan: 2 }`) — that shape resolves to no name HERE and is silently skipped (SimpleObjectForm in ObjectForm.tsx; buildFlatFields in flatFields.ts for the drawer/modal presentations).'},{name:`mode`,type:`enum`,enum:[`create`,`edit`,`view`]},{name:`formType`,type:`enum`,enum:[`simple`,`tabbed`,`wizard`,`split`,`drawer`,`modal`]},{name:`sections`,type:`array`},{name:`title`,type:[`string`,`object`],description:'Heading of the drawer and modal presentations (`formType: "drawer"` / `"modal"`). Accepts either a plain string or an inline per-locale map (`{ en: "New order", "zh-CN": "新建订单" }`) — the `I18nLabel` union the contract admits on this key — and the form resolves the map against the active UI language, falling back through base language, a region-qualified sibling, `default`, then `en`, and finally to any remaining entry.'},{name:`description`,type:[`string`,`object`],description:'Subtitle under the drawer and modal heading. Accepts either a plain string or an inline per-locale map (`{ en: "Enter the order details", "zh-CN": "填写订单信息" }`), resolved against the active UI language with the same fallback chain as `title`.'},{name:`layout`,type:`enum`,enum:[`vertical`,`horizontal`],description:"Label placement: `vertical` puts each label above its field (the default), `horizontal` beside it."},{name:`columns`,type:`number`},{name:`defaultTab`,type:`string`},{name:`tabPosition`,type:`enum`,enum:[`top`,`bottom`,`left`,`right`]},{name:`allowSkip`,type:`boolean`},{name:`showStepIndicator`,type:`boolean`},{name:`splitDirection`,type:`enum`,enum:[`horizontal`,`vertical`]},{name:`splitSize`,type:`number`},{name:`splitResizable`,type:`boolean`},{name:`drawerSide`,type:`enum`,enum:[`top`,`bottom`,`left`,`right`]},{name:`drawerWidth`,type:`string`},{name:`modalSize`,type:`enum`,enum:[`sm`,`default`,`lg`,`xl`,`full`]},{name:`modalCloseButton`,type:`boolean`,description:"Show the modal presentation’s close (X) button. Default `true`; `false` hides it. Forwarded by `ObjectForm`’s modal route and honoured by `ModalForm` on both of its dialog arms. With the button hidden the modal still closes on Escape, and on the Cancel action when that is shown."},{name:`contentLayout`,type:`enum`,enum:[`simple`,`tabbed`],description:'How the modal presentation lays out sections. `tabbed` differs from `simple` only when more than one section has a field to show (`ModalForm` tests `schema.contentLayout === "tabbed" && groups.length > 1`).'},{name:`confirmOnDiscard`,type:`boolean`,description:"Ask before discarding unsaved edits when a drawer/modal form is dismissed. Set `false` to close immediately."},{name:`recordId`,type:`string`,description:"The record to load in `edit` / `view` mode. Leave unset for `create`."},{name:`customFields`,type:`array`,description:`Field definitions merged over the set generated from object metadata. With inline definitions and no data source, this becomes the only field source.`},{name:`initialValues`,type:`object`,description:"Values to prefill in `create` mode."},{name:`initialData`,type:`object`,description:"Alternate spelling of `initialValues` that the drawer/modal presentations read FIRST — PER MEMBER (`{ ...initialValues, ...initialData }`), so a member this key says nothing about keeps its `initialValues` value. Prefer `initialValues` in new schemas."},{name:`readOnly`,type:`boolean`,description:"Render every field read-only, whatever `mode` says."},{name:`submitText`,type:[`string`,`object`],description:'Label of the Save button. A map no locale limb resolves shows the default label. Accepts either a plain string or an inline per-locale map (`{ en: "Save order", "zh-CN": "保存订单" }`), resolved against the active UI language with the same fallback chain as `title`.'},{name:`cancelText`,type:[`string`,`object`],description:'Label of the Cancel button. Accepts either a plain string or an inline per-locale map (`{ en: "Back", "zh-CN": "返回" }`), resolved against the active UI language with the same fallback chain as `title`.'},{name:`nextText`,type:[`string`,`object`],description:'Label of the next-step button (wizard). Accepts either a plain string or an inline per-locale map (`{ en: "Continue", "zh-CN": "继续" }`), resolved against the active UI language with the same fallback chain as `title`.'},{name:`prevText`,type:[`string`,`object`],description:'Label of the previous-step button (wizard). Accepts either a plain string or an inline per-locale map (`{ en: "Previous", "zh-CN": "上一步" }`), resolved against the active UI language with the same fallback chain as `title`.'},{name:`showSubmit`,type:`boolean`},{name:`showCancel`,type:`boolean`},{name:`showReset`,type:`boolean`},{name:`submitBehavior`,type:`object`,description:'Declarative post-submit behaviour, one of `{ kind: "thank-you", title?, message? }`, `{ kind: "redirect", url, delayMs? }`, `{ kind: "continue" }`, `{ kind: "next-record" }`. When present it takes precedence over `successMessage` / `navigateOnSuccess` / `resetOnSuccess`.'},{name:`successMessage`,type:[`string`,`object`],description:'Toast shown after a successful submit. Ignored when `submitBehavior` or `navigateOnSuccess` is set. Accepts either a plain string or an inline per-locale map (`{ en: "Order saved", "zh-CN": "订单已保存" }`), resolved against the active UI language with the same fallback chain as `title`.'},{name:`navigateOnSuccess`,type:`string`,description:"Path to navigate to after a successful create/update. Supports `{id}` / `{recordId}` interpolation from the saved record and is same-origin-guarded. Takes precedence over `successMessage`."},{name:`resetOnSuccess`,type:`boolean`,description:`Clear the form after a successful submit instead of keeping the saved values.`},{name:`mobile`,type:`object`,description:'Phone-only presentation overrides, e.g. `{ stepper: "auto", stepperMinFields: 8, fullscreenLongText: true }`.'}]}),K.register(`form`,xi,{namespace:`view`,skipFallback:!0,label:`Data Form View`,category:`view`,inputs:[{name:`objectName`,type:`string`,required:!0},{name:`fields`,type:`array`,description:'Bare field names to show, in order (each looked up in the object schema; `{ name }` is tolerated). NOT the same vocabulary as `sections[].fields`, which also accepts the spec `FormFieldSchema` object (identity key `field`, e.g. `{ field: "note", colSpan: 2 }`) — that shape resolves to no name HERE and is silently skipped (this renders through the same `ObjectFormRenderer` / `SimpleObjectForm` as `object-form` above — see its `fields` description).'},{name:`mode`,type:`enum`,enum:[`create`,`edit`,`view`]}]});var Si=G(({schema:e})=>{let t=(0,Q.useContext)(W)?.dataSource??void 0;return(0,$.jsx)(Se,{schema:e,dataSource:t,testId:`embeddable-form`,errorTitle:`This form’s data source could not be resolved`,children:e=>(0,$.jsx)(fi,{config:e,dataSource:t})})});K.register(`embeddable-form`,Si,{namespace:`plugin-form`,label:`Embeddable Form`,category:`plugin`,inputs:[{name:`formId`,type:`string`,required:!0},{name:`objectName`,type:`string`,required:!0},{name:`title`,type:`string`},{name:`description`,type:`string`},{name:`fields`,type:`array`,description:'Bare field names to show, in order (each looked up in the object schema; `{ name }` is tolerated). NOT the same vocabulary as `sections[].fields`, which also accepts the spec `FormFieldSchema` object (identity key `field`, e.g. `{ field: "note", colSpan: 2 }`) — that shape resolves to no name HERE and is silently skipped (`EmbeddableForm` passes this array straight through to `<ObjectForm>` with no `sections`, so it renders through the same `SimpleObjectForm` as `object-form` above — see its `fields` description).'},{name:`allowMultiple`,type:`boolean`}]}),K.register(`form-analytics`,({schema:e})=>(0,$.jsx)(mi,{formId:e.formId,formTitle:e.formTitle,metrics:e.metrics||{totalSubmissions:0}}),{namespace:`plugin-form`,label:`Form Analytics`,category:`plugin`,inputs:[{name:`formId`,type:`string`,required:!0},{name:`formTitle`,type:`string`},{name:`metrics`,type:`object`}]});var Ci=G(({schema:e})=>{let t=(0,Q.useContext)(W)?.dataSource??void 0;return(0,$.jsx)(Se,{schema:e,dataSource:t,testId:`object-master-detail-form`,errorTitle:`This form’s data source could not be resolved`,children:e=>(0,$.jsx)(Sr,{schema:e,dataSource:t})})});K.register(`object-master-detail-form`,Ci,{namespace:`plugin-form`,label:`Master-Detail Form`,category:`plugin`,inputs:[{name:`objectName`,type:`string`,required:!0},{name:`mode`,type:`enum`,enum:[`create`,`edit`]},{name:`sections`,type:`array`},{name:`details`,type:`array`,required:!0},{name:`recordId`,type:`string`,description:"The parent record to load in `edit` mode. Leave unset for `create`."},{name:`formType`,type:`enum`,enum:[`simple`,`tabbed`],description:`How the PARENT half of the form is presented. The detail grids below it are unaffected.`},{name:`fields`,type:`array`,description:"Which parent fields to show, in order — and it is NOT ignored when `sections` is given: the two INTERSECT. The parent field pool is built from this key first and every section then resolves its own members against that pool, so a section member this key does not list is dropped from the rendered form, and a section that loses EVERY member that way disappears with its heading. Each such drop is reported once via `console.warn` (objectui#9884); it is not repaired, because this key bounds what the form DRAWS and edits, not what Save writes: on a create, the submitted set is the drawn fields plus any parent value seeded through `initialValues` (or its alternate spelling `initialData`), drawn or not. A seed for an undeclared, server-owned, computed or read-only field is still stripped, as on any save. Author one or the other, or list every section member here too. Members are bare field names (`{ name }` tolerated); NOT the spec `FormFieldSchema` object `sections[].fields` accepts (identity key `field`) — that shape resolves to no name here and is silently skipped (the parent form renders through the same `ObjectForm` / `SimpleObjectForm` as `object-form` — see its `fields` description)."},{name:`title`,type:[`string`,`object`],description:'Names the record in the built-in "… saved" toast after an edit save, which shows only when the host supplies no `onSuccess`. Accepts either a plain string or an inline per-locale map (`{ en: "Purchase order", "zh-CN": "采购单" }`) — the `I18nLabel` union the contract admits on this key — and the renderer resolves the map against the active UI language, falling back through base language, a region-qualified sibling, `default`, then `en`, and finally to any remaining entry.'},{name:`submitText`,type:[`string`,`object`],description:'Label of the button that saves the parent and every detail row in one batch. Defaults to "Save" when editing a record (`mode: "edit"` with a `recordId`) and to "Create" otherwise, in the active UI language; an empty string, or a map no locale limb resolves, shows the default too. Accepts either a plain string or an inline per-locale map (`{ en: "Save order", "zh-CN": "保存订单" }`), resolved against the active UI language with the same fallback chain as `title`.'},{name:`cancelText`,type:[`string`,`object`],description:'Label of the Cancel button, which renders only when the host supplies an `onCancel` callback (a runtime slot, not authorable in a JSON document). Defaults to "Cancel", in the active UI language; an empty string, or a map no locale limb resolves, shows the default too. Accepts either a plain string or an inline per-locale map (`{ en: "Back", "zh-CN": "返回" }`), resolved against the active UI language with the same fallback chain as `title`.'},{name:`showSubmit`,type:`boolean`},{name:`initialValues`,type:`object`,description:"Values to prefill on the PARENT record in `create` mode."},{name:`initialData`,type:`object`,description:"Alternate spelling of `initialValues` the renderer also reads: the `parentSchema` memo carries both keys onto the parent form, which merges them PER MEMBER with this one winning. Prefer `initialValues` in new schemas."},{name:`taxRateField`,type:`string`,description:`Name of the field ON THE CHILD object that holds each line’s tax rate. Feeds the line-items totals row; leave unset when the detail rows carry no tax.`}]});var wi={object:`childObject`,filter:!0,sort:!0,limit:`limit`},Ti=G(({schema:e})=>(0,$.jsx)(Se,{schema:e,mapping:wi,testId:`record-line-items`,errorTitle:`This line-items panel’s data source could not be resolved`,children:e=>(0,$.jsx)(bi,{schema:e})}));K.register(`line_items`,Ti,{namespace:`record`,skipFallback:!0,label:`Line Items`,category:`record`,inputs:[{name:`childObject`,type:`string`,required:!0},{name:`relationshipField`,type:`string`,required:!0},{name:`columns`,type:`array`,required:!0},{name:`totalField`,type:`string`},{name:`amountField`,type:`string`}]});export{or as a,Ht as c,Pr as i,rt as l,Wr as n,Qt as o,Lr as r,Wt as s,Zr as t};
|