@objectstack/console 17.5.0 → 17.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (282) hide show
  1. package/CHANGELOG.md +806 -0
  2. package/dist/.objectstack-injection.json +2 -2
  3. package/dist/.objectui-sha +1 -1
  4. package/dist/assets/{ActionResultDialog-CLdIyOW6.js → ActionResultDialog-ChYnuROr.js} +3 -3
  5. package/dist/assets/{AiPendingActionsPage-OKYz66yR.js → AiPendingActionsPage-Dh3-i4BB.js} +1 -1
  6. package/dist/assets/{ApiConsolePage-CcrKovu8.js → ApiConsolePage-CKYEqlMs.js} +1 -1
  7. package/dist/assets/AppDocsIndex-B5Tky2xg.js +1 -0
  8. package/dist/assets/{AppManagementPage-D_xz8cTZ.js → AppManagementPage-ZwyvnHpM.js} +1 -1
  9. package/dist/assets/ApprovalsInboxPage-DD4fe0Em.js +1 -0
  10. package/dist/assets/{AuditLogPage-CoghqsZb.js → AuditLogPage-Sed6iMqP.js} +1 -1
  11. package/dist/assets/BookPage-DYjUsQIc.js +1 -0
  12. package/dist/assets/{ComponentNavView-BxsixSU9.js → ComponentNavView-DrlxM4SY.js} +1 -1
  13. package/dist/assets/CreateViewDialog-Cp72x_O7.js +1 -0
  14. package/dist/assets/DashboardView-juicRxcP.js +1 -0
  15. package/dist/assets/DocPage-CxJaQ-pC.js +1 -0
  16. package/dist/assets/{DocsIndex-B2zw_HAp.js → DocsIndex-LALVtIVR.js} +1 -1
  17. package/dist/assets/{DocsLayout-DezZ8x7_.js → DocsLayout-BAwlJQQf.js} +1 -1
  18. package/dist/assets/DocsSlug-CkF1E-Zs.js +1 -0
  19. package/dist/assets/ExpressionProvider-Dr0e99r1.js +1 -0
  20. package/dist/assets/FlowRunsPage-R3W3t2s4.js +1 -0
  21. package/dist/assets/{IntegrationsPage-2leVkVDH.js → IntegrationsPage-DIuFLEbF.js} +2 -2
  22. package/dist/assets/InterfaceListPage-BfoCldGu.js +1 -0
  23. package/dist/assets/{MarketplaceInstalledPage-EPPHSitW.js → MarketplaceInstalledPage-DyjhcUNB.js} +1 -1
  24. package/dist/assets/MarketplacePackagePage-BbO27Pgs.js +4 -0
  25. package/dist/assets/{MarketplacePage-BnQKykgv.js → MarketplacePage-DO2_b64U.js} +1 -1
  26. package/dist/assets/{MetadataInspector-BWxLkr0O.js → MetadataInspector-BQyu9pOE.js} +1 -1
  27. package/dist/assets/ObjectDataPage-DIY-yefK.js +1 -0
  28. package/dist/assets/PageView-C-qWu3Jw.js +1 -0
  29. package/dist/assets/ProfilePage-Qp8DL8CF.js +1 -0
  30. package/dist/assets/{PublicFormsPage-DlE6tck_.js → PublicFormsPage-D3AT2EH9.js} +1 -1
  31. package/dist/assets/RecordDetailView-B3XBEgk2.js +3 -0
  32. package/dist/assets/RecordFormPage-CcoZfUJ3.js +1 -0
  33. package/dist/assets/ReportDefaultInspector-DVcWM6sh.js +1 -0
  34. package/dist/assets/ReportView-pJCFptzp.js +2 -0
  35. package/dist/assets/RuntimeDraftBar-DObTyFu2.js +1 -0
  36. package/dist/assets/SchemaForm-BWSWYMLE.js +3 -0
  37. package/dist/assets/SearchResultsPage-ChVIzFob.js +1 -0
  38. package/dist/assets/{SettingsHub-BGKIj-Zq.js → SettingsHub-CPP9FDe8.js} +1 -1
  39. package/dist/assets/SettingsView-CrHAROu9.js +1 -0
  40. package/dist/assets/{SkeletonDetail-C8fMI-Mu.js → SkeletonDetail-CP-35B8x.js} +1 -1
  41. package/dist/assets/{af-BfSmLD34.js → af-Bhbso4Pg.js} +1 -1
  42. package/dist/assets/ai-BAPiCsNk.js +3 -0
  43. package/dist/assets/app-shell-eager-leaves-D9tgfJOe.js +1 -0
  44. package/dist/assets/{ar-B9ttrM75.js → ar-DG8TAFtm.js} +1 -1
  45. package/dist/assets/{ar-DZ-C1rn-cyl.js → ar-DZ-BtSien-d.js} +1 -1
  46. package/dist/assets/{ar-EG-BaDxKP_o.js → ar-EG-DpXC0zoY.js} +1 -1
  47. package/dist/assets/{ar-MA-DbxNEcmd.js → ar-MA-D1qVJLyE.js} +1 -1
  48. package/dist/assets/{ar-SA-DeC5LXcX.js → ar-SA-BIYKNgv8.js} +1 -1
  49. package/dist/assets/{ar-TN-C9KpTFJz.js → ar-TN-mUR5Mq3s.js} +1 -1
  50. package/dist/assets/{az-cMerDwRO.js → az-B7IqwHGK.js} +1 -1
  51. package/dist/assets/{be-ZTSbszQh.js → be-CnZyPaSX.js} +1 -1
  52. package/dist/assets/{be-tarask-BXZEUrgX.js → be-tarask--uMMCC7l.js} +1 -1
  53. package/dist/assets/{bg-BDogpmn5.js → bg-CZwuirtY.js} +1 -1
  54. package/dist/assets/{bn-Cz04uxmh.js → bn-BbOX0r-z.js} +1 -1
  55. package/dist/assets/{bs-CpFnCl-j.js → bs-B5W75cYR.js} +1 -1
  56. package/dist/assets/{ca-CHC4M52Z.js → ca-Be69LdIM.js} +1 -1
  57. package/dist/assets/{ckb-Dxw-RNm8.js → ckb-B-nKM1Vn.js} +1 -1
  58. package/dist/assets/contracts-DieHW666.js +1 -0
  59. package/dist/assets/{createDerive-DvA_JGNq.js → createDerive-CynsXU-B.js} +1 -1
  60. package/dist/assets/{cs-DsFaJ5Z7.js → cs-qHngxH7l.js} +1 -1
  61. package/dist/assets/{cy-FH4JFDTs.js → cy-DscO2Pgf.js} +1 -1
  62. package/dist/assets/{da-D1pVjaAq.js → da-vibkaLMF.js} +1 -1
  63. package/dist/assets/data-adapter-BDsrq0TX.js +2 -0
  64. package/dist/assets/{de-AT-DUMQCisj.js → de-AT--JneEuBw.js} +1 -1
  65. package/dist/assets/{de-DKrxSvnP.js → de-BCT78XYW.js} +1 -1
  66. package/dist/assets/default-inspector-registry-Dktr6x_q.js +1 -0
  67. package/dist/assets/dist-yh3dYtHt.js +14 -0
  68. package/dist/assets/drillUrlFilters-N0RngQg6.js +1 -0
  69. package/dist/assets/{el-l3-bHySV.js → el-Cl0y9T2b.js} +1 -1
  70. package/dist/assets/en-AU-By42tTB7.js +1 -0
  71. package/dist/assets/{en-CA-DGH5NF0a.js → en-CA-BqEEoj-Y.js} +1 -1
  72. package/dist/assets/en-GB-Cx8B9nkB.js +1 -0
  73. package/dist/assets/en-IE-CX9nv6uO.js +1 -0
  74. package/dist/assets/en-IN-ByGSBHa4.js +1 -0
  75. package/dist/assets/en-NZ-BPMwa2ZN.js +1 -0
  76. package/dist/assets/en-ZA-lj_N4R6c.js +1 -0
  77. package/dist/assets/{eo-CL6CXHZx.js → eo-oOXROuhF.js} +1 -1
  78. package/dist/assets/{es-BIJ0rksI.js → es-EudscwjH.js} +1 -1
  79. package/dist/assets/{et-BGgMzjm1.js → et-CB-5LLh6.js} +1 -1
  80. package/dist/assets/{eu-CqvAoRrX.js → eu-B4-hcseX.js} +1 -1
  81. package/dist/assets/{fa-IR-DNz3oA1-.js → fa-IR-CogavcMJ.js} +1 -1
  82. package/dist/assets/{fi-DNSfKWuW.js → fi-CIBE0mYa.js} +1 -1
  83. package/dist/assets/{formatLong-CHb9WA3O.js → formatLong-qqgm7lV1.js} +1 -1
  84. package/dist/assets/{fr-CA-CotiswPx.js → fr-CA-BugXMutW.js} +1 -1
  85. package/dist/assets/{fr-DYRJCirJ.js → fr-CDReXYWW.js} +1 -1
  86. package/dist/assets/{fr-CH-CpiEYWpc.js → fr-CH-fiTiB6X1.js} +1 -1
  87. package/dist/assets/framework-CAuH4h0L.js +35 -0
  88. package/dist/assets/{fy-B69yM3FE.js → fy-t_GzIAg_.js} +1 -1
  89. package/dist/assets/{gd-BAy8AsX6.js → gd-CSncIxtN.js} +1 -1
  90. package/dist/assets/{getIcon-BEVyC4y3.js → getIcon-BDkBRQFw.js} +1 -1
  91. package/dist/assets/{gl-soLn_weL.js → gl-_138Mj2S.js} +1 -1
  92. package/dist/assets/{gu-B19Yo9yC.js → gu-COfH-YUT.js} +1 -1
  93. package/dist/assets/{he-DYTPo33p.js → he-BXL4lOKY.js} +1 -1
  94. package/dist/assets/{hi-D2dIK7Oy.js → hi-kXuYI0TJ.js} +1 -1
  95. package/dist/assets/{highlighted-body-OFNGDK62-CExufvVt.js → highlighted-body-OFNGDK62-CK7x7Gzm.js} +1 -1
  96. package/dist/assets/{hr-BV-VOPMu.js → hr-DAOsQWzI.js} +1 -1
  97. package/dist/assets/{ht-C7MM4qkS.js → ht-Ch8SKz8p.js} +1 -1
  98. package/dist/assets/{hu-Rha1m2Ym.js → hu-q6W_rWPT.js} +1 -1
  99. package/dist/assets/{hy-CiTNgbdV.js → hy-0M8OmwnM.js} +1 -1
  100. package/dist/assets/i18n-DTfZonAM.js +17 -0
  101. package/dist/assets/i18n-locale-ar-O6rs-Cir.js +4 -0
  102. package/dist/assets/i18n-locale-de-CMc1jk4a.js +4 -0
  103. package/dist/assets/i18n-locale-en-CbRQO81h.js +4 -0
  104. package/dist/assets/i18n-locale-es-t47nyoCX.js +4 -0
  105. package/dist/assets/i18n-locale-fr-E425EqJM.js +4 -0
  106. package/dist/assets/i18n-locale-ja-y_fk77fz.js +4 -0
  107. package/dist/assets/i18n-locale-ko-CdnY2uCg.js +4 -0
  108. package/dist/assets/i18n-locale-pt-BaUOXS6y.js +4 -0
  109. package/dist/assets/i18n-locale-ru-pFlhX9wg.js +4 -0
  110. package/dist/assets/i18n-locale-zh-Dkj4ROTN.js +4 -0
  111. package/dist/assets/i18n-runtime-CdWyaiOD.js +1 -0
  112. package/dist/assets/{id-Cijsfjt-.js → id-BM_H1_jv.js} +1 -1
  113. package/dist/assets/index-ocmkyCt6.js +19 -0
  114. package/dist/assets/index-v2Ijn9Gr.css +2 -0
  115. package/dist/assets/{infrastructure-BHSync5f.js → infrastructure-CSnL6ntj.js} +2 -2
  116. package/dist/assets/integration-7NqwVHuJ.js +1 -0
  117. package/dist/assets/{is-xS1WTyeC.js → is-B_7jXZfS.js} +1 -1
  118. package/dist/assets/isSameWeek-D90tBsli.js +1 -0
  119. package/dist/assets/{it-C2i_c9sd.js → it-CBM0J9cD.js} +1 -1
  120. package/dist/assets/{it-CH-l516ZNXj.js → it-CH-BQltCNsR.js} +1 -1
  121. package/dist/assets/{ja-D9_ewLny.js → ja-DBjnsx21.js} +1 -1
  122. package/dist/assets/{ja-Hira-D_6ExgHw.js → ja-Hira-BZfSmj1i.js} +1 -1
  123. package/dist/assets/{ka-BYHGyees.js → ka-HwpuKgUY.js} +1 -1
  124. package/dist/assets/{kk-CbTFtuqb.js → kk-DLKA9paj.js} +1 -1
  125. package/dist/assets/{km-Dr2gwhIn.js → km-BU5kermq.js} +1 -1
  126. package/dist/assets/{kn-CprH8JD7.js → kn-BNFqbCoi.js} +1 -1
  127. package/dist/assets/{ko-CsFS2u5i.js → ko-D8n4uMqQ.js} +1 -1
  128. package/dist/assets/{lb-CbFKN7Ob.js → lb-B1empQ7m.js} +1 -1
  129. package/dist/assets/{lt-Bq0xkLp0.js → lt-gMukpK3G.js} +1 -1
  130. package/dist/assets/{lv-Cj6vg6Qo.js → lv-D2O5AnsZ.js} +1 -1
  131. package/dist/assets/{match-CiPp9BME.js → match-BTF6WqJh.js} +1 -1
  132. package/dist/assets/{match-C_jFGO9e.js → match-Cyum2eeW.js} +1 -1
  133. package/dist/assets/{match-Co4ivumx.js → match-ScHH8kYk.js} +1 -1
  134. package/dist/assets/mermaid-GHXKKRXX-D4H6EVJQ.js +1 -0
  135. package/dist/assets/metadata-admin-CEhVmXFv.js +9 -0
  136. package/dist/assets/{mk-MXFM99YL.js → mk-D-Zl0xVN.js} +1 -1
  137. package/dist/assets/{mn-D5Q9B6Jt.js → mn-jJbTslgD.js} +1 -1
  138. package/dist/assets/{ms-CCzPRldx.js → ms-CUuJHLA4.js} +1 -1
  139. package/dist/assets/{mt-mjJpN6xW.js → mt-yIcbfxKY.js} +1 -1
  140. package/dist/assets/{nb-BIlNqdEb.js → nb-D9WNypoj.js} +1 -1
  141. package/dist/assets/{nl-BE-FwXjQsmV.js → nl-BE-B1vKiw2h.js} +1 -1
  142. package/dist/assets/{nl-D2uBtIxG.js → nl-DC7b5e90.js} +1 -1
  143. package/dist/assets/{nn-B0loJ7SV.js → nn-uP4yJ9s0.js} +1 -1
  144. package/dist/assets/{oc-U7-yH1sO.js → oc-DHTqadJI.js} +1 -1
  145. package/dist/assets/{pl-mTy0JYgi.js → pl-Bxnnizf5.js} +1 -1
  146. package/dist/assets/plugin-calendar-b7C35ANT.js +1 -0
  147. package/dist/assets/plugin-charts-b-yVtmdI.js +7 -0
  148. package/dist/assets/plugin-chatbot-D1KW_oIO.js +122 -0
  149. package/dist/assets/plugin-dashboard-DTkPoPEb.js +6 -0
  150. package/dist/assets/plugin-form-UIRm-FpQ.js +1 -0
  151. package/dist/assets/plugin-gantt-9dtc8zzX.js +63 -0
  152. package/dist/assets/plugin-grid-Cp4RKtMJ.js +10 -0
  153. package/dist/assets/plugin-kanban-B2JOPZIJ.js +1 -0
  154. package/dist/assets/plugin-map-CBJcVJYk.js +1 -0
  155. package/dist/assets/{plugin-markdown-D1nTQc1T.js → plugin-markdown-CNlDzqP-.js} +1 -1
  156. package/dist/assets/plugin-report-IZzgQb-Q.js +59 -0
  157. package/dist/assets/plugin-timeline-DsmtjcJ3.js +1 -0
  158. package/dist/assets/plugin-tree-DTRPBdhe.js +1 -0
  159. package/dist/assets/plugin-view-D9ixsNDG.js +1 -0
  160. package/dist/assets/plugins-views-CnvkdSJK.js +3 -0
  161. package/dist/assets/{pt-BR-2KtO5Js1.js → pt-BR-D416seHT.js} +1 -1
  162. package/dist/assets/{pt-Bet5OOQf.js → pt-DwHBy9_c.js} +1 -1
  163. package/dist/assets/{ro-37U6sgzi.js → ro-DDf1X3Np.js} +1 -1
  164. package/dist/assets/{ru-CyuAY-5E.js → ru-8eM3mcgK.js} +1 -1
  165. package/dist/assets/{runtime-metadata-persistence-afAW-MeD.js → runtime-metadata-persistence-DX29lQ62.js} +1 -1
  166. package/dist/assets/{se-DeJabuC6.js → se-D4JvQeRX.js} +1 -1
  167. package/dist/assets/{sk-DWEpjfkR.js → sk-DvpgttGI.js} +1 -1
  168. package/dist/assets/{sl-4oSvNhIR.js → sl-B3gCZ-_a.js} +1 -1
  169. package/dist/assets/{sq-BjkBCaXW.js → sq-CVaTmL0V.js} +1 -1
  170. package/dist/assets/{sr-Dxm1DsRS.js → sr-CnH5Ffyz.js} +1 -1
  171. package/dist/assets/{sr-Latn-Dawg6oP2.js → sr-Latn-Dw9w61q6.js} +1 -1
  172. package/dist/assets/src-BUry7633.js +2 -0
  173. package/dist/assets/{src-C8NYjdVm.js → src-DMDT5a27.js} +1 -1
  174. package/dist/assets/src-ZxH3AOCu.js +16 -0
  175. package/dist/assets/{studioEntry-nXQP3iL0.js → studioEntry-DAqcBFtr.js} +1 -1
  176. package/dist/assets/{submitRedirect-jK-cEIbP.js → submitRedirect-iy0oOi7I.js} +1 -1
  177. package/dist/assets/{sv-CROOGJGz.js → sv-CU7wdxyK.js} +1 -1
  178. package/dist/assets/{ta-BZnTmFI_.js → ta-DPH6q0HR.js} +1 -1
  179. package/dist/assets/{te-BN0v0x5t.js → te-BSaThkGV.js} +1 -1
  180. package/dist/assets/{th-CBjKhp_U.js → th-NXP8_Qb8.js} +1 -1
  181. package/dist/assets/{tr-x0Ne4N4H.js → tr-DDXoH663.js} +1 -1
  182. package/dist/assets/types-zod-ChJ30y25.js +1 -0
  183. package/dist/assets/{ug-sgzNhsKo.js → ug-Guus6pPe.js} +1 -1
  184. package/dist/assets/ui-components-D8wcRNrt.js +37 -0
  185. package/dist/assets/ui-layout-BYO3rRIl.js +1 -0
  186. package/dist/assets/{uk-o_DQ5VHJ.js → uk-uiy4vsp8.js} +1 -1
  187. package/dist/assets/use-book-data-DFTswcKm.js +1 -0
  188. package/dist/assets/{useActionModal-CSvbHkQ7.js → useActionModal-h52Z5Pkl.js} +1 -1
  189. package/dist/assets/useCanAuthorMetadata-TDrVrYGB.js +1 -0
  190. package/dist/assets/useDatasetCatalog-BOd0Ybr1.js +1 -0
  191. package/dist/assets/useNavSelDeepLink-67Y4qCNO.js +1 -0
  192. package/dist/assets/useNavTargetLabel-D8lRdb6O.js +1 -0
  193. package/dist/assets/useOpenRecordList-C7oqUD3F.js +1 -0
  194. package/dist/assets/{usePackageL10n-CMx66am-.js → usePackageL10n-Jl2XiF2F.js} +1 -1
  195. package/dist/assets/{useSettingsLabel-Kkr2q0Oo.js → useSettingsLabel-CSpBDTdy.js} +1 -1
  196. package/dist/assets/{uz-Cyrl-DbtkQtz_.js → uz-Cyrl-Cmb5bvbf.js} +1 -1
  197. package/dist/assets/{uz-Be41d4jl.js → uz-DJWxoTz4.js} +1 -1
  198. package/dist/assets/vendor-objectstack-C4eD5dbT.js +139 -0
  199. package/dist/assets/{vi-84mZmklk.js → vi-Bb3QoIJC.js} +1 -1
  200. package/dist/assets/{zh-CN-DD1reegJ.js → zh-CN-C-Hts1ZR.js} +1 -1
  201. package/dist/assets/{zh-HK-B05u30WI.js → zh-HK-CtBAZ_ZS.js} +1 -1
  202. package/dist/assets/{zh-TW-Bb-WimPD.js → zh-TW-B7DDahD-.js} +1 -1
  203. package/dist/chunk-membership.json +116 -104
  204. package/dist/eager-closure.json +126 -120
  205. package/dist/index.html +4 -4
  206. package/dist/sdui.manifest.json +998 -115
  207. package/package.json +1 -1
  208. package/dist/assets/AppDocsIndex-F4zDq2zz.js +0 -1
  209. package/dist/assets/ApprovalsInboxPage-DrEUmaDb.js +0 -1
  210. package/dist/assets/CreateViewDialog-xyKlpLEW.js +0 -1
  211. package/dist/assets/DashboardView-CGC-_Om8.js +0 -1
  212. package/dist/assets/DocPage-CIZE5kdj.js +0 -1
  213. package/dist/assets/DocsSlug-DXdFdwlS.js +0 -1
  214. package/dist/assets/ExpressionProvider-DZfMwyMs.js +0 -1
  215. package/dist/assets/FlowRunsPage-CvY3nJMF.js +0 -1
  216. package/dist/assets/InterfaceListPage-BdECC_i3.js +0 -1
  217. package/dist/assets/MarketplacePackagePage-C7NOu2Ir.js +0 -4
  218. package/dist/assets/ObjectDataPage-BIzp65Mo.js +0 -1
  219. package/dist/assets/PageView-CVLgCRSF.js +0 -1
  220. package/dist/assets/ProfilePage-D2qGgxPK.js +0 -1
  221. package/dist/assets/RecordDetailView-DQKydU7X.js +0 -3
  222. package/dist/assets/RecordFormPage-BTjwxJIA.js +0 -1
  223. package/dist/assets/ReportDefaultInspector-DdsQAkd7.js +0 -1
  224. package/dist/assets/ReportView-GIdKJdOt.js +0 -2
  225. package/dist/assets/RuntimeDraftBar-BbMdi3Kp.js +0 -1
  226. package/dist/assets/SchemaForm-C8X1ve4p.js +0 -3
  227. package/dist/assets/SearchResultsPage-Jwhqsdyo.js +0 -1
  228. package/dist/assets/SettingsView-D8SMKdrc.js +0 -1
  229. package/dist/assets/app-shell-eager-leaves-CDVclng4.js +0 -1
  230. package/dist/assets/appRoute-DbnWDEa1.js +0 -1
  231. package/dist/assets/data-adapter-DMbe6Njk.js +0 -1
  232. package/dist/assets/default-inspector-registry-CpL3fFhl.js +0 -1
  233. package/dist/assets/dist-BXrEV1ag.js +0 -13
  234. package/dist/assets/drillUrlFilters-hi-2d3DW.js +0 -1
  235. package/dist/assets/en-AU-C6x7mDhH.js +0 -1
  236. package/dist/assets/en-GB-0-nho2eK.js +0 -1
  237. package/dist/assets/en-IE-2fC3BkfV.js +0 -1
  238. package/dist/assets/en-IN-C1QcFhxn.js +0 -1
  239. package/dist/assets/en-NZ-C80ptZT7.js +0 -1
  240. package/dist/assets/en-ZA-ByZDrjeb.js +0 -1
  241. package/dist/assets/framework-DcWkeiND.js +0 -35
  242. package/dist/assets/i18n-CEKxYdmD.js +0 -9
  243. package/dist/assets/i18n-locale-ar-DN7sl3GF.js +0 -4
  244. package/dist/assets/i18n-locale-de-C40JErvb.js +0 -4
  245. package/dist/assets/i18n-locale-en-CITPDIHy.js +0 -4
  246. package/dist/assets/i18n-locale-es-C8DdWN6c.js +0 -4
  247. package/dist/assets/i18n-locale-fr-COIdEZZl.js +0 -4
  248. package/dist/assets/i18n-locale-ja-DYF_rU_s.js +0 -4
  249. package/dist/assets/i18n-locale-ko-B-ODYAtX.js +0 -4
  250. package/dist/assets/i18n-locale-pt-CK1SyBIm.js +0 -4
  251. package/dist/assets/i18n-locale-ru-jLzvShMO.js +0 -4
  252. package/dist/assets/i18n-locale-zh-Bf9Gbbvl.js +0 -4
  253. package/dist/assets/i18n-runtime-CTgAQF4N.js +0 -1
  254. package/dist/assets/index-CLyvpiGc.css +0 -2
  255. package/dist/assets/index-CfnfGw5W.js +0 -20
  256. package/dist/assets/isSameWeek-DWYeNyh8.js +0 -1
  257. package/dist/assets/mermaid-GHXKKRXX-DVLc_uym.js +0 -1
  258. package/dist/assets/metadata-admin-CybaOCdO.js +0 -9
  259. package/dist/assets/nav-selection-Dzm_mA3C.js +0 -1
  260. package/dist/assets/plugin-calendar-CKRBcML7.js +0 -1
  261. package/dist/assets/plugin-charts-DGTJxXCB.js +0 -7
  262. package/dist/assets/plugin-chatbot-DwtwNA-y.js +0 -122
  263. package/dist/assets/plugin-dashboard-C1AYKmGX.js +0 -6
  264. package/dist/assets/plugin-form-CV8ZY04-.js +0 -1
  265. package/dist/assets/plugin-gantt-BRIb2_8G.js +0 -63
  266. package/dist/assets/plugin-grid-C9h7mRVv.js +0 -11
  267. package/dist/assets/plugin-kanban-BcJ0Dhys.js +0 -1
  268. package/dist/assets/plugin-map-D24ZUOUj.js +0 -1
  269. package/dist/assets/plugin-report-BfGintAq.js +0 -59
  270. package/dist/assets/plugin-timeline-CbBRq_qt.js +0 -1
  271. package/dist/assets/plugin-tree-BNX2A5J5.js +0 -1
  272. package/dist/assets/plugin-view-DzWQWYyH.js +0 -1
  273. package/dist/assets/plugins-views-DraK4xz0.js +0 -3
  274. package/dist/assets/src-B8lv0plz.js +0 -18
  275. package/dist/assets/src-DoDvT77T.js +0 -1
  276. package/dist/assets/types-zod-Y2RwUUeJ.js +0 -1
  277. package/dist/assets/ui-components-BTB1NkUW.js +0 -37
  278. package/dist/assets/ui-layout-bZfafwJa.js +0 -1
  279. package/dist/assets/use-book-data-C3eyZJSG.js +0 -1
  280. package/dist/assets/useOpenRecordList-B5-qaFUx.js +0 -1
  281. package/dist/assets/vendor-objectstack-XuWC71M9.js +0 -266
  282. package/dist/assets/vendor-zod-CHLW1iCr.js +0 -64
