@objectstack/console 17.5.0 → 17.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +378 -0
- package/dist/.objectstack-injection.json +2 -2
- package/dist/.objectui-sha +1 -1
- package/dist/assets/{ActionResultDialog-CLdIyOW6.js → ActionResultDialog-4kHDGnT3.js} +3 -3
- package/dist/assets/{AiPendingActionsPage-OKYz66yR.js → AiPendingActionsPage-JjOddm0h.js} +1 -1
- package/dist/assets/{ApiConsolePage-CcrKovu8.js → ApiConsolePage-BgS26lbp.js} +1 -1
- package/dist/assets/AppDocsIndex-BDoH5ECM.js +1 -0
- package/dist/assets/{AppManagementPage-D_xz8cTZ.js → AppManagementPage-CCgKmNTj.js} +1 -1
- package/dist/assets/ApprovalsInboxPage-C6S1vk0X.js +1 -0
- package/dist/assets/AuditLogPage-v2dKXMuk.js +1 -0
- package/dist/assets/BookPage-DwFMcTSN.js +1 -0
- package/dist/assets/{ComponentNavView-BxsixSU9.js → ComponentNavView-B5g9c6fx.js} +1 -1
- package/dist/assets/{CreateViewDialog-xyKlpLEW.js → CreateViewDialog-D3l-tYHM.js} +1 -1
- package/dist/assets/DashboardView-BOcovpPd.js +1 -0
- package/dist/assets/DocPage-B6AkH5WI.js +1 -0
- package/dist/assets/{DocsIndex-B2zw_HAp.js → DocsIndex-DwW2QsYY.js} +1 -1
- package/dist/assets/{DocsLayout-DezZ8x7_.js → DocsLayout-D63StSgd.js} +1 -1
- package/dist/assets/DocsSlug-CP9fcabi.js +1 -0
- package/dist/assets/ExpressionProvider-CrL6jhVq.js +1 -0
- package/dist/assets/{FlowRunsPage-CvY3nJMF.js → FlowRunsPage-CxdaiUyk.js} +1 -1
- package/dist/assets/{IntegrationsPage-2leVkVDH.js → IntegrationsPage-DvG0x0Nb.js} +2 -2
- package/dist/assets/{InterfaceListPage-BdECC_i3.js → InterfaceListPage-C4wPYohR.js} +1 -1
- package/dist/assets/{MarketplaceInstalledPage-EPPHSitW.js → MarketplaceInstalledPage-B7KETQG2.js} +1 -1
- package/dist/assets/MarketplacePackagePage-CfgKDpNH.js +4 -0
- package/dist/assets/{MarketplacePage-BnQKykgv.js → MarketplacePage-DNEyU5AE.js} +1 -1
- package/dist/assets/{MetadataInspector-BWxLkr0O.js → MetadataInspector-EP0I3-Kq.js} +1 -1
- package/dist/assets/{ObjectDataPage-BIzp65Mo.js → ObjectDataPage-CykEm9MD.js} +1 -1
- package/dist/assets/PageView-C6u86tni.js +1 -0
- package/dist/assets/{ProfilePage-D2qGgxPK.js → ProfilePage-C3SjXMzi.js} +1 -1
- package/dist/assets/{PublicFormsPage-DlE6tck_.js → PublicFormsPage-D3uCTR-8.js} +1 -1
- package/dist/assets/RecordDetailView-DgR_zhP4.js +3 -0
- package/dist/assets/RecordFormPage-kiJI-ieF.js +1 -0
- package/dist/assets/ReportDefaultInspector-BIinF0EQ.js +1 -0
- package/dist/assets/{ReportView-GIdKJdOt.js → ReportView-BREO-ADE.js} +1 -1
- package/dist/assets/{RuntimeDraftBar-BbMdi3Kp.js → RuntimeDraftBar-BCWfd2yS.js} +1 -1
- package/dist/assets/SchemaForm-C4uMMZ13.js +3 -0
- package/dist/assets/SearchResultsPage-C6Hw_Lpn.js +1 -0
- package/dist/assets/{SettingsHub-BGKIj-Zq.js → SettingsHub-DP1mrzEN.js} +1 -1
- package/dist/assets/SettingsView-u7mc6pcc.js +1 -0
- package/dist/assets/{SkeletonDetail-C8fMI-Mu.js → SkeletonDetail-DIwlbHTr.js} +1 -1
- package/dist/assets/{af-BfSmLD34.js → af-DPUgkQl0.js} +1 -1
- package/dist/assets/ai-DPBykF2N.js +3 -0
- package/dist/assets/{app-shell-eager-leaves-CDVclng4.js → app-shell-eager-leaves-Cf2bM6uT.js} +1 -1
- package/dist/assets/{ar-B9ttrM75.js → ar-B-6GTIRU.js} +1 -1
- package/dist/assets/{ar-DZ-C1rn-cyl.js → ar-DZ-wEl298ti.js} +1 -1
- package/dist/assets/{ar-EG-BaDxKP_o.js → ar-EG-YBT90_S0.js} +1 -1
- package/dist/assets/{ar-MA-DbxNEcmd.js → ar-MA-3uT-EYh6.js} +1 -1
- package/dist/assets/{ar-SA-DeC5LXcX.js → ar-SA-SiQsjhhc.js} +1 -1
- package/dist/assets/{ar-TN-C9KpTFJz.js → ar-TN-CfzXjKzS.js} +1 -1
- package/dist/assets/{az-cMerDwRO.js → az-BqAfcNza.js} +1 -1
- package/dist/assets/{be-ZTSbszQh.js → be-CQgWXa9_.js} +1 -1
- package/dist/assets/{be-tarask-BXZEUrgX.js → be-tarask-BmNg0Sir.js} +1 -1
- package/dist/assets/{bg-BDogpmn5.js → bg-D3evgRuS.js} +1 -1
- package/dist/assets/{bn-Cz04uxmh.js → bn-uItkARwm.js} +1 -1
- package/dist/assets/{bs-CpFnCl-j.js → bs-DueReOpO.js} +1 -1
- package/dist/assets/{ca-CHC4M52Z.js → ca-Cr3AHktR.js} +1 -1
- package/dist/assets/{ckb-Dxw-RNm8.js → ckb-CTi5BET7.js} +1 -1
- package/dist/assets/contracts-DieHW666.js +1 -0
- package/dist/assets/{createDerive-DvA_JGNq.js → createDerive-CjN1i5vn.js} +1 -1
- package/dist/assets/{cs-DsFaJ5Z7.js → cs-43mFX9jr.js} +1 -1
- package/dist/assets/{cy-FH4JFDTs.js → cy-BBSkg3F8.js} +1 -1
- package/dist/assets/{da-D1pVjaAq.js → da-C5oA5qcs.js} +1 -1
- package/dist/assets/data-adapter-Cymvlczj.js +1 -0
- package/dist/assets/{de-AT-DUMQCisj.js → de-AT-CApxwJzu.js} +1 -1
- package/dist/assets/{de-DKrxSvnP.js → de-CPtbLlAf.js} +1 -1
- package/dist/assets/default-inspector-registry-Bs6GBn00.js +1 -0
- package/dist/assets/dist-BF-ssUpn.js +14 -0
- package/dist/assets/{el-l3-bHySV.js → el-Dto2xBQU.js} +1 -1
- package/dist/assets/en-AU-FVwCiDJO.js +1 -0
- package/dist/assets/{en-CA-DGH5NF0a.js → en-CA-DKuJPN1U.js} +1 -1
- package/dist/assets/en-GB-DQ_y5VbJ.js +1 -0
- package/dist/assets/en-IE-DaXOhsZW.js +1 -0
- package/dist/assets/en-IN-CnRZnAom.js +1 -0
- package/dist/assets/en-NZ-CBZLEToK.js +1 -0
- package/dist/assets/en-ZA-BE59v0wZ.js +1 -0
- package/dist/assets/{eo-CL6CXHZx.js → eo-BL8JXIWd.js} +1 -1
- package/dist/assets/{es-BIJ0rksI.js → es-BnoaNxsu.js} +1 -1
- package/dist/assets/{et-BGgMzjm1.js → et-tPYLNenO.js} +1 -1
- package/dist/assets/{eu-CqvAoRrX.js → eu-CUBG6bT0.js} +1 -1
- package/dist/assets/{fa-IR-DNz3oA1-.js → fa-IR-Rr2d9xSs.js} +1 -1
- package/dist/assets/{fi-DNSfKWuW.js → fi-B0NVIZsV.js} +1 -1
- package/dist/assets/{formatLong-CHb9WA3O.js → formatLong-1-gt9bpo.js} +1 -1
- package/dist/assets/{fr-DYRJCirJ.js → fr-BbhHek8e.js} +1 -1
- package/dist/assets/{fr-CA-CotiswPx.js → fr-CA-CBDvLXFg.js} +1 -1
- package/dist/assets/{fr-CH-CpiEYWpc.js → fr-CH-WPNmwPn7.js} +1 -1
- package/dist/assets/framework-DFR4HNtj.js +35 -0
- package/dist/assets/{fy-B69yM3FE.js → fy-DvOBbvEF.js} +1 -1
- package/dist/assets/{gd-BAy8AsX6.js → gd-BQPiTPX5.js} +1 -1
- package/dist/assets/getIcon-Cfwf-Egt.js +1 -0
- package/dist/assets/{gl-soLn_weL.js → gl-BJCXK8uO.js} +1 -1
- package/dist/assets/{gu-B19Yo9yC.js → gu-CctPRz3V.js} +1 -1
- package/dist/assets/{he-DYTPo33p.js → he-CVFMk6p2.js} +1 -1
- package/dist/assets/{hi-D2dIK7Oy.js → hi-Ba30-RwS.js} +1 -1
- package/dist/assets/{highlighted-body-OFNGDK62-CExufvVt.js → highlighted-body-OFNGDK62-BQ57IrBV.js} +1 -1
- package/dist/assets/{hr-BV-VOPMu.js → hr-BZUqTbZs.js} +1 -1
- package/dist/assets/{ht-C7MM4qkS.js → ht-BLe05tPx.js} +1 -1
- package/dist/assets/{hu-Rha1m2Ym.js → hu-2CQ_Mkww.js} +1 -1
- package/dist/assets/{hy-CiTNgbdV.js → hy-CclcPG4H.js} +1 -1
- package/dist/assets/i18n-BnUsCaSC.js +17 -0
- package/dist/assets/i18n-locale-ar-92O_xtDZ.js +4 -0
- package/dist/assets/i18n-locale-de-T5ic3yH9.js +4 -0
- package/dist/assets/i18n-locale-en-rxr7WJYl.js +4 -0
- package/dist/assets/i18n-locale-es-D_WOifJ_.js +4 -0
- package/dist/assets/i18n-locale-fr-3cvyjMkp.js +4 -0
- package/dist/assets/i18n-locale-ja-DXlIkB8I.js +4 -0
- package/dist/assets/i18n-locale-ko-DngRpS45.js +4 -0
- package/dist/assets/i18n-locale-pt-BkPaFCqZ.js +4 -0
- package/dist/assets/i18n-locale-ru-E5wLh-y6.js +4 -0
- package/dist/assets/i18n-locale-zh-BL4_Yand.js +4 -0
- package/dist/assets/{i18n-runtime-CTgAQF4N.js → i18n-runtime-97_bDVjP.js} +1 -1
- package/dist/assets/{id-Cijsfjt-.js → id-6JLB8s-f.js} +1 -1
- package/dist/assets/index-Cadlh4t_.css +2 -0
- package/dist/assets/index-D98sa5GF.js +20 -0
- package/dist/assets/{infrastructure-BHSync5f.js → infrastructure-Cc34lEqb.js} +2 -2
- package/dist/assets/integration-CeAF4JFT.js +1 -0
- package/dist/assets/{is-xS1WTyeC.js → is-to0CWzm1.js} +1 -1
- package/dist/assets/isSameWeek-DBXaA1Gd.js +1 -0
- package/dist/assets/{it-CH-l516ZNXj.js → it-CH-DhdfjP5Z.js} +1 -1
- package/dist/assets/{it-C2i_c9sd.js → it-ea0B8Ujp.js} +1 -1
- package/dist/assets/{ja-D9_ewLny.js → ja-B1bzkgDW.js} +1 -1
- package/dist/assets/{ja-Hira-D_6ExgHw.js → ja-Hira-CMrY5hXO.js} +1 -1
- package/dist/assets/{ka-BYHGyees.js → ka-DKSXLnXP.js} +1 -1
- package/dist/assets/{kk-CbTFtuqb.js → kk-DHwMv8Dn.js} +1 -1
- package/dist/assets/{km-Dr2gwhIn.js → km-tpLG1xNr.js} +1 -1
- package/dist/assets/{kn-CprH8JD7.js → kn-MLreVnHA.js} +1 -1
- package/dist/assets/{ko-CsFS2u5i.js → ko-CI0DBazn.js} +1 -1
- package/dist/assets/{lb-CbFKN7Ob.js → lb-CmL572Xe.js} +1 -1
- package/dist/assets/{lt-Bq0xkLp0.js → lt-DRtUOLdw.js} +1 -1
- package/dist/assets/{lv-Cj6vg6Qo.js → lv-COSHgkOP.js} +1 -1
- package/dist/assets/{match-C_jFGO9e.js → match-B-ergJQb.js} +1 -1
- package/dist/assets/{match-CiPp9BME.js → match-BQoOW8Cj.js} +1 -1
- package/dist/assets/{match-Co4ivumx.js → match-dfBS0YSQ.js} +1 -1
- package/dist/assets/mermaid-GHXKKRXX-Bb17TtNP.js +1 -0
- package/dist/assets/metadata-admin-CABUxbJl.js +9 -0
- package/dist/assets/{mk-MXFM99YL.js → mk-B0IH_YL_.js} +1 -1
- package/dist/assets/{mn-D5Q9B6Jt.js → mn-P-QdQ2n3.js} +1 -1
- package/dist/assets/{ms-CCzPRldx.js → ms-CtyEOINy.js} +1 -1
- package/dist/assets/{mt-mjJpN6xW.js → mt-DfuZ2HRm.js} +1 -1
- package/dist/assets/{nb-BIlNqdEb.js → nb-2Hp-5Tnt.js} +1 -1
- package/dist/assets/{nl-BE-FwXjQsmV.js → nl-BE-mmxbfNoR.js} +1 -1
- package/dist/assets/{nl-D2uBtIxG.js → nl-CZ_nLREz.js} +1 -1
- package/dist/assets/{nn-B0loJ7SV.js → nn-ccWhYsNa.js} +1 -1
- package/dist/assets/{oc-U7-yH1sO.js → oc-z504BFRV.js} +1 -1
- package/dist/assets/{pl-mTy0JYgi.js → pl-DeQ7ASt-.js} +1 -1
- package/dist/assets/plugin-calendar-Cn5HaZU8.js +1 -0
- package/dist/assets/plugin-charts-B6RcFWbo.js +7 -0
- package/dist/assets/plugin-chatbot-Ck47EhDX.js +122 -0
- package/dist/assets/plugin-dashboard-DjEx8e5Y.js +6 -0
- package/dist/assets/plugin-form-CLDvL0up.js +1 -0
- package/dist/assets/plugin-gantt-CrVrxVdi.js +63 -0
- package/dist/assets/plugin-grid-D2rmQEW_.js +11 -0
- package/dist/assets/plugin-kanban-BUNHFfIC.js +1 -0
- package/dist/assets/plugin-map-y-7RQQC5.js +1 -0
- package/dist/assets/{plugin-markdown-D1nTQc1T.js → plugin-markdown-BOkHcir_.js} +1 -1
- package/dist/assets/plugin-report-mT3jpna0.js +59 -0
- package/dist/assets/plugin-timeline-B1EF83D3.js +1 -0
- package/dist/assets/plugin-tree-MTHUt3_S.js +1 -0
- package/dist/assets/plugin-view-DHJI-ahf.js +1 -0
- package/dist/assets/plugins-views-CfkgqD30.js +3 -0
- package/dist/assets/{pt-BR-2KtO5Js1.js → pt-BR-D80_lPYF.js} +1 -1
- package/dist/assets/{pt-Bet5OOQf.js → pt-CJJ1RmXd.js} +1 -1
- package/dist/assets/{ro-37U6sgzi.js → ro-EuFb2TCj.js} +1 -1
- package/dist/assets/{ru-CyuAY-5E.js → ru-CMaVQScp.js} +1 -1
- package/dist/assets/{runtime-metadata-persistence-afAW-MeD.js → runtime-metadata-persistence-ClOTznqa.js} +1 -1
- package/dist/assets/{se-DeJabuC6.js → se-DsfdKLdF.js} +1 -1
- package/dist/assets/{sk-DWEpjfkR.js → sk-BNV9omI8.js} +1 -1
- package/dist/assets/{sl-4oSvNhIR.js → sl-DJS_nINU.js} +1 -1
- package/dist/assets/{sq-BjkBCaXW.js → sq-HEgjcbHe.js} +1 -1
- package/dist/assets/{sr-Dxm1DsRS.js → sr-CO0CFu4X.js} +1 -1
- package/dist/assets/{sr-Latn-Dawg6oP2.js → sr-Latn-eE1Idzey.js} +1 -1
- package/dist/assets/{src-C8NYjdVm.js → src-BU7L2v4J.js} +1 -1
- package/dist/assets/src-BUtIBFDA.js +1 -0
- package/dist/assets/src-C0eXlKtx.js +16 -0
- package/dist/assets/{studioEntry-nXQP3iL0.js → studioEntry-WeMfaSGn.js} +1 -1
- package/dist/assets/{submitRedirect-jK-cEIbP.js → submitRedirect-C2lfZSHt.js} +1 -1
- package/dist/assets/{sv-CROOGJGz.js → sv-5uTzgQT3.js} +1 -1
- package/dist/assets/{ta-BZnTmFI_.js → ta-BzgdkBZG.js} +1 -1
- package/dist/assets/{te-BN0v0x5t.js → te-Ct_pl7ZJ.js} +1 -1
- package/dist/assets/{th-CBjKhp_U.js → th-DouAlk0-.js} +1 -1
- package/dist/assets/{tr-x0Ne4N4H.js → tr-3XNBsI40.js} +1 -1
- package/dist/assets/types-zod-DXpXw10W.js +1 -0
- package/dist/assets/{ug-sgzNhsKo.js → ug-B9n24h9G.js} +1 -1
- package/dist/assets/ui-components-D6cEVg0T.js +37 -0
- package/dist/assets/ui-layout-DgVDuPEM.js +1 -0
- package/dist/assets/{uk-o_DQ5VHJ.js → uk-DCAenByf.js} +1 -1
- package/dist/assets/use-book-data-CwRldFxP.js +1 -0
- package/dist/assets/{useActionModal-CSvbHkQ7.js → useActionModal-Blp4rhOk.js} +1 -1
- package/dist/assets/useCanAuthorMetadata-BxCMgFRf.js +1 -0
- package/dist/assets/useNavSelDeepLink-67Y4qCNO.js +1 -0
- package/dist/assets/useNavTargetLabel-BOJncjIb.js +1 -0
- package/dist/assets/{useOpenRecordList-B5-qaFUx.js → useOpenRecordList-BrwJFojQ.js} +1 -1
- package/dist/assets/{usePackageL10n-CMx66am-.js → usePackageL10n-Ci9uVkRZ.js} +1 -1
- package/dist/assets/{useSettingsLabel-Kkr2q0Oo.js → useSettingsLabel-CeMnMWsh.js} +1 -1
- package/dist/assets/{uz-Cyrl-DbtkQtz_.js → uz-Cyrl-JSeHEqu-.js} +1 -1
- package/dist/assets/{uz-Be41d4jl.js → uz-DT3s9bZS.js} +1 -1
- package/dist/assets/vendor-objectstack-DFqu45yM.js +138 -0
- package/dist/assets/{vi-84mZmklk.js → vi-D2p-h6bY.js} +1 -1
- package/dist/assets/{zh-CN-DD1reegJ.js → zh-CN-DHOKqAit.js} +1 -1
- package/dist/assets/{zh-HK-B05u30WI.js → zh-HK-D4iIPY7I.js} +1 -1
- package/dist/assets/{zh-TW-Bb-WimPD.js → zh-TW-gORQ_tZh.js} +1 -1
- package/dist/chunk-membership.json +100 -90
- package/dist/eager-closure.json +110 -110
- package/dist/index.html +4 -4
- package/dist/sdui.manifest.json +520 -60
- package/package.json +1 -1
- package/dist/assets/AppDocsIndex-F4zDq2zz.js +0 -1
- package/dist/assets/ApprovalsInboxPage-DrEUmaDb.js +0 -1
- package/dist/assets/AuditLogPage-CoghqsZb.js +0 -1
- package/dist/assets/DashboardView-CGC-_Om8.js +0 -1
- package/dist/assets/DocPage-CIZE5kdj.js +0 -1
- package/dist/assets/DocsSlug-DXdFdwlS.js +0 -1
- package/dist/assets/ExpressionProvider-DZfMwyMs.js +0 -1
- package/dist/assets/MarketplacePackagePage-C7NOu2Ir.js +0 -4
- package/dist/assets/PageView-CVLgCRSF.js +0 -1
- package/dist/assets/RecordDetailView-DQKydU7X.js +0 -3
- package/dist/assets/RecordFormPage-BTjwxJIA.js +0 -1
- package/dist/assets/ReportDefaultInspector-DdsQAkd7.js +0 -1
- package/dist/assets/SchemaForm-C8X1ve4p.js +0 -3
- package/dist/assets/SearchResultsPage-Jwhqsdyo.js +0 -1
- package/dist/assets/SettingsView-D8SMKdrc.js +0 -1
- package/dist/assets/appRoute-DbnWDEa1.js +0 -1
- package/dist/assets/data-adapter-DMbe6Njk.js +0 -1
- package/dist/assets/default-inspector-registry-CpL3fFhl.js +0 -1
- package/dist/assets/dist-BXrEV1ag.js +0 -13
- package/dist/assets/en-AU-C6x7mDhH.js +0 -1
- package/dist/assets/en-GB-0-nho2eK.js +0 -1
- package/dist/assets/en-IE-2fC3BkfV.js +0 -1
- package/dist/assets/en-IN-C1QcFhxn.js +0 -1
- package/dist/assets/en-NZ-C80ptZT7.js +0 -1
- package/dist/assets/en-ZA-ByZDrjeb.js +0 -1
- package/dist/assets/framework-DcWkeiND.js +0 -35
- package/dist/assets/getIcon-BEVyC4y3.js +0 -1
- package/dist/assets/i18n-CEKxYdmD.js +0 -9
- package/dist/assets/i18n-locale-ar-DN7sl3GF.js +0 -4
- package/dist/assets/i18n-locale-de-C40JErvb.js +0 -4
- package/dist/assets/i18n-locale-en-CITPDIHy.js +0 -4
- package/dist/assets/i18n-locale-es-C8DdWN6c.js +0 -4
- package/dist/assets/i18n-locale-fr-COIdEZZl.js +0 -4
- package/dist/assets/i18n-locale-ja-DYF_rU_s.js +0 -4
- package/dist/assets/i18n-locale-ko-B-ODYAtX.js +0 -4
- package/dist/assets/i18n-locale-pt-CK1SyBIm.js +0 -4
- package/dist/assets/i18n-locale-ru-jLzvShMO.js +0 -4
- package/dist/assets/i18n-locale-zh-Bf9Gbbvl.js +0 -4
- package/dist/assets/index-CLyvpiGc.css +0 -2
- package/dist/assets/index-CfnfGw5W.js +0 -20
- package/dist/assets/isSameWeek-DWYeNyh8.js +0 -1
- package/dist/assets/mermaid-GHXKKRXX-DVLc_uym.js +0 -1
- package/dist/assets/metadata-admin-CybaOCdO.js +0 -9
- package/dist/assets/nav-selection-Dzm_mA3C.js +0 -1
- package/dist/assets/plugin-calendar-CKRBcML7.js +0 -1
- package/dist/assets/plugin-charts-DGTJxXCB.js +0 -7
- package/dist/assets/plugin-chatbot-DwtwNA-y.js +0 -122
- package/dist/assets/plugin-dashboard-C1AYKmGX.js +0 -6
- package/dist/assets/plugin-form-CV8ZY04-.js +0 -1
- package/dist/assets/plugin-gantt-BRIb2_8G.js +0 -63
- package/dist/assets/plugin-grid-C9h7mRVv.js +0 -11
- package/dist/assets/plugin-kanban-BcJ0Dhys.js +0 -1
- package/dist/assets/plugin-map-D24ZUOUj.js +0 -1
- package/dist/assets/plugin-report-BfGintAq.js +0 -59
- package/dist/assets/plugin-timeline-CbBRq_qt.js +0 -1
- package/dist/assets/plugin-tree-BNX2A5J5.js +0 -1
- package/dist/assets/plugin-view-DzWQWYyH.js +0 -1
- package/dist/assets/plugins-views-DraK4xz0.js +0 -3
- package/dist/assets/src-B8lv0plz.js +0 -18
- package/dist/assets/src-DoDvT77T.js +0 -1
- package/dist/assets/types-zod-Y2RwUUeJ.js +0 -1
- package/dist/assets/ui-components-BTB1NkUW.js +0 -37
- package/dist/assets/ui-layout-bZfafwJa.js +0 -1
- package/dist/assets/use-book-data-C3eyZJSG.js +0 -1
- package/dist/assets/vendor-objectstack-XuWC71M9.js +0 -266
- package/dist/assets/vendor-zod-CHLW1iCr.js +0 -64
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{t,v as n}from"./vendor-react-BggL7APJ.js";import{$t as r,on as i,rn as a,zn as o}from"./vendor-objectstack-XuWC71M9.js";import{$ as s,An as c,Br as l,Dn as u,E as d,Hr as f,K as p,Mn as m,Nn as h,Nr as g,On as _,Pr as v,S as y,St as b,T as x,Ur as S,Vr as C,a as w,bi as T,c as E,di as D,fi as O,gi as k,hi as A,jn as j,jr as M,kn as N,kr as P,li as F,mi as I,pi as L,q as ee,ui as te,vi as ne,yi as re,zr as R}from"./ui-components-BTB1NkUW.js";import{At as ie,Bi as z,Dr as ae,Dt as B,Er as V,Hi as H,I as U,Ni as W,Pt as oe,Qi as G,Tr as K,Tt as q,Ui as J,Vi as se,Wi as Y,Xi as X,Yi as ce,d as le,f as ue,ft as de,g as fe,h as pe,ht as me,i as he,l as ge,or as _e,p as ve,st as ye,ut as be}from"./framework-DcWkeiND.js";import{h as xe,p as Se,t as Ce}from"./i18n-runtime-CTgAQF4N.js";import{r as Z}from"./vendor-ui-utils-DIUdEYii.js";import{t as we}from"./vendor-icon-check-vpu9Zukp.js";import{t as Te}from"./vendor-icon-chevron-down-BEf_jTEE.js";import{t as Ee}from"./vendor-icon-chevron-left-KnDcuFH1.js";import{t as De}from"./vendor-icon-chevron-right-DbnKwHYQ.js";import{t as Oe}from"./vendor-icon-circle-alert-D1XTr_X9.js";import{t as ke}from"./vendor-icon-circle-check-Bq3OcFQN.js";import{t as Ae}from"./vendor-icon-loader-circle-D3PsuVaD.js";import{t as je}from"./vendor-icon-lock-B_psRnly.js";import{t as Me}from"./vendor-icon-shield-check-CdDzbial.js";import{t as Ne}from"./vendor-icon-triangle-alert-D5n0T3q_.js";var Q=e(n(),1);function Pe(e,t,n){let r=fe(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 Fe=`https://a.invalid/`,Ie=`https://b.invalid/`;function Le(e){try{return new URL(e,Fe).origin===`https://a.invalid`&&new URL(e,Ie).origin===`https://b.invalid`}catch{return!1}}function Re(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 Le(r)?r:null}var ze=/\{\{record\.([a-z_][a-z0-9_]*)\}\}/g;function Be(e){return e==null?``:typeof e==`string`?e:typeof e==`boolean`||typeof e==`number`&&Number.isFinite(e)?String(e):``}function Ve(e,t){let n=e=>e&&typeof e==`object`&&!Array.isArray(e)?e:{};return{...n(e),...n(t)}}function He(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(ze,(e,n)=>encodeURIComponent(Be(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 Ue(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 We(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 Ge(e){return e!=null&&!z(e)}function Ke(e){return e?.mode===`create`||!e?.recordId}function qe(e,t){return!(!e?.required||t&&z(e.defaultValue))}function Je(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;Ge(a)?r[e]=a:Ye(i)&&t?.currentUserId&&(r[e]=t.currentUserId)}return r}function Ye(e){return!e||!i(e.defaultValue)?!1:e.type===`user`||e.type===`lookup`&&(e.reference===`sys_user`||e.reference_to===`sys_user`)}function Xe(e,t,n){return{...Je(e,n),...t??{}}}function Ze(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))z(n[t]?.defaultValue)&&H(i)||(r[t]=i);return r}function Qe(e,t){if(e?.length)return e.find(e=>e?.name===t)}function $e(e,t,n,r=e=>e){let i=t?.length?t:void 0,a=[];if(e.forEach((e,t)=>{let o=Qe(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 et(e,t){return typeof t==`string`&&t.trim()||typeof t==`object`&&t&&typeof t.source==`string`&&t.source.trim()?{...e,visibleOn:t}:e}var tt=new Set;function nt(e,t){if(typeof e.name!=`string`||e.name===e.field)return;let n=`${t}:${e.field}:${e.name}`;tt.has(n)||(tt.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 rt=new Set;function it(e,t){let n=typeof e==`object`&&e&&typeof e.field==`string`?`{ field: '${e.field}' }`:JSON.stringify(e),r=`${t}:${n}`;rt.has(r)||(rt.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 at=new Set;function ot(e,t,n){let r=n?`section '${n}'`:`an untitled section`,i=`${t}:${r}:${e}`;at.has(i)||(at.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 st(e,t){let n=t.objectSchema?.fields?.[e];return n?{name:e,label:t.fieldLabel(t.objectName,e,n.label||e),type:p(n.type,{multiple:n.multiple}),required:qe(n,Ke(t)),disabled:t.readOnly||t.mode===`view`||n.readonly,placeholder:n.placeholder,description:n.help||n.description,validation:w(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 ct(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 lt(e,t){return ut(e,t,void 0)}function ut(e,t,n){if(typeof e==`string`){if(n)return n;let r=Qe(t.customFields,e);if(r)return lt(r,t);let i=t.objectSchema?.fields?.[e];return et(st(e,t),i?.visible_on??i?.visibleOn)}let r=e;if(typeof r.field!=`string`)return et(r,r.visibleOn);nt(r,t.objectName);let i=r.field,a=Qe(t.customFields,i),o=n?{...n}:a?{...a}:st(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=qe({required:r.required,defaultValue:t.objectSchema?.fields?.[i]?.defaultValue},Ke(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);s!=null&&(o.type=p(s,{multiple:o.multiple}));let c=r.reference??r.reference_to;return c!=null&&(o.reference=c,o.reference_to=c),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),et(o,r.visibleWhen??r.visibleOn)}function dt(e,t){let n=e.fields??[],r=t.pool;if(!r)return n.map(e=>lt(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=ct(e),r=n===void 0?void 0:i.get(n);r&&a.push(ut(e,t,r))}return a}function ft(e){return{...e?.initialValues??{},...e?.initialData??{}}}function pt(e,t){if(e?.isLoaded)return n=>e.checkField(t,n,`write`)}function mt(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 ht(e,{perms:t,objectName:n,mode:r,deniedDescription:i}){return mt(e,t,n,r,e=>i?{...e,readOnly:!0,disabled:!0,description:e.description??i}:{...e,readOnly:!0,disabled:!0})}function gt(e,t,n,r){if(r!==`edit`&&r!==`create`)return!1;let i=W(e,t?.getObjectApiOperations?.(n));return r===`edit`?!i.edit:!i.create}function _t(e,{objectSchema:t,...n}){let r=ht(e,n);return!Array.isArray(r)||!gt(t,n.perms,n.objectName,n.mode)?r:r.map(e=>e?.name?{...e,disabled:!0}:e)}var vt=`true`;function yt(e,{perms:t,objectName:n}){return mt(e,t,n,void 0,e=>({...e,readonlyWhen:vt}))}var bt=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(`.`)),xt=new Set([`formula`,`summary`,`rollup`,`lookup_value`,`auto_number`,`autonumber`,`computed`]);function St(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(!bt.has(t)&&(!a||a(t))){if(i){let e=i[t];if(!e||e.system===!0)continue;let n=String(e.type||``).toLowerCase();if(xt.has(n)||e.computed===!0||e.formula||e.readOnly===!0||e.readonly===!0)continue}r[t]=n}return r}function Ct(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 wt(e,t){let n={};for(let[r,i]of Object.entries(e))Ct(i,t[r])||(n[r]=i);return n}function Tt(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 Et(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 Dt(e,t,n){if(!e||typeof e!=`object`)return e;let r=Et(t,n);if(!r)return e;let i=wt(e,r);return Object.keys(i).length>0?i:e}function Ot(e,t,n){let r=Et(e,t);return!e||!r?e??null:!n||typeof n!=`object`?e:{...e,record:{...r,...n}}}function kt(e,t,{objectSchema:n,canEdit:r,snapshot:i}){let a=Array.isArray(t.customFields)&&t.customFields.length>0?null:n,o=St(e,a,{canEdit:r});return Ke(t)&&(o=Ze(o,a)),{payload:o,writePayload:Dt(o,i,t)}}var At=new Set([`field:formula`,`field:summary`,`field:auto_number`,`field:autonumber`]),jt=new Set([`field:textarea`,`field:markdown`,`field:html`,`field:grid`,`field:richtext`,`textarea`,`markdown`,`html`,`grid`,`richtext`]),Mt=new Set([`formula`,`summary`,`auto_number`,`autonumber`]);function Nt(e){return jt.has(e)}function Pt(e){return Mt.has(e)}function Ft(e){return e<=3?1:e<=8?2:e<=15?3:4}function It(e){return e&&e>0?Math.min(Math.floor(e),4):1}function Lt(e,t,n){let r=It(t);return r<=1?1:e.span===`full`?r:e.colSpan==null?e.type&&Nt(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 Rt(e,t,n){let r=It(t);return r<=1?e:e.map(e=>{if(e.type===`section-divider`)return e;let t=Lt(e,r,n);return t>1?{...e,colSpan:t}:e.colSpan!=null&&e.colSpan!==1?{...e,colSpan:1}:e})}var zt=bt;function Bt(e,t){return e.filter(e=>{if(zt.has(e.name))return!1;let n=t?.fields?.[e.name];return n?.hidden!==!0&&n?.readonly!==!0})}function Vt(e,t){return e.filter(e=>{if(e.type&&At.has(e.type))return!1;let n=t?.fields?.[e.name];return!n||!Pt(n.type)})}var Ht={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 Ut(e){return Ht[e&&e>0?Math.min(Math.floor(e),4):1]}function Wt(e){return e<=1?`default`:e===2?`xl`:`full`}function Gt(e,t,n,r){let i=[...e];if(i=Bt(i,t),r===`create`&&(i=Vt(i,t)),n!==void 0)return i=Rt(i,n),{fields:i,columns:n};let a=Ft(i.length);return i=Rt(i,a),{fields:i,columns:a}}var $=t(),Kt=xe({"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 qt(e){let t=e?.updated_at;return typeof t==`string`&&t.length>0?t:void 0}function Jt(e){if(!e||typeof e!=`object`)return!1;let t=e;return t.code===`CONCURRENT_UPDATE`||t.name===`ConcurrentUpdateError`}function Yt(e,t){return JSON.stringify([e,String(t)])}function Xt(e,t){if(t)return e&&e.readVersion===t?e.version:t}function Zt(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 Qt(){let{t:e}=Kt(),t=Ce(),[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=Yt(t,n),l=qt(s),u=Xt(a.current.get(c),l),d=e=>{let t=qt(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(!Jt(a))throw a;let s=a.currentVersion,c=he(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=Zt(n?.currentVersion,t);return{saveWithOcc:s,conflictDialog:(0,$.jsx)(F,{open:!!n,onOpenChange:e=>{e||o(!1)},children:(0,$.jsxs)(O,{children:[(0,$.jsxs)(A,{children:[(0,$.jsxs)(k,{className:`flex items-center gap-2`,children:[(0,$.jsx)(Ne,{className:`h-5 w-5 text-amber-500`,"aria-hidden":!0}),e(`form.conflictTitle`)]}),(0,$.jsxs)(L,{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)(I,{children:[(0,$.jsx)(`button`,{type:`button`,className:T(re({variant:`outline`})),onClick:()=>o(!1),children:e(`form.keepEditing`)}),(0,$.jsx)(`button`,{type:`button`,className:T(re({variant:`destructive`})),onClick:()=>o(!0),children:e(`form.conflictOverwrite`)})]})]})})}}var $t={schema:null,record:null};function en(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 tn(e){return e.schema||e.record}function nn(e){if(typeof e!=`object`||!e||Array.isArray(e))return!1;let t=e;return typeof t.field!=`string`&&typeof t.name==`string`}function rn(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(!nn(n))return!1;t+=1}}return t>0}function an(e){let t=e;return Array.isArray(t?.customFields)&&t.customFields.length>0?!0:rn(t?.sections)}var on=`DataSource is required for form submission (inline mode not configured)`;function sn(){return Error(on)}var cn=xe({"form.uploadInFlight":`Wait for the upload to finish before saving.`,"fields.file.uploading":`Uploading…`},`form.uploadInFlight`);function ln(){let e=d(),{t}=cn();return{uploading:e.anyUploading,scope:e,busyLabel:t(`fields.file.uploading`),reason:t(`form.uploadInFlight`)}}function un({gate:e,children:t}){return(0,$.jsx)(x,{scope:e.scope,children:t})}function dn({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 fn=({schema:e,dataSource:t,className:n})=>{let{fieldLabel:r}=Se(),i=s(),{userId:a}=i,[o,c]=(0,Q.useState)(null),l=ln(),[u,d]=(0,Q.useState)({}),{saveWithOcc:f,conflictDialog:p}=Qt(),[m,h]=(0,Q.useState)(!0),[g,_]=(0,Q.useState)($t),v=(0,Q.useRef)({schema:0,record:0}),y=tn(g),b=e.defaultTab||e.sections[0]?.name||e.sections[0]?.label||`tab-0`;Q.useEffect(()=>{let n=!1,r=en(v,_,`schema`);return(async()=>{if(!t){h(!1);return}try{let i=await t.getObjectSchema(e.objectName);if(n)return;c(i),r.commit()}catch(e){if(n)return;r.fail(e)}})(),()=>{n=!0}},[e.objectName,t]);let x=(0,Q.useRef)(void 0),S=(0,Q.useRef)(null),{refetch:C,onDirtyChange:w,saved:E}=Pe(e.objectName,e.recordId,!!e.recordId&&e.mode!==`create`);Q.useEffect(()=>{let n=!1,r=en(v,_,`record`);return(o||!t)&&(async()=>{if(e.mode===`create`||!e.recordId||!t){S.current=null,d(Xe(o,ft(e),{currentUserId:a})),r.commit(),h(!1);return}x.current!==e.recordId&&h(!0);try{let i=await t.findOne(e.objectName,e.recordId);if(n)return;x.current=e.recordId,S.current=Tt(e,i),d(i||{}),r.commit()}catch(e){if(n)return;r.fail(e)}finally{n||h(!1)}})(),()=>{n=!0}},[o,e.mode,e.recordId,e.initialData,e.initialValues,t,e.objectName,C]);let D=(0,Q.useCallback)(t=>{let n=dt(t,{objectSchema:o,objectName:e.objectName,readOnly:e.readOnly,mode:e.mode,recordId:e.recordId,fieldLabel:r,customFields:e.customFields});return _t(n,{perms:i,objectName:e.objectName,mode:e.mode,objectSchema:o})??n},[o,e.readOnly,e.mode,e.recordId,e.objectName,e.customFields,r,i]),O=(0,Q.useCallback)(async n=>{if(l.uploading){Z.error(l.reason);return}if(!t&&!e.submitHandler&&an(e))return e.onSuccess&&await e.onSuccess(n),n;try{let r,{writePayload:a}=kt(n,e,{objectSchema:o,canEdit:pt(i,e.objectName),snapshot:S.current});if(e.submitHandler)r=await e.submitHandler(a);else if(!t)throw sn();else if(e.mode===`create`)r=await t.create(e.objectName,a);else if(e.mode===`edit`&&e.recordId){let n=await f({dataSource:t,objectName:e.objectName,recordId:e.recordId,payload:a,baseRecord:u});if(n.status===`cancelled`)return;r=n.result}return S.current=Ot(S.current,e,a),E(),e.onSuccess&&await e.onSuccess(r),r}catch(t){throw e.onError&&e.onError(t),t}},[e,t,o,i,f,u,l.uploading,l.reason,E]),k=(0,Q.useCallback)(()=>{e.onCancel&&e.onCancel()},[e]),A=(e,t)=>e.name||e.label||`tab-${t}`;if(y)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:`Error loading form`}),(0,$.jsx)(`p`,{className:`text-red-600 text-sm mt-1`,children:y.message})]});if(m)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:`Loading form...`})]});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=Ut(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?Rt(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)(un,{gate:l,children:(0,$.jsxs)(`div`,{className:T(`w-full @container`,n,e.className),children:[(0,$.jsx)(me,{schema:{type:`form`,objectName:e.objectName,fields:I,columns:N,...P?{fieldContainerClass:P}:{},layout:`vertical`,defaultValues:u,previousValues:e.mode===`edit`&&e.recordId?u:void 0,submitLabel:l.uploading?l.busyLabel:e.submitText||(e.mode===`create`?`Create`:`Update`),cancelLabel:e.cancelText,showSubmit:e.showSubmit!==!1&&e.mode!==`view`,showCancel:e.showCancel!==!1,onSubmit:O,onCancel:k,onDirtyChange:w,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:b,fieldTabsPosition:e.tabPosition||`top`}}),(0,$.jsx)(dn,{gate:l}),p]})})},pn=({label:e,description:t,collapsible:n=!1,collapsed:r=!1,columns:i=1,children:a,className:o,gridClassName:s,showBorder:c})=>{let[u,d]=(0,Q.useState)(r),p={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`},m=()=>{n&&d(!u)},h=c??!!e,g=e||t?(0,$.jsxs)(`div`,{className:T(`flex items-start gap-2`,!h&&`mb-4`,n&&`cursor-pointer select-none`),onClick:m,role:n?`button`:void 0,"aria-expanded":n?!u:void 0,children:[n&&(0,$.jsx)(`span`,{className:`mt-0.5 text-muted-foreground`,children:u?(0,$.jsx)(De,{className:`h-4 w-4`}):(0,$.jsx)(Te,{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,_=u?null:(0,$.jsx)(`div`,{className:T(`grid gap-4`,s||p[i]),children:a});return h?(0,$.jsxs)(R,{className:T(`form-section bg-muted/40 shadow-none`,o),children:[g&&(0,$.jsx)(f,{className:`border-b border-border pb-3`,children:g}),_&&(0,$.jsx)(l,{className:`pt-4`,children:_})]}):(0,$.jsxs)(`div`,{className:T(`form-section`,o),children:[g,_]})},mn="The `navigateOnSuccess` destination declared for this form was refused, so the navigation did not happen.",hn=e=>e==null||e===``||Array.isArray(e)&&e.length===0,gn=(e,t)=>Object.keys(e).some(n=>{let r=e[n],i=t[n];if(hn(r)&&hn(i))return!1;try{return JSON.stringify(r)!==JSON.stringify(i)}catch{return r!==i}}),_n=xe({"wizard.missingRequired":`Please complete the required fields: {{fields}}`},`wizard.missingRequired`),vn=H,yn=({schema:e,dataSource:t,className:n})=>{let{fieldLabel:r}=Se(),i=s(),{userId:a}=i,{t:o}=_n(),c=ln(),[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:_}=Qt(),[v,y]=(0,Q.useState)(!0),[b,x]=(0,Q.useState)($t),S=Q.useRef({schema:0,record:0}),C=tn(b),[w,E]=(0,Q.useState)(0),[D,O]=(0,Q.useState)(new Set),[k,A]=(0,Q.useState)(!1),[j,M]=(0,Q.useState)(new Set),[N,P]=(0,Q.useState)(null),[F,I]=(0,Q.useState)(null);Ue(F);let L=Q.useId(),[ee,te]=(0,Q.useState)(0),re=Q.useRef(!1),R=Q.useRef(void 0),{refetch:ie,onDirtyChange:z,saved:ae}=Pe(e.objectName,e.recordId,!!e.recordId&&e.mode!==`create`),B=Q.useRef(!1),H=Q.useRef(!1),U=(0,Q.useCallback)(()=>{z(B.current||H.current)},[z]),W=(0,Q.useCallback)(e=>{B.current=e,U()},[U]),G=e.sections.length,q=w===0,J=w===G-1;Q.useEffect(()=>{let n=!1,r=en(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=en(S,x,`record`);return(l||!t)&&(async()=>{if(e.mode===`create`||!e.recordId||!t){h.current=null,re.current||=(f(Xe(l,ft(e),{currentUserId:a})),!0),r.commit(),y(!1);return}R.current!==e.recordId&&y(!0);try{let i=await t.findOne(e.objectName,e.recordId);if(n)return;R.current=e.recordId,h.current=Tt(e,i),f(i||{}),m(i||{}),H.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 Y=(0,Q.useCallback)(t=>{let n=dt(t,{objectSchema:l,objectName:e.objectName,readOnly:e.readOnly,mode:e.mode,recordId:e.recordId,fieldLabel:r,customFields:e.customFields});return _t(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]),X=Ke(e),ce=oe(),le=(0,Q.useMemo)(()=>w>=0&&w<G?Y(e.sections[w]):[],[w,G,e.sections,Y]),ue=(0,Q.useCallback)(t=>{let n=new Map;return e.sections.forEach((e,r)=>{for(let i of Y(e)){let e=i?.name;if(!e||i.hidden===!0)continue;let a=V({visibleWhen:i.visibleWhen,readonlyWhen:i.readonlyWhen,requiredWhen:i.requiredWhen},t,{required:!!i.required,readonly:i.readonly===!0,serverOwnedValue:se(i,X)},void 0,ce,`field '${e}'`);(i.visibleOn==null||K(i.visibleOn,t,!0,void 0,ce,{context:`visibleOn of field '${e}'`}))&&a.visible&&!a.readonly&&a.required&&vn(t[e])&&n.set(r,[...n.get(r)??[],i.label||e])}}),n},[e.sections,Y,X,ce]),de=(0,Q.useCallback)(async n=>{let r={...d,...n};if(f(r),gn(n,d)&&(H.current=!0,U()),O(e=>new Set(e).add(w)),M(e=>{if(!e.has(w))return e;let t=new Set(e);return t.delete(w),t}),J){if(c.uploading){Z.error(c.reason);return}let n=ue(r);if(n.size>0){M(new Set(n.keys()));let e=[...n.values()].flat();Z.error(o(`wizard.missingRequired`,{fields:e.slice(0,3).join(`, `)+(e.length>3?`…`:``)})),fe(Math.min(...n.keys()));return}M(new Set),A(!0);try{if(!t&&!e.submitHandler&&an(e))return e.onSuccess&&await e.onSuccess(r),r;let n,{writePayload:o}=kt(r,e,{objectSchema:l,canEdit:pt(i,e.objectName),snapshot:h.current});if(e.submitHandler)n=await e.submitHandler(o);else if(!t)throw sn();else if(e.mode===`create`)n=await t.create(e.objectName,o);else if(e.mode===`edit`&&e.recordId){let r=await g({dataSource:t,objectName:e.objectName,recordId:e.recordId,payload:o,baseRecord:d});if(r.status===`cancelled`)return;n=r.result}if(h.current=Ot(h.current,e,o),H.current=!1,ae(),e.onSuccess)await e.onSuccess(n);else if(!e.submitHandler&&e.submitBehavior){let t=e.submitBehavior;switch(t.kind){case`redirect`:{let i=He(t.url,Ve(r,n));if(!i.ok){Z.error(i.refusal),P({message:e.successMessage||(e.mode===`create`?`Created`:`Saved`),refusal:i.refusal});break}I({url:i.url,delayMs:t.delayMs??0});break}case`continue`:f(Xe(l,ft(e),{currentUserId:a})),O(new Set),E(0),te(e=>e+1);break;default:{let n=t.kind===`thank-you`&&t.message?t.message:e.successMessage||(e.mode===`create`?`Created`:`Saved`);Z.success(n),P({title:t.kind===`thank-you`?t.title:void 0,message:n});break}}}else if(!e.submitHandler){let t=Re(e.navigateOnSuccess,n);if(t)return I({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`?`Created`:`Saved`),{description:mn})):Z.success(e.successMessage||(e.mode===`create`?`Created`:`Saved`)),e.resetOnSuccess&&e.mode===`create`&&(f(Xe(l,ft(e),{currentUserId:a})),O(new Set),E(0),te(e=>e+1))}return n}catch(t){throw e.onError&&e.onError(t),t}finally{A(!1)}}fe(w+1)},[d,w,J,e,l,t,i,ue,o,g,c.uploading,c.reason,U,ae]),fe=(0,Q.useCallback)(t=>{t>=0&&t<G&&(E(t),e.onStepChange&&e.onStepChange(t))},[G,e]),pe=(0,Q.useCallback)(()=>{fe(w-1)},[w,fe]),he=(0,Q.useCallback)(()=>{e.onCancel&&e.onCancel()},[e]),ge=(0,Q.useCallback)(t=>{(e.allowSkip||D.has(t)||t<=w)&&fe(t)},[e.allowSkip,D,w,fe]);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:`Error loading form`}),(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:`Loading form...`})]});if(N)return(0,$.jsxs)(`div`,{className:T(`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:N.title??`Thanks!`}),N.message&&(0,$.jsx)(`p`,{className:`mt-2 text-sm text-muted-foreground`,children:N.message})]}),N.refusal&&(0,$.jsx)(`div`,{role:`alert`,className:`rounded-md border border-destructive/40 bg-destructive/10 p-4 text-sm text-destructive`,children:N.refusal})]});let _e=e.sections[w],ve=e=>typeof e==`number`&&e>0?Math.min(Math.floor(e),4):void 0,ye=ve(e.columns)??ve(_e?.columns)??1,be=Ut(ye);return(0,$.jsx)(un,{gate:c,children:(0,$.jsxs)(`div`,{className:T(`w-full @container`,n,e.className),children:[e.showStepIndicator!==!1&&(0,$.jsx)(`nav`,{"aria-label":`Progress`,className:`mb-8`,children:(0,$.jsx)(`ol`,{className:`flex items-center`,children:e.sections.map((t,n)=>{let r=n===w,i=D.has(n),a=e.allowSkip||i||n<=w,o=j.has(n);return(0,$.jsxs)(`li`,{className:T(`relative flex-1`,n!==G-1&&`pr-8 sm:pr-12`),children:[n!==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:T(`h-full`,i?`bg-primary`:`bg-muted`)})}),(0,$.jsxs)(`button`,{type:`button`,className:T(`group relative flex items-center`,a?`cursor-pointer`:`cursor-not-allowed`),onClick:()=>ge(n),disabled:!a,"data-testid":`wizard-step:${t.name||n}`,"data-error":o||void 0,children:[(0,$.jsx)(`span`,{className:T(`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`,o&&`border-2 border-destructive bg-background text-destructive`,!o&&i&&`bg-primary text-primary-foreground`,!o&&r&&!i&&`border-2 border-primary bg-background text-primary`,!o&&!r&&!i&&`border-2 border-muted bg-background text-muted-foreground`),children:o?(0,$.jsx)(Oe,{className:`h-3 w-3 sm:h-4 sm:w-4`,"aria-hidden":!0}):i?(0,$.jsx)(we,{className:`h-3 w-3 sm:h-4 sm:w-4`}):n+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:T(o?`text-destructive`:r?`text-foreground`:`text-muted-foreground`),children:t.label||`Step ${n+1}`})})]})]},n)})})}),(0,$.jsx)(`div`,{className:`min-h-[200px]`,children:_e&&(0,$.jsx)(pn,{label:_e.label,description:_e.description,columns:1,className:_e.className,gridClassName:_e.gridClassName,children:le.length>0?(0,$.jsx)(me,{schema:{type:`form`,objectName:e.objectName,id:L,fields:ye>1?Rt(le,ye,ve(_e.columns)):le,columns:ye,...be?{fieldContainerClass:be}:{},layout:`vertical`,defaultValues:d,previousValues:e.mode===`edit`?p:void 0,showSubmit:!1,showCancel:!1,onSubmit:de,onDirtyChange:W}},ee):(0,$.jsx)(`form`,{id:L,onSubmit:e=>{e.preventDefault(),de({})},children:(0,$.jsx)(`div`,{className:`text-center py-8 text-muted-foreground`,children:`No fields configured for this step`})})})}),(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)(ne,{variant:`ghost`,onClick:he,children:e.cancelText||`Cancel`})}),(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsxs)(`span`,{className:`text-sm text-muted-foreground mr-2`,children:[`Step `,w+1,` of `,G]}),!q&&(0,$.jsxs)(ne,{variant:`outline`,onClick:pe,children:[(0,$.jsx)(Ee,{className:`h-4 w-4 mr-1`}),e.prevText||`Back`]}),J?(0,$.jsxs)(ne,{type:`submit`,form:L,disabled:k||e.mode===`view`||c.uploading,children:[k&&(0,$.jsx)(Ae,{className:`mr-2 h-4 w-4 animate-spin`,"aria-hidden":!0}),c.uploading?c.busyLabel:k?`Submitting...`:e.submitText||(e.mode===`create`?`Create`:`Update`)]}):(0,$.jsxs)(ne,{type:`submit`,form:L,children:[e.nextText||`Next`,(0,$.jsx)(De,{className:`h-4 w-4 ml-1`})]})]})]}),(0,$.jsx)(dn,{gate:c}),_]})})},bn=({schema:e,dataSource:t,className:n})=>{let{fieldLabel:r}=Se(),i=s(),{userId:a}=i,o=ln(),[c,l]=(0,Q.useState)(null),[u,d]=(0,Q.useState)({}),{saveWithOcc:f,conflictDialog:p}=Qt(),[m,h]=(0,Q.useState)(!0),[g,_]=(0,Q.useState)($t),v=(0,Q.useRef)({schema:0,record:0}),y=tn(g);(0,Q.useEffect)(()=>{let n=!1,r=en(v,_,`schema`);return(async()=>{if(!t){h(!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),h(!1)}})(),()=>{n=!0}},[e.objectName,t]);let b=(0,Q.useRef)(void 0),x=(0,Q.useRef)(null),{refetch:S,onDirtyChange:C,saved:w}=Pe(e.objectName,e.recordId,!!e.recordId&&e.mode!==`create`);(0,Q.useEffect)(()=>{let n=!1,r=en(v,_,`record`);return(c||!t)&&(async()=>{if(e.mode===`create`||!e.recordId){x.current=null,d(Xe(c,ft(e),{currentUserId:a})),r.commit(),h(!1);return}if(!t){x.current=null,d(ft(e)),r.commit(),h(!1);return}b.current!==e.recordId&&h(!0);try{let i=await t.findOne(e.objectName,e.recordId);if(n)return;b.current=e.recordId,x.current=Tt(e,i),d(i||{}),r.commit()}catch(e){if(n)return;r.fail(e)}finally{n||h(!1)}})(),()=>{n=!0}},[c,e.mode,e.recordId,e.initialData,e.initialValues,t,e.objectName,S]);let E=(0,Q.useCallback)(t=>{let n=dt(t,{objectSchema:c,objectName:e.objectName,readOnly:e.readOnly,mode:e.mode,recordId:e.recordId,fieldLabel:r,customFields:e.customFields});return _t(n,{perms:i,objectName:e.objectName,mode:e.mode,objectSchema:c})??n},[c,e.readOnly,e.mode,e.recordId,e.objectName,e.customFields,r,i]),D=(0,Q.useCallback)(async n=>{if(o.uploading){Z.error(o.reason);return}if(!t&&!e.submitHandler&&an(e))return e.onSuccess&&await e.onSuccess(n),n;try{let r,{writePayload:a}=kt(n,e,{objectSchema:c,canEdit:pt(i,e.objectName),snapshot:x.current});if(e.submitHandler)r=await e.submitHandler(a);else if(!t)throw sn();else if(e.mode===`create`)r=await t.create(e.objectName,a);else if(e.mode===`edit`&&e.recordId){let n=await f({dataSource:t,objectName:e.objectName,recordId:e.recordId,payload:a,baseRecord:u});if(n.status===`cancelled`)return;r=n.result}return x.current=Ot(x.current,e,a),w(),e.onSuccess&&await e.onSuccess(r),r}catch(t){throw e.onError&&e.onError(t),t}},[e,t,c,i,f,u,o.uploading,o.reason,w]),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(y)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:`Error loading form`}),(0,$.jsx)(`p`,{className:`text-red-600 text-sm mt-1`,children:y.message})]});if(m)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:`Loading form...`})]});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),L=Ut(I),ee=(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?Rt(i,I,P(e.columns)):i))}),n},te=[{key:`primary`,sections:A,defaultSize:N},{key:`secondary`,sections:j,defaultSize:100-N}].map(e=>({...e,fields:ee(e.sections,e.key),containerClass:e.sections.length===1?e.sections[0].gridClassName:void 0})).filter(e=>e.fields.length>0);return(0,$.jsx)(un,{gate:o,children:(0,$.jsxs)(`div`,{className:T(`w-full @container`,n,e.className),children:[(0,$.jsx)(me,{schema:{type:`form`,objectName:e.objectName,fields:te.flatMap(e=>e.fields),columns:I,...L?{fieldContainerClass:L}:{},layout:`vertical`,defaultValues:u,previousValues:e.mode===`edit`&&e.recordId?u:void 0,submitLabel:o.uploading?o.busyLabel:e.submitText||(e.mode===`create`?`Create`:`Update`),cancelLabel:e.cancelText,showSubmit:e.showSubmit!==!1&&e.mode!==`view`,showCancel:e.showCancel!==!1,onSubmit:D,onCancel:O,onDirtyChange:C,fieldPanes:te.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)(dn,{gate:o}),p]})})},xn=e=>e==null?void 0:e.id??e._id??e.recordId,Sn=(e,t)=>t?St(e,t):e,Cn=e=>St(e,null),wn=new Set([`id`,`_id`,`recordId`]);function Tn(e,t){return!e||Object.entries(e).every(([e,n])=>e===t||wn.has(e)?!0:n==null||n===``)}function En(e,t,n){let r=[{object:e,action:`create`,data:Cn(t)}];for(let e of n)for(let t of e.rows)Tn(t,e.relationshipField)||r.push({object:e.childObject,action:`create`,data:{...Sn(t,e.childSchema),[e.relationshipField]:{$ref:0}}});return r}function Dn(e,t,n,r){let i=[{object:e,action:`update`,id:t,data:Cn(n)}];for(let e of r){let n=(e.rows||[]).map(n=>({...n,[e.relationshipField]:t})),{toCreate:r,toUpdate:a,toDelete:o}=On(e.original||[],n);for(let t of r){if(Tn(t,e.relationshipField))continue;let{id:n,_id:r,recordId:a,...o}=t;i.push({object:e.childObject,action:`create`,data:Sn(o,e.childSchema)})}let s=new Map;for(let t of e.original||[]){let e=xn(t);e&&s.set(e,t)}for(let t of a){let n=xn(t),r=s.get(n),a=Sn(t,e.childSchema),o=r?wt(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 On(e,t){let n=new Set(t.map(xn).filter(Boolean));return{toCreate:t.filter(e=>!xn(e)),toUpdate:t.filter(e=>xn(e)),toDelete:(e||[]).map(xn).filter(e=>!!e&&!n.has(e))}}function kn(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 An=new Set([`id`,`_id`,`recordId`,`created_at`,`updated_at`,`created_by`,`updated_by`,`createdAt`,`updatedAt`,`createdBy`,`updatedBy`,`organization_id`,`tenant_id`,`space`,`owner`]),jn=new Set([`position`,`sort_order`,`sequence`,`line_no`,`line_number`,`sort`]),Mn=new Set([`formula`,`summary`,`rollup`,`autonumber`,`auto_number`,`json`,`object`,`grid`,`table`,`location`,`vector`,`html`,`markdown`,`richtext`]);function Nn(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 Pn=new Set([`image`,`avatar`]);function Fn(e,t){e.multiple==null&&t?.multiple&&(e.multiple=!0),e.accept??(Array.isArray(t?.accept)&&t.accept.length>0?e.accept=t.accept:Pn.has(t?.type)&&(e.accept=[`image/*`]))}function In(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 Ln(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 Rn=[`name`,`title`,`subject`,`label`,`full_name`,`display_name`,`code`],zn={select:0,currency:1,number:1,lookup:2,date:3,datetime:3,time:3,text:4};function Bn(e){return(e.type?zn[e.type]:void 0)??5}function Vn(e,t){if(t<=0||e.length<=t)return e;let n=new Set,r=e.find(e=>Rn.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)=>Bn(e.c)-Bn(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 Hn(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(An.has(e)||r.has(e)||jn.has(e)||n?.system||n?.readonly||n?.hidden||Mn.has(n?.type))continue;let a={name:e,label:n?.label||e,type:Nn(n?.type),required:!!n?.required},o=In(n);a.type===`select`&&o&&(a.options=o),a.type===`lookup`&&(a.reference=n?.reference,a.displayField=n?.display_field||n?.reference_field),a.type===`file`&&Fn(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 Vn(i,t.maxColumns??6)}function Un(e,t){let n=e??[],r=t?.fields;return!n.length||!r||typeof r!=`object`?n:n.map(e=>{if(e.type)return e;let t=r[e.name];if(!t)return e;let n=Nn(t?.type),i={...e,type:n};i.label??=t?.label||e.name,i.required??=!!t?.required;let a=In(t);n===`select`&&a&&!i.options&&(i.options=a),n===`lookup`&&(i.reference??=t?.reference,i.displayField??=t?.display_field||t?.reference_field),n===`file`&&Fn(i,t),i.readonlyWhen==null&&t?.readonlyWhen&&(i.readonlyWhen=t.readonlyWhen),i.requiredWhen==null&&t?.requiredWhen&&(i.requiredWhen=t.requiredWhen);let o=typeof t?.expression==`string`?t.expression:t?.expression?.source;return!i.computed&&o&&typeof o==`string`&&(i.computed=!0,i.expr=o,i.required=!1,typeof t?.scale==`number`&&(i.scale=t.scale)),i})}var Wn=new Set([`formula`,`summary`,`rollup`,`autonumber`,`auto_number`]);function Gn(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;An.has(e)||r.has(e)||jn.has(e)||n?.system||n?.hidden||Wn.has(n?.type)||i.push(e)}return i}var Kn=new Set([`textarea`,`richtext`,`html`,`markdown`,`rich-text`,`json`,`location`,`address`]),qn=new Set([`file`,`image`,`avatar`]);function Jn(e,t,n={}){if(t===`grid`||t===`form`)return t;let r=e?.fields??{},i=Gn(e,{relationshipField:n.relationshipField});return i.some(e=>Kn.has(r[e]?.type))||i.filter(e=>qn.has(r[e]?.type)).length>=2||i.length>8?`form`:`grid`}var Yn=[`amount`,`total`,`subtotal`,`line_total`,`line_amount`,`net_amount`];function Xn(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=>Yn.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 Zn(e,t,n,r={}){let i=r.relationshipField||Ln(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?Un(r.columns,t):Hn(t,{relationshipField:i}),o=r.amountField||Xn(a);return{childObject:e,relationshipField:i,columns:a,formFields:Gn(t,{relationshipField:i}),mode:Jn(t,r.inlineEdit??(t?.fields)?.[i]?.inlineEdit,{relationshipField:i}),amountField:o,sortField:Object.keys(t?.fields??{}).find(e=>jn.has(e))}}function Qn(e,t,n){return Object.entries(e??{}).every(([e,r])=>e===n||Ct(r,t[e]))}function $n(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(xn(e)!=null||Tn(e,s))continue;let t=i[a];if(!t||t.op.object!==r||!Qn(t.op.data,e,s)){o=!0;break}a+=1;let n=xn(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=xn(e);t!=null&&f.set(t,e)}let p=[];for(let e of c){let t=xn(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??{}};xn(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 er(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 tr(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=pe(t=>{let n=e.filter(e=>ve(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 nr(e,t,n,r){if(!e||!t.relationshipField)return!1;let i=t.relationshipField;return Dn(``,n,{},[{childObject:t.childObject,relationshipField:i,rows:e.rows,original:e.original.map(e=>({...e,[i]:n})),childSchema:r}]).length>1}function rr(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}var ir=({entries:e,rowState:t,setRows:n,saving:r,formHostRef:i,taxRateField:a,formKey:o,onRowExpand:c,onAddViaForm:l,parentObjectName:u})=>{let d=Ce(),f=s(),[p,m]=(0,Q.useState)({}),h=(0,Q.useRef)(``);(0,Q.useEffect)(()=>{let e=i.current;if(!e)return;let t=()=>{let t=rr(e),n;try{n=JSON.stringify(t)}catch{n=String(Math.random())}n!==h.current&&(h.current=n,m(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 g=p[a],_=g===void 0?null:Number.isFinite(Number(g))?Number(g):0,v=e.reduce((e,n)=>e+kn(t[n.id]?.rows??[],n.config.amountField||`amount`),0),b=_!==null&&e.some(e=>!!e.config.amountField),x=_??0,S=x/100*v,C=v+S,w=e=>`¥${e.toLocaleString(d,{minimumFractionDigits:2,maximumFractionDigits:2})}`;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||`Line Items`}),i.childObject?e.status===`failed`?(0,$.jsxs)(`p`,{className:`py-4 text-sm text-muted-foreground`,role:`status`,"data-testid":`md-detail-schema-unavailable`,children:[`Could not load the schema of`,` `,(0,$.jsx)(`code`,{className:`font-mono`,children:i.childObject}),`, so this collection has no columns to show. Check that the object exists and is readable, then reload.`]}):e.status===`underivable`?(0,$.jsxs)(`p`,{className:`py-4 text-sm text-muted-foreground`,"data-testid":`md-detail-no-relationship-field`,children:[`Could not work out how `,(0,$.jsx)(`code`,{className:`font-mono`,children:i.childObject}),` links to `,(0,$.jsx)(`code`,{className:`font-mono`,children:u}),`: no lookup or master_detail field on it references the parent. Set`,` `,(0,$.jsx)(`code`,{className:`font-mono`,children:`relationshipField`}),` on this collection to the field that holds the parent record.`]}):i.columns?.length?(0,$.jsx)(y,{value:t[e.id]?.rows??[],onChange:t=>n(e.id,t),disabled:r,contextRecord:p,...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:yt(i.columns,{perms:f,objectName:i.childObject}),total_field:b?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||`Add`:i.addLabel}}):(0,$.jsx)(`p`,{className:`py-4 text-sm text-muted-foreground`,children:`Loading columns…`}):(0,$.jsxs)(`p`,{className:`py-4 text-sm text-muted-foreground`,"data-testid":`md-detail-no-child-object`,children:[`This collection has no child object configured: set`,` `,(0,$.jsx)(`code`,{className:`font-mono`,children:`childObject`}),` to the object whose rows it lists.`]})]},e.id)}),b&&(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:`Subtotal`}),(0,$.jsx)(`dd`,{className:`tabular-nums`,"data-testid":`md-subtotal`,children:w(v)})]}),(0,$.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,$.jsxs)(`dt`,{className:`text-muted-foreground`,children:[`Tax (`,x,`%)`]}),(0,$.jsx)(`dd`,{className:`tabular-nums`,"data-testid":`md-tax`,children:w(S)})]}),(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:`Total`}),(0,$.jsx)(`dd`,{className:`tabular-nums`,"data-testid":`md-grand-total`,children:w(C)})]})]})})]})},ar=({schema:e,dataSource:t,className:n})=>{let r=e.details||[],i=e.mode===`edit`&&!!e.recordId,a=r.some(e=>!e.relationshipField||!e.columns?.length||e.columns.some(e=>!e.type)),o=(0,Q.useMemo)(()=>er(r),[e.details]),s=(0,Q.useMemo)(()=>r.map((e,t)=>({id:o[t],config:e,status:a?`pending`:`ready`})),[e.details,o,a]),[c,u]=(0,Q.useState)(null),d=c??s;(0,Q.useEffect)(()=>{if(!a){u(s);return}if(!t||typeof t.getObjectSchema!=`function`)return;let n=!1;return(async()=>{let r=await Promise.all(s.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{if(r.relationshipField&&r.columns?.length)return{...n,config:{...r,columns:Un(r.columns,a)},status:`ready`};let t=Zn(r.childObject,a,e.objectName,{relationshipField:r.relationshipField,columns:r.columns,amountField:r.amountField});return{...n,status:`ready`,config:{...r,relationshipField:t.relationshipField,columns:t.columns,formFields:r.formFields??t.formFields,inlineMode:r.inlineMode??t.mode,amountField:r.amountField??t.amountField,sortField:r.sortField??t.sortField}}}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||u(r)})(),()=>{n=!0}},[t,e.objectName,e.details]);let[p,m]=(0,Q.useState)({}),h=(0,Q.useRef)(p);h.current=p;let g=(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);g.current=r})(),()=>{n=!0}},[t,e.objectName,e.details]);let[_,v]=(0,Q.useState)(0),[y,b]=(0,Q.useState)(!1),x=(0,Q.useRef)(!1),C=(0,Q.useRef)(null),w=(0,Q.useRef)(!1),E=`form-outcome:${Q.useId()}`,D=(0,Q.useCallback)(()=>{C.current&&=(clearTimeout(C.current),null)},[]),O=(0,Q.useCallback)(()=>{x.current=!1,b(!1),D()},[D]),k=(0,Q.useCallback)(()=>{x.current=!0,b(!0),D()},[D]),[A,j]=(0,Q.useState)(null),M=(0,Q.useRef)(null);M.current=A?.entryId??null;let N=tr(i&&t?d.flatMap(e=>e.config.childObject&&e.config.relationshipField?[e.config.childObject]:[]):[]),P=(0,Q.useRef)(0),F=(0,Q.useRef)({}),I=(0,Q.useRef)(new Set),L=(0,Q.useRef)(new Set),ee=(0,Q.useRef)({}),te=String(e.recordId),re=(0,Q.useCallback)(e=>M.current===e.id||nr(h.current[e.id],e.config,te,g.current[e.config.childObject]),[te]),ie=(0,Q.useCallback)(async function n(r,i){if(i===`bus`){if(re(r)){I.current.add(r.id);return}I.current.delete(r.id)}let a=P.current,o=(F.current[r.id]??0)+1;F.current[r.id]=o;let s=()=>P.current===a&&F.current[r.id]===o,c=r.config;if(!t||!c.relationshipField){m(e=>({...e,[r.id]:{rows:[],original:[]}}));return}let l=i!==`load`,u=h.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&&M.current===r.id){I.current.add(r.id);return}if(l&&h.current[r.id]?.rows!==u){n(r,`bus`);return}m(e=>l&&(e[r.id]?.rows!==u||M.current===r.id)?(I.current.add(r.id),e):{...e,[r.id]:{rows:d.map(e=>({...e})),original:d.map(e=>({...e}))}})}},[t,e.recordId,re]);(0,Q.useEffect)(()=>{if(I.current.clear(),L.current.clear(),i&&t)for(let e of d)ie(e,`load`);return()=>{P.current+=1}},[i,t,e.recordId,c]),(0,Q.useEffect)(()=>{for(let e of d){let t=e.config.childObject;if(!t||!e.config.relationshipField)continue;let n=N[t]??0,r=ee.current[e.id];ee.current[e.id]=n,r!==void 0&&r!==n&&ie(e,`bus`)}},[N,d,ie]),(0,Q.useEffect)(()=>{if(y)return;let e=I.current;for(let t of d)e.has(t.id)&&M.current!==t.id&&(L.current.has(t.id)||!re(t))&&(e.delete(t.id),ie(t,`replay`));L.current.clear()},[p,y,A,d,ie,re]);let z=(0,Q.useCallback)((e,t)=>{m(n=>({...n,[e]:{rows:t,original:n[e]?.original??[]}}))},[]),ae=e.taxRateField||`tax_rate`,B=A?p[A.entryId]?.rows?.[A.rowIdx]:void 0,V=A?d.find(e=>e.id===A.entryId)?.config:void 0,H=(0,Q.useCallback)((e,t,n)=>{m(r=>{let i=r[e]??{rows:[],original:[]};return{...r,[e]:{...i,rows:i.rows.map((e,r)=>r===t?{...e,...n}:e)}}})},[]),U=(0,Q.useCallback)(e=>{m(t=>{let n=t[e]??{rows:[],original:[]},r=[...n.rows,{}];return j({entryId:e,rowIdx:r.length-1,isNew:!0}),{...t,[e]:{...n,rows:r}}})},[]),W=(0,Q.useCallback)(()=>{j(e=>(e?.isNew&&m(t=>{let n=t[e.entryId];return n?{...t,[e.entryId]:{...n,rows:n.rows.filter((t,n)=>n!==e.rowIdx)}}:t}),null))},[]),oe=(0,Q.useCallback)(async t=>{O(),e.onSuccess||Z.success(i?e.title?`${e.title} saved`:`Saved`:`Created`,{id:E}),i||(m({}),v(e=>e+1)),await e.onSuccess?.(t)},[i,e.onSuccess,e.title,d.length,O,E]),G=(0,Q.useCallback)(t=>{w.current||O(),e.onError?.(t)},[e,O]),K=(0,Q.useCallback)(async n=>{if(!t)throw Error(`MasterDetailForm: dataSource is required`);let r={...n};d.forEach(e=>{let t=e.config;t.totalField&&(r[t.totalField]=kn(h.current[e.id]?.rows??[],t.amountField||`amount`))});let a=i?d.filter(e=>e.config.relationshipField).map(e=>({entryId:e.id,input:{childObject:e.config.childObject,relationshipField:e.config.relationshipField,rows:h.current[e.id]?.rows??[],original:h.current[e.id]?.original??[],childSchema:g.current[e.config.childObject]}})):null,o=a?Dn(e.objectName,String(e.recordId),r,a.map(e=>e.input)):En(e.objectName,r,d.filter(e=>e.config.relationshipField).map(e=>({childObject:e.config.childObject,relationshipField:e.config.relationshipField,rows:h.current[e.id]?.rows??[],childSchema:g.current[e.config.childObject]}))),s=await _e(t,o);if(a){let e=$n(o,s?.results,a);for(let t of e)L.current.add(t.entryId);m(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,d,e.objectName,e.recordId,i]),q=(0,Q.useCallback)(async e=>{if(w.current)throw Error(`This save was not sent: another save of this form was still in progress.`);w.current=!0,k();try{return await K(e)}finally{w.current=!1}},[K,k]),J=(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:e.title,showSubmit:!1,showCancel:!1,submitHandler:q,onSuccess:oe,onError:G}),[e,q,oe,G]),se=(0,Q.useRef)(null),Y=e.submitText??(i?`Save`:`Create`),X=ln(),ce=(0,Q.useCallback)(()=>{if(X.uploading){Z.error(X.reason);return}x.current||se.current?.querySelector(`form`)&&(x.current=!0,b(!0),Z.dismiss(E),setTimeout(()=>{(se.current?.querySelector(`form`))?.requestSubmit()},0),C.current=setTimeout(()=>O(),1500))},[O,E,X.uploading,X.reason]);return(0,Q.useEffect)(()=>()=>{C.current&&clearTimeout(C.current)},[]),(0,$.jsx)(un,{gate:X,children:(0,$.jsxs)(`div`,{className:T(`space-y-6`,n,e.className),children:[(0,$.jsx)(`div`,{ref:se,children:(0,$.jsx)(Mr,{schema:J,dataSource:t},_)}),(0,$.jsx)(ir,{entries:d,rowState:p,setRows:z,saving:y,formHostRef:se,taxRateField:ae,formKey:_,onRowExpand:(e,t)=>j({entryId:e,rowIdx:t}),onAddViaForm:U,parentObjectName:e.objectName}),A&&V&&(0,$.jsxs)(R,{className:`border-primary/40 shadow-none ring-1 ring-primary/10`,"data-testid":`md-row-form`,children:[(0,$.jsxs)(f,{className:`pb-2 flex flex-row items-center justify-between gap-2 space-y-0`,children:[(0,$.jsxs)(S,{className:`text-sm font-medium`,children:[V.title||`Line item`,` — row `,A.rowIdx+1]}),(0,$.jsx)(ne,{type:`button`,variant:`ghost`,size:`sm`,className:`h-7 text-xs text-muted-foreground`,onClick:W,children:`Close`})]}),(0,$.jsx)(l,{children:(0,$.jsx)(`fieldset`,{disabled:y,className:`min-w-0`,children:(0,$.jsx)(Mr,{schema:{type:`object-form`,objectName:V.childObject,mode:`edit`,initialData:B??{},...V.formFields?.length?{fields:V.formFields}:{},submitText:`Apply`,submitHandler:async e=>e,onSuccess:e=>{H(A.entryId,A.rowIdx,e),j(null)},onCancel:W},dataSource:t},`row-${A.entryId}-${A.rowIdx}`)})})]}),e.showSubmit!==!1&&(0,$.jsxs)(`div`,{className:`border-t border-border pt-4`,children:[(0,$.jsx)(dn,{gate:X}),(0,$.jsxs)(`div`,{className:`flex items-center justify-end gap-2`,children:[e.onCancel&&(0,$.jsx)(ne,{type:`button`,variant:`outline`,onClick:e.onCancel,disabled:y,"data-testid":`md-form-cancel`,children:e.cancelText??`Cancel`}),(0,$.jsx)(ne,{type:`button`,onClick:ce,disabled:y||a&&!c||X.uploading,"data-testid":`md-form-submit`,children:X.uploading?X.busyLabel:y?`Saving…`:Y})]})]})]})})};function or(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){it(r,e.objectName);continue}n.push(t)}return $e(n,e.customFields,t=>{let n=e.objectSchema?.fields?.[t];if(n)return{...st(t,e),group:n.group}})}function sr(e){return e.mode!==`create`&&!!e.recordId&&!!e.dataSource&&e.loadedRecordId!==e.recordId}a();function cr(e,t){let n=r({fieldGroups:t,fields:Object.fromEntries(e.map(e=>[e.name,{group:e.group}]))});if(!n)return null;let i=new Set(n.flatMap(e=>e.fields)),a=e.map(e=>e.name).filter(e=>!i.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 lr(e,t){return!!e||!!t}function ur(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 dr=new Set;function fr(e,t){dr.has(t)||(dr.add(t),console.warn(`[object-ui] ${ur(e)}`))}function pr(e,t){let n=!!e.collapsible||!!e.collapsed,r=lr(t.title,t.description);n&&!r&&fr(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 mr=4;function hr(e){let{key:t,title:n,description:r,visibleWhen:i,members:a,className:o,collapse:s}=e;if(!lr(n,r))return i==null?[]:[{name:`__section_gate_${t}`,type:`section-divider`,visibleWhen:i,fields:a,colSpan:mr}];let c={name:`__section_${t}`,label:n,type:`section-divider`,description:r,visibleWhen:i,fields:a,colSpan:mr};return o!==void 0&&(c.className=o),s&&(c.collapsible=s.collapsible,c.collapsed=s.collapsed,c.onToggle=s.onToggle),[c]}var gr=xe({"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.discardTitle`),_r=({schema:e,dataSource:t,className:n})=>{let{fieldLabel:r,sectionLabel:i}=Se(),a=s(),{userId:o}=a,{t:l}=gr(),u=ln(),d=ye(),[f,p]=(0,Q.useState)(null),g=(0,Q.useCallback)(t=>_t(t,{perms:a,objectName:e.objectName,mode:e.mode,objectSchema:f}),[a,e.objectName,e.mode,f]),[_,v]=(0,Q.useState)([]),[y,b]=(0,Q.useState)({}),[x,S]=(0,Q.useState)(!0),[C,w]=(0,Q.useState)($t),E=(0,Q.useRef)({schema:0,record:0}),M=tn(C),[P,ee]=(0,Q.useState)(!1),[re,R]=(0,Q.useState)(!1),{saveWithOcc:ie,conflictDialog:z}=Qt(),[ae,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)(),[G,K]=(0,Q.useState)({});(0,Q.useEffect)(()=>{let n=!1,r=en(E,w,`schema`);return(async()=>{if(!t){S(!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),S(!1)}})(),()=>{n=!0}},[e.objectName,t]);let q=(0,Q.useRef)(void 0),J=(0,Q.useRef)(null),{refetch:se,onDirtyChange:Y,saved:X}=Pe(e.objectName,e.recordId,!!e.recordId&&e.mode!==`create`),ce=(0,Q.useCallback)(e=>{ee(e),Y(e)},[Y]);(0,Q.useEffect)(()=>{let n=!1,r=en(E,w,`record`);return(f||!t)&&(async()=>{if(e.mode===`create`||!e.recordId){J.current=null,b(Xe(f,ft(e),{currentUserId:o})),r.commit(),S(!1);return}if(!t){J.current=null,b(ft(e)),r.commit(),S(!1);return}q.current!==e.recordId&&(S(!0),ee(!1));try{let i=await t.findOne(e.objectName,e.recordId);if(n)return;q.current=e.recordId,J.current=Tt(e,i),b(i||{}),r.commit()}catch(e){if(n)return;r.fail(e)}finally{n||S(!1)}})(),()=>{n=!0}},[f,e.mode,e.recordId,e.initialData,e.initialValues,t,e.objectName,se]);let le=(0,Q.useCallback)(t=>dt(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=sr({mode:e.mode,recordId:e.recordId,dataSource:t,loadedRecordId:q.current}),i=()=>{n||S(!1)};if(e.sections?.length){i();return}(f||e.customFields?.length)&&(v(or({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 ue=(0,Q.useMemo)(()=>{if(e.sections?.length)return null;let t=Bt(_,f);e.mode===`create`&&(t=Vt(t,f));let n=cr(t,f?.fieldGroups);if(!n)return null;let r=e.columns&&e.columns>0?Math.min(Math.floor(e.columns),4):Ft(t.length);return n.map(e=>({...e,columns:r}))},[e.sections,e.columns,e.mode,_,f]),de=(0,Q.useCallback)(async n=>{if(u.uploading){Z.error(u.reason);return}B(!0);try{if(!t&&!e.submitHandler&&an(e))return e.onSuccess&&await e.onSuccess(n),e.onOpenChange?.(!1),n;let r,i=St(n,f,{canEdit:pt(a,e.objectName)}),o=e.mode===`create`?Ze(i,f):Dt(i,J.current,e);if(e.submitHandler)r=await e.submitHandler(o);else if(!t)throw sn();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 J.current=Ot(J.current,e,o),X(),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,X]),fe=(0,Q.useCallback)(()=>{R(!1),V.current&&(V.current=!1,e.onCancel?.()),e.onOpenChange?.(!1)},[e]),pe=(0,Q.useCallback)(e=>{V.current=e,H&&P?R(!0):fe()},[H,P,fe]);(0,Q.useEffect)(()=>{if(!U||!P||!H)return;let e=e=>{e.preventDefault(),e.returnValue=``};return window.addEventListener(`beforeunload`,e),()=>window.removeEventListener(`beforeunload`,e)},[U,P,H]);let he=(0,Q.useCallback)(()=>{V.current=!0,fe()},[fe]),ge=(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]),_e=e.layout===`vertical`||e.layout===`horizontal`?e.layout:`vertical`,ve=e.showSubmit!==!1&&e.mode!==`view`,be=e.showCancel!==!1,xe=e.submitText||(e.mode===`create`?`Create`:`Update`),Ce=e.cancelText||`Cancel`,we={type:`form`,objectName:e.objectName,layout:_e,defaultValues:y,previousValues:e.mode===`edit`&&e.recordId?y:void 0,submitLabel:xe,cancelLabel:Ce,showSubmit:ve,showCancel:be,onSubmit:de,onCancel:he,onDirtyChange:ce,showActions:!1,id:oe},Te=()=>{if(M)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:`Error loading form`}),(0,$.jsx)(`p`,{className:`text-red-600 text-sm mt-1`,children:M.message})]});if(x)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:`Loading form...`})]});if(e.sections?.length){let t=[];return e.sections.forEach((n,r)=>{let i=n.name||String(r),a=g(le(n)),o=pr(n,{live:G[i],title:n.label,description:n.description,where:`DrawerForm section '${i}' of object '${e.objectName}'`,setCollapsed:e=>K(t=>({...t,[i]:e}))});t.push(...hr({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)(me,{schema:{...we,fields:t}})}if(ue?.length){let t=Number(ue[0]?.columns)||1,n=[];ue.forEach((r,a)=>{let o=g(le(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=pr(r,{live:G[s],title:c,description:r.description,where:`DrawerForm field group '${s}' of object '${e.objectName}'`,setCollapsed:e=>K(t=>({...t,[s]:e}))});n.push(...hr({key:s,title:c,description:r.description,visibleWhen:r.visibleWhen,members:o.map(e=>e.name),collapse:l}));let u=t>1?Rt(o,t):o;n.push(...l.collapsed?u.map(e=>({...e,hidden:!0})):u)});let r=Ht[t];return(0,$.jsx)(me,{schema:{...we,fields:n,columns:t,...r?{fieldContainerClass:r}:{}}})}let t=Gt(g(_),f,e.columns,e.mode),n=Ht[t.columns||1];return(0,$.jsx)(me,{schema:{...we,fields:t.fields,columns:t.columns,...n?{fieldContainerClass:n}:{}}})},Ee=e.subforms,De=Ee?.length&&e.mode!==`view`?(0,$.jsx)(ar,{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:Ce,details:Ee,onSuccess:async t=>{await e.onSuccess?.(t),e.onOpenChange?.(!1)},onError:e.onError,onCancel:()=>e.onOpenChange?.(!1)},dataSource:t}):Te();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})]}),De]}):(0,$.jsx)(N,{open:U,onOpenChange:t=>{if(t){e.onOpenChange?.(!0);return}pe(!1)},children:(0,$.jsxs)(c,{side:W,className:T(`overflow-y-auto`,n,e.className),style:ge,children:[(e.title||e.description)&&(0,$.jsxs)(m,{children:[e.title&&(0,$.jsx)(h,{children:e.title}),e.description?(0,$.jsx)(j,{children:e.description}):(0,$.jsx)(j,{className:`sr-only`,children:l(`form.dialogDescriptionFallback`)})]}),(0,$.jsx)(`div`,{className:`@container py-4`,children:(0,$.jsx)(un,{gate:u,children:De})}),!M&&!x&&!(Ee?.length&&e.mode!==`view`)&&(ve||be)&&(0,$.jsxs)(`div`,{className:`shrink-0 border-t px-4 py-3 bg-background`,"data-testid":`drawer-form-footer`,children:[(0,$.jsx)(dn,{gate:u}),(0,$.jsxs)(`div`,{className:`flex flex-col sm:flex-row gap-2 sm:justify-end`,children:[be&&(0,$.jsx)(ne,{type:`button`,variant:`outline`,onClick:he,disabled:ae,className:`w-full sm:w-auto`,children:Ce}),ve&&(0,$.jsxs)(ne,{type:`submit`,form:oe,disabled:ae||u.uploading,className:`w-full sm:w-auto`,children:[ae&&(0,$.jsx)(Ae,{className:`mr-2 h-4 w-4 animate-spin`}),u.uploading?u.busyLabel:xe]})]})]}),(0,$.jsx)(F,{open:re,onOpenChange:R,children:(0,$.jsxs)(O,{children:[(0,$.jsxs)(A,{children:[(0,$.jsx)(k,{children:l(`form.discardTitle`)}),(0,$.jsx)(L,{children:l(`form.discardMessage`)})]}),(0,$.jsxs)(I,{children:[(0,$.jsx)(D,{onClick:()=>{V.current=!1},children:l(`form.keepEditing`)}),(0,$.jsx)(te,{onClick:fe,children:l(`form.discard`)})]})]})}),z]})})},vr=xe({"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.discardTitle`),yr={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`},br=({schema:e,dataSource:t,className:n})=>{let{fieldLabel:r,sectionLabel:i}=Se(),{t:a}=vr(),o=ln(),c=ye(),l=s(),[d,f]=(0,Q.useState)(null),p=(0,Q.useCallback)(t=>_t(t,{perms:l,objectName:e.objectName,mode:e.mode,objectSchema:d}),[l,e.objectName,e.mode,d]),[m,h]=(0,Q.useState)([]),[_,y]=(0,Q.useState)({}),[x,S]=(0,Q.useState)(!0),[C,w]=(0,Q.useState)($t),E=(0,Q.useRef)({schema:0,record:0}),j=tn(C),[N,ee]=(0,Q.useState)(!1),[re,R]=(0,Q.useState)(!1),[ie,z]=(0,Q.useState)(!1),[ae,B]=(0,Q.useState)({}),{saveWithOcc:V,conflictDialog:H}=Qt(),U=(0,Q.useRef)(!1),W=e.confirmOnDiscard!==!1,oe=e.open!==!1,G=(0,Q.useId)(),K=(0,Q.useMemo)(()=>{if(e.sections?.length)return null;let t=Bt(m,d);e.mode===`create`&&(t=Vt(t,d));let n=cr(t,d?.fieldGroups);if(!n)return null;let r=e.columns&&e.columns>0?Math.min(Math.floor(e.columns),4):Ft(t.length);return n.map(e=>({...e,columns:r}))},[e.sections,e.columns,e.mode,m,d]),q=e.sections?.length?e.sections:K??void 0,J=(0,Q.useMemo)(()=>q?.length?null:Gt(m,d,e.columns,e.mode),[m,d,e.columns,e.mode,q]),se=yr[(0,Q.useMemo)(()=>{if(e.modalSize)return e.modalSize;if(J?.columns&&J.columns>1)return Wt(J.columns);if(q?.length){let e=Math.max(...q.map(e=>Number(e.columns)||1));if(e>1)return Wt(e)}return`default`},[e.modalSize,J,q])]||yr.default;(0,Q.useEffect)(()=>{let n=!1,r=en(E,w,`schema`);return(async()=>{if(!t){S(!1);return}try{let i=await t.getObjectSchema(e.objectName);if(n)return;f(i),r.commit()}catch(e){if(n)return;r.fail(e),S(!1)}})(),()=>{n=!0}},[e.objectName,t]);let Y=(0,Q.useRef)(void 0),X=(0,Q.useRef)(null),{refetch:ce,onDirtyChange:le,saved:ue}=Pe(e.objectName,e.recordId,!!e.recordId&&e.mode!==`create`),de=(0,Q.useCallback)(e=>{R(e),le(e)},[le]);(0,Q.useEffect)(()=>{let n=!1,r=en(E,w,`record`);return(d||!t)&&(async()=>{if(e.mode===`create`||!e.recordId){X.current=null,y(Xe(d,ft(e),{currentUserId:l.userId})),r.commit(),S(!1);return}if(!t){X.current=null,y(ft(e)),r.commit(),S(!1);return}Y.current!==e.recordId&&(S(!0),R(!1));try{let i=await t.findOne(e.objectName,e.recordId);if(n)return;Y.current=e.recordId,X.current=Tt(e,i),y(i||{}),r.commit()}catch(e){if(n)return;r.fail(e)}finally{n||S(!1)}})(),()=>{n=!0}},[d,e.mode,e.recordId,e.initialData,e.initialValues,t,e.objectName,ce]);let fe=(0,Q.useCallback)(t=>dt(t,{objectSchema:d,objectName:e.objectName,readOnly:e.readOnly,mode:e.mode,recordId:e.recordId,fieldLabel:r,customFields:e.customFields}),[d,e.readOnly,e.mode,e.recordId,e.objectName,e.customFields,r]);(0,Q.useEffect)(()=>{if(!d&&t)return;let n=sr({mode:e.mode,recordId:e.recordId,dataSource:t,loadedRecordId:Y.current}),i=()=>{n||S(!1)};if(e.sections?.length){i();return}(d||e.customFields?.length)&&(h(or({fields:e.fields,objectSchema:d,objectName:e.objectName,readOnly:e.readOnly,mode:e.mode,recordId:e.recordId,fieldLabel:r,customFields:e.customFields})),i())},[d,e.fields,e.customFields,e.sections,e.readOnly,e.mode,t]);let pe=(0,Q.useCallback)(async n=>{if(o.uploading){Z.error(o.reason);return}ee(!0);try{if(!t&&!e.submitHandler&&an(e))return e.onSuccess&&await e.onSuccess(n),e.onOpenChange?.(!1),n;let r,i=St(n,d,{canEdit:pt(l,e.objectName)}),a=e.mode===`create`?Ze(i,d):Dt(i,X.current,e);if(e.submitHandler)r=await e.submitHandler(a);else if(!t)throw sn();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:_});if(n.status===`cancelled`)return;r=n.result}return X.current=Ot(X.current,e,a),ue(),e.onSuccess&&await e.onSuccess(r),e.onOpenChange?.(!1),r}catch(t){throw e.onError&&e.onError(t),t}finally{ee(!1)}},[e,t,d,l,V,_,o.uploading,o.reason,ue]),he=(0,Q.useCallback)(()=>{z(!1),U.current&&(U.current=!1,e.onCancel?.()),e.onOpenChange?.(!1)},[e]),ge=(0,Q.useCallback)(e=>{U.current=e,W&&re?z(!0):he()},[W,re,he]);(0,Q.useEffect)(()=>{if(!oe||!re||!W)return;let e=e=>{e.preventDefault(),e.returnValue=``};return window.addEventListener(`beforeunload`,e),()=>window.removeEventListener(`beforeunload`,e)},[oe,re,W]);let _e=(0,Q.useCallback)(()=>{U.current=!0,he()},[he]),ve=e.layout===`vertical`||e.layout===`horizontal`?e.layout:`vertical`,be=e.showSubmit!==!1&&e.mode!==`view`,xe=e.showCancel!==!1,Ce=e.submitText||(e.mode===`create`?`Create`:`Update`),we=e.cancelText||`Cancel`,Te={type:`form`,objectName:e.objectName,layout:ve,defaultValues:_,previousValues:e.mode===`edit`&&e.recordId?_:void 0,submitLabel:Ce,cancelLabel:we,showSubmit:be,showCancel:xe,onSubmit:pe,onCancel:_e,onDirtyChange:de,showActions:!1,id:G},Ee=()=>{if(j)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:`Error loading form`}),(0,$.jsx)(`p`,{className:`text-red-600 text-sm mt-1`,children:j.message})]});if(x)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)(u,{className:`h-4 w-24`}),(0,$.jsx)(u,{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=Ht[s],l=t.map((t,i)=>{let o=p(fe(t)),c=n(t,i),l=r(t);return{key:c,title:l,description:t.description,resolveCollapse:()=>pr(t,{live:ae[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?Rt(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)(me,{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(...hr({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)(me,{schema:{...u,fields:d}})}if(K?.length){let t=Number(K[0]?.columns)||1,n=[];K.forEach((r,a)=>{let o=p(fe(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=pr(r,{live:ae[c],title:s,description:r.description,where:`ModalForm field group '${c}' of object '${e.objectName}'`,setCollapsed:e=>B(t=>({...t,[c]:e}))});n.push(...hr({key:c,title:s,description:r.description,visibleWhen:r.visibleWhen,members:o.map(e=>e.name),collapse:l}));let u=t>1?Rt(o,t):o;n.push(...l.collapsed?u.map(e=>({...e,hidden:!0})):u)});let r=Ht[t];return(0,$.jsx)(me,{schema:{...Te,fields:n,columns:t,...r?{fieldContainerClass:r}:{}}})}let t=J??Gt(m,d,e.columns,e.mode),n=Ht[t.columns||1];return(0,$.jsx)(me,{schema:{...Te,fields:p(t.fields),columns:t.columns,...n?{fieldContainerClass:n}:{}}})},De=e.subforms;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})]}),Ee()]});if(De?.length&&e.mode!==`view`)return(0,$.jsx)(P,{open:oe,onOpenChange:e.onOpenChange,children:(0,$.jsxs)(b,{className:T(se,`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)(g,{className:`shrink-0 px-4 pt-4 sm:px-6 sm:pt-6 pb-2 border-b`,children:[e.title&&(0,$.jsx)(v,{children:e.title}),e.description?(0,$.jsx)(M,{children:e.description}):(0,$.jsx)(M,{className:`sr-only`,children:`Enter the record and its line items, then save.`})]}),(0,$.jsx)(`div`,{className:`@container flex-1 overflow-y-auto px-4 sm:px-6 py-4`,children:(0,$.jsx)(ar,{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:De,onSuccess:async t=>{await e.onSuccess?.(t),e.onOpenChange?.(!1)},onError:e.onError,onCancel:()=>e.onOpenChange?.(!1)},dataSource:t})})]})});let Oe=!x&&!j&&(be||xe);return(0,$.jsx)(P,{open:oe,onOpenChange:t=>{if(t){e.onOpenChange?.(!0);return}ge(!1)},children:(0,$.jsxs)(b,{className:T(se,`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)(g,{className:`shrink-0 px-4 pt-4 sm:px-6 sm:pt-6 pb-2 border-b`,children:[e.title&&(0,$.jsx)(v,{children:e.title}),e.description?(0,$.jsx)(M,{children:e.description}):(0,$.jsx)(M,{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,$.jsx)(un,{gate:o,children:Ee()})}),Oe&&(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)(dn,{gate:o}),(0,$.jsxs)(`div`,{className:`flex flex-col sm:flex-row gap-2 sm:justify-end`,children:[xe&&(0,$.jsx)(ne,{type:`button`,variant:`outline`,onClick:_e,disabled:N,className:`w-full sm:w-auto`,children:we}),be&&(0,$.jsxs)(ne,{type:`submit`,form:G,disabled:N||o.uploading,className:`w-full sm:w-auto`,children:[N&&(0,$.jsx)(Ae,{className:`mr-2 h-4 w-4 animate-spin`}),o.uploading?o.busyLabel:Ce]})]})]}),(0,$.jsx)(F,{open:ie,onOpenChange:z,children:(0,$.jsxs)(O,{children:[(0,$.jsxs)(A,{children:[(0,$.jsx)(k,{children:a(`form.discardTitle`)}),(0,$.jsx)(L,{children:a(`form.discardMessage`)})]}),(0,$.jsxs)(I,{children:[(0,$.jsx)(D,{onClick:()=>{U.current=!1},children:a(`form.keepEditing`)}),(0,$.jsx)(te,{onClick:he,children:a(`form.discard`)})]})]})}),H]})})},xr=[`name`,`label`,`description`,`collapsible`,`collapsed`,`visibleWhen`],Sr=[`columns`,`pane`],Cr=new Set;function wr(e,t){Cr.has(e)||(Cr.add(e),t())}function Tr(e){return Array.isArray(e)&&e.some(e=>typeof e==`object`&&!!e&&typeof e.group==`string`)}function Er(e){let t=e?.fields;return!t||typeof t!=`object`?null:cr(Object.entries(t).map(([e,t])=>({name:e,group:t?.group})),e?.fieldGroups)}function Dr(e,t){if(!Tr(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`&&wr(`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`?Or(e,[]):e)}let s=a?Er(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);Ar(e,t,r);let i=c.get(t);return i?{...i,...n}:((a||!o)&&wr(`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\`.)`)),Or(e,[]))})}function Or(e,t){return{...kr(e),fields:t}}function kr(e){let t={};for(let n of Sr){let r=e[n];r!==void 0&&(t[n]=r)}return t}function Ar(e,t,n){let r=xr.filter(t=>e[t]!==void 0);r.length!==0&&wr(`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 Mr=({schema:e,dataSource:t})=>{let n=s(),r=Tr(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 c=(0,Q.useMemo)(()=>{let t=jr(e),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=Dr(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 c=e=>ht(e,{perms:n,objectName:o.objectName,mode:o.mode});return s({...o,fields:c(o.fields),sections:o.sections?.map(e=>({...e,fields:c(e.fields)}))})},[e,n,a,i]),{sectionLabel:l}=Se(),u=e=>e?.name?l(c.objectName,e.name,e.label||e.name):e?.label,d=!!c.subforms?.length&&c.mode!==`view`&&c.formType!==`drawer`&&c.formType!==`modal`,f=!d&&c.formType===`wizard`?c.formType:null,p=(c.sections??[]).filter(e=>e?.visibleWhen!=null).map(e=>e?.name||e?.label||`(unnamed)`).join(`, `);if((0,Q.useEffect)(()=>{f&&p&&console.warn(We(f,p))},[f,p]),d)return(0,$.jsx)(ar,{schema:{type:`object-master-detail-form`,objectName:c.objectName,mode:c.mode===`edit`?`edit`:`create`,recordId:c.recordId,initialValues:c.initialValues,initialData:c.initialData,formType:c.formType===`tabbed`?`tabbed`:`simple`,sections:c.sections,fields:c.fields,title:c.title,submitText:c.submitText,cancelText:c.cancelText,showSubmit:c.showSubmit,details:c.subforms,onSuccess:c.onSuccess,onError:c.onError,onCancel:c.onCancel,className:c.className},dataSource:t});if(c.formType===`tabbed`&&c.sections?.length)return(0,$.jsx)(fn,{schema:{...c,formType:`tabbed`,sections:c.sections.map(e=>({name:e.name,label:u(e),description:e.description,columns:e.columns,fields:e.fields??[],visibleWhen:e.visibleWhen})),defaultTab:c.defaultTab,tabPosition:c.tabPosition},dataSource:t,className:c.className});if(c.formType===`wizard`&&c.sections?.length)return(0,$.jsx)(yn,{schema:{...c,formType:`wizard`,sections:c.sections.map(e=>({name:e.name,label:u(e),description:e.description,columns:e.columns,fields:e.fields??[]})),allowSkip:c.allowSkip,showStepIndicator:c.showStepIndicator,nextText:c.nextText,prevText:c.prevText,onStepChange:c.onStepChange},dataSource:t,className:c.className});if(c.formType===`split`&&c.sections?.length)return(0,$.jsx)(bn,{schema:{...c,formType:`split`,sections:c.sections.map(e=>({name:e.name,label:u(e),description:e.description,columns:e.columns,fields:e.fields??[],pane:e.pane,visibleWhen:e.visibleWhen})),splitDirection:c.splitDirection,splitSize:c.splitSize,splitResizable:c.splitResizable},dataSource:t,className:c.className});if(c.formType===`drawer`){let{layout:e,...n}=c,r=c.layout===`vertical`||c.layout===`horizontal`?c.layout:void 0;return(0,$.jsx)(_r,{schema:{...n,layout:r,formType:`drawer`,sections:c.sections?.map(e=>({name:e.name,label:u(e),description:e.description,columns:e.columns,fields:e.fields??[],collapsible:e.collapsible,collapsed:e.collapsed,visibleWhen:e.visibleWhen})),open:c.open,onOpenChange:c.onOpenChange,drawerSide:c.drawerSide,drawerWidth:c.drawerWidth},dataSource:t,className:c.className})}if(c.formType===`modal`){let{layout:e,...n}=c,r=c.layout===`vertical`||c.layout===`horizontal`?c.layout:void 0;return(0,$.jsx)(br,{schema:{...n,layout:r,formType:`modal`,sections:c.sections?.map(e=>({name:e.name,label:u(e),description:e.description,columns:e.columns,fields:e.fields??[],collapsible:e.collapsible,collapsed:e.collapsed,visibleWhen:e.visibleWhen})),open:c.open,onOpenChange:c.onOpenChange,modalSize:c.modalSize,modalCloseButton:c.modalCloseButton},dataSource:t,className:c.className})}return(0,$.jsx)(Nr,{schema:c,dataSource:t})},Nr=({schema:e,dataSource:t})=>{let{fieldLabel:n,sectionLabel:r}=Se(),i=_(),a=ln(),o=s(),[c,l]=(0,Q.useState)(null),u=(0,Q.useCallback)(t=>_t(t,{perms:o,objectName:e.objectName,mode:e.mode,objectSchema:c,deniedDescription:`You do not have edit access to this field.`}),[o,e.objectName,e.mode,c]),[d,f]=(0,Q.useState)([]),[m,h]=(0,Q.useState)(null),[g,v]=(0,Q.useState)(!0),[y,b]=(0,Q.useState)($t),x=Q.useRef({schema:0,record:0}),S=tn(y),[C,T]=(0,Q.useState)(null),[D,O]=(0,Q.useState)(null);Ue(D);let{saveWithOcc:k,conflictDialog:A}=Qt(),j=Q.useRef(null),M=e.customFields&&e.customFields.length>0;(0,Q.useEffect)(()=>{M&&(h(ft(e)),e.objectName&&t||v(!1))},[M,e.initialData,e.initialValues,e.objectName,t]),(0,Q.useEffect)(()=>{let n=!1,r=en(x,b,`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}"`);l(i),r.commit()}catch(e){if(n)return;if(M){l(i),r.commit(),v(!1);return}r.fail(e),v(!1)}})():M?(l(i),r.commit()):v(!1),()=>{n=!0}},[e.objectName,t,M]);let N=!!e.recordId&&e.mode!==`create`&&!M,{refetch:P,onDirtyChange:F,saved:I}=Pe(e.objectName,e.recordId,N),L=Q.useRef(0);(0,Q.useEffect)(()=>{let n=P!==L.current;L.current=P;let r=!1,i=en(x,b,`record`);return c&&!M&&(async()=>{if(!e.recordId||e.mode===`create`){j.current=null,h(ft(e)),i.commit(),v(!1);return}if(!M){if(!t){i.fail(Error(`DataSource is required for fetching record data (inline data not provided)`)),v(!1);return}n||v(!0);try{let n=await t.findOne(e.objectName,e.recordId);if(r)return;j.current=Tt(e,n),h(n),i.commit()}catch(e){if(r)return;console.error(`Failed to fetch record:`,e),i.fail(e)}finally{r||v(!1)}}})(),()=>{r=!0}},[e.objectName,e.recordId,e.mode,e.initialValues,e.initialData,t,c,M,P]);let ee=(0,Q.useCallback)(e=>e,[]);(0,Q.useEffect)(()=>{if(!c)return;let r=e.fields||Object.keys(c.fields||{}),i=Array.isArray(r)?r:Object.keys(r),a=[];i.forEach(t=>{let n=typeof t==`string`?t:t.name;if(!n){it(t,e.objectName);return}a.push({name:n,entry:t})}),f($e(a.map(e=>e.name),e.customFields,(t,r)=>{let i=a[r].entry,o=c.fields?.[t];if(o){let r={name:t,label:n(e.objectName,t,o.label||i),type:p(o.type,{multiple:o.multiple}),required:qe(o,Ke(e)),disabled:e.readOnly||e.mode===`view`||o.readonly,placeholder:o.placeholder,description:o.help||o.description,validation:w(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??o.max_length,r.minLength=o.minLength??o.min_length),(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: ${E(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}},ee)),!M&&e.recordId&&e.mode!==`create`&&t||v(!1)},[c,e.fields,e.customFields,e.readOnly,e.mode,e.objectName,M,e.recordId,t]);let te=(0,Q.useCallback)(async(n,r)=>{if(a.uploading){Z.error(a.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&&M)return e.onSuccess&&await e.onSuccess(n),n;let{payload:i,writePayload:s}=kt(n,e,{objectSchema:c,canEdit:pt(o,e.objectName),snapshot:j.current});try{let n;if(e.submitHandler)n=await e.submitHandler(s);else if(!t)throw sn();else if(e.mode===`create`)n=await t.create(e.objectName,i);else if(e.mode===`edit`&&e.recordId){let r=await k({dataSource:t,objectName:e.objectName,recordId:e.recordId,payload:s,baseRecord:m});if(r.status===`cancelled`)return;n=r.result}else throw Error(`Invalid form mode or missing record ID`);if(j.current=Ot(j.current,e,s),I(),e.onSuccess)await e.onSuccess(n);else if(!e.submitHandler&&e.submitBehavior){let t=e.submitBehavior;switch(t.kind){case`redirect`:{let r=He(t.url,Ve(i,n));if(!r.ok){Z.error(r.refusal),T({message:e.successMessage||(e.mode===`create`?`Created`:`Saved`),refusal:r.refusal});break}O({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`?`Created`:`Saved`);Z.success(n),T({title:t.kind===`thank-you`?t.title:void 0,message:n});break}}}else if(!e.submitHandler){let t=Re(e.navigateOnSuccess,n);if(t)return O({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`?`Created`:`Saved`),{description:mn})):Z.success(e.successMessage||(e.mode===`create`?`Created`:`Saved`))}return n}catch(t){throw console.error(`Failed to submit form:`,t),e.onError&&e.onError(t),t}},[e,t,M,o,c,k,m,a.uploading,a.reason,I]),ne=(0,Q.useCallback)(()=>{e.onCancel&&e.onCancel()},[e]),re=Ke(e),R={...Q.useMemo(()=>re?Je(c,{currentUserId:o.userId}):{},[c,re,o.userId]),...m},ie=e.mode===`edit`&&e.recordId&&m&&typeof m==`object`?m:void 0,z=Q.useMemo(()=>{let t=Bt(d,c);return e.mode===`create`&&(t=Vt(t,c)),t},[d,c,e.mode]),ae=Q.useMemo(()=>e.sections?.length?null:cr(z,c?.fieldGroups),[e.sections,z,c]),B=e.sections?.length?e.sections:ae,[V,H]=(0,Q.useState)({});if(S)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:`Error loading form`}),(0,$.jsx)(`p`,{className:`text-red-600 text-sm mt-1`,children:S.message})]});if(g)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:`Loading form...`})]});if(C){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:C.title??`Thanks!`}),C.message&&(0,$.jsx)(`p`,{className:`mt-2 text-sm text-muted-foreground`,children:C.message})]});return C.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:C.refusal})]}):e}let U=e.layout===`vertical`||e.layout===`horizontal`?e.layout:`vertical`;if(B?.length&&(!e.formType||e.formType===`simple`)){let t=ae?z:d,i=e=>typeof e==`number`&&e>0?Math.min(Math.floor(e),4):void 0,o=B.map(e=>i(e.columns)).filter(e=>e!=null),s=B.reduce((e,t)=>e+(Array.isArray(t.fields)?t.fields.length:0),0),l=i(e.columns)??(o.length?Math.max(...o):Ft(s)),f=[],p={objectSchema:c,objectName:e.objectName,readOnly:e.readOnly,mode:e.mode,recordId:e.recordId,fieldLabel:n,customFields:e.customFields,pool:t};B.forEach((n,a)=>{let o=(n.fields??[]).map(ct);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)||(c?.fields?.[t]!=null||(e.customFields??[]).some(e=>e?.name===t))&&ot(t,e.objectName,n.name||n.label)})}let s=u(dt(n,p));if(s.length===0)return;let d=n.name||n.label||String(a),m=n.name?r(e.objectName,n.name,n.label||n.name):n.label,h=pr(n,{live:V[d],title:m,description:n.description,where:`ObjectForm section '${d}' of object '${e.objectName}'`,setCollapsed:e=>H(t=>({...t,[d]:e}))});f.push(...hr({key:d,title:m,description:n.description,visibleWhen:n.visibleWhen,members:s.map(e=>e.name),collapse:h}));let g=i(n.columns),_=l>1?Rt(s,l,g):s;h.collapsed?f.push(..._.map(e=>({...e,hidden:!0}))):f.push(..._)});let m=f,h=Ut(l);return(0,$.jsx)(un,{gate:a,children:(0,$.jsxs)(`div`,{className:`w-full @container`,children:[(0,$.jsx)(me,{schema:{type:`form`,objectName:e.objectName,fields:m,layout:U,columns:l,...h?{fieldContainerClass:h}:{},defaultValues:R,previousValues:ie,showSubmit:e.showSubmit!==!1&&e.mode!==`view`,showCancel:e.showCancel!==!1,submitLabel:a.uploading?a.busyLabel:e.submitText||(e.mode===`create`?`Create`:`Update`),cancelLabel:e.cancelText,onSubmit:te,onCancel:ne,onDirtyChange:F}}),(0,$.jsx)(dn,{gate:a}),A]})})}let W=e.sections?.length,oe=u(d),G=W?{fields:oe,columns:e.columns}:Gt(oe,c,e.columns,e.mode),K=e.mobile,q=K?.fullscreenLongText?G.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}}):G.fields,J=K?.stepper,se=K?.stepperMinFields??8,Y=Math.max(1,K?.stepperFieldsPerStep??1);if(!e.formType&&!W&&q.length>=2&&(J===!0||J===`auto`&&i&&q.length>=se)){let n=q,r=[];for(let e=0;e<n.length;e+=Y){let t=n.slice(e,e+Y);r.push({name:`step-${Math.floor(e/Y)+1}`,label:t[0]?.label||t[0]?.name||`Step ${Math.floor(e/Y)+1}`,fields:t})}return(0,$.jsx)(yn,{schema:{...e,formType:`wizard`,sections:r,showStepIndicator:!0},dataSource:t,className:e.className})}let X={type:`form`,objectName:e.objectName,fields:q,layout:U,columns:G.columns,submitLabel:a.uploading?a.busyLabel:e.submitText||(e.mode===`create`?`Create`:`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:R,previousValues:ie,onSubmit:te,onCancel:ne,onDirtyChange:F,className:e.className,mobileStickyActions:!!K?.stickyActions};return(0,$.jsx)(un,{gate:a,children:(0,$.jsxs)(`div`,{className:K?.stickyActions?`w-full pb-20 md:pb-0`:`w-full`,"data-mobile-form":K?`true`:void 0,children:[(0,$.jsx)(me,{schema:X}),(0,$.jsx)(dn,{gate:a}),A]})})},Pr=`https://a.invalid/`,Fr=`https://b.invalid/`;function Ir(e){try{return new URL(e,Pr).origin===`https://a.invalid`&&new URL(e,Fr).origin===`https://b.invalid`}catch{return!1}}function Lr(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=Ir(e.url)?n.current:void 0;if(t){t(e.url);return}window.location.href=e.url},e.delayMs);return()=>clearTimeout(t)},[e])}var Rr=1e3;function zr(e){return e?Math.max(0,Math.ceil(e.delayMs/1e3)):null}function Br(e){let[t,n]=(0,Q.useState)(e),[r,i]=(0,Q.useState)(()=>zr(e));return e!==t&&(n(e),i(zr(e))),(0,Q.useEffect)(()=>{if(!e)return;let t=setInterval(()=>{i(e=>e===null||e<=1?(clearInterval(t),0):e-1)},Rr);return()=>clearInterval(t)},[e]),r}var Vr=5e3,Hr={text:200,email:254,url:2048,phone:32,textarea:Vr,...Object.fromEntries(ee.map(e=>[e,Vr]))},Ur=`_company_website_2`,Wr=1500;function Gr(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 Kr(e){return e&&e.map(e=>{let t=Hr[String(e.type||``).toLowerCase()];return!t||(e.maxLength??e.max_length)?e:{...e,maxLength:t}})}var qr=({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]),Lr(m);let b=Br(m),x=e.honeypot===!1?null:e.honeypot||Ur,S=e.minFillTime??Wr,C=(0,Q.useMemo)(()=>Kr(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(Gr(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)(ke,{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)(ne,{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)(Mr,{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)(Ae,{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)(je,{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)(Me,{className:`h-3 w-3`,"aria-hidden":`true`}),k.consentLink??`Privacy policy`]}),(0,$.jsx)(`span`,{children:k.poweredBy??`Powered by ObjectStack`})]})]})]})})};function Jr(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 Yr=({formId:e,formTitle:t,metrics:n,className:r})=>{let i=Ce(),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)(R,{children:(0,$.jsxs)(f,{className:`pb-2`,children:[(0,$.jsx)(C,{children:`Total Submissions`}),(0,$.jsx)(S,{className:`text-2xl`,children:n.totalSubmissions.toLocaleString(i)})]})}),(0,$.jsxs)(R,{children:[(0,$.jsxs)(f,{className:`pb-2`,children:[(0,$.jsx)(C,{children:`Fill Rate`}),(0,$.jsxs)(S,{className:`text-2xl`,children:[a,`%`]})]}),(0,$.jsx)(l,{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)(R,{children:(0,$.jsxs)(f,{className:`pb-2`,children:[(0,$.jsx)(C,{children:`Avg. Completion Time`}),(0,$.jsx)(S,{className:`text-2xl`,children:n.avgCompletionTime?Jr(n.avgCompletionTime):`—`})]})})]}),n.dailySubmissions&&n.dailySubmissions.length>0&&(0,$.jsxs)(R,{children:[(0,$.jsx)(f,{children:(0,$.jsx)(S,{className:`text-sm font-medium`,children:`Daily Submissions`})}),(0,$.jsx)(l,{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)(R,{children:[(0,$.jsxs)(f,{children:[(0,$.jsx)(S,{className:`text-sm font-medium`,children:`Field Completion Rates`}),(0,$.jsx)(C,{children:`Percentage of users who completed each field`})]}),(0,$.jsx)(l,{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))})})]})]})},Xr=xe({"view.malformedFilter":`This view’s filter is malformed, so no records are shown: the {{subject}} condition cannot be applied.`},`view.malformedFilter`);function Zr(e){return typeof e==`number`&&Number.isInteger(e)&&e>0}function Qr(e,t){return Zr(e)?e:t}function $r(e,t){return e==null||Zr(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 ei=({schema:e})=>{let t=ie(),{t:n}=Xr(),r=t?.dataSource,i=q(),a=s(),o=e.parentObject||i?.objectName,c=e.parentId||e.recordId||i?.recordId,[u,d]=(0,Q.useState)([]),[p,m]=(0,Q.useState)([]),[h,g]=(0,Q.useState)(!0),[_,v]=(0,Q.useState)(!1),[b,x]=(0,Q.useState)(!1),[C,w]=(0,Q.useState)(null),E=(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:b,rowsHeldFor:D}},[b,D]);let j=(0,Q.useRef)(null),M=(0,Q.useRef)(!1),[N,P]=(0,Q.useState)(0),[F,I]=(0,Q.useState)(!1),[L,ee]=(0,Q.useState)(null);(0,Q.useEffect)(()=>{let t=r;if(!t||typeof t.getObjectSchema!=`function`)return;if(!e.childObject){ee(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||ee(e??null)}).catch(()=>{n||ee(null)}),()=>{n=!0}},[r,e.childObject]),(0,Q.useEffect)(()=>{let t=$r(e.limit,e.childObject);t&&console.warn(t)},[e.limit,e.childObject]);let te=de(),re=be(e.filter,te),z=JSON.stringify(re??null),B=JSON.stringify(e.sort??null),V=(0,Q.useMemo)(()=>G(re),[z]),H=V.ok?void 0:V.refusal,U=V.ok?V.node:void 0,W=(0,Q.useMemo)(()=>ae(e.sort),[B]),oe=fe(r&&c?e.childObject:void 0),K=(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=Qr(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===z&&i.sortKey===B&&A.current.rowsHeldFor===c;M.current=!1;let o=++E.current,s=()=>E.current===o;if(j.current={parentId:c,dataSource:r,childObject:e.childObject,relationshipField:e.relationshipField,top:n,filterKey:z,sortKey:B},I(!1),!r||!c){g(!1);return}if(H){g(!1);return}if(!e.childObject){g(!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):g(!0);try{let t={[e.relationshipField]:c},i=await r.find(e.childObject,{$filter:U===void 0?t:X(t,U),...W?{$orderby:W}:{},$top:n});if(!s())return;let a=i?.data??[];d(a.map(e=>({...e}))),m(a.map(e=>({...e}))),x(!1),O(c),w(null),M.current&&(M.current=!1,P(e=>e+1))}catch(e){s()&&(w(e?.message||`Failed to load line items`),O(e=>e??c))}finally{s()&&(g(!1),I(!1))}},[r,c,e.childObject,e.relationshipField,e.limit,H,U,W,z,B]),J=(0,Q.useRef)({load:K,parentId:c});(0,Q.useEffect)(()=>{J.current={load:K,parentId:c}},[K,c]),(0,Q.useEffect)(()=>{K(`inputs`)},[K,N,oe]);let se=(0,Q.useCallback)(e=>{if(d(e),x(!0),c){let e=c;O(t=>t??e)}},[c]),Y=(0,Q.useCallback)(async()=>{if(!r||!c||!e.childObject||k)return;let t=c,n=()=>J.current.parentId===t;v(!0),w(null);try{let t=!!(o&&e.totalField),i=t?{[e.totalField]:kn(u,e.amountField||`amount`)}:{},a=Dn(o??``,c,i,[{childObject:e.childObject,relationshipField:e.relationshipField,rows:u,original:p,childSchema:L}]);t||(a=a.slice(1)),a.length&&await _e(r,a),n()&&await J.current.load(`save`)}catch(e){n()&&w(e?.message||`Failed to save line items`)}finally{v(!1)}},[r,c,k,u,p,e,o,L]),le=(0,Q.useMemo)(()=>({columns:yt(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]);return(0,$.jsxs)(R,{className:T(`shadow-none`),children:[(0,$.jsxs)(f,{className:`flex-row items-center justify-between gap-2 pb-2`,children:[(0,$.jsx)(S,{className:`text-sm font-medium`,children:e.title||`Line Items`}),!e.readonly&&(0,$.jsx)(ne,{type:`button`,size:`sm`,onClick:Y,disabled:_||h||!b||!c||k,children:_?`Saving…`:`Save`})]}),(0,$.jsxs)(l,{children:[C&&(0,$.jsx)(`p`,{className:`mb-2 text-sm text-destructive`,children:C}),H?(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:ce(H)??``})}),(0,$.jsx)(`p`,{className:`mt-1 text-xs opacity-80`,children:H.message})]}):e.childObject?h?(0,$.jsx)(`p`,{className:`py-6 text-center text-sm text-muted-foreground`,children:`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:`This record’s line items have not been loaded.`}):(0,$.jsx)(y,{value:u,onChange:se,field:le,readonly:e.readonly,disabled:_||F}):(0,$.jsx)(`p`,{className:`py-6 text-center text-sm text-muted-foreground`,children:`Save the record first to add line items.`}):(0,$.jsxs)(`p`,{className:`py-6 text-center text-sm text-muted-foreground`,"data-testid":`line-items-no-child-object`,children:[`This panel has no child object configured: set`,` `,(0,$.jsx)(`code`,{className:`font-mono`,children:`childObject`}),` to the object whose rows it lists.`]})]})]})},ti=Y(({schema:e,dataSource:t})=>{let n=ue(t);return(0,$.jsx)(ge,{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)(Mr,{schema:e,dataSource:n})})});J.register(`object-form`,ti,{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`},{name:`description`,type:`string`},{name:`layout`,type:`enum`,enum:[`vertical`,`horizontal`,`inline`,`grid`]},{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 button. Read at ObjectForm.tsx:361 and honoured by ModalForm.`},{name:`contentLayout`,type:`enum`,enum:[`simple`,`tabbed`],description:"How the modal presentation lays out sections. `tabbed` needs more than one section to differ from `simple` (ModalForm.tsx:638)."},{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`},{name:`cancelText`,type:`string`},{name:`nextText`,type:`string`,description:`Label of the next-step button (wizard).`},{name:`prevText`,type:`string`,description:`Label of the previous-step button (wizard).`},{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`,description:"Toast shown after a successful submit. Ignored when `submitBehavior` or `navigateOnSuccess` is set."},{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 }`.'}]}),J.register(`form`,ti,{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 ni=Y(({schema:e})=>{let t=(0,Q.useContext)(B)?.dataSource??void 0;return(0,$.jsx)(ge,{schema:e,dataSource:t,testId:`embeddable-form`,errorTitle:`This form’s data source could not be resolved`,children:e=>(0,$.jsx)(qr,{config:e,dataSource:t})})});J.register(`embeddable-form`,ni,{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`}]}),J.register(`form-analytics`,({schema:e})=>(0,$.jsx)(Yr,{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 ri=Y(({schema:e})=>{let t=(0,Q.useContext)(B)?.dataSource??void 0;return(0,$.jsx)(ge,{schema:e,dataSource:t,testId:`object-master-detail-form`,errorTitle:`This form’s data source could not be resolved`,children:e=>(0,$.jsx)(ar,{schema:e,dataSource:t})})});J.register(`object-master-detail-form`,ri,{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 is also the parent pool for values, create defaults and the submitted set. 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`},{name:`submitText`,type:`string`,description:`Label of the button that saves the parent and every detail row in one batch.`},{name:`cancelText`,type:`string`},{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 ii={object:`childObject`,filter:!0,sort:!0,limit:`limit`},ai=Y(({schema:e})=>(0,$.jsx)(ge,{schema:e,mapping:ii,testId:`record-line-items`,errorTitle:`This line-items panel’s data source could not be resolved`,children:e=>(0,$.jsx)(ei,{schema:e})}));J.register(`line_items`,ai,{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{Jn as a,Nt as c,_r as i,Ze as l,Dr as n,Ut as o,br as r,Ft as s,Mr as t};
|