@objectstack/console 17.3.0 → 17.4.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 (188) hide show
  1. package/CHANGELOG.md +87 -0
  2. package/dist/.objectui-sha +1 -1
  3. package/dist/assets/{ActionResultDialog-CQwenjVA.js → ActionResultDialog-Bsr2GS71.js} +1 -1
  4. package/dist/assets/{AiPendingActionsPage-7gZ8zlOy.js → AiPendingActionsPage-DB-UVcdM.js} +1 -1
  5. package/dist/assets/{ApiConsolePage-DUF0ysH7.js → ApiConsolePage-Bzqo2owc.js} +1 -1
  6. package/dist/assets/{AppDocsIndex-CP_AVG4X.js → AppDocsIndex-KhVqdZ-P.js} +1 -1
  7. package/dist/assets/{AppManagementPage-BJktnoa5.js → AppManagementPage-CsZ0LMQn.js} +1 -1
  8. package/dist/assets/{ApprovalsInboxPage-DlnxY-uy.js → ApprovalsInboxPage-D_LOnhJ7.js} +1 -1
  9. package/dist/assets/{AuditLogPage-DIJPRjji.js → AuditLogPage-B9eqwuzl.js} +1 -1
  10. package/dist/assets/{ComponentNavView-C84QByT7.js → ComponentNavView-DeokLfkW.js} +1 -1
  11. package/dist/assets/{CreateViewDialog-Zbd9Cagm.js → CreateViewDialog-BMdQ4ZYy.js} +1 -1
  12. package/dist/assets/{DashboardView-UyKHklBx.js → DashboardView-DHZboRi8.js} +1 -1
  13. package/dist/assets/{DeveloperHubPage-BRyNdrCJ.js → DeveloperHubPage-C_VYirN0.js} +1 -1
  14. package/dist/assets/{DocPage-Bx8ZXCYt.js → DocPage-_9x-3Dbi.js} +1 -1
  15. package/dist/assets/{DocShell-Ipy_IDvh.js → DocShell-D4dSPfBz.js} +1 -1
  16. package/dist/assets/{DocsIndex-CmY-7OQR.js → DocsIndex-CJVRa_hE.js} +1 -1
  17. package/dist/assets/{DocsLayout-BNsSvaz2.js → DocsLayout-C-tYgUZv.js} +1 -1
  18. package/dist/assets/{DocsSlug-Cb_NMM1k.js → DocsSlug-DmyGpfEy.js} +1 -1
  19. package/dist/assets/{ExpressionProvider-DqGWVuxV.js → ExpressionProvider-B6z09kM6.js} +1 -1
  20. package/dist/assets/{FlowRunsPage-B6ustUgi.js → FlowRunsPage-OjGJi-JU.js} +1 -1
  21. package/dist/assets/{IntegrationsPage-chOxmiyU.js → IntegrationsPage-CrDMDe62.js} +1 -1
  22. package/dist/assets/{InterfaceListPage-DVETnQm5.js → InterfaceListPage-P3y6hqTX.js} +1 -1
  23. package/dist/assets/{MarketplaceInstalledPage-DA5pjhAz.js → MarketplaceInstalledPage-CQek7WnV.js} +1 -1
  24. package/dist/assets/{MarketplacePackagePage-dCIVHBFi.js → MarketplacePackagePage-DL2ivKSc.js} +1 -1
  25. package/dist/assets/{MarketplacePage-wJb6g1p7.js → MarketplacePage-B-6EokyB.js} +1 -1
  26. package/dist/assets/{MetadataInspector-Cu-n1FYz.js → MetadataInspector-IQGUoLyp.js} +1 -1
  27. package/dist/assets/{ObjectDataPage-CP-YSZYQ.js → ObjectDataPage-Bmc3RQhM.js} +1 -1
  28. package/dist/assets/{PageView-B1_ibRuM.js → PageView-DzUZqB_h.js} +1 -1
  29. package/dist/assets/{ProfilePage-DEr5iZVB.js → ProfilePage-NklCqPxc.js} +1 -1
  30. package/dist/assets/{PublicFormsPage-CBcKQbNl.js → PublicFormsPage-CItIvcLQ.js} +1 -1
  31. package/dist/assets/RecordDetailView-XWxuegfV.js +3 -0
  32. package/dist/assets/{RecordFormPage-CGQlYWDk.js → RecordFormPage-B-yrhs7J.js} +1 -1
  33. package/dist/assets/{ReportDefaultInspector-R_p6YStL.js → ReportDefaultInspector-D5Kro5_t.js} +1 -1
  34. package/dist/assets/{ReportView-BTMrtcGH.js → ReportView-COpZ8PQT.js} +1 -1
  35. package/dist/assets/{RuntimeDraftBar-agGU39FL.js → RuntimeDraftBar-CSVtuByp.js} +1 -1
  36. package/dist/assets/{SchemaForm-DJbupOno.js → SchemaForm-DIsxxOZF.js} +1 -1
  37. package/dist/assets/{SearchResultsPage-CHhZUc6L.js → SearchResultsPage-B2r6kgni.js} +1 -1
  38. package/dist/assets/{SettingsHub-BGLR_gS7.js → SettingsHub-DQz2HDtZ.js} +1 -1
  39. package/dist/assets/{SettingsView-Bq-7Zkzs.js → SettingsView-BfOEalDW.js} +1 -1
  40. package/dist/assets/{SkeletonDetail-B4-UKxai.js → SkeletonDetail-DMOa5zcl.js} +1 -1
  41. package/dist/assets/{SystemHubPage-CVZVag1e.js → SystemHubPage-DM2VRSIP.js} +1 -1
  42. package/dist/assets/{abnfDiagram-VCTEODGH-DUS5D5dU.js → abnfDiagram-VCTEODGH-DaPlU6Hz.js} +1 -1
  43. package/dist/assets/{app-shell-eager-leaves-BB0oaPx6.js → app-shell-eager-leaves-wjbiJgVZ.js} +1 -1
  44. package/dist/assets/architectureDiagram-5GKGNRK7-Cq014PwG.js +36 -0
  45. package/dist/assets/{blockDiagram-OSKFZWR5-Bz2hnVmp.js → blockDiagram-OSKFZWR5-vtlcoeZc.js} +1 -1
  46. package/dist/assets/{c4Diagram-7LVT6UL2-DU3u1Y6c.js → c4Diagram-7LVT6UL2-BrdwRG2M.js} +1 -1
  47. package/dist/assets/channel-D2IgUFnY.js +1 -0
  48. package/dist/assets/{chunk-3NF5O7KM-B8Q7HUio.js → chunk-3NF5O7KM-CjWAf_Jo.js} +1 -1
  49. package/dist/assets/{chunk-4HAMMTFA-BPKwX4iB.js → chunk-4HAMMTFA-BtV_msXT.js} +1 -1
  50. package/dist/assets/chunk-75Z2AOVW-DdRL9yNr.js +2 -0
  51. package/dist/assets/chunk-CLGD4ZFX-De9kMAXh.js +1 -0
  52. package/dist/assets/{chunk-DU6HZSFF-BkY4hAzc.js → chunk-DU6HZSFF-DqjylQO-.js} +1 -1
  53. package/dist/assets/chunk-F27PBJKO-tEB_K-iD.js +1 -0
  54. package/dist/assets/{chunk-GMAD6QVW-DZo_NykZ.js → chunk-GMAD6QVW-BMzd_HHM.js} +1 -1
  55. package/dist/assets/{chunk-GVQU2GXP-9ELY9S6X.js → chunk-GVQU2GXP-B1p1nHC0.js} +1 -1
  56. package/dist/assets/{chunk-H2I77ZZE-vCr_buP7.js → chunk-H2I77ZZE-ioXC4dHO.js} +1 -1
  57. package/dist/assets/{chunk-HLEWEB6X-iPkY2ESt.js → chunk-HLEWEB6X-zZ3ZMup3.js} +1 -1
  58. package/dist/assets/chunk-L3NEJ4N5-DePXufTQ.js +1 -0
  59. package/dist/assets/{chunk-LQGUR6SS-iVI0GACK.js → chunk-LQGUR6SS-BUWUp_dz.js} +1 -1
  60. package/dist/assets/{chunk-OSK3NFVY-DcRwXCQD.js → chunk-OSK3NFVY-L7nTUJKT.js} +2 -2
  61. package/dist/assets/{chunk-P2QGCYS3-nx2-dM5t.js → chunk-P2QGCYS3-BG-i3rdI.js} +1 -1
  62. package/dist/assets/{chunk-POPQ4Y6H-BxLOacOG.js → chunk-POPQ4Y6H-DLEB8EqK.js} +1 -1
  63. package/dist/assets/{chunk-PWAF6VOD-2mst9kZu.js → chunk-PWAF6VOD-Be_prJjm.js} +1 -1
  64. package/dist/assets/{chunk-SVP7TREG-C3BMpr4x.js → chunk-SVP7TREG-BdJpxJji.js} +1 -1
  65. package/dist/assets/chunk-XXDRQBXY-CEXsCcSu.js +1 -0
  66. package/dist/assets/{chunk-ZLD2IHE6-ZFqtFJbj.js → chunk-ZLD2IHE6-BLIPZykR.js} +1 -1
  67. package/dist/assets/classDiagram-CYGNFDIV-BielDdJQ.js +1 -0
  68. package/dist/assets/classDiagram-v2-TLXNO2FR-BielDdJQ.js +1 -0
  69. package/dist/assets/cose-bilkent-JH36ORCC-CnLWv9XE.js +1 -0
  70. package/dist/assets/{createDerive-Best2JCj.js → createDerive-DtfnFzGm.js} +1 -1
  71. package/dist/assets/{cynefinDiagram-5FMLGOSQ-Lnly8IJd.js → cynefinDiagram-5FMLGOSQ-Do1SZz4I.js} +1 -1
  72. package/dist/assets/{dagre-OS7QT2EB-CdXLxmTK.js → dagre-OS7QT2EB-CqmZ9Y9O.js} +1 -1
  73. package/dist/assets/data-adapter-1YRpH3h_.js +5 -0
  74. package/dist/assets/{default-inspector-registry-DeEG98bO.js → default-inspector-registry-CmSpNwTr.js} +1 -1
  75. package/dist/assets/{diagram-S7CK7UJ4-DE8I3gxQ.js → diagram-S7CK7UJ4-CMpcDWop.js} +1 -1
  76. package/dist/assets/{diagram-UQ7AKVKN-D2xQpbEq.js → diagram-UQ7AKVKN-DLK_4yej.js} +1 -1
  77. package/dist/assets/{diagram-VSXAHHWV-DnttDSlO.js → diagram-VSXAHHWV-MAILxw0S.js} +1 -1
  78. package/dist/assets/diagram-VX7I27RA-DGiXGVX7.js +24 -0
  79. package/dist/assets/{diagram-Z3DM3KII-BgB9f0Nv.js → diagram-Z3DM3KII-BywboeGI.js} +1 -1
  80. package/dist/assets/dist-B88JFSFg.js +5 -0
  81. package/dist/assets/{ebnfDiagram-PWID7BFC-32WvKbS2.js → ebnfDiagram-PWID7BFC-DdMLbnuP.js} +1 -1
  82. package/dist/assets/{erDiagram-2YWLMYGG-Dwf8uAdl.js → erDiagram-2YWLMYGG-O6raGx2P.js} +1 -1
  83. package/dist/assets/flowDiagram-T62WH6J4-CkAxOnqU.js +1 -0
  84. package/dist/assets/framework-DFE_Mws9.js +36 -0
  85. package/dist/assets/{ganttDiagram-EL5Y4UJY-DqYIE0Cu.js → ganttDiagram-EL5Y4UJY-Dijdjc50.js} +2 -2
  86. package/dist/assets/{getIcon-CgyYxSEC.js → getIcon-B4Pp7Q-0.js} +1 -1
  87. package/dist/assets/gitGraphDiagram-WWUBYQGX-Cfl4OIGG.js +106 -0
  88. package/dist/assets/{highlighted-body-OFNGDK62-BxO9mjPI.js → highlighted-body-OFNGDK62-BlqGRgbU.js} +1 -1
  89. package/dist/assets/{i18n-Cfqor-xb.js → i18n-DGcOKnTh.js} +1 -1
  90. package/dist/assets/{i18n-locales-Bz4c8KXc.js → i18n-locales-BBA090ve.js} +10 -10
  91. package/dist/assets/index-C5Fu9Kda.css +2 -0
  92. package/dist/assets/index-ClPLLRzK.js +20 -0
  93. package/dist/assets/{infoDiagram-FKFFQAWI-Cr1-5_Am.js → infoDiagram-FKFFQAWI-oOVNWlVA.js} +1 -1
  94. package/dist/assets/{infrastructure-CIpDEFyQ.js → infrastructure-B4zG1jNa.js} +2 -2
  95. package/dist/assets/{ishikawaDiagram-5VMMS53U-Bsjx7BsE.js → ishikawaDiagram-5VMMS53U-BUfTfup1.js} +1 -1
  96. package/dist/assets/{journeyDiagram-EYS64GPL-1scn5Z5c.js → journeyDiagram-EYS64GPL-4fyU8Ui9.js} +2 -2
  97. package/dist/assets/{kanban-definition-UXKFOSKX-DjLQAv5U.js → kanban-definition-UXKFOSKX-qwquHo2y.js} +1 -1
  98. package/dist/assets/mermaid-GHXKKRXX-_UhQGe8N.js +1 -0
  99. package/dist/assets/{mermaid.core-pW40dd4u.js → mermaid.core-RfBGJVq5.js} +2 -2
  100. package/dist/assets/{metadata-admin-pawEBYI9.js → metadata-admin-Bo-vWW2Z.js} +3 -3
  101. package/dist/assets/{mindmap-definition-THT77NOG-CUcYMB9H.js → mindmap-definition-THT77NOG-cOVHgGB_.js} +1 -1
  102. package/dist/assets/{pegDiagram-XKGWAZYB-CT1r3sRa.js → pegDiagram-XKGWAZYB-DQikOuPL.js} +1 -1
  103. package/dist/assets/{pieDiagram-E7YTZNPT-CSi-V1LQ.js → pieDiagram-E7YTZNPT-Cu9wPXiv.js} +2 -2
  104. package/dist/assets/plugin-calendar-DqlnPeWE.js +1 -0
  105. package/dist/assets/plugin-charts-hJ5C1pY-.js +7 -0
  106. package/dist/assets/{plugin-chatbot-BGnkLzFS.js → plugin-chatbot-BeSLDg4N.js} +5 -5
  107. package/dist/assets/plugin-dashboard-d1o52lHr.js +6 -0
  108. package/dist/assets/{plugin-form-_fjHxKTV.js → plugin-form-D8x_rH5w.js} +1 -1
  109. package/dist/assets/plugin-gantt-B2GTMGPH.js +63 -0
  110. package/dist/assets/plugin-grid-DGXy_yQF.js +9 -0
  111. package/dist/assets/{plugin-kanban-DA0eW6yj.js → plugin-kanban-CVf6Nj3e.js} +1 -1
  112. package/dist/assets/plugin-map-hkbw1bGS.js +1 -0
  113. package/dist/assets/{plugin-markdown-B7zwZHmn.js → plugin-markdown-Bdb2UThR.js} +4 -4
  114. package/dist/assets/plugin-report-CelulaB7.js +59 -0
  115. package/dist/assets/{plugin-timeline-B6rsNNAK.js → plugin-timeline-DTcJ-hts.js} +1 -1
  116. package/dist/assets/plugin-tree-Bk5vG9la.js +1 -0
  117. package/dist/assets/{plugin-view-5qxxRyZZ.js → plugin-view-CKs41t7o.js} +1 -1
  118. package/dist/assets/plugins-views-DZmsFOak.js +4 -0
  119. package/dist/assets/{quadrantDiagram-AXDQQJYC-DUJ_94hm.js → quadrantDiagram-AXDQQJYC-DqTU6p89.js} +3 -3
  120. package/dist/assets/{railroadDiagram-O6MQD6OU-CEyfAhzM.js → railroadDiagram-O6MQD6OU-CHGgIBKb.js} +1 -1
  121. package/dist/assets/{requirementDiagram-IS5BZ75X-CAK7hvBg.js → requirementDiagram-IS5BZ75X-B20mHS5h.js} +1 -1
  122. package/dist/assets/{runtime-metadata-persistence-DYPxFzHI.js → runtime-metadata-persistence-DzS2YaNb.js} +1 -1
  123. package/dist/assets/{sankeyDiagram-P5KCCOFB-DgYJh7uz.js → sankeyDiagram-P5KCCOFB-oqGY91Cw.js} +3 -3
  124. package/dist/assets/{sequenceDiagram-WJ2MYXX4-DsQerPtC.js → sequenceDiagram-WJ2MYXX4-CVMm7Aid.js} +1 -1
  125. package/dist/assets/{src-CVJP2nIc.js → src-D7tZqf12.js} +1 -1
  126. package/dist/assets/{src-_DxAIBqo.js → src-DCXZnd2l.js} +1 -1
  127. package/dist/assets/{src-S6pzKItc.js → src-DEMdKbQy.js} +1 -1
  128. package/dist/assets/src-hcMLuWxG.js +17 -0
  129. package/dist/assets/stateDiagram-XQSTLZYL-3oM7IdVe.js +1 -0
  130. package/dist/assets/stateDiagram-v2-IH3M54BS-BznjPAgb.js +1 -0
  131. package/dist/assets/studioEntry-BUFsLXCL.js +1 -0
  132. package/dist/assets/{submitRedirect-UXd9NsjL.js → submitRedirect-7ExeC4kw.js} +1 -1
  133. package/dist/assets/{swimlanes-V6O3JKXN-BiKyiEJr.js → swimlanes-V6O3JKXN-Djgbrkmh.js} +1 -1
  134. package/dist/assets/swimlanesDiagram-JKAHXJPX-DHJJ3qZq.js +8 -0
  135. package/dist/assets/{timeline-definition-24CTP7MA-CW5rY3PX.js → timeline-definition-24CTP7MA-k2lbfDvL.js} +2 -2
  136. package/dist/assets/ui-components-CMHDBJEm.js +37 -0
  137. package/dist/assets/{ui-layout-UUTFXV6S.js → ui-layout-Jk_qY9Ni.js} +1 -1
  138. package/dist/assets/{use-book-data-qUZAxIs0.js → use-book-data-CM73PGvc.js} +1 -1
  139. package/dist/assets/{useActionModal-CkM-zGdy.js → useActionModal-D_iilsul.js} +1 -1
  140. package/dist/assets/{usePackageL10n-F9isJ9pn.js → usePackageL10n-BfPqgsRL.js} +1 -1
  141. package/dist/assets/{useSettingsLabel-CSZBfUiw.js → useSettingsLabel-CW2sBbmj.js} +1 -1
  142. package/dist/assets/vendor-charts-BBlPrtHS.js +67 -0
  143. package/dist/assets/{vendor-i18n-C1AQDWux.js → vendor-i18n-CzBLXLJU.js} +1 -1
  144. package/dist/assets/vendor-objectstack-BU0HrnMy.js +270 -0
  145. package/dist/assets/{vendor-zod-r9lyeyrU.js → vendor-zod-Bwe8XZZa.js} +3 -3
  146. package/dist/assets/{vennDiagram-4TSXK5OY-C79cMc25.js → vennDiagram-4TSXK5OY-zweM554s.js} +1 -1
  147. package/dist/assets/{wardleyDiagram-VM6X3IG4-BAO0_jUk.js → wardleyDiagram-VM6X3IG4-Dg9r6Ajz.js} +1 -1
  148. package/dist/assets/{xychartDiagram-S5SC5T6Z-BIRd7YRo.js → xychartDiagram-S5SC5T6Z-CraplxeN.js} +2 -2
  149. package/dist/eager-closure.json +87 -87
  150. package/dist/index.html +4 -4
  151. package/package.json +1 -1
  152. package/dist/assets/RecordDetailView-A8bbPnkK.js +0 -3
  153. package/dist/assets/architectureDiagram-5GKGNRK7-mGW8P1lC.js +0 -36
  154. package/dist/assets/channel-FD4s9EIH.js +0 -1
  155. package/dist/assets/chunk-75Z2AOVW-CkSdnmiC.js +0 -2
  156. package/dist/assets/chunk-CLGD4ZFX-BTkDISwp.js +0 -1
  157. package/dist/assets/chunk-F27PBJKO-DUKg0YWV.js +0 -1
  158. package/dist/assets/chunk-L3NEJ4N5-Bzz35TZJ.js +0 -1
  159. package/dist/assets/chunk-XXDRQBXY-iNC8aYmk.js +0 -1
  160. package/dist/assets/classDiagram-CYGNFDIV-D5Pd2TCl.js +0 -1
  161. package/dist/assets/classDiagram-v2-TLXNO2FR-D5Pd2TCl.js +0 -1
  162. package/dist/assets/cose-bilkent-JH36ORCC-CPQv9aQH.js +0 -1
  163. package/dist/assets/data-adapter-DL25qpAe.js +0 -5
  164. package/dist/assets/diagram-VX7I27RA-BSEwkn7K.js +0 -24
  165. package/dist/assets/dist-BpPy7hlB.js +0 -5
  166. package/dist/assets/flowDiagram-T62WH6J4-CqVSNJ8T.js +0 -1
  167. package/dist/assets/framework-BfSv4Kb0.js +0 -36
  168. package/dist/assets/gitGraphDiagram-WWUBYQGX-D1dYmoGu.js +0 -106
  169. package/dist/assets/index-BU-FzlQ6.js +0 -20
  170. package/dist/assets/index-_VyGO4ms.css +0 -2
  171. package/dist/assets/mermaid-GHXKKRXX-NzEcDxBh.js +0 -1
  172. package/dist/assets/plugin-calendar-BwiiCIjv.js +0 -1
  173. package/dist/assets/plugin-charts-CDGkx7z5.js +0 -7
  174. package/dist/assets/plugin-dashboard-Bj4ldCX6.js +0 -6
  175. package/dist/assets/plugin-gantt-zR8DkpEg.js +0 -63
  176. package/dist/assets/plugin-grid-kkbz4uec.js +0 -9
  177. package/dist/assets/plugin-map-DukneTNg.js +0 -1
  178. package/dist/assets/plugin-report-DaPtlsJr.js +0 -59
  179. package/dist/assets/plugin-tree-DauauLFc.js +0 -1
  180. package/dist/assets/plugins-views-iYcMmImr.js +0 -4
  181. package/dist/assets/src-JX1BkhmR.js +0 -17
  182. package/dist/assets/stateDiagram-XQSTLZYL-BJndPKik.js +0 -1
  183. package/dist/assets/stateDiagram-v2-IH3M54BS-Bi94bTLl.js +0 -1
  184. package/dist/assets/studioEntry-C6G8U-LG.js +0 -1
  185. package/dist/assets/swimlanesDiagram-JKAHXJPX-DKIR852g.js +0 -8
  186. package/dist/assets/ui-components-D2lrjG-t.js +0 -43
  187. package/dist/assets/vendor-charts-CY9WhhzX.js +0 -67
  188. package/dist/assets/vendor-objectstack-BeKUVjuj.js +0 -270