@@ -0,0 +1 @@
1
+ import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{t,v as n}from"./vendor-react-BggL7APJ.js";import{En as r,gn as i,hn as a,kr as o,xn as s}from"./vendor-objectstack-C4eD5dbT.js";import{An as c,C as l,Fn as u,Fr as d,G as f,Gr as p,Hr as m,Ir as h,K as g,Mn as _,Nn as v,Nr as y,Pn as b,Si as x,Vr as S,Wr as C,_i as w,a as T,b as E,bi as D,di as O,et as k,fi as A,gi as j,hi as M,jn as N,jr as P,kn as F,mi as I,pi as L,s as R,vi as ee,w as z,wt as te,xi as B}from"./ui-components-D8wcRNrt.js";import{$i as ne,Et as re,F as V,Ft as ie,Or as ae,Ot as H,Qi as U,Xi as W,Yi as oe,Zi as G,_ as se,aa as ce,di as K,dt as le,er as q,f as J,fi as ue,g as Y,gt as de,i as fe,ia as X,ii as pe,jt as me,m as he,mn as ge,ot as _e,p as ve,pt as ye,sa as be,u as xe,ui as Se}from"./framework-CAuH4h0L.js";import{h as Ce,i as we,n as Te,o as Ee,p as De,t as Oe,w as ke}from"./i18n-runtime-CdWyaiOD.js";import{r as Z}from"./vendor-ui-utils-DIUdEYii.js";import{t as Ae}from"./vendor-icon-check-vpu9Zukp.js";import{t as je}from"./vendor-icon-chevron-down-BEf_jTEE.js";import{t as Me}from"./vendor-icon-chevron-left-KnDcuFH1.js";import{t as Ne}from"./vendor-icon-chevron-right-DbnKwHYQ.js";import{t as Pe}from"./vendor-icon-circle-alert-D1XTr_X9.js";import{t as Fe}from"./vendor-icon-circle-check-Bq3OcFQN.js";import{t as Ie}from"./vendor-icon-loader-circle-D3PsuVaD.js";import{t as Le}from"./vendor-icon-lock-B_psRnly.js";import{t as Re}from"./vendor-icon-shield-check-CdDzbial.js";import{t as ze}from"./vendor-icon-triangle-alert-D5n0T3q_.js";var Q=e(n(),1);function Be(e,t,n){let r=se(n&&e||void 0,n&&t!==void 0?String(t):void 0),[i,a]=(0,Q.useState)(0),o=(0,Q.useRef)(!1),s=(0,Q.useRef)(!1),c=(0,Q.useRef)(r);(0,Q.useEffect)(()=>{if(r!==c.current){if(c.current=r,o.current){s.current=!0;return}a(e=>e+1)}},[r]);let[l]=(0,Q.useState)(()=>{let e=()=>{s.current&&(s.current=!1,a(e=>e+1))};return{onDirtyChange:t=>{o.current=t,t||e()},saved:()=>{o.current=!1,e()}}});return{refetch:i,...l}}var Ve=`https://a.invalid/`,He=`https://b.invalid/`;function Ue(e){try{return new URL(e,Ve).origin===`https://a.invalid`&&new URL(e,He).origin===`https://b.invalid`}catch{return!1}}function We(e,t){if(!e)return null;let n=t?.id??t?.recordId??t?._id;if(n==null||n===``)return null;let r=e.replace(/\{(?:id|recordId)\}/g,()=>encodeURIComponent(String(n)));return Ue(r)?r:null}var Ge=/\{\{record\.([a-z_][a-z0-9_]*)\}\}/g;function Ke(e){return e==null?``:typeof e==`string`?e:typeof e==`boolean`||typeof e==`number`&&Number.isFinite(e)?String(e):``}function qe(e,t){let n=e=>e&&typeof e==`object`&&!Array.isArray(e)?e:{};return{...n(e),...n(t)}}function Je(e,t){let n=o.safeParse({submitBehavior:{kind:`redirect`,url:e}});if(!n.success)return{ok:!1,refusal:n.error.issues.find(e=>e.path[0]===`submitBehavior`&&e.path[1]===`url`)?.message??n.error.issues[0]?.message??`\`submitBehavior.url\` is not a value this contract accepts: ${JSON.stringify(e)}.`};let r=n.data.submitBehavior,i=(r?.kind===`redirect`?r.url:e).replace(Ge,(e,n)=>encodeURIComponent(Ke(t[n])));return i.includes(`{`)||i.includes(`}`)?{ok:!1,refusal:`\`submitBehavior.url\` carries an interpolation this renderer could not resolve (${JSON.stringify(e)}). A token names one declared record field, spelled \`{{record.field_name}}\`, and the redirect is refused rather than followed with the token left in it.`}:{ok:!0,url:i}}function Ye(e){let{navigate:t}=V(),n=(0,Q.useRef)(t);(0,Q.useEffect)(()=>{n.current=t},[t]),(0,Q.useEffect)(()=>{if(!e)return;let t=setTimeout(()=>{let t=n.current;if(t){t(e.url);return}window.location.assign(e.url)},e.delayMs);return()=>clearTimeout(t)},[e])}function Xe(e,t){return`[ObjectForm] Section \`visibleWhen\` is not yet supported on this layout: the \`${e}\` layout's steps drop the predicate, so section(s) ${t} render unconditionally. A wizard STEP predicate is a separate contract still being designed (objectui#6237) — it is not the tab predicate with a different name. Today, use \`formType: 'tabbed' | 'modal' | 'drawer' | 'split'\` or the flat layout — each honours a section \`visibleWhen\` — or move the predicate onto the individual fields, whose own \`visibleWhen\` is evaluated on every layout.`}s();function Ze(e){return e!=null&&!oe(e)}function Qe(e){return e?.mode===`create`||!e?.recordId}function $e(e,t){return!(!e?.required||t&&oe(e.defaultValue))}function et(e,t){let n=e?.fields;if(!n||typeof n!=`object`)return{};let r={};for(let e of Object.keys(n)){let i=n[e],a=i?.defaultValue;Ze(a)?r[e]=a:tt(i)&&t?.currentUserId&&(r[e]=t.currentUserId)}return r}function tt(e){return!e||!r(e.defaultValue)?!1:e.type===`user`||e.type===`lookup`&&e.reference===`sys_user`}function nt(e,t,n){return{...et(e,n),...t??{}}}function rt(e,t){if(!e||typeof e!=`object`)return e;let n=t?.fields;if(!n||typeof n!=`object`)return e;let r={};for(let[t,i]of Object.entries(e))oe(n[t]?.defaultValue)&&G(i)||(r[t]=i);return r}function it(e,t){if(e?.length)return e.find(e=>e?.name===t)}function at(e,t,n,r=e=>e){let i=t?.length?t:void 0,a=[];if(e.forEach((e,t)=>{let o=it(i,e);if(o){a.push(r(o));return}let s=n(e,t);s&&a.push(s)}),i){let e=new Set(a.map(e=>e.name));i.forEach(t=>{let n=t?.name;n&&!e.has(n)&&(e.add(n),a.push(r(t)))})}return a}function ot(e){if(typeof e!=`object`||!e||Array.isArray(e))return!1;let t=e;return typeof t.field!=`string`&&typeof t.name==`string`}function st(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(!ot(n))return!1;t+=1}}return t>0}function ct(e){let t=e;return Array.isArray(t?.customFields)&&t.customFields.length>0?!0:st(t?.sections)}var lt=`DataSource is required for form submission (inline mode not configured)`;function ut(){return Error(lt)}function dt(e,t){return typeof t==`string`||typeof t==`object`&&t&&typeof t.source==`string`?Se(t)?(e.visibleOn!==t&&K(t,{},!0,void 0,void 0,{context:`view-level visibility of field '${e.name}', read as no gate`}),e):{...e,visibleOn:t}:e}var ft=new Set;function pt(e,t){if(typeof e.name!=`string`||e.name===e.field)return;let n=`${t}:${e.field}:${e.name}`;ft.has(n)||(ft.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 mt=new Set;function ht(e,t){let n=typeof e==`object`&&e&&typeof e.field==`string`?`{ field: '${e.field}' }`:JSON.stringify(e),r=`${t}:${n}`;mt.has(r)||(mt.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 — 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 gt=new Set;function _t(e,t,n){let r=n?`section '${n}'`:`an untitled section`,i=`${t}:${r}:${e}`;gt.has(i)||(gt.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 vt(e,t){let n=t.objectSchema?.fields?.[e];return n?{name:e,label:t.fieldLabel(t.objectName,e,n.label||e),type:f(n.type,{multiple:n.multiple}),required:$e(n,Qe(t)),disabled:t.readOnly||t.mode===`view`||n.readonly,placeholder:n.placeholder,description:n.help||n.description,validation:T(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 yt(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 bt(e,t){return xt(e,t,void 0)}function xt(e,t,n){if(typeof e==`string`){if(n)return n;let r=it(t.customFields,e);if(r)return bt(r,t);let i=t.objectSchema?.fields?.[e];return dt(vt(e,t),i?.visible_on??i?.visibleOn)}let r=e;if(typeof r.field!=`string`)return dt(r,r.visibleOn);pt(r,t.objectName);let i=r.field,a=it(t.customFields,i),o=n?{...n}:a?{...a}:vt(i,t);r.widget!=null&&(o.widget=r.widget),r.label!=null&&(o.label=r.label),r.placeholder!=null&&(o.placeholder=r.placeholder),r.helpText!=null&&(o.description=r.helpText),r.required!=null&&(o.required=$e({required:r.required,defaultValue:t.objectSchema?.fields?.[i]?.defaultValue},Qe(t))),r.readonly!=null&&(o.disabled=r.readonly||o.disabled),r.immutable!=null&&(o.immutable=r.immutable),r.hidden!=null&&(o.hidden=r.hidden),r.colSpan!=null&&(o.colSpan=r.colSpan),r.span!=null&&(o.span=r.span),r.options!=null&&(o.options=r.options),r.multiple!=null&&(o.multiple=r.multiple);let s=r.type??(a?void 0:t.objectSchema?.fields?.[i]?.type);return s!=null&&(o.type=f(s,{multiple:o.multiple})),r.reference!=null&&(o.reference=r.reference),r.maxLength!=null&&(o.maxLength=r.maxLength),r.minLength!=null&&(o.minLength=r.minLength),r.min!=null&&(o.min=r.min),r.max!=null&&(o.max=r.max),r.precision!=null&&(o.precision=r.precision),r.scale!=null&&(o.scale=r.scale),r.language!=null&&(o.language=r.language),Array.isArray(r.fields)&&(o.fields=r.fields),r.dependsOn!=null&&(o.dependsOn=r.dependsOn),r.keyField!=null&&(o.keyField=r.keyField),r.disclosure!=null&&(o.disclosure=r.disclosure),dt(o,r.visibleWhen??r.visibleOn)}function St(e,t){let n=e.fields??[],r=t.pool;if(!r)return n.map(e=>bt(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){if(ot(e)){a.push(bt(e,t));continue}let n=yt(e),r=n===void 0?void 0:i.get(n);r&&a.push(xt(e,t,r))}return a}function Ct(e){return{...e?.initialValues??{},...e?.initialData??{}}}function wt(e,t){if(e?.isLoaded)return n=>e.checkField(t,n,`write`)}function Tt(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 Et(e,{perms:t,objectName:n,mode:r,deniedDescription:i}){return Tt(e,t,n,r,e=>i?{...e,readOnly:!0,disabled:!0,description:e.description??i}:{...e,readOnly:!0,disabled:!0})}function Dt(e,t,n,r){if(r!==`edit`&&r!==`create`)return!1;let i=pe(e,t?.getObjectApiOperations?.(n));return r===`edit`?!i.edit:!i.create}function Ot({perms:e,objectName:t,mode:n,objectSchema:r}){if(Dt(r,e,t,n))return n===`edit`?`edit`:`create`}function kt(e,{objectSchema:t,...n}){let r=Et(e,n);return!Array.isArray(r)||!Dt(t,n.perms,n.objectName,n.mode)?r:r.map(e=>e?.name?{...e,disabled:!0}:e)}var At=`true`;function jt(e,{perms:t,objectName:n}){return Tt(e,t,n,void 0,e=>({...e,readonlyWhen:At}))}var $=t(),Mt=Ce({"form.noPermissionToCreate":`You don't have permission to create {{object}} records. The fields are read-only.`,"form.noPermissionToEdit":`You don't have permission to edit {{object}} records. The fields are read-only.`},`form.noPermissionToCreate`);function Nt({affordance:e,objectName:t,objectSchema:n}){let r=De(),{t:i}=Mt();if(!e)return null;let a=typeof n?.label==`string`&&n.label?n.label:t,o=`objectLabel`in r?r.objectLabel({name:t,label:a}):a,s=i(e===`edit`?`form.noPermissionToEdit`:`form.noPermissionToCreate`,{object:o});return(0,$.jsxs)(`p`,{role:`status`,className:`mb-4 flex items-start gap-2 rounded-md border bg-muted/50 px-3 py-2 text-sm text-muted-foreground`,"data-testid":`closed-affordance-notice`,"data-affordance":e,children:[(0,$.jsx)(Le,{className:`mt-0.5 h-4 w-4 shrink-0`,"aria-hidden":!0}),(0,$.jsx)(`span`,{children:s})]})}var Pt=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(`.`)),Ft=new Set([`formula`,`summary`,`rollup`,`lookup_value`,`auto_number`,`autonumber`,`computed`]);function It(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(!Pt.has(t)&&(!a||a(t))){if(i){let e=i[t];if(!e||e.system===!0)continue;let n=String(e.type||``).toLowerCase();if(Ft.has(n)||e.computed===!0||e.readOnly===!0||e.readonly===!0)continue}r[t]=n}return r}function Lt(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 Rt(e,t){let n={};for(let[r,i]of Object.entries(e))Lt(i,t[r])||(n[r]=i);return n}function zt(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 Bt(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 Vt(e,t,n){if(!e||typeof e!=`object`)return e;let r=Bt(t,n);if(!r)return e;let i=Rt(e,r);return Object.keys(i).length>0?i:e}function Ht(e,t,n){let r=Bt(e,t);return!e||!r?e??null:!n||typeof n!=`object`?e:{...e,record:{...r,...n}}}function Ut(e,t,{objectSchema:n,canEdit:r,snapshot:i}){let a=Array.isArray(t.customFields)&&t.customFields.length>0?null:n,o=It(e,a,{canEdit:r});return Qe(t)&&(o=rt(o,a)),{payload:o,writePayload:Vt(o,i,t)}}var Wt=new Set([`field:formula`,`field:summary`,`field:auto_number`,`field:autonumber`]),Gt=new Set([`field:textarea`,`field:markdown`,`field:html`,`field:grid`,`field:richtext`,`textarea`,`markdown`,`html`,`grid`,`richtext`]),Kt=new Set([`formula`,`summary`,`auto_number`,`autonumber`]);function qt(e){return Gt.has(e)}function Jt(e){return Kt.has(e)}function Yt(e){return e<=3?1:e<=8?2:e<=15?3:4}function Xt(e){return e&&e>0?Math.min(Math.floor(e),4):1}function Zt(e,t,n){let r=Xt(t);return r<=1?1:e.span===`full`?r:e.colSpan==null?e.type&&qt(e.type)?r:Math.min(r,Math.max(1,Math.round(r/Math.min(Math.max(1,Math.floor(n||r)),r)))):Math.min(Math.max(1,Math.floor(e.colSpan)),r)}function Qt(e,t,n){let r=Xt(t);return r<=1?e:e.map(e=>{if(e.type===`section-divider`)return e;let t=Zt(e,r,n);return t>1?{...e,colSpan:t}:e.colSpan!=null&&e.colSpan!==1?{...e,colSpan:1}:e})}var $t=Pt;function en(e,t){return e.filter(e=>{if($t.has(e.name))return!1;let n=t?.fields?.[e.name];return n?.hidden!==!0&&n?.readonly!==!0})}function tn(e,t){return e.filter(e=>{if(e.type&&Wt.has(e.type))return!1;let n=t?.fields?.[e.name];return!n||!Jt(n.type)})}var nn={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 rn(e){return nn[e&&e>0?Math.min(Math.floor(e),4):1]}function an(e){return e<=1?`default`:e===2?`xl`:`full`}function on(e,t,n,r){let i=[...e];if(i=en(i,t),r===`create`&&(i=tn(i,t)),n!==void 0)return i=Qt(i,n),{fields:i,columns:n};let a=Yt(i.length);return i=Qt(i,a),{fields:i,columns:a}}var sn=Ce({"form.conflictTitle":`Save conflict`,"form.conflictMessage":`This record was changed by someone else while you were editing. Overwriting will replace their changes with yours.`,"form.conflictLatestVersion":`Their save: {{time}}`,"form.conflictOverwrite":`Overwrite`,"form.keepEditing":`Keep editing`},`form.conflictTitle`);function cn(e){let t=e?.updated_at;return typeof t==`string`&&t.length>0?t:void 0}function ln(e){if(!e||typeof e!=`object`)return!1;let t=e;return t.code===`CONCURRENT_UPDATE`||t.name===`ConcurrentUpdateError`}function un(e,t){return JSON.stringify([e,String(t)])}function dn(e,t){if(t)return e&&e.readVersion===t?e.version:t}function fn(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 pn(){let{t:e}=sn(),t=Oe(),[n,r]=Q.useState(null),i=Q.useRef(null),a=Q.useRef(new Map),o=Q.useCallback(e=>{i.current?.(e),i.current=null,r(null)},[]);Q.useEffect(()=>()=>i.current?.(!1),[]);let s=Q.useCallback(async({dataSource:e,objectName:t,recordId:n,payload:o,baseRecord:s})=>{let c=un(t,n),l=cn(s),u=dn(a.current.get(c),l),d=e=>{let t=cn(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(!ln(a))throw a;let s=a.currentVersion,c=fe(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=fn(n?.currentVersion,t);return{saveWithOcc:s,conflictDialog:(0,$.jsx)(O,{open:!!n,onOpenChange:e=>{e||o(!1)},children:(0,$.jsxs)(I,{children:[(0,$.jsxs)(w,{children:[(0,$.jsxs)(ee,{className:`flex items-center gap-2`,children:[(0,$.jsx)(ze,{className:`h-5 w-5 text-amber-500`,"aria-hidden":!0}),e(`form.conflictTitle`)]}),(0,$.jsxs)(M,{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)(j,{children:[(0,$.jsx)(`button`,{type:`button`,className:x(B({variant:`outline`})),onClick:()=>o(!1),children:e(`form.keepEditing`)}),(0,$.jsx)(`button`,{type:`button`,className:x(B({variant:`destructive`})),onClick:()=>o(!0),children:e(`form.conflictOverwrite`)})]})]})})}}var mn={schema:null,record:null};function hn(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 gn(e){return e.schema||e.record}var _n=Ce({"form.uploadInFlight":`Wait for the upload to finish before saving.`,"fields.file.uploading":`Uploading…`},`form.uploadInFlight`);function vn(){let e=z(),{t}=_n();return{uploading:e.anyUploading,scope:e,busyLabel:t(`fields.file.uploading`),reason:t(`form.uploadInFlight`)}}function yn({gate:e,children:t}){return(0,$.jsx)(l,{scope:e.scope,children:t})}function bn({gate:e}){return e.uploading?(0,$.jsx)(`p`,{role:`status`,className:`text-sm text-muted-foreground`,"data-testid":`upload-in-flight-notice`,children:e.reason}):null}var xn={"form.create":`Create`,"form.update":`Update`,"common.save":`Save`,"common.cancel":`Cancel`,"form.created":`Created`,"form.saved":`Saved`,"form.savedNamed":`{{title}} saved`,"form.errorLoading":`Error loading form`,"form.navigateRefused":"The `navigateOnSuccess` destination declared for this form was refused, so the navigation did not happen.","publicForm.thankYouTitle":`Thank you!`,"publicForm.loading":`Loading form…`,"form.deniedDescription":`You do not have edit access to this field.`,"form.masterDetail.loadingColumns":`Loading columns…`,"form.masterDetail.subtotal":`Subtotal`,"form.masterDetail.tax":`Tax ({{rate}}%)`,"form.masterDetail.total":`Total`,"form.masterDetail.lineItem":`Line item`,"form.masterDetail.rowTitle":`{{title}} — row {{row}}`,"form.masterDetail.applyRow":`Apply`,"detail.add":`Add`,"common.close":`Close`,"detail.saving":`Saving…`,"form.masterDetail.noChildObject":`This collection has no child object configured: set {{property}} to the object whose rows it lists.`,"form.masterDetail.schemaUnavailable":`Could not load the schema of {{object}}, so this collection has no columns to show. Check that the object exists and is readable, then reload.`,"form.masterDetail.noRelationshipField":`Could not work out how {{object}} links to {{parent}}: no lookup or master_detail field on it references the parent. Set {{property}} on this collection to the field that holds the parent record.`,"form.lineItems.title":`Line Items`};xn[`form.navigateRefused`];var Sn=Ce(xn,`form.errorLoading`),Cn=({schema:e,dataSource:t,className:n})=>{let{fieldLabel:r}=De(),{t:i}=Sn(),a=k(),{userId:o}=a,[s,c]=(0,Q.useState)(null),l=vn(),[u,d]=(0,Q.useState)({}),{saveWithOcc:f,conflictDialog:p}=pn(),[m,h]=(0,Q.useState)(!0),[g,_]=(0,Q.useState)(mn),v=(0,Q.useRef)({schema:0,record:0}),y=gn(g),b=e.defaultTab||e.sections[0]?.name||e.sections[0]?.label||`tab-0`;Q.useEffect(()=>{let n=!1,r=hn(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 S=(0,Q.useRef)(void 0),C=(0,Q.useRef)(null),{refetch:w,onDirtyChange:T,saved:E}=Be(e.objectName,e.recordId,!!e.recordId&&e.mode!==`create`);Q.useEffect(()=>{let n=!1,r=hn(v,_,`record`);return(s||!t)&&(async()=>{if(e.mode===`create`||!e.recordId||!t){C.current=null,d(nt(s,Ct(e),{currentUserId:o})),r.commit(),h(!1);return}S.current!==e.recordId&&h(!0);try{let i=await t.findOne(e.objectName,e.recordId);if(n)return;S.current=e.recordId,C.current=zt(e,i),d(i||{}),r.commit()}catch(e){if(n)return;r.fail(e)}finally{n||h(!1)}})(),()=>{n=!0}},[s,e.mode,e.recordId,e.initialData,e.initialValues,t,e.objectName,w]);let D=(0,Q.useCallback)(t=>{let n=St(t,{objectSchema:s,objectName:e.objectName,readOnly:e.readOnly,mode:e.mode,recordId:e.recordId,fieldLabel:r,customFields:e.customFields});return kt(n,{perms:a,objectName:e.objectName,mode:e.mode,objectSchema:s})??n},[s,e.readOnly,e.mode,e.recordId,e.objectName,e.customFields,r,a]),O=(0,Q.useCallback)(async n=>{if(l.uploading){Z.error(l.reason);return}if(!t&&!e.submitHandler&&ct(e))return e.onSuccess&&await e.onSuccess(n),n;try{let r,{writePayload:i}=Ut(n,e,{objectSchema:s,canEdit:wt(a,e.objectName),snapshot:C.current});if(e.submitHandler)r=await e.submitHandler(i);else if(!t)throw ut();else if(e.mode===`create`)r=await t.create(e.objectName,i);else if(e.mode===`edit`&&e.recordId){let n=await f({dataSource:t,objectName:e.objectName,recordId:e.recordId,payload:i,baseRecord:u});if(n.status===`cancelled`)return;r=n.result}return C.current=Ht(C.current,e,i),E(),e.onSuccess&&await e.onSuccess(r),r}catch(t){throw e.onError&&e.onError(t),t}},[e,t,s,a,f,u,l.uploading,l.reason,E]),A=(0,Q.useCallback)(()=>{e.onCancel&&e.onCancel()},[e]),j=(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:i(`form.errorLoading`)}),(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:i(`publicForm.loading`)})]});let M=e=>typeof e==`number`&&e>0?Math.min(Math.floor(e),4):void 0,N=e.sections.map(e=>M(e.columns)).filter(e=>e!=null),P=M(e.columns)??(N.length?Math.max(...N):1),F=rn(P),I=e.sections.map((e,t)=>{let n=D(e);return{key:j(e,t),label:e.label||`Tab ${t+1}`,description:e.description,containerClass:e.gridClassName,visibleWhen:e.visibleWhen,fields:P>1?Qt(n,P,M(e.columns)):n}}),L=[...I.length>1?[]:I.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})),...I.flatMap(e=>e.fields)],R={type:`form`,objectName:e.objectName,fields:L,columns:P,...F?{fieldContainerClass:F}:{},layout:`vertical`,defaultValues:u,previousValues:e.mode===`edit`&&e.recordId?u:void 0,submitLabel:l.uploading?l.busyLabel:e.submitText||(e.mode===`create`?i(`form.create`):i(`form.update`)),cancelLabel:e.cancelText,showSubmit:e.showSubmit!==!1&&e.mode!==`view`,showCancel:e.showCancel!==!1,onSubmit:O,onCancel:A,onDirtyChange:T,fieldTabs:I.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`};return(0,$.jsx)(yn,{gate:l,children:(0,$.jsxs)(`div`,{className:x(`w-full @container`,n,e.className),children:[(0,$.jsx)(Nt,{affordance:Ot({perms:a,objectName:e.objectName,mode:e.mode,objectSchema:s}),objectName:e.objectName,objectSchema:s}),(0,$.jsx)(de,{schema:R}),(0,$.jsx)(bn,{gate:l}),p]})})},wn=({label:e,description:t,collapsible:n=!1,collapsed:r=!1,columns:i=1,children:a,className:o,gridClassName:s,showBorder:c})=>{let[l,u]=(0,Q.useState)(r),d={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`},f=()=>{n&&u(!l)},p=c??!!e,h=e||t?(0,$.jsxs)(`div`,{className:x(`flex items-start gap-2`,!p&&`mb-4`,n&&`cursor-pointer select-none`),onClick:f,role:n?`button`:void 0,"aria-expanded":n?!l:void 0,children:[n&&(0,$.jsx)(`span`,{className:`mt-0.5 text-muted-foreground`,children:l?(0,$.jsx)(Ne,{className:`h-4 w-4`}):(0,$.jsx)(je,{className:`h-4 w-4`})}),(0,$.jsxs)(`div`,{className:`flex-1`,children:[e&&(0,$.jsx)(`h3`,{className:`text-sm font-semibold text-foreground`,children:e}),t&&(0,$.jsx)(`p`,{className:`text-sm text-muted-foreground mt-0.5`,children:t})]})]}):null,g=l?null:(0,$.jsx)(`div`,{className:x(`grid gap-4`,s||d[i]),children:a});return p?(0,$.jsxs)(S,{className:x(`form-section bg-muted/40 shadow-none`,o),children:[h&&(0,$.jsx)(C,{className:`border-b border-border pb-3`,children:h}),g&&(0,$.jsx)(m,{className:`pt-4`,children:g})]}):(0,$.jsxs)(`div`,{className:x(`form-section`,o),children:[h,g]})},Tn=e=>e==null||e===``||Array.isArray(e)&&e.length===0,En=(e,t)=>Object.keys(e).some(n=>{let r=e[n],i=t[n];if(Tn(r)&&Tn(i))return!1;try{return JSON.stringify(r)!==JSON.stringify(i)}catch{return r!==i}}),Dn=Ce({"wizard.missingRequired":`Please complete the required fields: {{fields}}`,"common.cancel":`Cancel`,"wizard.back":`Back`,"common.next":`Next`,"wizard.submitting":`Submitting…`,"form.create":`Create`,"form.update":`Update`,"form.stepOf":`Step {{current}} of {{total}}`,"wizard.stepFallback":`Step {{n}}`,"wizard.progressLabel":`Progress`,"wizard.emptyStep":`No fields configured for this step`,"form.created":`Created`,"form.saved":`Saved`,"form.navigateRefused":"The `navigateOnSuccess` destination declared for this form was refused, so the navigation did not happen.","publicForm.thankYouTitle":`Thank you!`,"publicForm.loading":`Loading form…`,"form.errorLoading":`Error loading form`,"form.visibleWhenFaulted":`Can't submit: the visibleWhen rule of {{fields}} could not be evaluated. The rule must be fixed before this form can be submitted.`,"validation.formInvalidJoiner":`, `},`wizard.missingRequired`),On=G,kn=({schema:e,dataSource:t,className:n})=>{let{fieldLabel:r}=De(),i=k(),{userId:a}=i,{t:o}=Dn(),s=vn(),[c,l]=(0,Q.useState)(null),[u,d]=(0,Q.useState)({}),[f,p]=(0,Q.useState)(void 0),m=Q.useRef(null),{saveWithOcc:h,conflictDialog:g}=pn(),[_,v]=(0,Q.useState)(!0),[y,b]=(0,Q.useState)(mn),S=Q.useRef({schema:0,record:0}),C=gn(y),[w,T]=(0,Q.useState)(0),[E,O]=(0,Q.useState)(new Set),[A,j]=(0,Q.useState)(!1),[M,N]=(0,Q.useState)(new Set),[P,F]=(0,Q.useState)(null),[I,L]=(0,Q.useState)(null);Ye(I);let R=Q.useId(),[ee,z]=(0,Q.useState)(0),te=Q.useRef(!1),B=Q.useRef(void 0),{refetch:ne,onDirtyChange:re,saved:V}=Be(e.objectName,e.recordId,!!e.recordId&&e.mode!==`create`),ae=Q.useRef(!1),H=Q.useRef(!1),U=(0,Q.useCallback)(()=>{re(ae.current||H.current)},[re]),oe=(0,Q.useCallback)(e=>{ae.current=e,U()},[U]),G=e.sections.length,se=w===0,ce=w===G-1;Q.useEffect(()=>{let n=!1,r=hn(S,b,`schema`);return(async()=>{if(!t){v(!1);return}try{let i=await t.getObjectSchema(e.objectName);if(n)return;l(i),r.commit()}catch(e){if(n)return;r.fail(e)}})(),()=>{n=!0}},[e.objectName,t]),Q.useEffect(()=>{let n=!1,r=hn(S,b,`record`);return(c||!t)&&(async()=>{if(e.mode===`create`||!e.recordId||!t){m.current=null,te.current||=(d(nt(c,Ct(e),{currentUserId:a})),!0),r.commit(),v(!1);return}B.current!==e.recordId&&v(!0);try{let i=await t.findOne(e.objectName,e.recordId);if(n)return;B.current=e.recordId,m.current=zt(e,i),d(i||{}),p(i||{}),H.current=!1,r.commit()}catch(e){if(n)return;r.fail(e)}finally{n||v(!1)}})(),()=>{n=!0}},[c,e.mode,e.recordId,e.initialData,e.initialValues,t,e.objectName,ne]);let le=(0,Q.useCallback)(t=>{let n=St(t,{objectSchema:c,objectName:e.objectName,readOnly:e.readOnly,mode:e.mode,recordId:e.recordId,fieldLabel:r,customFields:e.customFields});return kt(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]),q=Ot({perms:i,objectName:e.objectName,mode:e.mode,objectSchema:c}),J=Qe(e),Y=ie(),fe=(0,Q.useMemo)(()=>w>=0&&w<G?le(e.sections[w]):[],[w,G,e.sections,le]),X=(0,Q.useCallback)(t=>{let n=new Map,r=new Map;return e.sections.forEach((e,i)=>{for(let a of le(e)){let e=a?.name;if(!e||a.hidden===!0)continue;let o=ue({visibleWhen:a.visibleWhen,readonlyWhen:a.readonlyWhen,requiredWhen:a.requiredWhen},t,{required:!!a.required,readonly:a.readonly===!0,serverOwnedValue:W(a,J)},void 0,Y,`field '${e}'`);o.faults.visibleWhen!==void 0&&a.type!==`section-divider`&&r.set(i,[...r.get(i)??[],a.label||e]),(a.visibleOn==null||K(a.visibleOn,t,!0,void 0,Y,{context:`visibleOn of field '${e}'`}))&&o.visible&&!o.readonly&&o.required&&On(t[e])&&n.set(i,[...n.get(i)??[],a.label||e])}}),{missing:n,faultedVisibleWhen:r}},[e.sections,le,J,Y]),pe=(0,Q.useCallback)(async n=>{if(q)return;let r={...u,...n};if(d(r),En(n,u)&&(H.current=!0,U()),O(e=>new Set(e).add(w)),N(e=>{if(!e.has(w))return e;let t=new Set(e);return t.delete(w),t}),ce){if(s.uploading){Z.error(s.reason);return}let{missing:n,faultedVisibleWhen:l}=X(r);if(l.size>0){N(new Set(l.keys())),Z.error(o(`form.visibleWhenFaulted`,{fields:[...l.values()].flat().join(o(`validation.formInvalidJoiner`))})),me(Math.min(...l.keys()));return}if(n.size>0){N(new Set(n.keys()));let e=[...n.values()].flat();Z.error(o(`wizard.missingRequired`,{fields:e.slice(0,3).join(`, `)+(e.length>3?`…`:``)})),me(Math.min(...n.keys()));return}N(new Set),j(!0);try{if(!t&&!e.submitHandler&&ct(e))return e.onSuccess&&await e.onSuccess(r),r;let n,{writePayload:s}=Ut(r,e,{objectSchema:c,canEdit:wt(i,e.objectName),snapshot:m.current});if(e.submitHandler)n=await e.submitHandler(s);else if(!t)throw ut();else if(e.mode===`create`)n=await t.create(e.objectName,s);else if(e.mode===`edit`&&e.recordId){let r=await h({dataSource:t,objectName:e.objectName,recordId:e.recordId,payload:s,baseRecord:u});if(r.status===`cancelled`)return;n=r.result}if(m.current=Ht(m.current,e,s),H.current=!1,V(),e.onSuccess)await e.onSuccess(n);else if(!e.submitHandler&&e.submitBehavior){let t=e.submitBehavior;switch(t.kind){case`redirect`:{let i=Je(t.url,qe(r,n));if(!i.ok){Z.error(i.refusal),F({message:e.successMessage||(e.mode===`create`?o(`form.created`):o(`form.saved`)),refusal:i.refusal});break}L({url:i.url,delayMs:t.delayMs??0});break}case`continue`:d(nt(c,Ct(e),{currentUserId:a})),O(new Set),T(0),z(e=>e+1);break;default:{let n=t.kind===`thank-you`&&t.message?t.message:e.successMessage||(e.mode===`create`?o(`form.created`):o(`form.saved`));Z.success(n),F({title:t.kind===`thank-you`?t.title:void 0,message:n});break}}}else if(!e.submitHandler){let t=We(e.navigateOnSuccess,n);if(t)return L({url:t,delayMs:0}),n;e.navigateOnSuccess?(console.warn("[WizardForm] `navigateOnSuccess` was declared but produced no destination:",e.navigateOnSuccess),Z.success(e.successMessage||(e.mode===`create`?o(`form.created`):o(`form.saved`)),{description:o(`form.navigateRefused`)})):Z.success(e.successMessage||(e.mode===`create`?o(`form.created`):o(`form.saved`))),e.resetOnSuccess&&e.mode===`create`&&(d(nt(c,Ct(e),{currentUserId:a})),O(new Set),T(0),z(e=>e+1))}return n}catch(t){throw e.onError&&e.onError(t),t}finally{j(!1)}}me(w+1)},[q,u,w,ce,e,c,t,i,X,o,h,s.uploading,s.reason,U,V]),me=(0,Q.useCallback)(t=>{t>=0&&t<G&&(T(t),e.onStepChange&&e.onStepChange(t))},[G,e]),he=(0,Q.useCallback)(()=>{me(w-1)},[w,me]),ge=(0,Q.useCallback)(()=>{e.onCancel&&e.onCancel()},[e]),_e=(0,Q.useCallback)(t=>t<=w||!q&&(!!e.allowSkip||E.has(t)),[w,q,e.allowSkip,E]),ve=(0,Q.useCallback)(e=>{_e(e)&&me(e)},[_e,me]);if(C)return(0,$.jsxs)(`div`,{className:`p-4 border border-red-300 bg-red-50 rounded-md`,children:[(0,$.jsx)(`h3`,{className:`text-red-800 font-semibold`,children:o(`form.errorLoading`)}),(0,$.jsx)(`p`,{className:`text-red-600 text-sm mt-1`,children:C.message})]});if(_)return(0,$.jsxs)(`div`,{className:`p-8 text-center`,children:[(0,$.jsx)(`div`,{className:`inline-block animate-spin rounded-full h-8 w-8 border-b-2 border-gray-900`}),(0,$.jsx)(`p`,{className:`mt-2 text-sm text-gray-600`,children:o(`publicForm.loading`)})]});if(P)return(0,$.jsxs)(`div`,{className:x(`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:P.title??o(`publicForm.thankYouTitle`)}),P.message&&(0,$.jsx)(`p`,{className:`mt-2 text-sm text-muted-foreground`,children:P.message})]}),P.refusal&&(0,$.jsx)(`div`,{role:`alert`,className:`rounded-md border border-destructive/40 bg-destructive/10 p-4 text-sm text-destructive`,children:P.refusal})]});let ye=e.sections[w],be=e=>typeof e==`number`&&e>0?Math.min(Math.floor(e),4):void 0,xe=be(e.columns)??be(ye?.columns)??1,Se=rn(xe),Ce={type:`form`,objectName:e.objectName,id:R,fields:xe>1?Qt(fe,xe,be(ye?.columns)):fe,columns:xe,...Se?{fieldContainerClass:Se}:{},layout:`vertical`,defaultValues:u,previousValues:e.mode===`edit`?f:void 0,showSubmit:!1,showCancel:!1,onSubmit:pe,onDirtyChange:oe};return(0,$.jsx)(yn,{gate:s,children:(0,$.jsxs)(`div`,{className:x(`w-full @container`,n,e.className),children:[e.showStepIndicator!==!1&&(0,$.jsx)(`nav`,{"aria-label":o(`wizard.progressLabel`),className:`mb-8`,children:(0,$.jsx)(`ol`,{className:`flex items-center`,children:e.sections.map((e,t)=>{let n=t===w,r=E.has(t),i=_e(t),a=M.has(t);return(0,$.jsxs)(`li`,{className:x(`relative flex-1`,t!==G-1&&`pr-8 sm:pr-12`),children:[t!==G-1&&(0,$.jsx)(`div`,{className:`absolute top-3 sm:top-4 left-6 -right-4 sm:left-10 sm:-right-2 h-0.5`,"aria-hidden":`true`,children:(0,$.jsx)(`div`,{className:x(`h-full`,r?`bg-primary`:`bg-muted`)})}),(0,$.jsxs)(`button`,{type:`button`,className:x(`group relative flex items-center`,i?`cursor-pointer`:`cursor-not-allowed`),onClick:()=>ve(t),disabled:!i,"data-testid":`wizard-step:${e.name||t}`,"data-error":a||void 0,children:[(0,$.jsx)(`span`,{className:x(`flex h-6 w-6 sm:h-8 sm:w-8 items-center justify-center rounded-full text-xs sm:text-sm font-medium transition-colors`,a&&`border-2 border-destructive bg-background text-destructive`,!a&&r&&`bg-primary text-primary-foreground`,!a&&n&&!r&&`border-2 border-primary bg-background text-primary`,!a&&!n&&!r&&`border-2 border-muted bg-background text-muted-foreground`),children:a?(0,$.jsx)(Pe,{className:`h-3 w-3 sm:h-4 sm:w-4`,"aria-hidden":!0}):r?(0,$.jsx)(Ae,{className:`h-3 w-3 sm:h-4 sm:w-4`}):t+1}),(0,$.jsx)(`span`,{className:`ml-2 sm:ml-3 text-xs sm:text-sm font-medium hidden sm:block`,children:(0,$.jsx)(`span`,{className:x(a?`text-destructive`:n?`text-foreground`:`text-muted-foreground`),children:e.label||o(`wizard.stepFallback`,{n:t+1})})})]})]},t)})})}),(0,$.jsx)(Nt,{affordance:q,objectName:e.objectName,objectSchema:c}),(0,$.jsx)(`div`,{className:`min-h-[200px]`,children:ye&&(0,$.jsx)(wn,{label:ye.label,description:ye.description,columns:1,className:ye.className,gridClassName:ye.gridClassName,children:fe.length>0?(0,$.jsx)(de,{schema:Ce},ee):(0,$.jsx)(`form`,{id:R,onSubmit:e=>{e.preventDefault(),pe({})},children:(0,$.jsx)(`div`,{className:`text-center py-8 text-muted-foreground`,children:o(`wizard.emptyStep`)})})})}),(0,$.jsxs)(`div`,{className:`flex items-center justify-between mt-6 pt-4 border-t`,children:[(0,$.jsx)(`div`,{children:e.showCancel!==!1&&(0,$.jsx)(D,{variant:`ghost`,onClick:ge,children:e.cancelText||o(`common.cancel`)})}),(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsx)(`span`,{className:`text-sm text-muted-foreground mr-2`,children:o(`form.stepOf`,{current:w+1,total:G})}),!se&&(0,$.jsxs)(D,{variant:`outline`,onClick:he,children:[(0,$.jsx)(Me,{className:`h-4 w-4 mr-1`}),e.prevText||o(`wizard.back`)]}),ce?(0,$.jsxs)(D,{type:`submit`,form:R,disabled:A||e.mode===`view`||s.uploading||!!q,children:[A&&(0,$.jsx)(Ie,{className:`mr-2 h-4 w-4 animate-spin`,"aria-hidden":!0}),s.uploading?s.busyLabel:A?o(`wizard.submitting`):e.submitText||(e.mode===`create`?o(`form.create`):o(`form.update`))]}):(0,$.jsxs)(D,{type:`submit`,form:R,disabled:!!q,children:[e.nextText||o(`common.next`),(0,$.jsx)(Ne,{className:`h-4 w-4 ml-1`})]})]})]}),(0,$.jsx)(bn,{gate:s}),g]})})},An=({schema:e,dataSource:t,className:n})=>{let{fieldLabel:r}=De(),{t:i}=Sn(),a=k(),{userId:o}=a,s=vn(),[c,l]=(0,Q.useState)(null),[u,d]=(0,Q.useState)({}),{saveWithOcc:f,conflictDialog:p}=pn(),[m,h]=(0,Q.useState)(!0),[g,_]=(0,Q.useState)(mn),v=(0,Q.useRef)({schema:0,record:0}),y=gn(g);(0,Q.useEffect)(()=>{let n=!1,r=hn(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),S=(0,Q.useRef)(null),{refetch:C,onDirtyChange:w,saved:T}=Be(e.objectName,e.recordId,!!e.recordId&&e.mode!==`create`);(0,Q.useEffect)(()=>{let n=!1,r=hn(v,_,`record`);return(c||!t)&&(async()=>{if(e.mode===`create`||!e.recordId){S.current=null,d(nt(c,Ct(e),{currentUserId:o})),r.commit(),h(!1);return}if(!t){S.current=null,d(Ct(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,S.current=zt(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,C]);let E=(0,Q.useCallback)(t=>{let n=St(t,{objectSchema:c,objectName:e.objectName,readOnly:e.readOnly,mode:e.mode,recordId:e.recordId,fieldLabel:r,customFields:e.customFields});return kt(n,{perms:a,objectName:e.objectName,mode:e.mode,objectSchema:c})??n},[c,e.readOnly,e.mode,e.recordId,e.objectName,e.customFields,r,a]),D=(0,Q.useCallback)(async n=>{if(s.uploading){Z.error(s.reason);return}if(!t&&!e.submitHandler&&ct(e))return e.onSuccess&&await e.onSuccess(n),n;try{let r,{writePayload:i}=Ut(n,e,{objectSchema:c,canEdit:wt(a,e.objectName),snapshot:S.current});if(e.submitHandler)r=await e.submitHandler(i);else if(!t)throw ut();else if(e.mode===`create`)r=await t.create(e.objectName,i);else if(e.mode===`edit`&&e.recordId){let n=await f({dataSource:t,objectName:e.objectName,recordId:e.recordId,payload:i,baseRecord:u});if(n.status===`cancelled`)return;r=n.result}return S.current=Ht(S.current,e,i),T(),e.onSuccess&&await e.onSuccess(r),r}catch(t){throw e.onError&&e.onError(t),t}},[e,t,c,a,f,u,s.uploading,s.reason,T]),O=(0,Q.useCallback)(()=>{e.onCancel&&e.onCancel()},[e]),A=(e,t)=>e.pane===`primary`||e.pane===`secondary`?e.pane:t===0?`primary`:`secondary`,j=(0,Q.useMemo)(()=>e.sections.filter((e,t)=>A(e,t)===`primary`),[e.sections]),M=(0,Q.useMemo)(()=>e.sections.filter((e,t)=>A(e,t)===`secondary`),[e.sections]),N=e.splitDirection||`horizontal`,P=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:i(`form.errorLoading`)}),(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:i(`publicForm.loading`)})]});let F=e=>typeof e==`number`&&e>0?Math.min(Math.floor(e),4):void 0,I=e.sections.map(e=>F(e.columns)).filter(e=>e!=null),L=F(e.columns)??(I.length?Math.max(...I):1),R=rn(L),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(...L>1?Qt(i,L,F(e.columns)):i))}),n},z=[{key:`primary`,sections:j,defaultSize:P},{key:`secondary`,sections:M,defaultSize:100-P}].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),te={type:`form`,objectName:e.objectName,fields:z.flatMap(e=>e.fields),columns:L,...R?{fieldContainerClass:R}:{},layout:`vertical`,defaultValues:u,previousValues:e.mode===`edit`&&e.recordId?u:void 0,submitLabel:s.uploading?s.busyLabel:e.submitText||(e.mode===`create`?i(`form.create`):i(`form.update`)),cancelLabel:e.cancelText,showSubmit:e.showSubmit!==!1&&e.mode!==`view`,showCancel:e.showCancel!==!1,onSubmit:D,onCancel:O,onDirtyChange:w,fieldPanes:z.map(e=>({key:e.key,fields:e.fields.map(e=>e.name),defaultSize:e.defaultSize,...e.containerClass?{containerClass:e.containerClass}:{}})),fieldPanesOrientation:N,fieldPanesResizable:e.splitResizable!==!1};return(0,$.jsx)(yn,{gate:s,children:(0,$.jsxs)(`div`,{className:x(`w-full @container`,n,e.className),children:[(0,$.jsx)(Nt,{affordance:Ot({perms:a,objectName:e.objectName,mode:e.mode,objectSchema:c}),objectName:e.objectName,objectSchema:c}),(0,$.jsx)(de,{schema:te}),(0,$.jsx)(bn,{gate:s}),p]})})},jn=e=>e==null?void 0:e.id??e._id??e.recordId,Mn=(e,t)=>t?It(e,t):e,Nn=e=>It(e,null),Pn=new Set([`id`,`_id`,`recordId`]);function Fn(e,t){return!e||Object.entries(e).every(([e,n])=>e===t||Pn.has(e)?!0:n==null||n===``)}function In(e,t,n){let r=[{object:e,action:`create`,data:Nn(t)}];for(let e of n)for(let t of e.rows)Fn(t,e.relationshipField)||r.push({object:e.childObject,action:`create`,data:{...Mn(t,e.childSchema),[e.relationshipField]:{$ref:0}}});return r}function Ln(e,t,n,r){let i=[{object:e,action:`update`,id:t,data:Nn(n)}];for(let e of r){let n=(e.rows||[]).map(n=>({...n,[e.relationshipField]:t})),{toCreate:r,toUpdate:a,toDelete:o}=Rn(e.original||[],n);for(let t of r){if(Fn(t,e.relationshipField))continue;let{id:n,_id:r,recordId:a,...o}=t;i.push({object:e.childObject,action:`create`,data:Mn(o,e.childSchema)})}let s=new Map;for(let t of e.original||[]){let e=jn(t);e&&s.set(e,t)}for(let t of a){let n=jn(t),r=s.get(n),a=Mn(t,e.childSchema),o=r?Rt(a,r):a;r&&Object.keys(o).length===0||i.push({object:e.childObject,action:`update`,id:n,data:o})}for(let t of o)i.push({object:e.childObject,action:`delete`,id:t})}return i}function Rn(e,t){let n=new Set(t.map(jn).filter(Boolean));return{toCreate:t.filter(e=>!jn(e)),toUpdate:t.filter(e=>jn(e)),toDelete:(e||[]).map(jn).filter(e=>!!e&&!n.has(e))}}function zn(e,t){return Array.isArray(e)?e.reduce((e,n)=>{let r=Number(n?.[t]);return e+(Number.isFinite(r)?r:0)},0):0}s();var Bn=new Set([`id`,`_id`,`recordId`,`created_at`,`updated_at`,`created_by`,`updated_by`,`createdAt`,`updatedAt`,`createdBy`,`updatedBy`,`organization_id`,`tenant_id`,`space`,`owner`]),Vn=new Set([`position`,`sort_order`,`sequence`,`line_no`,`line_number`,`sort`]);function Hn(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 Un=new Set([`image`,`avatar`]);function Wn(e,t){e.multiple==null&&t?.multiple&&(e.multiple=!0),e.accept??(Array.isArray(t?.accept)&&t.accept.length>0?e.accept=t.accept:Un.has(t?.type)&&(e.accept=[`image/*`]))}function Gn(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 Kn(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}function qn(e,t={}){let n=e?.fields;return!n||typeof n!=`object`?[]:i(e,{relationshipField:t.relationshipField,exclude:t.exclude,maxColumns:t.maxColumns??6}).map(({name:e,defaultHidden:t})=>{let r=Jn(e,n[e]);return t?{...r,defaultHidden:t}:r})}function Jn(e,t){let n={name:e,label:t?.label||e,type:Hn(t?.type),required:!!t?.required},r=Gn(t);n.type===`select`&&r&&(n.options=r),n.type===`lookup`&&(n.reference=t?.reference,n.displayField=t?.displayField||t?.reference_field),n.type===`file`&&Wn(n,t),t?.readonlyWhen&&(n.readonlyWhen=t.readonlyWhen),t?.requiredWhen&&(n.requiredWhen=t.requiredWhen);let i=typeof t?.expression==`string`?t.expression:t?.expression?.source;return i&&typeof i==`string`&&(n.computed=!0,n.expr=i,n.required=!1,typeof t?.scale==`number`&&(n.scale=t.scale)),n}var Yn=new Set;function Xn(e,t,n){if(e.scale===void 0)return;let r=t?` of '${t}'`:``,i=`${t??``}:${e.name}:${n?`hydrated`:`declared`}:${String(e.scale)}`;if(Yn.has(i))return;Yn.add(i);let a=n?`takes type 'currency' from child field '${e.name}'${r}`:`declares type 'currency'${r}`;console.warn(`[object-ui] \`scale\` is not valid on a \`currency\` inline grid column — delete the key. Inline grid column '${e.name}' ${a}, so its \`scale: ${String(e.scale)}\` is not read: the currency's ISO 4217 minor unit (2 for USD, 0 for JPY, 3 for KWD) decides how the cell displays the amount and the width a computed amount is rounded to.`)}function Zn(e,t){let n=e??[],r=t?.fields;return!n.length||!r||typeof r!=`object`?n:n.map(e=>{if(e.type)return e.type===`currency`&&Xn(e,t?.name,!1),e;let n=r[e.name];if(!n)return e;let i=Hn(n?.type);i===`currency`&&Xn(e,t?.name,!0);let a={...e,type:i};a.label??=n?.label||e.name,a.required??=!!n?.required;let o=Gn(n);i===`select`&&o&&!a.options&&(a.options=o),i===`lookup`&&(a.reference??=n?.reference,a.displayField??=n?.displayField||n?.reference_field),i===`file`&&Wn(a,n),a.readonlyWhen==null&&n?.readonlyWhen&&(a.readonlyWhen=n.readonlyWhen),a.requiredWhen==null&&n?.requiredWhen&&(a.requiredWhen=n.requiredWhen);let s=typeof n?.expression==`string`?n.expression:n?.expression?.source;return!a.computed&&s&&typeof s==`string`&&(a.computed=!0,a.expr=s,a.required=!1,typeof n?.scale==`number`&&(a.scale=n.scale)),a})}var Qn=new Set([`formula`,`summary`,`rollup`,`autonumber`,`auto_number`]);function $n(e,t={}){let n=e?.fields;if(!n||typeof n!=`object`)return[];let r=new Set([...t.exclude??[],...t.relationshipField?[t.relationshipField]:[]]),i=[];for(let[e,t]of Object.entries(n)){let n=t;Bn.has(e)||r.has(e)||Vn.has(e)||n?.system||n?.hidden||Qn.has(n?.type)||i.push(e)}return i}var er=new Set([`textarea`,`richtext`,`html`,`markdown`,`rich-text`,`json`,`location`,`address`]),tr=new Set([`file`,`image`,`avatar`]);function nr(e,t,n={}){if(t===`grid`||t===`form`)return t;let r=e?.fields??{},i=$n(e,{relationshipField:n.relationshipField});return i.some(e=>er.has(r[e]?.type))||i.filter(e=>tr.has(r[e]?.type)).length>=2||i.length>8?`form`:`grid`}var rr=[`amount`,`total`,`subtotal`,`line_total`,`line_amount`,`net_amount`];function ir(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=>rr.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 ar(e,t,n,r={}){let i=r.relationshipField||Kn(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?Zn(r.columns,t):qn(t,{relationshipField:i}),o=r.amountField||ir(a);return{childObject:e,relationshipField:i,columns:a,formFields:$n(t,{relationshipField:i}),mode:nr(t,r.inlineEdit??(t?.fields)?.[i]?.inlineEdit,{relationshipField:i}),amountField:o,sortField:Object.keys(t?.fields??{}).find(e=>Vn.has(e))}}function or(e,t,n){return Object.entries(e??{}).every(([e,r])=>e===n||Lt(r,t[e]))}function sr(e,t,n){let r=Array.isArray(t)?t:[],i=[];e.forEach((e,t)=>{t>0&&e.action===`create`&&i.push({op:e,echo:r[t]})});let a=0,o=!1,s=n.map(({entryId:t,input:n})=>{let{childObject:r,relationshipField:s}=n,c=n.rows||[],l=n.original||[],u=new Map,d=new Map;for(let e of c){if(o)break;if(jn(e)!=null||Fn(e,s))continue;let t=i[a];if(!t||t.op.object!==r||!or(t.op.data,e,s)){o=!0;break}a+=1;let n=jn(t.echo);n!=null&&(u.set(e,n),d.set(n,t.op.data??{}))}for(let t=1;t<e.length;t++){let n=e[t];n.action===`update`&&n.object===r&&n.id!=null&&d.set(n.id,n.data??{})}let f=new Map;for(let e of l){let t=jn(e);t!=null&&f.set(t,e)}let p=[];for(let e of c){let t=jn(e)??u.get(e);if(t==null)continue;let n=f.get(t),r=d.get(t);if(!n&&!r)continue;let i={...n??{},...r??{}};jn(i)??(i.id=t),p.push(i)}return{entryId:t,diffedAgainst:n.original,createdIds:u,original:p}});return(o||a!==i.length)&&console.warn(`[MasterDetailForm] could not pair every row created by this save with its create operation; an unpaired row keeps no id, and the next save creates it again.`),s}function cr(e,t){if(!t)return;let n=e?.fields?.[t];return n&&typeof n==`object`?n:void 0}function lr(e,t){let n=new Set(e.filter(e=>!!e.config.amountField).map(e=>Te(e.amountFieldDef,t)));return n.size===1?n.values().next().value:void 0}var ur=2;function dr(e,t,n){let r=()=>ge(e,{locale:n,minimumFractionDigits:ur,maximumFractionDigits:ur});if(!t)return r();try{return ge(e,{locale:n,currency:t})}catch{return`${t} ${r()}`}}function fr(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 pr(e){let t=JSON.stringify(Array.from(new Set(e)).sort()),[n,r]=(0,Q.useState)({});return(0,Q.useEffect)(()=>{let e=JSON.parse(t);if(e.length===0)return;let n=Y(t=>{let n=e.filter(e=>he(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 mr(e,t,n,r){if(!e||!t.relationshipField)return!1;let i=t.relationshipField;return Ln(``,n,{},[{childObject:t.childObject,relationshipField:i,rows:e.rows,original:e.original.map(e=>({...e,[i]:n})),childSchema:r}]).length>1}function hr(e){if(!e)return{};let t={};return e.querySelectorAll(`[name]`).forEach(e=>{let n=e.getAttribute(`name`);if(n){if(e.tagName===`INPUT`){let r=e;if(r.type===`checkbox`){t[n]=r.checked;return}if(r.type===`radio`){r.checked&&(t[n]=r.value);return}if(r.type===`number`||r.type===`range`){if(r.value===``){t[n]=null;return}let e=Number(r.value);t[n]=Number.isFinite(e)?e:r.value;return}t[n]=r.value;return}t[n]=e.value}}),t}function gr(e,t){let n=Object.keys(t),r=RegExp(`(${n.map(e=>`\\{\\{${e}\\}\\}`).join(`|`)})`);return e.split(r).map((e,r)=>{let i=n.find(t=>e===`{{${t}}}`);return i===void 0?e:(0,$.jsx)(`code`,{className:`font-mono`,children:t[i]},r)})}var _r=({entries:e,rowState:t,setRows:n,saving:r,formHostRef:i,taxRateField:a,formKey:o,onRowExpand:s,onAddViaForm:c,parentObjectName:l})=>{let u=Oe(),{currency:d}=we(),{t:f}=Sn(),p=k(),[m,h]=(0,Q.useState)({}),g=(0,Q.useRef)(``);(0,Q.useEffect)(()=>{let e=i.current;if(!e)return;let t=()=>{let t=hr(e),n;try{n=JSON.stringify(t)}catch{n=String(Math.random())}n!==g.current&&(g.current=n,h(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 _=m[a],v=_===void 0?null:Number.isFinite(Number(_))?Number(_):0,y=e.reduce((e,n)=>e+zn(t[n.id]?.rows??[],n.config.amountField||`amount`),0),b=v!==null&&e.some(e=>!!e.config.amountField),x=v??0,S=x/100*y,C=y+S,w=lr(e,d),T=e=>dr(e,w,u);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||f(`form.lineItems.title`)}),i.childObject?e.status===`failed`?(0,$.jsx)(`p`,{className:`py-4 text-sm text-muted-foreground`,role:`status`,"data-testid":`md-detail-schema-unavailable`,children:gr(f(`form.masterDetail.schemaUnavailable`,{object:`{{object}}`}),{object:i.childObject})}):e.status===`underivable`?(0,$.jsx)(`p`,{className:`py-4 text-sm text-muted-foreground`,"data-testid":`md-detail-no-relationship-field`,children:gr(f(`form.masterDetail.noRelationshipField`,{object:`{{object}}`,parent:`{{parent}}`,property:`{{property}}`}),{object:i.childObject,parent:l,property:`relationshipField`})}):i.columns?.length?(0,$.jsx)(E,{value:t[e.id]?.rows??[],onChange:t=>n(e.id,t),disabled:r,contextRecord:m,...i.inlineMode===`form`||(i.formFields?.length??0)>(i.columns?.length??0)?{onRowExpand:t=>s(e.id,t)}:{},displayMode:i.inlineMode===`form`?`list`:`grid`,...i.inlineMode===`form`?{onAdd:()=>c(e.id)}:{},field:{columns:jt(i.columns,{perms:p,objectName:i.childObject}),totalField:b?void 0:i.amountField||(i.totalField?`amount`:void 0),sortField:e.sortField,minRows:i.minRows,maxRows:i.maxRows,addLabel:i.inlineMode===`form`?i.addLabel||f(`detail.add`):i.addLabel}}):(0,$.jsx)(`p`,{className:`py-4 text-sm text-muted-foreground`,children:f(`form.masterDetail.loadingColumns`)}):(0,$.jsx)(`p`,{className:`py-4 text-sm text-muted-foreground`,"data-testid":`md-detail-no-child-object`,children:gr(f(`form.masterDetail.noChildObject`,{property:`{{property}}`}),{property:`childObject`})})]},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:f(`form.masterDetail.subtotal`)}),(0,$.jsx)(`dd`,{className:`tabular-nums`,"data-testid":`md-subtotal`,children:T(y)})]}),(0,$.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,$.jsx)(`dt`,{className:`text-muted-foreground`,children:f(`form.masterDetail.tax`,{rate:x})}),(0,$.jsx)(`dd`,{className:`tabular-nums`,"data-testid":`md-tax`,children:T(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:f(`form.masterDetail.total`)}),(0,$.jsx)(`dd`,{className:`tabular-nums`,"data-testid":`md-grand-total`,children:T(C)})]})]})})]})},vr=({schema:e,dataSource:t,className:n})=>{let r=e.details||[],i=e.mode===`edit`&&!!e.recordId,{language:a}=ke(),o=Ee(e.title,a),{t:s}=Sn(),c=r.some(e=>!e.relationshipField||!e.columns?.length||e.columns.some(e=>!e.type)),l=(0,Q.useMemo)(()=>fr(r),[e.details]),u=(0,Q.useMemo)(()=>r.map((e,t)=>({id:l[t],config:e,status:c?`pending`:`ready`})),[e.details,l,c]),[d,f]=(0,Q.useState)(null),h=d??u;(0,Q.useEffect)(()=>{if(!c){f(u);return}if(!t||typeof t.getObjectSchema!=`function`)return;let n=!1;return(async()=>{let r=await Promise.all(u.map(async n=>{let r=n.config,i=r.columns?.length?r.columns.every(e=>!!e.type):!1;if(r.relationshipField&&i)return{...n,status:`ready`};if(!r.childObject)return console.warn(`[MasterDetailForm] a detail collection has no childObject — refusing to fetch its schema. Set childObject to the child object the collection lists.`),{...n,status:`declined`};let a;try{a=await t.getObjectSchema(r.childObject)}catch(e){return console.warn(`[MasterDetailForm] could not load the schema of child object "${r.childObject}" — its columns cannot be derived, so the collection renders a refusal placeholder instead of a permanent "Loading columns…".`,e),{...n,status:`failed`}}try{let t=ar(r.childObject,a,e.objectName,{relationshipField:r.relationshipField,columns:r.columns,amountField:r.amountField}),i=r.amountField??t.amountField;return r.relationshipField&&r.columns?.length?{...n,config:{...r,columns:t.columns,amountField:i},status:`ready`,sortField:t.sortField,amountFieldDef:cr(a,i)}:{...n,status:`ready`,config:{...r,relationshipField:t.relationshipField,columns:t.columns,formFields:r.formFields??t.formFields,inlineMode:r.inlineMode??t.mode,amountField:i},sortField:t.sortField,amountFieldDef:cr(a,i)}}catch(e){return console.warn(`[MasterDetailForm] loaded the schema of child object "${r.childObject}" but could not derive its detail configuration; the collection cannot render its columns. Set relationshipField (and columns) explicitly on the detail entry.`,e),{...n,status:`underivable`}}}));n||f(r)})(),()=>{n=!0}},[t,e.objectName,e.details]);let[g,_]=(0,Q.useState)({}),v=(0,Q.useRef)(g);v.current=g;let y=(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);y.current=r})(),()=>{n=!0}},[t,e.objectName,e.details]);let[b,w]=(0,Q.useState)(0),[T,E]=(0,Q.useState)(!1),O=(0,Q.useRef)(!1),k=(0,Q.useRef)(null),A=(0,Q.useRef)(!1),j=`form-outcome:${Q.useId()}`,M=(0,Q.useCallback)(()=>{k.current&&=(clearTimeout(k.current),null)},[]),N=(0,Q.useCallback)(()=>{O.current=!1,E(!1),M()},[M]),P=(0,Q.useCallback)(()=>{O.current=!0,E(!0),M()},[M]),[F,I]=(0,Q.useState)(null),L=(0,Q.useRef)(null);L.current=F?.entryId??null;let R=pr(i&&t?h.flatMap(e=>e.config.childObject&&e.config.relationshipField?[e.config.childObject]:[]):[]),ee=(0,Q.useRef)(0),z=(0,Q.useRef)({}),te=(0,Q.useRef)(new Set),B=(0,Q.useRef)(new Set),ne=(0,Q.useRef)({}),re=String(e.recordId),V=(0,Q.useCallback)(e=>L.current===e.id||mr(v.current[e.id],e.config,re,y.current[e.config.childObject]),[re]),ie=(0,Q.useCallback)(async function n(r,i){if(i===`bus`){if(V(r)){te.current.add(r.id);return}te.current.delete(r.id)}let a=ee.current,o=(z.current[r.id]??0)+1;z.current[r.id]=o;let s=()=>ee.current===a&&z.current[r.id]===o,c=r.config;if(!t||!c.relationshipField){_(e=>({...e,[r.id]:{rows:[],original:[]}}));return}let l=i!==`load`,u=v.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&&L.current===r.id){te.current.add(r.id);return}if(l&&v.current[r.id]?.rows!==u){n(r,`bus`);return}_(e=>l&&(e[r.id]?.rows!==u||L.current===r.id)?(te.current.add(r.id),e):{...e,[r.id]:{rows:d.map(e=>({...e})),original:d.map(e=>({...e}))}})}},[t,e.recordId,V]);(0,Q.useEffect)(()=>{if(te.current.clear(),B.current.clear(),i&&t)for(let e of h)ie(e,`load`);return()=>{ee.current+=1}},[i,t,e.recordId,d]),(0,Q.useEffect)(()=>{for(let e of h){let t=e.config.childObject;if(!t||!e.config.relationshipField)continue;let n=R[t]??0,r=ne.current[e.id];ne.current[e.id]=n,r!==void 0&&r!==n&&ie(e,`bus`)}},[R,h,ie]),(0,Q.useEffect)(()=>{if(T)return;let e=te.current;for(let t of h)e.has(t.id)&&L.current!==t.id&&(B.current.has(t.id)||!V(t))&&(e.delete(t.id),ie(t,`replay`));B.current.clear()},[g,T,F,h,ie,V]);let ae=(0,Q.useCallback)((e,t)=>{_(n=>({...n,[e]:{rows:t,original:n[e]?.original??[]}}))},[]),H=e.taxRateField||`tax_rate`,U=F?g[F.entryId]?.rows?.[F.rowIdx]:void 0,W=F?h.find(e=>e.id===F.entryId)?.config:void 0,oe=(0,Q.useCallback)((e,t,n)=>{_(r=>{let i=r[e]??{rows:[],original:[]};return{...r,[e]:{...i,rows:i.rows.map((e,r)=>r===t?{...e,...n}:e)}}})},[]),G=(0,Q.useCallback)(e=>{_(t=>{let n=t[e]??{rows:[],original:[]},r=[...n.rows,{}];return I({entryId:e,rowIdx:r.length-1,isNew:!0}),{...t,[e]:{...n,rows:r}}})},[]),se=(0,Q.useCallback)(()=>{I(e=>(e?.isNew&&_(t=>{let n=t[e.entryId];return n?{...t,[e.entryId]:{...n,rows:n.rows.filter((t,n)=>n!==e.rowIdx)}}:t}),null))},[]),ce=(0,Q.useCallback)(async t=>{N(),e.onSuccess||Z.success(i?o?s(`form.savedNamed`,{title:o}):s(`form.saved`):s(`form.created`),{id:j}),i||(_({}),w(e=>e+1)),await e.onSuccess?.(t)},[i,e.onSuccess,o,h.length,N,j,s]),K=(0,Q.useCallback)(t=>{A.current||N(),e.onError?.(t)},[e,N]),le=(0,Q.useCallback)(async n=>{if(!t)throw Error(`MasterDetailForm: dataSource is required`);let r={...n};h.forEach(e=>{let t=e.config;t.totalField&&(r[t.totalField]=zn(v.current[e.id]?.rows??[],t.amountField||`amount`))});let a=i?h.filter(e=>e.config.relationshipField).map(e=>({entryId:e.id,input:{childObject:e.config.childObject,relationshipField:e.config.relationshipField,rows:v.current[e.id]?.rows??[],original:v.current[e.id]?.original??[],childSchema:y.current[e.config.childObject]}})):null,o=a?Ln(e.objectName,String(e.recordId),r,a.map(e=>e.input)):In(e.objectName,r,h.filter(e=>e.config.relationshipField).map(e=>({childObject:e.config.childObject,relationshipField:e.config.relationshipField,rows:v.current[e.id]?.rows??[],childSchema:y.current[e.config.childObject]}))),s=await q(t,o);if(a){let e=sr(o,s?.results,a);for(let t of e)B.current.add(t.entryId);_(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,h,e.objectName,e.recordId,i]),J=(0,Q.useCallback)(async e=>{if(A.current)throw Error(`This save was not sent: another save of this form was still in progress.`);A.current=!0,P();try{return await le(e)}finally{A.current=!1}},[le,P]),ue=(0,Q.useMemo)(()=>({type:`object-form`,objectName:e.objectName,mode:e.mode??`create`,recordId:e.recordId,initialValues:e.initialValues,initialData:e.initialData,formType:e.formType,sections:e.sections,fields:e.fields,title:o||void 0,showSubmit:!1,showCancel:!1,submitHandler:J,onSuccess:ce,onError:K}),[e,o,J,ce,K]),Y=(0,Q.useRef)(null),de=Ee(e.submitText,a)||s(i?`common.save`:`form.create`),fe=Ee(e.cancelText,a)||s(`common.cancel`),X=vn(),pe=(0,Q.useCallback)(()=>{if(X.uploading){Z.error(X.reason);return}O.current||Y.current?.querySelector(`form`)&&(O.current=!0,E(!0),Z.dismiss(j),setTimeout(()=>{(Y.current?.querySelector(`form`))?.requestSubmit()},0),k.current=setTimeout(()=>N(),1500))},[N,j,X.uploading,X.reason]);return(0,Q.useEffect)(()=>()=>{k.current&&clearTimeout(k.current)},[]),(0,$.jsx)(yn,{gate:X,children:(0,$.jsxs)(`div`,{className:x(`space-y-6`,n,e.className),children:[(0,$.jsx)(`div`,{ref:Y,children:(0,$.jsx)(qr,{schema:ue,dataSource:t},b)}),(0,$.jsx)(_r,{entries:h,rowState:g,setRows:ae,saving:T,formHostRef:Y,taxRateField:H,formKey:b,onRowExpand:(e,t)=>I({entryId:e,rowIdx:t}),onAddViaForm:G,parentObjectName:e.objectName}),F&&W&&(0,$.jsxs)(S,{className:`border-primary/40 shadow-none ring-1 ring-primary/10`,"data-testid":`md-row-form`,children:[(0,$.jsxs)(C,{className:`pb-2 flex flex-row items-center justify-between gap-2 space-y-0`,children:[(0,$.jsx)(p,{className:`text-sm font-medium`,children:s(`form.masterDetail.rowTitle`,{title:W.title||s(`form.masterDetail.lineItem`),row:F.rowIdx+1})}),(0,$.jsx)(D,{type:`button`,variant:`ghost`,size:`sm`,className:`h-7 text-xs text-muted-foreground`,onClick:se,children:s(`common.close`)})]}),(0,$.jsx)(m,{children:(0,$.jsx)(`fieldset`,{disabled:T,className:`min-w-0`,children:(0,$.jsx)(qr,{schema:{type:`object-form`,objectName:W.childObject,mode:`edit`,initialData:U??{},...W.formFields?.length?{fields:W.formFields}:{},submitText:s(`form.masterDetail.applyRow`),submitHandler:async e=>e,onSuccess:e=>{oe(F.entryId,F.rowIdx,e),I(null)},onCancel:se},dataSource:t},`row-${F.entryId}-${F.rowIdx}`)})})]}),e.showSubmit!==!1&&(0,$.jsxs)(`div`,{className:`border-t border-border pt-4`,children:[(0,$.jsx)(bn,{gate:X}),(0,$.jsxs)(`div`,{className:`flex items-center justify-end gap-2`,children:[e.onCancel&&(0,$.jsx)(D,{type:`button`,variant:`outline`,onClick:e.onCancel,disabled:T,"data-testid":`md-form-cancel`,children:fe}),(0,$.jsx)(D,{type:`button`,onClick:pe,disabled:T||c&&!d||X.uploading,"data-testid":`md-form-submit`,children:X.uploading?X.busyLabel:T?s(`detail.saving`):de})]})]})]})})};function yr(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){ht(r,e.objectName);continue}n.push(t)}return at(n,e.customFields,t=>{let n=e.objectSchema?.fields?.[t];if(n)return{...vt(t,e),group:n.group}})}function br(e){return e.mode!==`create`&&!!e.recordId&&!!e.dataSource&&e.loadedRecordId!==e.recordId}s();function xr(e,t){let n=a({fieldGroups:t,fields:Object.fromEntries(e.map(e=>[e.name,{group:e.group}]))});if(!n)return null;let r=new Set(n.flatMap(e=>e.fields)),i=e.map(e=>e.name).filter(e=>!r.has(e)),o=n.map(e=>({...e.key===void 0?{}:{name:e.key},...e.key===void 0?{}:{label:e.label??e.key},...e.description===void 0?{}:{description:e.description},...e.visibleWhen===void 0?{}:{visibleWhen:e.visibleWhen},fields:[...e.fields],...e.collapse===`none`?{}:{collapsible:!0},...e.collapse===`collapsed`?{collapsed:!0}:{}}));if(i.length>0){let e=o[o.length-1];e&&e.name===void 0?e.fields=[...e.fields??[],...i]:o.push({fields:i})}return o}function Sr(e,t){return!!e||!!t}function Cr(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 wr=new Set;function Tr(e,t){wr.has(t)||(wr.add(t),console.warn(`[object-ui] ${Cr(e)}`))}function Er(e,t){let n=!!e.collapsible||!!e.collapsed,r=Sr(t.title,t.description);n&&!r&&Tr(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 Dr=4;function Or(e){let{key:t,title:n,description:r,visibleWhen:i,members:a,className:o,collapse:s}=e;if(!Sr(n,r))return i==null?[]:[{name:`__section_gate_${t}`,type:`section-divider`,visibleWhen:i,fields:a,colSpan:Dr}];let c={name:`__section_${t}`,label:n,type:`section-divider`,description:r,visibleWhen:i,fields:a,colSpan:Dr};return o!==void 0&&(c.className=o),s&&(c.collapsible=s.collapsible,c.collapsed=s.collapsed,c.onToggle=s.onToggle),[c]}var kr=Ce({"form.discardTitle":`Discard changes?`,"form.discardMessage":`You have unsaved changes. If you close this form now, your edits will be lost.`,"form.dialogDescriptionFallback":`Complete the form fields, then submit or cancel.`,"form.keepEditing":`Keep editing`,"form.discard":`Discard`,"form.create":`Create`,"form.update":`Update`,"common.cancel":`Cancel`,"form.errorLoading":`Error loading form`,"publicForm.loading":`Loading form…`},`form.discardTitle`),Ar=({schema:e,dataSource:t,className:n})=>{let{fieldLabel:r,sectionLabel:i}=De(),a=k(),{userId:o}=a,{t:s}=kr(),c=vn(),l=_e(),[d,f]=(0,Q.useState)(null),p=(0,Q.useCallback)(t=>kt(t,{perms:a,objectName:e.objectName,mode:e.mode,objectSchema:d}),[a,e.objectName,e.mode,d]),[m,h]=(0,Q.useState)([]),[g,y]=(0,Q.useState)({}),[S,C]=(0,Q.useState)(!0),[T,E]=(0,Q.useState)(mn),P=(0,Q.useRef)({schema:0,record:0}),F=gn(T),[R,z]=(0,Q.useState)(!1),[te,B]=(0,Q.useState)(!1),{saveWithOcc:ne,conflictDialog:re}=pn(),[V,ie]=(0,Q.useState)(!1),ae=(0,Q.useRef)(!1),H=e.confirmOnDiscard!==!1,U=e.open!==!1,W=e.drawerSide||`right`,oe=(0,Q.useId)(),[G,se]=(0,Q.useState)({});(0,Q.useEffect)(()=>{let n=!1,r=hn(P,E,`schema`);return(async()=>{if(!t){C(!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),C(!1)}})(),()=>{n=!0}},[e.objectName,t]);let ce=(0,Q.useRef)(void 0),K=(0,Q.useRef)(null),{refetch:le,onDirtyChange:q,saved:J}=Be(e.objectName,e.recordId,!!e.recordId&&e.mode!==`create`),ue=(0,Q.useCallback)(e=>{z(e),q(e)},[q]);(0,Q.useEffect)(()=>{let n=!1,r=hn(P,E,`record`);return(d||!t)&&(async()=>{if(e.mode===`create`||!e.recordId){K.current=null,y(nt(d,Ct(e),{currentUserId:o})),r.commit(),C(!1);return}if(!t){K.current=null,y(Ct(e)),r.commit(),C(!1);return}ce.current!==e.recordId&&(C(!0),z(!1));try{let i=await t.findOne(e.objectName,e.recordId);if(n)return;ce.current=e.recordId,K.current=zt(e,i),y(i||{}),r.commit()}catch(e){if(n)return;r.fail(e)}finally{n||C(!1)}})(),()=>{n=!0}},[d,e.mode,e.recordId,e.initialData,e.initialValues,t,e.objectName,le]);let Y=(0,Q.useCallback)(t=>St(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=br({mode:e.mode,recordId:e.recordId,dataSource:t,loadedRecordId:ce.current}),i=()=>{n||C(!1)};if(e.sections?.length){i();return}(d||e.customFields?.length)&&(h(yr({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 fe=(0,Q.useMemo)(()=>{if(e.sections?.length)return null;let t=en(m,d);e.mode===`create`&&(t=tn(t,d));let n=xr(t,d?.fieldGroups);if(!n)return null;let r=e.columns&&e.columns>0?Math.min(Math.floor(e.columns),4):Yt(t.length);return n.map(e=>({...e,columns:r}))},[e.sections,e.columns,e.mode,m,d]),X=(0,Q.useCallback)(async n=>{if(c.uploading){Z.error(c.reason);return}ie(!0);try{if(!t&&!e.submitHandler&&ct(e))return e.onSuccess&&await e.onSuccess(n),e.onOpenChange?.(!1),n;let r,i=It(n,d,{canEdit:wt(a,e.objectName)}),o=e.mode===`create`?rt(i,d):Vt(i,K.current,e);if(e.submitHandler)r=await e.submitHandler(o);else if(!t)throw ut();else if(e.mode===`create`)r=await t.create(e.objectName,o);else if(e.mode===`edit`&&e.recordId){let n=await ne({dataSource:t,objectName:e.objectName,recordId:e.recordId,payload:o,baseRecord:g});if(n.status===`cancelled`)return;r=n.result}return K.current=Ht(K.current,e,o),J(),e.onSuccess&&await e.onSuccess(r),e.onOpenChange?.(!1),r}catch(t){throw e.onError&&e.onError(t),t}finally{ie(!1)}},[e,t,d,ne,g,a,c.uploading,c.reason,J]),pe=(0,Q.useCallback)(()=>{B(!1),ae.current&&(ae.current=!1,e.onCancel?.()),e.onOpenChange?.(!1)},[e]),me=(0,Q.useCallback)(e=>{ae.current=e,H&&R?B(!0):pe()},[H,R,pe]);(0,Q.useEffect)(()=>{if(!U||!R||!H)return;let e=e=>{e.preventDefault(),e.returnValue=``};return window.addEventListener(`beforeunload`,e),()=>window.removeEventListener(`beforeunload`,e)},[U,R,H]);let he=(0,Q.useCallback)(()=>{ae.current=!0,pe()},[pe]),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]),ve=e.layout??`vertical`,ye=e.showSubmit!==!1&&e.mode!==`view`,be=e.showCancel!==!1,xe=e.submitText||(e.mode===`create`?s(`form.create`):s(`form.update`)),Se=e.cancelText||s(`common.cancel`),Ce={type:`form`,objectName:e.objectName,layout:ve,defaultValues:g,previousValues:e.mode===`edit`&&e.recordId?g:void 0,submitLabel:xe,cancelLabel:Se,showSubmit:ye,showCancel:be,onSubmit:X,onCancel:he,onDirtyChange:ue,showActions:!1,id:oe},we=()=>{if(F)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:s(`form.errorLoading`)}),(0,$.jsx)(`p`,{className:`text-red-600 text-sm mt-1`,children:F.message})]});if(S)return(0,$.jsxs)(`div`,{className:`p-8 text-center`,children:[(0,$.jsx)(`div`,{className:`inline-block animate-spin rounded-full h-8 w-8 border-b-2 border-gray-900`}),(0,$.jsx)(`p`,{className:`mt-2 text-sm text-gray-600`,children:s(`publicForm.loading`)})]});if(e.sections?.length){let t=[];e.sections.forEach((n,r)=>{let i=n.name||String(r),a=p(Y(n)),o=Er(n,{live:G[i],title:n.label,description:n.description,where:`DrawerForm section '${i}' of object '${e.objectName}'`,setCollapsed:e=>se(t=>({...t,[i]:e}))});t.push(...Or({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)});let n={...Ce,fields:t};return(0,$.jsx)(de,{schema:n})}if(fe?.length){let t=Number(fe[0]?.columns)||1,n=[];fe.forEach((r,a)=>{let o=p(Y(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=Er(r,{live:G[s],title:c,description:r.description,where:`DrawerForm field group '${s}' of object '${e.objectName}'`,setCollapsed:e=>se(t=>({...t,[s]:e}))});n.push(...Or({key:s,title:c,description:r.description,visibleWhen:r.visibleWhen,members:o.map(e=>e.name),collapse:l}));let u=t>1?Qt(o,t):o;n.push(...l.collapsed?u.map(e=>({...e,hidden:!0})):u)});let r=nn[t],a={...Ce,fields:n,columns:t,...r?{fieldContainerClass:r}:{}};return(0,$.jsx)(de,{schema:a})}let t=on(p(m),d,e.columns,e.mode),n=nn[t.columns||1],r={...Ce,fields:t.fields,columns:t.columns,...n?{fieldContainerClass:n}:{}};return(0,$.jsx)(de,{schema:r})},Te=!F&&!S?(0,$.jsx)(Nt,{affordance:Ot({perms:a,objectName:e.objectName,mode:e.mode,objectSchema:d}),objectName:e.objectName,objectSchema:d}):null,Ee=e.subforms,Oe=Ee?.length&&e.mode!==`view`?(0,$.jsx)(vr,{schema:{type:`object-master-detail-form`,objectName:e.objectName,mode:e.mode===`edit`?`edit`:`create`,recordId:e.recordId,fields:e.fields,sections:e.sections,submitText:e.submitText,cancelText:Se,details:Ee,onSuccess:async t=>{await e.onSuccess?.(t),e.onOpenChange?.(!1)},onError:e.onError,onCancel:()=>e.onOpenChange?.(!1)},dataSource:t}):(0,$.jsxs)($.Fragment,{children:[Te,we()]});return l?(0,$.jsxs)(`div`,{className:`@container rounded-md border bg-card p-4`,children:[(e.title||e.description)&&(0,$.jsxs)(`div`,{className:`mb-3 space-y-0.5`,children:[e.title&&(0,$.jsx)(`div`,{className:`text-sm font-semibold`,children:e.title}),e.description&&(0,$.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:e.description})]}),Oe]}):(0,$.jsx)(N,{open:U,onOpenChange:t=>{if(t){e.onOpenChange?.(!0);return}me(!1)},children:(0,$.jsxs)(_,{side:W,className:x(`overflow-y-auto`,n,e.className),style:ge,children:[(e.title||e.description)&&(0,$.jsxs)(b,{children:[e.title&&(0,$.jsx)(u,{children:e.title}),e.description?(0,$.jsx)(v,{children:e.description}):(0,$.jsx)(v,{className:`sr-only`,children:s(`form.dialogDescriptionFallback`)})]}),(0,$.jsx)(`div`,{className:`@container py-4`,children:(0,$.jsx)(yn,{gate:c,children:Oe})}),!F&&!S&&!(Ee?.length&&e.mode!==`view`)&&(ye||be)&&(0,$.jsxs)(`div`,{className:`shrink-0 border-t px-4 py-3 bg-background`,"data-testid":`drawer-form-footer`,children:[(0,$.jsx)(bn,{gate:c}),(0,$.jsxs)(`div`,{className:`flex flex-col sm:flex-row gap-2 sm:justify-end`,children:[be&&(0,$.jsx)(D,{type:`button`,variant:`outline`,onClick:he,disabled:V,className:`w-full sm:w-auto`,children:Se}),ye&&(0,$.jsxs)(D,{type:`submit`,form:oe,disabled:V||c.uploading,className:`w-full sm:w-auto`,children:[V&&(0,$.jsx)(Ie,{className:`mr-2 h-4 w-4 animate-spin`}),c.uploading?c.busyLabel:xe]})]})]}),(0,$.jsx)(O,{open:te,onOpenChange:B,children:(0,$.jsxs)(I,{children:[(0,$.jsxs)(w,{children:[(0,$.jsx)(ee,{children:s(`form.discardTitle`)}),(0,$.jsx)(M,{children:s(`form.discardMessage`)})]}),(0,$.jsxs)(j,{children:[(0,$.jsx)(L,{onClick:()=>{ae.current=!1},children:s(`form.keepEditing`)}),(0,$.jsx)(A,{onClick:pe,children:s(`form.discard`)})]})]})}),re]})})},jr=[`name`,`label`,`description`,`collapsible`,`collapsed`,`visibleWhen`],Mr=[`columns`,`pane`],Nr=new Set;function Pr(e,t){Nr.has(e)||(Nr.add(e),t())}function Fr(e){return Array.isArray(e)&&e.some(e=>typeof e==`object`&&!!e&&typeof e.group==`string`)}function Ir(e){let t=e?.fields;return!t||typeof t!=`object`?null:xr(Object.entries(t).map(([e,t])=>({name:e,group:t?.group})),e?.fieldGroups)}function Lr(e,t){if(!Fr(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`&&Pr(`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`?Rr(e,[]):e)}let s=a?Ir(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=zr(e);Br(e,t,r);let i=c.get(t);return i?{...i,...n}:((a||!o)&&Pr(`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\`.)`)),Rr(e,[]))})}function Rr(e,t){return{...zr(e),fields:t}}function zr(e){let t={};for(let n of Mr){let r=e[n];r!==void 0&&(t[n]=r)}return t}function Br(e,t,n){let r=jr.filter(t=>e[t]!==void 0);r.length!==0&&Pr(`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.`))}var Vr=Ce({"form.discardTitle":`Discard changes?`,"form.discardMessage":`You have unsaved changes. If you close this form now, your edits will be lost.`,"form.dialogDescriptionFallback":`Complete the form fields, then submit or cancel.`,"form.masterDetail.editorDescription":`Enter the record and its line items, then save.`,"form.keepEditing":`Keep editing`,"form.discard":`Discard`,"form.create":`Create`,"form.update":`Update`,"common.cancel":`Cancel`,"form.errorLoading":`Error loading form`},`form.discardTitle`),Hr={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`},Ur=({schema:e,dataSource:t,className:n})=>{let{fieldLabel:r,sectionLabel:i}=De(),{t:a}=Vr(),o=vn(),s=_e(),c=k(),[l,u]=(0,Q.useState)(null),f=(0,Q.useCallback)(t=>kt(t,{perms:c,objectName:e.objectName,mode:e.mode,objectSchema:l}),[c,e.objectName,e.mode,l]),[p,m]=(0,Q.useState)([]),[g,_]=(0,Q.useState)({}),[v,b]=(0,Q.useState)(!0),[S,C]=(0,Q.useState)(mn),T=(0,Q.useRef)({schema:0,record:0}),E=gn(S),[N,R]=(0,Q.useState)(!1),[z,B]=(0,Q.useState)(!1),[ne,re]=(0,Q.useState)(!1),[V,ie]=(0,Q.useState)({}),{saveWithOcc:ae,conflictDialog:H}=pn(),U=(0,Q.useRef)(!1),W=e.confirmOnDiscard!==!1,oe=e.open!==!1,G=e.modalCloseButton!==!1,se=(0,Q.useId)(),ce=(0,Q.useMemo)(()=>Lr(e.sections,{objectName:e.objectName,formType:e.formType,objectDef:l,resolvable:typeof t?.getObjectSchema==`function`}),[e.sections,e.objectName,e.formType,l,t]),K=(0,Q.useMemo)(()=>{if(e.sections?.length)return null;let t=en(p,l);e.mode===`create`&&(t=tn(t,l));let n=xr(t,l?.fieldGroups);if(!n)return null;let r=e.columns&&e.columns>0?Math.min(Math.floor(e.columns),4):Yt(t.length);return n.map(e=>({...e,columns:r}))},[e.sections,e.columns,e.mode,p,l]),le=ce?.length?ce:K??void 0,q=(0,Q.useMemo)(()=>le?.length?null:on(p,l,e.columns,e.mode),[p,l,e.columns,e.mode,le]),J=Hr[(0,Q.useMemo)(()=>{if(e.modalSize)return e.modalSize;if(q?.columns&&q.columns>1)return an(q.columns);if(le?.length){let e=Math.max(...le.map(e=>Number(e.columns)||1));if(e>1)return an(e)}return`default`},[e.modalSize,q,le])]||Hr.default;(0,Q.useEffect)(()=>{let n=!1,r=hn(T,C,`schema`);return(async()=>{if(!t){b(!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),b(!1)}})(),()=>{n=!0}},[e.objectName,t]);let ue=(0,Q.useRef)(void 0),Y=(0,Q.useRef)(null),{refetch:fe,onDirtyChange:X,saved:pe}=Be(e.objectName,e.recordId,!!e.recordId&&e.mode!==`create`),me=(0,Q.useCallback)(e=>{B(e),X(e)},[X]);(0,Q.useEffect)(()=>{let n=!1,r=hn(T,C,`record`);return(l||!t)&&(async()=>{if(e.mode===`create`||!e.recordId){Y.current=null,_(nt(l,Ct(e),{currentUserId:c.userId})),r.commit(),b(!1);return}if(!t){Y.current=null,_(Ct(e)),r.commit(),b(!1);return}ue.current!==e.recordId&&(b(!0),B(!1));try{let i=await t.findOne(e.objectName,e.recordId);if(n)return;ue.current=e.recordId,Y.current=zt(e,i),_(i||{}),r.commit()}catch(e){if(n)return;r.fail(e)}finally{n||b(!1)}})(),()=>{n=!0}},[l,e.mode,e.recordId,e.initialData,e.initialValues,t,e.objectName,fe]);let he=(0,Q.useCallback)(t=>St(t,{objectSchema:l,objectName:e.objectName,readOnly:e.readOnly,mode:e.mode,recordId:e.recordId,fieldLabel:r,customFields:e.customFields}),[l,e.readOnly,e.mode,e.recordId,e.objectName,e.customFields,r]);(0,Q.useEffect)(()=>{if(!l&&t)return;let n=br({mode:e.mode,recordId:e.recordId,dataSource:t,loadedRecordId:ue.current}),i=()=>{n||b(!1)};if(e.sections?.length){i();return}(l||e.customFields?.length)&&(m(yr({fields:e.fields,objectSchema:l,objectName:e.objectName,readOnly:e.readOnly,mode:e.mode,recordId:e.recordId,fieldLabel:r,customFields:e.customFields})),i())},[l,e.fields,e.customFields,e.sections,e.readOnly,e.mode,t]);let ge=(0,Q.useCallback)(async n=>{if(o.uploading){Z.error(o.reason);return}R(!0);try{if(!t&&!e.submitHandler&&ct(e))return e.onSuccess&&await e.onSuccess(n),e.onOpenChange?.(!1),n;let r,i=It(n,l,{canEdit:wt(c,e.objectName)}),a=e.mode===`create`?rt(i,l):Vt(i,Y.current,e);if(e.submitHandler)r=await e.submitHandler(a);else if(!t)throw ut();else if(e.mode===`create`)r=await t.create(e.objectName,a);else if(e.mode===`edit`&&e.recordId){let n=await ae({dataSource:t,objectName:e.objectName,recordId:e.recordId,payload:a,baseRecord:g});if(n.status===`cancelled`)return;r=n.result}return Y.current=Ht(Y.current,e,a),pe(),e.onSuccess&&await e.onSuccess(r),e.onOpenChange?.(!1),r}catch(t){throw e.onError&&e.onError(t),t}finally{R(!1)}},[e,t,l,c,ae,g,o.uploading,o.reason,pe]),ve=(0,Q.useCallback)(()=>{re(!1),U.current&&(U.current=!1,e.onCancel?.()),e.onOpenChange?.(!1)},[e]),ye=(0,Q.useCallback)(e=>{U.current=e,W&&z?re(!0):ve()},[W,z,ve]);(0,Q.useEffect)(()=>{if(!oe||!z||!W)return;let e=e=>{e.preventDefault(),e.returnValue=``};return window.addEventListener(`beforeunload`,e),()=>window.removeEventListener(`beforeunload`,e)},[oe,z,W]);let be=(0,Q.useCallback)(()=>{U.current=!0,ve()},[ve]),xe=e.layout??`vertical`,Se=e.showSubmit!==!1&&e.mode!==`view`,Ce=e.showCancel!==!1,we=e.submitText||(e.mode===`create`?a(`form.create`):a(`form.update`)),Te=e.cancelText||a(`common.cancel`),Ee={type:`form`,objectName:e.objectName,layout:xe,defaultValues:g,previousValues:e.mode===`edit`&&e.recordId?g:void 0,submitLabel:we,cancelLabel:Te,showSubmit:Se,showCancel:Ce,onSubmit:ge,onCancel:be,onDirtyChange:me,showActions:!1,id:se},Oe=()=>{if(E)return(0,$.jsxs)(`div`,{className:`p-4 border border-red-300 bg-red-50 rounded-md`,children:[(0,$.jsx)(`h3`,{className:`text-red-800 font-semibold`,children:a(`form.errorLoading`)}),(0,$.jsx)(`p`,{className:`text-red-600 text-sm mt-1`,children:E.message})]});if(v)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)(F,{className:`h-4 w-24`}),(0,$.jsx)(F,{className:`h-10 w-full`})]},e))});if(ce?.length){let t=ce,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=nn[s],l=t.map((t,i)=>{let o=f(he(t)),c=n(t,i),l=r(t);return{key:c,title:l,description:t.description,resolveCollapse:()=>Er(t,{live:V[c],title:l,description:t.description,where:`ModalForm section '${c}' of object '${e.objectName}'`,setCollapsed:e=>ie(t=>({...t,[c]:e}))}),visibleWhen:t.visibleWhen,className:t.className,gridClassName:t.gridClassName,fields:s>1?Qt(o,s,a(t.columns)):o}}).filter(e=>e.fields.length>0),u={...Ee,columns:s,...c?{fieldContainerClass:c}:{}};if(e.contentLayout===`tabbed`&&l.length>1){let e={...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}))};return(0,$.jsx)(de,{schema:e})}let d=[];l.forEach(e=>{let t=e.resolveCollapse();d.push(...Or({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)});let p={...u,fields:d};return(0,$.jsx)(de,{schema:p})}if(K?.length){let t=Number(K[0]?.columns)||1,n=[];K.forEach((r,a)=>{let o=f(he(r));if(!o.length)return;let s=r.name?i(e.objectName,r.name,r.label||r.name):r.label,c=r.name||String(a),l=Er(r,{live:V[c],title:s,description:r.description,where:`ModalForm field group '${c}' of object '${e.objectName}'`,setCollapsed:e=>ie(t=>({...t,[c]:e}))});n.push(...Or({key:c,title:s,description:r.description,visibleWhen:r.visibleWhen,members:o.map(e=>e.name),collapse:l}));let u=t>1?Qt(o,t):o;n.push(...l.collapsed?u.map(e=>({...e,hidden:!0})):u)});let r=nn[t],a={...Ee,fields:n,columns:t,...r?{fieldContainerClass:r}:{}};return(0,$.jsx)(de,{schema:a})}let t=q??on(p,l,e.columns,e.mode),n=nn[t.columns||1],r={...Ee,fields:f(t.fields),columns:t.columns,...n?{fieldContainerClass:n}:{}};return(0,$.jsx)(de,{schema:r})},ke=e.subforms,Ae=!E&&!v?(0,$.jsx)(Nt,{affordance:Ot({perms:c,objectName:e.objectName,mode:e.mode,objectSchema:l}),objectName:e.objectName,objectSchema:l}):null;if(s)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})]}),Ae,Oe()]});if(ke?.length&&e.mode!==`view`)return(0,$.jsx)(P,{open:oe,onOpenChange:e.onOpenChange,children:(0,$.jsxs)(te,{showCloseButton:G,className:x(J,`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)(d,{className:`shrink-0 px-4 pt-4 sm:px-6 sm:pt-6 pb-2 border-b`,children:[e.title&&(0,$.jsx)(h,{children:e.title}),e.description?(0,$.jsx)(y,{children:e.description}):(0,$.jsx)(y,{className:`sr-only`,children:a(`form.masterDetail.editorDescription`)})]}),(0,$.jsx)(`div`,{className:`@container flex-1 overflow-y-auto px-4 sm:px-6 py-4`,children:(0,$.jsx)(vr,{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:we,cancelText:Te,details:ke,onSuccess:async t=>{await e.onSuccess?.(t),e.onOpenChange?.(!1)},onError:e.onError,onCancel:()=>e.onOpenChange?.(!1)},dataSource:t})})]})});let je=!v&&!E&&(Se||Ce);return(0,$.jsx)(P,{open:oe,onOpenChange:t=>{if(t){e.onOpenChange?.(!0);return}ye(!1)},children:(0,$.jsxs)(te,{showCloseButton:G,className:x(J,`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)(d,{className:`shrink-0 px-4 pt-4 sm:px-6 sm:pt-6 pb-2 border-b`,children:[e.title&&(0,$.jsx)(h,{children:e.title}),e.description?(0,$.jsx)(y,{children:e.description}):(0,$.jsx)(y,{className:`sr-only`,children:a(`form.dialogDescriptionFallback`)})]}),(0,$.jsx)(`div`,{className:`@container flex-1 overflow-y-auto px-4 sm:px-6 py-4`,children:(0,$.jsxs)(yn,{gate:o,children:[Ae,Oe()]})}),je&&(0,$.jsxs)(`div`,{className:`shrink-0 border-t px-4 sm:px-6 py-3 bg-background`,"data-testid":`modal-form-footer`,children:[(0,$.jsx)(bn,{gate:o}),(0,$.jsxs)(`div`,{className:`flex flex-col sm:flex-row gap-2 sm:justify-end`,children:[Ce&&(0,$.jsx)(D,{type:`button`,variant:`outline`,onClick:be,disabled:N,className:`w-full sm:w-auto`,children:Te}),Se&&(0,$.jsxs)(D,{type:`submit`,form:se,disabled:N||o.uploading,className:`w-full sm:w-auto`,children:[N&&(0,$.jsx)(Ie,{className:`mr-2 h-4 w-4 animate-spin`}),o.uploading?o.busyLabel:we]})]})]}),(0,$.jsx)(O,{open:ne,onOpenChange:re,children:(0,$.jsxs)(I,{children:[(0,$.jsxs)(w,{children:[(0,$.jsx)(ee,{children:a(`form.discardTitle`)}),(0,$.jsx)(M,{children:a(`form.discardMessage`)})]}),(0,$.jsxs)(j,{children:[(0,$.jsx)(L,{onClick:()=>{U.current=!1},children:a(`form.keepEditing`)}),(0,$.jsx)(A,{onClick:ve,children:a(`form.discard`)})]})]})}),H]})})};function Wr(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 Gr=[`title`,`description`,`submitText`,`cancelText`,`nextText`,`prevText`,`successMessage`];function Kr(e,t){let n=null;for(let r of Gr){let i=e[r];typeof i==`object`&&i&&(n??={...e},n[r]=Ee(i,t)||void 0)}return n??e}var qr=({schema:e,dataSource:t})=>{let n=k(),r=Fr(e?.sections),i=typeof t?.getObjectSchema==`function`,[a,o]=(0,Q.useState)(null);(0,Q.useEffect)(()=>{if(!r||!i)return;let n=!0;return Promise.resolve(t.getObjectSchema(e.objectName)).then(e=>{n&&o(e??null)}).catch(()=>{n&&o(null)}),()=>{n=!1}},[r,i,t,e.objectName]);let{language:s}=ke(),c=(0,Q.useMemo)(()=>{let t=Kr(Wr(e),s),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,c=e=>{let t=Lr(e.sections,{objectName:e.objectName,formType:e.formType,objectDef:a,resolvable:i});return t===e.sections?e:{...e,sections:t}};if(!n?.isLoaded)return c(o);let l=e=>Et(e,{perms:n,objectName:o.objectName,mode:o.mode});return c({...o,fields:l(o.fields),sections:o.sections?.map(e=>({...e,fields:l(e.fields)}))})},[e,n,a,i,s]),{sectionLabel:l}=De(),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(`, `);return(0,Q.useEffect)(()=>{f&&p&&console.warn(Xe(f,p))},[f,p]),d?(0,$.jsx)(vr,{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}):c.formType===`tabbed`&&c.sections?.length?(0,$.jsx)(Cn,{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}):c.formType===`wizard`&&c.sections?.length?(0,$.jsx)(kn,{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}):c.formType===`split`&&c.sections?.length?(0,$.jsx)(An,{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}):c.formType===`drawer`?(0,$.jsx)(Ar,{schema:{...c,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}):c.formType===`modal`?(0,$.jsx)(Ur,{schema:{...c,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}):(0,$.jsx)(Jr,{schema:c,dataSource:t})},Jr=({schema:e,dataSource:t})=>{let{fieldLabel:n,sectionLabel:r}=De(),{t:i}=Sn(),a=c(),o=vn(),s=k(),[l,u]=(0,Q.useState)(null),d=i(`form.deniedDescription`),p=(0,Q.useCallback)(t=>kt(t,{perms:s,objectName:e.objectName,mode:e.mode,objectSchema:l,deniedDescription:d}),[s,e.objectName,e.mode,l,d]),m=Ot({perms:s,objectName:e.objectName,mode:e.mode,objectSchema:l}),h=(0,$.jsx)(Nt,{affordance:m,objectName:e.objectName,objectSchema:l}),[g,_]=(0,Q.useState)([]),[v,y]=(0,Q.useState)(null),[b,x]=(0,Q.useState)(!0),[S,C]=(0,Q.useState)(mn),w=Q.useRef({schema:0,record:0}),E=gn(S),[D,O]=(0,Q.useState)(null),[A,j]=(0,Q.useState)(null);Ye(A);let{saveWithOcc:M,conflictDialog:N}=pn(),P=Q.useRef(null),F=e.customFields&&e.customFields.length>0,I=ct(e);(0,Q.useEffect)(()=>{F&&(y(Ct(e)),e.objectName&&t||x(!1))},[F,e.initialData,e.initialValues,e.objectName,t]),(0,Q.useEffect)(()=>{let n=!1,r=hn(w,C,`schema`),i={name:e.objectName,fields:{}};return e.objectName&&t?(async()=>{try{if(!t)throw Error(`DataSource is required when using ObjectQL schema fetching (inline fields not provided)`);let i=await t.getObjectSchema(e.objectName);if(n)return;if(!i)throw Error(`No schema found for object "${e.objectName}"`);u(i),r.commit()}catch(e){if(n)return;if(F){u(i),r.commit(),x(!1);return}r.fail(e),x(!1)}})():I?(u(i),r.commit()):x(!1),()=>{n=!0}},[e.objectName,t,F,I]);let L=!!e.recordId&&e.mode!==`create`&&!F,{refetch:ee,onDirtyChange:z,saved:te}=Be(e.objectName,e.recordId,L),B=Q.useRef(0);(0,Q.useEffect)(()=>{let n=ee!==B.current;B.current=ee;let r=!1,i=hn(w,C,`record`);return l&&!F&&(async()=>{if(!e.recordId||e.mode===`create`){P.current=null,y(Ct(e)),i.commit(),x(!1);return}if(!F){if(!t){if(I){P.current=null,y(Ct(e)),i.commit(),x(!1);return}i.fail(Error(`DataSource is required for fetching record data (inline data not provided)`)),x(!1);return}n||x(!0);try{let n=await t.findOne(e.objectName,e.recordId);if(r)return;P.current=zt(e,n),y(n),i.commit()}catch(e){if(r)return;console.error(`Failed to fetch record:`,e),i.fail(e)}finally{r||x(!1)}}})(),()=>{r=!0}},[e.objectName,e.recordId,e.mode,e.initialValues,e.initialData,t,l,F,I,ee]);let ne=(0,Q.useCallback)(e=>e,[]);(0,Q.useEffect)(()=>{if(!l)return;let r=e.fields||Object.keys(l.fields||{}),i=Array.isArray(r)?r:Object.keys(r),a=[];i.forEach(t=>{let n=typeof t==`string`?t:t.name;if(!n){ht(t,e.objectName);return}a.push({name:n,entry:t})}),_(at(a.map(e=>e.name),e.customFields,(t,r)=>{let i=a[r].entry,o=l.fields?.[t];if(o){let r={name:t,label:n(e.objectName,t,o.label||i),type:f(o.type,{multiple:o.multiple}),required:$e(o,Qe(e)),disabled:e.readOnly||e.mode===`view`||o.readonly,placeholder:o.placeholder,description:o.help||o.description,validation:T(o),visibleWhen:o.visibleWhen,readonlyWhen:o.readonlyWhen,requiredWhen:o.requiredWhen,group:o.group,field:o,widget:o.widget};if((o.type===`select`||o.type===`lookup`||o.type===`master_detail`)&&(r.options=o.options||[],r.multiple=o.multiple),(o.type===`number`||o.type===`currency`||o.type===`percent`)&&(r.inputType=`number`,r.min=o.min,r.max=o.max,r.step=typeof o.scale==`number`?10**-o.scale:`any`),o.type===`date`&&(r.inputType=`date`),o.type===`datetime`&&(r.inputType=`datetime-local`),(o.type===`text`||o.type===`textarea`||o.type===`markdown`||o.type===`html`)&&(r.maxLength=o.maxLength,r.minLength=o.minLength),(o.type===`file`||o.type===`image`)&&(r.inputType=`file`,r.multiple=o.multiple,r.accept=o.accept?o.accept.join(`,`):void 0,o.max_size)){let e=`Max size: ${R(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}},ne)),!F&&e.recordId&&e.mode!==`create`&&t||x(!1)},[l,e.fields,e.customFields,e.readOnly,e.mode,e.objectName,F,e.recordId,t]);let re=(0,Q.useCallback)(async(n,r)=>{if(o.uploading){Z.error(o.reason);return}if(n&&(n.nativeEvent||n._reactName===`onSubmit`)&&(console.warn(`ObjectForm: Received Event instead of data in handleSubmit! This suggests a Form renderer issue.`),r===void 0&&(n={})),!t&&!e.submitHandler&&ct(e))return e.onSuccess&&await e.onSuccess(n),n;let{payload:a,writePayload:c}=Ut(n,e,{objectSchema:l,canEdit:wt(s,e.objectName),snapshot:P.current});try{let n;if(e.submitHandler)n=await e.submitHandler(c);else if(!t)throw ut();else if(e.mode===`create`)n=await t.create(e.objectName,a);else if(e.mode===`edit`&&e.recordId){let r=await M({dataSource:t,objectName:e.objectName,recordId:e.recordId,payload:c,baseRecord:v});if(r.status===`cancelled`)return;n=r.result}else throw Error(`Invalid form mode or missing record ID`);if(P.current=Ht(P.current,e,c),te(),e.onSuccess)await e.onSuccess(n);else if(!e.submitHandler&&e.submitBehavior){let t=e.submitBehavior;switch(t.kind){case`redirect`:{let r=Je(t.url,qe(a,n));if(!r.ok){Z.error(r.refusal),O({message:e.successMessage||(e.mode===`create`?i(`form.created`):i(`form.saved`)),refusal:r.refusal});break}j({url:r.url,delayMs:t.delayMs??0});break}case`continue`:break;default:{let n=t.kind===`thank-you`&&t.message?t.message:e.successMessage||(e.mode===`create`?i(`form.created`):i(`form.saved`));Z.success(n),O({title:t.kind===`thank-you`?t.title:void 0,message:n});break}}}else if(!e.submitHandler){let t=We(e.navigateOnSuccess,n);if(t)return j({url:t,delayMs:0}),n;e.navigateOnSuccess?(console.warn("[ObjectForm] `navigateOnSuccess` was declared but produced no destination:",e.navigateOnSuccess),Z.success(e.successMessage||(e.mode===`create`?i(`form.created`):i(`form.saved`)),{description:i(`form.navigateRefused`)})):Z.success(e.successMessage||(e.mode===`create`?i(`form.created`):i(`form.saved`)))}return n}catch(t){throw console.error(`Failed to submit form:`,t),e.onError&&e.onError(t),t}},[e,t,s,l,M,v,o.uploading,o.reason,te,i]),V=(0,Q.useCallback)(()=>{e.onCancel&&e.onCancel()},[e]),ie=Qe(e),ae={...Q.useMemo(()=>ie?et(l,{currentUserId:s.userId}):{},[l,ie,s.userId]),...v},H=e.mode===`edit`&&e.recordId&&v&&typeof v==`object`?v:void 0,U=Q.useMemo(()=>{let t=en(g,l);return e.mode===`create`&&(t=tn(t,l)),t},[g,l,e.mode]),W=Q.useMemo(()=>e.sections?.length?null:xr(U,l?.fieldGroups),[e.sections,U,l]),oe=e.sections?.length?e.sections:W,[G,se]=(0,Q.useState)({});if(E)return(0,$.jsxs)(`div`,{className:`p-3 sm:p-4 border border-red-300 bg-red-50 rounded-md`,children:[(0,$.jsx)(`h3`,{className:`text-red-800 font-semibold`,children:i(`form.errorLoading`)}),(0,$.jsx)(`p`,{className:`text-red-600 text-sm mt-1`,children:E.message})]});if(b)return(0,$.jsxs)(`div`,{className:`p-4 sm:p-8 text-center`,children:[(0,$.jsx)(`div`,{className:`inline-block animate-spin rounded-full h-8 w-8 border-b-2 border-gray-900`}),(0,$.jsx)(`p`,{className:`mt-2 text-sm text-gray-600`,children:i(`publicForm.loading`)})]});if(D){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:D.title??i(`publicForm.thankYouTitle`)}),D.message&&(0,$.jsx)(`p`,{className:`mt-2 text-sm text-muted-foreground`,children:D.message})]});return D.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:D.refusal})]}):e}let ce=e.layout??`vertical`;if(oe?.length&&(!e.formType||e.formType===`simple`)){let t=W?U:g,a=e=>typeof e==`number`&&e>0?Math.min(Math.floor(e),4):void 0,s=oe.map(e=>a(e.columns)).filter(e=>e!=null),c=oe.reduce((e,t)=>e+(Array.isArray(t.fields)?t.fields.length:0),0),u=a(e.columns)??(s.length?Math.max(...s):Yt(c)),d=[],f={objectSchema:l,objectName:e.objectName,readOnly:e.readOnly,mode:e.mode,recordId:e.recordId,fieldLabel:n,customFields:e.customFields,pool:t};oe.forEach((n,i)=>{let o=(n.fields??[]).filter(e=>!ot(e)).map(yt);if(e.fields!=null&&e.sections?.length){let r=new Set(t.map(e=>e.name));o.forEach(t=>{typeof t!=`string`||r.has(t)||(l?.fields?.[t]!=null||(e.customFields??[]).some(e=>e?.name===t))&&_t(t,e.objectName,n.name||n.label)})}let s=p(St(n,f));if(s.length===0)return;let c=n.name||n.label||String(i),m=n.name?r(e.objectName,n.name,n.label||n.name):n.label,h=Er(n,{live:G[c],title:m,description:n.description,where:`ObjectForm section '${c}' of object '${e.objectName}'`,setCollapsed:e=>se(t=>({...t,[c]:e}))});d.push(...Or({key:c,title:m,description:n.description,visibleWhen:n.visibleWhen,members:s.map(e=>e.name),collapse:h}));let g=a(n.columns),_=u>1?Qt(s,u,g):s;h.collapsed?d.push(..._.map(e=>({...e,hidden:!0}))):d.push(..._)});let m=d,_=rn(u);return(0,$.jsx)(yn,{gate:o,children:(0,$.jsxs)(`div`,{className:`w-full @container`,children:[h,(0,$.jsx)(de,{schema:{type:`form`,objectName:e.objectName,fields:m,layout:ce,columns:u,..._?{fieldContainerClass:_}:{},defaultValues:ae,previousValues:H,showSubmit:e.showSubmit!==!1&&e.mode!==`view`,showCancel:e.showCancel!==!1,submitLabel:o.uploading?o.busyLabel:e.submitText||(e.mode===`create`?i(`form.create`):i(`form.update`)),cancelLabel:e.cancelText,onSubmit:re,onCancel:V,onDirtyChange:z}}),(0,$.jsx)(bn,{gate:o}),N]})})}let K=e.sections?.length,le=p(g),q=K?{fields:le,columns:e.columns}:on(le,l,e.columns,e.mode),J=e.mobile,ue=J?.fullscreenLongText?q.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}}):q.fields,Y=J?.stepper,fe=J?.stepperMinFields??8,X=Math.max(1,J?.stepperFieldsPerStep??1);if(!e.formType&&!K&&ue.length>=2&&(Y===!0||Y===`auto`&&a&&ue.length>=fe)){let n=ue,r=[];for(let e=0;e<n.length;e+=X){let t=n.slice(e,e+X);r.push({name:`step-${Math.floor(e/X)+1}`,label:t[0]?.label||t[0]?.name||`Step ${Math.floor(e/X)+1}`,fields:t})}return(0,$.jsx)(kn,{schema:{...e,formType:`wizard`,sections:r,showStepIndicator:!0},dataSource:t,className:e.className})}let pe={type:`form`,objectName:e.objectName,fields:ue,layout:ce,columns:q.columns,submitLabel:o.uploading?o.busyLabel:e.submitText||(e.mode===`create`?i(`form.create`):i(`form.update`)),cancelLabel:e.cancelText,showSubmit:e.showSubmit!==!1&&e.mode!==`view`,showCancel:e.showCancel!==!1,resetOnSubmit:e.showReset||e.submitBehavior?.kind===`continue`||!e.submitBehavior&&e.resetOnSuccess&&e.mode===`create`,defaultValues:ae,previousValues:H,onSubmit:re,onCancel:V,onDirtyChange:z,className:e.className,mobileStickyActions:!!J?.stickyActions};return(0,$.jsx)(yn,{gate:o,children:(0,$.jsxs)(`div`,{className:J?.stickyActions?`w-full pb-20 md:pb-0`:`w-full`,"data-mobile-form":J?`true`:void 0,children:[h,(0,$.jsx)(de,{schema:pe}),(0,$.jsx)(bn,{gate:o}),N]})})},Yr=`https://a.invalid/`,Xr=`https://b.invalid/`;function Zr(e){try{return new URL(e,Yr).origin===`https://a.invalid`&&new URL(e,Xr).origin===`https://b.invalid`}catch{return!1}}function Qr(e){let{navigate:t}=V(),n=(0,Q.useRef)(t);(0,Q.useEffect)(()=>{n.current=t},[t]),(0,Q.useEffect)(()=>{if(!e)return;let t=setTimeout(()=>{let t=Zr(e.url)?n.current:void 0;if(t){t(e.url);return}window.location.href=e.url},e.delayMs);return()=>clearTimeout(t)},[e])}var $r=1e3;function ei(e){return e?Math.max(0,Math.ceil(e.delayMs/1e3)):null}function ti(e){let[t,n]=(0,Q.useState)(e),[r,i]=(0,Q.useState)(()=>ei(e));return e!==t&&(n(e),i(ei(e))),(0,Q.useEffect)(()=>{if(!e)return;let t=setInterval(()=>{i(e=>e===null||e<=1?(clearInterval(t),0):e-1)},$r);return()=>clearInterval(t)},[e]),r}var ni=5e3,ri={text:200,email:254,url:2048,phone:32,textarea:ni,...Object.fromEntries(g.map(e=>[e,ni]))},ii=`_company_website_2`,ai=1500;function oi(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 si(e){return e&&e.map(e=>{let t=ri[String(e.type||``).toLowerCase()];return!t||e.maxLength?e:{...e,maxLength:t}})}var ci=({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]),Qr(m);let b=ti(m),x=e.honeypot===!1?null:e.honeypot||ii,S=e.minFillTime??ai,C=(0,Q.useMemo)(()=>si(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(oi(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]),O=(0,Q.useCallback)(()=>{a(!1),l(null),h(null),_(!1)},[]),k=(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:k,children:(0,$.jsxs)(`div`,{className:`max-w-md w-full bg-card border rounded-xl shadow-sm p-8 text-center space-y-4`,children:[(0,$.jsx)(`div`,{className:`mx-auto inline-flex h-14 w-14 items-center justify-center rounded-full bg-emerald-50 text-emerald-600 dark:bg-emerald-500/10 dark:text-emerald-400`,children:(0,$.jsx)(Fe,{className:`h-8 w-8`,"aria-hidden":`true`})}),(0,$.jsx)(`h2`,{className:`text-xl font-semibold text-foreground`,children:t?.title||n.thankYouTitle||`Thank You!`}),(0,$.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:t?.message||n.thankYouMessage||`Your submission has been received successfully.`}),e.allowMultiple&&(0,$.jsx)(D,{variant:`outline`,size:`sm`,onClick:O,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 A=e.texts??{},j=!!e.consent?.required,M=`${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:k,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:A.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)(qr,{schema:{type:`object-form`,objectName:e.objectName,mode:`create`,fields:e.fields,customFields:C,initialData:T,onSuccess:E,submitText:o?A.submitting??`Submitting...`:A.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:M,checked:u,onChange:e=>{d(e.target.checked),e.target.checked&&p(null)},"aria-required":j||void 0,"aria-invalid":f?`true`:void 0,"aria-describedby":f?`${M}-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??A.consentLabelDefault??`I agree to the privacy policy.`,j&&(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:A.consentLink??`Privacy policy`})]})]})]}),f&&(0,$.jsx)(`p`,{id:`${M}-error`,role:`alert`,className:`mt-1.5 text-xs text-destructive`,children:f})]}),o&&(0,$.jsxs)(`div`,{className:`mt-3 flex items-center gap-2 text-xs text-muted-foreground`,children:[(0,$.jsx)(Ie,{className:`h-3.5 w-3.5 animate-spin`,"aria-hidden":`true`}),(0,$.jsx)(`span`,{children:A.submitting??`Submitting…`})]})]}),(0,$.jsxs)(`div`,{className:`px-6 sm:px-8 py-4 border-t bg-muted/20 flex flex-col sm:flex-row items-center justify-between gap-2`,children:[(0,$.jsxs)(`p`,{className:`inline-flex items-center gap-1.5 text-xs text-muted-foreground`,children:[(0,$.jsx)(Le,{className:`h-3 w-3`,"aria-hidden":`true`}),(0,$.jsx)(`span`,{children:A.secureNotice??`Your information is transmitted securely and only used to respond to your request.`})]}),(0,$.jsxs)(`div`,{className:`flex items-center gap-3 text-xs text-muted-foreground/80`,children:[e.privacyPolicyUrl&&(0,$.jsxs)(`a`,{href:e.privacyPolicyUrl,target:`_blank`,rel:`noopener noreferrer`,className:`inline-flex items-center gap-1 underline hover:text-foreground`,children:[(0,$.jsx)(Re,{className:`h-3 w-3`,"aria-hidden":`true`}),A.consentLink??`Privacy policy`]}),(0,$.jsx)(`span`,{children:A.poweredBy??`Powered by ObjectStack`})]})]})]})})},li=Ce({"view.malformedFilter":`This view’s filter is malformed, so no records are shown: the {{subject}} condition cannot be applied.`,"form.lineItems.title":`Line Items`,"common.save":`Save`,"detail.saving":`Saving…`,"common.loading":`Loading…`,"form.lineItems.saveRecordFirst":`Save the record first to add line items.`,"form.lineItems.notLoaded":`This record’s line items have not been loaded.`,"form.lineItems.loadFailed":`Failed to load line items`,"form.lineItems.saveFailed":`Failed to save line items`,"form.lineItems.noChildObject":`This panel has no child object configured: set {{property}} to the object whose rows it lists.`},`view.malformedFilter`);function ui(e,t){let n=e?.message;return n?{message:n}:{op:t}}function di(e){return typeof e==`number`&&Number.isInteger(e)&&e>0}function fi(e,t){return di(e)?e:t}function pi(e,t){return e==null||di(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 mi=({schema:e})=>{let t=me(),{t:n}=li(),r=t?.dataSource,i=re(),a=k(),o=e.parentObject||i?.objectName,s=e.parentId||e.recordId||i?.recordId,[c,l]=(0,Q.useState)([]),[u,d]=(0,Q.useState)([]),[f,h]=(0,Q.useState)(!0),[g,_]=(0,Q.useState)(!1),[v,y]=(0,Q.useState)(!1),[b,w]=(0,Q.useState)(null),T=(0,Q.useRef)(0),[O,A]=(0,Q.useState)(void 0),j=O!==void 0&&O!==s,M=(0,Q.useRef)({dirty:!1,rowsHeldFor:void 0});(0,Q.useEffect)(()=>{M.current={dirty:v,rowsHeldFor:O}},[v,O]);let N=(0,Q.useRef)(null),P=(0,Q.useRef)(!1),[F,I]=(0,Q.useState)(0),[L,R]=(0,Q.useState)(!1),[ee,z]=(0,Q.useState)(null);(0,Q.useEffect)(()=>{let t=r;if(!t||typeof t.getObjectSchema!=`function`)return;if(!e.childObject){z(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||z(e??null)}).catch(()=>{n||z(null)}),()=>{n=!0}},[r,e.childObject]),(0,Q.useEffect)(()=>{let t=pi(e.limit,e.childObject);t&&console.warn(t)},[e.limit,e.childObject]);let te=ye(),B=le(e.filter,te),ne=JSON.stringify(B??null),V=JSON.stringify(e.sort??null),ie=(0,Q.useMemo)(()=>be(B),[ne]),H=ie.ok?void 0:ie.refusal,U=ie.ok?ie.node:void 0,W=(0,Q.useMemo)(()=>ae(e.sort),[V]),oe=se(r&&s?e.childObject:void 0),G=(0,Q.useCallback)(async(t=`save`)=>{if(t===`inputs`){let t=M.current,n=N.current,i=t.dirty&&t.rowsHeldFor!==void 0&&t.rowsHeldFor===s,a=n!==null&&n.parentId===s&&n.dataSource===r&&n.childObject===e.childObject&&n.relationshipField===e.relationshipField;if(i&&a){P.current=!0;return}}let n=fi(e.limit,500),i=N.current,a=t===`inputs`&&i!==null&&i.parentId===s&&i.dataSource===r&&i.childObject===e.childObject&&i.relationshipField===e.relationshipField&&i.top===n&&i.filterKey===ne&&i.sortKey===V&&M.current.rowsHeldFor===s;P.current=!1;let o=++T.current,c=()=>T.current===o;if(N.current={parentId:s,dataSource:r,childObject:e.childObject,relationshipField:e.relationshipField,top:n,filterKey:ne,sortKey:V},R(!1),!r||!s){h(!1);return}if(H){h(!1);return}if(!e.childObject){h(!1),console.warn(`[LineItemsPanel] a line-items panel has no childObject — refusing to fetch its rows. Set childObject to the child object the panel lists.`);return}a?R(!0):h(!0);try{let t={[e.relationshipField]:s},i=await r.find(e.childObject,{$filter:U===void 0?t:ce(t,U),...W?{$orderby:W}:{},$top:n});if(!c())return;let a=i?.data??[];l(a.map(e=>({...e}))),d(a.map(e=>({...e}))),y(!1),A(s),w(null),P.current&&(P.current=!1,I(e=>e+1))}catch(e){c()&&(w(ui(e,`load`)),A(e=>e??s))}finally{c()&&(h(!1),R(!1))}},[r,s,e.childObject,e.relationshipField,e.limit,H,U,W,ne,V]),K=(0,Q.useRef)({load:G,parentId:s});(0,Q.useEffect)(()=>{K.current={load:G,parentId:s}},[G,s]),(0,Q.useEffect)(()=>{G(`inputs`)},[G,F,oe]);let J=(0,Q.useCallback)(e=>{if(l(e),y(!0),s){let e=s;A(t=>t??e)}},[s]),ue=(0,Q.useCallback)(async()=>{if(!r||!s||!e.childObject||j)return;let t=s,n=()=>K.current.parentId===t;_(!0),w(null);try{let t=!!(o&&e.totalField),i=t?{[e.totalField]:zn(c,e.amountField||`amount`)}:{},a=Ln(o??``,s,i,[{childObject:e.childObject,relationshipField:e.relationshipField,rows:c,original:u,childSchema:ee}]);t||(a=a.slice(1)),a.length&&await q(r,a),n()&&await K.current.load(`save`)}catch(e){n()&&w(ui(e,`save`))}finally{_(!1)}},[r,s,j,c,u,e,o,ee]),Y=(0,Q.useMemo)(()=>({columns:jt(e.columns,{perms:a,objectName:e.childObject}),totalField:e.amountField||(e.totalField?`amount`:void 0),minRows:e.minRows,maxRows:e.maxRows,allowAdd:!e.readonly,allowDelete:!e.readonly}),[e,a]),[de,fe]=n(`form.lineItems.noChildObject`,{property:`{{property}}`}).split(`{{property}}`);return(0,$.jsxs)(S,{className:x(`shadow-none`),children:[(0,$.jsxs)(C,{className:`flex-row items-center justify-between gap-2 pb-2`,children:[(0,$.jsx)(p,{className:`text-sm font-medium`,children:e.title||n(`form.lineItems.title`)}),!e.readonly&&(0,$.jsx)(D,{type:`button`,size:`sm`,onClick:ue,disabled:g||f||!v||!s||j,children:n(g?`detail.saving`:`common.save`)})]}),(0,$.jsxs)(m,{children:[b&&(0,$.jsx)(`p`,{className:`mb-2 text-sm text-destructive`,children:`message`in b?b.message:n(b.op===`load`?`form.lineItems.loadFailed`:`form.lineItems.saveFailed`)}),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:X(H)??``})}),(0,$.jsx)(`p`,{className:`mt-1 text-xs opacity-80`,children:H.message})]}):e.childObject?f?(0,$.jsx)(`p`,{className:`py-6 text-center text-sm text-muted-foreground`,children:n(`common.loading`)}):s?j?(0,$.jsx)(`p`,{className:`py-6 text-center text-sm text-muted-foreground`,"data-testid":`line-items-held-for-another-parent`,children:n(`form.lineItems.notLoaded`)}):(0,$.jsx)(E,{value:c,onChange:J,field:Y,readonly:e.readonly,disabled:g||L}):(0,$.jsx)(`p`,{className:`py-6 text-center text-sm text-muted-foreground`,children:n(`form.lineItems.saveRecordFirst`)}):(0,$.jsxs)(`p`,{className:`py-6 text-center text-sm text-muted-foreground`,"data-testid":`line-items-no-child-object`,children:[de,(0,$.jsx)(`code`,{className:`font-mono`,children:`childObject`}),fe]})]})]})},hi=ne(({schema:e,dataSource:t})=>{let n=ve(t);return(0,$.jsx)(xe,{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:J(`object-form`,e?.objectName),requiresObject:!ct(e),children:e=>(0,$.jsx)(qr,{schema:e,dataSource:n})})}),gi={name:`objectName`,type:`string`,description:"Object this form creates or edits. Not required: the node's `dataSource` binding can name the object instead, and `dataSource.object` lands on this key, outranking an authored value. With neither, and no inline fields (non-empty `customFields`, or `sections` whose every field is inline), the form shows a hint naming this key instead of a form with no fields."};U.register(`object-form`,hi,{namespace:`plugin-form`,label:`Object Form`,category:`plugin`,inputs:[{...gi},{name:`fields`,type:`array`,description:'Bare field names to show, in order (each looked up in the object schema). NOT the same vocabulary as `sections[].fields`, which also accepts the spec `FormFieldSchema` object (identity key `field`, e.g. `{ field: "note", colSpan: 2 }`) — that shape resolves to no name HERE and is silently skipped (SimpleObjectForm in ObjectForm.tsx; buildFlatFields in flatFields.ts for the drawer/modal presentations).'},{name:`mode`,type:`enum`,enum:[`create`,`edit`,`view`]},{name:`formType`,type:`enum`,enum:[`simple`,`tabbed`,`wizard`,`split`,`drawer`,`modal`]},{name:`sections`,type:`array`},{name:`title`,type:[`string`,`object`],description:'Heading of the drawer and modal presentations (`formType: "drawer"` / `"modal"`). Accepts either a plain string or an inline per-locale map (`{ en: "New order", "zh-CN": "新建订单" }`) — the `I18nLabel` union the contract admits on this key — and the form resolves the map against the active UI language, falling back through base language, a region-qualified sibling, `default`, then `en`, and finally to any remaining entry.'},{name:`description`,type:[`string`,`object`],description:'Subtitle under the drawer and modal heading. Accepts either a plain string or an inline per-locale map (`{ en: "Enter the order details", "zh-CN": "填写订单信息" }`), resolved against the active UI language with the same fallback chain as `title`.'},{name:`layout`,type:`enum`,enum:[`vertical`,`horizontal`],description:"Label placement: `vertical` puts each label above its field (the default), `horizontal` beside it."},{name:`columns`,type:`number`},{name:`defaultTab`,type:`string`},{name:`tabPosition`,type:`enum`,enum:[`top`,`bottom`,`left`,`right`]},{name:`allowSkip`,type:`boolean`},{name:`showStepIndicator`,type:`boolean`},{name:`splitDirection`,type:`enum`,enum:[`horizontal`,`vertical`]},{name:`splitSize`,type:`number`},{name:`splitResizable`,type:`boolean`},{name:`drawerSide`,type:`enum`,enum:[`top`,`bottom`,`left`,`right`]},{name:`drawerWidth`,type:`string`},{name:`modalSize`,type:`enum`,enum:[`sm`,`default`,`lg`,`xl`,`full`]},{name:`modalCloseButton`,type:`boolean`,description:"Show the modal presentation’s close (X) button. Default `true`; `false` hides it. Forwarded by `ObjectForm`’s modal route and honoured by `ModalForm` on both of its dialog arms. With the button hidden the modal still closes on Escape, and on the Cancel action when that is shown."},{name:`contentLayout`,type:`enum`,enum:[`simple`,`tabbed`],description:'How the modal presentation lays out sections. `tabbed` differs from `simple` only when more than one section has a field to show (`ModalForm` tests `schema.contentLayout === "tabbed" && groups.length > 1`).'},{name:`confirmOnDiscard`,type:`boolean`,description:"Ask before discarding unsaved edits when a drawer/modal form is dismissed. Set `false` to close immediately."},{name:`recordId`,type:`string`,description:"The record to load in `edit` / `view` mode. Leave unset for `create`."},{name:`customFields`,type:`array`,description:`Field definitions merged over the set generated from object metadata. With inline definitions and no data source, this becomes the only field source.`},{name:`initialValues`,type:`object`,description:"Values to prefill in `create` mode."},{name:`initialData`,type:`object`,description:"Alternate spelling of `initialValues` that the drawer/modal presentations read FIRST — PER MEMBER (`{ ...initialValues, ...initialData }`), so a member this key says nothing about keeps its `initialValues` value. Prefer `initialValues` in new schemas."},{name:`readOnly`,type:`boolean`,description:"Render every field read-only, whatever `mode` says."},{name:`submitText`,type:[`string`,`object`],description:'Label of the Save button. A map no locale limb resolves shows the default label. Accepts either a plain string or an inline per-locale map (`{ en: "Save order", "zh-CN": "保存订单" }`), resolved against the active UI language with the same fallback chain as `title`.'},{name:`cancelText`,type:[`string`,`object`],description:'Label of the Cancel button. Accepts either a plain string or an inline per-locale map (`{ en: "Back", "zh-CN": "返回" }`), resolved against the active UI language with the same fallback chain as `title`.'},{name:`nextText`,type:[`string`,`object`],description:'Label of the next-step button (wizard). Accepts either a plain string or an inline per-locale map (`{ en: "Continue", "zh-CN": "继续" }`), resolved against the active UI language with the same fallback chain as `title`.'},{name:`prevText`,type:[`string`,`object`],description:'Label of the previous-step button (wizard). Accepts either a plain string or an inline per-locale map (`{ en: "Previous", "zh-CN": "上一步" }`), resolved against the active UI language with the same fallback chain as `title`.'},{name:`showSubmit`,type:`boolean`},{name:`showCancel`,type:`boolean`},{name:`showReset`,type:`boolean`},{name:`submitBehavior`,type:`object`,description:'Declarative post-submit behaviour, one of `{ kind: "thank-you", title?, message? }`, `{ kind: "redirect", url, delayMs? }`, `{ kind: "continue" }`, `{ kind: "next-record" }`. When present it takes precedence over `successMessage` / `navigateOnSuccess` / `resetOnSuccess`.'},{name:`successMessage`,type:[`string`,`object`],description:'Toast shown after a successful submit. Ignored when `submitBehavior` or `navigateOnSuccess` is set. Accepts either a plain string or an inline per-locale map (`{ en: "Order saved", "zh-CN": "订单已保存" }`), resolved against the active UI language with the same fallback chain as `title`.'},{name:`navigateOnSuccess`,type:`string`,description:"Path to navigate to after a successful create/update. Supports `{id}` / `{recordId}` interpolation from the saved record and is same-origin-guarded. Takes precedence over `successMessage`."},{name:`resetOnSuccess`,type:`boolean`,description:`Clear the form after a successful submit instead of keeping the saved values.`},{name:`mobile`,type:`object`,description:'Phone-only presentation overrides, e.g. `{ stepper: "auto", stepperMinFields: 8, fullscreenLongText: true }`.'}]}),U.register(`form`,hi,{namespace:`view`,skipFallback:!0,label:`Data Form View`,category:`view`,inputs:[{...gi},{name:`fields`,type:`array`,description:'Bare field names to show, in order (each looked up in the object schema). 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 _i=ne(({schema:e})=>{let t=(0,Q.useContext)(H)?.dataSource??void 0;return(0,$.jsx)(xe,{schema:e,dataSource:t,testId:`embeddable-form`,errorTitle:`This form’s data source could not be resolved`,requiresObject:!0,children:e=>(0,$.jsx)(ci,{config:e,dataSource:t})})});U.register(`embeddable-form`,_i,{namespace:`plugin-form`,label:`Embeddable Form`,category:`plugin`,inputs:[{name:`formId`,type:`string`,required:!0},{name:`objectName`,type:`string`,description:"Object the form creates a record in. Not required: the node's `dataSource` binding can name the object instead, and `dataSource.object` lands on this key, outranking an authored value. With neither, the form shows a hint naming this key instead of a form that cannot submit."},{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). 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`}]});var vi=ne(({schema:e})=>{let t=(0,Q.useContext)(H)?.dataSource??void 0;return(0,$.jsx)(xe,{schema:e,dataSource:t,testId:`object-master-detail-form`,errorTitle:`This form’s data source could not be resolved`,requiresObject:!0,children:e=>(0,$.jsx)(vr,{schema:e,dataSource:t})})});U.register(`object-master-detail-form`,vi,{namespace:`plugin-form`,label:`Master-Detail Form`,category:`plugin`,inputs:[{name:`objectName`,type:`string`,description:"The PARENT object this form creates or edits. Not required: the node's `dataSource` binding can name the object instead, and `dataSource.object` lands on this key, outranking an authored value. With neither, the form shows a hint naming this key instead of an empty parent form."},{name:`mode`,type:`enum`,enum:[`create`,`edit`]},{name:`sections`,type:`array`},{name:`details`,type:`array`,of:`object`,required:!0,description:"The child collections, one OBJECT per entry, judged by the spec's closed `details` entry: `childObject` (required) names the child object; `relationshipField` is the FK on the child back to the parent, derived from the child's metadata when omitted; `columns` are the line grid's columns as the spec's inline grid column objects (`{ name, … }`, never a bare field name), derived from the child's fields when omitted; `formFields` names the per-row form's fields; `inlineMode` is `grid` (editable cells) or `form` (list + per-row form); `amountField` is the CHILD column summed and `totalField` the PARENT field that sum is saved to; `title`, `minRows`, `maxRows` and `addLabel` dress the section and its grid. An undeclared member key is refused by name. The entry's `sortField` is read by nothing here — the line-position field is derived from the child object (objectui#11070) — and objectstack retires the key on its `main` (objectstack-ai/objectstack#21589, after 17.6.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 NAMED members (a bare name, or the `{ field }` entry) against that pool, so such a 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. An inline field entry (`{ name, type, … }`) names nothing to resolve and is drawn whatever this key lists, as on every form type (objectui#11615). Each such drop is reported once via `console.warn` (objectui#9884); it is not repaired, because this key bounds what the form DRAWS and edits, not what Save writes: on a create, the submitted set is the drawn fields plus any parent value seeded through `initialValues` (or its alternate spelling `initialData`), drawn or not. A seed for an undeclared, server-owned, computed or read-only field is still stripped, as on any save. Author one or the other, or list every section member here too. Members are bare field names; NOT the spec `FormFieldSchema` object `sections[].fields` accepts (identity key `field`) — that shape resolves to no name here and is silently skipped (the parent form renders through the same `ObjectForm` / `SimpleObjectForm` as `object-form` — see its `fields` description)."},{name:`title`,type:[`string`,`object`],description:'Names the record in the built-in "… saved" toast after an edit save, which shows only when the host supplies no `onSuccess`. Accepts either a plain string or an inline per-locale map (`{ en: "Purchase order", "zh-CN": "采购单" }`) — the `I18nLabel` union the contract admits on this key — and the renderer resolves the map against the active UI language, falling back through base language, a region-qualified sibling, `default`, then `en`, and finally to any remaining entry.'},{name:`submitText`,type:[`string`,`object`],description:'Label of the button that saves the parent and every detail row in one batch. Defaults to "Save" when editing a record (`mode: "edit"` with a `recordId`) and to "Create" otherwise, in the active UI language; an empty string, or a map no locale limb resolves, shows the default too. Accepts either a plain string or an inline per-locale map (`{ en: "Save order", "zh-CN": "保存订单" }`), resolved against the active UI language with the same fallback chain as `title`.'},{name:`cancelText`,type:[`string`,`object`],description:'Label of the Cancel button, which renders only when the host supplies an `onCancel` callback (a runtime slot, not authorable in a JSON document). Defaults to "Cancel", in the active UI language; an empty string, or a map no locale limb resolves, shows the default too. Accepts either a plain string or an inline per-locale map (`{ en: "Back", "zh-CN": "返回" }`), resolved against the active UI language with the same fallback chain as `title`.'},{name:`showSubmit`,type:`boolean`},{name:`initialValues`,type:`object`,description:"Values to prefill on the PARENT record in `create` mode."},{name:`initialData`,type:`object`,description:"Alternate spelling of `initialValues` the renderer also reads: the `parentSchema` memo carries both keys onto the parent form, which merges them PER MEMBER with this one winning. Prefer `initialValues` in new schemas."},{name:`taxRateField`,type:`string`,description:`Name of the field ON THE CHILD object that holds each line’s tax rate. Feeds the line-items totals row; leave unset when the detail rows carry no tax.`}]});var yi={object:`childObject`,filter:!0,sort:!0,limit:`limit`},bi=ne(({schema:e})=>(0,$.jsx)(xe,{schema:e,mapping:yi,testId:`record-line-items`,errorTitle:`This line-items panel’s data source could not be resolved`,children:e=>(0,$.jsx)(mi,{schema:e})}));U.register(`line_items`,bi,{namespace:`record`,skipFallback:!0,label:`Line Items`,category:`record`,inputs:[{name:`childObject`,type:`string`,description:"The child object whose records the panel lists, edits and saves. Not required: the node's `dataSource` binding can name the object instead, and `dataSource.object` lands on this key, outranking an authored value. With neither, the panel shows a configuration hint naming this key and loads nothing."},{name:`relationshipField`,type:`string`,required:!0},{name:`columns`,type:`array`,required:!0},{name:`totalField`,type:`string`},{name:`amountField`,type:`string`},{name:`parentObject`,type:`string`,description:"The PARENT object the line total is written to on Save, together with `totalField`. Defaults to the object of the record the page shows, and outranks it when set. With neither, Save writes the lines alone and no parent field."},{name:`parentId`,type:`string`,description:"The parent record whose lines the panel lists and saves: it loads `childObject` rows whose `relationshipField` equals this id, and a line added in the grid is saved with this id in `relationshipField`. Outranks `recordId` and the record the page shows; leave it unset on a record page, where the record shown is the parent. With no parent id at all the panel asks the user to save the record first and loads nothing."},{name:`recordId`,type:`string`,description:"The parent record id, read only when `parentId` is unset. It outranks the record the page shows."},{name:`title`,type:`string`,description:`Heading of the panel. Defaults to "Line Items" in the active UI language. A plain string, drawn as authored.`},{name:`readonly`,type:`boolean`,description:`Shows the lines without editing: no Save button, no Add line / Duplicate row / Remove row actions, and the grid draws a read-only table.`},{name:`minRows`,type:`number`,description:`Fewest lines the user can leave: every line's Remove row action is disabled while the grid holds this many lines or fewer. It adds no blank lines to reach the number.`},{name:`maxRows`,type:`number`,description:`Most lines the user can hold: at this many lines Add line and Duplicate row are disabled and the trailing blank entry row is not drawn.`},{name:`filter`,type:`array`,of:`object`,description:"Additional criteria for the lines, as spec `ViewFilterRule` entries (`[{ field, operator, value }]`). AND-combined with the parent relationship condition, never a replacement for it: it can only narrow this record's lines. Also the key a per-element `dataSource` binding's composed filter lands on."},{name:`sort`,type:`array`,of:`object`,description:"Load order for the lines, as `[{ field, order }]` entries applied in list order; `order` is `asc` or `desc`. Without it the lines arrive in storage order."},{name:`limit`,type:`number`,description:`Most lines loaded (default 500). The grid has no pagination: every loaded line is editable and saved as one batch, and lines past the cap are not loaded. Must be a positive integer: any other value is ignored, with a console warning.`}]});export{nr as a,qt as c,Ar as i,rt as l,Ur as n,rn as o,Lr as r,Yt as s,qr as t};