@@ -1 +1 @@
1
- import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{b as t,r as n}from"./vendor-react-CsWFRkED.js";import{n as r}from"./infrastructure-CIpDEFyQ.js";import{Ot as i,kt as a,tn as o,wt as s}from"./vendor-objectstack-BeKUVjuj.js";import{g as c,h as l,l as u}from"./data-adapter-DL25qpAe.js";import{$n as d,$r as f,At as p,Ft as m,Hr as h,Mt as g,Qn as _,Qr as v,R as y,Tt as b,Xr as x,Yr as S,Zr as C,c as w,er as T,g as E,h as D,ht as O,lt as k,p as A}from"./framework-BfSv4Kb0.js";import{d as j,p as M}from"./i18n-locales-Bz4c8KXc.js";import{$i as N,Ar as P,Cr as F,Gr as I,Hr as L,Jr as ee,Kr as te,Mr as R,Or as z,Sn as B,Sr as V,Ur as H,Vr as ne,W as U,Wr as re,Xr as W,Zr as ie,_n as G,_o as ae,b as K,bn as oe,br as se,ft as q,gc as ce,gn as le,hc as ue,ic as de,il as J,jr as Y,kr as X,mc as fe,pc as pe,qr as me,r as he,s as ge,sc as _e,vn as ve,vo as ye,vr as be,xn as xe,yi as Se,yn as Ce}from"./ui-components-D2lrjG-t.js";import{r as Z}from"./vendor-ui-utils-BFw4cGI6.js";var Q=e(t(),1),we=`https://a.invalid/`,Te=`https://b.invalid/`;function Ee(e){try{return new URL(e,we).origin===`https://a.invalid`&&new URL(e,Te).origin===`https://b.invalid`}catch{return!1}}function De(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 Ee(r)?r:null}var Oe=/\{\{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 Ae(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(Oe,(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 Me(e){let{navigate:t}=y(),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 Ne(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.`}i();function Pe(e){return e!=null&&!S(e)}function Fe(e){return e?.mode===`create`||!e?.recordId}function Ie(e,t){return!(!e?.required||t&&S(e.defaultValue))}function Le(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;Pe(a)?r[e]=a:Re(i)&&t?.currentUserId&&(r[e]=t.currentUserId)}return r}function Re(e){return!e||!a(e.defaultValue)?!1:e.type===`user`||e.type===`lookup`&&(e.reference===`sys_user`||e.reference_to===`sys_user`)}function ze(e,t,n){return{...Le(e,n),...t??{}}}function Be(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))S(n[t]?.defaultValue)&&C(i)||(r[t]=i);return r}function Ve(e,t){return typeof t==`string`&&t.trim()||typeof t==`object`&&t&&typeof t.source==`string`&&t.source.trim()?{...e,visibleOn:t}:e}var He=new Set;function Ue(e,t){if(typeof e.name!=`string`||e.name===e.field)return;let n=`${t}:${e.field}:${e.name}`;He.has(n)||(He.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.`))}function We(e,t){let n=t.objectSchema?.fields?.[e];return n?{name:e,label:t.fieldLabel(t.objectName,e,n.label||e),type:U(n.type,{multiple:n.multiple}),required:Ie(n,Fe(t)),disabled:t.readOnly||t.mode===`view`||n.readonly,placeholder:n.placeholder,description:n.help||n.description,validation:he(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 Ge(e,t){if(typeof e==`string`){let n=t.objectSchema?.fields?.[e];return Ve(We(e,t),n?.visible_on??n?.visibleOn)}let n=e;if(typeof n.field!=`string`)return Ve(n,n.visibleOn);Ue(n,t.objectName);let r=n.field,i=We(r,t);n.widget!=null&&(i.widget=n.widget),n.label!=null&&(i.label=n.label),n.placeholder!=null&&(i.placeholder=n.placeholder),n.helpText!=null&&(i.description=n.helpText),n.required!=null&&(i.required=Ie({required:n.required,defaultValue:t.objectSchema?.fields?.[r]?.defaultValue},Fe(t))),n.readonly!=null&&(i.disabled=n.readonly||i.disabled),n.immutable!=null&&(i.immutable=n.immutable),n.hidden!=null&&(i.hidden=n.hidden),n.colSpan!=null&&(i.colSpan=n.colSpan),n.span!=null&&(i.span=n.span),n.options!=null&&(i.options=n.options),n.multiple!=null&&(i.multiple=n.multiple);let a=n.type??t.objectSchema?.fields?.[r]?.type;a!=null&&(i.type=U(a,{multiple:i.multiple}));let o=n.reference??n.reference_to;return o!=null&&(i.reference=o,i.reference_to=o),n.maxLength!=null&&(i.maxLength=n.maxLength),n.minLength!=null&&(i.minLength=n.minLength),n.min!=null&&(i.min=n.min),n.max!=null&&(i.max=n.max),n.precision!=null&&(i.precision=n.precision),n.scale!=null&&(i.scale=n.scale),n.language!=null&&(i.language=n.language),Array.isArray(n.fields)&&(i.fields=n.fields),n.dependsOn!=null&&(i.dependsOn=n.dependsOn),n.keyField!=null&&(i.keyField=n.keyField),n.disclosure!=null&&(i.disclosure=n.disclosure),Ve(i,n.visibleWhen??n.visibleOn)}function Ke(e,t){return(e.fields??[]).map(e=>Ge(e,t))}var qe=new Set([`field:formula`,`field:summary`,`field:auto_number`,`field:autonumber`]),Je=new Set([`field:textarea`,`field:markdown`,`field:html`,`field:grid`,`field:richtext`,`textarea`,`markdown`,`html`,`grid`,`richtext`]),Ye=new Set([`formula`,`summary`,`auto_number`,`autonumber`]);function Xe(e){return Je.has(e)}function Ze(e){return Ye.has(e)}function Qe(e){return e<=3?1:e<=8?2:e<=15?3:4}function $e(e){return e&&e>0?Math.min(Math.floor(e),4):1}function et(e,t,n){let r=$e(t);return r<=1?1:e.span===`full`?r:e.colSpan==null?e.type&&Xe(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 tt(e,t,n){let r=$e(t);return r<=1?e:e.map(e=>{if(e.type===`section-divider`)return e;let t=et(e,r,n);return t>1?{...e,colSpan:t}:e.colSpan!=null&&e.colSpan!==1?{...e,colSpan:1}:e})}var nt=new Set([`id`,`created_at`,`createdAt`,`updated_at`,`updatedAt`,`last_modified_at`,`lastModifiedAt`,`deleted_at`,`deletedAt`,`created_by`,`createdBy`,`updated_by`,`updatedBy`,`last_modified_by`,`lastModifiedBy`,`organization_id`,`organizationId`,`org_id`,`orgId`,`tenant_id`,`tenantId`,`owner`,`owner_id`,`_version`,`_rev`]);function rt(e,t){return e.filter(e=>{if(nt.has(e.name))return!1;let n=t?.fields?.[e.name];return n?.hidden!==!0&&n?.readonly!==!0})}function it(e,t){return e.filter(e=>{if(e.type&&qe.has(e.type))return!1;let n=t?.fields?.[e.name];return!n||!Ze(n.type)})}var at={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 ot(e){return at[e&&e>0?Math.min(Math.floor(e),4):1]}function st(e){return e<=1?`default`:e===2?`xl`:`full`}function ct(e,t,n,r){let i=[...e];if(i=rt(i,t),r===`create`&&(i=it(i,t)),n!==void 0)return i=tt(i,n),{fields:i,columns:n};let a=Qe(i.length);return i=tt(i,a),{fields:i,columns:a}}var $=n(),lt=M({"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 ut(e){let t=e?.updated_at;return typeof t==`string`&&t.length>0?t:void 0}function dt(e){if(!e||typeof e!=`object`)return!1;let t=e;return t.code===`CONCURRENT_UPDATE`||t.name===`ConcurrentUpdateError`}function ft(e){if(!e)return null;let t=/\d{4}-\d{2}-\d{2}[ T]/.test(e)?e.replace(` `,`T`):e,n=new Date(t);return Number.isNaN(n.getTime())?null:n.toLocaleString()}function pt(){let{t:e}=lt(),[t,n]=Q.useState(null),r=Q.useRef(null),i=Q.useCallback(e=>{r.current?.(e),r.current=null,n(null)},[]);Q.useEffect(()=>()=>r.current?.(!1),[]);let a=Q.useCallback(async({dataSource:e,objectName:t,recordId:i,payload:a,baseRecord:o})=>{let s=ut(o);try{return{status:`saved`,result:await e.update(t,i,a,s?{ifMatch:s}:void 0)}}catch(o){if(!dt(o))throw o;let s=o.currentVersion,c=w(o);if(!await new Promise(e=>{r.current=e,n({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;return{status:`saved`,result:await e.update(t,i,a,l?{ifMatch:l}:void 0)}}},[]),o=ft(t?.currentVersion);return{saveWithOcc:a,conflictDialog:(0,$.jsx)(ne,{open:!!t,onOpenChange:e=>{e||i(!1)},children:(0,$.jsxs)(re,{children:[(0,$.jsxs)(me,{children:[(0,$.jsxs)(ee,{className:`flex items-center gap-2`,children:[(0,$.jsx)(Se,{className:`h-5 w-5 text-amber-500`,"aria-hidden":!0}),e(`form.conflictTitle`)]}),(0,$.jsxs)(I,{children:[t?.userMessage&&(0,$.jsx)(`span`,{className:`mb-2 block font-medium text-foreground`,children:t.userMessage}),e(`form.conflictMessage`),o&&(0,$.jsx)(`span`,{className:`mt-2 block text-xs text-muted-foreground`,children:e(`form.conflictLatestVersion`,{time:o})})]})]}),(0,$.jsxs)(te,{children:[(0,$.jsx)(`button`,{type:`button`,className:J(ie({variant:`outline`})),onClick:()=>i(!1),children:e(`form.keepEditing`)}),(0,$.jsx)(`button`,{type:`button`,className:J(ie({variant:`destructive`})),onClick:()=>i(!0),children:e(`form.conflictOverwrite`)})]})]})})}}function mt(e){if(typeof e!=`object`||!e||Array.isArray(e))return!1;let t=e;return typeof t.field!=`string`&&typeof t.name==`string`}function ht(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(!mt(n))return!1;t+=1}}return t>0}function gt(e){let t=e;return Array.isArray(t?.customFields)&&t.customFields.length>0?!0:ht(t?.sections)}var _t=`DataSource is required for form submission (inline mode not configured)`;function vt(){return Error(_t)}var yt=({schema:e,dataSource:t,className:n})=>{let{fieldLabel:i}=j(),{userId:a}=r(),[o,s]=(0,Q.useState)(null),[c,l]=(0,Q.useState)({}),{saveWithOcc:u,conflictDialog:d}=pt(),[f,p]=(0,Q.useState)(!0),[m,h]=(0,Q.useState)(null),g=e.defaultTab||e.sections[0]?.name||e.sections[0]?.label||`tab-0`;Q.useEffect(()=>{(async()=>{if(!t){p(!1);return}try{let n=await t.getObjectSchema(e.objectName);s(n)}catch(e){h(e)}})()},[e.objectName,t]);let _=(0,Q.useRef)(void 0);Q.useEffect(()=>{let n=!1;return(o||!t)&&(async()=>{if(e.mode===`create`||!e.recordId||!t){l(ze(o,e.initialData||e.initialValues,{currentUserId:a})),p(!1);return}_.current!==e.recordId&&p(!0);try{let r=await t.findOne(e.objectName,e.recordId);if(n)return;_.current=e.recordId,l(r||{})}catch(e){if(n)return;h(e)}finally{n||p(!1)}})(),()=>{n=!0}},[o,e.mode,e.recordId,e.initialData,e.initialValues,t,e.objectName]);let v=(0,Q.useCallback)(t=>Ke(t,{objectSchema:o,objectName:e.objectName,readOnly:e.readOnly,mode:e.mode,recordId:e.recordId,fieldLabel:i}),[o,e.readOnly,e.mode,e.recordId,e.objectName,i]),y=(0,Q.useCallback)(async n=>{if(!t&&!e.submitHandler&&gt(e))return e.onSuccess&&await e.onSuccess(n),n;try{let r,i=e.mode===`create`?Be(n,o):n;if(e.submitHandler)r=await e.submitHandler(i);else if(!t)throw vt();else if(e.mode===`create`)r=await t.create(e.objectName,i);else if(e.mode===`edit`&&e.recordId){let n=await u({dataSource:t,objectName:e.objectName,recordId:e.recordId,payload:i,baseRecord:c});if(n.status===`cancelled`)return;r=n.result}return e.onSuccess&&await e.onSuccess(r),r}catch(t){throw e.onError&&e.onError(t),t}},[e,t,u,c]),b=(0,Q.useCallback)(()=>{e.onCancel&&e.onCancel()},[e]),x=(e,t)=>e.name||e.label||`tab-${t}`;if(m)return(0,$.jsxs)(`div`,{className:`p-4 border border-red-300 bg-red-50 rounded-md`,children:[(0,$.jsx)(`h3`,{className:`text-red-800 font-semibold`,children:`Error loading form`}),(0,$.jsx)(`p`,{className:`text-red-600 text-sm mt-1`,children:m.message})]});if(f)return(0,$.jsxs)(`div`,{className:`p-8 text-center`,children:[(0,$.jsx)(`div`,{className:`inline-block animate-spin rounded-full h-8 w-8 border-b-2 border-gray-900`}),(0,$.jsx)(`p`,{className:`mt-2 text-sm text-gray-600`,children:`Loading form...`})]});let S=e=>typeof e==`number`&&e>0?Math.min(Math.floor(e),4):void 0,C=e.sections.map(e=>S(e.columns)).filter(e=>e!=null),w=S(e.columns)??(C.length?Math.max(...C):1),T=ot(w),E=e.sections.map((e,t)=>{let n=v(e);return{key:x(e,t),label:e.label||`Tab ${t+1}`,description:e.description,containerClass:e.gridClassName,visibleWhen:e.visibleWhen,fields:w>1?tt(n,w,S(e.columns)):n}}),D=[...E.length>1?[]:E.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})),...E.flatMap(e=>e.fields)];return(0,$.jsxs)(`div`,{className:J(`w-full @container`,n,e.className),children:[(0,$.jsx)(O,{schema:{type:`form`,objectName:e.objectName,fields:D,columns:w,...T?{fieldContainerClass:T}:{},layout:`vertical`,defaultValues:c,previousValues:e.mode===`edit`&&e.recordId?c:void 0,submitLabel:e.submitText||(e.mode===`create`?`Create`:`Update`),cancelLabel:e.cancelText,showSubmit:e.showSubmit!==!1&&e.mode!==`view`,showCancel:e.showCancel!==!1,onSubmit:y,onCancel:b,fieldTabs:E.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:g,fieldTabsPosition:e.tabPosition||`top`}}),d]})},bt=({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,m=e||t?(0,$.jsxs)(`div`,{className:J(`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)(pe,{className:`h-4 w-4`}):(0,$.jsx)(ue,{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,h=l?null:(0,$.jsx)(`div`,{className:J(`grid gap-4`,s||d[i]),children:a});return p?(0,$.jsxs)(z,{className:J(`form-section bg-muted/40 shadow-none`,o),children:[m&&(0,$.jsx)(Y,{className:`border-b border-border pb-3`,children:m}),h&&(0,$.jsx)(X,{className:`pt-4`,children:h})]}):(0,$.jsxs)(`div`,{className:J(`form-section`,o),children:[m,h]})},xt="The `navigateOnSuccess` destination declared for this form was refused, so the navigation did not happen.",St=M({"wizard.missingRequired":`Please complete the required fields: {{fields}}`},`wizard.missingRequired`),Ct=C,wt=({schema:e,dataSource:t,className:n})=>{let{fieldLabel:i}=j(),{userId:a}=r(),{t:o}=St(),[s,c]=(0,Q.useState)(null),[l,u]=(0,Q.useState)({}),[f,p]=(0,Q.useState)(void 0),{saveWithOcc:m,conflictDialog:h}=pt(),[g,v]=(0,Q.useState)(!0),[y,S]=(0,Q.useState)(null),[C,w]=(0,Q.useState)(0),[T,E]=(0,Q.useState)(new Set),[D,k]=(0,Q.useState)(!1),[A,M]=(0,Q.useState)(new Set),[N,P]=(0,Q.useState)(null),[F,I]=(0,Q.useState)(null);Me(F);let L=Q.useId(),[ee,te]=(0,Q.useState)(0),R=Q.useRef(!1),z=e.sections.length,B=C===0,V=C===z-1;Q.useEffect(()=>{(async()=>{if(!t){v(!1);return}try{let n=await t.getObjectSchema(e.objectName);c(n)}catch(e){S(e)}})()},[e.objectName,t]),Q.useEffect(()=>{(s||!t)&&(async()=>{if(e.mode===`create`||!e.recordId||!t){R.current||=(u(ze(s,e.initialData||e.initialValues,{currentUserId:a})),!0),v(!1);return}try{let n=await t.findOne(e.objectName,e.recordId);u(n||{}),p(n||{})}catch(e){S(e)}finally{v(!1)}})()},[s,e.mode,e.recordId,e.initialData,e.initialValues,t,e.objectName]);let H=(0,Q.useCallback)(t=>Ke(t,{objectSchema:s,objectName:e.objectName,readOnly:e.readOnly,mode:e.mode,recordId:e.recordId,fieldLabel:i}),[s,e.readOnly,e.mode,e.recordId,e.objectName,i]),ne=Fe(e),U=b(),re=(0,Q.useMemo)(()=>C>=0&&C<z?H(e.sections[C]):[],[C,z,e.sections,H]),ie=(0,Q.useCallback)(t=>{let n=new Map;return e.sections.forEach((e,r)=>{for(let i of H(e)){let e=i?.name;if(!e||i.hidden===!0)continue;let a=d({visibleWhen:i.visibleWhen,readonlyWhen:i.readonlyWhen,requiredWhen:i.requiredWhen},t,{required:!!i.required,readonly:i.readonly===!0,serverOwnedValue:x(i,ne)},void 0,U,`field '${e}'`);!(i.visibleOn==null||_(i.visibleOn,t,!0,void 0,U,{context:`visibleOn of field '${e}'`}))||!a.visible||a.readonly||!a.required||Ct(t[e])&&n.set(r,[...n.get(r)??[],i.label||e])}}),n},[e.sections,H,ne,U]),G=(0,Q.useCallback)(async n=>{let r={...l,...n};if(u(r),E(e=>new Set(e).add(C)),M(e=>{if(!e.has(C))return e;let t=new Set(e);return t.delete(C),t}),V){let n=ie(r);if(n.size>0){M(new Set(n.keys()));let e=[...n.values()].flat();Z.error(o(`wizard.missingRequired`,{fields:e.slice(0,3).join(`, `)+(e.length>3?`…`:``)})),ae(Math.min(...n.keys()));return}M(new Set),k(!0);try{if(!t&&!e.submitHandler&&gt(e))return e.onSuccess&&await e.onSuccess(r),r;let n,i=e.mode===`create`?Be(r,s):r;if(e.submitHandler)n=await e.submitHandler(i);else if(!t)throw vt();else if(e.mode===`create`)n=await t.create(e.objectName,i);else if(e.mode===`edit`&&e.recordId){let r=await m({dataSource:t,objectName:e.objectName,recordId:e.recordId,payload:i,baseRecord:l});if(r.status===`cancelled`)return;n=r.result}if(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,Ae(r,n));if(!i.ok){Z.error(i.refusal),P({message:e.successMessage||(e.mode===`create`?`Created`:`Saved`),refusal:i.refusal});break}I({url:i.url,delayMs:t.delayMs??0});break}case`continue`:u(ze(s,e.initialData||e.initialValues,{currentUserId:a})),E(new Set),w(0),te(e=>e+1);break;default:{let n=t.kind===`thank-you`&&t.message?t.message:e.successMessage||(e.mode===`create`?`Created`:`Saved`);Z.success(n),P({title:t.kind===`thank-you`?t.title:void 0,message:n});break}}}else if(!e.submitHandler){let t=De(e.navigateOnSuccess,n);if(t)return I({url:t,delayMs:0}),n;e.navigateOnSuccess?(console.warn("[WizardForm] `navigateOnSuccess` was declared but produced no destination:",e.navigateOnSuccess),Z.success(e.successMessage||(e.mode===`create`?`Created`:`Saved`),{description:xt})):Z.success(e.successMessage||(e.mode===`create`?`Created`:`Saved`)),e.resetOnSuccess&&e.mode===`create`&&(u(ze(s,e.initialData||e.initialValues,{currentUserId:a})),E(new Set),w(0),te(e=>e+1))}return n}catch(t){throw e.onError&&e.onError(t),t}finally{k(!1)}}ae(C+1)},[l,C,V,e,s,t,ie,o,m]),ae=(0,Q.useCallback)(t=>{t>=0&&t<z&&(w(t),e.onStepChange&&e.onStepChange(t))},[z,e]),K=(0,Q.useCallback)(()=>{ae(C-1)},[C,ae]),oe=(0,Q.useCallback)(()=>{e.onCancel&&e.onCancel()},[e]),se=(0,Q.useCallback)(t=>{(e.allowSkip||T.has(t)||t<=C)&&ae(t)},[e.allowSkip,T,C,ae]);if(y)return(0,$.jsxs)(`div`,{className:`p-4 border border-red-300 bg-red-50 rounded-md`,children:[(0,$.jsx)(`h3`,{className:`text-red-800 font-semibold`,children:`Error loading form`}),(0,$.jsx)(`p`,{className:`text-red-600 text-sm mt-1`,children:y.message})]});if(g)return(0,$.jsxs)(`div`,{className:`p-8 text-center`,children:[(0,$.jsx)(`div`,{className:`inline-block animate-spin rounded-full h-8 w-8 border-b-2 border-gray-900`}),(0,$.jsx)(`p`,{className:`mt-2 text-sm text-gray-600`,children:`Loading form...`})]});if(N)return(0,$.jsxs)(`div`,{className:J(`w-full space-y-4`,n,e.className),children:[(0,$.jsxs)(`div`,{className:`rounded-md border bg-card p-8 text-center`,children:[(0,$.jsx)(`h3`,{className:`text-lg font-semibold`,children:N.title??`Thanks!`}),N.message&&(0,$.jsx)(`p`,{className:`mt-2 text-sm text-muted-foreground`,children:N.message})]}),N.refusal&&(0,$.jsx)(`div`,{role:`alert`,className:`rounded-md border border-destructive/40 bg-destructive/10 p-4 text-sm text-destructive`,children:N.refusal})]});let q=e.sections[C],le=e=>typeof e==`number`&&e>0?Math.min(Math.floor(e),4):void 0,ue=le(e.columns)??le(q?.columns)??1,de=ot(ue);return(0,$.jsxs)(`div`,{className:J(`w-full @container`,n,e.className),children:[e.showStepIndicator!==!1&&(0,$.jsx)(`nav`,{"aria-label":`Progress`,className:`mb-8`,children:(0,$.jsx)(`ol`,{className:`flex items-center`,children:e.sections.map((t,n)=>{let r=n===C,i=T.has(n),a=e.allowSkip||i||n<=C,o=A.has(n);return(0,$.jsxs)(`li`,{className:J(`relative flex-1`,n!==z-1&&`pr-8 sm:pr-12`),children:[n!==z-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:J(`h-full`,i?`bg-primary`:`bg-muted`)})}),(0,$.jsxs)(`button`,{type:`button`,className:J(`group relative flex items-center`,a?`cursor-pointer`:`cursor-not-allowed`),onClick:()=>se(n),disabled:!a,"data-testid":`wizard-step:${t.name||n}`,"data-error":o||void 0,children:[(0,$.jsx)(`span`,{className:J(`flex h-6 w-6 sm:h-8 sm:w-8 items-center justify-center rounded-full text-xs sm:text-sm font-medium transition-colors`,o&&`border-2 border-destructive bg-background text-destructive`,!o&&i&&`bg-primary text-primary-foreground`,!o&&r&&!i&&`border-2 border-primary bg-background text-primary`,!o&&!r&&!i&&`border-2 border-muted bg-background text-muted-foreground`),children:o?(0,$.jsx)(_e,{className:`h-3 w-3 sm:h-4 sm:w-4`,"aria-hidden":!0}):i?(0,$.jsx)(ce,{className:`h-3 w-3 sm:h-4 sm:w-4`}):n+1}),(0,$.jsx)(`span`,{className:`ml-2 sm:ml-3 text-xs sm:text-sm font-medium hidden sm:block`,children:(0,$.jsx)(`span`,{className:J(o?`text-destructive`:r?`text-foreground`:`text-muted-foreground`),children:t.label||`Step ${n+1}`})})]})]},n)})})}),(0,$.jsx)(`div`,{className:`min-h-[200px]`,children:q&&(0,$.jsx)(bt,{label:q.label,description:q.description,columns:1,className:q.className,gridClassName:q.gridClassName,children:re.length>0?(0,$.jsx)(O,{schema:{type:`form`,objectName:e.objectName,id:L,fields:ue>1?tt(re,ue,le(q.columns)):re,columns:ue,...de?{fieldContainerClass:de}:{},layout:`vertical`,defaultValues:l,previousValues:e.mode===`edit`?f:void 0,showSubmit:!1,showCancel:!1,onSubmit:G}},ee):(0,$.jsx)(`form`,{id:L,onSubmit:e=>{e.preventDefault(),G({})},children:(0,$.jsx)(`div`,{className:`text-center py-8 text-muted-foreground`,children:`No fields configured for this step`})})})}),(0,$.jsxs)(`div`,{className:`flex items-center justify-between mt-6 pt-4 border-t`,children:[(0,$.jsx)(`div`,{children:e.showCancel!==!1&&(0,$.jsx)(W,{variant:`ghost`,onClick:oe,children:e.cancelText||`Cancel`})}),(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsxs)(`span`,{className:`text-sm text-muted-foreground mr-2`,children:[`Step `,C+1,` of `,z]}),!B&&(0,$.jsxs)(W,{variant:`outline`,onClick:K,children:[(0,$.jsx)(fe,{className:`h-4 w-4 mr-1`}),e.prevText||`Back`]}),V?(0,$.jsxs)(W,{type:`submit`,form:L,disabled:D||e.mode===`view`,children:[D&&(0,$.jsx)(ye,{className:`mr-2 h-4 w-4 animate-spin`,"aria-hidden":!0}),D?`Submitting...`:e.submitText||(e.mode===`create`?`Create`:`Update`)]}):(0,$.jsxs)(W,{type:`submit`,form:L,children:[e.nextText||`Next`,(0,$.jsx)(pe,{className:`h-4 w-4 ml-1`})]})]})]}),h]})},Tt=({schema:e,dataSource:t,className:n})=>{let{fieldLabel:i}=j(),{userId:a}=r(),[o,s]=(0,Q.useState)(null),[c,l]=(0,Q.useState)({}),{saveWithOcc:u,conflictDialog:d}=pt(),[f,p]=(0,Q.useState)(!0),[m,h]=(0,Q.useState)(null);(0,Q.useEffect)(()=>{(async()=>{if(!t){p(!1);return}try{let n=await t.getObjectSchema(e.objectName);s(n)}catch(e){h(e),p(!1)}})()},[e.objectName,t]);let g=(0,Q.useRef)(void 0);(0,Q.useEffect)(()=>{let n=!1;return(o||!t)&&(async()=>{if(e.mode===`create`||!e.recordId){l(ze(o,e.initialData||e.initialValues,{currentUserId:a})),p(!1);return}if(!t){l(e.initialData||e.initialValues||{}),p(!1);return}g.current!==e.recordId&&p(!0);try{let r=await t.findOne(e.objectName,e.recordId);if(n)return;g.current=e.recordId,l(r||{})}catch(e){if(n)return;h(e)}finally{n||p(!1)}})(),()=>{n=!0}},[o,e.mode,e.recordId,e.initialData,e.initialValues,t,e.objectName]);let _=(0,Q.useCallback)(t=>Ke(t,{objectSchema:o,objectName:e.objectName,readOnly:e.readOnly,mode:e.mode,recordId:e.recordId,fieldLabel:i}),[o,e.readOnly,e.mode,e.recordId,e.objectName,i]),v=(0,Q.useCallback)(async n=>{if(!t&&!e.submitHandler&&gt(e))return e.onSuccess&&await e.onSuccess(n),n;try{let r,i=e.mode===`create`?Be(n,o):n;if(e.submitHandler)r=await e.submitHandler(i);else if(!t)throw vt();else if(e.mode===`create`)r=await t.create(e.objectName,i);else if(e.mode===`edit`&&e.recordId){let n=await u({dataSource:t,objectName:e.objectName,recordId:e.recordId,payload:i,baseRecord:c});if(n.status===`cancelled`)return;r=n.result}return e.onSuccess&&await e.onSuccess(r),r}catch(t){throw e.onError&&e.onError(t),t}},[e,t,u,c]),y=(0,Q.useCallback)(()=>{e.onCancel&&e.onCancel()},[e]),b=(e,t)=>e.pane===`primary`||e.pane===`secondary`?e.pane:t===0?`primary`:`secondary`,x=(0,Q.useMemo)(()=>e.sections.filter((e,t)=>b(e,t)===`primary`),[e.sections]),S=(0,Q.useMemo)(()=>e.sections.filter((e,t)=>b(e,t)===`secondary`),[e.sections]),C=e.splitDirection||`horizontal`,w=e.splitSize||50;if(m)return(0,$.jsxs)(`div`,{className:`p-4 border border-red-300 bg-red-50 rounded-md`,children:[(0,$.jsx)(`h3`,{className:`text-red-800 font-semibold`,children:`Error loading form`}),(0,$.jsx)(`p`,{className:`text-red-600 text-sm mt-1`,children:m.message})]});if(f)return(0,$.jsxs)(`div`,{className:`p-8 text-center`,children:[(0,$.jsx)(`div`,{className:`inline-block animate-spin rounded-full h-8 w-8 border-b-2 border-gray-900`}),(0,$.jsx)(`p`,{className:`mt-2 text-sm text-gray-600`,children:`Loading form...`})]});let T=e=>typeof e==`number`&&e>0?Math.min(Math.floor(e),4):void 0,E=e.sections.map(e=>T(e.columns)).filter(e=>e!=null),D=T(e.columns)??(E.length?Math.max(...E):1),k=ot(D),A=(e,t)=>{let n=[];return e.forEach((e,r)=>{let i=_(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(...D>1?tt(i,D,T(e.columns)):i))}),n},M=[{key:`primary`,sections:x,defaultSize:w},{key:`secondary`,sections:S,defaultSize:100-w}].map(e=>({...e,fields:A(e.sections,e.key),containerClass:e.sections.length===1?e.sections[0].gridClassName:void 0})).filter(e=>e.fields.length>0);return(0,$.jsxs)(`div`,{className:J(`w-full @container`,n,e.className),children:[(0,$.jsx)(O,{schema:{type:`form`,objectName:e.objectName,fields:M.flatMap(e=>e.fields),columns:D,...k?{fieldContainerClass:k}:{},layout:`vertical`,defaultValues:c,previousValues:e.mode===`edit`&&e.recordId?c:void 0,submitLabel:e.submitText||(e.mode===`create`?`Create`:`Update`),cancelLabel:e.cancelText,showSubmit:e.showSubmit!==!1&&e.mode!==`view`,showCancel:e.showCancel!==!1,onSubmit:v,onCancel:y,fieldPanes:M.map(e=>({key:e.key,fields:e.fields.map(e=>e.name),defaultSize:e.defaultSize,...e.containerClass?{containerClass:e.containerClass}:{}})),fieldPanesOrientation:C,fieldPanesResizable:e.splitResizable!==!1}}),d]})},Et=new Set([`id`,`_id`,`created_at`,`updated_at`,`createdAt`,`updatedAt`,`organization_id`,`organizationId`]),Dt=new Set([`formula`,`summary`,`rollup`,`lookup_value`,`auto_number`,`autonumber`,`computed`]);function Ot(e,t){if(!e||typeof e!=`object`)return e;let n={},r=t?.fields;for(let[t,i]of Object.entries(e))if(!Et.has(t)){if(r){let e=r[t];if(!e)continue;let n=String(e.type||``).toLowerCase();if(Dt.has(n)||e.computed===!0||e.formula||e.readOnly===!0||e.readonly===!0)continue}n[t]=i}return n}var kt=e=>e==null?void 0:e.id??e._id??e.recordId,At=(e,t)=>t?Ot(e,t):e,jt=new Set([`id`,`_id`,`recordId`]);function Mt(e,t){return!e||Object.entries(e).every(([e,n])=>e===t||jt.has(e)?!0:n==null||n===``)}function Nt(e,t,n){let r=[{object:e,action:`create`,data:t}];for(let e of n)for(let t of e.rows)Mt(t,e.relationshipField)||r.push({object:e.childObject,action:`create`,data:{...At(t,e.childSchema),[e.relationshipField]:{$ref:0}}});return r}function Pt(e,t,n,r){let i=[{object:e,action:`update`,id:t,data:n}];for(let e of r){let n=(e.rows||[]).map(n=>({...n,[e.relationshipField]:t})),{toCreate:r,toUpdate:a,toDelete:o}=Ft(e.original||[],n);for(let t of r){if(Mt(t,e.relationshipField))continue;let{id:n,_id:r,recordId:a,...o}=t;i.push({object:e.childObject,action:`create`,data:At(o,e.childSchema)})}for(let t of a)i.push({object:e.childObject,action:`update`,id:kt(t),data:At(t,e.childSchema)});for(let t of o)i.push({object:e.childObject,action:`delete`,id:t})}return i}function Ft(e,t){let n=new Set(t.map(kt).filter(Boolean));return{toCreate:t.filter(e=>!kt(e)),toUpdate:t.filter(e=>kt(e)),toDelete:(e||[]).map(kt).filter(e=>!!e&&!n.has(e))}}function It(e,t){return Array.isArray(e)?e.reduce((e,n)=>{let r=Number(n?.[t]);return e+(Number.isFinite(r)?r:0)},0):0}var Lt=new Set([`id`,`_id`,`recordId`,`created_at`,`updated_at`,`created_by`,`updated_by`,`createdAt`,`updatedAt`,`createdBy`,`updatedBy`,`organization_id`,`tenant_id`,`space`,`owner`]),Rt=new Set([`position`,`sort_order`,`sequence`,`line_no`,`line_number`,`sort`]),zt=new Set([`formula`,`summary`,`rollup`,`autonumber`,`auto_number`,`json`,`object`,`grid`,`table`,`location`,`vector`,`html`,`markdown`,`richtext`]);function Bt(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 Vt=new Set([`image`,`avatar`]);function Ht(e,t){e.multiple==null&&t?.multiple&&(e.multiple=!0),e.accept??(Array.isArray(t?.accept)&&t.accept.length>0?e.accept=t.accept:Vt.has(t?.type)&&(e.accept=[`image/*`]))}function Ut(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 Wt(e,t){let n=e?.fields;if(!n||typeof n!=`object`)return;let r;for(let[e,i]of Object.entries(n)){let n=i;if(n?.reference===t){if(n?.type===`master_detail`)return e;n?.type===`lookup`&&!r&&(r=e)}}return r}var Gt=[`name`,`title`,`subject`,`label`,`full_name`,`display_name`,`code`],Kt={select:0,currency:1,number:1,lookup:2,date:3,datetime:3,time:3,text:4};function qt(e){return(e.type?Kt[e.type]:void 0)??5}function Jt(e,t){if(t<=0||e.length<=t)return e;let n=new Set,r=e.find(e=>Gt.includes(e.name))??e[0];r&&n.add(r.name);for(let t of e)t.required&&n.add(t.name);let i=e.map((e,t)=>({c:e,i:t})).filter(({c:e})=>!n.has(e.name)).sort((e,t)=>qt(e.c)-qt(t.c)||e.i-t.i);for(let{c:e}of i){if(n.size>=t)break;n.add(e.name)}return e.map(e=>n.has(e.name)?e:{...e,defaultHidden:!0})}function Yt(e,t={}){let n=e?.fields;if(!n||typeof n!=`object`)return[];let r=new Set([...t.exclude??[],...t.relationshipField?[t.relationshipField]:[]]),i=[];for(let[e,t]of Object.entries(n)){let n=t;if(Lt.has(e)||r.has(e)||Rt.has(e)||n?.system||n?.readonly||n?.hidden||zt.has(n?.type))continue;let a={name:e,label:n?.label||e,type:Bt(n?.type),required:!!n?.required},o=Ut(n);a.type===`select`&&o&&(a.options=o),a.type===`lookup`&&(a.reference=n?.reference,a.displayField=n?.display_field||n?.reference_field),a.type===`file`&&Ht(a,n),n?.readonlyWhen&&(a.readonlyWhen=n.readonlyWhen),n?.requiredWhen&&(a.requiredWhen=n.requiredWhen);let s=typeof n?.expression==`string`?n.expression:n?.expression?.source;s&&typeof s==`string`&&(a.computed=!0,a.expr=s,a.required=!1,typeof n?.scale==`number`&&(a.scale=n.scale)),i.push(a)}return Jt(i,t.maxColumns??6)}function Xt(e,t){let n=e??[],r=t?.fields;return!n.length||!r||typeof r!=`object`?n:n.map(e=>{if(e.type)return e;let t=r[e.name];if(!t)return e;let n=Bt(t?.type),i={...e,type:n};i.label??=t?.label||e.name,i.required??=!!t?.required;let a=Ut(t);n===`select`&&a&&!i.options&&(i.options=a),n===`lookup`&&(i.reference??=t?.reference,i.displayField??=t?.display_field||t?.reference_field),n===`file`&&Ht(i,t),i.readonlyWhen==null&&t?.readonlyWhen&&(i.readonlyWhen=t.readonlyWhen),i.requiredWhen==null&&t?.requiredWhen&&(i.requiredWhen=t.requiredWhen);let o=typeof t?.expression==`string`?t.expression:t?.expression?.source;return!i.computed&&o&&typeof o==`string`&&(i.computed=!0,i.expr=o,i.required=!1,typeof t?.scale==`number`&&(i.scale=t.scale)),i})}var Zt=new Set([`formula`,`summary`,`rollup`,`autonumber`,`auto_number`]);function Qt(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;Lt.has(e)||r.has(e)||Rt.has(e)||n?.system||n?.hidden||Zt.has(n?.type)||i.push(e)}return i}var $t=new Set([`textarea`,`richtext`,`html`,`markdown`,`rich-text`,`json`,`location`,`address`]),en=new Set([`file`,`image`,`avatar`]);function tn(e,t,n={}){if(t===`grid`||t===`form`)return t;let r=e?.fields??{},i=Qt(e,{relationshipField:n.relationshipField});return i.some(e=>$t.has(r[e]?.type))||i.filter(e=>en.has(r[e]?.type)).length>=2||i.length>8?`form`:`grid`}var nn=[`amount`,`total`,`subtotal`,`line_total`,`line_amount`,`net_amount`];function rn(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=>nn.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 an(e,t,n,r={}){let i=r.relationshipField||Wt(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?Xt(r.columns,t):Yt(t,{relationshipField:i}),o=r.amountField||rn(a);return{childObject:e,relationshipField:i,columns:a,formFields:Qt(t,{relationshipField:i}),mode:tn(t,r.inlineEdit??(t?.fields)?.[i]?.inlineEdit,{relationshipField:i}),amountField:o,sortField:Object.keys(t?.fields??{}).find(e=>Rt.has(e))}}function on(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 sn(e){if(!e)return{};let t={};return e.querySelectorAll(`[name]`).forEach(e=>{let n=e.getAttribute(`name`);if(n){if(e.tagName===`INPUT`){let r=e;if(r.type===`checkbox`){t[n]=r.checked;return}if(r.type===`radio`){r.checked&&(t[n]=r.value);return}if(r.type===`number`||r.type===`range`){if(r.value===``){t[n]=null;return}let e=Number(r.value);t[n]=Number.isFinite(e)?e:r.value;return}t[n]=r.value;return}t[n]=e.value}}),t}var cn=({entries:e,rowState:t,setRows:n,formHostRef:r,taxRateField:i,formKey:a,onRowExpand:o,onAddViaForm:s,parentObjectName:c})=>{let[l,u]=(0,Q.useState)({}),d=(0,Q.useRef)(``);(0,Q.useEffect)(()=>{let e=r.current;if(!e)return;let t=()=>{let t=sn(e),n;try{n=JSON.stringify(t)}catch{n=String(Math.random())}n!==d.current&&(d.current=n,u(t))};t();let n=()=>t();e.addEventListener(`input`,n),e.addEventListener(`change`,n);let i=[120,360,800].map(e=>setTimeout(t,e));return()=>{e.removeEventListener(`input`,n),e.removeEventListener(`change`,n),i.forEach(clearTimeout)}},[r,a,e.length]);let f=l[i],p=f===void 0?null:Number.isFinite(Number(f))?Number(f):0,m=e.reduce((e,n)=>e+It(t[n.id]?.rows??[],n.config.amountField||`amount`),0),h=p!==null&&e.some(e=>!!e.config.amountField),g=p??0,_=g/100*m,v=m+_,y=e=>`¥${e.toLocaleString(void 0,{minimumFractionDigits:2,maximumFractionDigits:2})}`;return(0,$.jsxs)($.Fragment,{children:[e.map(e=>{let r=e.config;return(0,$.jsxs)(`section`,{className:`space-y-2`,children:[(0,$.jsx)(`h3`,{className:`text-sm font-medium text-foreground`,children:r.title||`Line Items`}),r.childObject?e.status===`failed`?(0,$.jsxs)(`p`,{className:`py-4 text-sm text-muted-foreground`,role:`status`,"data-testid":`md-detail-schema-unavailable`,children:[`Could not load the schema of`,` `,(0,$.jsx)(`code`,{className:`font-mono`,children:r.childObject}),`, so this collection has no columns to show. Check that the object exists and is readable, then reload.`]}):e.status===`underivable`?(0,$.jsxs)(`p`,{className:`py-4 text-sm text-muted-foreground`,"data-testid":`md-detail-no-relationship-field`,children:[`Could not work out how `,(0,$.jsx)(`code`,{className:`font-mono`,children:r.childObject}),` links to `,(0,$.jsx)(`code`,{className:`font-mono`,children:c}),`: no lookup or master_detail field on it references the parent. Set`,` `,(0,$.jsx)(`code`,{className:`font-mono`,children:`relationshipField`}),` on this collection to the field that holds the parent record.`]}):r.columns?.length?(0,$.jsx)(K,{value:t[e.id]?.rows??[],onChange:t=>n(e.id,t),contextRecord:l,...r.inlineMode===`form`||(r.formFields?.length??0)>(r.columns?.length??0)?{onRowExpand:t=>o(e.id,t)}:{},displayMode:r.inlineMode===`form`?`list`:`grid`,...r.inlineMode===`form`?{onAdd:()=>s(e.id)}:{},field:{columns:r.columns,total_field:h?void 0:r.amountField||(r.totalField?`amount`:void 0),sort_field:r.sortField,min_rows:r.minRows,max_rows:r.maxRows,add_label:r.inlineMode===`form`?r.addLabel||`Add`:r.addLabel}}):(0,$.jsx)(`p`,{className:`py-4 text-sm text-muted-foreground`,children:`Loading columns…`}):(0,$.jsxs)(`p`,{className:`py-4 text-sm text-muted-foreground`,"data-testid":`md-detail-no-child-object`,children:[`This collection has no child object configured: set`,` `,(0,$.jsx)(`code`,{className:`font-mono`,children:`childObject`}),` to the object whose rows it lists.`]})]},e.id)}),h&&(0,$.jsx)(`div`,{className:`flex justify-end`,children:(0,$.jsxs)(`dl`,{className:`w-64 space-y-1.5 text-sm`,"data-testid":`md-totals`,children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,$.jsx)(`dt`,{className:`text-muted-foreground`,children:`Subtotal`}),(0,$.jsx)(`dd`,{className:`tabular-nums`,"data-testid":`md-subtotal`,children:y(m)})]}),(0,$.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,$.jsxs)(`dt`,{className:`text-muted-foreground`,children:[`Tax (`,g,`%)`]}),(0,$.jsx)(`dd`,{className:`tabular-nums`,"data-testid":`md-tax`,children:y(_)})]}),(0,$.jsxs)(`div`,{className:`flex items-center justify-between border-t border-border pt-1.5 text-base font-semibold`,children:[(0,$.jsx)(`dt`,{children:`Total`}),(0,$.jsx)(`dd`,{className:`tabular-nums`,"data-testid":`md-grand-total`,children:y(v)})]})]})})]})},ln=({schema:e,dataSource:t,className:n})=>{let r=e.details||[],i=e.mode===`edit`&&!!e.recordId,a=r.some(e=>!e.relationshipField||!e.columns?.length||e.columns.some(e=>!e.type)),o=(0,Q.useMemo)(()=>on(r),[e.details]),s=(0,Q.useMemo)(()=>r.map((e,t)=>({id:o[t],config:e,status:a?`pending`:`ready`})),[e.details,o,a]),[c,l]=(0,Q.useState)(null),d=c??s;(0,Q.useEffect)(()=>{if(!a){l(s);return}if(!t||typeof t.getObjectSchema!=`function`)return;let n=!1;return(async()=>{let r=await Promise.all(s.map(async n=>{let r=n.config,i=r.columns?.length?r.columns.every(e=>!!e.type):!1;if(r.relationshipField&&i)return{...n,status:`ready`};if(!r.childObject)return console.warn(`[MasterDetailForm] a detail collection has no childObject — refusing to fetch its schema. Set childObject to the child object the collection lists.`),{...n,status:`declined`};let a;try{a=await t.getObjectSchema(r.childObject)}catch(e){return console.warn(`[MasterDetailForm] could not load the schema of child object "${r.childObject}" — its columns cannot be derived, so the collection renders a refusal placeholder instead of a permanent "Loading columns…".`,e),{...n,status:`failed`}}try{if(r.relationshipField&&r.columns?.length)return{...n,config:{...r,columns:Xt(r.columns,a)},status:`ready`};let t=an(r.childObject,a,e.objectName,{relationshipField:r.relationshipField,columns:r.columns,amountField:r.amountField});return{...n,status:`ready`,config:{...r,relationshipField:t.relationshipField,columns:t.columns,formFields:r.formFields??t.formFields,inlineMode:r.inlineMode??t.mode,amountField:r.amountField??t.amountField,sortField:r.sortField??t.sortField}}}catch(e){return console.warn(`[MasterDetailForm] loaded the schema of child object "${r.childObject}" but could not derive its detail configuration; the collection cannot render its columns. Set relationshipField (and columns) explicitly on the detail entry.`,e),{...n,status:`underivable`}}}));n||l(r)})(),()=>{n=!0}},[t,e.objectName,e.details]);let[f,p]=(0,Q.useState)({}),m=(0,Q.useRef)(f);m.current=f;let h=(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);h.current=r})(),()=>{n=!0}},[t,e.objectName,e.details]);let[g,_]=(0,Q.useState)(0),[v,y]=(0,Q.useState)(!1),b=(0,Q.useRef)(!1),x=(0,Q.useRef)(null),S=`form-outcome:${Q.useId()}`,C=(0,Q.useCallback)(()=>{b.current=!1,y(!1),x.current&&=(clearTimeout(x.current),null)},[]);(0,Q.useEffect)(()=>{let n=!1;if(!(!i||!t))return(async()=>{let r=await Promise.all(d.map(async n=>{let r=n.config;if(!r.relationshipField)return[n.id,{rows:[],original:[]}];try{let i=(await t.find(r.childObject,{$filter:{[r.relationshipField]:e.recordId},$top:500}))?.data??[];return[n.id,{rows:i.map(e=>({...e})),original:i.map(e=>({...e}))}]}catch{return[n.id,{rows:[],original:[]}]}}));n||p(Object.fromEntries(r))})(),()=>{n=!0}},[i,t,e.recordId,c]);let w=(0,Q.useCallback)((e,t)=>{p(n=>({...n,[e]:{rows:t,original:n[e]?.original??[]}}))},[]),T=e.taxRateField||`tax_rate`,[E,D]=(0,Q.useState)(null),O=E?f[E.entryId]?.rows?.[E.rowIdx]:void 0,k=E?d.find(e=>e.id===E.entryId)?.config:void 0,A=(0,Q.useCallback)((e,t,n)=>{p(r=>{let i=r[e]??{rows:[],original:[]};return{...r,[e]:{...i,rows:i.rows.map((e,r)=>r===t?{...e,...n}:e)}}})},[]),j=(0,Q.useCallback)(e=>{p(t=>{let n=t[e]??{rows:[],original:[]},r=[...n.rows,{}];return D({entryId:e,rowIdx:r.length-1,isNew:!0}),{...t,[e]:{...n,rows:r}}})},[]),M=(0,Q.useCallback)(()=>{D(e=>(e?.isNew&&p(t=>{let n=t[e.entryId];return n?{...t,[e.entryId]:{...n,rows:n.rows.filter((t,n)=>n!==e.rowIdx)}}:t}),null))},[]),N=(0,Q.useCallback)(async t=>{C(),e.onSuccess||Z.success(i?e.title?`${e.title} saved`:`Saved`:`Created`,{id:S}),i||(p({}),_(e=>e+1)),await e.onSuccess?.(t)},[i,e.onSuccess,e.title,d.length,C,S]),P=(0,Q.useCallback)(t=>{C(),Z.error(t?.message||`Save failed`,{id:S}),e.onError?.(t)},[e,C,S]),F=(0,Q.useCallback)(async n=>{if(!t)throw Error(`MasterDetailForm: dataSource is required`);let r={...n};d.forEach(e=>{let t=e.config;t.totalField&&(r[t.totalField]=It(m.current[e.id]?.rows??[],t.amountField||`amount`))});let a=i?Pt(e.objectName,String(e.recordId),r,d.filter(e=>e.config.relationshipField).map(e=>({childObject:e.config.childObject,relationshipField:e.config.relationshipField,rows:m.current[e.id]?.rows??[],original:m.current[e.id]?.original??[],childSchema:h.current[e.config.childObject]}))):Nt(e.objectName,r,d.filter(e=>e.config.relationshipField).map(e=>({childObject:e.config.childObject,relationshipField:e.config.relationshipField,rows:m.current[e.id]?.rows??[],childSchema:h.current[e.config.childObject]})));return(await u(t,a))?.results?.[0]??{...r,id:e.recordId}},[t,d,e.objectName,e.recordId,i]),I=(0,Q.useMemo)(()=>({type:`object-form`,objectName:e.objectName,mode:e.mode??`create`,recordId:e.recordId,initialValues:e.initialValues,initialData:e.initialData,formType:e.formType,sections:e.sections,fields:e.fields,title:e.title,showSubmit:!1,showCancel:!1,submitHandler:F,onSuccess:N,onError:P}),[e,F,N,P]),L=(0,Q.useRef)(null),ee=e.submitText??(i?`Save`:`Create`),te=(0,Q.useCallback)(()=>{b.current||L.current?.querySelector(`form`)&&(b.current=!0,y(!0),Z.dismiss(S),setTimeout(()=>{(L.current?.querySelector(`form`))?.requestSubmit()},0),x.current=setTimeout(()=>C(),1500))},[C,S]);return(0,Q.useEffect)(()=>()=>{x.current&&clearTimeout(x.current)},[]),(0,$.jsxs)(`div`,{className:J(`space-y-6`,n,e.className),children:[(0,$.jsx)(`div`,{ref:L,children:(0,$.jsx)(vn,{schema:I,dataSource:t},g)}),(0,$.jsx)(cn,{entries:d,rowState:f,setRows:w,formHostRef:L,taxRateField:T,formKey:g,onRowExpand:(e,t)=>D({entryId:e,rowIdx:t}),onAddViaForm:j,parentObjectName:e.objectName}),E&&k&&(0,$.jsxs)(z,{className:`border-primary/40 shadow-none ring-1 ring-primary/10`,"data-testid":`md-row-form`,children:[(0,$.jsxs)(Y,{className:`pb-2 flex flex-row items-center justify-between gap-2 space-y-0`,children:[(0,$.jsxs)(R,{className:`text-sm font-medium`,children:[k.title||`Line item`,` — row `,E.rowIdx+1]}),(0,$.jsx)(W,{type:`button`,variant:`ghost`,size:`sm`,className:`h-7 text-xs text-muted-foreground`,onClick:M,children:`Close`})]}),(0,$.jsx)(X,{children:(0,$.jsx)(vn,{schema:{type:`object-form`,objectName:k.childObject,mode:`edit`,initialData:O??{},...k.formFields?.length?{fields:k.formFields}:{},submitText:`Apply`,submitHandler:async e=>e,onSuccess:e=>{A(E.entryId,E.rowIdx,e),D(null)},onCancel:M},dataSource:t},`row-${E.entryId}-${E.rowIdx}`)})]}),e.showSubmit!==!1&&(0,$.jsxs)(`div`,{className:`flex items-center justify-end gap-2 border-t border-border pt-4`,children:[e.onCancel&&(0,$.jsx)(W,{type:`button`,variant:`outline`,onClick:e.onCancel,disabled:v,"data-testid":`md-form-cancel`,children:e.cancelText??`Cancel`}),(0,$.jsx)(W,{type:`button`,onClick:te,disabled:v||a&&!c,"data-testid":`md-form-submit`,children:v?`Saving…`:ee})]})]})};function un(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)continue;let i=e.objectSchema?.fields?.[t];i&&n.push({...We(t,e),group:i.group})}return n}i();function dn(e,t){let n=s({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)),a=n.map(e=>({...e.key===void 0?{}:{name:e.key},...e.key===void 0?{}:{label:e.label??e.key},fields:[...e.fields],...e.collapse===`none`?{}:{collapsible:!0},...e.collapse===`collapsed`?{collapsed:!0}:{}}));if(i.length>0){let e=a[a.length-1];e&&e.name===void 0?e.fields=[...e.fields??[],...i]:a.push({fields:i})}return a}var fn=M({"form.discardTitle":`Discard changes?`,"form.discardMessage":`You have unsaved changes. If you close this form now, your edits will be lost.`,"form.dialogDescriptionFallback":`Complete the form fields, then submit or cancel.`,"form.keepEditing":`Keep editing`,"form.discard":`Discard`},`form.discardTitle`),pn=({schema:e,dataSource:t,className:n})=>{let{fieldLabel:i,sectionLabel:a}=j(),{userId:o}=r(),{t:s}=fn(),c=k(),[l,u]=(0,Q.useState)(null),[d,f]=(0,Q.useState)([]),[p,m]=(0,Q.useState)({}),[h,g]=(0,Q.useState)(!0),[_,v]=(0,Q.useState)(null),[y,b]=(0,Q.useState)(!1),[x,S]=(0,Q.useState)(!1),{saveWithOcc:C,conflictDialog:w}=pt(),[T,E]=(0,Q.useState)(!1),D=(0,Q.useRef)(!1),A=e.confirmOnDiscard!==!1,M=e.open!==!1,N=e.drawerSide||`right`,P=(0,Q.useId)(),[F,R]=(0,Q.useState)(()=>{let t={};return e.sections?.forEach((e,n)=>{let r=e.name||String(n);e.collapsed&&(t[r]=!0)}),t});(0,Q.useEffect)(()=>{(async()=>{if(!t){g(!1);return}try{let n=await t.getObjectSchema(e.objectName);u(n)}catch(e){v(e),g(!1)}})()},[e.objectName,t]);let z=(0,Q.useRef)(void 0);(0,Q.useEffect)(()=>{let n=!1;return(l||!t)&&(async()=>{if(e.mode===`create`||!e.recordId){m(ze(l,e.initialData||e.initialValues,{currentUserId:o})),g(!1);return}if(!t){m(e.initialData||e.initialValues||{}),g(!1);return}z.current!==e.recordId&&(g(!0),b(!1));try{let r=await t.findOne(e.objectName,e.recordId);if(n)return;z.current=e.recordId,m(r||{})}catch(e){if(n)return;v(e)}finally{n||g(!1)}})(),()=>{n=!0}},[l,e.mode,e.recordId,e.initialData,e.initialValues,t,e.objectName]);let V=(0,Q.useCallback)(t=>Ke(t,{objectSchema:l,objectName:e.objectName,readOnly:e.readOnly,mode:e.mode,recordId:e.recordId,fieldLabel:i}),[l,e.readOnly,e.mode,e.recordId,e.objectName,i]);(0,Q.useEffect)(()=>{if(!(!l&&t)){if(e.customFields?.length){f(e.customFields),g(!1);return}if(e.sections?.length){g(!1);return}l&&(f(un({fields:e.fields,objectSchema:l,objectName:e.objectName,readOnly:e.readOnly,mode:e.mode,recordId:e.recordId,fieldLabel:i})),g(!1))}},[l,e.fields,e.customFields,e.sections,e.readOnly,e.mode,t]);let U=(0,Q.useMemo)(()=>{if(e.sections?.length||e.customFields?.length)return null;let t=rt(d,l);e.mode===`create`&&(t=it(t,l));let n=dn(t,l?.fieldGroups);if(!n)return null;let r=e.columns&&e.columns>0?Math.min(Math.floor(e.columns),4):Qe(t.length);return n.map(e=>({...e,columns:r}))},[e.sections,e.customFields,e.columns,e.mode,d,l]),ie=(0,Q.useCallback)(async n=>{E(!0);try{if(!t&&!e.submitHandler&&gt(e))return e.onSuccess&&await e.onSuccess(n),e.onOpenChange?.(!1),n;let r,i=Ot(n,l),a=e.mode===`create`?Be(i,l):i;if(e.submitHandler)r=await e.submitHandler(a);else if(!t)throw vt();else if(e.mode===`create`)r=await t.create(e.objectName,a);else if(e.mode===`edit`&&e.recordId){let n=await C({dataSource:t,objectName:e.objectName,recordId:e.recordId,payload:i,baseRecord:p});if(n.status===`cancelled`)return;r=n.result}return e.onSuccess&&await e.onSuccess(r),e.onOpenChange?.(!1),r}catch(t){throw e.onError&&e.onError(t),t}finally{E(!1)}},[e,t,l,C,p]),G=(0,Q.useCallback)(()=>{S(!1),D.current&&(D.current=!1,e.onCancel?.()),e.onOpenChange?.(!1)},[e]),ae=(0,Q.useCallback)(e=>{D.current=e,A&&y?S(!0):G()},[A,y,G]);(0,Q.useEffect)(()=>{if(!M||!y||!A)return;let e=e=>{e.preventDefault(),e.returnValue=``};return window.addEventListener(`beforeunload`,e),()=>window.removeEventListener(`beforeunload`,e)},[M,y,A]);let K=(0,Q.useCallback)(()=>{D.current=!0,G()},[G]),se=(0,Q.useMemo)(()=>{if(e.drawerWidth)return N===`left`||N===`right`?{width:e.drawerWidth,maxWidth:e.drawerWidth}:{height:e.drawerWidth,maxHeight:e.drawerWidth}},[e.drawerWidth,N]),q=e.layout===`vertical`||e.layout===`horizontal`?e.layout:`vertical`,ce=e.showSubmit!==!1&&e.mode!==`view`,le=e.showCancel!==!1,ue=e.submitText||(e.mode===`create`?`Create`:`Update`),de=e.cancelText||`Cancel`,Y={type:`form`,objectName:e.objectName,layout:q,defaultValues:p,previousValues:e.mode===`edit`&&e.recordId?p:void 0,submitLabel:ue,cancelLabel:de,showSubmit:ce,showCancel:le,onSubmit:ie,onCancel:K,onDirtyChange:b,showActions:!1,id:P},X=()=>{if(_)return(0,$.jsxs)(`div`,{className:`p-4 border border-red-300 bg-red-50 rounded-md`,children:[(0,$.jsx)(`h3`,{className:`text-red-800 font-semibold`,children:`Error loading form`}),(0,$.jsx)(`p`,{className:`text-red-600 text-sm mt-1`,children:_.message})]});if(h)return(0,$.jsxs)(`div`,{className:`p-8 text-center`,children:[(0,$.jsx)(`div`,{className:`inline-block animate-spin rounded-full h-8 w-8 border-b-2 border-gray-900`}),(0,$.jsx)(`p`,{className:`mt-2 text-sm text-gray-600`,children:`Loading form...`})]});if(e.sections?.length){let t=[];return e.sections.forEach((e,n)=>{let r=e.name||String(n),i=F[r]??e.collapsed??!1,a=V(e);t.push({name:`__section_${r}`,label:e.label||``,type:`section-divider`,visibleWhen:e.visibleWhen,fields:a.map(e=>e.name),colSpan:4,collapsible:e.collapsible,collapsed:i,onToggle:e.collapsible?()=>R(e=>({...e,[r]:!i})):void 0}),i?t.push(...a.map(e=>({...e,hidden:!0}))):t.push(...a)}),(0,$.jsx)(O,{schema:{...Y,fields:t}})}if(U?.length){let t=Number(U[0]?.columns)||1,n=[];U.forEach((r,i)=>{let o=V(r);if(!o.length)return;let s=r.name||String(i),c=r.collapsible?F[s]??r.collapsed??!1:!1,l=r.name?a(e.objectName,r.name,r.label||r.name):r.label;l&&n.push({name:`__section_${s}`,label:l,type:`section-divider`,visibleWhen:r.visibleWhen,fields:o.map(e=>e.name),colSpan:4,collapsible:r.collapsible,collapsed:c,onToggle:r.collapsible?()=>R(e=>({...e,[s]:!c})):void 0});let u=t>1?tt(o,t):o;n.push(...c?u.map(e=>({...e,hidden:!0})):u)});let r=at[t];return(0,$.jsx)(O,{schema:{...Y,fields:n,columns:t,...r?{fieldContainerClass:r}:{}}})}let t=ct(d,l,e.columns,e.mode),n=at[t.columns||1];return(0,$.jsx)(O,{schema:{...Y,fields:t.fields,columns:t.columns,...n?{fieldContainerClass:n}:{}}})},fe=e.subforms,pe=fe?.length&&e.mode!==`view`?(0,$.jsx)(ln,{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:de,details:fe,onSuccess:async t=>{await e.onSuccess?.(t),e.onOpenChange?.(!1)},onError:e.onError,onCancel:()=>e.onOpenChange?.(!1)},dataSource:t}):X();return c?(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})]}),pe]}):(0,$.jsx)(ve,{open:M,onOpenChange:t=>{if(t){e.onOpenChange?.(!0);return}ae(!1)},children:(0,$.jsxs)(Ce,{side:N,className:J(`overflow-y-auto`,n,e.className),style:se,children:[(e.title||e.description)&&(0,$.jsxs)(xe,{children:[e.title&&(0,$.jsx)(B,{children:e.title}),e.description?(0,$.jsx)(oe,{children:e.description}):(0,$.jsx)(oe,{className:`sr-only`,children:s(`form.dialogDescriptionFallback`)})]}),(0,$.jsx)(`div`,{className:`@container py-4`,children:pe}),!_&&!h&&!(fe?.length&&e.mode!==`view`)&&(ce||le)&&(0,$.jsx)(`div`,{className:`shrink-0 border-t px-4 py-3 bg-background`,"data-testid":`drawer-form-footer`,children:(0,$.jsxs)(`div`,{className:`flex flex-col sm:flex-row gap-2 sm:justify-end`,children:[le&&(0,$.jsx)(W,{type:`button`,variant:`outline`,onClick:K,disabled:T,className:`w-full sm:w-auto`,children:de}),ce&&(0,$.jsxs)(W,{type:`submit`,form:P,disabled:T,className:`w-full sm:w-auto`,children:[T&&(0,$.jsx)(ye,{className:`mr-2 h-4 w-4 animate-spin`}),ue]})]})}),(0,$.jsx)(ne,{open:x,onOpenChange:S,children:(0,$.jsxs)(re,{children:[(0,$.jsxs)(me,{children:[(0,$.jsx)(ee,{children:s(`form.discardTitle`)}),(0,$.jsx)(I,{children:s(`form.discardMessage`)})]}),(0,$.jsxs)(te,{children:[(0,$.jsx)(H,{onClick:()=>{D.current=!1},children:s(`form.keepEditing`)}),(0,$.jsx)(L,{onClick:G,children:s(`form.discard`)})]})]})}),w]})})},mn=M({"form.discardTitle":`Discard changes?`,"form.discardMessage":`You have unsaved changes. If you close this form now, your edits will be lost.`,"form.dialogDescriptionFallback":`Complete the form fields, then submit or cancel.`,"form.keepEditing":`Keep editing`,"form.discard":`Discard`},`form.discardTitle`),hn={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`},gn=({schema:e,dataSource:t,className:n})=>{let{fieldLabel:i,sectionLabel:a}=j(),{t:o}=mn(),s=k(),c=r(),l=(0,Q.useCallback)(t=>{if(!c?.isLoaded)return t;let n=[];for(let r of t){if(!r?.name){n.push(r);continue}c.checkField(e.objectName,r.name,`read`)&&(!c.checkField(e.objectName,r.name,`write`)&&e.mode!==`view`?n.push({...r,readOnly:!0,disabled:!0}):n.push(r))}return n},[c,e.objectName,e.mode]),[u,d]=(0,Q.useState)(null),[f,p]=(0,Q.useState)([]),[m,h]=(0,Q.useState)({}),[g,_]=(0,Q.useState)(!0),[v,y]=(0,Q.useState)(null),[b,x]=(0,Q.useState)(!1),[S,C]=(0,Q.useState)(!1),[w,T]=(0,Q.useState)(!1),{saveWithOcc:E,conflictDialog:D}=pt(),A=(0,Q.useRef)(!1),M=e.confirmOnDiscard!==!1,N=e.open!==!1,P=(0,Q.useId)(),R=(0,Q.useMemo)(()=>{if(e.sections?.length||e.customFields?.length)return null;let t=rt(f,u);e.mode===`create`&&(t=it(t,u));let n=dn(t,u?.fieldGroups);if(!n)return null;let r=e.columns&&e.columns>0?Math.min(Math.floor(e.columns),4):Qe(t.length);return n.map(e=>({...e,columns:r}))},[e.sections,e.customFields,e.columns,e.mode,f,u]),z=e.sections?.length?e.sections:R??void 0,B=(0,Q.useMemo)(()=>z?.length||e.customFields?.length?null:ct(f,u,e.columns,e.mode),[f,u,e.columns,e.mode,z,e.customFields]),U=hn[(0,Q.useMemo)(()=>{if(e.modalSize)return e.modalSize;if(B?.columns&&B.columns>1)return st(B.columns);if(z?.length){let e=Math.max(...z.map(e=>Number(e.columns)||1));if(e>1)return st(e)}return`default`},[e.modalSize,B,z])]||hn.default;(0,Q.useEffect)(()=>{(async()=>{if(!t){_(!1);return}try{let n=await t.getObjectSchema(e.objectName);d(n)}catch(e){y(e),_(!1)}})()},[e.objectName,t]);let ie=(0,Q.useRef)(void 0);(0,Q.useEffect)(()=>{let n=!1;return(u||!t)&&(async()=>{if(e.mode===`create`||!e.recordId){h(ze(u,e.initialData||e.initialValues,{currentUserId:c.userId})),_(!1);return}if(!t){h(e.initialData||e.initialValues||{}),_(!1);return}ie.current!==e.recordId&&(_(!0),C(!1));try{let r=await t.findOne(e.objectName,e.recordId);if(n)return;ie.current=e.recordId,h(r||{})}catch(e){if(n)return;y(e)}finally{n||_(!1)}})(),()=>{n=!0}},[u,e.mode,e.recordId,e.initialData,e.initialValues,t,e.objectName]);let G=(0,Q.useCallback)(t=>Ke(t,{objectSchema:u,objectName:e.objectName,readOnly:e.readOnly,mode:e.mode,recordId:e.recordId,fieldLabel:i}),[u,e.readOnly,e.mode,e.recordId,e.objectName,i]);(0,Q.useEffect)(()=>{if(!(!u&&t)){if(e.customFields?.length){p(e.customFields),_(!1);return}if(e.sections?.length){_(!1);return}u&&(p(un({fields:e.fields,objectSchema:u,objectName:e.objectName,readOnly:e.readOnly,mode:e.mode,recordId:e.recordId,fieldLabel:i})),_(!1))}},[u,e.fields,e.customFields,e.sections,e.readOnly,e.mode,t]);let ae=(0,Q.useCallback)(async n=>{x(!0);try{if(!t&&!e.submitHandler&&gt(e))return e.onSuccess&&await e.onSuccess(n),e.onOpenChange?.(!1),n;let r,i=Ot(n,u);if(c?.isLoaded){let t={};for(let n of Object.keys(i))c.checkField(e.objectName,n,`write`)&&(t[n]=i[n]);i=t}let a=e.mode===`create`?Be(i,u):i;if(e.submitHandler)r=await e.submitHandler(a);else if(!t)throw vt();else if(e.mode===`create`)r=await t.create(e.objectName,a);else if(e.mode===`edit`&&e.recordId){let n=await E({dataSource:t,objectName:e.objectName,recordId:e.recordId,payload:i,baseRecord:m});if(n.status===`cancelled`)return;r=n.result}return e.onSuccess&&await e.onSuccess(r),e.onOpenChange?.(!1),r}catch(t){throw e.onError&&e.onError(t),t}finally{x(!1)}},[e,t,u,c,E,m]),K=(0,Q.useCallback)(()=>{T(!1),A.current&&(A.current=!1,e.onCancel?.()),e.onOpenChange?.(!1)},[e]),oe=(0,Q.useCallback)(e=>{A.current=e,M&&S?T(!0):K()},[M,S,K]);(0,Q.useEffect)(()=>{if(!N||!S||!M)return;let e=e=>{e.preventDefault(),e.returnValue=``};return window.addEventListener(`beforeunload`,e),()=>window.removeEventListener(`beforeunload`,e)},[N,S,M]);let ce=(0,Q.useCallback)(()=>{A.current=!0,K()},[K]),ue=e.layout===`vertical`||e.layout===`horizontal`?e.layout:`vertical`,de=e.showSubmit!==!1&&e.mode!==`view`,Y=e.showCancel!==!1,X=e.submitText||(e.mode===`create`?`Create`:`Update`),fe=e.cancelText||`Cancel`,pe={type:`form`,objectName:e.objectName,layout:ue,defaultValues:m,previousValues:e.mode===`edit`&&e.recordId?m:void 0,submitLabel:X,cancelLabel:fe,showSubmit:de,showCancel:Y,onSubmit:ae,onCancel:ce,onDirtyChange:C,showActions:!1,id:P},he=()=>{if(v)return(0,$.jsxs)(`div`,{className:`p-4 border border-red-300 bg-red-50 rounded-md`,children:[(0,$.jsx)(`h3`,{className:`text-red-800 font-semibold`,children:`Error loading form`}),(0,$.jsx)(`p`,{className:`text-red-600 text-sm mt-1`,children:v.message})]});if(g)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)(le,{className:`h-4 w-24`}),(0,$.jsx)(le,{className:`h-10 w-full`})]},e))});if(e.sections?.length){let t=e.sections,n=(e,t)=>e.name||e.label||String(t),r=t=>t.name?a(e.objectName,t.name,t.label||t.name):t.label,i=e=>typeof e==`number`&&e>0?Math.min(Math.floor(e),4):void 0,o=t.map(e=>i(e.columns)).filter(e=>e!=null),s=i(e.columns)??(o.length?Math.max(...o):1),c=at[s],u=t.map((e,t)=>{let a=l(G(e));return{key:n(e,t),title:r(e),description:e.description,visibleWhen:e.visibleWhen,className:e.className,gridClassName:e.gridClassName,fields:s>1?tt(a,s,i(e.columns)):a}}).filter(e=>e.fields.length>0),d={...pe,columns:s,...c?{fieldContainerClass:c}:{}};if(e.contentLayout===`tabbed`&&u.length>1)return(0,$.jsx)(O,{schema:{...d,fields:u.flatMap(e=>e.fields),fieldTabs:u.map((e,t)=>({key:e.key,label:e.title||`Section ${t+1}`,description:e.description,fields:e.fields.map(e=>e.name),containerClass:e.gridClassName,visibleWhen:e.visibleWhen}))}});let f=[];return u.forEach(e=>{(e.title||e.description)&&f.push({name:`__section_${e.key}`,label:e.title,description:e.description,type:`section-divider`,visibleWhen:e.visibleWhen,fields:e.fields.map(e=>e.name),colSpan:4,className:e.className}),f.push(...e.fields)}),(0,$.jsx)(O,{schema:{...d,fields:f}})}if(R?.length){let t=Number(R[0]?.columns)||1,n=[];R.forEach((r,i)=>{let o=l(G(r));if(!o.length)return;let s=r.name?a(e.objectName,r.name,r.label||r.name):r.label;s&&n.push({name:`__section_${r.name||i}`,label:s,type:`section-divider`,visibleWhen:r.visibleWhen,fields:o.map(e=>e.name)}),n.push(...t>1?tt(o,t):o)});let r=at[t];return(0,$.jsx)(O,{schema:{...pe,fields:n,columns:t,...r?{fieldContainerClass:r}:{}}})}let t=B??ct(f,u,e.columns,e.mode),n=at[t.columns||1];return(0,$.jsx)(O,{schema:{...pe,fields:l(t.fields),columns:t.columns,...n?{fieldContainerClass:n}:{}}})},ge=e.subforms;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})]}),he()]});if(ge?.length&&e.mode!==`view`)return(0,$.jsx)(be,{open:N,onOpenChange:e.onOpenChange,children:(0,$.jsxs)(q,{className:J(U,`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)(V,{className:`shrink-0 px-4 pt-4 sm:px-6 sm:pt-6 pb-2 border-b`,children:[e.title&&(0,$.jsx)(F,{children:e.title}),e.description?(0,$.jsx)(se,{children:e.description}):(0,$.jsx)(se,{className:`sr-only`,children:`Enter the record and its line items, then save.`})]}),(0,$.jsx)(`div`,{className:`@container flex-1 overflow-y-auto px-4 sm:px-6 py-4`,children:(0,$.jsx)(ln,{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:X,cancelText:fe,details:ge,onSuccess:async t=>{await e.onSuccess?.(t),e.onOpenChange?.(!1)},onError:e.onError,onCancel:()=>e.onOpenChange?.(!1)},dataSource:t})})]})});let _e=!g&&!v&&(de||Y);return(0,$.jsx)(be,{open:N,onOpenChange:t=>{if(t){e.onOpenChange?.(!0);return}oe(!1)},children:(0,$.jsxs)(q,{className:J(U,`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)(V,{className:`shrink-0 px-4 pt-4 sm:px-6 sm:pt-6 pb-2 border-b`,children:[e.title&&(0,$.jsx)(F,{children:e.title}),e.description?(0,$.jsx)(se,{children:e.description}):(0,$.jsx)(se,{className:`sr-only`,children:o(`form.dialogDescriptionFallback`)})]}),(0,$.jsx)(`div`,{className:`@container flex-1 overflow-y-auto px-4 sm:px-6 py-4`,children:he()}),_e&&(0,$.jsx)(`div`,{className:`shrink-0 border-t px-4 sm:px-6 py-3 bg-background`,"data-testid":`modal-form-footer`,children:(0,$.jsxs)(`div`,{className:`flex flex-col sm:flex-row gap-2 sm:justify-end`,children:[Y&&(0,$.jsx)(W,{type:`button`,variant:`outline`,onClick:ce,disabled:b,className:`w-full sm:w-auto`,children:fe}),de&&(0,$.jsxs)(W,{type:`submit`,form:P,disabled:b,className:`w-full sm:w-auto`,children:[b&&(0,$.jsx)(ye,{className:`mr-2 h-4 w-4 animate-spin`}),X]})]})}),(0,$.jsx)(ne,{open:w,onOpenChange:T,children:(0,$.jsxs)(re,{children:[(0,$.jsxs)(me,{children:[(0,$.jsx)(ee,{children:o(`form.discardTitle`)}),(0,$.jsx)(I,{children:o(`form.discardMessage`)})]}),(0,$.jsxs)(te,{children:[(0,$.jsx)(H,{onClick:()=>{A.current=!1},children:o(`form.keepEditing`)}),(0,$.jsx)(L,{onClick:K,children:o(`form.discard`)})]})]})}),D]})})};function _n(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 vn=({schema:e,dataSource:t})=>{let n=r(),i=(0,Q.useMemo)(()=>{let t=_n(e),r=t.groups,i=!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;if(!n?.isLoaded)return i;let a=e=>e?.name?n.checkField(i.objectName,e.name,`read`)?!n.checkField(i.objectName,e.name,`write`)&&i.mode!==`view`?{...e,readOnly:!0,disabled:!0}:e:null:e,o=e=>Array.isArray(e)?e.map(a).filter(Boolean):e;return{...i,fields:o(i.fields),sections:i.sections?.map(e=>({...e,fields:o(e.fields)}))}},[e,n]),{sectionLabel:a}=j(),o=e=>e?.name?a(i.objectName,e.name,e.label||e.name):e?.label,s=!!i.subforms?.length&&i.mode!==`view`&&i.formType!==`drawer`&&i.formType!==`modal`,c=!s&&i.formType===`wizard`?i.formType:null,l=(i.sections??[]).filter(e=>e?.visibleWhen!=null).map(e=>e?.name||e?.label||`(unnamed)`).join(`, `);if((0,Q.useEffect)(()=>{!c||!l||console.warn(Ne(c,l))},[c,l]),s)return(0,$.jsx)(ln,{schema:{type:`object-master-detail-form`,objectName:i.objectName,mode:i.mode===`edit`?`edit`:`create`,recordId:i.recordId,initialValues:i.initialValues,initialData:i.initialData,formType:i.formType===`tabbed`?`tabbed`:`simple`,sections:i.sections,fields:i.fields,title:i.title,submitText:i.submitText,cancelText:i.cancelText,showSubmit:i.showSubmit,details:i.subforms,onSuccess:i.onSuccess,onError:i.onError,onCancel:i.onCancel,className:i.className},dataSource:t});if(i.formType===`tabbed`&&i.sections?.length)return(0,$.jsx)(yt,{schema:{...i,formType:`tabbed`,sections:i.sections.map(e=>({name:e.name,label:o(e),description:e.description,columns:e.columns,fields:e.fields,visibleWhen:e.visibleWhen})),defaultTab:i.defaultTab,tabPosition:i.tabPosition},dataSource:t,className:i.className});if(i.formType===`wizard`&&i.sections?.length)return(0,$.jsx)(wt,{schema:{...i,formType:`wizard`,sections:i.sections.map(e=>({name:e.name,label:o(e),description:e.description,columns:e.columns,fields:e.fields})),allowSkip:i.allowSkip,showStepIndicator:i.showStepIndicator,nextText:i.nextText,prevText:i.prevText,onStepChange:i.onStepChange},dataSource:t,className:i.className});if(i.formType===`split`&&i.sections?.length)return(0,$.jsx)(Tt,{schema:{...i,formType:`split`,sections:i.sections.map(e=>({name:e.name,label:o(e),description:e.description,columns:e.columns,fields:e.fields,pane:e.pane,visibleWhen:e.visibleWhen})),splitDirection:i.splitDirection,splitSize:i.splitSize,splitResizable:i.splitResizable},dataSource:t,className:i.className});if(i.formType===`drawer`){let{layout:e,...n}=i,r=i.layout===`vertical`||i.layout===`horizontal`?i.layout:void 0;return(0,$.jsx)(pn,{schema:{...n,layout:r,formType:`drawer`,sections:i.sections?.map(e=>({name:e.name,label:o(e),description:e.description,columns:e.columns,fields:e.fields,collapsible:e.collapsible,collapsed:e.collapsed,visibleWhen:e.visibleWhen})),open:i.open,onOpenChange:i.onOpenChange,drawerSide:i.drawerSide,drawerWidth:i.drawerWidth},dataSource:t,className:i.className})}if(i.formType===`modal`){let{layout:e,...n}=i,r=i.layout===`vertical`||i.layout===`horizontal`?i.layout:void 0;return(0,$.jsx)(gn,{schema:{...n,layout:r,formType:`modal`,sections:i.sections?.map(e=>({name:e.name,label:o(e),description:e.description,columns:e.columns,fields:e.fields,visibleWhen:e.visibleWhen})),open:i.open,onOpenChange:i.onOpenChange,modalSize:i.modalSize,modalCloseButton:i.modalCloseButton},dataSource:t,className:i.className})}return(0,$.jsx)(yn,{schema:i,dataSource:t})},yn=({schema:e,dataSource:t})=>{let{fieldLabel:n,sectionLabel:i}=j(),a=G(),o=r(),s=(0,Q.useCallback)(t=>{if(!o?.isLoaded)return t;let n=[];for(let r of t)o.checkField(e.objectName,r.name,`read`)&&(!o.checkField(e.objectName,r.name,`write`)&&e.mode!==`view`?n.push({...r,readOnly:!0,disabled:!0,description:r.description??`You do not have edit access to this field.`}):n.push(r));return n},[o,e.objectName,e.mode]),[c,l]=(0,Q.useState)(null),[u,d]=(0,Q.useState)([]),[f,p]=(0,Q.useState)(null),[m,g]=(0,Q.useState)(!0),[_,v]=(0,Q.useState)(null),[y,b]=(0,Q.useState)(null),[x,S]=(0,Q.useState)(null);Me(x);let{saveWithOcc:C,conflictDialog:w}=pt(),T=e.customFields&&e.customFields.length>0;(0,Q.useEffect)(()=>{T&&(p(e.initialData||e.initialValues||{}),g(!1))},[T,e.initialData,e.initialValues]),(0,Q.useEffect)(()=>{T?l({name:e.objectName,fields:{}}):e.objectName&&t?(async()=>{try{if(!t)throw Error(`DataSource is required when using ObjectQL schema fetching (inline fields not provided)`);let n=await t.getObjectSchema(e.objectName);if(!n)throw Error(`No schema found for object "${e.objectName}"`);l(n)}catch(e){v(e),g(!1)}})():T||g(!1)},[e.objectName,t,T]),(0,Q.useEffect)(()=>{c&&!T&&(async()=>{if(!e.recordId||e.mode===`create`){p(e.initialData||e.initialValues||{}),g(!1);return}if(!T){if(!t){v(Error(`DataSource is required for fetching record data (inline data not provided)`)),g(!1);return}g(!0);try{let n=await t.findOne(e.objectName,e.recordId);p(n)}catch(e){console.error(`Failed to fetch record:`,e),v(e)}finally{g(!1)}}})()},[e.objectName,e.recordId,e.mode,e.initialValues,e.initialData,t,c,T]);let E=(0,Q.useCallback)(e=>e,[]);(0,Q.useEffect)(()=>{if(T&&e.customFields){d(e.customFields.map(E)),g(!1);return}if(!c)return;let r=[],i=h(c,o?.getObjectApiOperations?.(e.objectName)),a=!(e.mode===`edit`?i.edit:e.mode!==`create`||i.create),s=e.fields||Object.keys(c.fields||{});(Array.isArray(s)?s:Object.keys(s)).forEach(t=>{let i=typeof t==`string`?t:t.name;if(!i)return;let o=c.fields?.[i];if(!o&&!T)return;let s=e.customFields?.find(e=>e.name===i);if(s)r.push(E(s));else if(o){let s={name:i,label:n(e.objectName,i,o.label||t),type:U(o.type,{multiple:o.multiple}),required:Ie(o,Fe(e)),disabled:e.readOnly||e.mode===`view`||o.readonly||a,placeholder:o.placeholder,description:o.help||o.description,validation:he(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`)&&(s.options=o.options||[],s.multiple=o.multiple),(o.type===`number`||o.type===`currency`||o.type===`percent`)&&(s.inputType=`number`,s.min=o.min,s.max=o.max,s.step=o.precision?10**-o.precision:void 0),o.type===`date`&&(s.inputType=`date`),o.type===`datetime`&&(s.inputType=`datetime-local`),(o.type===`text`||o.type===`textarea`||o.type===`markdown`||o.type===`html`)&&(s.maxLength=o.maxLength??o.max_length,s.minLength=o.minLength??o.min_length),(o.type===`file`||o.type===`image`)&&(s.inputType=`file`,s.multiple=o.multiple,s.accept=o.accept?o.accept.join(`,`):void 0,o.max_size)){let e=`Max size: ${ge(o.max_size)}`;s.description=s.description?`${s.description} (${e})`:e}o.type===`email`&&(s.inputType=`email`),o.type===`phone`&&(s.inputType=`tel`),o.type===`url`&&(s.inputType=`url`),o.type===`password`&&(s.inputType=`password`),o.type===`time`&&(s.inputType=`time`),(o.type===`formula`||o.type===`summary`||o.type===`auto_number`)&&(s.disabled=!0),o.visible_on&&(s.visibleOn=o.visible_on),r.push(s)}}),d(r),!T&&e.recordId&&e.mode!==`create`&&t||g(!1)},[c,e.fields,e.customFields,e.readOnly,e.mode,e.objectName,T,e.recordId,t,o]);let D=(0,Q.useCallback)(async(n,r)=>{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&&T)return e.onSuccess&&await e.onSuccess(n),n;let i=Ot(n,T?null:c);if(Fe(e)&&(i=Be(i,T?null:c)),o?.isLoaded&&i&&typeof i==`object`){let t={};for(let n of Object.keys(i))o.checkField(e.objectName,n,`write`)&&(t[n]=i[n]);i=t}try{let n;if(e.submitHandler)n=await e.submitHandler(i);else if(!t)throw vt();else if(e.mode===`create`)n=await t.create(e.objectName,i);else if(e.mode===`edit`&&e.recordId){let r=await C({dataSource:t,objectName:e.objectName,recordId:e.recordId,payload:i,baseRecord:f});if(r.status===`cancelled`)return;n=r.result}else throw Error(`Invalid form mode or missing record ID`);if(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,Ae(i,n));if(!r.ok){Z.error(r.refusal),b({message:e.successMessage||(e.mode===`create`?`Created`:`Saved`),refusal:r.refusal});break}S({url:r.url,delayMs:t.delayMs??0});break}case`continue`:break;default:{let n=t.kind===`thank-you`&&t.message?t.message:e.successMessage||(e.mode===`create`?`Created`:`Saved`);Z.success(n),b({title:t.kind===`thank-you`?t.title:void 0,message:n});break}}}else if(!e.submitHandler){let t=De(e.navigateOnSuccess,n);if(t)return S({url:t,delayMs:0}),n;e.navigateOnSuccess?(console.warn("[ObjectForm] `navigateOnSuccess` was declared but produced no destination:",e.navigateOnSuccess),Z.success(e.successMessage||(e.mode===`create`?`Created`:`Saved`),{description:xt})):Z.success(e.successMessage||(e.mode===`create`?`Created`:`Saved`))}return n}catch(t){throw console.error(`Failed to submit form:`,t),e.onError&&e.onError(t),t}},[e,t,T,o,c,C,f]),k=(0,Q.useCallback)(()=>{e.onCancel&&e.onCancel()},[e]),A=Fe(e),M={...Q.useMemo(()=>A?Le(c,{currentUserId:o.userId}):{},[c,A,o.userId]),...f},N=e.mode===`edit`&&e.recordId&&f&&typeof f==`object`?f:void 0,P=Q.useMemo(()=>{let t=rt(u,c);return e.mode===`create`&&(t=it(t,c)),t},[u,c,e.mode]),F=Q.useMemo(()=>e.sections?.length?null:dn(P,c?.fieldGroups),[e.sections,P,c]),I=e.sections?.length?e.sections:F,[L,ee]=(0,Q.useState)({});if(_)return(0,$.jsxs)(`div`,{className:`p-3 sm:p-4 border border-red-300 bg-red-50 rounded-md`,children:[(0,$.jsx)(`h3`,{className:`text-red-800 font-semibold`,children:`Error loading form`}),(0,$.jsx)(`p`,{className:`text-red-600 text-sm mt-1`,children:_.message})]});if(m)return(0,$.jsxs)(`div`,{className:`p-4 sm:p-8 text-center`,children:[(0,$.jsx)(`div`,{className:`inline-block animate-spin rounded-full h-8 w-8 border-b-2 border-gray-900`}),(0,$.jsx)(`p`,{className:`mt-2 text-sm text-gray-600`,children:`Loading form...`})]});if(y){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:y.title??`Thanks!`}),y.message&&(0,$.jsx)(`p`,{className:`mt-2 text-sm text-muted-foreground`,children:y.message})]});return y.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:y.refusal})]}):e}let te=e.layout===`vertical`||e.layout===`horizontal`?e.layout:`vertical`;if(I?.length&&(!e.formType||e.formType===`simple`)){let t=F?P:u,n=e=>typeof e==`number`&&e>0?Math.min(Math.floor(e),4):void 0,r=I.map(e=>n(e.columns)).filter(e=>e!=null),a=I.reduce((e,t)=>e+(Array.isArray(t.fields)?t.fields.length:0),0),o=n(e.columns)??(r.length?Math.max(...r):Qe(a)),c=[];I.forEach((r,a)=>{let l=new Map(r.fields.map(e=>[typeof e==`string`?e:e.field??e.name,e])),u=Array.from(l.keys()),d=s(t.filter(e=>u.includes(e.name))).map(e=>{let t=l.get(e.name);if(!t||typeof t!=`object`)return e;let n=t,r={...e};return n.visibleOn!=null&&(r.visibleOn=n.visibleOn),n.colSpan!=null&&(r.colSpan=n.colSpan),n.span!=null&&(r.span=n.span),r});if(d.length===0)return;let f=r.name||r.label||String(a),p=r.name?i(e.objectName,r.name,r.label||r.name):r.label,m=L[f]??r.collapsed??!1;p&&c.push({name:`__section_${f}`,label:p,type:`section-divider`,visibleWhen:r.visibleWhen,fields:d.map(e=>e.name),colSpan:4,collapsible:r.collapsible,collapsed:m,onToggle:r.collapsible?()=>ee(e=>({...e,[f]:!m})):void 0});let h=n(r.columns),g=o>1?tt(d,o,h):d;p&&m?c.push(...g.map(e=>({...e,hidden:!0}))):c.push(...g)});let l=c,d=ot(o);return(0,$.jsxs)(`div`,{className:`w-full @container`,children:[(0,$.jsx)(O,{schema:{type:`form`,objectName:e.objectName,fields:l,layout:te,columns:o,...d?{fieldContainerClass:d}:{},defaultValues:M,previousValues:N,showSubmit:e.showSubmit!==!1&&e.mode!==`view`,showCancel:e.showCancel!==!1,submitLabel:e.submitText||(e.mode===`create`?`Create`:`Update`),cancelLabel:e.cancelText,onSubmit:D,onCancel:k}}),w]})}let R=e.sections?.length,z=s(u),B=R?{fields:z,columns:e.columns}:ct(z,c,e.columns,e.mode),V=e.mobile,H=V?.fullscreenLongText?B.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}}):B.fields,ne=V?.stepper,re=V?.stepperMinFields??8,W=Math.max(1,V?.stepperFieldsPerStep??1);if(!e.formType&&!R&&H.length>=2&&(ne===!0||ne===`auto`&&a&&H.length>=re)){let n=H,r=[];for(let e=0;e<n.length;e+=W){let t=n.slice(e,e+W);r.push({name:`step-${Math.floor(e/W)+1}`,label:t[0]?.label||t[0]?.name||`Step ${Math.floor(e/W)+1}`,fields:t})}return(0,$.jsx)(wt,{schema:{...e,formType:`wizard`,sections:r,showStepIndicator:!0},dataSource:t,className:e.className})}let ie={type:`form`,objectName:e.objectName,fields:H,layout:te,columns:B.columns,submitLabel:e.submitText||(e.mode===`create`?`Create`:`Update`),cancelLabel:e.cancelText,showSubmit:e.showSubmit!==!1&&e.mode!==`view`,showCancel:e.showCancel!==!1,resetOnSubmit:e.showReset||e.submitBehavior?.kind===`continue`||!e.submitBehavior&&e.resetOnSuccess&&e.mode===`create`,defaultValues:M,previousValues:N,onSubmit:D,onCancel:k,className:e.className,mobileStickyActions:!!V?.stickyActions};return(0,$.jsxs)(`div`,{className:V?.stickyActions?`w-full pb-20 md:pb-0`:`w-full`,"data-mobile-form":V?`true`:void 0,children:[(0,$.jsx)(O,{schema:ie}),w]})},bn=`https://a.invalid/`,xn=`https://b.invalid/`;function Sn(e){try{return new URL(e,bn).origin===`https://a.invalid`&&new URL(e,xn).origin===`https://b.invalid`}catch{return!1}}function Cn(e){let{navigate:t}=y(),n=(0,Q.useRef)(t);(0,Q.useEffect)(()=>{n.current=t},[t]),(0,Q.useEffect)(()=>{if(!e)return;let t=setTimeout(()=>{let t=Sn(e.url)?n.current:void 0;if(t){t(e.url);return}window.location.href=e.url},e.delayMs);return()=>clearTimeout(t)},[e])}var wn=1e3;function Tn(e){return e?Math.max(0,Math.ceil(e.delayMs/1e3)):null}function En(e){let[t,n]=(0,Q.useState)(e),[r,i]=(0,Q.useState)(()=>Tn(e));return e!==t&&(n(e),i(Tn(e))),(0,Q.useEffect)(()=>{if(!e)return;let t=setInterval(()=>{i(e=>e===null||e<=1?(clearInterval(t),0):e-1)},wn);return()=>clearInterval(t)},[e]),r}var Dn={text:200,email:254,url:2048,phone:32,textarea:5e3,markdown:5e3,html:5e3},On=`_company_website_2`,kn=1500;function An(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 jn(e){return e&&e.map(e=>{let t=Dn[String(e.type||``).toLowerCase()];return!t||(e.maxLength??e.max_length)?e:{...e,maxLength:t}})}var Mn=({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]),Cn(m);let b=En(m),x=e.honeypot===!1?null:e.honeypot||On,S=e.minFillTime??kn,C=(0,Q.useMemo)(()=>jn(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(An(n,e.allowedRedirectHosts)){let t=e.thankYouPage?.redirectDelay??3e3;h({url:n,delayMs:t})}else console.warn(`[EmbeddableForm] Blocked unsafe redirect target:`,n),_(!0)}}catch(e){l(e instanceof Error?e.message:`Failed to submit form. Please try again.`)}finally{s(!1)}},[t,e,u,x,S]),D=(0,Q.useCallback)(()=>{a(!1),l(null),h(null),_(!1)},[]),O=(0,Q.useMemo)(()=>{let t={};return e.branding?.backgroundColor&&(t.backgroundColor=e.branding.backgroundColor),t},[e.branding]);if(i){let t=e.thankYouPage,n=e.texts??{},i=m&&b!==null?(n.redirecting??`Redirecting in {{seconds}} seconds…`).replace(`{{seconds}}`,String(b)):null;return(0,$.jsx)(`div`,{className:`min-h-screen flex items-center justify-center p-4 bg-gradient-to-b from-muted/40 via-background to-background ${r||``}`,style:O,children:(0,$.jsxs)(`div`,{className:`max-w-md w-full bg-card border rounded-xl shadow-sm p-8 text-center space-y-4`,children:[(0,$.jsx)(`div`,{className:`mx-auto inline-flex h-14 w-14 items-center justify-center rounded-full bg-emerald-50 text-emerald-600 dark:bg-emerald-500/10 dark:text-emerald-400`,children:(0,$.jsx)(de,{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)(W,{variant:`outline`,size:`sm`,onClick:D,className:`mt-2`,children:n.submitAnother??`Submit Another Response`}),i&&(0,$.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:i}),g&&n.redirectBlocked&&(0,$.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:n.redirectBlocked})]})})}let k=e.texts??{},A=!!e.consent?.required,j=`${e.formId}-consent`;return(0,$.jsx)(`div`,{className:`min-h-screen flex items-center justify-center p-4 sm:p-6 bg-gradient-to-b from-muted/40 via-background to-background ${r||``}`,style:O,children:(0,$.jsxs)(`div`,{className:`max-w-2xl w-full bg-card border rounded-xl shadow-sm overflow-hidden`,children:[e.branding?.coverImage&&(0,$.jsx)(`div`,{className:`h-28 sm:h-32 w-full bg-cover bg-center`,style:{backgroundImage:`url(${JSON.stringify(e.branding.coverImage)})`},role:`presentation`}),(0,$.jsxs)(`div`,{className:`px-6 sm:px-8 pt-7 pb-5 border-b bg-muted/20`,style:e.branding?.primaryColor?{borderBottomColor:e.branding.primaryColor}:void 0,children:[e.branding?.logo&&(0,$.jsx)(`img`,{src:e.branding.logo,alt:``,className:`h-8 mb-4`}),e.title&&(0,$.jsx)(`h1`,{className:`text-2xl font-semibold tracking-tight text-foreground`,children:e.title}),e.description&&(0,$.jsx)(`p`,{className:`text-sm text-muted-foreground mt-2 leading-relaxed`,children:e.description}),(0,$.jsx)(`p`,{className:`text-[11px] text-muted-foreground/70 mt-3`,"aria-hidden":`true`,children:k.requiredHint??`* Required field`})]}),(0,$.jsxs)(`div`,{className:`relative px-6 sm:px-8 py-6`,children:[c&&(0,$.jsx)(`div`,{role:`alert`,"aria-live":`assertive`,className:`mb-4 p-3 bg-destructive/10 border border-destructive/30 rounded-md text-sm text-destructive`,children:c}),(0,$.jsx)(vn,{schema:{type:`object-form`,objectName:e.objectName,mode:`create`,fields:e.fields,customFields:C,initialData:T,onSuccess:E,submitText:o?k.submitting??`Submitting...`:k.submit??`Submit`},dataSource:w}),x&&(0,$.jsxs)(`div`,{"aria-hidden":`true`,className:`absolute left-[-10000px] top-auto h-px w-px overflow-hidden`,children:[(0,$.jsx)(`label`,{htmlFor:`${e.formId}-${x}`,children:`Do not fill this field`}),(0,$.jsx)(`input`,{ref:v,id:`${e.formId}-${x}`,type:`text`,name:x,tabIndex:-1,autoComplete:`off`,defaultValue:``})]}),e.consent&&(0,$.jsxs)(`div`,{className:`mt-4`,children:[(0,$.jsxs)(`label`,{className:`flex items-start gap-2 text-sm text-foreground cursor-pointer select-none`,children:[(0,$.jsx)(`input`,{type:`checkbox`,id:j,checked:u,onChange:e=>{d(e.target.checked),e.target.checked&&p(null)},"aria-required":A||void 0,"aria-invalid":f?`true`:void 0,"aria-describedby":f?`${j}-error`:void 0,className:`mt-0.5 h-4 w-4 rounded border-input accent-primary`}),(0,$.jsxs)(`span`,{className:`leading-relaxed`,children:[e.consent.label??k.consentLabelDefault??`I agree to the privacy policy.`,A&&(0,$.jsx)(`span`,{"aria-hidden":`true`,className:`text-destructive ml-0.5`,children:`*`}),e.consent.privacyUrl&&(0,$.jsxs)($.Fragment,{children:[` `,(0,$.jsx)(`a`,{href:e.consent.privacyUrl,target:`_blank`,rel:`noopener noreferrer`,className:`underline text-primary hover:opacity-80`,children:k.consentLink??`Privacy policy`})]})]})]}),f&&(0,$.jsx)(`p`,{id:`${j}-error`,role:`alert`,className:`mt-1.5 text-xs text-destructive`,children:f})]}),o&&(0,$.jsxs)(`div`,{className:`mt-3 flex items-center gap-2 text-xs text-muted-foreground`,children:[(0,$.jsx)(ye,{className:`h-3.5 w-3.5 animate-spin`,"aria-hidden":`true`}),(0,$.jsx)(`span`,{children:k.submitting??`Submitting…`})]})]}),(0,$.jsxs)(`div`,{className:`px-6 sm:px-8 py-4 border-t bg-muted/20 flex flex-col sm:flex-row items-center justify-between gap-2`,children:[(0,$.jsxs)(`p`,{className:`inline-flex items-center gap-1.5 text-xs text-muted-foreground`,children:[(0,$.jsx)(ae,{className:`h-3 w-3`,"aria-hidden":`true`}),(0,$.jsx)(`span`,{children:k.secureNotice??`Your information is transmitted securely and only used to respond to your request.`})]}),(0,$.jsxs)(`div`,{className:`flex items-center gap-3 text-xs text-muted-foreground/80`,children:[e.privacyPolicyUrl&&(0,$.jsxs)(`a`,{href:e.privacyPolicyUrl,target:`_blank`,rel:`noopener noreferrer`,className:`inline-flex items-center gap-1 underline hover:text-foreground`,children:[(0,$.jsx)(N,{className:`h-3 w-3`,"aria-hidden":`true`}),k.consentLink??`Privacy policy`]}),(0,$.jsx)(`span`,{children:k.poweredBy??`Powered by ObjectStack`})]})]})]})})};function Nn(e){return e<60?`${Math.round(e)}s`:e<3600?`${Math.floor(e/60)}m ${Math.round(e%60)}s`:`${Math.floor(e/3600)}h ${Math.floor(e%3600/60)}m`}var Pn=({formId:e,formTitle:t,metrics:n,className:r})=>{let i=(0,Q.useMemo)(()=>{if(!n.abandonedSubmissions)return 100;let e=n.totalSubmissions+n.abandonedSubmissions;return e===0?0:Math.round(n.totalSubmissions/e*100)},[n.totalSubmissions,n.abandonedSubmissions]),a=(0,Q.useMemo)(()=>n.dailySubmissions?.length?Math.max(...n.dailySubmissions.map(e=>e.count),1):1,[n.dailySubmissions]);return(0,$.jsxs)(`div`,{className:`space-y-4 ${r||``}`,children:[(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`h2`,{className:`text-lg font-semibold text-foreground`,children:t||`Form Analytics`}),(0,$.jsxs)(`p`,{className:`text-sm text-muted-foreground`,children:[`Form ID: `,e]})]}),(0,$.jsxs)(`div`,{className:`grid grid-cols-1 sm:grid-cols-3 gap-4`,children:[(0,$.jsx)(z,{children:(0,$.jsxs)(Y,{className:`pb-2`,children:[(0,$.jsx)(P,{children:`Total Submissions`}),(0,$.jsx)(R,{className:`text-2xl`,children:n.totalSubmissions.toLocaleString()})]})}),(0,$.jsxs)(z,{children:[(0,$.jsxs)(Y,{className:`pb-2`,children:[(0,$.jsx)(P,{children:`Fill Rate`}),(0,$.jsxs)(R,{className:`text-2xl`,children:[i,`%`]})]}),(0,$.jsx)(X,{children:(0,$.jsx)(`div`,{className:`w-full bg-muted rounded-full h-2`,children:(0,$.jsx)(`div`,{className:`bg-primary rounded-full h-2 transition-all`,style:{width:`${i}%`}})})})]}),(0,$.jsx)(z,{children:(0,$.jsxs)(Y,{className:`pb-2`,children:[(0,$.jsx)(P,{children:`Avg. Completion Time`}),(0,$.jsx)(R,{className:`text-2xl`,children:n.avgCompletionTime?Nn(n.avgCompletionTime):`—`})]})})]}),n.dailySubmissions&&n.dailySubmissions.length>0&&(0,$.jsxs)(z,{children:[(0,$.jsx)(Y,{children:(0,$.jsx)(R,{className:`text-sm font-medium`,children:`Daily Submissions`})}),(0,$.jsx)(X,{children:(0,$.jsx)(`div`,{className:`flex items-end gap-1 h-32`,children:n.dailySubmissions.map((e,t)=>(0,$.jsxs)(`div`,{className:`flex-1 flex flex-col items-center gap-1`,children:[(0,$.jsx)(`div`,{className:`w-full bg-primary/80 rounded-t transition-all hover:bg-primary`,style:{height:`${e.count/a*100}%`,minHeight:e.count>0?`4px`:`0`},title:`${e.date}: ${e.count} submissions`}),(0,$.jsx)(`span`,{className:`text-[10px] text-muted-foreground truncate w-full text-center`,children:e.date.slice(-5)})]},t))})})]}),n.fieldDropOff&&n.fieldDropOff.length>0&&(0,$.jsxs)(z,{children:[(0,$.jsxs)(Y,{children:[(0,$.jsx)(R,{className:`text-sm font-medium`,children:`Field Completion Rates`}),(0,$.jsx)(P,{children:`Percentage of users who completed each field`})]}),(0,$.jsx)(X,{children:(0,$.jsx)(`div`,{className:`space-y-3`,children:n.fieldDropOff.map((e,t)=>(0,$.jsxs)(`div`,{className:`space-y-1`,children:[(0,$.jsxs)(`div`,{className:`flex justify-between text-sm`,children:[(0,$.jsx)(`span`,{className:`text-foreground`,children:e.label}),(0,$.jsxs)(`span`,{className:`text-muted-foreground`,children:[e.completionRate,`%`]})]}),(0,$.jsx)(`div`,{className:`w-full bg-muted rounded-full h-1.5`,children:(0,$.jsx)(`div`,{className:`rounded-full h-1.5 transition-all ${e.completionRate>=80?`bg-green-500`:e.completionRate>=50?`bg-yellow-500`:`bg-destructive`}`,style:{width:`${e.completionRate}%`}})})]},t))})})]})]})},Fn=({schema:e})=>{let t=m()?.dataSource,n=p(),r=e.parentObject||n?.objectName,i=e.parentId||e.recordId||n?.recordId,[a,o]=(0,Q.useState)([]),[s,d]=(0,Q.useState)([]),[f,h]=(0,Q.useState)(!0),[g,_]=(0,Q.useState)(!1),[v,y]=(0,Q.useState)(!1),[b,x]=(0,Q.useState)(null),[S,C]=(0,Q.useState)(null);(0,Q.useEffect)(()=>{let n=t;if(!n||typeof n.getObjectSchema!=`function`)return;if(!e.childObject){C(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 r=!1;return n.getObjectSchema(e.childObject).then(e=>{r||C(e??null)}).catch(()=>{r||C(null)}),()=>{r=!0}},[t,e.childObject]);let w=JSON.stringify(e.filter??null),E=JSON.stringify(e.sort??null),D=(0,Q.useMemo)(()=>c(e.filter),[w]),O=(0,Q.useMemo)(()=>T(e.sort),[E]),k=(0,Q.useCallback)(async()=>{if(!t||!i){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}h(!0);try{let n={[e.relationshipField]:i},r=(await t.find(e.childObject,{$filter:D===void 0?n:l(n,D),...O?{$orderby:O}:{},$top:e.limit??500}))?.data??[];o(r.map(e=>({...e}))),d(r.map(e=>({...e}))),y(!1)}catch(e){x(e?.message||`Failed to load line items`)}finally{h(!1)}},[t,i,e.childObject,e.relationshipField,e.limit,D,O]);(0,Q.useEffect)(()=>{k()},[k]);let A=(0,Q.useCallback)(e=>{o(e),y(!0)},[]),j=(0,Q.useCallback)(async()=>{if(!(!t||!i||!e.childObject)){_(!0),x(null);try{let n=!!(r&&e.totalField),o=n?{[e.totalField]:It(a,e.amountField||`amount`)}:{},c=Pt(r??``,i,o,[{childObject:e.childObject,relationshipField:e.relationshipField,rows:a,original:s,childSchema:S}]);n||(c=c.slice(1)),c.length&&await u(t,c),await k()}catch(e){x(e?.message||`Failed to save line items`)}finally{_(!1)}}},[t,i,a,s,e,r,k,S]),M=(0,Q.useMemo)(()=>({columns:e.columns,total_field:e.totalField?e.amountField||`amount`:void 0,min_rows:e.minRows,max_rows:e.maxRows,allow_add:!e.readonly,allow_delete:!e.readonly}),[e]);return(0,$.jsxs)(z,{className:J(`shadow-none`),children:[(0,$.jsxs)(Y,{className:`flex-row items-center justify-between gap-2 pb-2`,children:[(0,$.jsx)(R,{className:`text-sm font-medium`,children:e.title||`Line Items`}),!e.readonly&&(0,$.jsx)(W,{type:`button`,size:`sm`,onClick:j,disabled:g||f||!v||!i,children:g?`Saving…`:`Save`})]}),(0,$.jsxs)(X,{children:[b&&(0,$.jsx)(`p`,{className:`mb-2 text-sm text-destructive`,children:b}),e.childObject?f?(0,$.jsx)(`p`,{className:`py-6 text-center text-sm text-muted-foreground`,children:`Loading…`}):i?(0,$.jsx)(K,{value:a,onChange:A,field:M,readonly:e.readonly}):(0,$.jsx)(`p`,{className:`py-6 text-center text-sm text-muted-foreground`,children:`Save the record first to add line items.`}):(0,$.jsxs)(`p`,{className:`py-6 text-center text-sm text-muted-foreground`,"data-testid":`line-items-no-child-object`,children:[`This panel has no child object configured: set`,` `,(0,$.jsx)(`code`,{className:`font-mono`,children:`childObject`}),` to the object whose rows it lists.`]})]})]})},In=f(({schema:e,dataSource:t})=>{let n=E(t);return(0,$.jsx)(A,{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:D(`object-form`,e?.objectName),children:e=>(0,$.jsx)(vn,{schema:e,dataSource:n})})});v.register(`object-form`,In,{namespace:`plugin-form`,label:`Object Form`,category:`plugin`,inputs:[{name:`objectName`,type:`string`,label:`Object Name`,required:!0},{name:`fields`,type:`array`,label:`Fields`},{name:`mode`,type:`enum`,label:`Mode`,enum:[`create`,`edit`,`view`]},{name:`formType`,type:`enum`,label:`Form Type`,enum:[`simple`,`tabbed`,`wizard`,`split`,`drawer`,`modal`]},{name:`sections`,type:`array`,label:`Sections`},{name:`title`,type:`string`,label:`Title`},{name:`description`,type:`string`,label:`Description`},{name:`layout`,type:`enum`,label:`Layout`,enum:[`vertical`,`horizontal`,`inline`,`grid`]},{name:`columns`,type:`number`,label:`Columns`},{name:`defaultTab`,type:`string`,label:`Default Tab`},{name:`tabPosition`,type:`enum`,label:`Tab Position`,enum:[`top`,`bottom`,`left`,`right`]},{name:`allowSkip`,type:`boolean`,label:`Allow Skip Steps`},{name:`showStepIndicator`,type:`boolean`,label:`Show Step Indicator`},{name:`splitDirection`,type:`enum`,label:`Split Direction`,enum:[`horizontal`,`vertical`]},{name:`splitSize`,type:`number`,label:`Split Panel Size (%)`},{name:`splitResizable`,type:`boolean`,label:`Split Resizable`},{name:`drawerSide`,type:`enum`,label:`Drawer Side`,enum:[`top`,`bottom`,`left`,`right`]},{name:`drawerWidth`,type:`string`,label:`Drawer Width`},{name:`modalSize`,type:`enum`,label:`Modal Size`,enum:[`sm`,`default`,`lg`,`xl`,`full`]},{name:`modalCloseButton`,type:`boolean`,label:`Modal Close Button`,description:`Show the modal presentation’s close button. Read at ObjectForm.tsx:361 and honoured by ModalForm.`},{name:`contentLayout`,type:`enum`,label:`Modal Content Layout`,enum:[`simple`,`tabbed`],description:"How the modal presentation lays out sections. `tabbed` needs more than one section to differ from `simple` (ModalForm.tsx:638)."},{name:`confirmOnDiscard`,type:`boolean`,label:`Confirm On Discard`,description:"Ask before discarding unsaved edits when a drawer/modal form is dismissed. Set `false` to close immediately."},{name:`recordId`,type:`string`,label:`Record Id`,description:"The record to load in `edit` / `view` mode. Leave unset for `create`."},{name:`customFields`,type:`array`,label:`Custom Fields`,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`,label:`Initial Values`,description:"Values to prefill in `create` mode."},{name:`initialData`,type:`object`,label:`Initial Data`,description:"Alternate spelling of `initialValues` that the drawer/modal presentations read FIRST (`schema.initialData || schema.initialValues`). Prefer `initialValues` in new schemas."},{name:`readOnly`,type:`boolean`,label:`Read Only`,description:"Render every field read-only, whatever `mode` says."},{name:`submitText`,type:`string`,label:`Submit Button Text`},{name:`cancelText`,type:`string`,label:`Cancel Button Text`},{name:`nextText`,type:`string`,label:`Next Button Text`,description:`Label of the next-step button (wizard).`},{name:`prevText`,type:`string`,label:`Previous Button Text`,description:`Label of the previous-step button (wizard).`},{name:`showSubmit`,type:`boolean`,label:`Show Submit Button`},{name:`showCancel`,type:`boolean`,label:`Show Cancel Button`},{name:`showReset`,type:`boolean`,label:`Show Reset Button`},{name:`submitBehavior`,type:`object`,label:`Submit Behavior`,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`,label:`Success Message`,description:"Toast shown after a successful submit. Ignored when `submitBehavior` or `navigateOnSuccess` is set."},{name:`navigateOnSuccess`,type:`string`,label:`Navigate On Success`,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`,label:`Reset On Success`,description:`Clear the form after a successful submit instead of keeping the saved values.`},{name:`mobile`,type:`object`,label:`Mobile Overrides`,description:'Phone-only presentation overrides, e.g. `{ stepper: "auto", stepperMinFields: 8, fullscreenLongText: true }`.'}]}),v.register(`form`,In,{namespace:`view`,skipFallback:!0,label:`Data Form View`,category:`view`,inputs:[{name:`objectName`,type:`string`,label:`Object Name`,required:!0},{name:`fields`,type:`array`,label:`Fields`},{name:`mode`,type:`enum`,label:`Mode`,enum:[`create`,`edit`,`view`]}]});var Ln=f(({schema:e})=>{let t=(0,Q.useContext)(g);return(0,$.jsx)(A,{schema:e,dataSource:t?.dataSource,testId:`embeddable-form`,errorTitle:`This form’s data source could not be resolved`,children:e=>(0,$.jsx)(Mn,{config:e,dataSource:t?.dataSource})})});v.register(`embeddable-form`,Ln,{namespace:`plugin-form`,label:`Embeddable Form`,category:`plugin`,inputs:[{name:`formId`,type:`string`,label:`Form ID`,required:!0},{name:`objectName`,type:`string`,label:`Object Name`,required:!0},{name:`title`,type:`string`,label:`Form Title`},{name:`description`,type:`string`,label:`Description`},{name:`fields`,type:`array`,label:`Fields`},{name:`allowMultiple`,type:`boolean`,label:`Allow Multiple Submissions`}]}),v.register(`form-analytics`,({schema:e})=>(0,$.jsx)(Pn,{formId:e.formId,formTitle:e.formTitle,metrics:e.metrics||{totalSubmissions:0}}),{namespace:`plugin-form`,label:`Form Analytics`,category:`plugin`,inputs:[{name:`formId`,type:`string`,label:`Form ID`,required:!0},{name:`formTitle`,type:`string`,label:`Form Title`},{name:`metrics`,type:`object`,label:`Submission Metrics`}]});var Rn=f(({schema:e})=>{let t=(0,Q.useContext)(g)?.dataSource??void 0;return(0,$.jsx)(A,{schema:e,dataSource:t,testId:`object-master-detail-form`,errorTitle:`This form’s data source could not be resolved`,children:e=>(0,$.jsx)(ln,{schema:e,dataSource:t})})});v.register(`object-master-detail-form`,Rn,{namespace:`plugin-form`,label:`Master-Detail Form`,category:`plugin`,inputs:[{name:`objectName`,type:`string`,label:`Parent Object`,required:!0},{name:`mode`,type:`enum`,label:`Mode`,enum:[`create`,`edit`]},{name:`sections`,type:`array`,label:`Parent Sections`},{name:`details`,type:`array`,label:`Detail Collections`,required:!0},{name:`recordId`,type:`string`,label:`Parent Record Id`,description:"The parent record to load in `edit` mode. Leave unset for `create`."},{name:`formType`,type:`enum`,label:`Parent Form Presentation`,enum:[`simple`,`tabbed`],description:`How the PARENT half of the form is presented. The detail grids below it are unaffected.`},{name:`fields`,type:`array`,label:`Parent Fields`,description:"Which parent fields to show, in order. Ignored when `sections` is given — sections carry their own field lists."},{name:`title`,type:`string`,label:`Title`},{name:`submitText`,type:`string`,label:`Submit Button Text`,description:`Label of the button that saves the parent and every detail row in one batch.`},{name:`cancelText`,type:`string`,label:`Cancel Button Text`},{name:`showSubmit`,type:`boolean`,label:`Show Submit Button`},{name:`initialValues`,type:`object`,label:`Initial Values`,description:"Values to prefill on the PARENT record in `create` mode."},{name:`initialData`,type:`object`,label:`Initial Data`,description:"Alternate spelling of `initialValues` the renderer also reads (MasterDetailForm.tsx:602). Prefer `initialValues` in new schemas."},{name:`taxRateField`,type:`string`,label:`Tax Rate Field`,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 zn={object:`childObject`,filter:!0,sort:!0,limit:`limit`},Bn=f(({schema:e})=>(0,$.jsx)(A,{schema:e,mapping:zn,testId:`record-line-items`,errorTitle:`This line-items panel’s data source could not be resolved`,children:e=>(0,$.jsx)(Fn,{schema:e})}));v.register(`line_items`,Bn,{namespace:`record`,skipFallback:!0,label:`Line Items`,category:`record`,inputs:[{name:`childObject`,type:`string`,label:`Child Object`,required:!0},{name:`relationshipField`,type:`string`,label:`Relationship Field`,required:!0},{name:`columns`,type:`array`,label:`Columns`,required:!0},{name:`totalField`,type:`string`,label:`Parent Total Field`},{name:`amountField`,type:`string`,label:`Amount Column`}]});export{ot as a,Be as c,tn as i,gn as n,Qe as o,pn as r,Xe as s,vn as t};
1
+ import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{b as t,r as n}from"./vendor-react-CsWFRkED.js";import{n as r}from"./infrastructure-B4zG1jNa.js";import{Ot as i,kt as a,nn as o,wt as s}from"./vendor-objectstack-BU0HrnMy.js";import{g as c,h as l,l as u}from"./data-adapter-1YRpH3h_.js";import{$r as d,At as f,Ft as p,Gr as m,Mt as h,Qr as g,R as _,Tt as v,c as y,ei as b,g as x,h as S,ht as C,lt as w,ni as T,nr as E,p as D,rr as O,ti as k,tr as A}from"./framework-DFE_Mws9.js";import{d as j,p as M}from"./i18n-locales-BBA090ve.js";import{$i as N,Ar as P,Cr as F,Gr as I,Hr as L,Jr as ee,Kr as te,Mr as R,Or as z,Sn as B,Sr as V,Ur as H,Vr as ne,W as U,Wr as re,Xr as W,Zr as ie,_n as G,_o as ae,b as K,bn as oe,br as se,ft as q,gc as ce,gn as le,hc as ue,ic as de,il as J,jr as Y,kr as X,mc as fe,pc as pe,qr as me,r as he,s as ge,sc as _e,vn as ve,vo as ye,vr as be,xn as xe,yi as Se,yn as Ce}from"./ui-components-CMHDBJEm.js";import{r as Z}from"./vendor-ui-utils-BFw4cGI6.js";var Q=e(t(),1),we=`https://a.invalid/`,Te=`https://b.invalid/`;function Ee(e){try{return new URL(e,we).origin===`https://a.invalid`&&new URL(e,Te).origin===`https://b.invalid`}catch{return!1}}function De(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 Ee(r)?r:null}var Oe=/\{\{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 Ae(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(Oe,(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 Me(e){let{navigate:t}=_(),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 Ne(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.`}i();function Pe(e){return e!=null&&!g(e)}function Fe(e){return e?.mode===`create`||!e?.recordId}function Ie(e,t){return!(!e?.required||t&&g(e.defaultValue))}function Le(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;Pe(a)?r[e]=a:Re(i)&&t?.currentUserId&&(r[e]=t.currentUserId)}return r}function Re(e){return!e||!a(e.defaultValue)?!1:e.type===`user`||e.type===`lookup`&&(e.reference===`sys_user`||e.reference_to===`sys_user`)}function ze(e,t,n){return{...Le(e,n),...t??{}}}function Be(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))g(n[t]?.defaultValue)&&b(i)||(r[t]=i);return r}function Ve(e,t){return typeof t==`string`&&t.trim()||typeof t==`object`&&t&&typeof t.source==`string`&&t.source.trim()?{...e,visibleOn:t}:e}var He=new Set;function Ue(e,t){if(typeof e.name!=`string`||e.name===e.field)return;let n=`${t}:${e.field}:${e.name}`;He.has(n)||(He.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.`))}function We(e,t){let n=t.objectSchema?.fields?.[e];return n?{name:e,label:t.fieldLabel(t.objectName,e,n.label||e),type:U(n.type,{multiple:n.multiple}),required:Ie(n,Fe(t)),disabled:t.readOnly||t.mode===`view`||n.readonly,placeholder:n.placeholder,description:n.help||n.description,validation:he(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 Ge(e,t){if(typeof e==`string`){let n=t.objectSchema?.fields?.[e];return Ve(We(e,t),n?.visible_on??n?.visibleOn)}let n=e;if(typeof n.field!=`string`)return Ve(n,n.visibleOn);Ue(n,t.objectName);let r=n.field,i=We(r,t);n.widget!=null&&(i.widget=n.widget),n.label!=null&&(i.label=n.label),n.placeholder!=null&&(i.placeholder=n.placeholder),n.helpText!=null&&(i.description=n.helpText),n.required!=null&&(i.required=Ie({required:n.required,defaultValue:t.objectSchema?.fields?.[r]?.defaultValue},Fe(t))),n.readonly!=null&&(i.disabled=n.readonly||i.disabled),n.immutable!=null&&(i.immutable=n.immutable),n.hidden!=null&&(i.hidden=n.hidden),n.colSpan!=null&&(i.colSpan=n.colSpan),n.span!=null&&(i.span=n.span),n.options!=null&&(i.options=n.options),n.multiple!=null&&(i.multiple=n.multiple);let a=n.type??t.objectSchema?.fields?.[r]?.type;a!=null&&(i.type=U(a,{multiple:i.multiple}));let o=n.reference??n.reference_to;return o!=null&&(i.reference=o,i.reference_to=o),n.maxLength!=null&&(i.maxLength=n.maxLength),n.minLength!=null&&(i.minLength=n.minLength),n.min!=null&&(i.min=n.min),n.max!=null&&(i.max=n.max),n.precision!=null&&(i.precision=n.precision),n.scale!=null&&(i.scale=n.scale),n.language!=null&&(i.language=n.language),Array.isArray(n.fields)&&(i.fields=n.fields),n.dependsOn!=null&&(i.dependsOn=n.dependsOn),n.keyField!=null&&(i.keyField=n.keyField),n.disclosure!=null&&(i.disclosure=n.disclosure),Ve(i,n.visibleWhen??n.visibleOn)}function Ke(e,t){return(e.fields??[]).map(e=>Ge(e,t))}var qe=new Set([`field:formula`,`field:summary`,`field:auto_number`,`field:autonumber`]),Je=new Set([`field:textarea`,`field:markdown`,`field:html`,`field:grid`,`field:richtext`,`textarea`,`markdown`,`html`,`grid`,`richtext`]),Ye=new Set([`formula`,`summary`,`auto_number`,`autonumber`]);function Xe(e){return Je.has(e)}function Ze(e){return Ye.has(e)}function Qe(e){return e<=3?1:e<=8?2:e<=15?3:4}function $e(e){return e&&e>0?Math.min(Math.floor(e),4):1}function et(e,t,n){let r=$e(t);return r<=1?1:e.span===`full`?r:e.colSpan==null?e.type&&Xe(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 tt(e,t,n){let r=$e(t);return r<=1?e:e.map(e=>{if(e.type===`section-divider`)return e;let t=et(e,r,n);return t>1?{...e,colSpan:t}:e.colSpan!=null&&e.colSpan!==1?{...e,colSpan:1}:e})}var nt=new Set([`id`,`created_at`,`createdAt`,`updated_at`,`updatedAt`,`last_modified_at`,`lastModifiedAt`,`deleted_at`,`deletedAt`,`created_by`,`createdBy`,`updated_by`,`updatedBy`,`last_modified_by`,`lastModifiedBy`,`organization_id`,`organizationId`,`org_id`,`orgId`,`tenant_id`,`tenantId`,`owner`,`owner_id`,`_version`,`_rev`]);function rt(e,t){return e.filter(e=>{if(nt.has(e.name))return!1;let n=t?.fields?.[e.name];return n?.hidden!==!0&&n?.readonly!==!0})}function it(e,t){return e.filter(e=>{if(e.type&&qe.has(e.type))return!1;let n=t?.fields?.[e.name];return!n||!Ze(n.type)})}var at={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 ot(e){return at[e&&e>0?Math.min(Math.floor(e),4):1]}function st(e){return e<=1?`default`:e===2?`xl`:`full`}function ct(e,t,n,r){let i=[...e];if(i=rt(i,t),r===`create`&&(i=it(i,t)),n!==void 0)return i=tt(i,n),{fields:i,columns:n};let a=Qe(i.length);return i=tt(i,a),{fields:i,columns:a}}var $=n(),lt=M({"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 ut(e){let t=e?.updated_at;return typeof t==`string`&&t.length>0?t:void 0}function dt(e){if(!e||typeof e!=`object`)return!1;let t=e;return t.code===`CONCURRENT_UPDATE`||t.name===`ConcurrentUpdateError`}function ft(e){if(!e)return null;let t=/\d{4}-\d{2}-\d{2}[ T]/.test(e)?e.replace(` `,`T`):e,n=new Date(t);return Number.isNaN(n.getTime())?null:n.toLocaleString()}function pt(){let{t:e}=lt(),[t,n]=Q.useState(null),r=Q.useRef(null),i=Q.useCallback(e=>{r.current?.(e),r.current=null,n(null)},[]);Q.useEffect(()=>()=>r.current?.(!1),[]);let a=Q.useCallback(async({dataSource:e,objectName:t,recordId:i,payload:a,baseRecord:o})=>{let s=ut(o);try{return{status:`saved`,result:await e.update(t,i,a,s?{ifMatch:s}:void 0)}}catch(o){if(!dt(o))throw o;let s=o.currentVersion,c=y(o);if(!await new Promise(e=>{r.current=e,n({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;return{status:`saved`,result:await e.update(t,i,a,l?{ifMatch:l}:void 0)}}},[]),o=ft(t?.currentVersion);return{saveWithOcc:a,conflictDialog:(0,$.jsx)(ne,{open:!!t,onOpenChange:e=>{e||i(!1)},children:(0,$.jsxs)(re,{children:[(0,$.jsxs)(me,{children:[(0,$.jsxs)(ee,{className:`flex items-center gap-2`,children:[(0,$.jsx)(Se,{className:`h-5 w-5 text-amber-500`,"aria-hidden":!0}),e(`form.conflictTitle`)]}),(0,$.jsxs)(I,{children:[t?.userMessage&&(0,$.jsx)(`span`,{className:`mb-2 block font-medium text-foreground`,children:t.userMessage}),e(`form.conflictMessage`),o&&(0,$.jsx)(`span`,{className:`mt-2 block text-xs text-muted-foreground`,children:e(`form.conflictLatestVersion`,{time:o})})]})]}),(0,$.jsxs)(te,{children:[(0,$.jsx)(`button`,{type:`button`,className:J(ie({variant:`outline`})),onClick:()=>i(!1),children:e(`form.keepEditing`)}),(0,$.jsx)(`button`,{type:`button`,className:J(ie({variant:`destructive`})),onClick:()=>i(!0),children:e(`form.conflictOverwrite`)})]})]})})}}function mt(e){if(typeof e!=`object`||!e||Array.isArray(e))return!1;let t=e;return typeof t.field!=`string`&&typeof t.name==`string`}function ht(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(!mt(n))return!1;t+=1}}return t>0}function gt(e){let t=e;return Array.isArray(t?.customFields)&&t.customFields.length>0?!0:ht(t?.sections)}var _t=`DataSource is required for form submission (inline mode not configured)`;function vt(){return Error(_t)}var yt=({schema:e,dataSource:t,className:n})=>{let{fieldLabel:i}=j(),{userId:a}=r(),[o,s]=(0,Q.useState)(null),[c,l]=(0,Q.useState)({}),{saveWithOcc:u,conflictDialog:d}=pt(),[f,p]=(0,Q.useState)(!0),[m,h]=(0,Q.useState)(null),g=e.defaultTab||e.sections[0]?.name||e.sections[0]?.label||`tab-0`;Q.useEffect(()=>{(async()=>{if(!t){p(!1);return}try{let n=await t.getObjectSchema(e.objectName);s(n)}catch(e){h(e)}})()},[e.objectName,t]);let _=(0,Q.useRef)(void 0);Q.useEffect(()=>{let n=!1;return(o||!t)&&(async()=>{if(e.mode===`create`||!e.recordId||!t){l(ze(o,e.initialData||e.initialValues,{currentUserId:a})),p(!1);return}_.current!==e.recordId&&p(!0);try{let r=await t.findOne(e.objectName,e.recordId);if(n)return;_.current=e.recordId,l(r||{})}catch(e){if(n)return;h(e)}finally{n||p(!1)}})(),()=>{n=!0}},[o,e.mode,e.recordId,e.initialData,e.initialValues,t,e.objectName]);let v=(0,Q.useCallback)(t=>Ke(t,{objectSchema:o,objectName:e.objectName,readOnly:e.readOnly,mode:e.mode,recordId:e.recordId,fieldLabel:i}),[o,e.readOnly,e.mode,e.recordId,e.objectName,i]),y=(0,Q.useCallback)(async n=>{if(!t&&!e.submitHandler&&gt(e))return e.onSuccess&&await e.onSuccess(n),n;try{let r,i=e.mode===`create`?Be(n,o):n;if(e.submitHandler)r=await e.submitHandler(i);else if(!t)throw vt();else if(e.mode===`create`)r=await t.create(e.objectName,i);else if(e.mode===`edit`&&e.recordId){let n=await u({dataSource:t,objectName:e.objectName,recordId:e.recordId,payload:i,baseRecord:c});if(n.status===`cancelled`)return;r=n.result}return e.onSuccess&&await e.onSuccess(r),r}catch(t){throw e.onError&&e.onError(t),t}},[e,t,u,c]),b=(0,Q.useCallback)(()=>{e.onCancel&&e.onCancel()},[e]),x=(e,t)=>e.name||e.label||`tab-${t}`;if(m)return(0,$.jsxs)(`div`,{className:`p-4 border border-red-300 bg-red-50 rounded-md`,children:[(0,$.jsx)(`h3`,{className:`text-red-800 font-semibold`,children:`Error loading form`}),(0,$.jsx)(`p`,{className:`text-red-600 text-sm mt-1`,children:m.message})]});if(f)return(0,$.jsxs)(`div`,{className:`p-8 text-center`,children:[(0,$.jsx)(`div`,{className:`inline-block animate-spin rounded-full h-8 w-8 border-b-2 border-gray-900`}),(0,$.jsx)(`p`,{className:`mt-2 text-sm text-gray-600`,children:`Loading form...`})]});let S=e=>typeof e==`number`&&e>0?Math.min(Math.floor(e),4):void 0,w=e.sections.map(e=>S(e.columns)).filter(e=>e!=null),T=S(e.columns)??(w.length?Math.max(...w):1),E=ot(T),D=e.sections.map((e,t)=>{let n=v(e);return{key:x(e,t),label:e.label||`Tab ${t+1}`,description:e.description,containerClass:e.gridClassName,visibleWhen:e.visibleWhen,fields:T>1?tt(n,T,S(e.columns)):n}}),O=[...D.length>1?[]:D.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})),...D.flatMap(e=>e.fields)];return(0,$.jsxs)(`div`,{className:J(`w-full @container`,n,e.className),children:[(0,$.jsx)(C,{schema:{type:`form`,objectName:e.objectName,fields:O,columns:T,...E?{fieldContainerClass:E}:{},layout:`vertical`,defaultValues:c,previousValues:e.mode===`edit`&&e.recordId?c:void 0,submitLabel:e.submitText||(e.mode===`create`?`Create`:`Update`),cancelLabel:e.cancelText,showSubmit:e.showSubmit!==!1&&e.mode!==`view`,showCancel:e.showCancel!==!1,onSubmit:y,onCancel:b,fieldTabs:D.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:g,fieldTabsPosition:e.tabPosition||`top`}}),d]})},bt=({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,m=e||t?(0,$.jsxs)(`div`,{className:J(`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)(pe,{className:`h-4 w-4`}):(0,$.jsx)(ue,{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,h=l?null:(0,$.jsx)(`div`,{className:J(`grid gap-4`,s||d[i]),children:a});return p?(0,$.jsxs)(z,{className:J(`form-section bg-muted/40 shadow-none`,o),children:[m&&(0,$.jsx)(Y,{className:`border-b border-border pb-3`,children:m}),h&&(0,$.jsx)(X,{className:`pt-4`,children:h})]}):(0,$.jsxs)(`div`,{className:J(`form-section`,o),children:[m,h]})},xt="The `navigateOnSuccess` destination declared for this form was refused, so the navigation did not happen.",St=M({"wizard.missingRequired":`Please complete the required fields: {{fields}}`},`wizard.missingRequired`),Ct=b,wt=({schema:e,dataSource:t,className:n})=>{let{fieldLabel:i}=j(),{userId:a}=r(),{t:o}=St(),[s,c]=(0,Q.useState)(null),[l,u]=(0,Q.useState)({}),[f,p]=(0,Q.useState)(void 0),{saveWithOcc:m,conflictDialog:h}=pt(),[g,_]=(0,Q.useState)(!0),[y,b]=(0,Q.useState)(null),[x,S]=(0,Q.useState)(0),[w,T]=(0,Q.useState)(new Set),[D,O]=(0,Q.useState)(!1),[k,M]=(0,Q.useState)(new Set),[N,P]=(0,Q.useState)(null),[F,I]=(0,Q.useState)(null);Me(F);let L=Q.useId(),[ee,te]=(0,Q.useState)(0),R=Q.useRef(!1),z=e.sections.length,B=x===0,V=x===z-1;Q.useEffect(()=>{(async()=>{if(!t){_(!1);return}try{let n=await t.getObjectSchema(e.objectName);c(n)}catch(e){b(e)}})()},[e.objectName,t]),Q.useEffect(()=>{(s||!t)&&(async()=>{if(e.mode===`create`||!e.recordId||!t){R.current||=(u(ze(s,e.initialData||e.initialValues,{currentUserId:a})),!0),_(!1);return}try{let n=await t.findOne(e.objectName,e.recordId);u(n||{}),p(n||{})}catch(e){b(e)}finally{_(!1)}})()},[s,e.mode,e.recordId,e.initialData,e.initialValues,t,e.objectName]);let H=(0,Q.useCallback)(t=>Ke(t,{objectSchema:s,objectName:e.objectName,readOnly:e.readOnly,mode:e.mode,recordId:e.recordId,fieldLabel:i}),[s,e.readOnly,e.mode,e.recordId,e.objectName,i]),ne=Fe(e),U=v(),re=(0,Q.useMemo)(()=>x>=0&&x<z?H(e.sections[x]):[],[x,z,e.sections,H]),ie=(0,Q.useCallback)(t=>{let n=new Map;return e.sections.forEach((e,r)=>{for(let i of H(e)){let e=i?.name;if(!e||i.hidden===!0)continue;let a=E({visibleWhen:i.visibleWhen,readonlyWhen:i.readonlyWhen,requiredWhen:i.requiredWhen},t,{required:!!i.required,readonly:i.readonly===!0,serverOwnedValue:d(i,ne)},void 0,U,`field '${e}'`);!(i.visibleOn==null||A(i.visibleOn,t,!0,void 0,U,{context:`visibleOn of field '${e}'`}))||!a.visible||a.readonly||!a.required||Ct(t[e])&&n.set(r,[...n.get(r)??[],i.label||e])}}),n},[e.sections,H,ne,U]),G=(0,Q.useCallback)(async n=>{let r={...l,...n};if(u(r),T(e=>new Set(e).add(x)),M(e=>{if(!e.has(x))return e;let t=new Set(e);return t.delete(x),t}),V){let n=ie(r);if(n.size>0){M(new Set(n.keys()));let e=[...n.values()].flat();Z.error(o(`wizard.missingRequired`,{fields:e.slice(0,3).join(`, `)+(e.length>3?`…`:``)})),ae(Math.min(...n.keys()));return}M(new Set),O(!0);try{if(!t&&!e.submitHandler&&gt(e))return e.onSuccess&&await e.onSuccess(r),r;let n,i=e.mode===`create`?Be(r,s):r;if(e.submitHandler)n=await e.submitHandler(i);else if(!t)throw vt();else if(e.mode===`create`)n=await t.create(e.objectName,i);else if(e.mode===`edit`&&e.recordId){let r=await m({dataSource:t,objectName:e.objectName,recordId:e.recordId,payload:i,baseRecord:l});if(r.status===`cancelled`)return;n=r.result}if(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,Ae(r,n));if(!i.ok){Z.error(i.refusal),P({message:e.successMessage||(e.mode===`create`?`Created`:`Saved`),refusal:i.refusal});break}I({url:i.url,delayMs:t.delayMs??0});break}case`continue`:u(ze(s,e.initialData||e.initialValues,{currentUserId:a})),T(new Set),S(0),te(e=>e+1);break;default:{let n=t.kind===`thank-you`&&t.message?t.message:e.successMessage||(e.mode===`create`?`Created`:`Saved`);Z.success(n),P({title:t.kind===`thank-you`?t.title:void 0,message:n});break}}}else if(!e.submitHandler){let t=De(e.navigateOnSuccess,n);if(t)return I({url:t,delayMs:0}),n;e.navigateOnSuccess?(console.warn("[WizardForm] `navigateOnSuccess` was declared but produced no destination:",e.navigateOnSuccess),Z.success(e.successMessage||(e.mode===`create`?`Created`:`Saved`),{description:xt})):Z.success(e.successMessage||(e.mode===`create`?`Created`:`Saved`)),e.resetOnSuccess&&e.mode===`create`&&(u(ze(s,e.initialData||e.initialValues,{currentUserId:a})),T(new Set),S(0),te(e=>e+1))}return n}catch(t){throw e.onError&&e.onError(t),t}finally{O(!1)}}ae(x+1)},[l,x,V,e,s,t,ie,o,m]),ae=(0,Q.useCallback)(t=>{t>=0&&t<z&&(S(t),e.onStepChange&&e.onStepChange(t))},[z,e]),K=(0,Q.useCallback)(()=>{ae(x-1)},[x,ae]),oe=(0,Q.useCallback)(()=>{e.onCancel&&e.onCancel()},[e]),se=(0,Q.useCallback)(t=>{(e.allowSkip||w.has(t)||t<=x)&&ae(t)},[e.allowSkip,w,x,ae]);if(y)return(0,$.jsxs)(`div`,{className:`p-4 border border-red-300 bg-red-50 rounded-md`,children:[(0,$.jsx)(`h3`,{className:`text-red-800 font-semibold`,children:`Error loading form`}),(0,$.jsx)(`p`,{className:`text-red-600 text-sm mt-1`,children:y.message})]});if(g)return(0,$.jsxs)(`div`,{className:`p-8 text-center`,children:[(0,$.jsx)(`div`,{className:`inline-block animate-spin rounded-full h-8 w-8 border-b-2 border-gray-900`}),(0,$.jsx)(`p`,{className:`mt-2 text-sm text-gray-600`,children:`Loading form...`})]});if(N)return(0,$.jsxs)(`div`,{className:J(`w-full space-y-4`,n,e.className),children:[(0,$.jsxs)(`div`,{className:`rounded-md border bg-card p-8 text-center`,children:[(0,$.jsx)(`h3`,{className:`text-lg font-semibold`,children:N.title??`Thanks!`}),N.message&&(0,$.jsx)(`p`,{className:`mt-2 text-sm text-muted-foreground`,children:N.message})]}),N.refusal&&(0,$.jsx)(`div`,{role:`alert`,className:`rounded-md border border-destructive/40 bg-destructive/10 p-4 text-sm text-destructive`,children:N.refusal})]});let q=e.sections[x],le=e=>typeof e==`number`&&e>0?Math.min(Math.floor(e),4):void 0,ue=le(e.columns)??le(q?.columns)??1,de=ot(ue);return(0,$.jsxs)(`div`,{className:J(`w-full @container`,n,e.className),children:[e.showStepIndicator!==!1&&(0,$.jsx)(`nav`,{"aria-label":`Progress`,className:`mb-8`,children:(0,$.jsx)(`ol`,{className:`flex items-center`,children:e.sections.map((t,n)=>{let r=n===x,i=w.has(n),a=e.allowSkip||i||n<=x,o=k.has(n);return(0,$.jsxs)(`li`,{className:J(`relative flex-1`,n!==z-1&&`pr-8 sm:pr-12`),children:[n!==z-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:J(`h-full`,i?`bg-primary`:`bg-muted`)})}),(0,$.jsxs)(`button`,{type:`button`,className:J(`group relative flex items-center`,a?`cursor-pointer`:`cursor-not-allowed`),onClick:()=>se(n),disabled:!a,"data-testid":`wizard-step:${t.name||n}`,"data-error":o||void 0,children:[(0,$.jsx)(`span`,{className:J(`flex h-6 w-6 sm:h-8 sm:w-8 items-center justify-center rounded-full text-xs sm:text-sm font-medium transition-colors`,o&&`border-2 border-destructive bg-background text-destructive`,!o&&i&&`bg-primary text-primary-foreground`,!o&&r&&!i&&`border-2 border-primary bg-background text-primary`,!o&&!r&&!i&&`border-2 border-muted bg-background text-muted-foreground`),children:o?(0,$.jsx)(_e,{className:`h-3 w-3 sm:h-4 sm:w-4`,"aria-hidden":!0}):i?(0,$.jsx)(ce,{className:`h-3 w-3 sm:h-4 sm:w-4`}):n+1}),(0,$.jsx)(`span`,{className:`ml-2 sm:ml-3 text-xs sm:text-sm font-medium hidden sm:block`,children:(0,$.jsx)(`span`,{className:J(o?`text-destructive`:r?`text-foreground`:`text-muted-foreground`),children:t.label||`Step ${n+1}`})})]})]},n)})})}),(0,$.jsx)(`div`,{className:`min-h-[200px]`,children:q&&(0,$.jsx)(bt,{label:q.label,description:q.description,columns:1,className:q.className,gridClassName:q.gridClassName,children:re.length>0?(0,$.jsx)(C,{schema:{type:`form`,objectName:e.objectName,id:L,fields:ue>1?tt(re,ue,le(q.columns)):re,columns:ue,...de?{fieldContainerClass:de}:{},layout:`vertical`,defaultValues:l,previousValues:e.mode===`edit`?f:void 0,showSubmit:!1,showCancel:!1,onSubmit:G}},ee):(0,$.jsx)(`form`,{id:L,onSubmit:e=>{e.preventDefault(),G({})},children:(0,$.jsx)(`div`,{className:`text-center py-8 text-muted-foreground`,children:`No fields configured for this step`})})})}),(0,$.jsxs)(`div`,{className:`flex items-center justify-between mt-6 pt-4 border-t`,children:[(0,$.jsx)(`div`,{children:e.showCancel!==!1&&(0,$.jsx)(W,{variant:`ghost`,onClick:oe,children:e.cancelText||`Cancel`})}),(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,$.jsxs)(`span`,{className:`text-sm text-muted-foreground mr-2`,children:[`Step `,x+1,` of `,z]}),!B&&(0,$.jsxs)(W,{variant:`outline`,onClick:K,children:[(0,$.jsx)(fe,{className:`h-4 w-4 mr-1`}),e.prevText||`Back`]}),V?(0,$.jsxs)(W,{type:`submit`,form:L,disabled:D||e.mode===`view`,children:[D&&(0,$.jsx)(ye,{className:`mr-2 h-4 w-4 animate-spin`,"aria-hidden":!0}),D?`Submitting...`:e.submitText||(e.mode===`create`?`Create`:`Update`)]}):(0,$.jsxs)(W,{type:`submit`,form:L,children:[e.nextText||`Next`,(0,$.jsx)(pe,{className:`h-4 w-4 ml-1`})]})]})]}),h]})},Tt=({schema:e,dataSource:t,className:n})=>{let{fieldLabel:i}=j(),{userId:a}=r(),[o,s]=(0,Q.useState)(null),[c,l]=(0,Q.useState)({}),{saveWithOcc:u,conflictDialog:d}=pt(),[f,p]=(0,Q.useState)(!0),[m,h]=(0,Q.useState)(null);(0,Q.useEffect)(()=>{(async()=>{if(!t){p(!1);return}try{let n=await t.getObjectSchema(e.objectName);s(n)}catch(e){h(e),p(!1)}})()},[e.objectName,t]);let g=(0,Q.useRef)(void 0);(0,Q.useEffect)(()=>{let n=!1;return(o||!t)&&(async()=>{if(e.mode===`create`||!e.recordId){l(ze(o,e.initialData||e.initialValues,{currentUserId:a})),p(!1);return}if(!t){l(e.initialData||e.initialValues||{}),p(!1);return}g.current!==e.recordId&&p(!0);try{let r=await t.findOne(e.objectName,e.recordId);if(n)return;g.current=e.recordId,l(r||{})}catch(e){if(n)return;h(e)}finally{n||p(!1)}})(),()=>{n=!0}},[o,e.mode,e.recordId,e.initialData,e.initialValues,t,e.objectName]);let _=(0,Q.useCallback)(t=>Ke(t,{objectSchema:o,objectName:e.objectName,readOnly:e.readOnly,mode:e.mode,recordId:e.recordId,fieldLabel:i}),[o,e.readOnly,e.mode,e.recordId,e.objectName,i]),v=(0,Q.useCallback)(async n=>{if(!t&&!e.submitHandler&&gt(e))return e.onSuccess&&await e.onSuccess(n),n;try{let r,i=e.mode===`create`?Be(n,o):n;if(e.submitHandler)r=await e.submitHandler(i);else if(!t)throw vt();else if(e.mode===`create`)r=await t.create(e.objectName,i);else if(e.mode===`edit`&&e.recordId){let n=await u({dataSource:t,objectName:e.objectName,recordId:e.recordId,payload:i,baseRecord:c});if(n.status===`cancelled`)return;r=n.result}return e.onSuccess&&await e.onSuccess(r),r}catch(t){throw e.onError&&e.onError(t),t}},[e,t,u,c]),y=(0,Q.useCallback)(()=>{e.onCancel&&e.onCancel()},[e]),b=(e,t)=>e.pane===`primary`||e.pane===`secondary`?e.pane:t===0?`primary`:`secondary`,x=(0,Q.useMemo)(()=>e.sections.filter((e,t)=>b(e,t)===`primary`),[e.sections]),S=(0,Q.useMemo)(()=>e.sections.filter((e,t)=>b(e,t)===`secondary`),[e.sections]),w=e.splitDirection||`horizontal`,T=e.splitSize||50;if(m)return(0,$.jsxs)(`div`,{className:`p-4 border border-red-300 bg-red-50 rounded-md`,children:[(0,$.jsx)(`h3`,{className:`text-red-800 font-semibold`,children:`Error loading form`}),(0,$.jsx)(`p`,{className:`text-red-600 text-sm mt-1`,children:m.message})]});if(f)return(0,$.jsxs)(`div`,{className:`p-8 text-center`,children:[(0,$.jsx)(`div`,{className:`inline-block animate-spin rounded-full h-8 w-8 border-b-2 border-gray-900`}),(0,$.jsx)(`p`,{className:`mt-2 text-sm text-gray-600`,children:`Loading form...`})]});let E=e=>typeof e==`number`&&e>0?Math.min(Math.floor(e),4):void 0,D=e.sections.map(e=>E(e.columns)).filter(e=>e!=null),O=E(e.columns)??(D.length?Math.max(...D):1),k=ot(O),A=(e,t)=>{let n=[];return e.forEach((e,r)=>{let i=_(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(...O>1?tt(i,O,E(e.columns)):i))}),n},M=[{key:`primary`,sections:x,defaultSize:T},{key:`secondary`,sections:S,defaultSize:100-T}].map(e=>({...e,fields:A(e.sections,e.key),containerClass:e.sections.length===1?e.sections[0].gridClassName:void 0})).filter(e=>e.fields.length>0);return(0,$.jsxs)(`div`,{className:J(`w-full @container`,n,e.className),children:[(0,$.jsx)(C,{schema:{type:`form`,objectName:e.objectName,fields:M.flatMap(e=>e.fields),columns:O,...k?{fieldContainerClass:k}:{},layout:`vertical`,defaultValues:c,previousValues:e.mode===`edit`&&e.recordId?c:void 0,submitLabel:e.submitText||(e.mode===`create`?`Create`:`Update`),cancelLabel:e.cancelText,showSubmit:e.showSubmit!==!1&&e.mode!==`view`,showCancel:e.showCancel!==!1,onSubmit:v,onCancel:y,fieldPanes:M.map(e=>({key:e.key,fields:e.fields.map(e=>e.name),defaultSize:e.defaultSize,...e.containerClass?{containerClass:e.containerClass}:{}})),fieldPanesOrientation:w,fieldPanesResizable:e.splitResizable!==!1}}),d]})},Et=new Set([`id`,`_id`,`created_at`,`updated_at`,`createdAt`,`updatedAt`,`organization_id`,`organizationId`]),Dt=new Set([`formula`,`summary`,`rollup`,`lookup_value`,`auto_number`,`autonumber`,`computed`]);function Ot(e,t){if(!e||typeof e!=`object`)return e;let n={},r=t?.fields;for(let[t,i]of Object.entries(e))if(!Et.has(t)){if(r){let e=r[t];if(!e)continue;let n=String(e.type||``).toLowerCase();if(Dt.has(n)||e.computed===!0||e.formula||e.readOnly===!0||e.readonly===!0)continue}n[t]=i}return n}var kt=e=>e==null?void 0:e.id??e._id??e.recordId,At=(e,t)=>t?Ot(e,t):e,jt=new Set([`id`,`_id`,`recordId`]);function Mt(e,t){return!e||Object.entries(e).every(([e,n])=>e===t||jt.has(e)?!0:n==null||n===``)}function Nt(e,t,n){let r=[{object:e,action:`create`,data:t}];for(let e of n)for(let t of e.rows)Mt(t,e.relationshipField)||r.push({object:e.childObject,action:`create`,data:{...At(t,e.childSchema),[e.relationshipField]:{$ref:0}}});return r}function Pt(e,t,n,r){let i=[{object:e,action:`update`,id:t,data:n}];for(let e of r){let n=(e.rows||[]).map(n=>({...n,[e.relationshipField]:t})),{toCreate:r,toUpdate:a,toDelete:o}=Ft(e.original||[],n);for(let t of r){if(Mt(t,e.relationshipField))continue;let{id:n,_id:r,recordId:a,...o}=t;i.push({object:e.childObject,action:`create`,data:At(o,e.childSchema)})}for(let t of a)i.push({object:e.childObject,action:`update`,id:kt(t),data:At(t,e.childSchema)});for(let t of o)i.push({object:e.childObject,action:`delete`,id:t})}return i}function Ft(e,t){let n=new Set(t.map(kt).filter(Boolean));return{toCreate:t.filter(e=>!kt(e)),toUpdate:t.filter(e=>kt(e)),toDelete:(e||[]).map(kt).filter(e=>!!e&&!n.has(e))}}function It(e,t){return Array.isArray(e)?e.reduce((e,n)=>{let r=Number(n?.[t]);return e+(Number.isFinite(r)?r:0)},0):0}var Lt=new Set([`id`,`_id`,`recordId`,`created_at`,`updated_at`,`created_by`,`updated_by`,`createdAt`,`updatedAt`,`createdBy`,`updatedBy`,`organization_id`,`tenant_id`,`space`,`owner`]),Rt=new Set([`position`,`sort_order`,`sequence`,`line_no`,`line_number`,`sort`]),zt=new Set([`formula`,`summary`,`rollup`,`autonumber`,`auto_number`,`json`,`object`,`grid`,`table`,`location`,`vector`,`html`,`markdown`,`richtext`]);function Bt(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 Vt=new Set([`image`,`avatar`]);function Ht(e,t){e.multiple==null&&t?.multiple&&(e.multiple=!0),e.accept??(Array.isArray(t?.accept)&&t.accept.length>0?e.accept=t.accept:Vt.has(t?.type)&&(e.accept=[`image/*`]))}function Ut(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 Wt(e,t){let n=e?.fields;if(!n||typeof n!=`object`)return;let r;for(let[e,i]of Object.entries(n)){let n=i;if(n?.reference===t){if(n?.type===`master_detail`)return e;n?.type===`lookup`&&!r&&(r=e)}}return r}var Gt=[`name`,`title`,`subject`,`label`,`full_name`,`display_name`,`code`],Kt={select:0,currency:1,number:1,lookup:2,date:3,datetime:3,time:3,text:4};function qt(e){return(e.type?Kt[e.type]:void 0)??5}function Jt(e,t){if(t<=0||e.length<=t)return e;let n=new Set,r=e.find(e=>Gt.includes(e.name))??e[0];r&&n.add(r.name);for(let t of e)t.required&&n.add(t.name);let i=e.map((e,t)=>({c:e,i:t})).filter(({c:e})=>!n.has(e.name)).sort((e,t)=>qt(e.c)-qt(t.c)||e.i-t.i);for(let{c:e}of i){if(n.size>=t)break;n.add(e.name)}return e.map(e=>n.has(e.name)?e:{...e,defaultHidden:!0})}function Yt(e,t={}){let n=e?.fields;if(!n||typeof n!=`object`)return[];let r=new Set([...t.exclude??[],...t.relationshipField?[t.relationshipField]:[]]),i=[];for(let[e,t]of Object.entries(n)){let n=t;if(Lt.has(e)||r.has(e)||Rt.has(e)||n?.system||n?.readonly||n?.hidden||zt.has(n?.type))continue;let a={name:e,label:n?.label||e,type:Bt(n?.type),required:!!n?.required},o=Ut(n);a.type===`select`&&o&&(a.options=o),a.type===`lookup`&&(a.reference=n?.reference,a.displayField=n?.display_field||n?.reference_field),a.type===`file`&&Ht(a,n),n?.readonlyWhen&&(a.readonlyWhen=n.readonlyWhen),n?.requiredWhen&&(a.requiredWhen=n.requiredWhen);let s=typeof n?.expression==`string`?n.expression:n?.expression?.source;s&&typeof s==`string`&&(a.computed=!0,a.expr=s,a.required=!1,typeof n?.scale==`number`&&(a.scale=n.scale)),i.push(a)}return Jt(i,t.maxColumns??6)}function Xt(e,t){let n=e??[],r=t?.fields;return!n.length||!r||typeof r!=`object`?n:n.map(e=>{if(e.type)return e;let t=r[e.name];if(!t)return e;let n=Bt(t?.type),i={...e,type:n};i.label??=t?.label||e.name,i.required??=!!t?.required;let a=Ut(t);n===`select`&&a&&!i.options&&(i.options=a),n===`lookup`&&(i.reference??=t?.reference,i.displayField??=t?.display_field||t?.reference_field),n===`file`&&Ht(i,t),i.readonlyWhen==null&&t?.readonlyWhen&&(i.readonlyWhen=t.readonlyWhen),i.requiredWhen==null&&t?.requiredWhen&&(i.requiredWhen=t.requiredWhen);let o=typeof t?.expression==`string`?t.expression:t?.expression?.source;return!i.computed&&o&&typeof o==`string`&&(i.computed=!0,i.expr=o,i.required=!1,typeof t?.scale==`number`&&(i.scale=t.scale)),i})}var Zt=new Set([`formula`,`summary`,`rollup`,`autonumber`,`auto_number`]);function Qt(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;Lt.has(e)||r.has(e)||Rt.has(e)||n?.system||n?.hidden||Zt.has(n?.type)||i.push(e)}return i}var $t=new Set([`textarea`,`richtext`,`html`,`markdown`,`rich-text`,`json`,`location`,`address`]),en=new Set([`file`,`image`,`avatar`]);function tn(e,t,n={}){if(t===`grid`||t===`form`)return t;let r=e?.fields??{},i=Qt(e,{relationshipField:n.relationshipField});return i.some(e=>$t.has(r[e]?.type))||i.filter(e=>en.has(r[e]?.type)).length>=2||i.length>8?`form`:`grid`}var nn=[`amount`,`total`,`subtotal`,`line_total`,`line_amount`,`net_amount`];function rn(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=>nn.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 an(e,t,n,r={}){let i=r.relationshipField||Wt(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?Xt(r.columns,t):Yt(t,{relationshipField:i}),o=r.amountField||rn(a);return{childObject:e,relationshipField:i,columns:a,formFields:Qt(t,{relationshipField:i}),mode:tn(t,r.inlineEdit??(t?.fields)?.[i]?.inlineEdit,{relationshipField:i}),amountField:o,sortField:Object.keys(t?.fields??{}).find(e=>Rt.has(e))}}function on(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 sn(e){if(!e)return{};let t={};return e.querySelectorAll(`[name]`).forEach(e=>{let n=e.getAttribute(`name`);if(n){if(e.tagName===`INPUT`){let r=e;if(r.type===`checkbox`){t[n]=r.checked;return}if(r.type===`radio`){r.checked&&(t[n]=r.value);return}if(r.type===`number`||r.type===`range`){if(r.value===``){t[n]=null;return}let e=Number(r.value);t[n]=Number.isFinite(e)?e:r.value;return}t[n]=r.value;return}t[n]=e.value}}),t}var cn=({entries:e,rowState:t,setRows:n,formHostRef:r,taxRateField:i,formKey:a,onRowExpand:o,onAddViaForm:s,parentObjectName:c})=>{let[l,u]=(0,Q.useState)({}),d=(0,Q.useRef)(``);(0,Q.useEffect)(()=>{let e=r.current;if(!e)return;let t=()=>{let t=sn(e),n;try{n=JSON.stringify(t)}catch{n=String(Math.random())}n!==d.current&&(d.current=n,u(t))};t();let n=()=>t();e.addEventListener(`input`,n),e.addEventListener(`change`,n);let i=[120,360,800].map(e=>setTimeout(t,e));return()=>{e.removeEventListener(`input`,n),e.removeEventListener(`change`,n),i.forEach(clearTimeout)}},[r,a,e.length]);let f=l[i],p=f===void 0?null:Number.isFinite(Number(f))?Number(f):0,m=e.reduce((e,n)=>e+It(t[n.id]?.rows??[],n.config.amountField||`amount`),0),h=p!==null&&e.some(e=>!!e.config.amountField),g=p??0,_=g/100*m,v=m+_,y=e=>`¥${e.toLocaleString(void 0,{minimumFractionDigits:2,maximumFractionDigits:2})}`;return(0,$.jsxs)($.Fragment,{children:[e.map(e=>{let r=e.config;return(0,$.jsxs)(`section`,{className:`space-y-2`,children:[(0,$.jsx)(`h3`,{className:`text-sm font-medium text-foreground`,children:r.title||`Line Items`}),r.childObject?e.status===`failed`?(0,$.jsxs)(`p`,{className:`py-4 text-sm text-muted-foreground`,role:`status`,"data-testid":`md-detail-schema-unavailable`,children:[`Could not load the schema of`,` `,(0,$.jsx)(`code`,{className:`font-mono`,children:r.childObject}),`, so this collection has no columns to show. Check that the object exists and is readable, then reload.`]}):e.status===`underivable`?(0,$.jsxs)(`p`,{className:`py-4 text-sm text-muted-foreground`,"data-testid":`md-detail-no-relationship-field`,children:[`Could not work out how `,(0,$.jsx)(`code`,{className:`font-mono`,children:r.childObject}),` links to `,(0,$.jsx)(`code`,{className:`font-mono`,children:c}),`: no lookup or master_detail field on it references the parent. Set`,` `,(0,$.jsx)(`code`,{className:`font-mono`,children:`relationshipField`}),` on this collection to the field that holds the parent record.`]}):r.columns?.length?(0,$.jsx)(K,{value:t[e.id]?.rows??[],onChange:t=>n(e.id,t),contextRecord:l,...r.inlineMode===`form`||(r.formFields?.length??0)>(r.columns?.length??0)?{onRowExpand:t=>o(e.id,t)}:{},displayMode:r.inlineMode===`form`?`list`:`grid`,...r.inlineMode===`form`?{onAdd:()=>s(e.id)}:{},field:{columns:r.columns,total_field:h?void 0:r.amountField||(r.totalField?`amount`:void 0),sort_field:r.sortField,min_rows:r.minRows,max_rows:r.maxRows,add_label:r.inlineMode===`form`?r.addLabel||`Add`:r.addLabel}}):(0,$.jsx)(`p`,{className:`py-4 text-sm text-muted-foreground`,children:`Loading columns…`}):(0,$.jsxs)(`p`,{className:`py-4 text-sm text-muted-foreground`,"data-testid":`md-detail-no-child-object`,children:[`This collection has no child object configured: set`,` `,(0,$.jsx)(`code`,{className:`font-mono`,children:`childObject`}),` to the object whose rows it lists.`]})]},e.id)}),h&&(0,$.jsx)(`div`,{className:`flex justify-end`,children:(0,$.jsxs)(`dl`,{className:`w-64 space-y-1.5 text-sm`,"data-testid":`md-totals`,children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,$.jsx)(`dt`,{className:`text-muted-foreground`,children:`Subtotal`}),(0,$.jsx)(`dd`,{className:`tabular-nums`,"data-testid":`md-subtotal`,children:y(m)})]}),(0,$.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,$.jsxs)(`dt`,{className:`text-muted-foreground`,children:[`Tax (`,g,`%)`]}),(0,$.jsx)(`dd`,{className:`tabular-nums`,"data-testid":`md-tax`,children:y(_)})]}),(0,$.jsxs)(`div`,{className:`flex items-center justify-between border-t border-border pt-1.5 text-base font-semibold`,children:[(0,$.jsx)(`dt`,{children:`Total`}),(0,$.jsx)(`dd`,{className:`tabular-nums`,"data-testid":`md-grand-total`,children:y(v)})]})]})})]})},ln=({schema:e,dataSource:t,className:n})=>{let r=e.details||[],i=e.mode===`edit`&&!!e.recordId,a=r.some(e=>!e.relationshipField||!e.columns?.length||e.columns.some(e=>!e.type)),o=(0,Q.useMemo)(()=>on(r),[e.details]),s=(0,Q.useMemo)(()=>r.map((e,t)=>({id:o[t],config:e,status:a?`pending`:`ready`})),[e.details,o,a]),[c,l]=(0,Q.useState)(null),d=c??s;(0,Q.useEffect)(()=>{if(!a){l(s);return}if(!t||typeof t.getObjectSchema!=`function`)return;let n=!1;return(async()=>{let r=await Promise.all(s.map(async n=>{let r=n.config,i=r.columns?.length?r.columns.every(e=>!!e.type):!1;if(r.relationshipField&&i)return{...n,status:`ready`};if(!r.childObject)return console.warn(`[MasterDetailForm] a detail collection has no childObject — refusing to fetch its schema. Set childObject to the child object the collection lists.`),{...n,status:`declined`};let a;try{a=await t.getObjectSchema(r.childObject)}catch(e){return console.warn(`[MasterDetailForm] could not load the schema of child object "${r.childObject}" — its columns cannot be derived, so the collection renders a refusal placeholder instead of a permanent "Loading columns…".`,e),{...n,status:`failed`}}try{if(r.relationshipField&&r.columns?.length)return{...n,config:{...r,columns:Xt(r.columns,a)},status:`ready`};let t=an(r.childObject,a,e.objectName,{relationshipField:r.relationshipField,columns:r.columns,amountField:r.amountField});return{...n,status:`ready`,config:{...r,relationshipField:t.relationshipField,columns:t.columns,formFields:r.formFields??t.formFields,inlineMode:r.inlineMode??t.mode,amountField:r.amountField??t.amountField,sortField:r.sortField??t.sortField}}}catch(e){return console.warn(`[MasterDetailForm] loaded the schema of child object "${r.childObject}" but could not derive its detail configuration; the collection cannot render its columns. Set relationshipField (and columns) explicitly on the detail entry.`,e),{...n,status:`underivable`}}}));n||l(r)})(),()=>{n=!0}},[t,e.objectName,e.details]);let[f,p]=(0,Q.useState)({}),m=(0,Q.useRef)(f);m.current=f;let h=(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);h.current=r})(),()=>{n=!0}},[t,e.objectName,e.details]);let[g,_]=(0,Q.useState)(0),[v,y]=(0,Q.useState)(!1),b=(0,Q.useRef)(!1),x=(0,Q.useRef)(null),S=`form-outcome:${Q.useId()}`,C=(0,Q.useCallback)(()=>{b.current=!1,y(!1),x.current&&=(clearTimeout(x.current),null)},[]);(0,Q.useEffect)(()=>{let n=!1;if(!(!i||!t))return(async()=>{let r=await Promise.all(d.map(async n=>{let r=n.config;if(!r.relationshipField)return[n.id,{rows:[],original:[]}];try{let i=(await t.find(r.childObject,{$filter:{[r.relationshipField]:e.recordId},$top:500}))?.data??[];return[n.id,{rows:i.map(e=>({...e})),original:i.map(e=>({...e}))}]}catch{return[n.id,{rows:[],original:[]}]}}));n||p(Object.fromEntries(r))})(),()=>{n=!0}},[i,t,e.recordId,c]);let w=(0,Q.useCallback)((e,t)=>{p(n=>({...n,[e]:{rows:t,original:n[e]?.original??[]}}))},[]),T=e.taxRateField||`tax_rate`,[E,D]=(0,Q.useState)(null),O=E?f[E.entryId]?.rows?.[E.rowIdx]:void 0,k=E?d.find(e=>e.id===E.entryId)?.config:void 0,A=(0,Q.useCallback)((e,t,n)=>{p(r=>{let i=r[e]??{rows:[],original:[]};return{...r,[e]:{...i,rows:i.rows.map((e,r)=>r===t?{...e,...n}:e)}}})},[]),j=(0,Q.useCallback)(e=>{p(t=>{let n=t[e]??{rows:[],original:[]},r=[...n.rows,{}];return D({entryId:e,rowIdx:r.length-1,isNew:!0}),{...t,[e]:{...n,rows:r}}})},[]),M=(0,Q.useCallback)(()=>{D(e=>(e?.isNew&&p(t=>{let n=t[e.entryId];return n?{...t,[e.entryId]:{...n,rows:n.rows.filter((t,n)=>n!==e.rowIdx)}}:t}),null))},[]),N=(0,Q.useCallback)(async t=>{C(),e.onSuccess||Z.success(i?e.title?`${e.title} saved`:`Saved`:`Created`,{id:S}),i||(p({}),_(e=>e+1)),await e.onSuccess?.(t)},[i,e.onSuccess,e.title,d.length,C,S]),P=(0,Q.useCallback)(t=>{C(),Z.error(t?.message||`Save failed`,{id:S}),e.onError?.(t)},[e,C,S]),F=(0,Q.useCallback)(async n=>{if(!t)throw Error(`MasterDetailForm: dataSource is required`);let r={...n};d.forEach(e=>{let t=e.config;t.totalField&&(r[t.totalField]=It(m.current[e.id]?.rows??[],t.amountField||`amount`))});let a=i?Pt(e.objectName,String(e.recordId),r,d.filter(e=>e.config.relationshipField).map(e=>({childObject:e.config.childObject,relationshipField:e.config.relationshipField,rows:m.current[e.id]?.rows??[],original:m.current[e.id]?.original??[],childSchema:h.current[e.config.childObject]}))):Nt(e.objectName,r,d.filter(e=>e.config.relationshipField).map(e=>({childObject:e.config.childObject,relationshipField:e.config.relationshipField,rows:m.current[e.id]?.rows??[],childSchema:h.current[e.config.childObject]})));return(await u(t,a))?.results?.[0]??{...r,id:e.recordId}},[t,d,e.objectName,e.recordId,i]),I=(0,Q.useMemo)(()=>({type:`object-form`,objectName:e.objectName,mode:e.mode??`create`,recordId:e.recordId,initialValues:e.initialValues,initialData:e.initialData,formType:e.formType,sections:e.sections,fields:e.fields,title:e.title,showSubmit:!1,showCancel:!1,submitHandler:F,onSuccess:N,onError:P}),[e,F,N,P]),L=(0,Q.useRef)(null),ee=e.submitText??(i?`Save`:`Create`),te=(0,Q.useCallback)(()=>{b.current||L.current?.querySelector(`form`)&&(b.current=!0,y(!0),Z.dismiss(S),setTimeout(()=>{(L.current?.querySelector(`form`))?.requestSubmit()},0),x.current=setTimeout(()=>C(),1500))},[C,S]);return(0,Q.useEffect)(()=>()=>{x.current&&clearTimeout(x.current)},[]),(0,$.jsxs)(`div`,{className:J(`space-y-6`,n,e.className),children:[(0,$.jsx)(`div`,{ref:L,children:(0,$.jsx)(vn,{schema:I,dataSource:t},g)}),(0,$.jsx)(cn,{entries:d,rowState:f,setRows:w,formHostRef:L,taxRateField:T,formKey:g,onRowExpand:(e,t)=>D({entryId:e,rowIdx:t}),onAddViaForm:j,parentObjectName:e.objectName}),E&&k&&(0,$.jsxs)(z,{className:`border-primary/40 shadow-none ring-1 ring-primary/10`,"data-testid":`md-row-form`,children:[(0,$.jsxs)(Y,{className:`pb-2 flex flex-row items-center justify-between gap-2 space-y-0`,children:[(0,$.jsxs)(R,{className:`text-sm font-medium`,children:[k.title||`Line item`,` — row `,E.rowIdx+1]}),(0,$.jsx)(W,{type:`button`,variant:`ghost`,size:`sm`,className:`h-7 text-xs text-muted-foreground`,onClick:M,children:`Close`})]}),(0,$.jsx)(X,{children:(0,$.jsx)(vn,{schema:{type:`object-form`,objectName:k.childObject,mode:`edit`,initialData:O??{},...k.formFields?.length?{fields:k.formFields}:{},submitText:`Apply`,submitHandler:async e=>e,onSuccess:e=>{A(E.entryId,E.rowIdx,e),D(null)},onCancel:M},dataSource:t},`row-${E.entryId}-${E.rowIdx}`)})]}),e.showSubmit!==!1&&(0,$.jsxs)(`div`,{className:`flex items-center justify-end gap-2 border-t border-border pt-4`,children:[e.onCancel&&(0,$.jsx)(W,{type:`button`,variant:`outline`,onClick:e.onCancel,disabled:v,"data-testid":`md-form-cancel`,children:e.cancelText??`Cancel`}),(0,$.jsx)(W,{type:`button`,onClick:te,disabled:v||a&&!c,"data-testid":`md-form-submit`,children:v?`Saving…`:ee})]})]})};function un(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)continue;let i=e.objectSchema?.fields?.[t];i&&n.push({...We(t,e),group:i.group})}return n}i();function dn(e,t){let n=s({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)),a=n.map(e=>({...e.key===void 0?{}:{name:e.key},...e.key===void 0?{}:{label:e.label??e.key},fields:[...e.fields],...e.collapse===`none`?{}:{collapsible:!0},...e.collapse===`collapsed`?{collapsed:!0}:{}}));if(i.length>0){let e=a[a.length-1];e&&e.name===void 0?e.fields=[...e.fields??[],...i]:a.push({fields:i})}return a}var fn=M({"form.discardTitle":`Discard changes?`,"form.discardMessage":`You have unsaved changes. If you close this form now, your edits will be lost.`,"form.dialogDescriptionFallback":`Complete the form fields, then submit or cancel.`,"form.keepEditing":`Keep editing`,"form.discard":`Discard`},`form.discardTitle`),pn=({schema:e,dataSource:t,className:n})=>{let{fieldLabel:i,sectionLabel:a}=j(),{userId:o}=r(),{t:s}=fn(),c=w(),[l,u]=(0,Q.useState)(null),[d,f]=(0,Q.useState)([]),[p,m]=(0,Q.useState)({}),[h,g]=(0,Q.useState)(!0),[_,v]=(0,Q.useState)(null),[y,b]=(0,Q.useState)(!1),[x,S]=(0,Q.useState)(!1),{saveWithOcc:T,conflictDialog:E}=pt(),[D,O]=(0,Q.useState)(!1),k=(0,Q.useRef)(!1),A=e.confirmOnDiscard!==!1,M=e.open!==!1,N=e.drawerSide||`right`,P=(0,Q.useId)(),[F,R]=(0,Q.useState)(()=>{let t={};return e.sections?.forEach((e,n)=>{let r=e.name||String(n);e.collapsed&&(t[r]=!0)}),t});(0,Q.useEffect)(()=>{(async()=>{if(!t){g(!1);return}try{let n=await t.getObjectSchema(e.objectName);u(n)}catch(e){v(e),g(!1)}})()},[e.objectName,t]);let z=(0,Q.useRef)(void 0);(0,Q.useEffect)(()=>{let n=!1;return(l||!t)&&(async()=>{if(e.mode===`create`||!e.recordId){m(ze(l,e.initialData||e.initialValues,{currentUserId:o})),g(!1);return}if(!t){m(e.initialData||e.initialValues||{}),g(!1);return}z.current!==e.recordId&&(g(!0),b(!1));try{let r=await t.findOne(e.objectName,e.recordId);if(n)return;z.current=e.recordId,m(r||{})}catch(e){if(n)return;v(e)}finally{n||g(!1)}})(),()=>{n=!0}},[l,e.mode,e.recordId,e.initialData,e.initialValues,t,e.objectName]);let V=(0,Q.useCallback)(t=>Ke(t,{objectSchema:l,objectName:e.objectName,readOnly:e.readOnly,mode:e.mode,recordId:e.recordId,fieldLabel:i}),[l,e.readOnly,e.mode,e.recordId,e.objectName,i]);(0,Q.useEffect)(()=>{if(!(!l&&t)){if(e.customFields?.length){f(e.customFields),g(!1);return}if(e.sections?.length){g(!1);return}l&&(f(un({fields:e.fields,objectSchema:l,objectName:e.objectName,readOnly:e.readOnly,mode:e.mode,recordId:e.recordId,fieldLabel:i})),g(!1))}},[l,e.fields,e.customFields,e.sections,e.readOnly,e.mode,t]);let U=(0,Q.useMemo)(()=>{if(e.sections?.length||e.customFields?.length)return null;let t=rt(d,l);e.mode===`create`&&(t=it(t,l));let n=dn(t,l?.fieldGroups);if(!n)return null;let r=e.columns&&e.columns>0?Math.min(Math.floor(e.columns),4):Qe(t.length);return n.map(e=>({...e,columns:r}))},[e.sections,e.customFields,e.columns,e.mode,d,l]),ie=(0,Q.useCallback)(async n=>{O(!0);try{if(!t&&!e.submitHandler&&gt(e))return e.onSuccess&&await e.onSuccess(n),e.onOpenChange?.(!1),n;let r,i=Ot(n,l),a=e.mode===`create`?Be(i,l):i;if(e.submitHandler)r=await e.submitHandler(a);else if(!t)throw vt();else if(e.mode===`create`)r=await t.create(e.objectName,a);else if(e.mode===`edit`&&e.recordId){let n=await T({dataSource:t,objectName:e.objectName,recordId:e.recordId,payload:i,baseRecord:p});if(n.status===`cancelled`)return;r=n.result}return e.onSuccess&&await e.onSuccess(r),e.onOpenChange?.(!1),r}catch(t){throw e.onError&&e.onError(t),t}finally{O(!1)}},[e,t,l,T,p]),G=(0,Q.useCallback)(()=>{S(!1),k.current&&(k.current=!1,e.onCancel?.()),e.onOpenChange?.(!1)},[e]),ae=(0,Q.useCallback)(e=>{k.current=e,A&&y?S(!0):G()},[A,y,G]);(0,Q.useEffect)(()=>{if(!M||!y||!A)return;let e=e=>{e.preventDefault(),e.returnValue=``};return window.addEventListener(`beforeunload`,e),()=>window.removeEventListener(`beforeunload`,e)},[M,y,A]);let K=(0,Q.useCallback)(()=>{k.current=!0,G()},[G]),se=(0,Q.useMemo)(()=>{if(e.drawerWidth)return N===`left`||N===`right`?{width:e.drawerWidth,maxWidth:e.drawerWidth}:{height:e.drawerWidth,maxHeight:e.drawerWidth}},[e.drawerWidth,N]),q=e.layout===`vertical`||e.layout===`horizontal`?e.layout:`vertical`,ce=e.showSubmit!==!1&&e.mode!==`view`,le=e.showCancel!==!1,ue=e.submitText||(e.mode===`create`?`Create`:`Update`),de=e.cancelText||`Cancel`,Y={type:`form`,objectName:e.objectName,layout:q,defaultValues:p,previousValues:e.mode===`edit`&&e.recordId?p:void 0,submitLabel:ue,cancelLabel:de,showSubmit:ce,showCancel:le,onSubmit:ie,onCancel:K,onDirtyChange:b,showActions:!1,id:P},X=()=>{if(_)return(0,$.jsxs)(`div`,{className:`p-4 border border-red-300 bg-red-50 rounded-md`,children:[(0,$.jsx)(`h3`,{className:`text-red-800 font-semibold`,children:`Error loading form`}),(0,$.jsx)(`p`,{className:`text-red-600 text-sm mt-1`,children:_.message})]});if(h)return(0,$.jsxs)(`div`,{className:`p-8 text-center`,children:[(0,$.jsx)(`div`,{className:`inline-block animate-spin rounded-full h-8 w-8 border-b-2 border-gray-900`}),(0,$.jsx)(`p`,{className:`mt-2 text-sm text-gray-600`,children:`Loading form...`})]});if(e.sections?.length){let t=[];return e.sections.forEach((e,n)=>{let r=e.name||String(n),i=F[r]??e.collapsed??!1,a=V(e);t.push({name:`__section_${r}`,label:e.label||``,type:`section-divider`,visibleWhen:e.visibleWhen,fields:a.map(e=>e.name),colSpan:4,collapsible:e.collapsible,collapsed:i,onToggle:e.collapsible?()=>R(e=>({...e,[r]:!i})):void 0}),i?t.push(...a.map(e=>({...e,hidden:!0}))):t.push(...a)}),(0,$.jsx)(C,{schema:{...Y,fields:t}})}if(U?.length){let t=Number(U[0]?.columns)||1,n=[];U.forEach((r,i)=>{let o=V(r);if(!o.length)return;let s=r.name||String(i),c=r.collapsible?F[s]??r.collapsed??!1:!1,l=r.name?a(e.objectName,r.name,r.label||r.name):r.label;l&&n.push({name:`__section_${s}`,label:l,type:`section-divider`,visibleWhen:r.visibleWhen,fields:o.map(e=>e.name),colSpan:4,collapsible:r.collapsible,collapsed:c,onToggle:r.collapsible?()=>R(e=>({...e,[s]:!c})):void 0});let u=t>1?tt(o,t):o;n.push(...c?u.map(e=>({...e,hidden:!0})):u)});let r=at[t];return(0,$.jsx)(C,{schema:{...Y,fields:n,columns:t,...r?{fieldContainerClass:r}:{}}})}let t=ct(d,l,e.columns,e.mode),n=at[t.columns||1];return(0,$.jsx)(C,{schema:{...Y,fields:t.fields,columns:t.columns,...n?{fieldContainerClass:n}:{}}})},fe=e.subforms,pe=fe?.length&&e.mode!==`view`?(0,$.jsx)(ln,{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:de,details:fe,onSuccess:async t=>{await e.onSuccess?.(t),e.onOpenChange?.(!1)},onError:e.onError,onCancel:()=>e.onOpenChange?.(!1)},dataSource:t}):X();return c?(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})]}),pe]}):(0,$.jsx)(ve,{open:M,onOpenChange:t=>{if(t){e.onOpenChange?.(!0);return}ae(!1)},children:(0,$.jsxs)(Ce,{side:N,className:J(`overflow-y-auto`,n,e.className),style:se,children:[(e.title||e.description)&&(0,$.jsxs)(xe,{children:[e.title&&(0,$.jsx)(B,{children:e.title}),e.description?(0,$.jsx)(oe,{children:e.description}):(0,$.jsx)(oe,{className:`sr-only`,children:s(`form.dialogDescriptionFallback`)})]}),(0,$.jsx)(`div`,{className:`@container py-4`,children:pe}),!_&&!h&&!(fe?.length&&e.mode!==`view`)&&(ce||le)&&(0,$.jsx)(`div`,{className:`shrink-0 border-t px-4 py-3 bg-background`,"data-testid":`drawer-form-footer`,children:(0,$.jsxs)(`div`,{className:`flex flex-col sm:flex-row gap-2 sm:justify-end`,children:[le&&(0,$.jsx)(W,{type:`button`,variant:`outline`,onClick:K,disabled:D,className:`w-full sm:w-auto`,children:de}),ce&&(0,$.jsxs)(W,{type:`submit`,form:P,disabled:D,className:`w-full sm:w-auto`,children:[D&&(0,$.jsx)(ye,{className:`mr-2 h-4 w-4 animate-spin`}),ue]})]})}),(0,$.jsx)(ne,{open:x,onOpenChange:S,children:(0,$.jsxs)(re,{children:[(0,$.jsxs)(me,{children:[(0,$.jsx)(ee,{children:s(`form.discardTitle`)}),(0,$.jsx)(I,{children:s(`form.discardMessage`)})]}),(0,$.jsxs)(te,{children:[(0,$.jsx)(H,{onClick:()=>{k.current=!1},children:s(`form.keepEditing`)}),(0,$.jsx)(L,{onClick:G,children:s(`form.discard`)})]})]})}),E]})})},mn=M({"form.discardTitle":`Discard changes?`,"form.discardMessage":`You have unsaved changes. If you close this form now, your edits will be lost.`,"form.dialogDescriptionFallback":`Complete the form fields, then submit or cancel.`,"form.keepEditing":`Keep editing`,"form.discard":`Discard`},`form.discardTitle`),hn={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`},gn=({schema:e,dataSource:t,className:n})=>{let{fieldLabel:i,sectionLabel:a}=j(),{t:o}=mn(),s=w(),c=r(),l=(0,Q.useCallback)(t=>{if(!c?.isLoaded)return t;let n=[];for(let r of t){if(!r?.name){n.push(r);continue}c.checkField(e.objectName,r.name,`read`)&&(!c.checkField(e.objectName,r.name,`write`)&&e.mode!==`view`?n.push({...r,readOnly:!0,disabled:!0}):n.push(r))}return n},[c,e.objectName,e.mode]),[u,d]=(0,Q.useState)(null),[f,p]=(0,Q.useState)([]),[m,h]=(0,Q.useState)({}),[g,_]=(0,Q.useState)(!0),[v,y]=(0,Q.useState)(null),[b,x]=(0,Q.useState)(!1),[S,T]=(0,Q.useState)(!1),[E,D]=(0,Q.useState)(!1),{saveWithOcc:O,conflictDialog:k}=pt(),A=(0,Q.useRef)(!1),M=e.confirmOnDiscard!==!1,N=e.open!==!1,P=(0,Q.useId)(),R=(0,Q.useMemo)(()=>{if(e.sections?.length||e.customFields?.length)return null;let t=rt(f,u);e.mode===`create`&&(t=it(t,u));let n=dn(t,u?.fieldGroups);if(!n)return null;let r=e.columns&&e.columns>0?Math.min(Math.floor(e.columns),4):Qe(t.length);return n.map(e=>({...e,columns:r}))},[e.sections,e.customFields,e.columns,e.mode,f,u]),z=e.sections?.length?e.sections:R??void 0,B=(0,Q.useMemo)(()=>z?.length||e.customFields?.length?null:ct(f,u,e.columns,e.mode),[f,u,e.columns,e.mode,z,e.customFields]),U=hn[(0,Q.useMemo)(()=>{if(e.modalSize)return e.modalSize;if(B?.columns&&B.columns>1)return st(B.columns);if(z?.length){let e=Math.max(...z.map(e=>Number(e.columns)||1));if(e>1)return st(e)}return`default`},[e.modalSize,B,z])]||hn.default;(0,Q.useEffect)(()=>{(async()=>{if(!t){_(!1);return}try{let n=await t.getObjectSchema(e.objectName);d(n)}catch(e){y(e),_(!1)}})()},[e.objectName,t]);let ie=(0,Q.useRef)(void 0);(0,Q.useEffect)(()=>{let n=!1;return(u||!t)&&(async()=>{if(e.mode===`create`||!e.recordId){h(ze(u,e.initialData||e.initialValues,{currentUserId:c.userId})),_(!1);return}if(!t){h(e.initialData||e.initialValues||{}),_(!1);return}ie.current!==e.recordId&&(_(!0),T(!1));try{let r=await t.findOne(e.objectName,e.recordId);if(n)return;ie.current=e.recordId,h(r||{})}catch(e){if(n)return;y(e)}finally{n||_(!1)}})(),()=>{n=!0}},[u,e.mode,e.recordId,e.initialData,e.initialValues,t,e.objectName]);let G=(0,Q.useCallback)(t=>Ke(t,{objectSchema:u,objectName:e.objectName,readOnly:e.readOnly,mode:e.mode,recordId:e.recordId,fieldLabel:i}),[u,e.readOnly,e.mode,e.recordId,e.objectName,i]);(0,Q.useEffect)(()=>{if(!(!u&&t)){if(e.customFields?.length){p(e.customFields),_(!1);return}if(e.sections?.length){_(!1);return}u&&(p(un({fields:e.fields,objectSchema:u,objectName:e.objectName,readOnly:e.readOnly,mode:e.mode,recordId:e.recordId,fieldLabel:i})),_(!1))}},[u,e.fields,e.customFields,e.sections,e.readOnly,e.mode,t]);let ae=(0,Q.useCallback)(async n=>{x(!0);try{if(!t&&!e.submitHandler&&gt(e))return e.onSuccess&&await e.onSuccess(n),e.onOpenChange?.(!1),n;let r,i=Ot(n,u);if(c?.isLoaded){let t={};for(let n of Object.keys(i))c.checkField(e.objectName,n,`write`)&&(t[n]=i[n]);i=t}let a=e.mode===`create`?Be(i,u):i;if(e.submitHandler)r=await e.submitHandler(a);else if(!t)throw vt();else if(e.mode===`create`)r=await t.create(e.objectName,a);else if(e.mode===`edit`&&e.recordId){let n=await O({dataSource:t,objectName:e.objectName,recordId:e.recordId,payload:i,baseRecord:m});if(n.status===`cancelled`)return;r=n.result}return e.onSuccess&&await e.onSuccess(r),e.onOpenChange?.(!1),r}catch(t){throw e.onError&&e.onError(t),t}finally{x(!1)}},[e,t,u,c,O,m]),K=(0,Q.useCallback)(()=>{D(!1),A.current&&(A.current=!1,e.onCancel?.()),e.onOpenChange?.(!1)},[e]),oe=(0,Q.useCallback)(e=>{A.current=e,M&&S?D(!0):K()},[M,S,K]);(0,Q.useEffect)(()=>{if(!N||!S||!M)return;let e=e=>{e.preventDefault(),e.returnValue=``};return window.addEventListener(`beforeunload`,e),()=>window.removeEventListener(`beforeunload`,e)},[N,S,M]);let ce=(0,Q.useCallback)(()=>{A.current=!0,K()},[K]),ue=e.layout===`vertical`||e.layout===`horizontal`?e.layout:`vertical`,de=e.showSubmit!==!1&&e.mode!==`view`,Y=e.showCancel!==!1,X=e.submitText||(e.mode===`create`?`Create`:`Update`),fe=e.cancelText||`Cancel`,pe={type:`form`,objectName:e.objectName,layout:ue,defaultValues:m,previousValues:e.mode===`edit`&&e.recordId?m:void 0,submitLabel:X,cancelLabel:fe,showSubmit:de,showCancel:Y,onSubmit:ae,onCancel:ce,onDirtyChange:T,showActions:!1,id:P},he=()=>{if(v)return(0,$.jsxs)(`div`,{className:`p-4 border border-red-300 bg-red-50 rounded-md`,children:[(0,$.jsx)(`h3`,{className:`text-red-800 font-semibold`,children:`Error loading form`}),(0,$.jsx)(`p`,{className:`text-red-600 text-sm mt-1`,children:v.message})]});if(g)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)(le,{className:`h-4 w-24`}),(0,$.jsx)(le,{className:`h-10 w-full`})]},e))});if(e.sections?.length){let t=e.sections,n=(e,t)=>e.name||e.label||String(t),r=t=>t.name?a(e.objectName,t.name,t.label||t.name):t.label,i=e=>typeof e==`number`&&e>0?Math.min(Math.floor(e),4):void 0,o=t.map(e=>i(e.columns)).filter(e=>e!=null),s=i(e.columns)??(o.length?Math.max(...o):1),c=at[s],u=t.map((e,t)=>{let a=l(G(e));return{key:n(e,t),title:r(e),description:e.description,visibleWhen:e.visibleWhen,className:e.className,gridClassName:e.gridClassName,fields:s>1?tt(a,s,i(e.columns)):a}}).filter(e=>e.fields.length>0),d={...pe,columns:s,...c?{fieldContainerClass:c}:{}};if(e.contentLayout===`tabbed`&&u.length>1)return(0,$.jsx)(C,{schema:{...d,fields:u.flatMap(e=>e.fields),fieldTabs:u.map((e,t)=>({key:e.key,label:e.title||`Section ${t+1}`,description:e.description,fields:e.fields.map(e=>e.name),containerClass:e.gridClassName,visibleWhen:e.visibleWhen}))}});let f=[];return u.forEach(e=>{(e.title||e.description)&&f.push({name:`__section_${e.key}`,label:e.title,description:e.description,type:`section-divider`,visibleWhen:e.visibleWhen,fields:e.fields.map(e=>e.name),colSpan:4,className:e.className}),f.push(...e.fields)}),(0,$.jsx)(C,{schema:{...d,fields:f}})}if(R?.length){let t=Number(R[0]?.columns)||1,n=[];R.forEach((r,i)=>{let o=l(G(r));if(!o.length)return;let s=r.name?a(e.objectName,r.name,r.label||r.name):r.label;s&&n.push({name:`__section_${r.name||i}`,label:s,type:`section-divider`,visibleWhen:r.visibleWhen,fields:o.map(e=>e.name)}),n.push(...t>1?tt(o,t):o)});let r=at[t];return(0,$.jsx)(C,{schema:{...pe,fields:n,columns:t,...r?{fieldContainerClass:r}:{}}})}let t=B??ct(f,u,e.columns,e.mode),n=at[t.columns||1];return(0,$.jsx)(C,{schema:{...pe,fields:l(t.fields),columns:t.columns,...n?{fieldContainerClass:n}:{}}})},ge=e.subforms;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})]}),he()]});if(ge?.length&&e.mode!==`view`)return(0,$.jsx)(be,{open:N,onOpenChange:e.onOpenChange,children:(0,$.jsxs)(q,{className:J(U,`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)(V,{className:`shrink-0 px-4 pt-4 sm:px-6 sm:pt-6 pb-2 border-b`,children:[e.title&&(0,$.jsx)(F,{children:e.title}),e.description?(0,$.jsx)(se,{children:e.description}):(0,$.jsx)(se,{className:`sr-only`,children:`Enter the record and its line items, then save.`})]}),(0,$.jsx)(`div`,{className:`@container flex-1 overflow-y-auto px-4 sm:px-6 py-4`,children:(0,$.jsx)(ln,{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:X,cancelText:fe,details:ge,onSuccess:async t=>{await e.onSuccess?.(t),e.onOpenChange?.(!1)},onError:e.onError,onCancel:()=>e.onOpenChange?.(!1)},dataSource:t})})]})});let _e=!g&&!v&&(de||Y);return(0,$.jsx)(be,{open:N,onOpenChange:t=>{if(t){e.onOpenChange?.(!0);return}oe(!1)},children:(0,$.jsxs)(q,{className:J(U,`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)(V,{className:`shrink-0 px-4 pt-4 sm:px-6 sm:pt-6 pb-2 border-b`,children:[e.title&&(0,$.jsx)(F,{children:e.title}),e.description?(0,$.jsx)(se,{children:e.description}):(0,$.jsx)(se,{className:`sr-only`,children:o(`form.dialogDescriptionFallback`)})]}),(0,$.jsx)(`div`,{className:`@container flex-1 overflow-y-auto px-4 sm:px-6 py-4`,children:he()}),_e&&(0,$.jsx)(`div`,{className:`shrink-0 border-t px-4 sm:px-6 py-3 bg-background`,"data-testid":`modal-form-footer`,children:(0,$.jsxs)(`div`,{className:`flex flex-col sm:flex-row gap-2 sm:justify-end`,children:[Y&&(0,$.jsx)(W,{type:`button`,variant:`outline`,onClick:ce,disabled:b,className:`w-full sm:w-auto`,children:fe}),de&&(0,$.jsxs)(W,{type:`submit`,form:P,disabled:b,className:`w-full sm:w-auto`,children:[b&&(0,$.jsx)(ye,{className:`mr-2 h-4 w-4 animate-spin`}),X]})]})}),(0,$.jsx)(ne,{open:E,onOpenChange:D,children:(0,$.jsxs)(re,{children:[(0,$.jsxs)(me,{children:[(0,$.jsx)(ee,{children:o(`form.discardTitle`)}),(0,$.jsx)(I,{children:o(`form.discardMessage`)})]}),(0,$.jsxs)(te,{children:[(0,$.jsx)(H,{onClick:()=>{A.current=!1},children:o(`form.keepEditing`)}),(0,$.jsx)(L,{onClick:K,children:o(`form.discard`)})]})]})}),k]})})};function _n(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 vn=({schema:e,dataSource:t})=>{let n=r(),i=(0,Q.useMemo)(()=>{let t=_n(e),r=t.groups,i=!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;if(!n?.isLoaded)return i;let a=e=>e?.name?n.checkField(i.objectName,e.name,`read`)?!n.checkField(i.objectName,e.name,`write`)&&i.mode!==`view`?{...e,readOnly:!0,disabled:!0}:e:null:e,o=e=>Array.isArray(e)?e.map(a).filter(Boolean):e;return{...i,fields:o(i.fields),sections:i.sections?.map(e=>({...e,fields:o(e.fields)}))}},[e,n]),{sectionLabel:a}=j(),o=e=>e?.name?a(i.objectName,e.name,e.label||e.name):e?.label,s=!!i.subforms?.length&&i.mode!==`view`&&i.formType!==`drawer`&&i.formType!==`modal`,c=!s&&i.formType===`wizard`?i.formType:null,l=(i.sections??[]).filter(e=>e?.visibleWhen!=null).map(e=>e?.name||e?.label||`(unnamed)`).join(`, `);if((0,Q.useEffect)(()=>{!c||!l||console.warn(Ne(c,l))},[c,l]),s)return(0,$.jsx)(ln,{schema:{type:`object-master-detail-form`,objectName:i.objectName,mode:i.mode===`edit`?`edit`:`create`,recordId:i.recordId,initialValues:i.initialValues,initialData:i.initialData,formType:i.formType===`tabbed`?`tabbed`:`simple`,sections:i.sections,fields:i.fields,title:i.title,submitText:i.submitText,cancelText:i.cancelText,showSubmit:i.showSubmit,details:i.subforms,onSuccess:i.onSuccess,onError:i.onError,onCancel:i.onCancel,className:i.className},dataSource:t});if(i.formType===`tabbed`&&i.sections?.length)return(0,$.jsx)(yt,{schema:{...i,formType:`tabbed`,sections:i.sections.map(e=>({name:e.name,label:o(e),description:e.description,columns:e.columns,fields:e.fields,visibleWhen:e.visibleWhen})),defaultTab:i.defaultTab,tabPosition:i.tabPosition},dataSource:t,className:i.className});if(i.formType===`wizard`&&i.sections?.length)return(0,$.jsx)(wt,{schema:{...i,formType:`wizard`,sections:i.sections.map(e=>({name:e.name,label:o(e),description:e.description,columns:e.columns,fields:e.fields})),allowSkip:i.allowSkip,showStepIndicator:i.showStepIndicator,nextText:i.nextText,prevText:i.prevText,onStepChange:i.onStepChange},dataSource:t,className:i.className});if(i.formType===`split`&&i.sections?.length)return(0,$.jsx)(Tt,{schema:{...i,formType:`split`,sections:i.sections.map(e=>({name:e.name,label:o(e),description:e.description,columns:e.columns,fields:e.fields,pane:e.pane,visibleWhen:e.visibleWhen})),splitDirection:i.splitDirection,splitSize:i.splitSize,splitResizable:i.splitResizable},dataSource:t,className:i.className});if(i.formType===`drawer`){let{layout:e,...n}=i,r=i.layout===`vertical`||i.layout===`horizontal`?i.layout:void 0;return(0,$.jsx)(pn,{schema:{...n,layout:r,formType:`drawer`,sections:i.sections?.map(e=>({name:e.name,label:o(e),description:e.description,columns:e.columns,fields:e.fields,collapsible:e.collapsible,collapsed:e.collapsed,visibleWhen:e.visibleWhen})),open:i.open,onOpenChange:i.onOpenChange,drawerSide:i.drawerSide,drawerWidth:i.drawerWidth},dataSource:t,className:i.className})}if(i.formType===`modal`){let{layout:e,...n}=i,r=i.layout===`vertical`||i.layout===`horizontal`?i.layout:void 0;return(0,$.jsx)(gn,{schema:{...n,layout:r,formType:`modal`,sections:i.sections?.map(e=>({name:e.name,label:o(e),description:e.description,columns:e.columns,fields:e.fields,visibleWhen:e.visibleWhen})),open:i.open,onOpenChange:i.onOpenChange,modalSize:i.modalSize,modalCloseButton:i.modalCloseButton},dataSource:t,className:i.className})}return(0,$.jsx)(yn,{schema:i,dataSource:t})},yn=({schema:e,dataSource:t})=>{let{fieldLabel:n,sectionLabel:i}=j(),a=G(),o=r(),s=(0,Q.useCallback)(t=>{if(!o?.isLoaded)return t;let n=[];for(let r of t)o.checkField(e.objectName,r.name,`read`)&&(!o.checkField(e.objectName,r.name,`write`)&&e.mode!==`view`?n.push({...r,readOnly:!0,disabled:!0,description:r.description??`You do not have edit access to this field.`}):n.push(r));return n},[o,e.objectName,e.mode]),[c,l]=(0,Q.useState)(null),[u,d]=(0,Q.useState)([]),[f,p]=(0,Q.useState)(null),[h,g]=(0,Q.useState)(!0),[_,v]=(0,Q.useState)(null),[y,b]=(0,Q.useState)(null),[x,S]=(0,Q.useState)(null);Me(x);let{saveWithOcc:w,conflictDialog:T}=pt(),E=e.customFields&&e.customFields.length>0;(0,Q.useEffect)(()=>{E&&(p(e.initialData||e.initialValues||{}),g(!1))},[E,e.initialData,e.initialValues]),(0,Q.useEffect)(()=>{E?l({name:e.objectName,fields:{}}):e.objectName&&t?(async()=>{try{if(!t)throw Error(`DataSource is required when using ObjectQL schema fetching (inline fields not provided)`);let n=await t.getObjectSchema(e.objectName);if(!n)throw Error(`No schema found for object "${e.objectName}"`);l(n)}catch(e){v(e),g(!1)}})():E||g(!1)},[e.objectName,t,E]),(0,Q.useEffect)(()=>{c&&!E&&(async()=>{if(!e.recordId||e.mode===`create`){p(e.initialData||e.initialValues||{}),g(!1);return}if(!E){if(!t){v(Error(`DataSource is required for fetching record data (inline data not provided)`)),g(!1);return}g(!0);try{let n=await t.findOne(e.objectName,e.recordId);p(n)}catch(e){console.error(`Failed to fetch record:`,e),v(e)}finally{g(!1)}}})()},[e.objectName,e.recordId,e.mode,e.initialValues,e.initialData,t,c,E]);let D=(0,Q.useCallback)(e=>e,[]);(0,Q.useEffect)(()=>{if(E&&e.customFields){d(e.customFields.map(D)),g(!1);return}if(!c)return;let r=[],i=m(c,o?.getObjectApiOperations?.(e.objectName)),a=!(e.mode===`edit`?i.edit:e.mode!==`create`||i.create),s=e.fields||Object.keys(c.fields||{});(Array.isArray(s)?s:Object.keys(s)).forEach(t=>{let i=typeof t==`string`?t:t.name;if(!i)return;let o=c.fields?.[i];if(!o&&!E)return;let s=e.customFields?.find(e=>e.name===i);if(s)r.push(D(s));else if(o){let s={name:i,label:n(e.objectName,i,o.label||t),type:U(o.type,{multiple:o.multiple}),required:Ie(o,Fe(e)),disabled:e.readOnly||e.mode===`view`||o.readonly||a,placeholder:o.placeholder,description:o.help||o.description,validation:he(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`)&&(s.options=o.options||[],s.multiple=o.multiple),(o.type===`number`||o.type===`currency`||o.type===`percent`)&&(s.inputType=`number`,s.min=o.min,s.max=o.max,s.step=o.precision?10**-o.precision:void 0),o.type===`date`&&(s.inputType=`date`),o.type===`datetime`&&(s.inputType=`datetime-local`),(o.type===`text`||o.type===`textarea`||o.type===`markdown`||o.type===`html`)&&(s.maxLength=o.maxLength??o.max_length,s.minLength=o.minLength??o.min_length),(o.type===`file`||o.type===`image`)&&(s.inputType=`file`,s.multiple=o.multiple,s.accept=o.accept?o.accept.join(`,`):void 0,o.max_size)){let e=`Max size: ${ge(o.max_size)}`;s.description=s.description?`${s.description} (${e})`:e}o.type===`email`&&(s.inputType=`email`),o.type===`phone`&&(s.inputType=`tel`),o.type===`url`&&(s.inputType=`url`),o.type===`password`&&(s.inputType=`password`),o.type===`time`&&(s.inputType=`time`),(o.type===`formula`||o.type===`summary`||o.type===`auto_number`)&&(s.disabled=!0),o.visible_on&&(s.visibleOn=o.visible_on),r.push(s)}}),d(r),!E&&e.recordId&&e.mode!==`create`&&t||g(!1)},[c,e.fields,e.customFields,e.readOnly,e.mode,e.objectName,E,e.recordId,t,o]);let O=(0,Q.useCallback)(async(n,r)=>{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&&E)return e.onSuccess&&await e.onSuccess(n),n;let i=Ot(n,E?null:c);if(Fe(e)&&(i=Be(i,E?null:c)),o?.isLoaded&&i&&typeof i==`object`){let t={};for(let n of Object.keys(i))o.checkField(e.objectName,n,`write`)&&(t[n]=i[n]);i=t}try{let n;if(e.submitHandler)n=await e.submitHandler(i);else if(!t)throw vt();else if(e.mode===`create`)n=await t.create(e.objectName,i);else if(e.mode===`edit`&&e.recordId){let r=await w({dataSource:t,objectName:e.objectName,recordId:e.recordId,payload:i,baseRecord:f});if(r.status===`cancelled`)return;n=r.result}else throw Error(`Invalid form mode or missing record ID`);if(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,Ae(i,n));if(!r.ok){Z.error(r.refusal),b({message:e.successMessage||(e.mode===`create`?`Created`:`Saved`),refusal:r.refusal});break}S({url:r.url,delayMs:t.delayMs??0});break}case`continue`:break;default:{let n=t.kind===`thank-you`&&t.message?t.message:e.successMessage||(e.mode===`create`?`Created`:`Saved`);Z.success(n),b({title:t.kind===`thank-you`?t.title:void 0,message:n});break}}}else if(!e.submitHandler){let t=De(e.navigateOnSuccess,n);if(t)return S({url:t,delayMs:0}),n;e.navigateOnSuccess?(console.warn("[ObjectForm] `navigateOnSuccess` was declared but produced no destination:",e.navigateOnSuccess),Z.success(e.successMessage||(e.mode===`create`?`Created`:`Saved`),{description:xt})):Z.success(e.successMessage||(e.mode===`create`?`Created`:`Saved`))}return n}catch(t){throw console.error(`Failed to submit form:`,t),e.onError&&e.onError(t),t}},[e,t,E,o,c,w,f]),k=(0,Q.useCallback)(()=>{e.onCancel&&e.onCancel()},[e]),A=Fe(e),M={...Q.useMemo(()=>A?Le(c,{currentUserId:o.userId}):{},[c,A,o.userId]),...f},N=e.mode===`edit`&&e.recordId&&f&&typeof f==`object`?f:void 0,P=Q.useMemo(()=>{let t=rt(u,c);return e.mode===`create`&&(t=it(t,c)),t},[u,c,e.mode]),F=Q.useMemo(()=>e.sections?.length?null:dn(P,c?.fieldGroups),[e.sections,P,c]),I=e.sections?.length?e.sections:F,[L,ee]=(0,Q.useState)({});if(_)return(0,$.jsxs)(`div`,{className:`p-3 sm:p-4 border border-red-300 bg-red-50 rounded-md`,children:[(0,$.jsx)(`h3`,{className:`text-red-800 font-semibold`,children:`Error loading form`}),(0,$.jsx)(`p`,{className:`text-red-600 text-sm mt-1`,children:_.message})]});if(h)return(0,$.jsxs)(`div`,{className:`p-4 sm:p-8 text-center`,children:[(0,$.jsx)(`div`,{className:`inline-block animate-spin rounded-full h-8 w-8 border-b-2 border-gray-900`}),(0,$.jsx)(`p`,{className:`mt-2 text-sm text-gray-600`,children:`Loading form...`})]});if(y){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:y.title??`Thanks!`}),y.message&&(0,$.jsx)(`p`,{className:`mt-2 text-sm text-muted-foreground`,children:y.message})]});return y.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:y.refusal})]}):e}let te=e.layout===`vertical`||e.layout===`horizontal`?e.layout:`vertical`;if(I?.length&&(!e.formType||e.formType===`simple`)){let t=F?P:u,n=e=>typeof e==`number`&&e>0?Math.min(Math.floor(e),4):void 0,r=I.map(e=>n(e.columns)).filter(e=>e!=null),a=I.reduce((e,t)=>e+(Array.isArray(t.fields)?t.fields.length:0),0),o=n(e.columns)??(r.length?Math.max(...r):Qe(a)),c=[];I.forEach((r,a)=>{let l=new Map(r.fields.map(e=>[typeof e==`string`?e:e.field??e.name,e])),u=Array.from(l.keys()),d=s(t.filter(e=>u.includes(e.name))).map(e=>{let t=l.get(e.name);if(!t||typeof t!=`object`)return e;let n=t,r={...e};return n.visibleOn!=null&&(r.visibleOn=n.visibleOn),n.colSpan!=null&&(r.colSpan=n.colSpan),n.span!=null&&(r.span=n.span),r});if(d.length===0)return;let f=r.name||r.label||String(a),p=r.name?i(e.objectName,r.name,r.label||r.name):r.label,m=L[f]??r.collapsed??!1;p&&c.push({name:`__section_${f}`,label:p,type:`section-divider`,visibleWhen:r.visibleWhen,fields:d.map(e=>e.name),colSpan:4,collapsible:r.collapsible,collapsed:m,onToggle:r.collapsible?()=>ee(e=>({...e,[f]:!m})):void 0});let h=n(r.columns),g=o>1?tt(d,o,h):d;p&&m?c.push(...g.map(e=>({...e,hidden:!0}))):c.push(...g)});let l=c,d=ot(o);return(0,$.jsxs)(`div`,{className:`w-full @container`,children:[(0,$.jsx)(C,{schema:{type:`form`,objectName:e.objectName,fields:l,layout:te,columns:o,...d?{fieldContainerClass:d}:{},defaultValues:M,previousValues:N,showSubmit:e.showSubmit!==!1&&e.mode!==`view`,showCancel:e.showCancel!==!1,submitLabel:e.submitText||(e.mode===`create`?`Create`:`Update`),cancelLabel:e.cancelText,onSubmit:O,onCancel:k}}),T]})}let R=e.sections?.length,z=s(u),B=R?{fields:z,columns:e.columns}:ct(z,c,e.columns,e.mode),V=e.mobile,H=V?.fullscreenLongText?B.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}}):B.fields,ne=V?.stepper,re=V?.stepperMinFields??8,W=Math.max(1,V?.stepperFieldsPerStep??1);if(!e.formType&&!R&&H.length>=2&&(ne===!0||ne===`auto`&&a&&H.length>=re)){let n=H,r=[];for(let e=0;e<n.length;e+=W){let t=n.slice(e,e+W);r.push({name:`step-${Math.floor(e/W)+1}`,label:t[0]?.label||t[0]?.name||`Step ${Math.floor(e/W)+1}`,fields:t})}return(0,$.jsx)(wt,{schema:{...e,formType:`wizard`,sections:r,showStepIndicator:!0},dataSource:t,className:e.className})}let ie={type:`form`,objectName:e.objectName,fields:H,layout:te,columns:B.columns,submitLabel:e.submitText||(e.mode===`create`?`Create`:`Update`),cancelLabel:e.cancelText,showSubmit:e.showSubmit!==!1&&e.mode!==`view`,showCancel:e.showCancel!==!1,resetOnSubmit:e.showReset||e.submitBehavior?.kind===`continue`||!e.submitBehavior&&e.resetOnSuccess&&e.mode===`create`,defaultValues:M,previousValues:N,onSubmit:O,onCancel:k,className:e.className,mobileStickyActions:!!V?.stickyActions};return(0,$.jsxs)(`div`,{className:V?.stickyActions?`w-full pb-20 md:pb-0`:`w-full`,"data-mobile-form":V?`true`:void 0,children:[(0,$.jsx)(C,{schema:ie}),T]})},bn=`https://a.invalid/`,xn=`https://b.invalid/`;function Sn(e){try{return new URL(e,bn).origin===`https://a.invalid`&&new URL(e,xn).origin===`https://b.invalid`}catch{return!1}}function Cn(e){let{navigate:t}=_(),n=(0,Q.useRef)(t);(0,Q.useEffect)(()=>{n.current=t},[t]),(0,Q.useEffect)(()=>{if(!e)return;let t=setTimeout(()=>{let t=Sn(e.url)?n.current:void 0;if(t){t(e.url);return}window.location.href=e.url},e.delayMs);return()=>clearTimeout(t)},[e])}var wn=1e3;function Tn(e){return e?Math.max(0,Math.ceil(e.delayMs/1e3)):null}function En(e){let[t,n]=(0,Q.useState)(e),[r,i]=(0,Q.useState)(()=>Tn(e));return e!==t&&(n(e),i(Tn(e))),(0,Q.useEffect)(()=>{if(!e)return;let t=setInterval(()=>{i(e=>e===null||e<=1?(clearInterval(t),0):e-1)},wn);return()=>clearInterval(t)},[e]),r}var Dn={text:200,email:254,url:2048,phone:32,textarea:5e3,markdown:5e3,html:5e3},On=`_company_website_2`,kn=1500;function An(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 jn(e){return e&&e.map(e=>{let t=Dn[String(e.type||``).toLowerCase()];return!t||(e.maxLength??e.max_length)?e:{...e,maxLength:t}})}var Mn=({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]),Cn(m);let b=En(m),x=e.honeypot===!1?null:e.honeypot||On,S=e.minFillTime??kn,C=(0,Q.useMemo)(()=>jn(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(An(n,e.allowedRedirectHosts)){let t=e.thankYouPage?.redirectDelay??3e3;h({url:n,delayMs:t})}else console.warn(`[EmbeddableForm] Blocked unsafe redirect target:`,n),_(!0)}}catch(e){l(e instanceof Error?e.message:`Failed to submit form. Please try again.`)}finally{s(!1)}},[t,e,u,x,S]),D=(0,Q.useCallback)(()=>{a(!1),l(null),h(null),_(!1)},[]),O=(0,Q.useMemo)(()=>{let t={};return e.branding?.backgroundColor&&(t.backgroundColor=e.branding.backgroundColor),t},[e.branding]);if(i){let t=e.thankYouPage,n=e.texts??{},i=m&&b!==null?(n.redirecting??`Redirecting in {{seconds}} seconds…`).replace(`{{seconds}}`,String(b)):null;return(0,$.jsx)(`div`,{className:`min-h-screen flex items-center justify-center p-4 bg-gradient-to-b from-muted/40 via-background to-background ${r||``}`,style:O,children:(0,$.jsxs)(`div`,{className:`max-w-md w-full bg-card border rounded-xl shadow-sm p-8 text-center space-y-4`,children:[(0,$.jsx)(`div`,{className:`mx-auto inline-flex h-14 w-14 items-center justify-center rounded-full bg-emerald-50 text-emerald-600 dark:bg-emerald-500/10 dark:text-emerald-400`,children:(0,$.jsx)(de,{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)(W,{variant:`outline`,size:`sm`,onClick:D,className:`mt-2`,children:n.submitAnother??`Submit Another Response`}),i&&(0,$.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:i}),g&&n.redirectBlocked&&(0,$.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:n.redirectBlocked})]})})}let k=e.texts??{},A=!!e.consent?.required,j=`${e.formId}-consent`;return(0,$.jsx)(`div`,{className:`min-h-screen flex items-center justify-center p-4 sm:p-6 bg-gradient-to-b from-muted/40 via-background to-background ${r||``}`,style:O,children:(0,$.jsxs)(`div`,{className:`max-w-2xl w-full bg-card border rounded-xl shadow-sm overflow-hidden`,children:[e.branding?.coverImage&&(0,$.jsx)(`div`,{className:`h-28 sm:h-32 w-full bg-cover bg-center`,style:{backgroundImage:`url(${JSON.stringify(e.branding.coverImage)})`},role:`presentation`}),(0,$.jsxs)(`div`,{className:`px-6 sm:px-8 pt-7 pb-5 border-b bg-muted/20`,style:e.branding?.primaryColor?{borderBottomColor:e.branding.primaryColor}:void 0,children:[e.branding?.logo&&(0,$.jsx)(`img`,{src:e.branding.logo,alt:``,className:`h-8 mb-4`}),e.title&&(0,$.jsx)(`h1`,{className:`text-2xl font-semibold tracking-tight text-foreground`,children:e.title}),e.description&&(0,$.jsx)(`p`,{className:`text-sm text-muted-foreground mt-2 leading-relaxed`,children:e.description}),(0,$.jsx)(`p`,{className:`text-[11px] text-muted-foreground/70 mt-3`,"aria-hidden":`true`,children:k.requiredHint??`* Required field`})]}),(0,$.jsxs)(`div`,{className:`relative px-6 sm:px-8 py-6`,children:[c&&(0,$.jsx)(`div`,{role:`alert`,"aria-live":`assertive`,className:`mb-4 p-3 bg-destructive/10 border border-destructive/30 rounded-md text-sm text-destructive`,children:c}),(0,$.jsx)(vn,{schema:{type:`object-form`,objectName:e.objectName,mode:`create`,fields:e.fields,customFields:C,initialData:T,onSuccess:E,submitText:o?k.submitting??`Submitting...`:k.submit??`Submit`},dataSource:w}),x&&(0,$.jsxs)(`div`,{"aria-hidden":`true`,className:`absolute left-[-10000px] top-auto h-px w-px overflow-hidden`,children:[(0,$.jsx)(`label`,{htmlFor:`${e.formId}-${x}`,children:`Do not fill this field`}),(0,$.jsx)(`input`,{ref:v,id:`${e.formId}-${x}`,type:`text`,name:x,tabIndex:-1,autoComplete:`off`,defaultValue:``})]}),e.consent&&(0,$.jsxs)(`div`,{className:`mt-4`,children:[(0,$.jsxs)(`label`,{className:`flex items-start gap-2 text-sm text-foreground cursor-pointer select-none`,children:[(0,$.jsx)(`input`,{type:`checkbox`,id:j,checked:u,onChange:e=>{d(e.target.checked),e.target.checked&&p(null)},"aria-required":A||void 0,"aria-invalid":f?`true`:void 0,"aria-describedby":f?`${j}-error`:void 0,className:`mt-0.5 h-4 w-4 rounded border-input accent-primary`}),(0,$.jsxs)(`span`,{className:`leading-relaxed`,children:[e.consent.label??k.consentLabelDefault??`I agree to the privacy policy.`,A&&(0,$.jsx)(`span`,{"aria-hidden":`true`,className:`text-destructive ml-0.5`,children:`*`}),e.consent.privacyUrl&&(0,$.jsxs)($.Fragment,{children:[` `,(0,$.jsx)(`a`,{href:e.consent.privacyUrl,target:`_blank`,rel:`noopener noreferrer`,className:`underline text-primary hover:opacity-80`,children:k.consentLink??`Privacy policy`})]})]})]}),f&&(0,$.jsx)(`p`,{id:`${j}-error`,role:`alert`,className:`mt-1.5 text-xs text-destructive`,children:f})]}),o&&(0,$.jsxs)(`div`,{className:`mt-3 flex items-center gap-2 text-xs text-muted-foreground`,children:[(0,$.jsx)(ye,{className:`h-3.5 w-3.5 animate-spin`,"aria-hidden":`true`}),(0,$.jsx)(`span`,{children:k.submitting??`Submitting…`})]})]}),(0,$.jsxs)(`div`,{className:`px-6 sm:px-8 py-4 border-t bg-muted/20 flex flex-col sm:flex-row items-center justify-between gap-2`,children:[(0,$.jsxs)(`p`,{className:`inline-flex items-center gap-1.5 text-xs text-muted-foreground`,children:[(0,$.jsx)(ae,{className:`h-3 w-3`,"aria-hidden":`true`}),(0,$.jsx)(`span`,{children:k.secureNotice??`Your information is transmitted securely and only used to respond to your request.`})]}),(0,$.jsxs)(`div`,{className:`flex items-center gap-3 text-xs text-muted-foreground/80`,children:[e.privacyPolicyUrl&&(0,$.jsxs)(`a`,{href:e.privacyPolicyUrl,target:`_blank`,rel:`noopener noreferrer`,className:`inline-flex items-center gap-1 underline hover:text-foreground`,children:[(0,$.jsx)(N,{className:`h-3 w-3`,"aria-hidden":`true`}),k.consentLink??`Privacy policy`]}),(0,$.jsx)(`span`,{children:k.poweredBy??`Powered by ObjectStack`})]})]})]})})};function Nn(e){return e<60?`${Math.round(e)}s`:e<3600?`${Math.floor(e/60)}m ${Math.round(e%60)}s`:`${Math.floor(e/3600)}h ${Math.floor(e%3600/60)}m`}var Pn=({formId:e,formTitle:t,metrics:n,className:r})=>{let i=(0,Q.useMemo)(()=>{if(!n.abandonedSubmissions)return 100;let e=n.totalSubmissions+n.abandonedSubmissions;return e===0?0:Math.round(n.totalSubmissions/e*100)},[n.totalSubmissions,n.abandonedSubmissions]),a=(0,Q.useMemo)(()=>n.dailySubmissions?.length?Math.max(...n.dailySubmissions.map(e=>e.count),1):1,[n.dailySubmissions]);return(0,$.jsxs)(`div`,{className:`space-y-4 ${r||``}`,children:[(0,$.jsxs)(`div`,{children:[(0,$.jsx)(`h2`,{className:`text-lg font-semibold text-foreground`,children:t||`Form Analytics`}),(0,$.jsxs)(`p`,{className:`text-sm text-muted-foreground`,children:[`Form ID: `,e]})]}),(0,$.jsxs)(`div`,{className:`grid grid-cols-1 sm:grid-cols-3 gap-4`,children:[(0,$.jsx)(z,{children:(0,$.jsxs)(Y,{className:`pb-2`,children:[(0,$.jsx)(P,{children:`Total Submissions`}),(0,$.jsx)(R,{className:`text-2xl`,children:n.totalSubmissions.toLocaleString()})]})}),(0,$.jsxs)(z,{children:[(0,$.jsxs)(Y,{className:`pb-2`,children:[(0,$.jsx)(P,{children:`Fill Rate`}),(0,$.jsxs)(R,{className:`text-2xl`,children:[i,`%`]})]}),(0,$.jsx)(X,{children:(0,$.jsx)(`div`,{className:`w-full bg-muted rounded-full h-2`,children:(0,$.jsx)(`div`,{className:`bg-primary rounded-full h-2 transition-all`,style:{width:`${i}%`}})})})]}),(0,$.jsx)(z,{children:(0,$.jsxs)(Y,{className:`pb-2`,children:[(0,$.jsx)(P,{children:`Avg. Completion Time`}),(0,$.jsx)(R,{className:`text-2xl`,children:n.avgCompletionTime?Nn(n.avgCompletionTime):`—`})]})})]}),n.dailySubmissions&&n.dailySubmissions.length>0&&(0,$.jsxs)(z,{children:[(0,$.jsx)(Y,{children:(0,$.jsx)(R,{className:`text-sm font-medium`,children:`Daily Submissions`})}),(0,$.jsx)(X,{children:(0,$.jsx)(`div`,{className:`flex items-end gap-1 h-32`,children:n.dailySubmissions.map((e,t)=>(0,$.jsxs)(`div`,{className:`flex-1 flex flex-col items-center gap-1`,children:[(0,$.jsx)(`div`,{className:`w-full bg-primary/80 rounded-t transition-all hover:bg-primary`,style:{height:`${e.count/a*100}%`,minHeight:e.count>0?`4px`:`0`},title:`${e.date}: ${e.count} submissions`}),(0,$.jsx)(`span`,{className:`text-[10px] text-muted-foreground truncate w-full text-center`,children:e.date.slice(-5)})]},t))})})]}),n.fieldDropOff&&n.fieldDropOff.length>0&&(0,$.jsxs)(z,{children:[(0,$.jsxs)(Y,{children:[(0,$.jsx)(R,{className:`text-sm font-medium`,children:`Field Completion Rates`}),(0,$.jsx)(P,{children:`Percentage of users who completed each field`})]}),(0,$.jsx)(X,{children:(0,$.jsx)(`div`,{className:`space-y-3`,children:n.fieldDropOff.map((e,t)=>(0,$.jsxs)(`div`,{className:`space-y-1`,children:[(0,$.jsxs)(`div`,{className:`flex justify-between text-sm`,children:[(0,$.jsx)(`span`,{className:`text-foreground`,children:e.label}),(0,$.jsxs)(`span`,{className:`text-muted-foreground`,children:[e.completionRate,`%`]})]}),(0,$.jsx)(`div`,{className:`w-full bg-muted rounded-full h-1.5`,children:(0,$.jsx)(`div`,{className:`rounded-full h-1.5 transition-all ${e.completionRate>=80?`bg-green-500`:e.completionRate>=50?`bg-yellow-500`:`bg-destructive`}`,style:{width:`${e.completionRate}%`}})})]},t))})})]})]})},Fn=({schema:e})=>{let t=p()?.dataSource,n=f(),r=e.parentObject||n?.objectName,i=e.parentId||e.recordId||n?.recordId,[a,o]=(0,Q.useState)([]),[s,d]=(0,Q.useState)([]),[m,h]=(0,Q.useState)(!0),[g,_]=(0,Q.useState)(!1),[v,y]=(0,Q.useState)(!1),[b,x]=(0,Q.useState)(null),[S,C]=(0,Q.useState)(null);(0,Q.useEffect)(()=>{let n=t;if(!n||typeof n.getObjectSchema!=`function`)return;if(!e.childObject){C(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 r=!1;return n.getObjectSchema(e.childObject).then(e=>{r||C(e??null)}).catch(()=>{r||C(null)}),()=>{r=!0}},[t,e.childObject]);let w=JSON.stringify(e.filter??null),T=JSON.stringify(e.sort??null),E=(0,Q.useMemo)(()=>c(e.filter),[w]),D=(0,Q.useMemo)(()=>O(e.sort),[T]),k=(0,Q.useCallback)(async()=>{if(!t||!i){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}h(!0);try{let n={[e.relationshipField]:i},r=(await t.find(e.childObject,{$filter:E===void 0?n:l(n,E),...D?{$orderby:D}:{},$top:e.limit??500}))?.data??[];o(r.map(e=>({...e}))),d(r.map(e=>({...e}))),y(!1)}catch(e){x(e?.message||`Failed to load line items`)}finally{h(!1)}},[t,i,e.childObject,e.relationshipField,e.limit,E,D]);(0,Q.useEffect)(()=>{k()},[k]);let A=(0,Q.useCallback)(e=>{o(e),y(!0)},[]),j=(0,Q.useCallback)(async()=>{if(!(!t||!i||!e.childObject)){_(!0),x(null);try{let n=!!(r&&e.totalField),o=n?{[e.totalField]:It(a,e.amountField||`amount`)}:{},c=Pt(r??``,i,o,[{childObject:e.childObject,relationshipField:e.relationshipField,rows:a,original:s,childSchema:S}]);n||(c=c.slice(1)),c.length&&await u(t,c),await k()}catch(e){x(e?.message||`Failed to save line items`)}finally{_(!1)}}},[t,i,a,s,e,r,k,S]),M=(0,Q.useMemo)(()=>({columns:e.columns,total_field:e.totalField?e.amountField||`amount`:void 0,min_rows:e.minRows,max_rows:e.maxRows,allow_add:!e.readonly,allow_delete:!e.readonly}),[e]);return(0,$.jsxs)(z,{className:J(`shadow-none`),children:[(0,$.jsxs)(Y,{className:`flex-row items-center justify-between gap-2 pb-2`,children:[(0,$.jsx)(R,{className:`text-sm font-medium`,children:e.title||`Line Items`}),!e.readonly&&(0,$.jsx)(W,{type:`button`,size:`sm`,onClick:j,disabled:g||m||!v||!i,children:g?`Saving…`:`Save`})]}),(0,$.jsxs)(X,{children:[b&&(0,$.jsx)(`p`,{className:`mb-2 text-sm text-destructive`,children:b}),e.childObject?m?(0,$.jsx)(`p`,{className:`py-6 text-center text-sm text-muted-foreground`,children:`Loading…`}):i?(0,$.jsx)(K,{value:a,onChange:A,field:M,readonly:e.readonly}):(0,$.jsx)(`p`,{className:`py-6 text-center text-sm text-muted-foreground`,children:`Save the record first to add line items.`}):(0,$.jsxs)(`p`,{className:`py-6 text-center text-sm text-muted-foreground`,"data-testid":`line-items-no-child-object`,children:[`This panel has no child object configured: set`,` `,(0,$.jsx)(`code`,{className:`font-mono`,children:`childObject`}),` to the object whose rows it lists.`]})]})]})},In=T(({schema:e,dataSource:t})=>{let n=x(t);return(0,$.jsx)(D,{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:S(`object-form`,e?.objectName),children:e=>(0,$.jsx)(vn,{schema:e,dataSource:n})})});k.register(`object-form`,In,{namespace:`plugin-form`,label:`Object Form`,category:`plugin`,inputs:[{name:`objectName`,type:`string`,label:`Object Name`,required:!0},{name:`fields`,type:`array`,label:`Fields`},{name:`mode`,type:`enum`,label:`Mode`,enum:[`create`,`edit`,`view`]},{name:`formType`,type:`enum`,label:`Form Type`,enum:[`simple`,`tabbed`,`wizard`,`split`,`drawer`,`modal`]},{name:`sections`,type:`array`,label:`Sections`},{name:`title`,type:`string`,label:`Title`},{name:`description`,type:`string`,label:`Description`},{name:`layout`,type:`enum`,label:`Layout`,enum:[`vertical`,`horizontal`,`inline`,`grid`]},{name:`columns`,type:`number`,label:`Columns`},{name:`defaultTab`,type:`string`,label:`Default Tab`},{name:`tabPosition`,type:`enum`,label:`Tab Position`,enum:[`top`,`bottom`,`left`,`right`]},{name:`allowSkip`,type:`boolean`,label:`Allow Skip Steps`},{name:`showStepIndicator`,type:`boolean`,label:`Show Step Indicator`},{name:`splitDirection`,type:`enum`,label:`Split Direction`,enum:[`horizontal`,`vertical`]},{name:`splitSize`,type:`number`,label:`Split Panel Size (%)`},{name:`splitResizable`,type:`boolean`,label:`Split Resizable`},{name:`drawerSide`,type:`enum`,label:`Drawer Side`,enum:[`top`,`bottom`,`left`,`right`]},{name:`drawerWidth`,type:`string`,label:`Drawer Width`},{name:`modalSize`,type:`enum`,label:`Modal Size`,enum:[`sm`,`default`,`lg`,`xl`,`full`]},{name:`modalCloseButton`,type:`boolean`,label:`Modal Close Button`,description:`Show the modal presentation’s close button. Read at ObjectForm.tsx:361 and honoured by ModalForm.`},{name:`contentLayout`,type:`enum`,label:`Modal Content Layout`,enum:[`simple`,`tabbed`],description:"How the modal presentation lays out sections. `tabbed` needs more than one section to differ from `simple` (ModalForm.tsx:638)."},{name:`confirmOnDiscard`,type:`boolean`,label:`Confirm On Discard`,description:"Ask before discarding unsaved edits when a drawer/modal form is dismissed. Set `false` to close immediately."},{name:`recordId`,type:`string`,label:`Record Id`,description:"The record to load in `edit` / `view` mode. Leave unset for `create`."},{name:`customFields`,type:`array`,label:`Custom Fields`,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`,label:`Initial Values`,description:"Values to prefill in `create` mode."},{name:`initialData`,type:`object`,label:`Initial Data`,description:"Alternate spelling of `initialValues` that the drawer/modal presentations read FIRST (`schema.initialData || schema.initialValues`). Prefer `initialValues` in new schemas."},{name:`readOnly`,type:`boolean`,label:`Read Only`,description:"Render every field read-only, whatever `mode` says."},{name:`submitText`,type:`string`,label:`Submit Button Text`},{name:`cancelText`,type:`string`,label:`Cancel Button Text`},{name:`nextText`,type:`string`,label:`Next Button Text`,description:`Label of the next-step button (wizard).`},{name:`prevText`,type:`string`,label:`Previous Button Text`,description:`Label of the previous-step button (wizard).`},{name:`showSubmit`,type:`boolean`,label:`Show Submit Button`},{name:`showCancel`,type:`boolean`,label:`Show Cancel Button`},{name:`showReset`,type:`boolean`,label:`Show Reset Button`},{name:`submitBehavior`,type:`object`,label:`Submit Behavior`,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`,label:`Success Message`,description:"Toast shown after a successful submit. Ignored when `submitBehavior` or `navigateOnSuccess` is set."},{name:`navigateOnSuccess`,type:`string`,label:`Navigate On Success`,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`,label:`Reset On Success`,description:`Clear the form after a successful submit instead of keeping the saved values.`},{name:`mobile`,type:`object`,label:`Mobile Overrides`,description:'Phone-only presentation overrides, e.g. `{ stepper: "auto", stepperMinFields: 8, fullscreenLongText: true }`.'}]}),k.register(`form`,In,{namespace:`view`,skipFallback:!0,label:`Data Form View`,category:`view`,inputs:[{name:`objectName`,type:`string`,label:`Object Name`,required:!0},{name:`fields`,type:`array`,label:`Fields`},{name:`mode`,type:`enum`,label:`Mode`,enum:[`create`,`edit`,`view`]}]});var Ln=T(({schema:e})=>{let t=(0,Q.useContext)(h);return(0,$.jsx)(D,{schema:e,dataSource:t?.dataSource,testId:`embeddable-form`,errorTitle:`This form’s data source could not be resolved`,children:e=>(0,$.jsx)(Mn,{config:e,dataSource:t?.dataSource})})});k.register(`embeddable-form`,Ln,{namespace:`plugin-form`,label:`Embeddable Form`,category:`plugin`,inputs:[{name:`formId`,type:`string`,label:`Form ID`,required:!0},{name:`objectName`,type:`string`,label:`Object Name`,required:!0},{name:`title`,type:`string`,label:`Form Title`},{name:`description`,type:`string`,label:`Description`},{name:`fields`,type:`array`,label:`Fields`},{name:`allowMultiple`,type:`boolean`,label:`Allow Multiple Submissions`}]}),k.register(`form-analytics`,({schema:e})=>(0,$.jsx)(Pn,{formId:e.formId,formTitle:e.formTitle,metrics:e.metrics||{totalSubmissions:0}}),{namespace:`plugin-form`,label:`Form Analytics`,category:`plugin`,inputs:[{name:`formId`,type:`string`,label:`Form ID`,required:!0},{name:`formTitle`,type:`string`,label:`Form Title`},{name:`metrics`,type:`object`,label:`Submission Metrics`}]});var Rn=T(({schema:e})=>{let t=(0,Q.useContext)(h)?.dataSource??void 0;return(0,$.jsx)(D,{schema:e,dataSource:t,testId:`object-master-detail-form`,errorTitle:`This form’s data source could not be resolved`,children:e=>(0,$.jsx)(ln,{schema:e,dataSource:t})})});k.register(`object-master-detail-form`,Rn,{namespace:`plugin-form`,label:`Master-Detail Form`,category:`plugin`,inputs:[{name:`objectName`,type:`string`,label:`Parent Object`,required:!0},{name:`mode`,type:`enum`,label:`Mode`,enum:[`create`,`edit`]},{name:`sections`,type:`array`,label:`Parent Sections`},{name:`details`,type:`array`,label:`Detail Collections`,required:!0},{name:`recordId`,type:`string`,label:`Parent Record Id`,description:"The parent record to load in `edit` mode. Leave unset for `create`."},{name:`formType`,type:`enum`,label:`Parent Form Presentation`,enum:[`simple`,`tabbed`],description:`How the PARENT half of the form is presented. The detail grids below it are unaffected.`},{name:`fields`,type:`array`,label:`Parent Fields`,description:"Which parent fields to show, in order. Ignored when `sections` is given — sections carry their own field lists."},{name:`title`,type:`string`,label:`Title`},{name:`submitText`,type:`string`,label:`Submit Button Text`,description:`Label of the button that saves the parent and every detail row in one batch.`},{name:`cancelText`,type:`string`,label:`Cancel Button Text`},{name:`showSubmit`,type:`boolean`,label:`Show Submit Button`},{name:`initialValues`,type:`object`,label:`Initial Values`,description:"Values to prefill on the PARENT record in `create` mode."},{name:`initialData`,type:`object`,label:`Initial Data`,description:"Alternate spelling of `initialValues` the renderer also reads (MasterDetailForm.tsx:602). Prefer `initialValues` in new schemas."},{name:`taxRateField`,type:`string`,label:`Tax Rate Field`,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 zn={object:`childObject`,filter:!0,sort:!0,limit:`limit`},Bn=T(({schema:e})=>(0,$.jsx)(D,{schema:e,mapping:zn,testId:`record-line-items`,errorTitle:`This line-items panel’s data source could not be resolved`,children:e=>(0,$.jsx)(Fn,{schema:e})}));k.register(`line_items`,Bn,{namespace:`record`,skipFallback:!0,label:`Line Items`,category:`record`,inputs:[{name:`childObject`,type:`string`,label:`Child Object`,required:!0},{name:`relationshipField`,type:`string`,label:`Relationship Field`,required:!0},{name:`columns`,type:`array`,label:`Columns`,required:!0},{name:`totalField`,type:`string`,label:`Parent Total Field`},{name:`amountField`,type:`string`,label:`Amount Column`}]});export{ot as a,Be as c,tn as i,gn as n,Qe as o,pn as r,Xe as s,vn as t};